目录
一、计算图级
1.1 关键概念
计算图是ROS处理数据的一种点对点的网络形式。程序运行时,所有进程以及他们所进行的数据处理,将会通过一种点对点的网络形式表现出来,包括以下几个重要概念:
- 节点(
Node
)
一个节点其实只不过是ROS程序包中的一个可执行文件,ROS节点之间可以通过多种通信机制进行通信。 - 主节点(
Master
)
主节点负责管理节点到节点的连接和消息通信,故亦可称“节点管理器”,通过roscore
命令即可启动。 - 话题(
Topic
)
话题(亦可称为“主题”)是一种单向通信方式。 - 服务(
Service
)
服务是一种 请求Request
– 响应Response
式 的双向通信方式。 - 动作(
Action
)
动作是一种 目标Goal
– 结果Result
– 反馈Feedback
式 的双向通信方式。 - 消息(
Message
)
消息是节点之间通信的数据结构。 - 包(
Bag
)
用户可以保存ROS中发送和接收的消息的数据,这时用于保存的文件以*.bag
作为文件扩展名。
1.2 理解节点(Node)
先了解一下节点Node
操作命令rosnode
的用法:
命令 | 说明 |
---|---|
rosnode ping | test connectivity to node |
rosnode list | list active nodes |
rosnode info | print information about node |
rosnode machine | list nodes running on a particular machine or list machines |
rosnode kill | kill a running node |
rosnode cleanup | purge registration information of unreachable nodes |
一个节点其实只不过是ROS程序包中的一个可执行文件,ROS节点可以使用ROS客户端库(rospy
、roscpp
等)与其他节点通信,可以发送或接收消息Message
。
首先你已经根据 搭建ROS开发环境教程 创建catkin
工作空间,并启动ROS:
$ roscore
再新开一个终端,并使用rosnode list
查看当前存在的节点Node
:
$ rosnode list
/rosout
可见此时仅存在1个节点rosout
,rosout
节点用于收集和记录节点调试输出信息,所以它总是在运行的。
启动Turtle例程:
$ rosrun turtlesim turtlesim_node
$ rosrun turtlesim turtle_teleop_key
注意:执行以上命令均需新开一个终端并配置ROS环境变量
使用rosnode list
查看当前存在的节点Node
:
$ rosnode list
/rosout # rosout节点用于收集和记录节点调试输出信息,所以它总是在运行的
/teleop_turtle # turtle_teleop_key的节点
/turtlesim # turtlesim_node的节点
也可以借助可视化工具rqt_graph
便于直观理解:
$ rqt_graph
Hide
一栏不勾选debug
:
上图中椭圆框即为节点Node
,节点之间的箭头说明它们之间存在通信,箭头上的备注即为话题Topic
。
二、通信方式
ROS使用的通信方式包括 话题Topic
、服务Service
、动作Action
,此外,某种意义上 参数Parameter
也可认为是一种通信方式。下面将对这4种通信方式进行详细介绍:
2.1 话题(Topic)
先了解一下话题Topic
操作命令rostopic
的用法:
命令 | 说明 |
---|---|
rostopic bw | display bandwidth used by topic |
rostopic delay | display delay of topic from timestamp in header |
rostopic echo | print messages to screen |
rostopic find | find topics by type |
rostopic hz | display publishing rate of topic |
rostopic info | print information about active topic |
rostopic list | list active topics |
rostopic pub | publish data to topic |
rostopic type | print topic or field type |
以下内容参考 ROS官方教程 | 理解ROS话题。
2.1.1 话题的概念
话题Topic
是一种单向通信方式, 其中发布消息的节点称为发布者Topic-Publisher
,而接收消息的节点称为订阅者Topic-Subscriber
。