目录
二、几何包geometry_msgs和传感器包 sensor_msgs
ros消息包分为两大类,一种是std_msgs标准消息包,里面一般是基础消息类型,比如string类型。另一种是常规消息包,例如传感器消息包、几何消息包等。
一、 std_msgs标准消息包
进入这个网站,可以查看所有的消息类型。
给他们分一下类:
二、几何包geometry_msgs和传感器包 sensor_msgs
在以下网站中搜索common_msgs,ROS Indexhttps://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:编译+运行
总结: