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」のセットアップが必要となる
Unity側の準備
プロジェクトの作成
ROS TCP Connectorをプロジェクトにインストール
https://github.com/Unity-Technologies/ROS-TCP-Connector.git?path=/com.unity.robotics.ros-tcp-connector#v0.7.0
ROSの設定
パブリッシャーを作ってみる
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側のプロジェクトを実行
この記事が気に入ったらサポートをしてみませんか?