通信架构:理解为ROS程序运行起来后会形成的网络结构和框架
机器人常常带有很多很多的传感器,机器人的正常运行离不开传感器的协调工作。这意味着有很多的进程需要同时进行。所以我们要关注如何管理这些进程和他们之间的通讯。
master:节点管理器
master的作用
1.每个节点启动的时候都需要向master注册 2.管理node之间的通讯
过程:node1要开始运行,node1必须要去master那里注册,如果另外有一个node2想和node1通讯,但是他们之间本来就不认识对方,但是node2可以通过master来找到node1并且和node1进行点对点的通讯。
所以在启动ROS程序之前,第一步就是要启动master
用以下指令启动 ros master
$ roscore
但是在启动master的时候,同时会启动rosout:日志输出 和parameter server 参数服务器
node:节点
ROS里的进程,是package可执行文件运行的实例。(可执行文件是静态的,node这个概念是动态的,当一个可执行文件运行(被放入内存)后这个程序就成了一个node)
node一般以功能来划分
启动一个node
$ rosrun [pkg-name][node-name]
node相关的常用指令:
但是往往一个ROS程序包含很多节点,不可能一条一条rosrun pkgname,这时候用下面一条指令来一次启动master和多个节点
$ roslaunch [pkg-name][file-name.launch]
roslaunch在执行前会自己检测有没有执行roscore,如果没有它会先执行 roscore
launch文件有一定的规范的写法(百度)
小提醒:机器人启动的包名一般命名为 bot-name_bringup
节点间的通讯:
Topic 通讯方式:ROS中的异步通讯方式
topic(代码中就是一串字符串一般以“/”开头,没写过代码我也不太了解)可以理解为两个节点之间谈论的话题,可以是机器人的视觉信息,也可以是位置信息。
过程:节点A只管向某个topic发送信息(publish),节点B只管订阅(subcribe)了这个topic,那么消息就得到了传递,一个topic可以被多个node订阅,也可以有多个node向topic发送信息
在publish过程中,进程只管发送信息,不会也不需要等待publish后返回信息
Topic有很严格的格式要求
Message:message是topic内容的数据类型(类、结构体),定义在*.msg文件中(pkg/msg/file.msg)
有关topic的常用指令和node很相似,
有待实操