RMW packages 有两种, rmw_contextdds 和 rmw_contextddsmicro 两者都是被ROS2 所支持的(源码编译时都支持, binary安装时从galactic 版本开始支持.), 而且两个都需要合适的RTI context DDS 版本来进行编译和运行.
rmw_contextdds 需要 RTI Context DDS Professional > 5.3.1 版本
rmw_contextddsmicro 需要
RTI Context DDS Micro > 3.0.3 版本
安装时必须通过环境变量进行设置. 例如 --cmake-args -Dvar=value
rmw_connextdds从二进制安装 -- 仅从 galactic版本开始(仅支持ubuntu2004, 目前版本为5.3.1, 其他版本如6.0.1必须从源码安装)开始. 其他ROS版本和主机系统需要从源码编译.
rmw_connextddsmicro 必须从源码安装(所有版本和主机系统).
源码
安装时
--------------------------------------------------------------------------------------------------------------
rmw_connextdds编译和使用时需要现行安装 RTI Connext DDS Professional 5.3.1 以上版本.
使用 CONNEXTDDS_DIR 或者 NDDSHOME 来进行设置, 有限级
CONNEXTDDS_DIR更高.
编译系统时, 脚本会自动检测主机的目标环境, 或者通过CONNEXTDDS_ARCH手动指明目标环境. 指明的环境必须是${CONNEXTDDS_DIR}/lib下面的一种.
-
rtisetenv_<architecture> 脚本会附带设置 NDDSHOME环境变量, 同时会设置 PATH 和 LD_LIBRARY_PATH 来加载Connext库和工具.
-
-
“architecture-specific”这些脚本不会设置 CONNEXTDDS_ARCH 环境的.
-
-
如果没有Connext installation被指定, 则会出现一个warning, 来自于 rti_connext_dds_cmake_module 包.
--------------------------------------------------------------------------------------------------------------
rmw_connextddsmicro编译和使用时需要现行安装 RTI Connext DDS Micro 3.0.3 以上版本.
编译系统时, 编译脚本会通过 先RTIMEHOME 后 检测 rti_connext_dds_micro-打头的目录检测扮装的 RTI.
编译脚本会自动检测目标架构, 或者通过 RTIME_TARGET_NAME 手动指定目标架构. 手动指明的内容必须在 ${RTIMEHOME}/lib.
如果 Micro 没有在安装目录下, 也没有在 ${RTIMEHOME}/lib, 则安装脚本会自动从下载源码编译, 同时RTIME_TARGET_NAME会被设置成 Linux/Darwin/Windows 分别对应于 Linux/macOS/windows系统.
-
把 RTIMEHOME 设置成无效, 则可以禁止 RTI Connext DDS Micro 的自动检测.
-
-
RTI Connext DDS Micro的自动检测只有 RTI Connext DDS Professional 6.0.0 或者更新版本安装时才会有效.
--------------------------------------------------------------------------------------------------------------
二进制安装时
--------------------------------------------------------------------------------------------------------------
点击(此处)折叠或打开 例如 x86 64bit ubunt2004 rolling
-
# Download and trust the ROS packaging master key.
-
sudo apt update && sudo apt install curl gnupg2 lsb-release
-
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-
-
?→key add -
-
# Add the ROS 2 repository to your apt repositories.
-
sudo sh -c 'echo "deb [arch=$(dpkg --print-architecture)]
-
?→ros2/ubuntu $(lsb_release -cs) main" > /etc/apt/sources.list.d/ros2-latest.list'
-
# Update package database.
-
sudo apt update
-
# Use package ros-rolling-ros-base for a more minimal installation.
-
sudo apt install ros-rolling-desktop
-
-
然后安装 rmw_contextdds.
-
sudo apt install ros-rolling-rmw-connextdds
-
-
-
然后使用
-
###Run ROS 2 applications with RTI Connext DDS Professional 5.3.1, e.g.
-
$RMW_IMPLEMENTATION=rmw_connextdds ros2 run demo_nodes_cpp talker
--------------------------------------------------------------------------------------------------------------
从foxy版本说明如何安装 rmw.
-
先安装好foxy
-
source /opt/ros/foxy/setup.bash
-
-
安装 RTI Connext DDS Professional 并加载到系统环境 (或者设置 CONNEXTDDS_DIR)
-
export NDDSHOME=~/rti_connext_dds-6.0.1 // sudo apt install ros-rolling-rmw-connextdds 为 5.3.1版本
-
如果不想编译 rmw_connextdds, 可以跳过此部, 例如你只想用 rmw_connextddsmicro
-
-
可选 -- 安装 RTI Connext DDS Micro 并加载到系统环境 (或者设置 CONNEXTDDS_DIR) 此部为你想使用 micro 3.x和6.x意外的版本或者只用rmw_connextddsmicro来编译(此时rmw_connextdds没有被加载的情况下)
-
export RTIMEHOME=~/rti_connext_dds_micro-3.0.3
-
RTIMEHOME一般会从已经安装的 RTI Connext DDS Professional 中寻找.
-
-
mkdir -p ~/ros2_connextdds/src/ros2
-
cd ~/ros2_connextdds
-
git clone https://github.com/ros2/rmw_connextdds.git src/ros2/rmw_connextdds
-
-
colcon build
-
source ~/ros2_connextdds/install/setup.bash
-
-
//使用 RTI Connext DDS Professional
-
RMW_IMPLEMENTATION=rmw_connextdds ros2 run demo_nodes_cpp talker
-
-
//使用 RTI Connext DDS Micro
-
RMW_IMPLEMENTATION=rmw_connextddsmicro \
-
RMW_CONNEXT_INITIAL_PEERS=_shmem:// \
-
ros2 run demo_nodes_cpp listener
--------------------------------------------------------------------------------------------------------------
colcon build 可以使用 --cmake-args -DRMW_CONNEXT_LOG_MODE=printf 来命令行引入编译参数
-
编译参数
-
RMW_CONNEXT_LOG_MODE
-
default: 使用 ROS2 rcutils作为输出, 日志包括error 和 warning.
-
-
all: 使用 ROS2 rcutils作为输出, 日志级别需要>=info.
-
printf:使用printf作为输出. 所有日志都输出.
-
-
RMW_CONNEXT_WAITSET_MODE: 需要两种rmw的哪种rmw提供WaitSets和中间层的事件 event. 实际上rmw_connextdds and rmw_connextddsmicro都实现了DDS API, 或者使用标准的C++实现(只有必要的实现, 能节省CPU负载)
-
RMW_CONNEXT_WAITSET_MODE=dds, 使用 rmw_connextdds 或者 rmw_connextddsmicro
-
RMW_CONNEXT_WAITSET_MODE=std: 使用标准的C++实现.
-
运行时参数
-
RMW_CONNEXT_CYCLONE_COMPATIBILITY_MODE:
-
默认 ROS2 使用 rmw_connextdds 提供 同类节点(都使用 rmw_connextdds的节点) 中间层通讯. 所以ROS2 是不支持跨厂商DDS通讯的. 若修改rmw_cyclonedds_cpp为兼容模式compatibility mode 则支持跨厂商DDS通讯, 但是会增加通讯负担包括协议转化等.
-
-
RMW_CONNEXT_DISABLE_LARGE_DATA_OPTIMIZATIONS
-
默认 rmw_connextdds会使用大块模式, 然后自动优化QoS给DataWriters和DataReaders用于提升流量性能和稳定性. 默认每个终结点endpoint会有至少 1MB(编译时的一个限制) 的流量.
-
也可以使用更快速的流量模式用于急速或碎片化的数据.但可能导致不必要的网络流量增加,特别是在数据没有以快速的周期速度交换的情况下。
-
-
-
RMW_CONNEXT_DISABLE_FAST_ENDPOINT_DISCOVERY
-
默认, rmw_connextdds 会 修改 QoS的 DomainParticipant = Optimization.Discovery.Endpoint.Fast部分来使能终结点的快速发现. 让不同应用,不同网络,或者更大系统的节点可以快速相互识别. 使用CONNEXT_DISABLE_FAST_ENDPOINT_DISCOVERY 会关闭自动识别, 让 QoS的DomainParticipant字段保持默认值.
-
-
RMW_CONNEXT_ENDPOINT_QOS_OVERRIDE_POLICY
-
没有设置或者为always. 则使用QoS为默认profile, 然后ROS的QoS设置会加载于其上.
-
-
如果设置为never, 则 使用QoS为默认profile, 但是ros的QoS设置则无效.
-
-
设置为 dds_topics: <regex>. 例如dds_topics: rt/my_topic|rt/
-
my_ns/another_topic. 列出的topic使用never设置, 没有列出的使用 always设置.
-
-
rt打头的topic 需要转化为 rt/my/fully/
-
qualified/ros/topic
-
service的quest话题为 qr/my/fully/qualified/ros/serviceRequest
-
service的Response话题为rr/my/fully/qualified/ros/serviceResponse 其实service是一对话题实现的.
-
RMW_CONNEXT_INITIAL_PEERS
-
提供一个地址列表(在DomainParticipant), 用于与指定主机进行通讯.
-
-
RMW_IMPLEMENTATION=rmw_connextddsmicro \
-
RMW_CONNEXT_INITIAL_PEERS="_shmem://, 239.255.0.1" \
-
ros2 run demo_nodes_cpp listener
-
-
RMW_CONNEXT_LEGACY_RMW_COMPATIBILITY_MODE
-
ROS2应用不能和以前版本的RMW通讯,除非设置这个变量为compatibility.
-
-
RMW_CONNEXT_REQUEST_REPLY_MAPPIN
-
DDS-RPC需要做request/reply映射两个收发profiles.
-
-
basic作为普通负载, 而extended作为OOB数据.
-
默认 rmw_connextdds使用 extended. rmw_connextddsmicro 使用 basic.
-
-
-
RMW_CONNEXT_UDP_INTERFAC
-
RTI Connext DDS Micro 需要明确使用哪个网络接口, 默认为lo. 可以设置为 eth0
-
-
RMW_CONNEXT_USE_DEFAULT_PUBLISH_MODE
-
rmw_connextdds总是设置 DDS_DataWriterQos::publish_mode::kind 为 DDS_ASYNCHRONOUS_PUBLISH_MODE_QOS, 主要是为了支持"大数据块传输". 这个设置可能不是必要的, 可以设置 RMW_CONNEXT_USE_DEFAULT_PUBLISH_MODE为一个非空值来禁用.
阅读(2075) | 评论(0) | 转发(0) |