计算机系统应用教程网站

网站首页 > 技术文章 正文

「ROS自学」03.02通信方式

btikc 2024-09-22 01:21:32 技术文章 23 ℃ 0 评论

介绍完通信架构之后就是节点间通信方式的介绍,这是ros最核心的内容。主要有主题topic,服务service,参数服务器parameter server和动作库actionlib


Topic和Msg

首先介绍主题topic,这是用到最多的通信方式。在两个节点首先定义好共同话题。一个发布一个订阅即可完成通信。节点A向频道发送主题,节点B从频道订阅主题。

这是一种异步通信方式,节点A不停发送话题到topic频道,不用管是否被订阅。节点B也是只管订阅不用管谁发送。即publish()和subscribe()方法执行后立即返回不用等待处理结果

一个topic也可以同时被多个节点订阅,如再有node C也可以订阅这个topic,当然也可以多个节点向一个topic发送信息。

topic有很严格的格式要求,即Message,它是topic内容的数据类型或者叫格式标准,如rgb信息要严格遵守ros的rgb数据的标准。message定义在*.msg文件中。message即“类”,发送订阅的massage是“对象”。基本的massage有如下类型,类似c++的类型

例子。

rgb图像的topic遵循以上massage的规范。sensor_msgs/Image是ros定义好的数据类型。massage定义类似于c语言的结构体,或者叫做一个“类”,每次发布的内容就是“对象”。整个massage定义好了一帧图像的格式。

常用指令如下


Service和srv

服务service是一种同步通信方式。两个节点间通过请求request和响应reply的方式进行通信。一个节点是服务器server一个是客户端client,服务器提供服务service,客户端来请求服务。服务没有调用就不执行,请求才会执行,节省计算资源。

同步的意思是client发送一个request会一直等待,知道服务器server返回结果,客户端node A才会继续向下执行。

两种通信方式对比如下

srv文件类似于上面的msg文件

举例如下

srv文件可以嵌套msg文件,不能在嵌套srv。msg可以自定义数据类型,也可以继续嵌套msg文件。这个例子中第一个srv文件用bool型判断检测,三个短线隔开,返回自定义数据类型HumanPose[],这里就是嵌套了msg文件HumanPose.msg,HumanPose也继续嵌套了JointPos.msg文件。

自己定义完msg或srv后要修改功能包package的两个基本文件,如下。即指定编译或运行时的依赖项

常用命令


Parameter Server

前面提到,roscore命令即启动了参数服务器。参数服务器维护着一个存储各种参数的字典,相对于前两种,它更静态。

字典即一个个键值对,关键词key和值value成对出现。key是唯一的,不能重复

可以命令行设置参数,文件遵循yaml格式

在launch文件中读写参数

此外在ros源代码里也可以设置,即rospy和roscpp里,即利用API设置参数。


Action

action是最复杂的通信方式,相对于升级版的service,用户可以取消请求,服务器可以发送反馈。

action文件之于action通信方式,类似srv文件至于service通信方式,msg文件之于topic通信方式

两个例子如下


action分三段,同样由---隔开,分别定义目标goal,结果result和反馈feedback


参考资料
https://www.icourse163.org/course/ISCAS-1002580008?tid=1002759011

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表