0. 简介

对于ROS而言,其最常用的就是Topic话题以及Service两个了。之前我们在了解Unity Robotics Hub时候就了解到基本的Unity和ROS的通讯,下面我们来详细介绍一下Unity与ROS的话题与服务。

ROS和Unity之间的通信是通过Unity的“ROS-TCP-Connector”软件包和ROS的“ROS-TCP-Endpoint”软件包进行通信的。

1. Unity与ROS链接

ROS方面的准备步骤如下,首先添加端口号“10000”“5005”,启动Docker镜像。

Unity和ROS之间的通信需要端口号“10000”“5005”。为了在Unity中导入消息文件,也进行文件夹的安装。

docker run -p 6080:80 -p 10000:10000 -p 5005:5005 --shm-size=1024m tiryoh/ros-desktop-vnc:melodic

安装“ROS-TCP-Endpoint”软件包,用于ROS程序与Unity通信

cd ~/catkin_ws/src
git clone https://github.com/Unity-Technologies/ROS-TCP-Endpoint
cd ..
catkin build
source ~/catkin_ws/devel/setup.bash

然后就是Unity端准备步骤如下,首先就是安装ROS-TCP-Connector。这需要确保Unity的版本在2020.2以上。然后在在Unity菜单“Window→Package Manager”中打开“Package Manager”,“+→Add Package from git URL…”中输入以下URL,按下“Add”按钮,然后我们就会看到ROS-TCP-Connector插件安装成功

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


然后在Unity中完成对ROS的设置,首先选择Unity菜单“Robotics→ROS Settings”

确认以下的设定是否正确

・Connect on Startup : True
・Protocol : ROS1
・ROS IP Address : 127.0.0.1
・ROS Port : 10000
・Show HUD : True
・KeepAlive time (secs):在指定秒数以上没有发送其他消息的情况下,频繁测试连接。这个时间越长,ROSConnection认识到Topic停止响应所花费的时间就越长。
・Network timeout (secs):消息发送超过指定秒数时,视为连接失败。这个时间越长,ROSConnection认识到Topic停止了响应所花费的时间就越长。
・Sleep time (secs):在确认新消息之前,睡眠的秒数。如果减少这个时间,响应会变快,但是会消耗更多的CPU。

2. 自定义msg

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

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

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

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

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

3. 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);}
}
  1. 而接收者和发布者类似,都在Hierarchy窗口的“+→Create Empty”中创建空GameObject,命名为“Subscriber”。

  2. 在“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连接注册SubscribeROSConnection.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的订阅器

4. Service话题

…详情请参照古月居

Unity-ROS与话题与服务(二)相关推荐

  1. ROS:古月居第一次作业(话题与服务编程、动作编程、TF编程)

    一.话题与服务编程 话题与服务编程:通过代码新生一只海龟,放置在(5,5)点,命名为"turtle2":通过代码订阅turtle2的实时位置并打印在终端:控制turtle2实现旋转 ...

  2. ROS通信机制:话题、服务、参数

    目录 话题通信 理论模型 流程 通信样例 自定义消息的通信 服务通信 理论模型 服务通信自定义srv 参数服务器 理论模型 参数操作 话题通信 话题通信是ROS中使用频率最高的一种通信模式,话题通信是 ...

  3. ROS系列——mavros功能包中常用话题和服务介绍,包括消息名称、类型、头文件、成员变量、示例代码

    ROS系列--mavros功能包中常用话题和服务介绍,包括消息名称.类型.头文件.成员变量.示例代码 官方链接 常用话题 订阅 1.1 系统状态 1.2 GPS数据 1.3 本地位置 1.4 三轴速度 ...

  4. ROS机器人操作系统学习(二)

    ROS机器人操作系统学习(二) ROS概念 通信机制+开发工具+应用功能+生态系统 提高机器人研发中的软件复用率 通信机制 松耦合分布式通信 开发工具 应用功能 生态系统 节点与节点管理器 话题与服务 ...

  5. ROS Noetic入门笔记(二)ROS Noetic创建工作空间和功能包

    ROS Noetic入门笔记(一)在ubuntu20.04中安装ROS Noetic并简单测试 ROS Noetic入门笔记(二)ROS Noetic创建工作空间和功能包 ROS Noetic入门笔记 ...

  6. ROS入门笔记(十二):动作编程 (C++)

    ROS入门笔记(十二):动作编程 (C++) 文章目录 01 导读 02 功能包的创建 03 在功能包中创建action(动作) 3.1 自定义action 3.2 在package.xml中添加功能 ...

  7. ASP.NET Core微服务(二)——【ASP.NET Core Swagger配置】

    ASP.NET Core微服务(二)--[ASP.NET Core Swagger配置]: 环境:win10专业版+vs2019+sqlserver2014/2019 ASP.NET Core微服务( ...

  8. ROS探索总结(十二)——坐标系统

    ROS探索总结(十二)--坐标系统 ubuntu 14.04  indigo版本 转摘自:http://www.guyuehome.com/265 一.tf简介 1.安装turtle包 1 rosde ...

  9. ROS中阶笔记(二):机器人系统设计—URDF机器人建模

    ROS中阶笔记(二):机器人系统设计-URDF机器人建模 文章目录 01 URDF理论 1.1 什么是URDF 1.2 模型< robot > 1.2.1 < link > e ...

最新文章

  1. 李飞飞团队加入AI抗疫:家用监控系统,可以远程反馈新冠症状
  2. 灵活、高效的云原生集群管理经验:用 K8s 管理 K8s
  3. 当我们扩张时——技术商业策略圆桌第一弹
  4. java程序优化快捷键_Java 代码中针对性能优化的总结方案
  5. Json字符串转map集合
  6. JavaScript escape/unescape 编码的 Java 实现
  7. Atitit 图像金字塔原理与概率 attilax的理解总结qb23
  8. 图书管理系统(个人)
  9. python flask http 接口开发
  10. pr个人宣传片制作思路及常用快捷键
  11. 驱动miniPCIE网络模块EC20硬件电路详解
  12. matlab trapz二重积分函数_用MATLAB计算某些区域上的二重积分666.doc
  13. 阿里云oss对象存储的使用
  14. 两阶提交、三阶提交、TCC框架
  15. silabs green power
  16. python打开网址搜索关键字_Python实验:百度搜索关键字自动打开相关URL
  17. 蚂蚁金服面试复盘(插播)
  18. 保留申请的 Google Voice 号码
  19. 中山大学自考网校招生简章
  20. 留言板分页php,关于文本留言本的分页代码

热门文章

  1. 基于django源码自定义前端form表单样式
  2. 实例:身体质量指数BMI
  3. STM32使用SRAM扩展内存
  4. python神经网络算法pdf_Python与机器学习实战 决策树、集成学习、支持向量机与神经网络算法详解及编程实现.pdf...
  5. jsp页面中文 contenttype=text/html;c,JSP中文乱码问题解决
  6. 数据结构之通用树结构的实现
  7. 2022《粤语好声音-乐队风暴》全国海选启动发布会圆满落幕!
  8. Could not find method api() for arguments [XXX] on object of type DefaultDependencyHandler
  9. 内网搭建图片网站:软件安装配置 1-3
  10. 服务器CPU跑高会怎么样,怎么解决