クワマイでもできる

クワマイでもわかる

ROS#:Message typeの追加

UnityとROSを通信させるのにROS#(ros sharp)を使った。Message typeを追加する方法が公式Wikiにあったので、忘れないようにメモ。

動作環境

  • Unity動作用PC
  • 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.slnVisual Studioで開く。

ビルド設定

ビルドタブから構成マネージャーを選択。

f:id:kuwamai:20181125135332p:plain

アクティブソリューション構成をRelease、アクティブソリューションプラットフォームをAny CPUに設定して閉じる。

f:id:kuwamai:20181125160829p:plain

スクリプトの追加

ソリューションエクスプローラーから先ほど作成したスクリプト(今回はFloat32.cs)を追加する。

f:id:kuwamai:20181125155716p:plain

ビルド

ビルドタブからソリューションのビルドを実行。 f:id:kuwamai:20181128185619p:plain

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名や数値を入れてみる。

f:id:kuwamai:20181129200252p:plain

動作確認

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のセットアップはこちら。