0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ROS講座125 Unity-ROS#でカスタムmsgを使う

Posted at

環境

この記事は以下の環境で動いています。

項目
CPU Core i5-8250U
Ubuntu 18.04
ROS Melodic
Gazebo 9.0.0
python 2.7.17

Unityの動作環境は以下です。

項目
ホストマシン Windows10
Unity 2019.4

インストールについてはROS講座02 インストールを参照してください。
またこの記事のプログラムはgithubにアップロードされています。ROS講座11 gitリポジトリを参照してください。

概要

今までUnityのROS#でROSと標準で用意されているmsg(geometry_msgs、sensor_msgsなど)の型をやり取りしてきました。今回は独自に作成したROSの型で通信を行ってみます。

ROS#で標準で用意されている型の確認方法

std_msgsなどの標準の型も定義ファイルがあるのですが、すべてビルドされてDLLになっています。ソースはROS#のリポジトリで確認できます。

独自の型を使う

使い方としてまず独自の型の定義ファイルを生成して、それをスクリプトで使用します。リンクのチュートリアルにあるように、このファイルの生成方法は何通りかあるのですが、ROS#に付属のGUIを使って生成していきます。今回はROS講座で使っているros_lecture_msgsパッケージのCustom.msgを変換して使用します。

msgの定義ファイルの生成

  • msgファイルが入っているROSパッケージをWindowsにコピーします。

  • メニューバーの「RosBridgeClient」->「Auto Generate Message」->「Package Message」を選択します。
    unity_custom_msg_01.png

  • 出てくるGUIでPackage PathとPackage Nameを正確に入れます。

  • 「Generate」を押します。この時に警告が出ますがとりあえず無視します。

unity_custom_msg_02.png

  • 「Assets/RosSharpMessages/RosLecture/msg/Custom.cs」が生成されます。

上記のファイルの使い方

上記のCustom.msgをUnity側からPublishしていきます。

スクリプトの作成

以下のようなスクリプトを作成します

scripts/CustomPublisher.cs
using UnityEngine;

namespace RosSharp.RosBridgeClient
{
    public class CustomPublisher : UnityPublisher<MessageTypes.RosLecture.Custom>
    {

        protected override void Start()
        {
            RosConnector ros_connector = GetComponent<RosConnector>();
            ros_connector.IsConnected.WaitOne(ros_connector.SecondsTimeout * 1000);
            base.Start();
        }

        private void FixedUpdate()
        {
            MessageTypes.RosLecture.Custom message;
            message = new MessageTypes.RosLecture.Custom();
            message.word = "custom msg";
            message.number = 42;
            Publish(message);
        }
    }
}
  • メッセージの型はMessageTypes.RosLecture.CustomのようにMessageTypes.{パッケージ名から_msgsを抜いてキャメルケースにしたもの}.{msg名}になります。
  • あとは標準のmsgと同じようにPublish()でpublishができます。

スクリプトのアタッチ

  • 空のゲームオブジェクトを生成します。
  • これにAssets/RosSharp/Scripts/RosBridgeClient/RosCommuncation/RosConnector.csをアタッチ、urlを記入します。
  • 上記で作ったscripts/CustomPublisher.csをアタッチ、topicを記入します。

実行

  • ROS(Ubuntu)側では以下のように実行します。
rosbridgeの起動
roslaunch rosbridge_server rosbridge_websocket.launch
  • Unityの「Play」ボタンを押します。

するとROS側で以下のようにSubscribeできます。

$ rostopic echo /custom
word: "custom msg"
number: 42

参考

ROS#チュートリアル

目次ページへのリンク

ROS講座の目次へのリンク

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?