Skip to content

ndlab-ros2/Unity-ROS2

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

98 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Unity-ROS2

Unity-ROS2間の通信用パッケージ

Image

目次

概要

UnityとROS2の間の通信を可能にすることで、ROS2を用いたUnityでのシミュレーション環境の構築を実現するためのパッケージを公開しています。

開発環境

  • Ubuntu Linux - Jammy Jellyfish (22.04)
  • ROS 2 Humble Hawksbill

インストール方法

以下の手順に従ってパッケージのインストールを行います。

1. ROS 2 Humbleのセットアップ:

こちらの手順に従って、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をインストール。或いはインストールするようポップアップが出る。

4. Unity-ROS2間の統合:

  • ワークスペース作成

    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を起動し、必要であればサインインをする。
  • ProjectsNew projectから新しいプロジェクトを作成する。
  • 新しいプロジェクトを開き、WindowPackage Managerでパッケージマネージャを起動
  • 画面左上の+ボタンをクリックし、Install package from git URL...を選択して、ROS-TCP-Connector(リンクはこちら)のURLをコピー&ペーストして、AddボタンをクリックしてROS-TCP-Connectorのパッケージを追加する。以下の画面の様になっていれば完了。

Image

  • 先程の操作によってUnityのメインメニューにRoboticsというタブが追加されていることを確認して、RoboticsROS SettingsからROSの設定画面を表示

Image

  • ProtocolROS2に切り替える
  • ROS IP Addressに自身のIPアドレスを入力する。自身のIPアドレスが分からない場合は以下のコマンドを実行して、出力されるIPアドレスをコピー&ペーストする
    hostname -I
  • ROS Portに自身で設定したポートを入力する。

⚠️ デフォルトは10000であるが、4. Unity-ROS2間の統合の「IPアドレスの変更」にて、デフォルトの10000とは異なるポートにした場合は、そのポートの値を入力しなければならない。

使用方法

1. C#スクリプトの作成:

  • UnityのメインメニューでRoboticsGenerate 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#スクリプトを作成する。

2. パブリッシャーの作成:

  • UnityのメインメニューでProjectAssetsRosMessagesUnityRoboticsDemoより、作成した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でシミュレーションを行う際には起動させたままにしておいてください

  • Unityのメインメニューから'▶'ボタンを押す

  • Gameウィンドウの左上部分にある接続ライトが赤色🟥から青色🟦に変化していることを確認する

  • 「ROS2側のエンドポイント起動」のコマンドで以下の様な出力が表示されているかを確認する

    [INFO] [1741678056.431790026] [UnityEndpoint]: Connection from <your IP address>

  • トピック出力の有無の確認 もう1つのterminalを開き、以下のコマンドを実行して、出力画面にmy_topicというトピックが出力されているかを確認する。

    ros2 topic list

    ○トピックがあることが確認できればCTRLCを同時に押してコマンドを終了する

  • ROS2-Unity間の接続確認

    ros2 topic list

    ○以下の様な出力になっていれば接続完了!

    Image

About

Communication package between Unity and ROS2

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published