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相同的内容。