在ROS中消息通过msg定义。
- msg文件:用于描述ROS消息,用于生成对应不用语言的源代码。
msg文件存放于msg目录中。
msg文件是一个文本文件,每一包含一个类型和一个名称,类型可以是一下几种:
- int8, int16, int32, int64 (plus uint*)
- float32, float64
- string
- time, duration
- other msg files
- variable-length array[] and fixed-length array[C]
另外,在第一行中往往会加入一个Header。下面是一个典型的msg文件:
Header header
string child_frame_id
geometry_msgs/PoseWithCovariance pose
geometry_msgs/TwistWithCovariance twist
或者:
string first_name
string last_name
uint8 age
uint32 score
两者的不同是,前者调用了其他的消息,而后者只用了最原始的数据类型。
在msg编译前,需要修改package.xml和CMakeLists.txt。所谓对msg编译,实际上就是通过.msg文件生成对应编程语言的头文件。
在package.xml文件中加入一下两行:
<build_depend>message_generationbuild_depend>
<run_depend>message_runtimerun_depend>
在CMakeLists.txt文件中,将message_generation添加到find_package()函数调用中。
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
**message_generation**
)
另外,在CATKIN_DEPENDS中加入message_runtime:
catkin_package(
...
CATKIN_DEPENDS message_runtime ...
...)
将以下代码块前的注释去掉:
# add_message_files(
# FILES
# Message1.msg
# Message2.msg
# )
将Message*.msg替换成我们自己写的.msg文件。
另外,将以下代码块前的注释去掉,确保generate_messages() 函数被调用:
# generate_messages(
# DEPENDENCIES
# std_msgs
# )
完成上述工作后,我们在catkin workspace中执行如下命令:
$ roscd [package_name]
$ cd ../..
$ catkin_make install
此时,在msg文件夹中的.msg文件就会成对应于各种语言的文件。其中,C++的消息头文件会被生成在 ~/catkin_ws/devel/include/[package_name]中。
可以通过rosmsg来查看ROS消息:
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
也可通过如下方式获取子命令的帮助。