参考资料:
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)话题的建立过程(单向)
- publisher节点和subscriber节点都要到节点管理器进行注册
- publisher会发布topic
- 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的常用命令