机器人操作系统ROS(三):话题及其发布与订阅

话题(Topic)通信

话题是一种单向异步通信机制,一般用于连续发送数据的传感器,在节点之间建立联系后,一个发布者可以向多个订阅者发送信息,同样,一个订阅者也可以订阅多个发布者的信息,发布者发布完消息立即返回,不等待反馈。订阅者通过回调函数的方式处理数据。
在这里插入图片描述
通信步骤:

  1. Talker 注册;
  2. Listener 注册;
  3. ROS Master 进行信息匹配;
  4. Listener 发送连接请求;
  5. Talker 确认连接请求;
  6. Listener 尝试与 Talker 建立网络连接;
  7. 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
)

话题的发布与订阅

用C++编写发布者和订阅者节点:参考链接
用Python编写发布者和订阅者节点:参考链接

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐