Unity-ROS2間の通信用パッケージ
UnityとROS2の間の通信を可能にすることで、ROS2を用いたUnityでのシミュレーション環境の構築を実現するためのパッケージを公開しています。
- Ubuntu Linux - Jammy Jellyfish (22.04)
- ROS 2 Humble Hawksbill
以下の手順に従ってパッケージのインストールを行います。
こちらの手順に従って、ROS 2 Humbleをインストールしてください。既にROS2 Humbleのインストールが完了していればこの操作は不要です。
2. Unity Hub のダウンロード:
- パブリックキーの追加
wget -qO - https://hub.unity3d.com/linux/keys/public | gpg --dearmor | sudo tee /usr/share/keyrings/Unity_Technologies_ApS.gpg > /dev/null
- リポジトリの追加
sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/Unity_Technologies_ApS.gpg] https://hub.unity3d.com/linux/repos/deb stable main" > /etc/apt/sources.list.d/unityhub.list' - ダウンロード
sudo apt update sudo apt-get install unityhub
3. Unity のインストール:
- 上記でダウンロードしたUnity Hubを起動
- Unity Hubへのサインインを求められるので、サインインをする。アカウントが無ければ作成する
- InstallsからInstall Editorを選択し、Unity 6をインストール。或いはインストールするようポップアップが出る。
-
ワークスペース作成
mkdir -p unity_ws/src
-
ROS2 branch of the ROS-TCP-EndpointリポジトリとROS2_Packageリポジトリの追加:
cd unity_ws/src git clone https://github.com/ndlab-ros2/Unity-ROS2.git -
ビルド
source install/setup.bash colcon build source install/setup.bash
source install/setup.bashソースコマンドは2回実行する必要があります。1回目はcolcon build ビルドを実行する際の環境設定を行い、2回目は新しくビルドされたパッケージを環境に追加します。
-
IPアドレスの確認
hostname -I
-
IPアドレスの変更
上記のコマンドの実行によって出力された自身のIPアドレスを
your IP addressに書き換えて次のコマンドを実行する。ros2 run ros_tcp_endpoint default_server_endpoint --ros-args -p ROS_IP:=your IP address
○上記のコマンドの出力が以下の様になっていれば変更完了です。ただし、
<your IP address>この部分には自身のIPアドレスが表示されます。[INFO] [1741360093.885079373] [UnityEndpoint]: Starting server on <your IP address>:10000※もし、サーバーがデフォルトの 10000 とは異なるポートにする必要がある場合は、次のコマンドを実行してください。
ros2 run ros_tcp_endpoint default_server_endpoint --ros-args -p ROS_IP:=your IP address -p ROS_TCP_PORT:=10000
your IP address:自身のIPアドレスに変更してください。
5. Unity のセットアップ:
- Unity Hubを起動し、必要であればサインインをする。
Projects→New projectから新しいプロジェクトを作成する。- 新しいプロジェクトを開き、
Window→Package Managerでパッケージマネージャを起動 - 画面左上の
+ボタンをクリックし、Install package from git URL...を選択して、ROS-TCP-Connector(リンクはこちら)のURLをコピー&ペーストして、AddボタンをクリックしてROS-TCP-Connectorのパッケージを追加する。以下の画面の様になっていれば完了。
- 先程の操作によってUnityのメインメニューにRoboticsというタブが追加されていることを確認して、
Robotics→ROS SettingsからROSの設定画面を表示
ProtocolをROS2に切り替えるROS IP Addressに自身のIPアドレスを入力する。自身のIPアドレスが分からない場合は以下のコマンドを実行して、出力されるIPアドレスをコピー&ペーストするhostname -I
ROS Portに自身で設定したポートを入力する。
- Unityのメインメニューで
Robotics→Generate ROS Messages...より、メッセージブラウザーウィンドウを起動 - 「ROS message path」の
Browseボタンをクリックし、'~/unity_ws/src/ros2_packages/unity_robotics_demo_msgs'をROSメッセージパスに設定する。 - 「Built message path」の下部に表示されるunity_robotics_demo_msgsサブフォルダーを展開し、「msg」の
Build 2 msgsと「srv」のBuild 2 srvsをクリックして、ROS.msgファイルと.srvファイルからC#スクリプトを作成する。
-
Unityのメインメニューで
Project→Assets→RosMessages→UnityRoboticsDemoより、作成したC#スクリプトを編集する(C#スクリプトがない場合はその場で作成する)。 -
c#スクリプトの名前は自分が分かりやすい名前に変更しておく。今回は例として
Ros Publisher Exampleとしている。 -
次のコードをスクリプトに貼り付ける。
using System.Collections; using System.Collections.Generic; using UnityEngine; using Unity.Robotics.ROSTCPConnector; using RosMessageTypes.Std; public class MyPublisher : MonoBehaviour { ROSConnection ros; float time; // Start is called before the first frame update void Start() { // ROSコネクションの取得 ros = ROSConnection.GetOrCreateInstance(); // パブリッシャの登録 ros.RegisterPublisher<StringMsg>("my_topic"); } // Update is called once per frame void Update() { time += Time.deltaTime; if(time < 1.0f){ return; } time = 0.0f; // メッセージのパブッシュ StringMsg msg = new StringMsg("Hello Unity!"); ros.Publish("my_topic", msg); } }
-
Unityのメインメニューの
Hierarchyにある+ボタンをクリックし、Create Enptyから空のGameObjectを作成する。(必要であればGameObjectの名前を変更しても良い) -
そのオブジェクト内にスクリプトを作成して、先程作成したスクリプトを貼り付ける
-
ROS2側のエンドポイントの起動
ros2 run ros_tcp_endpoint default_server_endpoint --ros-args -p ROS_IP:=your IP address
※もし、サーバーがデフォルトの 10000 とは異なるポートにする必要がある場合は、次のコマンドを実行してください。
ros2 run ros_tcp_endpoint default_server_endpoint --ros-args -p ROS_IP:=your IP address -p ROS_TCP_PORT:=10000
your IP address:自身のIPアドレスに変更してください。
○出力結果が以下の様になっていれば変更完了です。ただし、<your IP address>この部分には自身のIPアドレスが表示され、には指定したポート番号が表示されます。(特に変更がなければデフォルトの10000が表示されます)
[INFO] [1741360093.885079373] [UnityEndpoint]: Starting server on <your IP address>:<Port number>
-
Unityのメインメニューから'▶'ボタンを押す
-
Gameウィンドウの左上部分にある接続ライトが赤色🟥から青色🟦に変化していることを確認する -
「ROS2側のエンドポイント起動」のコマンドで以下の様な出力が表示されているかを確認する
[INFO] [1741678056.431790026] [UnityEndpoint]: Connection from <your IP address> -
トピック出力の有無の確認 もう1つのterminalを開き、以下のコマンドを実行して、出力画面に
my_topicというトピックが出力されているかを確認する。ros2 topic list
○トピックがあることが確認できれば
CTRLとCを同時に押してコマンドを終了する -
ROS2-Unity間の接続確認
ros2 topic list
○以下の様な出力になっていれば接続完了!



