当前位置: 首页 > news >正文

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

上一篇文章介绍了如何通过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 descriptionrosmsg info     Alias for rosmsg showrosmsg list     List all messagesrosmsg md5      Display message md5sumrosmsg package  List messages in a packagerosmsg packages List packages that contain messagesType 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 headeruint32 seqtime stampstring frame_idfloat32 angle_minfloat32 angle_maxfloat32 angle_incrementfloat32 time_incrementfloat32 scan_timefloat32 range_minfloat32 range_maxfloat32[] rangesfloat32[] 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" 来发布雷达数据。

http://www.xdnf.cn/news/459433.html

相关文章:

  • React和Vue在前端开发中, 通常选择哪一个
  • 机器学习 day03
  • stm32使用freertos时延时时间间隔不对,可能是晶振频率没设置
  • CF每日5题(1300-1500)
  • 提高成功率!课题中的立项依据深度写作
  • Python中plotext 库详细使用(命令行界面中直接绘制各种图形)
  • [IMX] 03.时钟树 - Clock Tree
  • 力扣310.最小高度树(拓扑排序,无向图),力扣.加油站力扣.矩阵置零​​​力扣.二叉树中的最大路径和
  • AI数字人:技术革新与应用全景解析
  • Linux中安装samba服务
  • (C语言)超市管理系统 (正式版)(指针)(数据结构)(清屏操作)(文件读写)
  • CVPR-2022《Efficient Deep Embedded Subspace Clustering》
  • 机器学习 --- 模型选择与调优
  • java17
  • 【Pandas】pandas DataFrame diff
  • 【Linux】gcc从源码编译安装,修改源码,验证修改的源码
  • 数据科学和机器学习的“看家兵器”——pandas模块 之三
  • undefined reference to CPUAllocatorSingleton::instance
  • EasyExcel集成使用总结与完整示例
  • 【歌曲结构】2:小节与歌曲结构信息整合
  • 【ROS2】编译Qt实现的库,然后链接该库时,报错:/usr/bin/ld: XXX undefined reference to `vtable for
  • 跨系统数据烟囱如何破局?豪森智源HSMES重构制造协同新范式‌
  • Java基础(网络编程)
  • 【软件设计师】模拟题五
  • gitlab+portainer 实现Ruoyi Vue前端CI/CD
  • 内网互通原则详解!
  • Apache HttpClient 5 用法-Java调用http服务
  • 文章复现|(1)整合scRNA-seq 和空间转录组学揭示了子宫内膜癌中 MDK-NCL 依赖性免疫抑制环境
  • duxapp 2025-01-13 更新 支持小程序配置文件
  • VisionPro斑点寻找工具Blob