一、msg 和 srv介绍

1、定义

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

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

2、存放位置

  msg文件存放在package的msg目录下,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和其他语言的源代码


要确保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
)

D、手动添加.msg文件后,我们要确保CMake知道在什么时候重新配置我们的project
-->

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

ROS学习(十一)—— msg srv的更多相关文章

  1. ROS学习手记 - 7 创建ROS msg & srv

    至此,我们初步学习了ROS的基本工具,接下来一步步理解ROS的各个工作部件的创建和工作原理. 本文的详细文档:http://wenku.baidu.com/view/623f41b3376baf1ff ...

  2. ROS学习手记 - 5 理解ROS中的基本概念_Services and Parameters

    上一节完成了对nodes, Topic的理解,再深入一步: Services and Parameters 我不理解为何 ROS wiki 要把service与parameter放在一起介绍, 很想分 ...

  3. ROS学习手记 - 8 编写ROS的Publisher and Subscriber

    上一节我们完成了 message & srv 文件的创建和加入编译,这次我们要玩简单的Publisher 和 Subscriber 要玩 Publisher 和 Subscriber, 需要具 ...

  4. ROS学习笔记七:在ROS中使用USB摄像头

    下面是一些USB摄像头的驱动(大多数摄像头都支持uvc标准): 1 使用软件库里的uvc-camera功能包 1.1 检查摄像头 lsusb ----------------------------- ...

  5. ROS学习笔记9-创建ros消息和服务

    该节内容主要来自于官方文档的两个小节:1.使用rosed来编辑2.创建ros消息的服务 先来看rosed: rosedrosed命令是rosbash的一部分,使用rosed可以直接编辑包中的一个文件, ...

  6. 关于ROS学习的一些反思

    距离发布上一篇ROS的博客已经过去两年了,才发现原来自己已经这么久可没有写过关于ROS的文章,想来很是惭愧.这两年时间,自己怀着程序员的梦想,研究过RTOS,探索过Linux,编写过Android应用 ...

  7. 【转载】 强化学习(十一) Prioritized Replay DQN

    原文地址: https://www.cnblogs.com/pinard/p/9797695.html ------------------------------------------------ ...

  8. ROS学习手记 - 2.1: Create and Build ROS Package 生成包(Python)

    ROS学习手记 - 2.1: Create and Build ROS Package 生成包(Python) 时隔1年,再回来总结这个问题,因为它是ros+python开发中,太常用的一个操作,需要 ...

  9. ROS学习(四)—— 创建ROS Package

    一.caktin Package的组成 1.必须含有 package.xml文件,提供有关程序包的元信息 2.必须含有一个catkin版本的 CmakeLists.txt文件,如果是一个catkin元 ...

  10. ROS学习网址【原创】

    ROS学习网址 http://www.ros.org/ http://www.ros.org/news/book/ http://wiki.ros.org/ http://blog.exbot.net ...

随机推荐

  1. 使用SVD方法实现电影推荐系统

    http://blog.csdn.net/zhaoxinfan/article/details/8821419 这学期选了一门名叫<web智能与社会计算>的课,老师最后偷懒,最后的课程pr ...

  2. Camtasia Studio CamStudio如何导出为手机视频

    把视频拖放到左侧窗口,再按住拖放到下方的时间轴   点击生成并共享,然后设置为自定义生成设置   这里选择MP4,然后下一步   到这一步的时候,选择视频大小为自定义   会弹出窗口,手动输入宽360 ...

  3. ArcEngine中COM对象与其基础RCW分开后就不能再使用

    操作ArcEngine中的COM对象时,为了减少内存的增长,用掉的对象要手动释放常用的方法是ReleaseComObject System.Runtime.InteropServices.Marsha ...

  4. JS获取当前/指定URL参数

    方法: 首先通过 document.location 获得当前访问网页的网址, 其次用 split 方法通过“?”把网址分为两部分. 如果网址中有参数(arrObj.length > 1) 再用 ...

  5. NGINX高并发配置

    1.  worker_processes 8; nginx 进程数,建议按照cpu 数目来指定,一般为它的倍数 (如,2个四核的cpu计为8). 2.  worker_cpu_affinity 000 ...

  6. Vue router 一个路由对应多个视图

    使用命名路由 https://jsfiddle.net/posva/6du90epg/ <script src="https://unpkg.com/vue/dist/vue.js&q ...

  7. Bash shell 命令行 快捷键

    http://linuxtoy.org/archives/bash-shortcuts.html 生活在 Bash shell 中,熟记以下快捷键,将极大的提高你的命令行操作效率. 编辑命令 Ctrl ...

  8. bat 十进制转16进制

    @echo offset code=0123456789ABCDEF:enterset /p num=输入你要转换的十进制数字:echo %num%|findstr "[^0-9]" ...

  9. 排序基础之归并排序、快排、堆排序、希尔排序思路讲解与Java代码实现

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6594855.html  一:归并排序==通过中间值进行左右划分递归,然后调用合并函数对左右递归的结果进行合并( ...

  10. Shell编程初步

      一:Hello World 新建一个文件,命名时以 .sh 为后缀.每个bash文件开头第一行表名文件类型: #!/bin/bash 然后在下面输入代码. 比如输出hello world: #!/ ...