作者:幽咽小香 | 来源:互联网 | 2023-08-18 11:56
ROS学习笔记八:创建ROSmsg和srv本节主要讲述了如何创建和建立ROSmsg和srv,同时使用命令行工具rosmsg、rossrv和roscp。msg和srv简介msg:描述
ROS学习笔记八:创建ROS msg和srv
本节主要讲述了如何创建和建立ROS msg和srv,同时使用命令行工具rosmsg、rossrv和roscp。
msg和srv简介
- msg:描述ROS messages内容的简单text文件,它们用来生成不同语言的messages源码;
- srv:一个srv文件描述一个服务,它由两部分组成:一个请求和一个回应。
msg文件存放在一个软件包的msg目录中,而srv文件则存放在srv目录中来。
msg文件
msg文件就是一个简单的text文件,其中每行有一个类型和名称,可用的类型如下:
int8, int16, int32, int64 (plus uint*)
float32, float64
string
time, duration
other msg files
variable-length array[] and fixed-length array[C]
Header(包含一个timestamp和坐标系信息)
srv文件
srv文件和msg文件很相像,除了它包含两个部分:请求和回应
int64 A
int64 sum
上面一部分为request,下面一部分为response。
使用msg
创建一个msg文件
cd ~/ros_tutorial/src/beginner-tutorial
mkdir msg
echo "int64 num">msg/Num.msg
由于msg文件用来产生C++,python等源代码,需要进行一些配置。
首先是修改package.xml文件,确保该文件中以下三行内容没有被注释掉:
<build_depend>message_generationbuild_depend>
<run_depend>message_generationrun_depend>
<run_depend>message_runtimerun_depend>
然后修改CMakeist.txt文件:
- 在find_package函数中加入message_generation依赖
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
message_generation
)
- 在catkin_package函数中加入message_runtime依赖
catkin_package(
...
CATKIN_DEPENDS message_runtime ...
...)
- 修改add_message_file函数,添加入自己创建的Num.msg文件
add_message_files(
FILES
Num.msg
)
- 确保generate_messages函数被调用运行,去掉注释符号#
generate_messages(
DEPENDENCIES
std_msgs
)
使用rosmsg
rosmsg show [message type]
rosmsg show beginner-tutorials/Num
int64 num
如果实在记不住在哪个软件包中时,可以省略软件包
rosmsg show Num
[beginner_tutorials/Num]:
int64 num
使用srv
创建一个srv文件
可以从其他软件包中复制过来一个srv文件,使用roscp命令:
roscp [package_name] [file_to_copy] [copy_path]
roscp rospy_tutorials AddTwoInts.srv srv/AddTwoInts.srv
srv文件也要用来产生C++,python等源代码,也要需要进行一些配置。其配置流程和msg大体一致,其中find_package和catkin_package函数的配置是一样的,另外需要将add_service_file中添加入自己创建的srv文件,如下:
add_service_files(
FILES
AddTwoInts.srv
)
使用rossrv
rossrv show
rossrv show beginner-tutorials/AddTwoInts
int64 a
int64 sum
总结:msg和srv的一般步骤
- 首先是修改package.xml文件,确保该文件中与message有关的内容没有被注释掉。
- 然后修改CMakeist.txt文件:
- 在find_package函数中加入message_generation依赖;
- 在catkin_package函数中加入message_runtime依赖;
- 修改add_message_file函数,添加入自己创建的Num.msg文件;或者在add_service_file函数中添加入自己创建的srv文件;
- 确保generate_messages函数被调用运行,去掉注释符号#;
- 重新编译生成软件包。
祝枫
2016年8月26日于哈尔滨