趣旨
このページはメモです。間違っているかもしれません(多分全部はあってない)。
自分がArduinoとROS2を繋ぐためにいろいろと探したときに勘違いした点をメモしておきます。
使えるパッケージは3種類
- rosserial(ROS1専用)
- ros2arduino(ROS2-Dashingまで)
- Micro-ROS(ROS-Foxy)
最新環境で使うならMicro-ROS一択
最初に困ったのが、古い記事にたくさんヒットしたこと。
ざっくり、rosserialはROS1専用。ROS2はサポート外。ROS1がPython2でROS2が3だからか、ROS2からはXRCEーDDS通信プロトコルだからか、ROS1しか対応してない。
ros2arduinoは、ROS2用。ただし、ROS2-Dashingまでの対応。最初これで作った。しかし、SLAM_toolsがROS2-Dashing非対応だったので、DashingよりFoxyが使いたくて断念。
Micro-ROSは、ros2arduinoの上位版。正式にMicro-DDS通信。
Micro-ROSは、マイコン側のファムウェアを書き換えている。マイコンからの発信自体がMicro-ROSとしてXRCE-DDSプロトコルで通信をしている。なので、ROS2側のパッケージもちゃんとROS2上にXRCE-DDS通信のクライアント(受信口)を開いている。
ros2arduinoでは、XRCE-DDS通信プロトコルではあったけど、通信制御はROS2外部?
Arduinoは使えない
ArduinoはUnoなど非対応。コスパいいのは無線付き上位互換ArduinoのESP32。(1300円ぐらい)
Ubuntuバージョンで使えるパッケージが異なる。
DashingはUbuntu18まで、FoxyはUbuntu20以上、なので、ROS2-Foxy + Micro-ROSにするためにはUbuntu20にする必要あり。
逆に、Micro-ROS使えばDashingまで降りなくても通信可能。
謝辞
ROSではじめるホビーロボット 番外編2【物理本+PDF】 - こそこそ団グッズショップ - BOOTH
ROSではじめるホビーロボット 番外編【PDF】 - こそこそ団グッズショップ - BOOTH
チュートリアルの日本語化だけではなく、細かい説明に非常に助かりました。
また、あらましの分からない自分にとっては、何ができて、今は何ができない(開発中)なのか知ることができて良かったです。多謝。