自定义msg
将消息导入Unity的步骤如下所示:
1.Unity的菜单“Robotics→Generate ROS Messages…”选择。
2.在“ROS message path”中选择“catkin_ws/src”。
然后就可以看到path下的msg都会显示在Unity下面
然后点击“MyString.msg”中的“Build msg”。这样“MyString.msg”将被转换成c#脚本“MyStringMsg”,并在Project窗口中输出“RosMessages”。
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的订阅器。
全部0条评论
快来发表一下你的评论吧 !