Chinaunix首页 | 论坛 | 博客
  • 博客访问: 9193424
  • 博文数量: 1728
  • 博客积分: 12961
  • 博客等级: 上将
  • 技术积分: 19870
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-09 11:25
个人简介

偷得浮生半桶水(半日闲), 好记性不如抄下来(烂笔头). 信息爆炸的时代, 学习是一项持续的工作.

文章分类

全部博文(1728)

文章存档

2024年(4)

2023年(26)

2022年(112)

2021年(217)

2020年(157)

2019年(192)

2018年(81)

2017年(78)

2016年(70)

2015年(52)

2014年(40)

2013年(51)

2012年(85)

2011年(45)

2010年(231)

2009年(287)

分类: 其他平台

2021-05-31 12:26:11

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下面的一种.

点击(此处)折叠或打开

  1. rtisetenv_<architecture> 脚本会附带设置 NDDSHOME环境变量, 同时会设置 PATH 和 LD_LIBRARY_PATH 来加载Connext库和工具.

  2. “architecture-specific”这些脚本不会设置 CONNEXTDDS_ARCH 环境的.

  3. 如果没有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系统.

点击(此处)折叠或打开

  1. 把 RTIMEHOME 设置成无效, 则可以禁止 RTI Connext DDS Micro 的自动检测.

  2.  RTI Connext DDS Micro的自动检测只有 RTI Connext DDS Professional 6.0.0 或者更新版本安装时才会有效.


--------------------------------------------------------------------------------------------------------------
二进制安装时
--------------------------------------------------------------------------------------------------------------

点击(此处)折叠或打开 例如 x86 64bit ubunt2004 rolling

  1. # Download and trust the ROS packaging master key.
  2. sudo apt update && sudo apt install curl gnupg2 lsb-release
  3. curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-
  4. ?→key add -
  5. # Add the ROS 2 repository to your apt repositories.
  6. sudo sh -c 'echo "deb [arch=$(dpkg --print-architecture)]
  7. ?→ros2/ubuntu $(lsb_release -cs) main" > /etc/apt/sources.list.d/ros2-latest.list'
  8. # Update package database.
  9. sudo apt update
  10. # Use package ros-rolling-ros-base for a more minimal installation.
  11. sudo apt install ros-rolling-desktop

  12. 然后安装 rmw_contextdds.
  13. sudo apt install ros-rolling-rmw-connextdds


  14. 然后使用
  15. ###Run ROS 2 applications with RTI Connext DDS Professional 5.3.1, e.g.
  16. $RMW_IMPLEMENTATION=rmw_connextdds ros2 run demo_nodes_cpp talker

--------------------------------------------------------------------------------------------------------------
从foxy版本说明如何安装 rmw.

点击(此处)折叠或打开

  1. 先安装好foxy
  2. source /opt/ros/foxy/setup.bash

  3. 安装 RTI Connext DDS Professional 并加载到系统环境 (或者设置 CONNEXTDDS_DIR)
  4. export NDDSHOME=~/rti_connext_dds-6.0.1    // sudo apt install ros-rolling-rmw-connextdds 为 5.3.1版本
  5. 如果不想编译 rmw_connextdds, 可以跳过此部, 例如你只想用 rmw_connextddsmicro

  6. 可选 -- 安装 RTI Connext DDS Micro 并加载到系统环境 (或者设置 CONNEXTDDS_DIR) 此部为你想使用 micro 3.x和6.x意外的版本或者只用rmw_connextddsmicro来编译(此时rmw_connextdds没有被加载的情况下)
  7. export RTIMEHOME=~/rti_connext_dds_micro-3.0.3
  8. RTIMEHOME一般会从已经安装的 RTI Connext DDS Professional 中寻找.

  9. mkdir -p ~/ros2_connextdds/src/ros2
  10. cd ~/ros2_connextdds
  11. git clone https://github.com/ros2/rmw_connextdds.git src/ros2/rmw_connextdds

  12. colcon build
  13. source ~/ros2_connextdds/install/setup.bash

  14. //使用 RTI Connext DDS Professional
  15. RMW_IMPLEMENTATION=rmw_connextdds ros2 run demo_nodes_cpp talker

  16. //使用 RTI Connext DDS Micro
  17. RMW_IMPLEMENTATION=rmw_connextddsmicro \
  18. RMW_CONNEXT_INITIAL_PEERS=_shmem:// \
  19. ros2 run demo_nodes_cpp listener

--------------------------------------------------------------------------------------------------------------
colcon build 可以使用  --cmake-args -DRMW_CONNEXT_LOG_MODE=printf  来命令行引入编译参数

点击(此处)折叠或打开

  1. 编译参数
  2. RMW_CONNEXT_LOG_MODE
  3.  default: 使用 ROS2 rcutils作为输出, 日志包括error 和 warning.

  4.  all: 使用 ROS2 rcutils作为输出, 日志级别需要>=info.
  5.  printf:使用printf作为输出. 所有日志都输出.

  6. RMW_CONNEXT_WAITSET_MODE: 需要两种rmw的哪种rmw提供WaitSets和中间层的事件 event. 实际上rmw_connextdds and rmw_connextddsmicro都实现了DDS API, 或者使用标准的C++实现(只有必要的实现, 能节省CPU负载)
  7. RMW_CONNEXT_WAITSET_MODE=dds, 使用 rmw_connextdds 或者 rmw_connextddsmicro
  8. RMW_CONNEXT_WAITSET_MODE=std: 使用标准的C++实现.


点击(此处)折叠或打开

  1. 运行时参数
  2. RMW_CONNEXT_CYCLONE_COMPATIBILITY_MODE:
  3. 默认 ROS2 使用 rmw_connextdds 提供 同类节点(都使用 rmw_connextdds的节点) 中间层通讯. 所以ROS2 是不支持跨厂商DDS通讯的. 若修改rmw_cyclonedds_cpp为兼容模式compatibility mode 则支持跨厂商DDS通讯, 但是会增加通讯负担包括协议转化等.

  4. RMW_CONNEXT_DISABLE_LARGE_DATA_OPTIMIZATIONS
  5. 默认 rmw_connextdds会使用大块模式, 然后自动优化QoS给DataWriters和DataReaders用于提升流量性能和稳定性. 默认每个终结点endpoint会有至少 1MB(编译时的一个限制) 的流量.
  6. 也可以使用更快速的流量模式用于急速或碎片化的数据.但可能导致不必要的网络流量增加,特别是在数据没有以快速的周期速度交换的情况下。


  7. RMW_CONNEXT_DISABLE_FAST_ENDPOINT_DISCOVERY
  8. 默认, rmw_connextdds 会 修改 QoS的 DomainParticipant = Optimization.Discovery.Endpoint.Fast部分来使能终结点的快速发现. 让不同应用,不同网络,或者更大系统的节点可以快速相互识别. 使用CONNEXT_DISABLE_FAST_ENDPOINT_DISCOVERY 会关闭自动识别, 让 QoS的DomainParticipant字段保持默认值.

  9. RMW_CONNEXT_ENDPOINT_QOS_OVERRIDE_POLICY
  10. 没有设置或者为always. 则使用QoS为默认profile, 然后ROS的QoS设置会加载于其上.

  11. 如果设置为never, 则 使用QoS为默认profile, 但是ros的QoS设置则无效.

  12. 设置为 dds_topics: <regex>. 例如dds_topics: rt/my_topic|rt/
  13. my_ns/another_topic. 列出的topic使用never设置, 没有列出的使用 always设置.

  14. rt打头的topic 需要转化为 rt/my/fully/
  15. qualified/ros/topic
  16. service的quest话题为 qr/my/fully/qualified/ros/serviceRequest
  17. service的Response话题为rr/my/fully/qualified/ros/serviceResponse  其实service是一对话题实现的.

点击(此处)折叠或打开

  1. RMW_CONNEXT_INITIAL_PEERS
  2. 提供一个地址列表(在DomainParticipant), 用于与指定主机进行通讯.

  3. RMW_IMPLEMENTATION=rmw_connextddsmicro \
  4. RMW_CONNEXT_INITIAL_PEERS="_shmem://, 239.255.0.1" \
  5. ros2 run demo_nodes_cpp listener

  6. RMW_CONNEXT_LEGACY_RMW_COMPATIBILITY_MODE
  7. ROS2应用不能和以前版本的RMW通讯,除非设置这个变量为compatibility.

  8. RMW_CONNEXT_REQUEST_REPLY_MAPPIN
  9. DDS-RPC需要做request/reply映射两个收发profiles.

  10. basic作为普通负载, 而extended作为OOB数据.
  11. 默认 rmw_connextdds使用 extended. rmw_connextddsmicro 使用 basic.


  12. RMW_CONNEXT_UDP_INTERFAC
  13. RTI Connext DDS Micro 需要明确使用哪个网络接口, 默认为lo. 可以设置为 eth0

  14. RMW_CONNEXT_USE_DEFAULT_PUBLISH_MODE
  15. rmw_connextdds总是设置 DDS_DataWriterQos::publish_mode::kind 为 DDS_ASYNCHRONOUS_PUBLISH_MODE_QOS, 主要是为了支持"大数据块传输". 这个设置可能不是必要的, 可以设置 RMW_CONNEXT_USE_DEFAULT_PUBLISH_MODE为一个非空值来禁用.









阅读(1881) | 评论(0) | 转发(0) |
0

上一篇:linux libpinyin库

下一篇:USB转232_TTL的配置

给主人留下些什么吧!~~