• 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/ 路径下.

  • 相关阅读:
    svn command line tag
    MDbg.exe(.NET Framework 命令行调试程序)
    Microsoft Web Deployment Tool
    sql server CI
    VS 2010 One Click Deployment Issue “Application Validation did not succeed. Unable to continue”
    mshtml
    大厂程序员站错队被架空,只拿着五折工资!苟活和离职,如何选择?
    揭秘!Windows 为什么会蓝屏?微软程序员竟说是这个原因...
    喂!千万别忘了这个C语言知识!(~0 == -1 问题)
    Linux 比 Windows 更好,谁反对?我有13个赞成理由
  • 原文地址:https://www.cnblogs.com/BlueMountain-HaggenDazs/p/6279025.html
Copyright © 2020-2023  润新知