32
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ROS/ROS2Advent Calendar 2020

Day 23

Micro-XRCE-DDSが試せる環境 2020年末版

Last updated at Posted at 2020-12-23

はじめに

ROS2からリソースが限定された組み込みデバイス(resource-constrained microcontroller、以降 microcontrollerと表記します)がサポートの対象に含まれるようになりました。microcontrollerが直接ROSをお話しできるのは夢が広がります。

※ ROS1にもシリアル接続専用ですがrosserial( http://wiki.ros.org/rosserial )がありますね

microcontrollerの性能アップや、オープンなRTOS(Real-time operating system)の充実といったことが、この進化の後押しをしているかと思います。

とはいえ、そのままのDDSを扱うのはmicrocontrollerには少し荷が重いため、The OMG DDS for eXtremely Resource Constrained Environment standard( DDS-XRCE : https://www.omg.org/spec/DDS-XRCE/ )では、microcontroller向けのプロトコルが定義されています。その実装の1つがeProsima社が公開しているMicro-XRCE-DDSです。

このMicro-XRCE-DDSの環境を構築するためには

  • Micro-XRCE-DDSのClientが動作する組み込み環境
  • Micro-XRCE-DDSのAgentおよび接続先のROS2ノードが動作する環境

の2つが必要となります。また、Micro-XRCE-DDSのバージョンと、対応するROS2のバージョンも影響してきます。

そこで今回は、いくつかの環境を用意し、サンプルを動作させてみて、2020年末時点でのMicro-XRCEが試せる環境を検証してみようと思います。

※時間がたりなく、一部まだ検証中です。確認が取れ次第、随時更新いたします。

システム構成

システム構成のポイントは6つ(図の①〜⑥)あるかと思います。

image.png

① Microcontroller

Micro-XRCE-DDS Clientが動作するハードウェアであり、実際にモータ等のハードウェアを制御します。

今回、手持ちのもので、動作報告があるもの(最後にリンク先をまとめておきます)を中心に8台を試します。ほとんどは秋月電子通商千石電商共立電子マルツスイッチサイエンス等で個人購入できます。大きさの参考のために、一番下中央に、Raspberry Pi Zero Wを置きました。

micon.jpeg

  1. Arduino Zero MKR (秋月電子)
  2. Seeeduino XIAO (秋月電子)
  3. STM32 Discovery kit IoT node (STMicro eStore)
  4. STM32 Nucleo F767ZI (スイッチサイエンス)
  5. M5Stack Core Gray(スイッチサイエンス)
  6. M5StickC(スイッチサイエンス)
  7. M5 ATOM Lite (スイッチサイエンス)
  8. GR-ROSE (秋月電子)

手持ちがなく、今回試してないですが、以下も入手可能です。

以下で、搭載されているプロセッサの種別と簡単な特徴をまとめてみました。

# Microcontroller プロセッサ 特徴
1 Arduino Zero MKR SAMD21(M0+) Eterhnet、CAN、RS485、リレーのシールドが別売りであり。
2 Seeeduino XIAO SAMD21(M0+) 小さくて安い(約500円)。リチウム電池の充電および管理機能チップを搭載し、Groveコネクタが付いた拡張基板あり。
3 STM32 Discovery kit IoT node Cortex-M4 IoT Kitということで、WiFi/BluetoothやNFC、9軸センサ、ToFセンサー等が搭載されている。
4 STM32 Nucleo F767ZI Cortex-M7 Cortex-M7 216MHz, Flash 2048kB, RAM 512kBというハイスペック。
5 M5Stack Core Gray ESP32 WiFi/Bluetoothにディスプレイ、バッテリーが標準搭載。多数の拡張モジュールが発売されている。
6 M5StickC ESP32 WiFi/Bluetoothに小型ディスプレイ、バッテリーが標準搭載で約1500円
7 M5 ATOM Lite ESP32 WiFi/Bluetooth搭載で小さくて安い(約900円)
8 GR-ROSE RX65N EthernetとWiFi搭載。外部電源入力(4.5V~18V)がありモーターに電源供給可能。半二重回路対応のシリアルI/FとRS485があり、コマンド方式サーボをそのまま接続可能。
- ROBOTIS OpenCR Cortex-M7 DYNAMIXELのI/F(TTL/RS485)と外部電源入力(7-24V)あり。TurtleBot3に搭載されているもの。
- Olimex STM32-E407 Cortex-M4 micro-ROSのリファレンスボード
- Teensy 4.1 Cortex M7 600MHzというハイパフォーマンス。CANとイーサネットPHYを搭載。

② PC / Single board Computer

Micro-XRCE-DDSのAgentとROS2が動作するハードウェアになります。

1つは、Intel版のMacBook AirにLinux(Ubuntu)をインストールしたものを使用しました。このPCにはUbuntu 20.04 LTSとROS2のFoxyをインストールしています。ROS2からは、WindowsやMacもサポート対象となっていますが、今回は試してません。

次に、64bitのArm版 Linuxが動作するSingle board Computerとして、以下のものを使用しました。

image.png

  1. Jetson Nano (スイッチサイエンス)
  2. NanoPi NEO2 (秋月電子)

Jetson NanoはJetpack 4.4.1-b50(Ubuntu 18.04 LTS)とROS2 dashingを、NanoPi NEO2にはArmbian 20.11 BionicにROS2 dashingをインストールしています。NanoPi NEO2は、Armbian Focalのイメージも公開されているのですが、まだ試せていません。

他にもRaspberry Pi 3/4は64bit版のUbuntu serverでROS2が動作します。64bit版のraspbianで動くかはためしたことがないのでわかりません。

③ Micro-XRCE-DDS Client

microcontroller側でROS2と通信するためのライブラリ群であり、今回は以下の3つを試しています。

現状、ros2arduinoとGR-ROSEはDashingまでのサポートとなっており、micro-ROSはDashingとFoxyをサポートしています。ただし、micro-ROSはDashingでのサポートデバイスは多くなく、今回はFoxyのみを使用しています。

④ ROS2

ここまでの説明で既にふれていますが、ROS2のバージョンは

  • Dashing
  • Foxy

から、使用するMicro-XRCE-DDS Clientの状況で決まってきます。

ros2arduinoとGR-ROSEの場合はDashingを、micro-ROSの場合はFoxyを選択するのがよいかと思います。

⑤ Micro-XRCE-DDS Agent

Agentについては、eProsima製のMicro XRCE-DDSの一択かと思います。

ただし、使用するClientとバージョンを合わせる必要がありますので、必要に応じてtagを切り替えてソースを取得してビルドして使用します。

micro-ROSでは、micro-ROS-Agentというパッケージを作成できるので、それを使うこともできます。

⑥通信インターフェース

microcontrollers側に搭載されているか、使用するMicro-XRCE-DDS Clientでサポートされているかによって限定されますが、

  • Serial
  • Ethernet
  • WiFi

の3種類があります。一部のClientではTCPがサポートされてない場合があるので注意ください。

以下に簡単にまとめてみました。A/B/Cは、A: ros2ardino, B: microROS, C: GR-ROSEライブラリに対応します。

# Microcontroller 搭載されてるI/F A B C 備考
1 Arduino Zero MKR Serial O - - Ethernetシールドが別売りであるが対応しているかは未確認
2 Seeeduino XIAO Serial O - -
3 STM32 Discovery kit IoT node Serial, WiFi - O -
4 STM32 Nucleo F767ZI Serial, Ethernet - O -
5 M5Stack Core Gray Serial, WiFi O O - Ethernetモジュールが別売りであるが対応しているかは未確認
6 M5StickC Serial, WiFi O O -
7 M5 ATOM Lite Serial,WiFi O O -
8 GR-ROSE Serial, Ethernet, WiFi - - O

確認結果

では、いろいろな組み合わせで確認していきます。

情報は、12/23時点での状況です。逐次確認を行って追加、修正していきます。動いたという情報ありましたら、コメントでお知らせいただければこちらでも確認して修正いたします。

1. ros2arduino

まずはros2arduinoについて。

Arduino Zero MKR

開発環境はArduino IDEを使用しました。gitからzipをダウンロードして、ライブラリーをインクルードで導入し、サンプルをビルドしました。

最初にJetson NanoでV1.3のAgentを起動して確認。

【結果】
〇 Agentへの接続
ros2 topoc listでpublishされている/arduino_chatterが表示される
ros2 topic echoでメッセージの受信

 Arduino Zero MKR                    Jetson Nano
+-----------------+              +----------+---------+
|ros2arduino 0.2.1|--- Serial ---|Agent V1.3| Dashing |
+-----------------+              +----------+---------+

次にNanoPi NEO2でV1.3のAgentを起動して確認。

【結果】
△ Agentへの接続 ※initの表示はでるが、その後のcreate clientの表示がでない
ros2 topoc listでpublishされている/arduino_chatterが表示される
ros2 topic echoでメッセージの受信

 Arduino Zero MKR                    NanoPi NEO2
+-----------------+              +----------+---------+
|ros2arduino 0.2.1|--- Serial ---|Agent V1.3| Dashing |
+-----------------+              +----------+---------+

初っ端からつまづきました。ここで、ros2arduinoのバージョンを0.1.4に落としてみました。

【結果】
〇 Agentへの接続
ros2 topoc listでpublishされている/arduino_chatterが表示される
ros2 topic echoでメッセージの受信

 Arduino Zero MKR                    Jetson Nano
+-----------------+              +------------+---------+
|ros2arduino 0.1.4|--- Serial ---|Agent V1.1.6| Dashing |
+-----------------+              +------------+---------+

AgentがV1.1.6で動くことが確認できました。

Seeeduino XIAO

開発環境はArduino IDEを使用しました。Arduino Zero MKRをビルドした環境で、ボードだけを切り替えてビルドしました。

最初、USB StackをArduinoにしてビルドしたところ、

image.png

In file included from /Users/masa/Library/Arduino15/packages/Seeeduino/hardware/samd/1.7.9/cores/arduino/USB/USBAPI.h:37:0,
                 from
 ...
exit status 1
ボードSeeeduino XIAOに対するコンパイル時にエラーが発生しました。

というエラーがでたので、TinyUSBに切り替えてビルドしました。

【結果】
〇 Agentへの接続
ros2 topoc listでpublishされている/arduino_chatterが表示される
ros2 topic echoでメッセージの受信

       xiao                            Jetson Nano
+-----------------+              +------------+---------+
|ros2arduino 0.1.4|--- Serial ---|Agent V1.1.6| Dashing |
+-----------------+              +------------+---------+

M5Stack

M5Stack/StickC/Atomの開発環境はArduino IDEを使用できますが、Arduino IDEのエディタ機能がチープなので、Visual Studio CodeでPlatformIOを使ってビルドしました。PlatformIOについては以下を参照ください。

まず、M5Stackについては、まずNanoPi NEO2で確認してみました。

【結果】
〇 Agentへの接続 
ros2 topoc listでpublishされている/arduino_chatterが表示される
ros2 topic echoでメッセージの受信

   M5Stack                     NanoPi NEO2
+-----------------+            +----------+---------+
|ros2arduino 0.2.1|--- WiFi ---|Agent V1.3| Dashing |
+-----------------+            +----------+---------+

うまく動作しました。このままJetson Nanoで確認。

【結果】
〇 Agentへの接続
ros2 topoc listでpublishされている/arduino_chatterが表示される
ros2 topic echoでメッセージの受信

    M5Stack                     Jetson Nano
+-----------------+            +----------+---------+
|ros2arduino 0.2.1|--- WiFi ---|Agent V1.3| Dashing |
+-----------------+            +----------+---------+

Jetson Nanoが悪いのかと思い、急遽、MacのParallels上にインストールしていたUbuntu18.04LTSにAgentを入れてみて確認したのですが、

【結果】
〇 Agentへの接続
ros2 topoc listでpublishされている/arduino_chatterが表示される
ros2 topic echoでメッセージの受信

    M5Stack                      PC(Ubuntu 18.04)
+-----------------+            +----------+---------+
|ros2arduino 0.2.1|--- WiFi ---|Agent V1.3| Dashing |
+-----------------+            +----------+---------+

最新版だと何かがおこっているようです。そこで、Agentのバージョンを1.1.6にして、ros2arduinoを0.1.4としてみて確認してみました。

【結果】
〇 Agentへの接続
ros2 topoc listでpublishされている/arduino_chatterが表示される
ros2 topic echoでメッセージの受信

    M5Stack                       Jetson Nano
+-----------------+            +------------+---------+
|ros2arduino 0.1.4|--- WiFi ---|Agent V1.1.6| Dashing |
+-----------------+            +------------+---------+

無事動作を確認できました。

※M5StickCとAtomについてはこれから確認する予定ですが、おそらくM5Stackで動く条件と同じかと思います。

2. micro-ROS

micro-ROSの環境構築はUbuntu上で行いました。micro-ROSの各ツールはROS2環境でcolconを使ってビルドするので、microcontrollerの組み込み環境(Arduino IED)でビルドできたros2arduinoとは少し勝手が違います。

STM32 Nucleo F767ZI

以下のパラメータでfirmwareを作成。

$ ros2 run micro_ros_setup create_firmware_ws.sh freertos nucleo_f767zi

int32_publisherを、transportにudpを指定して、configure_firmware.shしてビルドしたところ、rosidl_generator_cで<sys/socket.h> がないというエラー発生。現在、対処を調査中。

【結果】
✖ サンプルのビルドでエラー

STM32 Discovery kit IoT node

※現在確認中

M5Stack/StickC/Atom

以下のパラメータでfirmwareを作成してビルドしました。

$ ros2 run micro_ros_setup create_firmware_ws.sh freertos esp32

サンプルにあったint32_publisherを使って動作を確認します。

Agentはmicro-ROS-Agentではなく、Micro-XRCE-DDSのAgentを使って動作確認してみました。

【結果】
〇 Agentへの接続
ros2 topoc listでpublishされている/freertos_int32_publisherが表示される
ros2 topic echoでメッセージの受信

   M5Stack                 PC(Ubuntu 20.04)
+-----------------+            +----------+------+
| micro-ROS:foxy  |--- WiFi ---|Agent V1.3| Foxy |
+-----------------+            +----------+------+

※M5StickCとAtomについてはこれから確認する予定ですが、おそらくM5Stackで動く条件と同じかと思います。

3. GR-ROSE

開発環境は、Arduino IDEライクのIDE for GRを使用します。Version 1.13を使用しました。

サンプルは、udp_talker_besteffortを使用しました。Agentのバージョンはv1.1.6で確認。

【結果】
〇 Agentへの接続
ros2 topoc listでpublishされている/chatterが表示される
ros2 topic echoでメッセージの受信

    GR-ROSE                                 Jetson Nano
+---------------+                     +------------+---------+
|Clientライブラリ|--- WiFi/Ethernet ---|Agent V1.1.6| Dashing |
+---------------+                     +------------+---------+

最後に

想定していた以上に動作が確認できないケースがあり、時間がたりなくなってしまいました。

現在、継続して調査中です。ひとまず公開いたしますが、随時更新していきたく思います。

リンク集

最後に、参考にさせてもらった記事へのリンクを以下にまとめておきます。

32
19
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
32
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?