M5Stackからラズパイへメッセージを届けてみる(ROS2/DDS)


こういうWi-Fiプライベート・ネットワークで、M5Stackからラズパイにメッセージを届けてみます。

前回のJetson Nano を使った場合はROS2のDDSでシンプルにPub/Sub通信ができていました。

こんな感じで、メッセージは “トピック” 上で送受信されます。

 

が、M5Stack のようなリソースの小さい環境の場合はMicro-XRCE-DDS というテクノロジーを挟んで使います。

こういうイメージだそうです。Low Resources Device というのがM5Stack (マイコン)になります。

M5stackのMicro-XRCE-DDS-Client としては、ros2arduinoを使ってみます。

Micro-XRCE-DDS-Agent はラズパイにインストールします。

 

段取りはこうなります。

1:ラズパイ4にドッカーコンテナを導入してROS2をインストール

2:ラズパイ4のコンテナにMicro-XRCE-DDS-Agent をインストール

3:ラズパイ4でSuscriber を作成

4:M5Stackにros2arduinoをインストール

5:M5StackでPublisherを作成

6:通信実行

 


1:ラズパイ4にドッカーコンテナを導入してROS2をインストール

以下のページの前半をご参照ください。

まだコンテナは作成しません。

OSはUbuntu Server 20.04 LTS を使うので、Windows などからSSH接続します。

ラズパイ4でROS2を動かしてみる(DDS)

 


2:ラズパイ4のコンテナにMicro-XRCE-DDS-Agent をインストール

のROS2ドッカーイメージを使ってコンテナを作成し、これにMicro-XRCE-DDS-Agent インストールします。

 

ラズパイのIPアドレスを調べておきます(例:192.168.0.34だとします)。

通信は2018番ポートを使ってUDPで行います。

コンテナ名はmy_ros2-A

イメージはwisteriahill/ros:foxy-ros-base-l4t-r32.4.4

sudo docker create -it --name my_ros2-A --network host -p 192.168.0.34:2018:2018 -p 192.168.0.34:2018:2018/udp wisteriahill/ros:foxy-ros-base-l4t-r32.4.4

WARNINGが出ますが、気にしない

コンテナを起動

アップデート&アップグレード、パッケージのインストール

Micro-XRCE-DDS-Agentをインストール

 


3:ラズパイ4でSuscriber を作成

subscriber.py
ノード名:listener
トピック名:chatter

 

 


4:M5Stackにros2arduinoをインストール

まず、開発環境としてArduino IDE を使います。例えば以下のページの後半をご参照ください。

Jetson Nano にM5Stack 開発環境をセットアップ(メモ)

Arduino IDEで、ros2arduinoをインストールします。

スケッチー>ライブラリをインクルードー>ライブラリを管理を選択

ros2arduinoを検索してインストールします。

このバージョンのメジャー.マイナー番号は2でインストールしたMicro-XRCE-DDS-Agentのバージョン(1.3.0)と関連しています。このページ参照

バージョンは最新(0.2.1)をインストールします。

 


5:M5StackでPublisherを作成

スケッチ例のros2arduinoのPublisher_wifi_udpというコードを参考にします。

このコードをコピーしておきます。

SSID、SSID_PW、AGENT_IPはご自分の環境に合わせて書き換えます。

今回の例ではAGENT_IPは192.168.0.34

ノード名はros2arduino_pub_node

ファイルー>新規ファイル

XXXX、YYYY、ZZZZを書き換えてコピー・ペースト

M5***で記述されている所が追加箇所

下記のコードではトピック名は「arduino_chatter」から「chatter」に変更しておきました。

 


6:通信実行

ラズパイ

SSHを閉じていた場合は再度接続してコンテナーを起動します。

まず、ラズパイ側でAgentを起動しておきます。M5StackのPublisherはこのAgentを探して(discover)接続を確立します。

SSHをもう一つ開いて、コンテナーに入ります。

Subscriberを起動

 

Arduino IDE でM5StackにPublisherコードをコンパイルして書き込みます。

書き込み終了後にAgentを見つけて接続。

M5Stackからメッセージが送信されます。

ラズパイのSubscriberにメッセージが届いています。

 


Micro-XRCE-DDSを使ってpublishされたメッセージは他のノードでもsubscribeできます。

例えばネットワーク内のJetsonにこのページで作成したROS2のコンテナを作って、のsubscriberを起動しておきます。

メッセージが届きます。

DOMAIN_IDが0の場合、受信できます。

メッセージをスルーしたい場合はIDを変えておきます。

ラズパイのみにメッセージを届けたい場合、以下のようにコンテナを作っても可です。

sudo docker create -it --name my_ros2-A -p 192.168.0.34:2018:2018/udp wisteriahill/ros:foxy-ros-base-l4t-r32.4.4

 

 


Appendix

ROS2をWebで使う場合、こういうのもあるようです。

ros2-web-bridge

 


Appendix2

せっかくのM5Stack Gray なのでIMU(慣性計測ユニット)の中のPitch、Roll、Yawの値を取得して、メッセージで送信してみます(要書き換え:SSID、SSID_PW、AGENT_IP)。

こんな感じ。

 

 


 

Be the first to comment

Leave a Reply

Your email address will not be published.


*