Contents

适用于 ROS 2 的奥比中光相机 Fast DDS 优化指南

在使用默认配置时,Fast DDS 的传输效率可能不佳,这会导致在 ROS 2 中使用奥比中光相机时出现明显的图像传输延迟。本文档旨在指导您如何优化 Fast DDS 以提高图像传输效率。

1. 调整系统参数

IP 分片(IP Fragmentation)存活时间

  • 路径/proc/sys/net/ipv4/ipfrag_time(默认值:30 秒)

  • 目的:定义 IP 分片在内存中保留的时长。

  • 调整:减小此值可以缩短未收到分片时的等待窗口,有助于减少延迟。请根据您的具体环境需求进行调整,因为此设置会影响所有传入的 IP 分片。

    示例:设置为 3 秒。

    1
    
    sudo sysctl net.ipv4.ipfrag_time=3
    

IP 分片内存阈值

  • 路径/proc/sys/net/ipv4/ipfrag_high_thresh(默认值:262144 字节)

  • 目的:设置用于重组 IP 分片的最大内存。

  • 调整:增大此值可以为分片重组分配更多内存,从而更好地处理大型数据包。

    示例:增大到 128 MB。

    1
    
    sudo sysctl net.ipv4.ipfrag_high_thresh=134217728
    

最大缓冲区大小

  • 目的:配置接收和发送数据的最大缓冲区大小,这对于高吞吐量的数据传输至关重要。

  • 调整:设置接收和发送操作的最大缓冲区大小。

    命令

    1
    2
    3
    4
    
    sudo sysctl -w net.core.rmem_max=2147483647
    sudo sysctl -w net.core.rmem_default=2147483647
    sudo sysctl -w net.core.wmem_max=2147483647
    sudo sysctl -w net.core.wmem_default=2147483647
    

您也可以通过将这些设置添加到 /etc/sysctl.d/10-fastrtps-max.conf 文件中,使其永久生效。

1
sudo gedit /etc/sysctl.d/10-fastrtps-max.conf

在文件中添加以下内容:

1
2
3
4
net.core.rmem_max=2147483647
net.core.rmem_default=2147483647
net.core.wmem_max=2147483647
net.core.wmem_default=2147483647

保存并退出文件后,运行 sudo sysctl -p 来应用更改。

更多详细指导,请参考 ROS 2 DDS Tuning Documentation

2. Fast DDS 配置

下面是一个经过优化的 Fast DDS 配置文件示例,专为在 ROS 2 中与奥比中光相机一起使用而设计。此配置通过调整缓冲区大小和传输设置来增强整体数据传输性能。

配置文件:shm_fastdds.xml

将此文件放置在 $HOME 目录下。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<?xml version="1.0" encoding="UTF-8"?>
<profiles xmlns="http://www.eprosima.com/XMLSchemas/fastRTPS_Profiles">
    <transport_descriptors>
        <transport_descriptor>
            <transport_id>UDP_transport</transport_id>
            <type>UDPv4</type>
            <maxInitialPeersRange>10</maxInitialPeersRange>
            <maxMessageSize>65000</maxMessageSize>
            <sendBufferSize>1048576</sendBufferSize>
            <receiveBufferSize>1048576</receiveBufferSize>
        </transport_descriptor>
    </transport_descriptors>
    <participant profile_name="participant_profile_ros2" is_default_profile="true">
        <rtps>
            <name>profile_for_ros2_context</name>
            <userTransports>
                <transport_id>UDP_transport</transport_id>
            </userTransports>
            <useBuiltinTransports>false</useBuiltinTransports>
            <sendSocketBufferSize>1048576</sendSocketBufferSize>
            <listenSocketBufferSize>1048576</listenSocketBufferSize>
            <builtin>
                <initialPeersList>
                    <locator>
                        <udpv4>
                            <address>127.0.0.1</address>
                        </udpv4>
                    </locator>
                </initialPeersList>
            </builtin>
        </rtps>
    </participant>
    <data_writer profile_name="default publisher profile" is_default_profile="true">
        <qos>
            <publishMode>
                <kind>ASYNCHRONOUS</kind>
            </publishMode>
            <latencyBudget>
                <duration>
                    <sec>0</sec>
                    <nanosec>1000000</nanosec>
                </duration>
            </latencyBudget>
        </qos>
        <historyMemoryPolicy>PREALLOCATED_WITH_REALLOC</historyMemoryPolicy>
    </data_writer>
    <data_reader profile_name="default subscription profile" is_default_profile="true">
        <qos>
            <data_sharing>
                <kind>AUTOMATIC</kind>
            </data_sharing>
            <latencyBudget>
                <duration>
                    <sec>0</sec>
                    <nanosec>1000000</nanosec>
                </duration>
            </latencyBudget>
        </qos>
        <historyMemoryPolicy>PREALLOCATED_WITH_REALLOC</historyMemoryPolicy>
    </data_reader>
</profiles>

环境变量

设置以下环境变量以使用自定义的 Fast DDS 配置文件:

1
2
3
export RMW_IMPLEMENTATION=rmw_fastrtps_cpp
export FASTRTPS_DEFAULT_PROFILES_FILE=$HOME/shm_fastdds.xml
export RMW_FASTRTPS_USE_QOS_FROM_XML=1

此配置旨在优化数据流并减少传输延迟,从而提高奥比中光相机系统在 ROS 2 环境中的响应速度和可靠性。