ROS编程第二步:自定义消息

使用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

报错的话再仔细看看有没有拼错就好了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章