ROS消息包

ROS消息包本文详细介绍了 ROS RobotOperati 中的标准消息包 std msgs 几何消息包 geometry msgs 和传感器消息包 sensor msgs 以及如何在 C 和 Py

大家好,欢迎来到IT知识分享网。

目录

一、 std_msgs标准消息包

二、几何包geometry_msgs和传感器包 sensor_msgs

2.1 几何消息包geometry_msgs

2.2 传感器消息包sensor_msgs

三、自定义消息类型

四、自定义的消息类型在C++节点的应用

4.1 发布者节点发布新消息类型 

4.2 订阅者节点订阅新消息类型

五、自定义的消息类型在python节点的应用

5.1 发布者节点发布新消息类型

5.2 订阅者节点订阅新消息类型

ros消息包分为两大类,一种是std_msgs标准消息包,里面一般是基础消息类型,比如string类型。另一种是常规消息包,例如传感器消息包、几何消息包等。 

ROS消息包

一、 std_msgs标准消息包

进入这个网站,可以查看所有的消息类型。

ROS消息包

给他们分一下类:

ROS消息包

二、几何包geometry_msgs和传感器包 sensor_msgs

在以下网站中搜索common_msgs,ROS Indexhttps://index.ros.org/

进入他的website网页,可以看到它包含的消息软件包:ROS消息包

5.1是跟ROS的Action通讯机制配合使用的消息类型。5.2是机器人的自我诊断消息包,一般在机器人自检的时候才会用到。5.4导航消息包。5.5里面是各种传感器数据的消息类型。除了wiki上列出的5个消息包,实际上common_msgs还有另外4个成员包。

ROS消息包

2.1 几何消息包geometry_msgs

ROS消息包

可以看到里边一些消息包类型名称里带了stamped 关键词,这些消息包都是多了一个Header,也就是多了时间和坐标系ID,将空间量和时间量进行了绑定,在一些预测和滤波算法里会用得着。

2.2 传感器消息包sensor_msgs

ROS消息包

三、自定义消息类型

step1:在工作空间中定义一个功能包,用来存储自定义消息类型。其中红框框住的这两个,是消息包的生成和运行时所需要的依赖项。

ROS消息包

step2:在功能包中新建一个文件夹msg,在这个文件夹下新建一个消息类型文件Carry.msg,注意文件末尾一定是msg。然后在这个文件里定义新的消息结构。

ROS消息包

step3:消息结构该如何定义呢?我们参考官方标准消息包std_msgs的定义格式。如下图所示,第一行表示是 std_msgs消息包的String.msg 文件的内容。其余的表示消息格式:数据类型+变量名。

ROS消息包

ROS消息包

step4:第一个数据表示段位,第二个表示星数,第三个表示发布消息。保存即可!!!

ROS消息包

step5:给这个新的消息类型设置编译规则。打开这个功能包的CMakeList.txt文件,确认find_packsge中已经让加入了message_ generation 和message_ runtime。

ROS消息包

找到以下代码示例,将示例代码复制下来,并把里面的MessageX.msg换成咱们自定义的消息包。自定义的所有消息包依次放在里面,而不是每个消息包单独创建一个。

ROS消息包

ROS消息包同理修改下一个示例代码。这一句是表明新的消息类型需要依赖的其他消息包列表,这里只用到std_ msgs的string 和int类型。所以只填写std_ msgs。

ROS消息包

ROS消息包

再修改下一个示例代码。将第三行的注释去掉,并确保里面有message_runtime。这一句是为了让依赖咱们这个新消息包的其他软件包,能够在运行时使用咱们新定义的消息类型。

ROS消息包

ROS消息包

step6:在package.xml文件中找到依赖列表,确保确保build_depend和execl_depend,都列出了message_ generation 和message_ runtime。缺失的话将他们补全。

ROS消息包

ROS消息包

step7:编译。

运行下行代码,可以查看新的消息类型是否已经进入ROS的消息列表。若看到了消息结构的显示,就表示已经进入ROS的消息列表。

ROS消息包

总结:

ROS消息包

四、自定义的消息类型在C++节点的应用

ROS消息包

4.1 发布者节点发布新消息类型 

step1:在头文件中加入新消息类型的头文件

ROS消息包

step2:在代码中使用新消息类型。

先修改发布者节点:

ROS消息包

step3:在编译规则里添加消息包的依赖。注意:要告诉编译器,先编译_msgs的功能包,然后再来编译发布者节点所在的功能包,否则编译过程中会出现消息类型未定义的错误。所以我们要找到发布者节点所在功能包的CMakeList.txt文件,在find_package(这个是设置该软件包编译所需的依赖项)中添加新消息类型所在的功能包。这样就表明了编译顺序,先编译 _msgs,再来编译咱们这个软件包。
ROS消息包

step4:为chao_node节点添加依赖项,即在CMakeList.txt中添加213行代码。参数一:节点名称,参数二是依赖项。意思是先让_ msgs创建好新的消息类型,再来编译这个chao_ node节点。

ROS消息包

step5:打开发布者节点所在功能包的package.xml文件,将p _msgs添加到build_ depend和exec_ depend 中去。
ROS消息包

step6:编译。 

4.2 订阅者节点订阅新消息类型

step1:找到订阅者节点,加入新消息类型的头文件。

ROS消息包

ROS消息包

step2:修改编译规则。需要修改CMakeList.txt和package.xml,修改方法同上。

ROS消息包

ROS消息包

ROS消息包

step3:编译。运行:启动roscore,运行发布者节点,运行订阅者节点。

总结:

ROS消息包

五、自定义的消息类型在python节点的应用

ROS消息包

5.1 发布者节点发布新消息类型

step1:找到发布者节点,在头文件中添加新消息类型头文件。

ROS消息包

ROS消息包

step2:在编译规则里添加消息包的依赖,告诉编译器,务必要先编译_msgs那个消息包,否则后面运行节点的时候,会出现找不到消息类型的错误。打开发布者节点所在功能包的CMakeList.txt文件,找到find_package(这个是设置该软件包编译所需的依赖项)中添加新消息类型所在的功能包。
 ROS消息包

step3:编译

5.2 订阅者节点订阅新消息类型

step1:编写代码

ROS消息包

ROS消息包

step2:修改编译规则,同上。

ROS消息包

ROS消息包

 step3:编译+运行

总结:

ROS消息包

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/116445.html

(0)
上一篇 2025-11-28 20:33
下一篇 2025-11-28 21:00

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信