ROS自定义消息结构

 

定义消息结构和使用

定义消息结构

在功能包中新建 msg 目录,里面创建 后缀名为 .msg 的文件

使用之前写下这篇文档时创建的功能包 learing_topic

$ cd <work_space>/src/learning_topic
$ mkdir msg && cd msg
$ touch Person.msg
$ vim Person.msg
# 写入如下内容
string name
uint8 sex
uint8 age

uint8 unknown = 0
uint8 male = 1
uint8 female = 2

‼️!!! update package.xml

<!-- 新增编译依赖 -->
<build_depende>message_generation</build_depende>
<!-- 新增运行时依赖 -->
<exec_depend>message_runtime</exec_depend>

‼️!!! update CMakeLists.txt

find_package(#之前的一些包
							message_geneartion)

# 一般 add_message_files(FILES 都是注释的,可以找到这两行,取消注释, 然后添加 Person.msg
add_message_files(
									FILES
									Person.msg)
# 取消 generate_messages(DEPENDENCIES 的注释  添加 std_msgs
# 它的作用在于体现自定义的消息结构是依赖于 std_msgs 的,里面定义了基本的 string uint8 等等类型
generate_messages(DEPENDENCIES std_msgs)

catkin_package(#之前的一些包
								message_runtime)

build

$ cd <work_space>
$ catkin_make

这时候可以发现生成了 Person.h 这个头文件,位于 devel/include/learning_topic/Person.h

使用

#include <learning_topic/Person.h>

// 使用此数据结构定义新变量
learning_topic::Person person_msg;
// 改变消息的属性值
person_msg.name = "Tom";
person_msg.age = 18;
person_msg.sex = learning_topic::Person::male; // 注意它使用了消息结构中自定义的 宏
// learning_topic::Person::male 的代表 uint8类型的 1