ROS#:Message typeの追加
UnityとROSを通信させるのにROS#(ros sharp)を使った。Message typeを追加する方法が公式Wikiにあったので、忘れないようにメモ。
動作環境
- Unity動作用PC
- Windows 10
- ROS# v1.3
- Unity 2018.2.17f1
- Visual studio 2017
- ROS動作用PC
- Ubuntu16.04
- ROS Kinetic Kame
ソースコードのDL
ROS#のリリースページからソースコードをダウンロードする。
Message typeの作成
ros-sharp/Libraries/RosBridgeClient/Messages
にMessage typeが定義されている。今回は公式wikiと同様に/Standard
にFloat32.csを作成してみる。
using Newtonsoft.Json; namespace RosSharp.RosBridgeClient.Messages.Standard { public class Float32 : Message { [JsonIgnore] public const string RosMessageName = "std_msgs/Float32"; public float data; public Float32() { data = 0; } } }
ソリューションのビルド
ros-sharp\Libraries\RosSharp.sln
をVisual Studioで開く。
ビルド設定
ビルドタブから構成マネージャーを選択。
アクティブソリューション構成をRelease、アクティブソリューションプラットフォームをAny CPUに設定して閉じる。
スクリプトの追加
ソリューションエクスプローラーから先ほど作成したスクリプト(今回はFloat32.cs)を追加する。
ビルド
ビルドタブからソリューションのビルドを実行。
RosBridgeClient.dllの置き換え
ros-sharp\Libraries\RosBridgeClient\bin\Release\RosBridgeClient.dll
をUnityプロジェクト内のAssets\RosSharp\Plugins
にコピペする。
Publisherの作成
FloatPublisher.csを作成。公式wikiのサンプルはこんな感じ。
namespace RosSharp.RosBridgeClient { public class FloatPublisher : Publisher<Messages.Standard.Float32> { public float messageData; private Messages.Standard.Float32 message; protected override void Start() { base.Start(); InitializeMessage(); } private void InitializeMessage() { message = new Messages.Standard.Float32 { data = messageData }; } private void Update() { message.data = messageData; Publish(message); } } }
このスクリプトをRosConnectorと同じGameObjectにアタッチして、好きなtopic名や数値を入れてみる。
動作確認
ROSを起動するPC側のターミナルで下記コマンドを実行し、Rosbridge serverを起動する。
$ roslaunch rosbridge_server rosbridge_websocket.launch
Unityを実行すると、Messageがpublishされる。ターミナルに下記コマンドを入力することでtopicを確認できる。
$ rostopic list /float_test
Messageの内容を出力する際は下記のコマンド。
$ rostopic echo /float_test data: 3.0
参考
ROS#のセットアップはこちら。
ROSのセットアップはこちら。