ROS中有许多概念,理解这些概念有助于对ROS整个程序架构理解。参考书籍《机器人操作系统浅析》
Package:在ROS中,所有软件都被组织为软件包的形式,称为ROS软件包或功能包,有时也简称为包。ROS软件包是一组用于实现特定功能的相关文件的集合,包括可执行文件和其他支持文件。比如说,我们前面使用的两个可执行文件turtlesim_node和turtle_teleop_key都属于turtlesim包。
Node:说白了就是可执行文件
ROS中节点的设置允许同时执行几个程序(Node),而这个操作需要节点管理器来控制(通常使用roscore),该操作下,不同的程序的执行都需要重新打开一个终端,并不是很方便。ROS提供另外一种同时执行多个Node的方式,即roslaunch。
那么各节点或者各包之间如何实现通信呢,一种方式是topic(话题),另一种方式是服务(serve)。
Topic :ROS节点之间进行通信所利用的最重要的机制就是消息传递。在ROS中,消息有组织地存放在话题里。消息传递的理念是:当一个节点想要分享信息时,它就会发布(publish)消息到对应的一个或者多个话题;当一个节点想要接收信息时,它就会订阅(subscribe)它所需要的一个或者多个话题。ROS节点管理器负责确保发布节点和订阅节点能找到对方;而且消息是直接地从发布节点传递到订阅节点,中间并不经过节点管理器转交。
Message:理解消息类型的命名 和ROS里其他的程序一样,每条消息类型都属于一个特定的包。消息类型名总会包含一个斜杠,斜杠前面的名字是包含它的包:package-name/type-name
常用命令:
//PACKAGE
查看软件包列表和定位软件包 rospack list
要找到一个软件包的目录,rospack find命令:rospack find package-name
要查看软件包目录下的文件,命令: rosls package-name
访问”某软件包目录,可以将当前目录切换至此软件包目录,命令:roscd package-name
//NODE
启动节点 启动节点命令 rosrun
要获得运行节点列表,命令 rosnode list
查看节点 要获得特定节点的信息,命令:rosnode info node-name
终止节点 要终止节点,命令: osnode kill node-name或者Ctrl-C命令终止节点
//TOPIC
话题列表 为了获取当前活跃的话题,命令: rostopic list -v
打印消息内容 为了查看某个话题上发布的消息,命令:rostopic echo topic-name
测量发布频率 有两个命令可以用来测量消息发布的频率以及这些消息所占用的带宽:
rostopic hz topic-name
rostopic bw topic-name
这些命令订阅指定的话题,并且输出一些统计量,其中第一条命令输出每秒发布的消息数量,第二条命令输出每秒发布消息所占的字节量。
//MESSAGE
查看消息类型 要想查看某种消息类型的详情,命令 rosmsg show message-type-name
每个节点都不需要显式知道其他节点的存在与否;它们的唯一交互方式是间接地发生在基于话题和消息的通信层