ROS-Unity连接教程

20 篇文章 6 订阅

  本篇文章主要介绍基于ROS-TCP-Connector、ROS-TCP-Endpoint两个Unity接口与ROS进行通信的环境配置,并对官方给出的Unity和ROS相互通信示例中的消息部分做了说明

一、环境配置

参考:Unity-Robotics-Hub/setup.md at main · Unity-Technologies/Unity-Robotics-Hub (github.com)

  Ununtu环境下

  1.成功配置ros环境

  2.下载ROS-TCP-Endpoint放在工作空间编译

  ROS-TCP-Endpoint下载地址:Unity-Technologies/ROS-TCP-Endpoint: ROS package used to create an endpoint to accept ROS messages sent from a Unity scene using the ROS TCP Connector scripts (github.com)

  Unity环境下

  1.创建新项目,在Window/Package Manager下导入两个包(方式有两个,本地导入和URL导入)

  URL导入:
在这里插入图片描述
  两个包:

https://github.com/Unity-Technologies/ROS-TCP-Connector.git?path=/com.unity.robotics.ros-tcp-connector
https://github.com/Unity-Technologies/ROS-TCP-Connector.git?path=/com.unity.robotics.visualizations

  导入成功结果如下:
在这里插入图片描述
  因为URL是在线下载,可能会连接失败(但我多试了几次也成功了)。选择本地的方式也可以,把整个包下载到本地,然后选择这两个com包:
在这里插入图片描述
  下载上面画的这两个,然后路径选择本地磁盘,点击之后,导入com文件夹下的package.json即可:
在这里插入图片描述
  这个时候发现Unity上多了一个选项:
在这里插入图片描述
  点击Robotics下面的ROS Settings进行配置,主要是两个ROS IP Address和ROS Port,关于ROS IP Address在ubuntu下用ifconfig查一下设置,然后端口任意了默认10000了
在这里插入图片描述
  到目前为止,两方的环境配置就结束了。

二、demo环境配置

  Ubuntu环境
  下载这两个到同一个工作空间,然后catkin_make一下
  下载路径:Unity-Robotics-Hub/tutorials/ros_unity_integration/ros_packages at main · Unity-Technologies/Unity-Robotics-Hub (github.com)
在这里插入图片描述
  Unity环境下
  点击“Robotics -> Generate ROS Messages…”
在这里插入图片描述
  那个ROS message path是把整个项目下载下来,然后选择tutorials/ros_unity_integration/ros_packages/unity_robotics_demo_msgs文件夹,最后再Build两个一下(为了换成C#文件)

三、实例:Unity发布,ros订阅

  1.ubuntu端先查一下IP(根据自己的IP地址实际替换)

  然后执行:

roslaunch ros_tcp_endpoint endpoint.launch tcp_ip:=192.168.178.134 tcp_port:=10000

在这里插入图片描述

  2.Unity端建立空物体挂载文件(命名:RosPublisherExample)把以下代码放进去,再新建一个Cube,把Cube做参数传入文件

using UnityEngine;
using Unity.Robotics.ROSTCPConnector;
using RosMessageTypes.UnityRoboticsDemo;

/// <summary>
///
/// </summary>
public class RosPublisherExample : MonoBehaviour
{
    ROSConnection ros;
    public string topicName = "pos_rot";

    // The game object
    public GameObject cube;
    // Publish the cube's position and rotation every N seconds
    public float publishMessageFrequency = 0.5f;

    // Used to determine how much time has elapsed since the last message was published
    private float timeElapsed;

    void Start()
    {
        // start the ROS connection
        ros = ROSConnection.GetOrCreateInstance();
        ros.RegisterPublisher<PosRotMsg>(topicName);
    }

    private void Update()
    {
        timeElapsed += Time.deltaTime;

        if (timeElapsed > publishMessageFrequency)
        {
            cube.transform.rotation = Random.rotation;

            PosRotMsg cubePos = new PosRotMsg(
                cube.transform.position.x,
                cube.transform.position.y,
                cube.transform.position.z,
                cube.transform.rotation.x,
                cube.transform.rotation.y,
                cube.transform.rotation.z,
                cube.transform.rotation.w
            );

            // Finally send the message to server_endpoint.py running in ROS
            ros.Publish(topicName, cubePos);

            timeElapsed = 0;
        }
    }
}

3.unity运行

  运行时出现下面的框,为蓝色时代表连接成功,红色是失败
在这里插入图片描述
  同时ubuntu那边也有显示:
在这里插入图片描述
  然后rostopic echo pos_rot,可以看到输出

四、实例:ros发布,Unity订阅

  1. ubuntu端先查一下IP(根据自己的IP地址实际替换)

  然后执行:

roslaunch ros_tcp_endpoint endpoint.launch tcp_ip:=192.168.178.134 tcp_port:=10000

在这里插入图片描述

  2.Unity端建立空物体挂载文件(命名:RosSubscriberExample)把以下代码放进去,再新建一个Cube,把Cube做参数传入文件

using UnityEngine;
using Unity.Robotics.ROSTCPConnector;
using RosColor = RosMessageTypes.UnityRoboticsDemo.UnityColorMsg;

public class RosSubscriberExample : MonoBehaviour
{
    public GameObject cube;

    void Start()
    {
        ROSConnection.GetOrCreateInstance().Subscribe<RosColor>("color", ColorChange);
    }

    void ColorChange(RosColor colorMessage)
    {
        cube.GetComponent<Renderer>().material.color = new Color32((byte)colorMessage.r, (byte)colorMessage.g, (byte)colorMessage.b, (byte)colorMessage.a);
    }
}

  3.unity运行

  运行时出现下面的框,为蓝色时代表连接成功,红色是失败
在这里插入图片描述

  4.ubuntu端再执行:

rosrun unity_robotics_demo color_publisher.py

  运行一次Unity中物体改变一次颜色

完活~

  • 14
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
如果您想在 Unity 中使用 ROS2,可以使用 ros2-for-unity 库。下面是一些步骤,帮助您开始使用 ros2-for-unity: 1. 安装 ROS2:请根据您的操作系统在 ROS2 官方网站上安装 ROS2。 2. 安装 Unity:请在 Unity 官方网站上下载并安装 Unity。 3. 安装 ros2-for-unity:请参考 ros2-for-unity 的安装指南。 4. 创建 ROS2 节点:请在 Unity 中创建一个新的 C# 脚本,并使用 ros2-for-unity 创建 ROS2 节点。您可以使用以下代码示例: ``` using UnityEngine; using System.Collections.Generic; using ROS2; public class MyNode : MonoBehaviour { Node node; Publisher<std_msgs.msg.String> publisher; void Start() { // Initialize ROS2 ROS2.Init(); // Create a ROS2 node node = ROS2.CreateNode("my_node"); // Create a ROS2 publisher publisher = node.CreatePublisher<std_msgs.msg.String>("my_topic"); } void Update() { // Publish a ROS2 message std_msgs.msg.String message = new std_msgs.msg.String(); message.data = "Hello, ROS2!"; publisher.Publish(message); } void OnDestroy() { // Shutdown ROS2 ROS2.Shutdown(); } } ``` 5. 运行 ROS2:在您的 ROS2 安装目录中打开新的终端,并运行以下命令: ``` $ ros2 run demo_nodes_cpp talker ``` 这将启动一个 ROS2 Talker 节点,它将发布一个字符串消息到 "my_topic" 话题中。 6. 运行 Unity:在 Unity 中打开您的项目,并运行您的场景。您应该能够在 Unity 控制台中看到 "Hello, ROS2!" 消息。 这只是一个简单的示例,您可以根据您的需求和项目来实现更复杂的功能。希望这能帮助您开始使用 ros2-for-unity

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值