Open5

Cyclone DDS (CycloneDDS)

PINTOPINTO

Validate the sysctl settings

現状の設定を確認する(下記はデフォルトのパラメータになっていることを示している)

sysctl net.core.rmem_max net.ipv4.ipfrag_time net.ipv4.ipfrag_high_thresh

net.core.rmem_max = 212992
net.ipv4.ipfrag_time = 30
net.ipv4.ipfrag_high_thresh = 4194304

Tune system-wide network settings

1. 一時的にコマンドでネットワーク設定を反映する方法

# Increase the maximum receive buffer size for network packets
sudo sysctl -w net.core.rmem_max=2147483647  # 2 GiB, default is 208 KiB

# IP fragmentation settings
sudo sysctl -w net.ipv4.ipfrag_time=3  # in seconds, default is 30 s
sudo sysctl -w net.ipv4.ipfrag_high_thresh=134217728  # 128 MiB, default is 256 KiB

2. 設定内容を永続化するために設定ファイルを生成する方法

sudo nano /etc/sysctl.d/10-cyclone-max.conf

下記をコピー&ペーストして保存

# Increase the maximum receive buffer size for network packets
net.core.rmem_max=2147483647  # 2 GiB, default is 208 KiB

# IP fragmentation settings
net.ipv4.ipfrag_time=3  # in seconds, default is 30 s
net.ipv4.ipfrag_high_thresh=134217728  # 128 MiB, default is 256 KiB

とりあえずリブートして設定が反映されるか簡単に確認する

sudo reboot

再び設定確認コマンドを実行(設定が反映された)

sysctl net.core.rmem_max net.ipv4.ipfrag_time net.ipv4.ipfrag_high_thresh

net.core.rmem_max = 2147483647
net.ipv4.ipfrag_time = 3
net.ipv4.ipfrag_high_thresh = 134217728
PINTOPINTO

CycloneDDS Configuration

CycloneDDS の設定ファイルを作成する HOMEパスに作成する一例:~/cyclonedds.xml

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/master/etc/cyclonedds.xsd">
  <Domain Id="any">
    <General>
      <!-- 使用するネットワークインタフェースを自動判断に設定(手軽) -->
      <Interfaces>
        <NetworkInterface autodetermine="true" priority="default" multicast="default" />
      </Interfaces>
      <!-- 使用するネットワークインタフェースを任意のインタフェースに固定する場合の設定 -->
      <!-- <Interfaces>
        <NetworkInterface autodetermine="false" name="enp38s0" priority="default" multicast="default" />
      </Interfaces> -->
      <!-- 使用するネットワークインタフェースを lo に固定する場合の設定 -->
      <!-- <Interfaces>
        <NetworkInterface autodetermine="false" name="lo" priority="default" multicast="default" />
      </Interfaces> -->
      <AllowMulticast>default</AllowMulticast>
      <MaxMessageSize>65500B</MaxMessageSize>
    </General>
    <Internal>
      <SocketReceiveBufferSize min="10MB"/>
      <Watermarks>
        <WhcHigh>500kB</WhcHigh>
      </Watermarks>
    </Internal>
  </Domain>
</CycloneDDS>

設定ファイルなどが自動的に読み込まれるように設定する

echo "export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp" >> ~/.bashrc
echo "export CYCLONEDDS_URI=file://${HOME}/cyclonedds.xml" >> ~/.bashrc
source ~/.bashrc
  • cyclonedds が有効になっていることを確認
ros2 doctor --report

   RMW MIDDLEWARE
middleware name    : rmw_cyclonedds_cpp

   ROS 2 INFORMATION
distribution name      : humble
distribution type      : ros2
distribution status    : active
release platforms      : {'rhel': ['8'], 'ubuntu': ['jammy']}