Skip to content

基础概念

可以说node和topic是ros中最重要的两个概念,ros的功能也主要由它们实现

节点(node)

节点是非常独立的模块,通常每个节点实现一个功能,它们互相依赖但又是解耦的

节点相关命令

命令用途
ros2 node list列出所有节点
ros2 node info 节点名查看节点信息

提示

这里还少了一个重要的ros2 run,后面再介绍

话题(topic)

节点间是独立的,但毫无疑问它们功能的实现又是需要互相通信的,话题就是它们通信的方式

节点与话题的联系,有两种情况

  • 节点将数据发送到话题中,我们称为发布,即publisher

  • 节点从话题中接收数据,我们称为订阅,即subscriber

提示

一个节点可以同时成为一个话题的发布者和订阅者

节点与话题之间没有强对应的关系,每个节点订阅若干个话题,每个话题被若干个节点订阅

信息

若干,可能没有,可能是1个,也可能更多

对于一个节点,每一个订阅了该话题的节点都可以向这个节点发送消息

消息成功发送后,所有订阅了它的节点都会收到这条消息,就可以从中获取数据了

对于每个话题,它都有一个固定的数据格式,收发都需要遵循这个格式,这个格式叫“消息接口”

话题相关命令

命令用途
ros2 topic list列出所有话题
加上-t参数还可以查看消息接口
ros2 topic info 话题名查看话题信息
ros2 topic echo 话题名输出话题数据
没有数据则一直等待
ros2 topic hz 话题名查看话题收到消息的频率
ros2 topic pub 话题名 接口名 数据向话题发送数据
只在调试时使用,具体参见文档
ros2 interface show 接口名查看接口具体的数据格式

服务(service)

服务与话题相似,也是节点之间用来沟通的方式,但它不如节点常用

服务和话题一样,也需要预先定义好它的数据格式,并遵照这个格式收发数据

与话题不同的是,服务必须有且仅有一个服务端,属于某个节点,还有若干个客户端

信息

客户端数量可以是0,服务端和客户端也可以属于同一个节点,但我不明白这样做的意义是什么?

话题是由节点主动发送数据,而服务是需要客户端主动请求服务端,再由服务端返回一些数据

服务相关命令

命令用途
ros2 service list列出所有服务
加上-t参数还可以查看消息接口
ros2 service type 服务名查看服务的类型
ros2 service find 接口名查看使用某接口的服务
ros2 service call 服务名 接口名 数据调用服务
只在调试时使用,具体参见文档
ros2 interface show 接口名查看接口具体的数据格式

可视化

再打开安装ros时用来测试的那两个小乌龟节点,然后新开一个终端,再输入

bash
rqt_graph

此时应该会弹出一个窗口,里面展示了两个节点和几个话题的关系