上篇ros发布者和订阅者的写法提到了ros的消息格式,数据要在ros中传输,就要保证ros能够辨别出这种数据。个人把ros消息格式类比成java中的类,有ros自动定义的格式,也可以自定义消息格式,比如说,上篇用到的std_msg格式,就是由c++的基本数据类型封装而成,其data属性就是String类型的 。
数据在ros框架进行传递,之前说过,只要指明数据的起点和终点还有数据类型,这里说的就是这个数据类型,下面我从三个方面来说一下数据类型。
- ros自带消息格式的查看
在编写话题订阅者和发布者时,难免要将ros的消息格式转换成为c++的基本数据类型,然后才能进行数据处理。比如说对相机的数据进行处理的时候,必须要知道相机数据由哪些基本数据组成,才能进行下一步的转换和处理。
可以通过查看ros api来确定这些数据
ros api地址:http://wiki.ros.org/APIs
也可以通过命令
rostopic type + 话题名 确定消息类型
然后通过命令
rosmsg show + 消息类型 查看基本数据组成 - 自定义消息格式
这个可以在创客智造上查看详细的教程,网址:https://www.ncnynl.com/archives/201702/1290.html
步骤: - 新建功能包,在包下新建msg路径,在msg下新建一个.msg文件
- 编辑msg文件
添加如下内容:
string first_name
string last_name
uint8 age
uint32 score
有一点编程基础的都能看出来新建的消息类型包括string类型的first_name
,last_name 和uint8类型的age还有uint32类型的score - package.xml文件的配置
确保package.xml文件里包含下面两行
message_generation </ build_depend>
message_runtime </ exec_depend>
其中message_generation是构建时环境,message_runtime是运行时环境 - cmakelist.txt文件的配置
在find_packag里添加message_generation,将构建时环境添加到cmakelist里
添加如下内容
add_message_files(
FILES
文件名.msg
)
编译工程:catkin_make
此时消息格式已经成功生成,运行命令rosmsg show +包名 +消息名 就可以看到自定义的消息类型
- 使用自定义的消息格式
自定义的消息格式生成后就写进了本机的ros系统,需要使用的话就像std_msg一样,在头文件中引入即可
- rosmsg常用命令
rosmsg show Show message description
rosmsg list List all messages
rosmsg md5 Display message md5sum
rosmsg package List messages in a package
rosmsg packages List packages that contain messages

本文介绍了ROS消息格式,将其比喻为Java中的类。ROS提供预定义的消息格式,如std_msgs,同时允许用户自定义消息格式。内容涵盖如何查看ROS自带消息格式,通过rosmsg命令查看消息详情,自定义消息格式的步骤,包括创建msg文件、配置package.xml和CMakeLists.txt,以及如何使用自定义消息。此外,还列举了rosmsg的相关命令用于操作和查看消息。
5121

被折叠的 条评论
为什么被折叠?



