• ROS消息, 服务, 主题, 订阅 1


    首先, msg, 消息可以理解成一个类, 或者结构体, 用于在C++跟Python之间传递数据用, 里面就是数据结构类似:

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

    整数, 浮点数, 字符串, 时间, 时间间隔, 其他的msg文件类型, 固定长度数组跟非固定长度数据, 等等, 其实跟一个java bean的概念很像吧.

    例子:

      Header header
      string child_frame_id
      geometry_msgs/PoseWithCovariance pose
      geometry_msgs/TwistWithCovariance twist

    这个msg里面包含了, Header, 其他msg类型, string, geometry_msgs/PosewithCovariance, 字面理解就是姿势类.

    srv, 服务类似msg, 只是用---符号分隔开发送跟回应, 比如:

    int64 A
    int64 B
    ---
    int64 Sum

    就是request是A, B, response是Sum

    概念介绍完毕, 接下来实战一下, 首先创建msg, 其实就是写一个文件在package的/msg/文件夹.

    $ roscd beginner_tutorials
    $ mkdir msg
    $ echo "int64 num" > msg/Num.msg
    

    接着, 修改package.xml文件, 让编译跟运行的时候, 认识msg文件:

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

    然后修改CMakeLists.text, 加入msg的支持, 在已有的定义段落内添加即可:

    find_package(catkin REQUIRED COMPONENTS
       roscpp
       rospy
       std_msgs
       message_generation
    )
    
    catkin_package(
      ...
      CATKIN_DEPENDS message_runtime ...
      ...)
    add_message_files(
      FILES
      Num.msg
    )

    generate_messages(
      DEPENDENCIES
      std_msgs
    )

    上面的很多内容已经存在, 只需要去掉注释部分即可.

    如果以后, 你想查看某个package的msg数据类型, 用这个命令:

    $ rosmsg show beginner_tutorials/Num
    

    如果你连包名都记不住, 直接rosmsg show Num也可以.

    接下来是srv, 再说一次, srv跟msg一个概念, 是个类, 只是分为request跟response而已.

    先建一个srv文件夹:

    $ roscd beginner_tutorials
    $ mkdir srv
    

     这里, 可以用roscp命令, 从别的package里面copy一个srv文件过来

    $ roscp rospy_tutorials AddTwoInts.srv srv/AddTwoInts.srv
    

    一样, 检查一下package.xml, 下面的有没有被注释, 有的话, 取消掉.

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

    CMakeLists.c里面同样:

    # Do not just add this line to your CMakeLists.txt, modify the existing line
    find_package(catkin REQUIRED COMPONENTS
      roscpp
      rospy
      std_msgs
      message_generation
    )
    

    srv跟msg本质上一样, 所以这里也一样.

    add_service_files(
      FILES
      AddTwoInts.srv
    )
    

     service文件也要增加进去.

    同样, 如果要查看service, 可以用类似查看msg的命令:

    $ rossrv show beginner_tutorials/AddTwoInts
    

    然后, 无论msg,还是srv, 都要再改下面:

    generate_messages(
      DEPENDENCIES
      std_msgs
    )
    

     然后启动安装:

    $ roscd beginner_tutorials
    $ cd ../..
    $ catkin_make install
    

    然后你会发现, 在devel/include/beginner_tutorials目录下面,msg被干成了.h文件,可能是被序列化了吧...

    OK, msg跟srv就建好了.

  • 相关阅读:
    我的vim开发环境搭建:C/C++/Go,持续更新中
    MFC的组合框(ComboBox)控件切换下拉样式
    回顾下杂乱的10月
    C++将整型数据转换成大端或小端存储顺序
    C/C++动态分配连续空间,下标越界导致的free():invalid next size问题
    O(n)空间复杂度,打印杨辉三角形的前n行
    C指针笔试题,蛋疼的多重指针运算,谭浩强的阴影
    2017滴滴出行笔试题:异或和为0的最大区间个数
    manjaro安装
    关于top命令
  • 原文地址:https://www.cnblogs.com/Montauk/p/6865985.html
Copyright © 2020-2023  润新知