UnityとROS2の連携に挑戦

前回までのあらすじ

WSL上でMicroROSエージェントを動作させ、ROS環境上に流れてくるメッセージを確認するところまでできた。
今回は Unity Robotics Hubを使って、Unity環境でROSのメッセージのやり取りができるかどうかを試す

ROS2 for Unityもあったのだが…

最初はこちらの使用を検討していたのだが、情報が少なく、さらにUnityがWindows、ROS2がWSL(Ubuntu)という環境にマッチしないであろうことが判明した。
当方のスキル不足かもしれないが、Unity-ROS間の連携において知見が深まればチャレンジしたい。

参考にした書籍

Unity Robotics Hubの公式サイト

ROS2側の準備

ROS TCP Endpointのインストール

ROS2側には「ROS TCP Endpoint」のセットアップが必要となる

ROS TCP Endpointのワークスペースを準備


ビルドするとエラーが出てしまった💦💦
script-dirじゃなくてscript_dirとかにせいって意味?


setup.cfgを編集する


このように・・・
script-dir → script_dir
install-scripts → install_scripts


ビルドが通った!!
sudo でやらないといけませんでしたが💦
これをやる

Unity側の準備


プロジェクトの作成

Templateは3Dで。
他フォルダ、プロジェクト名はお好みで

ROS TCP Connectorをプロジェクトにインストール


パッケージマネージャーを起動
(メインメニュー WIndow → Package Manager)


Add package from git URL…を選び…
以下のURLを指定
https://github.com/Unity-Technologies/ROS-TCP-Connector.git?path=/com.unity.robotics.ros-tcp-connector#v0.7.0


成功するとこういう画面になる


メインメニューに「Robotics」が追加される

ROSの設定


Robotics → ROS Settingで設定画面を表示


ProtocolをROS2に設定

パブリッシャーを作ってみる


空のGameObjectを追加


そのオブジェクトにスクリプトを追加
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);
    }
}

ROS2側のエンドポイントを起動する

ros2 run ros_tcp_endpoint default_server_endpoint --ros-args -p ROS_IP:=0.0.0.0

Unity側のプロジェクトを実行


Playボタンを押す


ROS側に変化が!!


もう一つWSLのウィンドウを開き、ノードリストを出してみる


topicのリスト


Unity側のtopicを受け取れている!!




この記事が気に入ったらサポートをしてみませんか?