YKpages

ロボット分野で勉強したことのまとめ

Unity と ROS の通信 ( ROS# : ros-sharp )

はじめに

UnityアプリとROSの間でデータをやり取りしたい

ROS#というライブラリを使うと簡単に実現できるようです

公式の情報を見ればだいたい分かりますが、 一応メモを残しておきます

github.com

参考

qiita.com

バージョン1.3以降の場合

kuwamai.hatenablog.com

環境

Unity側

  • Windows10
  • Unity 2018.2.8f1
  • ROS# v1.0 (バージョン:v1.3 → v1.0)

ROS側

  • Ubuntu 16.04 LTS
  • ROS Kinetic

ROS#をインポート

GitHubページから最新版UnityPackageをダウンロードしてインポート

UnityのAsset Storeからもインポートできるようです

github.com

ros-sharpパッケージ内にサンプルシーンが入っているのでそれを見るとだいたい使い方が分かります

(Assets > RosSharp > Scenes)

オブジェクトのPoseを配信してみる

Unity側の準備

Hierarchyで空(Empty)のオブジェクトを作成(名前:ROSConnector)

Create>Create Enpty で作成

そのオブジェクトに Assets > RosSharp > Script > RosCommunication > RosConnector.cs をアタッチ

(もしくはRosSharp > Prefabs > RosConnectorから作成)

InspectorでROS側PCのURLを入力

f:id:kato_robotics:20181030160707p:plain

次にCubeを作成します。ここではこのCubeのPoseを配信してみます。

HierarchyでCreate > 3D Object > Cube で作成

作成したCubeに RosSharp > Scripts > MessageHandling > PoseProvider.cs をアタッチ

PoseProviderのframeIdは、特に何もなければUnityと入力

f:id:kato_robotics:20181030162029p:plain

最後にROSConnectorに RosSharp > Scripts > RosCommunication > UnityTimePublisher.cs をアタッチ

Topic/poseと入力

Message ProviderCubeを選択

f:id:kato_robotics:20181030162535p:plain

ROS側の準備

すでにROSがインストールされているUbuntuを用意

以下のコマンドでrosbridge-serverをインストール

sudo apt-get install ros-kinetic-rosbridge-server

rosbridge_suite - ROS Wiki

rosbridge-serverはROSとROSではないソフトウェアで簡単に通信を行えるようにするものです

以下のコマンドで実行

roslaunch rosbridge_server rosbridge_websocket.launch

やってみる

準備が整ったらUnityのプレイボタンを押します

UnityとROSの接続が成功するとubuntu側の端末にClient connected. 1 clients total.と表示されます

f:id:kato_robotics:20181030163537p:plain

接続が成功したら以下のコマンドを打ってPoseが配信されているかを確認します

rostopic list

f:id:kato_robotics:20181030163905p:plain

次に以下のコマンドを打ってメッセージの内容を確認します

rostopic echo /pose

/poseトピックのメッセージが確認できると思います

ここでUnity側のCubeのPositionやRotationを変更するとメッセージの内容も変わることが確認できます

f:id:kato_robotics:20181030164347p:plain

座標系について

ちなみにですが、UnityとROSでは座標系が異なっています

そのことについてまとめたので確認してみてください

kato-robotics.hatenablog.com

通信が上手くいかない場合

考えられる点

  • ROSConnectorで入力するROS側PCのURLが間違っている
  • Unity側PCとROS側PCが同じネットワークにいない
  • rosbridge-serverを起動していない
  • Unity側の準備が足りていない

など

配信されているPoseの可視化について

ROSには可視化ツールとしてRvizというソフトウェアがあります

このrvizで今回Unityから配信したPoseデータを可視化してみるとおもしろいかと思います

以下のコマンドで実行できます

rosrun rviz rviz

使い方は調べれば出てきます

rvizで可視化する場合、Unity上でCubeにアタッチしたPoseProviderのFrameIdを設定する必要があります

気になること

ROS#がiOS端末上では上手く動かない問題

(2019/04/17追記)

以下情報

github.com

まとめ

ROS#を利用してUnityとROSでデータをやり取り

おわりに

今回はUnityからROSへデータを送りましたが、 もちろんROSからUnityへデータを送ることもできます

またROS#の強みは、簡単であることと、URDFも扱えるということみたいです

ROS#の存在はありがたい

おまけ

kato-robotics.hatenablog.com

kato-robotics.hatenablog.com