阿克曼-幻宇机器人系列教程3- 机器人交互实践(Message)

发布于:2025-05-16 ⋅ 阅读:(14) ⋅ 点赞:(0)

上一篇文章介绍了如何通过topic操作命令实现与机器人的交互,本篇我们介绍如何通过Message(即topic的下一级)实现与机器人的交互。

和topic一样,首先在一个终端通过ssh命令登录机器人、启动机器人,然后打开另外一个终端执行操作命令。

1. Message操作命令

1.1 获取Message操作命令机器详解的语句

rosmsg --help

返回的内容,总共6种操作命令 

rosmsg is a command-line tool for displaying information about ROS Message types.

Commands:
        rosmsg show     Show message description
        rosmsg info     Alias for rosmsg show
        rosmsg list     List all messages
        rosmsg md5      Display message md5sum
        rosmsg package  List messages in a package
        rosmsg packages List packages that contain messages

Type rosmsg <command> -h for more detailed usage

2. Message操作命令用法

2.1 命令格式

rosmsg show+消息

2.2 以雷达为例

继续以/scan为例,它封装的是雷达数据

在室内机器人移动导航过程中,激光雷达是很重要的传感器,它时刻反馈机器人周边的障碍物信息,在机器人建图、定位、导航算法中起到重要的作用。

在提供的树莓派固件中,已经编写和编译了ROS的激光雷达节点。

rostopic type /scan   #查看雷达数据格式
sensor_msgs/LaserScan

 我们使用rosmsg show来获取雷达数据内容

rosmsg show sensor_msgs/LaserScan
std_msgs/Header header
  uint32 seq
  time stamp
  string frame_id
  float32 angle_min
  float32 angle_max
  float32 angle_increment
  float32 time_increment
  float32 scan_time
  float32 range_min
  float32 range_max
  float32[] ranges
  float32[] intensities

Header : 是一个结构体,包含 seq、stamp、frame_id。

  • seq 扫描顺序增加的 id 序列

  • stamp 激光数据的时间戳

  • frame-id 是扫描数据的名字

  • angle_min:开始扫描的角度

  • angle_max:结束扫描的角度

  • angle_increment:每次扫描增加的角度

  • time_increment:测量的时间间隔

  • scan_time :扫描的时间间隔

  • range_min:测距的最小值

  • range_max:测距的最大值

  • ranges:测量的距离数据,数组长度和雷达分辨率相关

  • intensities:与设备有关,输出测距强度数据

3. Msaage和Topic的操作关系

至此我们已经把topic和message都进行了介绍,现在我们说明下两者之间的操作关系。

通常来说先执行topic操作,再执行message操作,因为message是topic的子集。

以机器人雷达为例,首先需要 订阅或确认 topic,即定义数据传递的“频道”。然后,发布消息 才能通过该频道成功传递数据。这样的操作顺序确保了消息在系统中能够有效流动。

为何先订阅 topic 后发布消息?

  • 消息的传递是基于订阅的:
    你可以把订阅 topic 看作是打开一个接收信道,消息必须通过该信道传递才能被正确接收。如果你在没有订阅 topic 的情况下发布消息,系统就不知道应该把消息送给谁。换句话说,消息没有目的地,无法到达消费者端。

  • 话题创建是基础:
    在这个系统中,topic 就是雷达数据的专用通道。要确保消息能被正确分发,必须先确保 topic 存在,且有正确的订阅者。

  • 确保系统协调:
    如果一个模块在订阅 topic 后,雷达模块开始发布数据,那么在发布的同时,系统保证订阅者可以实时收到这些消息。如果没有预先订阅,消息的接收者就会错过或无法处理这些数据。

结合实际操作步骤

  1. 先定义 topic(如果尚未存在),比如 "radar/data"。这告诉系统所有需要接收雷达数据的模块可以订阅这个 topic。

  2. 订阅 topic,比如机器人控制模块、导航模块、决策模块会订阅 "radar/data",这样它们就可以接收到雷达传感器传来的数据。

  3. 发布消息,雷达传感器模块将通过 topic "radar/data" 来发布雷达数据。


网站公告

今日签到

点亮在社区的每一天
去签到