d-satoです。Jetson Nano Mouseを動かしてみようの連載の第2回の後編です。ROSについての前編はこちらです。
前回はJetson Nano Mouseのセットアップをして実際に機械学習を活用したサンプルプログラムを動かせるようにするまでを紹介しました。今回はJetson Nano MouseをROS/ROS 2のインターフェース経由で操作する方法を紹介します。
この連載については第1回の「Jetson Nano Mouseのセットアップ方法」の記事にて紹介していますのでそちらをご覧ください。
この記事ではROS 2 Dashingのインストール方法を簡単に紹介した後に、Raspberry Pi Mouse制御用のROS 2パッケージをJetson Nano Mouseで使う方法を紹介します。なおROS MelodicとROS 2 Dashingは同じJetson Nano内にインストールできますので環境変数の切り替え等の作業を行えば共存できます。
紹介するサンプルについて
今回紹介するサンプルはRaspberry Pi Mouse用に開発されたロボット制御用のROSパッケージとサンプル集のROSパッケージの2つです。
ロボット制御用のROSパッケージ: https://github.com/rt-net/raspimouse2
サンプル集のROSパッケージ: https://github.com/rt-net/raspimouse_ros2_examples
Jetson Nano Mouseはアールティの車輪型プラットフォームロボットのひとつです。すでに販売しているRaspberry Pi Mouseと足回り(モータやタイヤなどの走行に関わる駆動部およびそのフレーム)は共通部品で、ソフトウェアインターフェースに関しても概ね同じになるように設計されています。
そのため、Raspberry Pi Mouseのソフトウェアに関してもほぼそのままJetson Nano Mouseで活用することができます。Raspberry Pi Mouseを使っていて「ラズパイをJetsonに置き換えられたらなあ」と思ったときはJetson Nano Mouseを入手するとソフトウェアに大きく手を加えずにJetson Nano Mouseに移行できます。
このサンプルの実行に必要なもの
このサンプルの実行には以下のものと十分な実験スペースが必要です。
- セットアップ済みJetson Nano Mouse
- Jetson Nano Mouse用電源(バッテリでも電源変換ケーブルつきACアダプタでも可)
- 操作用ノートパソコン
- ゲームパッド(オプション)
Jetson Nanoは第1回の記事でセットアップしたOSで動かすことを想定しています。
また今回紹介する例では別売のUSB接続の無線LANアダプタを取り付けています。
今回はゲームパッドにロジクール社のF710を使用しています。なくても問題ありません。
ROS 2のインストール
2020年11月12日現在、Jetson NanoのOS(L4T)はUbuntu 18.04がベースとなっています。
今回はUbuntu 18.04向けにリリースされているROS 2のディストーションのうち、LTSバージョンのROS 2 Dashing Diademata(以下、ROS Dashing)を使用します。
ROS Dashing公式のインストール方法の資料はこちらで公開されています。
また、「ラズパイマウスでROS2動かしてみた」の連載では日本語でインストール方法を説明しています。
今回はインストーラを使ったインストール方法で説明をします。
まずインストーラをダウンロードするためにgit
コマンドを使用するので以下のコマンドでインストールします。
sudo apt install -y git
以下のコマンドを実行してインストーラをダウンロード&実行してROSをインストールします。環境にもよりますが完了までは10分程度かかる場合があります。
git clone https://github.com/Tiryoh/ros2_setup_scripts_ubuntu.git ./ros2_setup_scripts_ubuntu/ros2-dashing-desktop-main.sh
インストーラが問題なく実行できれば以下のメッセージが表示されます。
Success installing ROS dashing Run 'source /opt/ros/dashing/setup.bash'
以下のコマンドでインストールした環境変数等の設定を読み込みます。
source /opt/ros/dashing/setup.bash
以上でROSのインストールは完了です。
追加でROSのパッケージをダウンロードしてくるワークスペースを用意しておきます。
mkdir -p ~/ros_ws/dashing/src
これでワークスペースの作成も完了です。
使用するROSパッケージのインストール
次は使用するROSパッケージのインストールをします。
まずはGitHubから必要なGitリポジトリをダウンロードしてきます。
cd ~/ros_ws/dashing/src git clone https://github.com/rt-net/raspimouse2 git clone https://github.com/rt-net/raspimouse_ros2_examples
次に依存関係にあるソフトウェアと追加で必要なソフトウェアをインストールします。
rosdep install -r -y -i --from-paths . sudo apt install ros-dashing-teleop-twist-keyboard
rosdepをはじめとするROSのパッケージ管理ツールについては以下のブログにまとまっています。詳しく知りたい方はこちらでご確認ください。
ここまで必要なソフトウェアは全てダウンロードできているはずなので、colconを使って~/ros_ws/dashing/src
以下のROSパッケージをビルドします。
cd ~/ros_ws/dashing colcon build --symlink-install source ./install/local_setup.bash
以上でROSパッケージのインストールは完了です。
ROSサンプルの実行
Raspberry Pi Mouseの実機を動かすためのソフトウェアは基本的にJetson Nano Mouseでそのまま利用できます。
今回はRaspberry Pi MouseのROSサンプルを動かす方法を行紹介しますが、基本的に以下に書かれているREADMEにそってそのまま動かす方法を紹介しています。
なおJetson Nano Mouseには2020年11月12日現在LiDARを取り付けるオプションがありません。よってLiDARとLiDARマウントに取り付けて使用する前提のIMUのサンプルは使用できません。
(ソフトウェアは対応していますので自作のマウントを取り付ければ使用できます。)
今回使用するサンプル集のROSパッケージの使い方については以下のページで詳しく説明しています。
キーボードからロボットを操作
まずは動かしてみましょう。モータのハードウェアスイッチをオンにします。
スイッチの先が外側(基板上スイッチ付近にONと書いてある方)に向いていたらモータのスイッチはオンです。
端末を2つ起動してそれぞれSSHでJetson Nano Mouseにログインしておきます。
どちらの端末でも以下のコマンドを実行してROSの設定を読み込んでおきます。
cd ~/ros_ws/dashing source install/local_setup.bash
1つ目の端末(上の図の左側)では
ros2 run raspimouse raspimouse
と実行します。
その後、2つ目の端末(上の図の右側)では
ros2 lifecycle set raspimouse configure ros2 lifecycle set raspimouse activate ros2 service call /motor_power std_srvs/SetBool '{data: true}'
とコマンドを実行します。
1つ目の端末では、raspimouseノードを起動し、2つ目の端末での実行結果が表示されています。
Turned motors onと表示されていればエラーなくモータがオンになっています。
2つ目の端末上では、raspimouseノードのライフサイクルの状態を変更し、モータをオンにしています。
(ここではROS 2のライフサイクルについては説明を省略します。ライフサイクルについての詳細は https://design.ros2.org/articles/node_lifecycle.html を参照してください。)
このまま2つ目の端末上で
ros2 run teleop_twist_keyboard teleop_twist_keyboard
とコマンドを実行します。
デフォルトのパラメータでは早すぎるので速度を下げます。Xキーを連打して0.15m/s以下まで下げます。
このまま2つ目の端末上でIで前進、>で後進、Jで左旋回、Lで右旋回、Kで停止の司令をロボットに送ることができます。
ゲームパッドからロボットを操作
つぎにゲームパッドからロボットを操作します。
ゲームパッドはROS Dashingとrt-net/raspimouse_ros2_examplesがインストールされたノートパソコンにつなぎます。
(F710はそのままではJetPack 4.3をインストールしたJetson Nanoで認識されないためです。NVIDIAのフォーラムでも報告があります。)
今回も端末を2つ起動します。1つ目(以下の図の左側)はSSHでJetson Nano Mouseにログインして、ROSの設定を読み込んでおきます。2つ目(以下の図の右側)は操作用のノートパソコン内でROSの設定を読み込んでおきます。
1つ目の端末(上の図の右側)では
ros2 run raspimouse raspimouse
と実行します。
その後、2つ目の端末(上の図の左側)では
ros2 launch raspimouse_ros2_examples teleop_joy.launch.py joydev:="/dev/input/js0" joyconfig:=f710 mouse:=false
とコマンドを実行します。
teleop_joy.launch.py
がraspimouseノードのライフサイクルの状態を変更し、モータをオンにしているので、ライフサイクルの状態を変更するコマンドは実行する必要がありません。
L1を押しながら左右のジョイスティックを操作してロボットを操作できます。
※動画は前編で紹介したROS Melodicのraspimouse_ros_examplesを実行したときの様子です。ほぼ同じように動きます。さらにrqtを使ってカメラの状態やセンサ状態を表示しています。
まとめ
前回に引き続きJetson Nano MouseはRaspberry Pi Mouseのソフトウェア資産を活用できることを紹介しました。
今回はRaspberry Pi MouseのROS 2用のソフトウェアをほぼそのまま実行してみました。
次回は先月公開したGazeboでのシミュレーション用パッケージについて紹介する予定です。
今回紹介したROS 2のソフトウェアについては触れませんが、第1回や第2回前半にて紹介したソフトウェアについてブログよりも詳しく説明するセミナーを開催しております。定期開催予定です。
ぜひJetson Nano Mouseのご購入をご検討ください!