ROS 创建及使用msg和srv(一)

1. 什么是msg文件和srv文件

1.1 msg文件

msg是一个简单的txt文件,每行定义一个信息域。其格式为:类型 名称

类型 包括:

int8, int16, int32, int64 (plus uint*)
float32, float64
string
time, duration
other msg files
可变长度array[ ] and 固定长度array[C]
Header(包含一个timestamp和坐标系信息)

事例:

int32 A
int32 B
int32 C

1.2 srv文件

srv文件与msg文件的内容相似,区别在于其包括请求响应两部分(两部分用- - -分隔)。

事例:

int32 A   //请求
int32 B   //请求
int32 C   //请求
------
int32 sum   //响应

2. 创建和编译msg文件和srv文件

2.1 创建msg文件

顾上一章,创建了一个名为work的工作空间,其下有devel目录、build目录以及src目录。在src目录下包含myros的功能包和CMakeList.txt文件。此时myros功能包包括include目录、src目录、CMakeList.txt文件和package.xml文件。msg目录就要创建在myros功能包下。

$ cd work/src/myros   //切换到相关目录下
$ mkdir msg          //创建目录
$ vim msg/num.msg    //进入编辑模式,如果在msg目录下不存在num.msg文件则创建并进入编辑,存在则进入编辑。

在num.msg中输入:

int32 A
int32 B
int32 C
//可根据自己的需求编写

编写完成后,需要确保.msg文件能够被编译为C++

(一)在package.xml文件中

去掉如下两行的注释符,或者直接在后添加这两行:

<build_depend>message_generation</build_depend>
<build_export_depend>message_generation</build_export_depend>
<exec_depend>message_runtime</exec_depend>

// 构建阶段我们须要 “message_generation”, 而在运行时我们须要 “message_runtime”

(二)在CMakeList.txt文件中

首先: 找到 find_package()
在其中加入: message_generation
此时:

find_package(catkin REQUIRED COMPONENTS
  roscpp
  std_msgs
  message_generation
)

然后: 找到 add_message_files()
在其中加入或者修改Message1.msg为 num.msg
此时:

add_message_files(
   FILES
   num.msg 
)

接下来: 找到 generate_messages(),去掉部分注释
此时:

generate_messages(
   DEPENDENCIES
   std_msgs
)

最后: 找到 catkin_package(),去掉 CATKIN_DEPENDS roscpp std_msgs前的注释,添加message_runtime
此时:

catkin_package(
#  INCLUDE_DIRS include
#  LIBRARIES myros
  CATKIN_DEPENDS roscpp std_msgs message_runtime
#  DEPENDS system_lib
)

2.2 编译msg文件

1.在终端:

$ cd work/      //切换到当前工作空间
$ catkin_make
$ source devel/setup.bash    //source 环境变量
$ rosmsg show myros/num // rosmsg show 包名/.msg文件名  或者 $ rosmsg show num

2.若编辑正确,那么在终端会输出与num.msg相同的内容。

2.3 创建srv文件

其创建方式与msg文件相似,都是创建在功能包目录下。

$ cd work/src/myros   //切换到相关目录下
$ mkdir srv          //创建目录
$ vim srv/ber.srv    //进入编辑模式

在ber.srv中输入:

int32 A
int32 B
int32 C //请求
------
int32 sum   //响应 response

编写完成后,需要确保.srv文件能够被编译为C++

(一)在package.xml文件中 (在创建.msg文件时已经完成了,故不再做这个步骤)

去掉如下两行的注释符,或者直接在后添加这两行:

<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>

// 构建阶段我们须要 “message_generation”, 而在运行时我们须要 “message_runtime”

(二)在CMakeList.txt文件中

首先: 找到 find_package() (在创建.msg文件时已经完成了,故不再做这个步骤)
在其中加入: message_generation
此时:

 find_package(catkin REQUIRED COMPONENTS
  roscpp
  std_msgs
  message_generation   //添加message_generation依赖
)

然后: 找到 add_service_files()
在其中加入或者修改 Service2.srv为 ber.srv
此时:

 add_service_files(
    FILES  
    ber.srv
#   Service2.srv
)

接下来: 找到 generate_messages(),去掉部分注释 (在创建.msg文件时已经完成了,故不再做这个步骤)
此时:

generate_messages(
   DEPENDENCIES
   std_msgs
)

最后: 找到 catkin_package(),去掉 CATKIN_DEPENDS roscpp std_msgs前的注释,添加message_runtime (在创建.msg文件时已经完成了,故不再做这个步骤)
此时:

catkin_package(
#  INCLUDE_DIRS include
#  LIBRARIES myros
  CATKIN_DEPENDS roscpp std_msgs message_runtime
#  DEPENDS system_lib
)

2.4 编译srv文件

1.在终端:

$ cd work/      //切换到当前工作空间
$ catkin_make
$ source devel/setup.bash    //source 环境变量
$ rossrv show myros/ber // rosmsg show 包名/.srv文件名  或者 $ rosmsg show ber

2.若编辑正确,那么在终端会输出与ber.srv相同的内容。

原创文章 15 获赞 8 访问量 928

猜你喜欢

转载自blog.csdn.net/weixin_39652282/article/details/103494152
今日推荐