中国大学MOOC--【机器人操作系统】 笔记2——ROS通信架构

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. 特点及流程

特点:

  1. topic通信方式是异步的,发送时调用publish()方法,发送完成立即返回,不用等待反馈。
  2. subscriber通过回调函数的方式来处理消息。
  3. topic可以同时有多个subscribers,也可以同时有多个publishers

流程:
在这里插入图片描述

  1. publisher节点和subscriber节点都要到节点管理器进行注册
  2. publisher会发布 topic,subscriber在master的指挥下会订阅该topic
  3. 从而建立起sub-pub之间的通信
  4. 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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目錄 前言 第一章 ROS简介 机器人时代的到来 ROS发展历程 什么是ROS 安装ROS 安装ROS-Academy-for-Beginners教学包 二进制与源码包 安装RoboWare Studio 单元测试一 第二章 ROS文件系统 Catkin编译系统 Catkin工作空间 Package软件包 CMakeLists.txt package.xml Metapacakge软件元包 其他常见文件类型 单元测试二 第三章 ROS通信架构(一) Node & Master Launch文件 Topic Msg 常见msg类型 单元测试三 第四章 ROS通信架构(二) Service Srv Parameter server 11.5.4 1.5.5 1.5.6 1.5.7 1.6 1.6.1 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.7 1.7.1 1.7.2 1.7.3 1.7.4 1.7.5 1.7.6 1.7.7 1.8 1.8.1 1.8.2 1.8.3 1.8.4 1.9 1.9.1 1.9.2 1.9.3 1.9.4 1.9.5 1.9.6 1.9.6.1 1.9.6.2 Action 常见srv类型 常见action类型 单元测试四 第五章 常用工具 Gazebo RViz Rqt Rosbag Rosbridge moveit! 单元测试五 第六章 roscpp Client Library与roscpp 节点初始、关闭与NodeHandle Topic in roscpp Service in roscpp Param in roscpp 时钟 日志与异常 第七章 rospy Rospy与主要接口 Topic in rospy Service in rospy Param与Time 第八章 TF与URDF 认识TF TF消息 tf in c++ tf in python 统一机器人描述格式 附录:TF数学基础 三维空间刚体运动---旋转矩阵 三维空间刚体运动---欧拉角 21.9.6.3 1.10 1.10.1 1.10.2 1.10.3 1.10.4 1.11 1.11.1 1.11.2 1.11.3 1.11.4 1.12 1.12.1 1.12.2 1.12.3 1.12.4 1.12.5 1.12.6 1.12.7 1.12.8 1.12.9 1.12.10 1.12.11 1.12.12 1.12.13 1.12.14 1.12.15 1.12.16 三维空间刚体运动---四元数 第九章 SLAM 地图 Gmapping Karto Hector 第十章 Navigation Navigation Stack move_base costmap Map_server & Amcl 附录:Navigation工具包说明 amcl local_base_planner carrot_planner clear_costmap_recovery costmap_2d dwa_local_planner fake_localization global_planner map_server move_base_msg move_base move_slow_and_clear navfn nav_core robot_pose_ekf rotate_recovery 3中国大学MOOC---《机器人操作系统入门》 课 程讲义

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值