zoukankan      html  css  js  c++  java
  • ROS学习(十一)—— msg srv

    一、msg 和 srv介绍

    1、定义

      消息(msg): msg文件就是一个描述ROS中所使用消息类型的简单文本。它们会被用来生成不同语言的源代码

      服务(srv): 一个srv文件描述一项服务。它包含两个部分:请求和响应。 

    2、存放位置

      msg文件存放在packagemsg目录下,srv文件则存放在srv目录下。

    3、msg本质

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

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

     PS:有一个特殊的类型Header : 包含时间戳和坐标系信息

        在msg文件的第一行经常可以看到Header header的声明.

    4、SRV文件结构

    int64 A
    int64 B
    ---
    int64 Sum
    

     srv文件分为请求和响应两部分,由'---'分隔

    二、msg

    1、创建一个msg

    (1)创建msg文件

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

    (2)修改package.xml,确保msg文件被转换成为C++,Python和其他语言的源代码

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

      在package.xml添加这两行

    (3)修改CMakeLists.txt

    A、修改find_package

    find_package(catkin REQUIRED COMPONENTS
       roscpp
       rospy
       std_msgs
       message_generation
    )

    B、修改catkin_package

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

    C、修改add_message_files(记得取消注释)

    add_message_files(
      FILES
      Num.msg
    )

    D、手动添加.msg文件后,我们要确保CMake知道在什么时候重新配置我们的project。(取消注释)

    generate_messages(
      DEPENDENCIES
      std_msgs
    )

    2、使用rosmsg来确定ROS是否能够识别消息

    (1)语法:

    rosmsg show [message type]

    (2)demo:

    rosmsg show beginner_tutorials/Num

    (3)如果不确定是哪个包,可以省略包名

    rosmsg show Num

    三、srv

    1、创建一个srv

    (1)先创建srv文件夹

    roscd beginner_tutorials
    mkdir srv

    (2)使用复制的方式创建srv文件

    A、语法

    roscp [package_name] [file_to_copy_path] [copy_path]

    B、实例

    roscp rospy_tutorials AddTwoInts.srv srv/AddTwoInts.srv

    (3)跟msg一样修改package.xml文件,加入这两个依赖

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

    (4)修改CMakeLists.txt中的find_package

    find_package(catkin REQUIRED COMPONENTS
      roscpp
      rospy
      std_msgs
     message_generation
    )

    (5)修改CMakeLists.txt中的add_service_files(去掉注释)

    add_service_files(
      FILES
      AddTwoInts.srv
    )

    2、使用rossrv来确保ROS可以识别服务

    (1)语法:

    rossrv show <service type>

    (2)demo:

    rossrv show beginner_tutorials/AddTwoInts

    (3)可以省略包名

    rossrv show AddTwoInts

    四、msg 和 srv 编译

    1、修改CMakelists.txt

    generate_messages(
      DEPENDENCIES
      std_msgs
    )

      记得去掉注释

    2、进行编译

    catkin_make install

    3、所有在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/ 路径下.

  • 相关阅读:
    Sigma Function 数学 因子求和
    luogu P3800 Power收集
    LibreOJ #110. 乘法逆元
    luogu P3802 小魔女帕琪
    LibreOJ #6000. 「网络流 24 题」搭配飞行员
    LibreOJ #103. 子串查找
    LibreOJ #102. 最小费用流
    LibreOJ #109. 并查集
    BZOJ 1922: [Sdoi2010]大陆争霸
    LibreOJ #119. 最短路
  • 原文地址:https://www.cnblogs.com/BlueMountain-HaggenDazs/p/6279025.html
Copyright © 2011-2022 走看看