机器人操作系统入门(三)ROS通信架构

参考资料:

https://www.icourse163.org/course/ISCAS-1002580008?tid=1003713012  //中国大学MOOC

https://www.bilibili.com/video/av23401751  //B站

《ROS操作系统入门讲义》PDF下载

链接:https://pan.baidu.com/s/1OCja2WLDRnjYXMrpnZ3-sQ 
提取码:mziy

第三章 ROS通信架构(一)

1. 节点node:ROS世界中最小的进程单元

  • 程序角度:可执行文件被执行,加载至内存,生成node
  • 功能角度:一个node复制机器人的一个单独功能

注:可执行文件是静态的,节点node是动态

2. 节点管理器master

  • node首先在master处进行注册,之后master会将该node纳入整个ROS程序中
  • node之间的通信也是先由master进行“牵线”,才能两两的进行点对点通信

3. 启动master和node

  • roscore  //启动master、rosout和parameter server
  • rosrun pkg_name node_name  //rosrun寻找包pkg_name下名为node_name的可执行程序

注:rosrun命令的详细用法  rosrun [--prefix cmd] [--debug] pkg_name node_name [ARGS]

示例:rosrun --prefix 'gdb -ex run --args' pkg_name node_name  //在GDB下运行ros程序

注:通过 rosnode help 查看命令帮助

4. launch文件:一次性把多个节点按照预先的配置启动起来

(1)用法:roslaunch pkg_name file_name.launch  //若master没有启动,那么roslaunch就会首先自动启动master

(2)写法与格式:xml格式规范

(3)示例

  • 启动rospy_tutorials软件包中单个节点talker

  • Ros-Academy-for-Beginners 中的 robot_sim_demo:启动gazebo模拟器,导入参数内容,加入机器人模型

5. 话题topic  //适用于实时性、周期性的消息,如传感器数据

(1)ROS的四大通信方式

  • Topic 话题  //节点对节点的单向通信异步通信
  • Service 服务  //请求-查询式的双向通信模型;同步通信
  • Parameter Server 参数服务器  //使用数据字典维护全局共享参数
  • Actionlib 动作库  //请求-响应-反馈式双向通信

(2)话题的建立过程(单向

  1. publisher节点和subscriber节点都要到节点管理器进行注册
  2. publisher会发布topic
  3. subscriber在master的指挥下会订阅该topic,从而建立起sub-pub之间的直接通信

注:

  • 异步指的是发布者和订阅者不关心对方的状态,各司其职,不存在协同工作
  • topic发送时调用publish()方法,发送完成立即返回,不用等待反馈
  • subscriber通过回调函数的方式来处理消息
  • topic可以同时有多个subscribers,也可以同时有多个publishers;ROS中这样的例子有:/rosout、/tf等等

(3)topic常用命令

注:使用 rostopic help rostopic command -h 查看具体用法

6. Message(.msg)  //topic的数据格式标准,利用 rostopic type topic_name 进行查看

(1)msg的基本数据类型:bool、int8、int16、int32、int64(以及uint)、float、float64、string、time、duration、header、可变长数组array[ ]、固定长度数组array[C]

示例:sensor_msgs/msg/image.msg

注:可以将msg类比为“类”,而每次发布的具体内容为“对象”

(2)rosmsg的常用命令

原文地址:https://www.cnblogs.com/hg-love-dfc/p/10396539.html