目录
1.架构
2.通讯
参考文献
上接:什么是Ros(一)-CSDN博客
1.架构
共三层:OS 层,中间层,应用层。
OS 层:OS 层是操作系统层也就是我们现在使用的ubuntu(linux),了解即可,只做应用,不需要改动
中间层:这里有TCPROS/UDPROS、Nodelet API、ClientLibrary。
TCPROS/UDPROS: 是基于TCP、IP 协议做的二次封装取名为TCPROS 和UDPROS;
Nodelet API :为了弥补TCPROS/UDPROS 使用中的一些不足它是使用一种共享内存的方法而不是网络传输的实现一些数据共享;
ClientLibrary :是客户端的库,这个库就是指把UDPROS 和TCPROS 再继续进行封装成了一些ROS 的具体通信实现方法例如我们后面要提到的话题、服务等等;
应用层:应用层的最左边是一个Master,Master 是跟中间层一起框起来,上面标注了一个Ros。这是因为Master 节点是每一个Ros 进行中必须要有的并且只能唯一有的所以说Master 节点也是Ros 官方提供的。它是用来管理右边这些应用层的Node 等等。而每一个note 就是一个个相互独立的应用。
总结:OS层和中间层了解即可,真正需要自己开发的是应用层
node:一个可执行程序进程,通常一个node 负责者机器人的某一个单独的功能,如果将相机接入ROS,其中Camera Node 就是一个相机的节点。不同的节点可以使用不同的编程语言C++或python。在同一个ROS 下节点对于编程语言是没有要求的,可以每个节点用互相不同的语言。还可以将Image Display Node,运行在另一台电脑上的图像处理节点。也就是说Ros 的节点是可以运行在同一局域网下的不同机器人上,这就是ROS的分布式计算能力。
master:每个节点都负责单独的一部分功能,节点跟节点之间要互相发现彼此这就需要master。master 相当于一个管理中心,每一个node 启动的时候先要在Master 处进行一次注册告诉master 自己的基本信息,需要订阅什么话题,需要发布什么话题。node 之间的通信也是先由master进行“牵线”,才能两两的进行点对点通信,一个ROS计算图中有且只有一个master
2.通讯
节点之间的通讯方式有4 种实现方法,分别是话题、服务、动作、参数:
话题:单向通讯,Publisher 只管发Subscriber 只管收
服务:双向通讯,请求由Client(客户) 端发往Server(服务) 端的,请求在执行完之后,服务端再向客户端返回一个应答这个就是服务的过程,但长时间没有应答就认为通讯失败。
动作:是服务的升级版,服务是客户端发送一个请求服务端返回一个应答。这种模式在任务执行周期短的情况下是十分有用的,例如让服务器关一下灯,服务器立马把灯关了,然后返回一个应答告诉你灯已经关了。但是如果用服务的方式让机器人砍一片森林,在砍完之前是收不到任何回复的。此时无法判断到底是没有收到请求,还是正在执行。在类似这种执行周期比较长的任务下服务就很不适用了。所以也就产生了动作action 这种方法。所以在动作中,请求包含goal 和cancel 是由客户端向服务端发送的,应答包含status 和result 和feedback 是由服务端返回的。
Action 和服务的区别:在于它有多重回复。例如让机器人去砍伐一片森林,机器人首先会应答一个status。告诉你当前状态开始砍伐,同时还有回复feedback 周期性的报告目前砍了多少棵。最后砍完了,应答一个result 树已经砍开了。客户端接收到result 就知道这一组动作已经结束了。Action 在执行过程中如果想要取消动作,它还提供了一个cancel 这接口来取消请求。这里要注意一下feedback 和status 都可以有多个但是result 只会发布一次。
参数服务器:是一种比较特殊的机制,他既不是一个节点,然后我们在启动的时候也没有特地去启动它。它运行在Master 当中,是节点用来存储参数的地方。例如某一个节点启动的时候需要获取变量f。如果参数服务器当中没有存储这个变量,那他会使用一些默认值
参考文献
1.ROS介绍以及常用指令_ros命令-CSDN博客