消息(msg):msg文件就是一个描述ROS中所使用消息类型的简单文本。它们会被用来生成不同语言的源代码.
服务(srv):一个srv文件描述一项服务。它包含两个部分:请求和响应。
msg文件存放在package的msg目录下,srv文件则存放在srv目录下。
msg文件实际上就是每行声明一个数据类型和变量名。可以使用的数据类型如下:
- int8, int16, int32, int64 (plus uint*)
- float32, float64
- string
- time, duration
- other msg files
- variable-length array[] and fixed-length array[C]
srv文件分为请求和响应两部分,由’—'分隔.
1. 创建一个msg
$ cd ~/catkin_ws/src/beginner_tutorials
$ mkdir msg
$ echo "int64 num" > msg/Num.msg
确保msg文件被转换成c++,Python及其他语言的源代码:
在package.xml中,添加如下代码:
<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>
在 CMakeLists.txt文件中,利用find_packag函数,增加对message_generation的依赖,这样就可以生成消息了。
你可以直接在COMPONENTS的列表里增加message_generation,就像这样:
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
message_generation
)
需要确保你设置了运行依赖:
catkin_package(
...
CATKIN_DEPENDS message_runtime ...
...)
找到如下代码块:
# add_message_files(
# FILES
# Message1.msg
# Message2.msg
# )
去掉注释符号#,用你的.msg文件替代Message*.msg,就像下边这样:
add_message_files(
FILES
Num.msg
)
手动添加.msg文件后,我们要确保CMake知道在什么时候重新配置我们的project。 确保添加了如下代码:
generate_messages(
DEPENDENCIES
std_msgs
)
1.2 使用rosmsg
通过rosmsg show命令,检查ROS是否能够识别消息。
使用方法,无需运行roscore:
$ rosmsg show [message type]
例子:$ rosmsg show beginner_tutorials/Num
如果忘记了消息所在的package,可以省略掉package名。
2.使用srv
2.1 创建一个srv
在工作包路径下:
mkdir srv
利用roscp复制文件,用法:
$ roscp [package_name] [file_to_copy_path] [copy_path]
创建完成服务之后,需要在CMakeLists.txt文件中做一些修改:
删掉#,去除对下边语句的注释:
# add_service_files(
# FILES
# Service1.srv
# Service2.srv
# )
用你自己的srv文件名替换掉那些Service*.srv文件:
add_service_files(
FILES
AddTwoInts.srv
)
2.3 使用rossrv
通过rosmsg show命令,检查ROS是否能够识该服务。
用法:
$ rossrv show <service type>
例子:$ rossrv show beginner_tutorials/AddTwoInts
3.msg和srv都需要的步骤
确保含有依赖,
# generate_messages(
# DEPENDENCIES
# # std_msgs # Or other packages containing msgs
# )
去掉注释并附加上所有你消息文件所依赖的那些含有.msg文件的package。对其进行修改:
generate_messages(
DEPENDENCIES
std_msgs
)
由于增加了新的消息,所以我们需要重新编译我们的package。