環境
この記事は以下の環境で動いています。
項目 | 値 |
---|---|
CPU | Core i5-8250U |
Ubuntu | 22.04 |
ROS2 | Humble |
Flutter | 3.22.2 |
概要
ROS2自体はロボットの認識・制御を対象としたフレームワークであり、Rviz2などのデバッグ用のGUIはあるものシステムとしてのUI系(特に入力)に弱い点があります。このために今回はUIに特化したフレームワークであるFlutterをROS2と接続させることに挑戦してみます。
最終目標とするシステム全体
タッチパネルでロボットに指令を送ること、ロボットの状態を表示できることを目指します。HDMI接続のタッチパネルをUbuntuに接続することも考えられますが、入手性やコストを考えてネットワーク経由で接続したAndroidタブレットでROS2を操作することを目標とします。
以下のようにタブレットで操作をしたら、REST APIでROS2のノードに接続して、ロボット側の状態はWebSocketを使って受信します。
Flutter
Flutterはモバイル向けのフレームワークです。特徴として
- OSSであり、無料で利用できる。
- (基本的に)同じコードでWindows、Linux、Android、iOS用のビルドを作成できる
※iOSビルドをするにはMacが必須 - Windows、Linux、Macで開発が出来る
ことが特徴です。
Ubuntu22.04でのインストール
flutter本体のインストール
sudo snap install flutter --classic
Google Chromeのインストール
必須ではないですが、デバッグツールとして使用します。
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/googlechrom-keyring.gpg] http://dl.google.com/linux/chrome/deb/ stable main" | sudo tee /etc/apt/sources.list.d/google-chrome.list
curl -fsSL https://dl.google.com/linux/linux_signing_key.pub | sudo gpg --dearmor -o /usr/share/keyrings/googlechrom-keyring.gpg
sudo apt update
sudo apt install google-chrome-stable
flutter doctorでの確認
インストール状況をチェックできるツールがあります。
flutter doctor
以下のようにAndroid関連以外は[✓]表示になっているはずです。
(後ほどandroid SDKのインストールを扱います)
Running flutter doctor...
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 3.19.3, on Ubuntu 20.04 (LTS), locale en)
[!] Android toolchain - develop for Android devices
[✓] Chrome - develop for the web
[!] Android Studio (not installed)
[✓] Linux toolchain - develop for Linux desktop
[✓] VS Code (version 1.86)
[✓] Connected device (1 available)
[✓] Network resources
! Doctor found issues in 2 categories.
サンプルの実行
プロジェクトの作成
mkdir ~/flutter_workspace
cd ~/flutter_workspace
flutter create myapp
プロジェクトのビルド・実行
cd ~/flutter_workspace/myapp
flutter run -d linux
実行前にビルドを行います。しばらく時間がかかります。ビルド後に以下の画面が出現します。
表示されたウィンドウの「×」ボタンを押すか、実行したターミナルで「q」を押すとウィンドウが閉じます。