UnityとRaspberry PiをROSで繋ぐ
- 2020.12.19
- Raspberry Pi
以前の記事でソケット通信でUnityからRaspberry Piにデータを送信できるようになりましたが、ROSを使うと非常に簡単に接続できたので備忘録として残しておきます。
セットアップ
Raspberry PiにはROSがインストールされているとして、Unity(Windows)側の準備を行います。UnityでROSを使用するにはROS#というライブラリを使います。具体的なセットアップの方法は下記のブログで紹介されています。
プログラム
今回はRaspberry Pi側がPublisher、UnityがSubscriberとします。Publisher側はrostopic pubで済ませるとして、Unity側のプログラムを作りました。ROS#のスクリプトの中に色んなデータをやり取りするPublisher、Subscriberのプログラムがあるのでそれを参考にしました。今回は単純に文字列を受け取ってコンソールに表示するだけの簡単な物です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
using UnityEngine; namespace RosSharp.RosBridgeClient { public class SubscribeTest : Subscriber<Messages.Standard.String> { protected override void Start() { base.Start(); } protected override void ReceiveMessage(Messages.Standard.String message) { Debug.Log(message.data.ToString()); } } } |
スクリプトは、空のオブジェクトを作ってRosConnectorと、上記のスクリプトをアタッチします。RosConnectorで通信先のRaspberry PiのIPアドレスを指定します。ポートは変えられるのかもしれませんが、デフォルトのままにしています。また、SubscribeTestではトピック名を指定します。
実行結果
Raspberry Pi側で下記のコマンドを実行してサーバーを実行した後、Unityを実行します。
1 |
roslaunch rosbridge_server rosbridge_websocket.launch |
その後、rostopic pubでメッセージを配信すると、Unity側で受信出来ていることが確認できます。
今回は文字列でしたが、ROS#のスクリプトを見ると画像もやり取り出来るようなので、とても使い道が多そうです。
-
前の記事
PythonのThreadをまとめて止める 2020.12.13
-
次の記事
Djangoアプリを作る (初期設定) 2021.01.10