ラズパイからM5Stackへメッセージを届けてBEEP音でお知らせ(ROS2/DDS)


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

M5Stackからラズパイへメッセージを届けてみる(ROS2/DDS)でやったことの逆バージョンです。

せっかくLCDとスピーカー付きのマイコン(M5Stack)なので両方使ってみます。

メッセージは “トピック” 上で送受信されます。

 

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

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

 

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

Micro-XRCE-DDS-Agent はJetsonにインストールしてみます。

段取りはこうなります。

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

2:Jetson Nanoにドッカーコンテナを導入してROS2とMicro-XRCE-DDS-Agent をインストール

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

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

5:M5StackでSubscriberを作成

6:通信実行して、M5Stackにメッセージが届いたらLCDに表示してBEEP音を鳴らす

 


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

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

とりあえずコンテナの作成までをやっておきます。

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

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

 


2:Jetson Nanoにドッカーコンテナを導入してROS2とMicro-XRCE-DDS-Agent をインストール

で使ったドッカーイメージをまんまここでも使います。

ただし、コンテナの作成は以下のようなオプションでやります。

Jetsom Nano のIPアドレスが192.168.0.40 だとします。

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

コンテナ名はmy_ros2-A

イメージはwisteriahill/ros:foxyrosbasel4tr32.4.4

コンテナ作成

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

起動

 

アップデート&アップグレード

 

セットアップが終わったらCtrl + D で終了。

Micro-XRCE-DDS-Agent をインストールします。

コンテナ再起動

gitパッケージをインストール

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

 

 


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

コンテナを起動

以下を作成

publisher.py

topic名は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でSubscriberを作成

 

Arduino IDE を起動

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

以下のコードで、XXXX、YYYYを書き換えてコピー・ペースト

上記に設定で例として、AgentのIPアドレスは192.168.0.40 だとしています。

topic名はchatterにしています。

 


6:通信実行して、M5Stackにメッセージが届いたらLCDに表示してBEEP音を鳴らす

 

●Jetson Nano でAgent を起動しておきます。

 

●Arduino IDE でSubscriber コード をM5Stack に書き込みます。

書き込み終了後、Agent を探して(discover)、接続を確立します。

 

●ラズパイでPublisher を起動してメッセージを送信。

 

M5Stack にメッセージが届いて、BEEP音が1秒鳴ります。

 


Appendix

M5Stack 側でPublisher とSubscriber を合体してみます。

publishとsubscribeでtopic名を変えておきます。一緒だと自分のpublishしたメッセージを自分でsubscribeするので、M5Stack画面がややこしくなります。

要変更:SSID、SSID_PW、AGENT_IP

Arduion IDE コード

publishのtopic:chatter

subscribeのtopic:listener

 

Subscriber.py

topic:chatter

Publisher.py

topic:listener

メッセージを変更すると、Subscriberに表示されるお尻の通し番号が更新されます。

topicを「chatter」にすれば、M5StackのSubscriberはこのpublishをスルーし、上記のSubscriberはこのpublishを1度だけ受信します。

 


 

Be the first to comment

Leave a Reply

Your email address will not be published.


*