机器人操作系统ROS(三):话题及其发布与订阅
话题(Topic)通信
话题是一种单向异步通信机制,一般用于连续发送数据的传感器,在节点之间建立联系后,一个发布者可以向多个订阅者发送信息,同样,一个订阅者也可以订阅多个发布者的信息,发布者发布完消息立即返回,不等待反馈。订阅者通过回调函数的方式处理数据。
通信步骤:
- Talker 注册;
- Listener 注册;
- ROS Master 进行信息匹配;
- Listener 发送连接请求;
- Talker 确认连接请求;
- Listener 尝试与 Talker 建立网络连接;
- Talker 向Listener 发布数据。
常用指令
rostopic list能够列出当前已被订阅和发布的所有话题。
rostopic list
rostopic echo可以显示在某个话题上发布的数据。
rostopic echo /topic_name
rostopic hz报告数据发布的速率。
rostopic hz /topic_name
rostopic type命令用来查看所发布话题的消息类型。
rostopic type /topic_name
创建消息(msg)
msg(消息):msg文件就是文本文件,用于描述ROS消息的字段。它们用于为不同编程语言编写的消息生成源代码。下面是一个msg文件的示例:
Header header
string child_frame_id
geometry_msgs/PoseWithCovariance pose
geometry_msgs/TwistWithCovariance twist
package.xml添加
<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>
在构建时,其实只需要message_generation,而在运行时,我们只需要message_runtime。
CMakeLists.txt添加生成消息的依赖项:
# 不要直接复制这一大段,只需将message_generation加在括号闭合前即可
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
message_generation
)
添加导出消息的运行时依赖关系:
catkin_package(
...
CATKIN_DEPENDS message_runtime ...
...)
添加自己的.msg文件
add_message_files(
FILES
mymsg.msg
)
确保generate_messages()函数被调用
generate_messages(
DEPENDENCIES
std_msgs
)