笔记 ROS2 通信架构

计算图级

1 master和nodel

1.1 master的作用:

1、每个node启动时,都需向master注册
2、管理node之间的通信
启动命令:

1
$ roscore


1.2 node

1、一个进程(process)
2、可执行文件(通常为C++编译生成的可执行文件、Python脚本)被执行的实例
启动node命令:

1
$ rosrun pkg_name node_name

rosnode命令:

rosnode命令 作用
rosnode list @列出当前运行的node信息
rosnode info node_name @显示出node的详细信息
rosnode kill node_name @结束某个node
rosnode ping 测试连接节点
rosnode machine 列出在特定机器或列表机器上运行的节点
rosnode cleanup 清除不可到达节点的注册信息

2 launch文件

(集成)启动master和多个node:

1
$ roslaunch [pkg_name] [file_name.launch]

launch文件写法,同遵循xml格式规范。如下.

3 通信方式

以下四种:

3.1 Topic 主题

特点:异步通信、 publish/ subscriber
数据类型:定义在*.msg中。

rostopic命令 作用
rostopic list @列出当前所有的topic
rostopic info /topic_name @显示某个topic的属性信息
rostopic echo /topic_name @显示某个topic的内容
rostopic pub /topic_name … @向某个topic发布内容
rostopic bw /topic_name 查看某个topic的带宽
rostopic hz /topic_name 查看某个topic的频率
rostopic find /topic_type 查找某个类型的topic
rostopic type /topic_name 查看某个topic的类型(msg)
rosmsg命令 作用
rosmsg list 列出系统上所有的msg
rosmsg show /msg_name 显示某个msg的内容

3.2 Service 服务

特点:同步通信、reques-reply方式
数据类型:定义在*.srv

topic VS service

我们对比一下这两种最常用的通信方式,加深我们对两者的理解和认识,具体见下表。

名称 Topic Service
通信方式 异步通信 同步通信
实现原理 TCP/IP TCP/IP
通信模型 Publish-Subscribe Request-Reply
映射关系 Publish-Subscribe(多对多) Request-Reply(多对一)
特点 接受者收到数据会回调(Callback) 远程过程调用(RPC)服务器端的服务
应用场景 连续、高频的数据发布 偶尔使用的功能/具体的任务
举例 激光雷达、里程计发布数据 开关传感器、拍照、逆解计算

注意:远程过程调用(Remote Procedure Call,RPC),可以简单通俗的理解为在一个进程里调用另一个进程的函数。

rosservice 命令 作用
rosservice list @显示服务列表
rosservice info @打印服务信息
rosservice type 打印服务类型
rosservice uri 打印服务ROSRPC uri
rosservice find 按服务类型查找服务
rosservice call service_name args @使用所提供的args调用服务
rosservice args 打印服务参数
rossrv 命令 作用
rossrv show @显示服务描述
rossrv list @列出所有服务
rossrv md5 显示服务md5sum
rossrv package 列出包中的服务
rossrv packages 列出包含服务的包

tips: 无论我们定义了srv,或msg,修改 package.xml和CMakeList.txt添加依赖都是必不可少的一步。

3.3 Parameter Service 参数服务器

存储各种参数的字典,可用命令行、launch文件和node(api)读写。
1、 命令行

rosparam 命令 作用
rosparam set param_key param_value 设置参数
rosparam get param_key 显示参数
rosparam load file_name 从文件(yaml)加载参数
rosparam dump file_name 保存参数到文件(yaml)
rosparam delete param_key 删除参数
rosparam list 列出参数名称

2、 launch文件
与参数服务器相关的标签只有两个,一个是<param>,另一个是<rosparam>
3、通过node(API)设置

3.4 Actionlib 动作库

类似于Service,带有状态反馈的通信方式。通常用在长时间、可抢占的任务中。

客户端会向服务器发送目标指令和取消动作指令,而服务器则可以给客户端发送实时的状态信息,结果信息,反馈信息等等。
定义在*.action中。