ROS消息包

本文详细介绍了ROS(RobotOperatingSystem)中的标准消息包std_msgs,几何消息包geometry_msgs和传感器消息包sensor_msgs,以及如何在C++和Python节点中自定义并应用新的消息类型。包括发布者和订阅者的实现步骤,以及依赖关系管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、 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类型。另一种是常规消息包,例如传感器消息包、几何消息包等。 

一、 std_msgs标准消息包

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

给他们分一下类:

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

在以下网站中搜索common_msgs,ROS Indexicon-default.png?t=N7T8https://index.ros.org/

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

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

2.1 几何消息包geometry_msgs

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

2.2 传感器消息包sensor_msgs

三、自定义消息类型

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

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

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

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

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

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

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

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

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

step7:编译。

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

总结:

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

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

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

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

先修改发布者节点:

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

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

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

step6:编译。 

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

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

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

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

总结:

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

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

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

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

再打开package.xml,将qqp_msgs添加到build_depend和exec_depend 中去。

step3:编译

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

step1:编写代码

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

 step3:编译+运行

总结:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值