工具使用-ROS中创建和配置msg及srv

发布 : 2019-06-23 浏览 :

ROS中常用指令

roscp = ros + cp: copies files from/to a ROS package

roscd = ros + cd: changes directory to a ROS packages

rosls = ros+ ls: lists files in a ROS package

rosed = ros + vim: edit a file in a package

rospack = ros + pack:

rosmsg = ros +msg: provides information related to ROS message definitions

rossrv = ros + srv: provides information related to a ROS service definitions

catkin_make: makes (compiles) a ROS package

这里加上了ros的前缀,好处是不用跳到文件所处的路径下,直接就能索引到对应文件,最多加上一个包名。

msg和srv介绍

  • msg: msg文件是一种描述ROS中topic中传输数据的信息格式的简单文本。他们可以用作沟通不同语言的中间桥梁。
  • srv: srv文件描述了一种服务。和msg的不同点在于其包含两部分。一部分是请求格式一部分是响应的格式。

msg文件应该放在相应包下msg文件 夹下,类似的srv文件应该放在srv文件夹下。

msg文件就是一种简单的文本文件,文本的每一行定义了一个变量的变量类型和变量名,比如

Header header

​ stamp s1

​ int64 x

​ int64 y

string child_frame_id

geometry_msgs/PoseWithCovariance pose

float32 a

int64 b

等等, ros中的数据类型很多,包含基础类型比如int8, int16, int32, int64, float32,string 等,还包含自己顶以的一些类型,Header是ros中的一种特殊类型, 它包含了一个时间戳和点的x,y坐标.

srv格式如下:

1
2
3
4
int64 A
int64 B
---
int64 sum

其中与msg最大的不同在---分割成两部分。

msg文件的创建和配置

msg文件的创建非常简单,和后面的srv文件一样,既然都是文本文件,那么可以直接创建文本文件

1
2
3
# 在包 beginner_tutorials/msg文件夹下创建
roscd beginner_turotials/msg
vim Num.msg

然后在文件中填写该消息需要的数据格式和变量名称, 比如

string first_name

string last_name

uint8 age

uint32 score

至此msg文件创建好了。创建好之后还需要进行配置,才能供cpp, python文件调用。

那么如何配置呢?

  1. 首先打开package.xml文件,打开message_generation依赖和生成时选项

    1
    2
    <build_depend> message_generation </build_generation>  # 编译需要
    <exec_depend> message_runtime </exec_depend> # 运行需要
  2. 修改CMakeLists.txt文件

    首先在find_package中加入新添加的依赖包message_generation

    find_package(catkin REQUIRED COMPONENTS

    ​ roscpp

    ​ rospy

    ​ std_msgs

    ​ message_generation

    )

    这些是让包在编译之前先找到这些依赖包,从而才能进行编译运行。

    另外,需要将依赖包高速运行时环境

    catkin_package(

    CATKIN_DEPENDS message_runtime

    …)

    设置好编译和运行需要依赖的包后,需要高速CMakeList文件想要编译的是那些msg

    1
    2
    3
    4
    5
    add_message_files(
    FILES
    # Message1.msg
    # Message2.msg # 文件示例
    Num.msg)

    至此CMakeList知道需要的msg文件的配置和依赖,那么还需要generate_messages()函数被调用

    generate_messages(

    ​ DEPENDENCIES

    ​ std_msgs

    )

    最后这个generate_messages()的逻辑我还有点不大懂

msg的相关指令

rosmsg show beginner_tutorials/Num # 显示对应package下的msg的内容

rosmsg show Num # 如果没有指定package name ,那么将显示所有包中的Num msg的内容,同时给出对应的package名

rosmsg -h # help

创建srv文件

roscd beginner_tutorials/srv

vim AddTwoInts.srv

配置的时候 srv同样需要message_generate编译依赖和message_runtime运行依赖。所以这部分和msg的配置一样。

不同的地方在于srv需要指定添加的srv文件

add_service_files(

​ FILES

​ AddTwoInts.srv

)

srv相关指令

rossrv show beginner_tutorials/AddTwoInts

rossrv show AddTwoInts # 这部分和rosmsg功能一样,只是不同的指令

rossrv -h # help

本文作者 : zhouzongwei
原文链接 : http://yoursite.com/2019/06/23/ros-msg-srv/
版权声明 : 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!

知识 & 情怀 | 赏或者不赏,我都在这,不声不响

微信扫一扫, 以资鼓励

微信扫一扫, 以资鼓励

支付宝扫一扫, 再接再厉

支付宝扫一扫, 再接再厉

留下足迹