RMVL  2.5.0-dev
Robotic Manipulation and Vision Library
载入中...
搜索中...
未找到
服务模块使用教程

上一篇教程:消息模块使用教程
下一篇教程:扩展模块使用教程


此模块主要为 轻量发布订阅服务及其相关组件 提供支持,详细使用说明请参考 轻量发布订阅服务 —— LPSS

1 概述

RMVL 服务描述文件 *.srv 用于定义一次服务调用的请求和响应类型,类似于 ROS 服务定义文件。请求和响应使用单独一行 --- 分隔,两部分均遵循与 RMVL 消息描述文件 相同的字段语法和二进制序列化规则,也都允许为空。通过服务描述文件,用户可以为 LPSS Service/Client 定义结构化的调用接口。

2 内置服务类型

以下是 RMVL 提供的内置服务类型,分为 stdsensor 两个主要分组。用户可以直接在 LPSS Service/Client 中使用这些类型。

  • std 服务分组

    std 服务包含无参数调用、布尔值设置以及通用触发等基础服务。

    类型*.srv 定义描述
    Empty
    ---
    请求和响应均为空的服务
    SetBool
    bool data
    ---
    bool success
    string message
    设置布尔状态,并返回执行结果和提示信息
    Trigger
    ---
    bool success
    string message
    触发无参数操作,并返回执行结果和提示信息
  • sensor 服务分组

    sensor 服务用于配置传感器相关的数据和参数。

    类型*.srv 定义描述
    SetCameraInfo
    sensor/CameraInfo camera_info
    ---
    bool success
    string status_message
    保存相机标定信息,并返回执行结果和状态信息

3 自动代码生成

RMVL 提供了 rmvl_generate_srv 的 CMake 函数,用于生成服务类型的 C++ 代码文件。用户只需在模块的 CMakeLists.txt 文件中调用该函数,并提供服务类型的名称和路径,RMVL 将自动生成相应的 C++ 代码文件。

# 根据 srv/Test.srv 文件生成服务类型代码
# 将生成 rmvlsrv/test.hpp 头文件
rmvl_generate_srv(Test)
# 根据 srv/dir/Test.srv 文件生成服务类型代码
# 将生成 rmvlsrv/dir/test.hpp 头文件
rmvl_generate_srv(dir/Test)
# 根据 srv/Test2.srv 文件生成服务类型代码,并指定其绑定的子模块 sub
# 将生成 rmvlsrv/test2.hpp 头文件
rmvl_generate_srv(
  Test2
  MODULE sub
)
# 根据 srv/dir/Test2.srv 文件生成服务类型代码,并指定其绑定的子模块 sub
# 将生成 rmvlsrv/dir/test2.hpp 头文件
rmvl_generate_srv(
  dir/Test2
  MODULE sub
)

生成的服务类型位于 rm::srv 命名空间。以 Test 为例,Test::RequestTest::Response 分别表示请求和响应类型,二者均提供与消息类型相同的 serialize()deserialize()compact_size() 接口。