ROS 学习备忘录 - 05 - 自定义 msg 类型,并在外部功能包调用

想要自定义消息类型,又需要在同一空间的外部功能包中调用,备忘。

1. 自定义消息类型

1.1 新建一个功能包来管理自定义消息类型

在实际使用中,利用单独的功能包来创建特定消息类型,与其他功能代码区分开,方便后续排错。

  • 新建功能包 udf_msgs 依赖一些常用的 ROS 包,udfuser defined 之意。

    catkin_create_pkg udf_msgs roscpp rospy std_msgs sensor_msgs geometry_msgs nav_msgs
    
  • 新建 msg 文件夹,并新建一个 ``xx.msg` 文件为例子,简单编写一下文件。

     cd your_ws/src/udf_msgs/使用 
     mkdir msg && cd msg
     touch xx.msg && gedit xx.msg
    
  • xx.msg 文件内部示例

    # This represents xx msg with reference coordinate frame and timestamp
    Header header
    std_msgs/Int16 test_num
    
  • 修改 package.xml 文件,添加两行用于生成消息。

     <build_export_depend>message_generation</build_export_depend>
     <exec_depend>message_runtime</exec_depend>
    
  • 修改 CMakeLists.txt 文件。

    add_message_files(FILES xx.msg) #注意和消息文件同名
    generate_messages(DEPENDENCIES std_msgs) #这里只依赖了 std_msgs
    catkin_package(
    #  INCLUDE_DIRS include
    #  LIBRARIES usv_msgs
    # 取消下面这句的注释,并添加 message_runtime
       CATKIN_DEPENDS geometry_msgs nav_msgs roscpp rospy sensor_msgs std_msgs message_runtime 
    #  DEPENDS system_lib
    )
    
  • 编译功能包,并检查消息是否成功生成,成功的话应该会输出你定义的类型,否则检查上面步骤。

    cd your_ws && catkin_make
    source your_ws/devel/setup.zsh
    rosmsg show udf_msgs/xx
    
1.2 在其他功能包中使用上述自定义消息类型

其他的功能包定义为 “调用包”,自定义消息功能包 udf_msgs 定义为 “消息包”。

  • 调用包修改 package.xml 文件,添加依赖。

    <build_depend>xx_msgs</build_depend>
    <build_export_depend>xx_msgs</build_export_depend>
    <exec_depend>xx_msgs</exec_depend>
    
  • 调用包修改 CMakeLists.txt 文件。

    find_package (udf_msgs) # 增加 udf_msgs
    
    catkin_package(
      INCLUDE_DIRS include #取消这行注释
    #  LIBRARIES arduino_pkg
    #  CATKIN_DEPENDS geometry_msgs roscpp sensor_msgs std_msgs
    #  DEPENDS system_lib
    )
    
    include_directories(
     include #取消这行注释
      ${catkin_INCLUDE_DIRS}
    )
    
  • 调用包中的节点包含头文件:

    #include <udf_msgs/xx.h>
    udf_msgs::xx xx_msg; //定义消息
    xx_msg.header; //赋值消息
    xx_msg.test_num;  //赋值消息
    
1.3 小 TIPS
  • 生成新消息类型后,在 your_ws/devel/include 中查看是否有消息的头文件。
  • vscode 编写可能会出现消息正确生成,但包含报错的问题,尽管编译没有问题,但是红线确实恼人,找到你 调用包 中的 .vscode 文件夹,删掉重新打开 vscode 即可解决。该文件夹为隐藏属性,可利用 ctrl+Hls -a
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值