未分類

ROS2とArudionoのシリアル通信

大前提

ros2arduinoは、ROS2Dashing環境用に作られている。

Dashingは、Ubuntu18(バイオニック)+ROS2。

最初っからUbuntu20(フォカル)+ROS2Galacticでやったら大失敗した。

ROS2Foxyでの利用に成功した人

作業時のメモ

ESP32

  • リセットは「EN」ボタン。

ポート

  • UDPは2018番が使われている。サンプル
  • USB接続の場合、/dev/ttyUSB0がポート(サンプルだとttyAMC0)
  • 書き込みパーミッション(権限)エラーは、「sudo chmod 666 /dev/ttyUSB0」(管理者権限で/dev/ttyUSB0をチェンジモード666(読み書き可・実行不可))
    全ユーザ444で読みのみ、666は全ユーザ読み書き可、777は全ユーザ読み書き実行可。(/dev/ttyUSB0の初期値は744ぽい)(666だけど結果766たぶん)

UDP(WI-FI接続)

  • 初めてのコネクションエスタブリッシュ(通信確立)までは時間かかる。
  • テザリングでやると、接続機器がスマホで見れて便利。
  • 接続は、XRCE-DDS通信の確立→ROSデーモンが通信検知?→トピックに表示される。
  • 文法が合ってれば、XRCE-DDSのAgentに「nc -u localhost 2018」(ローカルホスト(自分)の2018番ポートにu(UDP)通信でネットキャスト)で送っても認識しそう。
  • Agentの通信確立で動き出す。動くときはAgentの通信確立すぐROS2でも認識。
  • lsof -iUDP で見るとROSデーモンも動いてる。
  • ROSデーモンを再起動(「ros2 daemon stop」→「ros2 daemon start」)すると、2018番ポート(XRCE−DDS Agent)で指定したポートを読みに来てる
  • ノードやトピック名を変えると、ノード接続の残骸が残るときがある(ないのに認識した状態)
  • 「ESP32 → PC上XRCE-DDS-AGENT」、「XRCE−DDS Agent → ROS2」どちらの接続についても、
    ターミナル再起動、ログアウト、PC再起動で治るときあった。(ポートとか名前とか、接続のリセット効果?)

Serial通信()

  • シリアル通信は、アルディーノの書き込みにも使ってるので、ポートがぶつかる。
  • シリアルモニタも使ってるので、Arduino IDEのシリアルモニタを開いてると影響する(エラー?)

パッケージ

ROSはrosserialパッケージを使って通信。

ROS2では、マイコン側にMicroROSを入れることで、XRCE-DDS通信プロトコルに沿った通信でマイコンをノードとして扱える。

そのプロトコル用のパッケージがros2arduino。ArduinoIDEのライブラリでもパッケージが公開されてる。Arduino

Gitのデータも、ArudionoIDEのライブラリデータもマイコン側のプログラム。

ros2arduinoはマイコン用(ArudionoIDE等でマイコンにコンパイルする)。

Micro-XRCE-DDS Agentは、Linuxパッケージ。

参考資料

やり方に関しての資料はたくさんあったけど、つなぐまでに躓いたのでメモしつつ開通作業

ROS2の通信方法

OGMで標準規格化されたDDS-XRCEというプロトコルを使って、ROS2とマイコン(Arduinoなど)間は接続される。

_images/xrcedds_architecture.png
<引用:https://micro-xrce-dds.docs.eprosima.com/en/latest/introduction.html>

DDS-XRCE通信のエージェントソフトをLinux・PC側で起動させ、クライアントソフトをマイコン側に組み込む。

マイコン用のプログラムはこれ。もしくは、ArduinoIDEにあるros2arduinoライブラリを使ってもできる。

PC側エージェントソフト(eProsima)

eProsimaのXRCE-DDSを利用する。

Arduino等マイコン側クライアントソフト(Robotis)

Robotis社(韓)のマイコンにMicro-ROSを入れるライブラリーを用いる。

参考資料

ros2arduino

(たぶん)最小コスト・最短時間でROS2にマイコンを繋ぐ話

ESP32をROS2ノードに(ros2arduino)

Arduino(ESPr Developer(ESP-WROOM-02))をROS2ノードにしてpublishしてみた

rosserial (ROS1限定ぽい)

ROS講座46 ROSでarduinoを使う(ArudionoにROSをスタック)

ROS講座44 シリアル通信とROSをつなぐ(ROSからシリアル通信)

PlatformIO で Arduino のプロジェクトを管理する

rosserial を用いてROSとArduinoの間の通信を行う

作り始めから最後までつづった製作記(PINTOさん)

パッケージの系譜

rosserial(Ard側:rosserial_arduino、PC側:rosserial_client)

ros2arduino
必要:Micro-XRCE-DDS Agent for FastRTPS(対応ハード

 

 

 

 

-未分類

© 2021 技術科・情報科のサイト Powered by AFFINGER5