M5Atomとmicro-ROSを使って、複数の超音波センサー情報を配信するROS2プログラムです。
- PlatformIOを使ったビルド環境、micro-ROSエージェント実行環境
- PC: TRIGKEY Green G5
- OS: Ubuntu 22.04.3
- ROS2 : Humble
- Software: PlatformIO, VSCode, docker
- micro-ROSクライアント実行環境と周辺ユニット
- M5Atom Lite
- M5Stack用Port.A I2C拡張ハブユニット(PaHUB2 Unit)
- M5Stack用超音波測距ユニット I2C 3つ
- micro-ROSクライアントとmicro-ROSエージェントの接続方法
- USBケーブルを使ったシリアル通信
シリアル通信のデバイスファイルを確認
$ ls -l /dev/ttyACM* /dev/ttyUSB*
ls: '/dev/ttyACM*' にアクセスできません: そのようなファイルやディレクトリはありません
crw-rw---- 1 root dialout 188, 0 2月 23 20:38 /dev/ttyUSB0
M5Atomが /dev/ttyUSB0 で接続している場合、下記コマンドでmicro-ROSエージェント起動。
docker run -it --rm -v /dev:/dev -v /dev/shm:/dev/shm --privileged --net=host microros/micro-ros-agent:$ROS_DISTRO serial --dev /dev/ttyUSB0 -v6
エージェント → クライアントの順で起動する必要があります。
エージェントを起動したら、M5Atomを一度リセットすることでエージェント → クライアントの順になります。
正しく起動できたら、/ultrasonic0, /ultrasonic1, /ultrasonic2というトピックが配信されます。
$ ros2 topic list
省略
/ultrasonic0
/ultrasonic1
/ultrasonic2
Topicの内容
$ ros2 topic echo /ultrasonic0
header:
stamp:
sec: 0
nanosec: 0
frame_id: /ultrasonic0
radiation_type: 0
field_of_view: 0.5235999822616577
min_range: 0.019999999552965164
max_range: 4.5
range: 0.036396000534296036
Topicの送信頻度
$ ros2 topic hz /ultrasonic0
average rate: 2.381
min: 0.420s max: 0.420s std dev: 0.00011s window: 4
average rate: 2.381
min: 0.420s max: 0.420s std dev: 0.00020s window: 7
- M5unified を使ってなるべく機種に依存しないように作っていますが、M5Atom Lite 以外の対応予定はありません。
- 例: M5AtomS3, M5AtomS3 Liteの場合、内蔵I2Cを使い、シリアル通信はUSBSerialを使う必要があります。また、M5AtomS3は動作しますが遅いです。
micro-ROS for PlatformIO
micro-ROS for Arduinoのサンプル
micro-ROS for PlatformIOにはサンプルが少ないので、こちらが参考になる。micro-ROS for PlatformIOで使うには微妙に修正が必要。
M5ATOM Liteのドキュメント
PaHUB2のドキュメント
M5Stack用超音波測距ユニットのドキュメント
sensor_msgs/Range Message