企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# 4.2 Srv ## 4.2.1 简介 类似msg文件,srv文件是用来描述服务(service数据类型的,service通信的数据格式定义在*.srv中。它声明了一个服务,包括请求(request)和响应(reply)两部分。其格式声明如下: **举例:** msgs_demo/srv/DetectHuman.srv bool start_detect --- my_pkg/HumanPose[] pose_data msgs_demo/msg/HumanPose.msg std_msgs/Header header string uuid int32 number_of_joints my_pkg/JointPose[]joint_data msgs_demo/msg/JointPose.msg string joint_name geometry_msgs/Pose pose floar32 confidence 以`DetectHUman.srv`文件为例,该服务例子取自OpenNI的人体检测ROS软件包。它是用来查询当前深度摄像头中的人体姿态和关节数的。srv文件格式很固定,第一行是请求的格式,中间用**---**隔开,第三行是应答的格式。在本例中,请求为是否开始检测,应答为一个数组,数组的每个元素为某个人的姿态(HumanPose)。而对于人的姿态,其实是一个msg,所以srv可以嵌套msg在其中,但它不能嵌套srv。 ## 4.2.2 操作命令 具体的操作指令如下表: | rossrv 命令 | 作用 | | :------: | :------: | | `rossrv show` | 显示服务描述| | `rossrv list` | 列出所有服务 | | `rossrv md5` | 显示服务md5sum | | `rossrv package ` | 列出包中的服务| |`rossrv packages` | 列出包含服务的包| ## 4.2.3 修改部分文件 定义完了msg、srv文件,还有重要的一个步骤就是修改package.xml和修改CMakeList.txt。这些文件需要添加一些必要的依赖等,例如: <build_depend>** message_generation **</build_depend> <run_depend>** message_runtime **</run_depend> 上述文本中“**”所引就是新添加的依赖。又例如: find_package(...roscpp rospy std_msgs ** message_generation **) catkin_package( ... CATJIN_DEPENDS ** message_runtime ** ... ...) add_message_file( FILES ** DetectHuman.srv ** ** HumanPose.msg ** ** JointPos.msg **) ** generate_messages(DEPENDENCIES std_msgs) ** 添加的这些内容指定了srv或者msg在编译或者运行中需要的依赖。具体的作用我们初学者可不深究,我们需要了解的是,无论我们自定义了srv,还是msg,修改上述部分添加依赖都是必不可少的一步。