使用ros自带的消息显然满足不了我们的需要,这个时候我们就要自定义消息了。
假如我们想自定义消息是:一个person,并且它有如下属性
string name
uint8 sex
uint8 age
uint8 unknown = 0
uint8 male = 1
uint8 female = 2
你可能会问, 下面三行是什么意思? 其实,上面的三行如果是属性的话,下面三行的作用其实是常值属性,也就是我们 一旦调用 person.male 的话,我们就得到了 数字1 .
如何在ros中起作用呢?
一 .
在如下路径下面建立 Person.msg
home/工作空间名/src/功能包名
内容就是
string name
uint8 sex
uint8 age
uint8 unknown = 0
uint8 male = 1
uint8 female = 2
二 .
更改package.xml文件 添加下面两行
<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>
解释: ros为我们提供了 自定义消息的 一套方法, 也即是我们的自定义消息要依赖 message_generation ,同时执行时要依赖 message_runtime.
这个runtime 就相当于ros 为 我们自己定义的消息开辟的 运行空间,和ros内置的消息划清界限,方便运行管理。
三.
更改 CMakelists
先在文件前面的
find_package(catkin REQUIRED COMPONENTS){}
花括号里面中添加:
message_generation
其次 , 向下翻, 找找一个# 包围起来的
Declare ROS dynamic reconfigure parameters
在它上面添加
add_message_files(FILES Person.msg)
generate_messages(DEPENDENCIES std_msgs)
解释:
ros有自己的消息管理系统,你想把自己定义的消息放进去, 就要做出上面的声明, 第一句话代表了 你想把自己的 msg 文件添加到ros的消息系统中去,第二句话代表了你自己的消息在产生中也依赖了ros标准消息(例如 uint8)
最后,向下翻, 找找一个# 包围起来的 Build,
上面有个catkin_package{}
但是内容全部被注释掉了, 这个时候打开 CATKIN_DEPENDS,同时在这一行后面追加上 message_runtime
然后保存 ,回到工作空间目录 ,进行一下catkin_make 和 source devel/setup.bash
报错的话再仔细看看有没有拼错就好了。