zoukankan      html  css  js  c++  java
  • 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就建好了.

  • 相关阅读:
    单层感知机实现或运算
    Ubuntu关于eclipse新插件不显示的解决方案
    台州学院maximum cow训练记录
    利用矩阵快速幂转换的题目
    A Few Laughing Men
    TOJ1196: RSA Signing
    HDU
    2018“百度之星”程序设计大赛
    2018 “百度之星”程序设计大赛
    2018 “百度之星”程序设计大赛
  • 原文地址:https://www.cnblogs.com/Montauk/p/6865985.html
Copyright © 2011-2022 走看看