首页 > 代码库 > ROS学习(十一)—— msg srv

ROS学习(十一)—— msg srv

一、msg 和 srv介绍

1、定义

<style>p { margin-bottom: 0.25cm; line-height: 120% } a:link { }</style>

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

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

<style>p { margin-bottom: 0.25cm; line-height: 120% } a:link { }</style>

 

2、存放位置

<style>p { margin-bottom: 0.25cm; line-height: 120% } a:link { }</style>

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

 

3、msg本质

<style>p { margin-bottom: 0.25cm; line-height: 120% } a:link { }</style>

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 : 包含时间戳和坐标系信息

<style>p { margin-bottom: 0.25cm; line-height: 120% } tt.cjk { font-family: "Nimbus Mono L", monospace } a:link { }</style>

    在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和其他语言的源代码

<style>p { margin-bottom: 0.25cm; line-height: 120% } a:link { }</style> <style>p { margin-bottom: 0.25cm; line-height: 120% } a:link { } 要确保msg文件被转换成为C++,Python和其他语言的源代码 --> { }</style>
 <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
)
<style>p { margin-bottom: 0.25cm; line-height: 120% } a:link { }</style>

 

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

generate_messages(
  DEPENDENCIES
  std_msgs
)

 

<style>p { margin-bottom: 0.25cm; line-height: 120% } a:link { } D、手动添加.msg文件后,我们要确保CMake知道在什么时候重新配置我们的project --> { }</style>

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

 

<style>p { margin-bottom: 0.25cm; line-height: 120% } tt.cjk { font-family: "Nimbus Mono L", monospace } a:link { }</style>

 

ROS学习(十一)—— msg srv