中国大学MOOC--【机器人操作系统】 笔记2——ROS通信架构
tips:本系列笔记通过学习 中国大学MOOC–【机器人操作系统】一课而形成,若有问题错误或者侵权请联系我删除。官方教程链接:https://sychaichangkun.gitbooks.io/ros-tutorial-icourse163/content/chapter2/2.1.html一. Node & Master1. 概念Node-节点:是最小的进程单元;是一个可执行文件(通常
tips:本系列笔记通过学习 中国大学MOOC–【机器人操作系统】一课而形成,若有问题错误或者侵权请联系我删除。
官方教程链接:https://sychaichangkun.gitbooks.io/ros-tutorial-icourse163/content/chapter2/2.1.html
目录
一. Node & Master
1. 概念
- Node-节点:
是最小的进程单元;
是一个可执行文件(通常为C++编译生成的可执行文件、Python脚本);
通常一个node负责者机器人的某一个单独的功能。
- master-节点管理器:
master管理着各个node;
node首先在master处进行注册,之后master会将该node纳入整个ROS程序中;
node之间的通信也是先由master进行“牵线”;
当ROS程序启动时,第一步首先启动master,由节点管理器处理依次启动node。
2. 启动
- 启动master:
roscore
此时启动 ROS master,同时启动 rosout(负责日志输出的一个节点) 与 parameter server(参数服务器,并不是node)
- 启动node:
rosrun 包名 node名
如果节点太多,可以用launch文件启动。
- rosnode
命令 | 作用 |
---|---|
rosnode list | 列出当前运行的node信息 |
rosnode info node_name | 显示出node的详细信息 |
rosnode fill node_name | 结束node |
rosnode ping | 测试连接节点 |
rosnode machine | 列出在特定机器或列表机器上运行的节点 |
rosnode cleanup | 清除不可到达节点的注册信息 |
可以通过rosnode help
来查看rosnode命令的用法。
3. 查看node图:
rqt_graph
例如:
如图: 节点 /hummingbird/drone_racing_node 向 话题 /passed_gate 和 话题 /crashed 发布了消息, 节点 /test_racing 订阅了这些消息
(图片来自古月居)
节点操作命令贴:https://blog.csdn.net/jx18080136806/article/details/80249517
二. launch 文件
1. 基本信息
- 用途: 一个命令能一次性启动master和多个node
- 命令:
roslaunch 包名 文件名.launch
- 特点:
- roslaunch命令首先会自动进行检测系统的roscore有没有运行,也即是确认节点管理器是否在运行状态中,如果master没有启动,那么roslaunch就会首先启动master,然后再按照launch的规则执行。 (即不用先进行
roscore
)
2. 格式
<launch> <!--根标签-->
<node> <!--需要启动的node及其参数-->
<include> <!--包含其他launch-->
<machine> <!--指定运行的机器-->
<env-loader> <!--设置环境变量-->
<param> <!--定义参数到参数服务器-->
<rosparam> <!--启动yaml文件参数到参数服务器-->
<arg> <!--定义变量-->
<remap> <!--设定参数映射-->
<group> <!--设定命名空间-->
</launch> <!--根标签-->
三. 通信方式之topic
ROS的四种通信方式:
-
Topic 主题
-
Service 服务
-
Parameter Service 参数服务器
-
Actionlib 动作库
1. 特点及流程
特点:
- topic通信方式是异步的,发送时调用publish()方法,发送完成立即返回,不用等待反馈。
- subscriber通过回调函数的方式来处理消息。
- topic可以同时有多个subscribers,也可以同时有多个publishers
流程:
- publisher节点和subscriber节点都要到节点管理器进行注册
- publisher会发布 topic,subscriber在master的指挥下会订阅该topic
- 从而建立起sub-pub之间的通信
- Subscriber接收消息会进行处理,一般被称为回调(Callback)
Callback:
提前定义好了一个处理函数(写在代码中),当有消息来就会触发这个处理函数,函数会对消息进行处理
2. 操作命令
命令 | 作用 |
---|---|
rostopic list | 列出当前所有的topic |
rostopic info topic_name | 显示属性 |
rostopic echo topic_name | 显示内容 |
rostopic pub topic_name | 向topic发布内容 |
rostopic bw topic_name | 查看带宽 |
rostopic hz topic_name | 查看频率 |
rostopic find topic_name | 查看某类型topic |
rostopic type topic_name | 查看某topic类型(msg) |
3. message
message: 即topic内容的数据类型,也称之为topic的格式标准
3.1 结构与类型
格式类似于描述一个“类”
std_msg/Header header
uint32 seq
time stamp
string frame_id
uint32 height
uint32 width
string encoding
uint8 is_bigendian
uint32 step
uint8[] data
3.2 命令
rosmsg list | 列出系统上所有msg |
---|---|
rosmsg show msg_name | 显示某个msg内容 |
四. service
1. 原理
1、 包括两部分,一部分是请求方(Clinet),另一部分是应答方/服务提供方(Server)
2、 请求方(Client)就会发送一个request,要等待server处理,反馈回一个reply
3、Service通信是双向的,它不仅可以发送消息,同时还会有反馈; 是同步通信
- Node A向Node B发起了请求,Node B是server(应答方),提供了一个服务的接口,叫做/Service,(一般都会用string类型来指定service的名称),经过处理后得到了反馈。
2. 命令 rosservice
rosservice list 显示服务列表
rosservice info 打印服务信息
rosservice type 打印服务类型
rosservice uri 打印服务ROSRPC uri
rosservice find 按服务类型查找服务
rosservice call 使用所提供的args调用服务
rosservice args 打印服务参数
3. srv
3.1 含义
- srv文件是用来描述服务service数据类型,service通信的数据格式定义在*.srv中。
- 包括请求(request)和响应(reply)两部分
- 类似msg文件
3.2 操作命令 rossrv
rossrv show 显示服务描述
rossrv list 列出所有服务
rossrv md5 显示服务md5sum
rossrv package 列出包中的服务
rossrv packages 列出包含服务的包
五. parameter server 参数服务器
1. 含义与特点
- 参数服务器是节点存储参数的地方、用于配置参数,全局共享参数。参数服务器使用互联网传输,在节点管理器中运行,实现整个通信过程。
- 别于topic和service,它更加的静态。参数服务器维护着一个数据字典,字典里存储着各种参数和配置。
2. 维护方式
2.1 命令行维护
rosparam set param_key param_value 设置参数
rosparam get param_key 显示参数
rosparam load file_name 从文件加载参数
rosparam dump file_name 保存参数到文件
rosparam delete 删除参数
rosparam list 列出参数名称
2.2 launch 文件内读写
2.3 node源码
六. Action
(由于自己没有用到,不放太多)
- Actionlib是ROS中一个库,类似service通信机制,actionlib也是一种请求响应机制的通信方式。
- 主要弥补了service通信的一个不足,即当机器人执行一个长时间的任务时,假如利用service通信方式,那么publisher会很长时间接受不到反馈的reply,致使通信受阻。当service通信不能很好的完成任务时候,actionlib则可以比较适合实现长时间的通信过程,actionlib通信过程可以随时被查看过程进度,也可以终止请求。
- 双向的通信模式,双方在ROS Action Protocol下通过消息进行数据的交流通信。
- 规范文件的后缀名是.action
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)