在使用ROS时,其自带的消息格式已经使开发人员很方便,但是仍然避免不了会有一些特别的消息需要自己去定义,此时,就需要了解ROS中如何编写配置自定义消息格式。
1、新建filename.msg文件
首先,需要在本功能包pkg_name
(功能包名,可自定义)下新建msg文件,并在msg文件下新建filename.msg
(filename是文件名,可自定义)。
2、补充消息内容
在自定义消息文件中,我们最常用的是float32
,float64
,float32[]
等,他们都在std_msgs
标准消息格式下,当然也可以引用其他消息类型,比如geometry_msgs/Pose
。
举例:
float32 heigh
float32[] arr;
geometry_msgs/Pose pose
3、配置CMakeList.txt文件
(1)
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs ##自定义消息类型filename.msg中引用的标准消息
geometry_msgs ##自定义消息类型filename.msg中引用的标准消息
message_generation ##消息生成必加
)
(2)
## Generate messages in the 'msg' folder
add_message_files(
FILES
filename.msg ##新建的消息文件名
)
(3)
## Generate added messages and services with any dependencies listed here
generate_messages(
#添加所依赖的消息类型
DEPENDENCIES
std_msgs ##
geometry_msgs ##
)
(4)
catkin_package(
# INCLUDE_DIRS include
# LIBRARIES wgs84toenu
CATKIN_DEPENDS roscpp rospy std_msgs message_runtime
# DEPENDS system_lib
)
4、配置package.xml文件
添加这两句
<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>
5、在本功能包pkg_name下使用filename.msg
#include<pkg_name/filename.h>//调用头文件
pkg_name::filename fn;//定义该类型变量,接下来就可以使用了
6、在其他功能包pkg2_name下使用filename.msg
(1)配置pkg2_name的CMakeList.txt文件
(1)
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
pkg_name ##将包含filename.msg的功能包放进来
)
(2)
add_dependencies(${PROJECT_NAME}_node
${${PROJECT_NAME}_EXPORTED_TARGETS}
${catkin_EXPORTED_TARGETS}
pkg_name_gencpp ##调用同一工作空间的自定义消息类型时注明依赖关系,防止发生头文件找不到的报错
)
(2)配置pkg2_name的package.xml文件
添加:
<build_depend>pkg_name</build_depend>
<exec_depend>pkg_name</exec_depend>
(2)在pkg2_name中使用filename.msg
#include<pkg_name/filename.h>//调用头文件
pkg_name::filename fn_;//定义该类型变量,接下来就可以使用了