
micro-ROSをRaspberrypi picoで動かすまで
この記事ではplatformIOで開発しているraspberrypi picoにmico-ROSを入れてサンプルを動かすところまで書いていきたいと思います。
弊校のロボコン部では現時点で主にRaspberrypi picoを使っています。そこで、現在の回路を引き継ぎつつmRosを動かす方法を備忘録としてまとめていきます
環境
raspberrypi pico
platformio 6.1.16
ubuntu 22.04
ros2 humble
(ros2 humbleがインストールされている前提で話を進めます)
ワークスペースの作成
まず初めにmicro-ROS用にワークスペースを作成します。主にagentを動かすために使用します。agentはマイコンとpc上のROS2との通信を仲介します。
mkdir microros_ws
cd microros_ws
git clone -b humble https://github.com/micro-ROS/micro_ros_setup.git src/micro_ros_setup
sudo apt update && rosdep update
rosdep install --from-paths src --ignore-src -y
colcon build
source install/local_setup.bash
次にファームウェア ワークスペースを作成し、ファームウェアをビルドします
ros2 run micro_ros_setup create_firmware_ws.sh host
ros2 run micro_ros_setup build_firmware.sh
source install/local_setup.bash
platformIOでプロジェクトを作る
vscodeを使用して開発を進めていきたいと思います。vscodeにplatformIOの拡張機能が入っている前提で話を進めます。
sshでvscodeを使用したときにplatformIOのhomeが何故か表示されない現象があるので(僕の環境だけかもしれませんが)コマンドでインストールまでの手順を示しておきます。
pip3 install platformio
pio --version
pio init -b pico
platformio.iniを次のように編集してmicro-ROSのライブラリをインストールします。(使用したリポジトリ: https://github.com/micro-ROS/micro_ros_platformio)
[env:pico]
platform = raspberrypi
board = pico
framework = arduino
lib_ldf_mode = chain+
board_microros_distro = humble
lib_deps =
https://github.com/micro-ROS/micro_ros_platformio
upload_protocol = picotool
ここでplatformにhttps://github.com/maxgerhardt/platform-raspberrypi.gitを使用したところエラーが発生して半日ぐらい溶かしたので気をつけてください。(どうにかしたい…)
platformio.iniを保存すると勝手にライブラリのインストールが始まると思います。
.pio/libdeps/pico/micro_ros_platformio/examples/micro-ros_publisher/src/Main.cpp (サンプルプログラム) を src/ にコピーしてビルドします。画面下のチェックボタンかコマンド(pio run)
picoをusbで繋いでアップロードします。ここで問題なく書き込めれば問題ないのですが、アップロードでエラーが発生した場合は次のコマンドを試してみてください
echo 'SUBSYSTEM=="usb", ATTRS{idVendor}=="2e8a", ATTRS{idProduct}=="0003", MODE:="0666", GROUP="plugdev"' | sudo tee /etc/udev/rules.d/99-pico.rules
sudo udevadm control --reload-rules
sudo udevadm trigger
sudo usermod -aG plugdev $USER
agentの実行
はじめにつないだpicoのディレクトリ(今回は/dev/ttyACM0)を次のコマンドで確認します。つなげる前とつなげた後で実行結果を比較して増えたものがpicoのディレクトリです
ls /dev/tty*
これ以降に出てくる /dev/ttyACM0 を適宜手元の環境のものに読み替えて実行してください。
次に権限を渡して、agentを実行します
sudo chmod 666 /dev/ttyACM0
sudo usermod -aG dialout $USER
cd microros_ws
source install/setup.bash
ros2 run micro_ros_agent micro_ros_agent serial --dev /dev/ttyACM0 -b 115200
うまく実行できると画像のようになります。
うまくいかない場合は一度USBを抜き差ししてみてください。

agentを起動できたら次のコマンドでトピックの存在の確認とechoで動作確認をします
ros2 topic list
ros2 topic echo /micro_ros_platformio_node_publisher
次のようにカウントアップされていきます
data: 0
---
data: 1
---
data: 2
---
data: 3
---
最後に
今回も最後まで読んでいただきありがとうございました。rosのはじめの記事がmROSでいいのかわかりませんが少しでも参考になればいいなと思います。
最後に何かうまく動かないときはrebootしたりcache削除したりissue眺めたりするとなんかいいことあったりするかもしれません…