ros的通信是在os层之上,基于TCP/IP协议实现
os层(操作系统层)对于开发者来讲,是不需要关系的。
中间层:TCPROS/UDPROS,这是基于TCP/IP协议进行重新封装的,Nodelet API是为了弥补前面两者中的不足,Nodelet API的实现是通过共享内存的方式,而不是通过网络传输的方式进行数据的共享。ClientLibrary客户端库是指将TCPROS/UDPROS在进行封装,封装成一些ros的具体通讯实现方法,例如话题、服务等等
应用层:首先是ros的master,与中间层框起来,是因为是ros系统中必须要有的根节点,master是ros官方提供的,是用来管理右边的应用层的节点node,node是一个互相独立的应用
ROS通信结构--节点和主节点(node and master)
master:相当于管理中心,node首先在master处进行注册, node之间的通信也是先由master进行“牵线”,才能两两的进行点对点通信,一个ROS计算图中又且只有一个master
节点:一个可执行程序进程,通常一个node负责者机器人的某一个单独的功能,不同的节点可以使用不同的编程语言,也可以运行在同一局域网下的不同机器人上。
节点与节点之间的通信具体实现:消息通信可以通过话题、服务、动作、参数实现
ros通讯结构--话题topic和服务service
话题topic:
同步/实时性:异步通信/弱,
实现原理:ROSTCP and ROSUDP
通信模型:发布/订阅
节点数量关系:多对多
应用场景:数据发布 eg:图像处理操作
传递内容:rosmsg (是发布者和订阅者之间定义的传输数据类型,方便两者进行通信)
服务service:
同步/实时性:同步通信/强,
实现原理:ROSTCP and ROSUDP
通信模型:request/response
节点数量关系:多对一(服务器端)
应用场景:逻辑任务处理,eg:关灯操作
传递内容:rossrv
动作action:
.goal -用于向服务器发送目标。
.cancel -用于向服务器发送取消请求。
.status -用于通知客户端系统中每个目标的当前状态。.feedback -用于周期反馈目标的辅助信息。
.result - 用于向client发送任务的执行结果,这个topic只会发布一次
参数服务器parameter server:
并非是一个node,运行在master中,节点存储参数的地方,用于配置参数,全局共享参数,是一个字典,key-value.用的少。
原作者:冰达机器人,b站有官方账号