一、msg 和 srv介绍
1、定义
p { margin-bottom: 0.25cm; line-height: 120% }
a:link { }
消息(msg): msg文件就是一个描述ROS中所使用消息类型的简单文本。它们会被用来生成不同语言的源代码
服务(srv): 一个srv文件描述一项服务。它包含两个部分:请求和响应。
p { margin-bottom: 0.25cm; line-height: 120% }
a:link { }
2、存放位置
p { margin-bottom: 0.25cm; line-height: 120% }
a:link { }
msg文件存放在package的msg目录下,srv文件则存放在srv目录下。
3、msg本质
p { margin-bottom: 0.25cm; line-height: 120% }
a:link { }
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 : 包含时间戳和坐标系信息
p { margin-bottom: 0.25cm; line-height: 120% }
tt.cjk { font-family: "Nimbus Mono L", monospace }
a:link { }
在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和其他语言的源代码
p { margin-bottom: 0.25cm; line-height: 120% }
a:link { }
p { margin-bottom: 0.25cm; line-height: 120% }
a:link { }
要确保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 )
p { margin-bottom: 0.25cm; line-height: 120% }
a:link { }
D、手动添加.msg文件后,我们要确保CMake知道在什么时候重新配置我们的project。(取消注释)
generate_messages( DEPENDENCIES std_msgs )
p { margin-bottom: 0.25cm; line-height: 120% }
a:link { }
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/ 路径下.
p { margin-bottom: 0.25cm; line-height: 120% }
tt.cjk { font-family: "Nimbus Mono L", monospace }
a:link { }