ROS定制并使用自己的msg

来源:互联网 发布:手机淘宝代理怎么发货 编辑:程序博客网 时间:2024/06/05 13:09

本文为个人学习笔记,仅作为日后使用是方便自己使用,不做过多的讲解,如果有需要了解具体定制细节,可以参考官网教程或者大神的博客


1.在需要使用自定义msg的包里创建msg文件夹,专门用来存放自定义的msg文件。

mkdir msgvim msg_name.msg

2.编辑自定义的msg文件,设置需要的消息内容,这里官网上对于消息定义类型的定义。

msg文件实际上就是每行声明一个数据类型和变量名。可以使用的数据类型如下:

  • int8, int16, int32, int64 (plus uint*)
  • float32, float64
  • string
  • time, duration
  • other msg files
  • variable-length array[] and fixed-length array[C]

在ROS中有一个特殊的数据类型:Header,它含有时间戳和坐标系信息。在msg文件的第一行经常可以看到

3.修改package.xml文件,确保它包含以下两个语句。

  <build_depend>message_generation</build_depend>  <run_depend>message_runtime</run_depend>

4.修改CMakeLists.txt文件。

你需要确保你设置了运行依赖

catkin_package(  ...  CATKIN_DEPENDS message_runtime ...  ...)

找到如下代码块:
# add_message_files(#   FILES#   Message1.msg#   Message2.msg# )


去掉注释符号
#,用你的.msg文件替代Message*.msg,就像下边这样:

add_message_files(  FILES  Num.msg)


手动添加.msg文件后,我们要确保CMake知道在什么时候重新配置我们的project。 确保添加了如下代码:

Hydro和新版的ROS中,需要添加将如下代码进行修改:

# generate_messages(#   DEPENDENCIES#   std_msgs# )

修改为
generate_messages(  DEPENDENCIES  std_msgs)

在早期的版本中(ROS wiki 中文教程中),你只需要添加如下代码即可(注意:是早期版本,新版本还需要添加具体内容):

generate_messages()

现在,你已经生成自己的消息源代码了。

5.查看msg是否已经成功定义。

rosmsg show [message type]

样例:

rosmsg show beginner_tutorials/Num

6.在CMakeLists.txt中找到如下部分:

# generate_messages(#   DEPENDENCIES# #  std_msgs  # Or other packages containing msgs# )

去掉注释并附加上所有你消息文件所依赖的那些含有.msg文件的package(这个例子是依赖std_msgs,不要添加roscpp,rospy),结果如下:

generate_messages(  DEPENDENCIES  std_msgs)

由于增加了新的消息,所以我们需要重新编译我们的package:

catkin_make

所有在msg路径下的.msg文件都将转换为ROS所支持语言的源代码。生成的C++头文件将会放置在~/catkin_ws/devel/include/beginner_tutorials/Python脚本语言会在~/catkin_ws/devel/lib/python2.7/dist-packages/beginner_tutorials/msg目录下创建。lisp文件会出现在~/catkin_ws/devel/share/common-lisp/ros/beginner_tutorials/msg/路径下。

遇到了一个重新编译时自定义消息调用找不到头文件的问题。解决方法是从垃圾箱里把原来头文件存放目录中找到相应文件,放到新的编译位置。

7.现在就可以在代码中使用我们自己定义好的msg了。

c++中需要include对应的msg头文件,例如:

#include <package_name/massage_name.h>

声明类似如下代码:

package_name::massage_name::ConstPtr& input

python中需要import相应的msg库,例如:

from package_name.msg import massage_name

声明类似如下代码:

output = massage_name()
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 华为6x手机卡顿怎么办 荣耀7c手机老卡怎么办 苹果6打王者卡怎么办 电脑玩游戏显示显卡不行怎么办 笔记本玩游戏显卡不行怎么办 笔记本玩英雄联盟有点卡怎么办 英语考试作文抄了阅读理解怎么办 qq账号被盗怎么办很久了 想玩线上德州没有渠道怎么办 手机玩久了头晕怎么办 玩3d游戏头晕恶心怎么办 win10打cf没声音怎么办 英雄联盟玩家尚未准备就绪怎么办 玩手机想吐应该怎么办 玩手机多了头晕怎么办 玩cf老是无响应怎么办 玩穿越火线好卡怎么办 绝地求生画质卡顿怎么办 手机热点玩lol卡怎么办 一加6直播触手黑屏怎么办 ipad应用商店密码忘记了怎么办 爱派忘记了密码怎么办 爱派id密码忘了怎么办 爱派密码忘了怎么办 爱派的密码忘了怎么办 苹果爱派密码忘了怎么办 鼠标无法识别的usb设备怎么办 电脑鼠标无法识别usb设备怎么办 win7电脑用户密码忘了怎么办 联想win7旗舰版开不了机怎么办 驱动都被卸载了怎么办 电脑密码忘了怎么办w7旗舰版 笔记本电脑密码忘了怎么办w7 windows一键还原了怎么办 戴尔笔记本电脑键盘没反应怎么办 win10电脑系统盘满了怎么办 win7玩dnf卡死怎么办 cf老是卡住闪退怎么办 w7系统帐户被停用怎么办 海康硬盘录像机密码忘了怎么办 电信合约套餐到期后怎么办