• 创建一个ROS msg


    1. msg

    •msg:msg文件是简单的文本文件,用于描述ROS中消息(消息的各个参数项)。用于为不同的编程语言生成有关消息的源代码。

    •srv:描述服务的文件,由两部分组成:请求和反馈;

    msg文件放置在功能包的msg目录下,srv文件放置在srv目录下。

    msgs只是一些每行带有类型和名字的文本文件,可以使用的类型如下:
    •        int8, int16, int32, int64 (plus uint*)
    •        float32, float64
    •        string
    •        time, duration
    •        other msg files
    •        variable-length array[] and fixed-length array[C]

    ROS中有一个比较特殊的类型:Header,它包含ROS系统中常用的时间戳和坐标信息。一般在msg文件的第一行会指定为Header header。

    下面为msg的例子,这个例子使用了Header,string字符串及两个其他类型的msgs。
      Header header
      string child_frame_id
      geometry_msgs/PoseWithCovariance pose
      geometry_msgs/TwistWithCovariance twist

    srv文件非常类似于msg文件,他们包含两个部分,请求和反馈,这两个部分被“---”分隔开,下面为srv的一个例子。
    int64 A
    int64 B
    ---
    int64 Sum

    在上面的例子中,A和B是用于请求的变量,而Sum是反馈的结果变量。

    2. Using msg
    2.1 Creating a msg

    我们在前面课程中创建的功能包里定义一个新的msg。

    $ cd ~/catkin_ws/src/beginner_tutorials
    $ mkdir msg
    $ echo "int64 num" > msg/Num.msg

    在上面例子中,*.msg文件只是简单的包含一行(定义信息)。如果必要,可以如下所示添加多个元素来生成一个复杂的文件:
    string first_name
    string last_name
    uint8 age
    uint32 score

    还有一点需要确认的是,msg文件需要转换为C++,Python和其他编程语言的源代码。

    打开package.xml文件,确保文件中存在下面两行定义:

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

    注意,在编译时,需要依赖“message_generation”,而在运行时,只需要依赖“message_runtime”。

    利用你喜欢的文本编辑器(前面课程学习的rosed是一个不错的选择)打开CMakeLists.txt文件。

    在CMakeLists.txt文件中添加message_generation到功能包查找项,以便于(节点)调用它们生成消息。只需简单的添加message_generation到COMPONENTS列表中即可,如下所示:
    # 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)

    你也许注意到即使没有调用find_package中全部的依赖项,你的工程也可以正常编译。这是因为catkin集成了所有的工程,也许前期别的工程调用了find_package,而你的工程使用了同样的配置。但是如果单独编译时忘记添加,则将导致编译失败。

    同样,需要确保运行时的依赖项添加进来:
    catkin_package(
      ...
      CATKIN_DEPENDS message_runtime ...
      ...)

    查找如下的代码区:
    # add_message_files(
    #  FILES
    #  Message1.msg
    #  Message2.msg
    # )

    去掉每行前面的注释符号“#”,并用你自己的.msg替换Message*.msg文件,替换后如下所示:
    add_message_files(
      FILES
      Num.msg
    )

    通过手动添加.msg文件,确保了CMake在重新配置时知道这些新添加的.msg文件。

    2.2 Using rosmsg

    上面的介绍就可以产生一个msg文件了。借助于rosmsg show命令可以判断ROS是否能检测到它:

    用法:

    $ rosmsg show [message type]

    示例:

    [html] view plaincopyprint?$ rosmsg show beginner_tutorials/Num 

    $ rosmsg show beginner_tutorials/Num

    得到执行结果:
    •        int64 num

    在前面的示例中,指令参数包含如下两个部分:
    •        beginner_tutorials -- the package where the message is defined
    •        Num -- The name of the msg Num.

    如果你记不起msg文件存在于哪个功能包内,可以空缺功能包的名字:

    $ rosmsg show Num

    执行结果如下所示:
    •        [beginner_tutorials/Num]:
    •        int64 num

  • 相关阅读:
    剑指17.树的子结构
    剑指16.合并两个排序的链表
    剑指15.反转链表
    剑指14.链表中倒数第k个结点
    剑指13.调整数组顺序使奇数位于偶数前面
    剑指12.数值的整数次方
    剑指11.二进制中1的个数
    剑指10.矩形覆盖
    剑指09.变态跳台阶
    JS 中动态创建json,动态为json添加属性、属性值
  • 原文地址:https://www.cnblogs.com/CZM-/p/5925689.html
Copyright © 2020-2023  润新知