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


シングルボードコンピュータはすべて同じ構成にしておきます。

Ubuntu  + ROS2 コンテナ

以下をご参照ください。

Jetson(4GB、2GB)

ラズパイ

上記の設定だと、それぞれのコンテナーは以下のコマンドで起動できます。

起動しておきます。

 

こういうネットワークでやってみます。

左上のNano(4GB)からpublishしますが、DOMAIN_IDは4GBとラズパイで同じにしておきます。

(DOMAIN_IDが同じでもtopic名が異なればメッセージは届きません)

ベースになるPublisherとSubscriberのコードはこんな感じです。

クライアント・ライブラリはPython版のrclpy、topic名はchatter


Publisher

参考ソースはROS2のDDSで通信テストに使った
talker.py

このソースではタイマー設定で断続的にpublishが実行されるので、1回だけpublishするようにします。

publisher.py

 


Subscriber

参考ソースはROS2のDDSで通信テストに使った
listener.py

単純化しました。

subscriber.py

 


PublisherとSubscriberのテスト

ラズパイとNano(2GB)で待ち受けます(DDSモデルではこの待ち受けるというイメージは少し違う感じもします….間違っているわけではないけど正しくもない、言葉どおりなら「購読する」ですがこれでは分かってる人以外は分からない、お金の絡まないサブスク?)。

ラズパイではDOMAIN_IDは10にしておきます。

Nano(2GB)ではDOMAIN_IDは11にしておきます。

Nano(4GB)でDOMAIN_IDは10でPublishします。

DOMAIN_IDが同じラズパイではメッセージを受け取っています。

DOMAIN_IDの異なるJetson (2GB) ではメッセージは届きません(というか、スルー/無視しています)。

 

publishのテストはros2コマンドラインインターフェースからも実行できます。

まず先にPythonコンソールなどでpublisherの以下の部分を実行しておきます。

Subscriber として以下を実行

publisherでメッセージを送ります。

Subscriber側でメッセージが標準出力されます。

Publisherを後始末して終了

 

同様にsubscribeのテストを実行する場合

メッセージをpublishするROS2コマンドはこんな感じ

 


Jetson からラズパイにメッセージとして「角度」を送ってサーボモーターのホーンを回転させます。

ラズパイでサーボモーターを制御するのはこのページをご参照ください

 

Suscriberのコードはこんな感じ

subscriber_sg90.py

 

Publisher のコード

publisher_sg90.py

引数で角度を渡します(0~180)

まず、ラズパイ側でメッセージを待ちます。

Jetson からメッセージとして角度を送ります。

 

如何でしょう。モーターのギア音やらジッター現象の振動音でうるさいですが、ホーンがこんなふうに回転すると思います。

 


Appendix

ネットワーク上にどういうnodeがあるの?

ネットワーク上にどういうtopicがあるの?

 


 

Be the first to comment

Leave a Reply

Your email address will not be published.


*