文章目录
ROS 通信架构,即计算图层的概念。
一个机器人想要完整运行起来,涉及到多个传感器和各种设备。要保证这些设备进程及各个传感器进程之间的通信,就需要用到ros。
通信架构
节点管理器
节点管理器(master)
- 每个节点启动时都要用master注册
- 管理node之间的通信
master可以实现两个节点之间的点对点通信。
roscore
用来启动ros master
$ roscore
除了master,这个指令还顺带启动了rosout
日志输出和parameter server
参数服务器。
- rosout: 它是一个负责日志输出的node,负责输出error和记录log。
- parameter server:主要负责一些参数的配置。
node
一个node其实就是一个ROS的进程,即pkg里的可执行文件的运行实例。通常来说,一个节点做一个特定的功能。一般上node都是以功能来划分的
node的启动
$ rosrun [pkg_name][node_name] # 用来启动node
其他关于node的常用指令
$ rosnode list # 列出当前运动的node信息
$ rosnode info [node_name] #显示某个node的详细信息
$ rosnode kill [node_name] #结束某个node
roslaunch
在运行多个node的时候,可以直接使用ros提供给我们的简单办法
$ roslaunch [pkg_name][file_name.launch] #启动master和多个node
#launch 文件位置:file_name.launch : pkg -> launch -> *.launch
roslaunch 会首先检查master是否已启动,如无则启动master。 然后再按launch文件的启动规则启动node。
该文件的编写规则和pkg.xml文件一样,都遵循xml标签语言的规范。
举例:pr2启动运行的node
此处 pr2_bringup 是它的一个包名,这是现在的一个通行做法。一般把机器人启动的pkg叫做bringup。
通信方式
Topic
Topic是ROS中的异步通信方式,是Node之间通过publish-subscribe机制通信。
当我们实际写topic的代码,实际上topic就是一个字符串。我们就可以把这个字符串当成一个频道。
举例:摄像头信息传递过程
此处对于发布者来说:只管发送,有没有人接受,怎么处理都不关心。只需要按特定的格式发送就行。
对于接收者来说:不管是谁发送的,有消息到了就可以处理消息,没有消息就做别的事情
总结
- topic的通信方式是异步的,在发送的时候会调用publish()这个方法,调完这个函数就立即返回,不用等返回结果。这和之后的service有区别。
- 对于一个topic来说,可以有多个接收者和发送者。
topic有很严格的格式要求,如果是某个消息的topic,那一定要符合ros里定义的该消息的格式,这种格式就是下面要讲的Message
Message
它是Topic内容的数据类型或者说是格式标准,是消息传送过程中一条一条信息必须遵守的规范。所以msg其实是类的概念,具体的消息就是这个msg的对象。Message定义在*.msg
文件中(pkg/msg/*.msg)
和C++很像,基本的msg类型如下所示:
举例:具体一个msg文件如何组织
对于/camera-rgb就必须遵循如下的这个msg,它是ros里面定义好的数据类型。形式上特别像C语言里面的结构体。
相关命令
转载请注明出处。
本文总结于中国大学MOOC《机器人操作系统入门》
链接: link.
图片来自于课程视频截图