定义消息结构和使用
定义消息结构
在功能包中新建 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