如何将消息导入Unity

描述

自定义msg

将消息导入Unity的步骤如下所示:

1.Unity的菜单“Robotics→Generate ROS Messages…”选择。

2.在“ROS message path”中选择“catkin_ws/src”。

然后就可以看到path下的msg都会显示在Unity下面

Unity

然后点击“MyString.msg”中的“Build msg”。这样“MyString.msg”将被转换成c#脚本“MyStringMsg”,并在Project窗口中输出“RosMessages”。

Unity

Topic话题

这一小节我们主要来说Topic的发布和订阅,首先我们来看一下发布者的Unity编程。

1.在Hierarchy窗口的“+→Create Empty”中创建空GameObject,命名为“Publisher”。

2.在“Publisher”中追加新脚本“ChatterPublisher”,编辑如下

using UnityEngine;
using Unity.Robotics.ROSTCPConnector;
using MyStringMsg = RosMessageTypes.Hello.MyStringMsg;


public class ChatterPublisher : MonoBehaviour
{
    private ROSConnection ros;


    // 初始化时被调用
    void Start()
{
        // 向ROS连接注册Topic话题
        ros = ROSConnection.instance;
        ros.RegisterPublisher< MyStringMsg >("chatter");
    }


    // 每帧更新
    void FixedUpdate()
{
        // 发送msg信息
        MyStringMsg msg = new MyStringMsg("Hello Unity!");
        ros.Send("chatter", msg);
    }
}

而接收者和发布者类似,都在Hierarchy窗口的“+→Create Empty”中创建空GameObject,命名为“Subscriber”。

在“Subscriber”中添加新的脚本“ChatterSubscriber”,编辑如下。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Unity.Robotics.ROSTCPConnector;
using MyStringMsg = RosMessageTypes.Hello.MyStringMsg;


public class ChatterSubscriber : MonoBehaviour{


    void Start(){
        // 向ROS连接注册Subscribe
        ROSConnection.instance.Subscribe< MyStringMsg >("chatter", Callback);
    }


    void Callback(MyStringMsg msg){
        Debug.Log(msg.data);
    }
}

同时我们可以在ROS当中订阅这些信息,运行

roscore
rosparam set ROS_IP 127.0.0.1
rosparam set ROS_TCP_PORT 10000
rosrun ros_tcp_endpoint default_server_endpoint.py
# roslauch ros_tcp_endpoint endpoint.launch tcp_ip:=127.0.0.1 tcp_port:=10000 # 将127.0.0.1

然后写一个listener.py的订阅器。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分