Bootstrap

ROS2——cyclonedds替换及共享内存支持


使用sudo apt install ros-foxy-rmw-cyclonedds-cpp 直接安装的无法支持共享内存,所以采用源码编译,也利于版本管理

1. cyclonedds版本

ros2 选用foxy版本

rmw_cyclonedds 选用foxy分支 0.7.11版本

https://github.com/ros2/rmw_cyclonedds.git

cyclonedds 选用foxy分支 0.10.5版本

https://github.com/eclipse-cyclonedds/cyclonedds.git

iceoryx 选用v2.95.0版本

https://github.com/eclipse-iceoryx/iceoryx.git

2. cyclonedds编译

  1. 准备目录及包
mkdir -p /mnt/ros2/ros2_cyclonedds/src
cd /mnt/ros2/ros2_cyclonedds/src


# 将三个需求的包放到/mnt/ros2/ros2_cyclonedds/src目录下并解压
# cyclonedds-0.10.5.tar.gz  iceoryx-2.95.0.tar.gz  rmw_cyclonedds-0.7.11.tar.gz
  1. 安装依赖包
# 安装依赖包
cd /mnt/ros2/ros2_cyclonedds
rosdep install --from src -i

  1. 编译cyclonedds
# 安装到/opt/ros/cyclonedds
mkdir /opt/ros/cyclonedds
cd /mnt/ros2/ros2_cyclonedds
colcon build --symlink-install --install-base /opt/ros/cyclonedds/

以上为编译成功。

注意:这里在编译时会进行git拉取,而板卡上一般很难访问github,所以这里的解决方法是在板卡中开启了vpn访问(这里需要各显神通…)

3. 配置内存池

  1. 编辑内存池配置
mkdir /opt/ros/cyclonedds/config
vi /opt/ros/cyclonedds/config/iox_config.toml

将以下内存池配置粘贴

[general]
version = 1

[[segment]]


[[segment.mempool]]
size = 512
count = 1024

[[segment.mempool]]
size = 1024
count = 1024

[[segment.mempool]]
size = 4096
count = 1024

[[segment.mempool]]
size = 1048576
count = 32
  1. 使能内存池

启用刚刚编辑的内存池配置使能内存池

/opt/ros/cyclonedds/install/iceoryx_posh/bin/iox-roudi -c /opt/ros/cyclonedds/config/iox_config.toml &

内存池成功使能,打印如下

4. 使用共享内存进行通信

  1. 编辑cyclonedds配置文件,使用内存池
# 创建配置文件cyclonedds.xml,配置使用内存池
vi /opt/ros/cyclonedds/config/cyclonedds.xml

内容如下:

<?xml version="1.0" encoding="UTF-8" ?>
<CycloneDDS xmlns="https://cdds.io/config"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="https://cdds.io/config https://raw.githubusercontent.com/eclipse-cyclonedds/cyclonedds/iceoryx/etc/cyclonedds.xsd">
    <Domain id="any">
        <SharedMemory>
            <Enable>true</Enable>
            <LogLevel>info</LogLevel>
        </SharedMemory>
    </Domain>
</CycloneDDS>
  1. 使用官方demo进行测试
export CYCLONEDDS_URI=file:///opt/ros/cyclonedds/config/cyclonedds.xml
export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
source /opt/ros/foxy/setup.bash
source /opt/ros/cyclonedds/setup.bash

ros2 run demo_nodes_cpp talker &
ros2 run demo_nodes_cpp listener &

运行效果如下,能成功通信

;