Ubuntu 18.04 なPCとM5Stack GrayとをROS2で結んでみたので忘れないようにメモ。
参考にしたのは以下のサイト
- https://index.ros.org/doc/ros2/Installation/Dashing/Linux-Install-Debians/
- https://speakerdeck.com/anoken/m5stack-x-ros2
- https://micro-xrce-dds.readthedocs.io/en/latest/installation.html
- https://github.com/ROBOTIS-GIT/ros2arduino
使用環境
PC側
- 普通のノートPC(本当はあまり普通じゃない GPD MicroPCだけど変わらないはず)
- Ubuntu 18.04
- Visual Studio Code
- vscode の Platform IO 拡張
M5Stack側
- M5Stack Gray (多分 Basic でも Fire でも同じ)
インストール作業いろいろ
ROS2のインストール
以下のサイトの手順にてROS2 Dashing Diademataをインストールした。「Install additional RMW implementations」以外は全て実施した。(手順は省略)
https://index.ros.org/doc/ros2/Installation/Dashing/Linux-Install-Debians/
python-rosdep2 パッケージをインストールした後で、以下を行った。
sudo rosdep init rosdep update
サンプルプログラムのインストール
「ROS2ではじめよう次世代ロボットプログラミング」で勉強中なので、書籍で説明されていたサンプルコードを使った。(丁寧でわかりやすいです)
あらかじめ working と ros2_ws のフォルダは作成済み。
cd ~/working git clone https://github.com/youtalk/get-started-ros2.git cd get-started-ros2 git submodule update --init cd ~/ros2_ws ln -s ~/working/get-started-ros2/ros2 src rosdep install --from-paths src --ignore-src -r -y colcon build
colcon build が何度か失敗したけど、やり直したら全てビルドできた。不思議。
Micro-XRCE-DDSのインストール
M5Stackは、Micro-XRCE-DDSをインストールしたPCと接続するとROS2でつながれるらしい。そこでMicro-XRCE-DDSをインストールする。以下のページを見ながらインストール。
https://micro-xrce-dds.readthedocs.io/en/latest/installation.html
ほぼ上の通りだが、 https://speakerdeck.com/anoken/m5stack-x-ros2?slide=16 によると、cmake のところでオプション指定しているので、そのように変更した。それがどんな意味を持っているか(まだ)わかっていない。
cd ~/working git clone https://github.com/eProsima/Micro-XRCE-DDS.git cd Micro-XRCE-DDS mkdir build cd build cmake -DTHIRDPARTY=ON -DCONFIG_UDP_TRANSPORT_MTU=4096 -DCONFIG_SERIAL_TRANSPORT_MTU=4096 .. make sudo make install
ros2arduino のインストール
M5Stack 側のプログラムでは ros2arduino のライブラリが必要となるのでインストールする。vscode + platformio で開発しているので 、PIO Home から Libraries で ros2arduino を検索してインストールする。非常に簡単。
プログラミング
今回はテストとしてchatterプログラムを使用し、PC側をListener 、M5Stack側をPublisherとした。
PC側のプログラミング
PC側については、ふつうにROS2のプログラムを作成する。先ほどビルドしたROS2のサンプルプログラムとして入っているものをそのまま使用した。
. ~/ros2_ws/install/setup.bash ros2 run hello_world listener
上記のサンプルでは、chatterトピックのメッセージを受け取って画面に表示するものである。別のターミナルを開いて以下を実行すれば、PC内で動作確認できる。
. ~/ros2_ws/install/setup.bash ros2 run hello_world talker
動作を確認したら talker は止めておく。
M5Stack 側のプログラミング
vscode でPIO HomeからNew Project を選んで新規プロジェクトを作成する。Nameに適当な名前を入力し、Boardで適切なデバイスを選択し(使ったのは M5Stack GREY ESP32)、FrameworkはArduinoとした。
Libraries で Installed を選んで ros2arduino の Examplesを探した。今回は、 publisher_wifi_udp というそれらしいものを選んで内容をコピーし、 src/main.cpp に丸ごと貼り付けた。
サンプルからの変更点としては、以下の通り。(サンプルを見ればわかるので詳細は省略)
- 先頭に #include <M5Stack.h> を挿入した。
- SSID, SSID_PW を適切な内容に変更した。
- AGENT_IP をPCのIPアドレスにした。
- 27行目付近にある “arduino_chatter” を “chatter” に変更した。
- setup に、適宜 M5.begin やら M5.print などを入れ、動作しているかわかるようにした。
あとは普通にビルドして、M5Stack に転送。転送すると自動的に起動するが、とりあえず放置。
動作確認
PC側では、ROS2のノード(今回は chatter の listener)と、Micro-XRCE-DDSのエージェントが必要となる。ノードの起動は上で行ったので、Micro-XRCE-DDSを起動させる。
MicroXRCEAgent udp -p 2018
ポート番号は ros2arduino のサンプルに記述されているものを指定した。
次に M5Stack をリセットして起動しなおす。アクセスポイントに接続できれば、Micro-XRCE-DDSのエージェントに接続にいく。(なので先にエージェントを起動しておく必要がある)エージェントのログに、session established と表示されれば無事に接続が済んでいる。
ばっちスクショだが、上のようになればOK。左側にMicroXRCEAgentのログ、右側にM5Stackからのメッセージが表示されている。
環境構築に少し手間取ったが、ROS2でPCとM5Stackが簡単につながるようになったのは嬉しい。これで何を作ろうかな。