无人驾驶-ROS-message

无人驾驶-ROS-message

ros消息类型,即是ros话题的格式,可视为ros的数据类型,基本上是指同一个意思。ros消息类型是基于C++基本类型封装为.msg文件实现,rosmsg指令用于消息管理。

一、ros预定义的消息类型

所谓预定义消息类型是可以直接引用,不需要自己实现,ros自定义数据类型通常包括两类,一类是在 std_msgs 包下,包含基本数据类型,例如字符型、整型以及浮点型等;一类是在 common_msgs 包下,包含常用的数据类型、例如传感器数据类型、导航数据类型以及几何数据类型等。

1.1 基本数据类型

基本数据类型位于 std_msgs包,在ROS 话题篇,我们使用了ros字符串类型 std_msgs/String,就是一种基本类型,可使用 rosls 查看其消息文件路径:

rosls  std_msgs/msg/String.msg

使用 roscat 通过消息文件查看其具体实现:

roscat std_msgs String.msg

也可直接使用 rosmsg 查看其具体实现:

rosmsg show std_msgs/String

可以通过 rosmsg 查看 ros 所有的基本数据类型:

rosls  std_msgs/msg/

1.2 常用数据类型

常用数据类型基本上是基于基本数据类型封装而成,按照功能,封装在不同的包内,例如图像数据封装在 sensor_msgs包 下,通过 rosls 和 rosmsg 指令查看如下:

rosls sensor_msgs/msg/Image.msg
rosmsg show sensor_msgs/Image

除了图像基本数据外,还包含一个消息类型:std_msgs/Header,此消息类型包含三项:序列号, 时间戳 以及 帧id, 帧id表示消息类别,例如 camera,表示相机数据;序列号表示是第几帧数据,时间戳常用语与其他消息做同步使用。基本上所有的常用数据类型都会包含此数据类型。

1.3 自定义消息类型

虽然ros提供了较为丰富的预定义消息类型,但是在实际开发中,经常需要自己定义合适的数据类型以满足自己的需求,下面通过创建两个节点,介绍下如何自定义消息,以及如何使用自定义消息。

(1)创建自定义消息

roscd beginner_tutorials/
mkdir msg
touch msg/Num.msg

Num.msg文件内容如下:

int32 a
int32 b

至此我们创建了一个自定义消息。

(2)配置package.xml
在 package.xml 文件中添加如下三行,使用任何自定义消息,都必须使用这三行。

<build_depend>message_generation</build_depend>
<build_export_depend>message_runtime</build_export_depend>
<exec_depend>message_runtime</exec_depend>

第一行表示编译时依赖,第二行导出依赖,即其他包中程序可以使用本消息,第三行表示运行时依赖。

(3)配置CMakeLists.txt

将 message_generation 加入到 find_package(), find_package() 要与 package.xml 文件中的 build_depend 一致,表示编译时依赖的包。将 Num.msg 加入 add_message_files(),表示要编译的消息文件。放开 generate_messages(),表示生成消息头文件。将 message_runtime 加入 catkin_package() 表示导出运行时依赖。

1.4 检测自定义消息是否完成

rosmsg show beginner_tutorials/Num

输出:

int32 a
int32 b

表示自定义消息成功。在这一步我们还没有编译消息文件,下一步编译消息文件。

1.5 编译消息文件

catkin_make

二、ROS常用消息

ros_msgs:http://wiki.ros.org/common_msgs?distro=noetic#sensor_msgs

2.1 geometry_msgs

geometry_msgs数据总结: ROS_geometry_msgs

2.2 nav_msgs

nav_msgs数据总结: ROS_nav_msgs

2.3 sensor_msgs

sensor_msgs数据总结: ROS_sensor_msgs

链接

  1. https://zhuanlan.zhihu.com/p/94338630
上一篇:C++类的拷贝控制demo


下一篇:创建简单的发布者和订阅者