阿克曼-幻宇机器人系列教程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.mzph.cn/news/905626.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python 调试扩展版本兼容问题解决纪实

在 Python 开发中&#xff0c;调试工具的正常使用对效率至关重要。近期在公司项目中&#xff0c;便遇到了 Python 调试扩展与版本不兼容的问题。公司 ERP 服务器采用 Ubuntu 18.04 系统&#xff0c;其标配 Python 版本为 3.6&#xff0c;而常用的 Python Debugger 扩展对版本有…

React 第四十二节 Router 中useLoaderData的用途详解

一、前言 useLoaderData&#xff0c;用于在组件中获取路由预加载的数据。它通常与路由配置中的 loader 函数配合使用&#xff0c;用于在页面渲染前异步获取数据&#xff08;如 API 请求&#xff09;&#xff0c;并将数据直接注入组件&#xff0c;从而简化数据流管理。 二、us…

Linux——mysql主从复制与读写分离

目录 一&#xff0c;理解什么是mysql主从复制 1&#xff0c;mysql支持的复制类型 2&#xff0c;mysql主从复制的工作流程 二&#xff0c;配置mysql主从复制 三&#xff0c;配置mysql主主复制 四&#xff0c;mysql读写分离 1&#xff0c;了解什么是mysql读写分离 2&…

MongoDB数据库深度解析:架构、特性与应用场景

在现代应用程序开发中&#xff0c;数据存储技术的选择至关重要。在众多的数据库管理系统中&#xff0c;MongoDB以其灵活性和强大的功能迅速崛起&#xff0c;成为NoSQL数据库中的佼佼者。本文将深入解析MongoDB的架构、核心特性、性能优化及其在实际应用中的最佳实践&#xff0c…

3D曲面上的TSP问题(一):曲面上点集距离求解

3D曲面上&#xff0c;两点的距离求解不能采用欧式距离&#xff0c;而需要计算测地线距离。 代码使用CGAL 5.6.2 OpenCV 4.11.0 版本实现 #include "cgal_utils.h" #include <CGAL/AABB_tree.h> #include <CGAL/AABB_traits.h> #include <CGAL/AABB_…

【歌曲结构】2:小节与歌曲结构信息整合

歌曲小节与结构信息整合 我将为您整合小节信息与歌曲结构,创建一个更加详细的JSON数据结构。 处理方法 将小节时间与歌曲结构段落进行匹配为每个小节添加所属段落信息为小节添加格式化的时间戳为小节添加对应时间范围内的歌词{"song_title": "财神庙前许三亿…

C语言:深入理解指针(3)

目录 一、数组名的理解 二、用指针访问数组 三、一维数组传参的本质 四、冒泡排序 五、二级指针 六、指针数组 七、指针数组模拟二维数组 八、结语 一、数组名的理解 数组名其实就是首元素的地址 int arr[3] {1,2,3}; printf("arr :%p\n" ,arr); printf(…

Spring MVC 接口的访问方法如何设置

RequestMapping 是 Spring 框架中用于映射 HTTP 请求到控制器方法的注解。它支持以下 HTTP 方法访问类型&#xff0c;通过 method 属性指定&#xff1a; GET&#xff1a;用于获取资源POST&#xff1a;用于提交数据PUT&#xff1a;用于更新资源DELETE&#xff1a;用于删除资源PA…

linux libdbus使用案例

以下是一个基于 Linux libdbus 的详细指南,包含服务端和客户端的完整代码示例,涵盖 方法调用、信号发送 和 异步消息处理。libdbus 是 D-Bus 的底层 C 库,直接操作 D-Bus 协议,适合需要精细控制的场景。 1. libdbus 的核心机制 连接管理:通过 dbus_bus_get 连接系统总线或…

Day118 | 灵神 | 二叉树 | 删点成林

Day118 | 灵神 | 二叉树 | 删点成林 1110.删点成林 1110. 删点成林 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 最直接的思路就是看当前结点的值是不是在要删除的列表中&#xff0c;在的话删除当前结点并把左右孩子加入res中 很可惜这样是错的&#xff0c;…

趣味编程:钟表

目录 1. 效果展示 2. 源码展示 3. 逻辑概述 3.1 表针绘制函数&#xff08;DrawHand&#xff09; 3.2 表盘绘制函数 3.3 主程序逻辑 4. 小结 概述&#xff1a;本篇博客主要介绍简易钟表的绘制。 1. 效果展示 该钟表会随着系统的时间变化而变化&#xff0c;动态的效…

ansible进阶02

管理主机清单变量 使用变量的原则 变量创建的位置 角色的defaults或vars目录主机清单playbook或主机清单所在位置的子目录group_vars和host_varsplay或角色或任务 无论在哪创建变量&#xff0c;都应该遵守一些规则&#xff1a; 保持简洁不要重复造轮子。不要反复在多个位置…

C40-指针

一 指针的引入 什么是指针:指针是一个变量&#xff0c;其值是另一个变量的内存地址 简单的使用地址输出一个变量: 代码示例 #include <stdio.h> int main() {int a10;printf("a的地址是:%p\n",&a);printf("a%d\n",*(&a)); //*号是取值运算符…

Nginx 返回 504 状态码表示 网关超时(Gateway Timeout)原因排查

Nginx 返回 504 状态码表示 网关超时&#xff08;Gateway Timeout&#xff09;&#xff0c;这意味着 Nginx 作为反向代理服务器&#xff0c;在等待上游服务器&#xff08;如后端应用服务器、数据库服务器等&#xff09;响应时&#xff0c;超过了预设的时间限制&#xff0c;最终…

DeepSeek推理优化技巧:提升速度与降低成本

文章目录 DeepSeek推理优化技巧&#xff1a;提升速度与降低成本引言一、模型优化&#xff1a;减少模型参数与计算量1. 模型剪枝&#xff08;Pruning&#xff09;2. 模型量化&#xff08;Quantization&#xff09;3. 知识蒸馏&#xff08;Knowledge Distillation&#xff09; 二…

深度解析 Sora:从技术原理到多场景实战的 AI 视频生成指南【附学习资料包下载】

一、技术架构与核心能力解析 1.1 时空建模体系的创新突破 Sora 在视频生成领域的核心优势源于其独特的时空建模架构。区别于传统将视频拆解为单帧处理的模式,Sora 采用时空 Patch 嵌入技术,将连续视频序列分割为 32x32 像素的时空块(每个块包含相邻 3 帧画面),通过线性投…

【实战篇】数字化打印——打印部署管理接口开发

前言 前面的章节已经介绍了打印管理模块的主要界面设计&#xff0c;本篇介绍用myBuilder开发界面接口&#xff0c;实现最终的功能。 1. 配置打印应用菜单 首先配置挂载好模块菜单 让菜单点击能访问到对应的页面 2. 打印部署管理数据表详细设计 以下是打印部署管理的数据表字…

Window下Jmeter多机压测方法

1.概述 Jmeter多机压测的原理&#xff0c;是通过单个jmeter客户端&#xff0c;控制多个远程的jmeter服务器&#xff0c;使他们同步的对服务器进行压力测试。 以此方式收集测试数据的好处在于&#xff1a; 保存测试采样数据到本地机器通过单台机器管理多个jmeter执行引擎测试…

ResourceBundle多语言国际化

在 Java 中&#xff0c;ResourceBundle 是一个用于国际化&#xff08;i18n&#xff09;和本地化&#xff08;l10n&#xff09;的一种机制&#xff0c;它使得程序能够根据不同的区域设置&#xff08;如语言、国家等&#xff09;加载不同的资源文件。ResourceBundle 主要用于从外…

精益数据分析(62/126):从客户访谈评分到市场规模估算——移情阶段的实战进阶

精益数据分析&#xff08;62/126&#xff09;&#xff1a;从客户访谈评分到市场规模估算——移情阶段的实战进阶 在创业的移情阶段&#xff0c;科学评估用户需求与市场潜力是决定产品方向的关键。今天&#xff0c;我们结合Cloud9 IDE的实战经验与《精益数据分析》的方法论&…