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就建好了.

  • 相关阅读:
    Visual Studio 2010使用Visual Assist X的方法
    SQL Server 2000 评估版 升级到 SQL Server 2000 零售版
    双网卡多网络单主机同时访问
    开发即过程!立此纪念一个IT新名词的诞生
    delphi dxBarManager1 目录遍历 转为RzCheckTree2树
    5320 软件集合
    delphi tree 从一个表复制到另一个表
    DELPHI 排课系统课表
    长沙金思维 出现在GOOGLE的 金思维 相关搜索里啦!!
    如何在DBGrid的每一行前加一个单选框?
  • 原文地址:https://www.cnblogs.com/Montauk/p/6865985.html
Copyright © 2011-2022 走看看