# rmw-travodds-cpp **Repository Path**: agiros/rmw-travodds-cpp ## Basic Information - **Project Name**: rmw-travodds-cpp - **Description**: 提供基本的 RMW(ROS Middleware Interface)功能,支持AGIROS节点通过 travodds进行通信。 - **Primary Language**: C++ - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 3 - **Created**: 2025-04-11 - **Last Updated**: 2026-04-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # rmw-travodds-cpp #### 基本介绍 该软件包是配合`travodds`使用的`rmw`层中间库,在编译阶段需要`rosidl-typesupport-travodds-c`和`rosidl-typesupport-travodds-cpp`包的支持来生成对应的数据类型支持库。 #### 软件架构 #### 安装教程 ##### ROS2(humble)安装教程 由于`rmw-travodds-cpp`包需要在编译阶段生成相关的数据支持包,因此在ROS2环境中需要使用源码编译,强烈建议直接使用`AGIROS`仓库维护的`rmw-travodds-cpp`相关库直接使用。下面仍给出在ROS2环境中使用的步骤: 1. 通过[ROS2 humble 安装章节](https://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debs.html)使用源码或者安装包的形式拉取ROS2 humble的源码 2. `rmw-travodds-cpp`包在ROS2 humble的基础包之外还需要`travodds`、`travodds-cmake-module`、`travodds-autogen`、`rosidl-typesupport-travodds-c`以及`rosidl-typesupport-travodds-cpp`,这几个包可以在AGIROS的官方网站获取对应源码 3. 将`travodds`、`travodds-cmake-module`、`travodds-autogen`、`rosidl-typesupport-travodds-c`、`rosidl-typesupport-travodds-cpp` 、`rmw-travodds-cpp` 包拷贝至ROS2 humble工作目录的`/src/ros2`目录下 4. 和官网教程一样,在ROS2 humble工作目录使用`colcon`命令编译并安装`rmw-travodd-cpp`:`colcon build --merge-install --packages-up-to rmw_dds_common --packages-skip-build-finished ` 5. 编译成功后校验`/lib`目录下有无`librmw_dds_common_rosidl_typesupport_travodds_c.so`和`librmw_dds_common_rosidl_typesupport_travodds_cpp.so`文件,如果没有则说明编译步骤存在问题,请卸载当前ROS环境重新进行源码编译。 6. 如果存在相关`travodds`的`typesupport`库文件,继续执行`colcon build --packages-skip-build-finished`直至其他包编译完成 ##### AGIROS安装教程 1. 使用`AGIROS`官方仓库提供的`install.sh`脚本文件初始化环境配置 2. 安装相关软件包:`sudo apt install agiros-loong-demo-nodes-cpp`,`sudo apt install agiros-loong-ros2run`,`sudo apt install agiros-loong-rmw-travodds-cpp`,AGIROS仓库会自动处理相关依赖 #### 使用说明 ##### ROS2(humble)使用说明 1. 确保`rmw-travodds-cpp`库已成功安装,在ROS2 humble的`/install/bin`目录下有对应的`librmw_travodds_cpp`库文件 2. 初始化ROS2 humble的工作环境,参考[ROS2 humble 初始化章节](https://docs.ros.org/en/humble/Installation/Windows-Install-Binary.html#environment-setup) 3. 设置`RMW_IMPLEMENTATION`环境变量为`rmw_travodds_cpp`,参考[ROS2 humble 切换DDS章节](https://docs.ros.org/en/humble/How-To-Guides/Working-with-multiple-RMW-implementations.html) 4. 运行`talker`和`listener`示例程序,数据正常收发 ##### AGIROS使用说明 1. 使用`source /opt/agiros/long/local_setup.bash`指令初始化环境 2. 设置`RMW_IMPLEMENTATION`环境变量为`rmw_travodds_cpp` 3. 基础`message`通信场景功能验证: - 订阅者:`agiros run demo_nodes_cpp listener` - 发布者:`agiros run demo_nodes_cpp talker` - 可以看到`listener`端收到了`talker`端发送的递增数据 4. `service`通信场景功能验证: - 服务端:`agiros run demo_nodes_cpp add_two_ints_server` - 客户端:`agiros run demo_nodes_cpp add_two_ints_client` - 可以看到`client`端发出了一个2+3求和的请求,`server`端响应了这个请求,且将结果5返回给`clien`t端 5. `action`通信场景功能验证: - action服务器:`agiros run demo_nodes_cpp fibonacci_action_server` - action客户端:`agiros run demo_nodes_cpp fibonacci_action_client` - 可以看到`server`端响应`client`端打印了10层的斐波那契数列 #### 特点 ##### 支持通过环境变量加载`travodds` XML文件配置 在使用`rmw-travodds-cpp`时允许通过修改相关环境变量的值,来配置`travodds`运行时的QoS - `RMW_TRAVODDS_XML_PATH`:`travodds`使用的`.xml`文件的路径配置,该环境变需要包含路径以及`.xml`文件名 - `RMW_TRAVODDS_QOS_NAME`:`travodds`使用的与参与者QoS的配置名 若`RMW_TRAVODDS_XML_PATH`以及`RMW_TRAVODDS_QOS_NAME`成功加载配置,则在执行`rmw`程序时会有相关日志打印 ##### 支持启用安全配置 `rmw-travodds-cpp`库默认不会开启安全选项,如果需要开启则需要在`CMake`编译时加入`-DSECURITY=ON`选项,成功编译后需要替换掉ROS工作目录下的对应库,同时`travodds`也需要开启相关安全选项。 如果不进行额外配置,`rmw-travodds-cpp`会使用默认的`libSecurityPlugin.so`安全插件库进行初始化,请保证该库能在环境变量中被动态加载,如果需要替换为其他的安全插件,参考`travodds-security-plugin`插件的配置使用章节,使用XML配置进行替换。 下面是`AGIROS`环境中启用安全的简单收发测试用例: 1. 使用`source /opt/agiros/long/local_setup.bash`指令初始化环境 2. 使用`agiros`生成安全需要的配置文件 `mkdir ~/sros2_demo && cd ~/sros2_demo` 3. 生成私钥及证书` agiros security create_keystone demo_keystone` 4. 为`talker` 程序生成证书` agiros security create_enclave demo_keystore /talker_listener/talker` 5. 为`listener`程序生成证书 `agiros security create_enclave demo_keystore /talker_listener/listener` 6. 设置环境安全相关的环境变量 `export ROS_SECURITY_KEYSTORE=~/sros2_demo/demo_keystore`、`export ROS_SECURITY_ENABLE=true`、`export ROS_SECURITY_STRATEGY=Enforce` 7. 设置RMW厂商变量` export RMW_IMPLEMENTATION=rmw_travodds_cpp` 8. 执行安全收端程序 `agiros run demo_nodes_py listener --ros-args --enclave /talker_listener/listener` 9. 执行安全发端程序` agiros run demo_nodes_cpp talker --ros-args --enclave /talker_listener/talker` 10. 可以看到talker和listener正常收发,且有security相关的打印