You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ROS2 Humble切换TCP传输后话题无法在ros2 topic list中显示

解决ROS2 Humble切换TCP传输后话题无法被发现的问题

问题根源

设置FASTDDS_BUILTIN_TRANSPORTS=LARGE_DATA会让FastDDS仅启用TCP传输,但默认配置下TCP的内置发现机制未正确初始化,节点之间无法完成发现流程,导致话题无法被其他终端或跨机器节点识别。

修复方案

1. 用FastDDS XML配置文件指定TCP传输与发现规则

创建fastdds_tcp_config.xml配置文件,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<profiles xmlns="http://www.eprosima.com/XMLSchemas/fastRTPS_Profiles">
    <transport_descriptors>
        <transport_descriptor>
            <transport_id>TCPv4Transport</transport_id>
            <type>TCPv4</type>
            <maxInitialPeersRange>100</maxInitialPeersRange>
        </transport_descriptor>
    </transport_descriptors>

    <participant profile_name="TCPParticipantProfile" is_default_profile="true">
        <rtps>
            <userTransports>
                <transport_id>TCPv4Transport</transport_id>
            </userTransports>
            <builtin>
                <metatrafficUnicastLocatorList>
                    <locator>
                        <tcpv4>
                            <address>0.0.0.0</address>
                            <port>7400</port>
                        </tcpv4>
                    </locator>
                </metatrafficUnicastLocatorList>
                <initialPeersList>
                    <!-- 添加需要通信的机器IP,包括本机和同网络其他机器 -->
                    <locator>
                        <tcpv4>
                            <address>127.0.0.1</address>
                            <port>7400</port>
                        </tcpv4>
                    </locator>
                    <locator>
                        <tcpv4>
                            <address>192.168.1.100</address> <!-- 替换为目标机器实际IP -->
                            <port>7400</port>
                        </tcpv4>
                    </locator>
                </initialPeersList>
                <discovery_config>
                    <discoveryProtocol>BUILTIN</discoveryProtocol>
                    <builtin_config>
                        <mcast_config>
                            <enabled>false</enabled> <!-- 禁用UDP组播,仅用TCP -->
                        </mcast_config>
                    </builtin_config>
                </discovery_config>
            </builtin>
        </rtps>
    </participant>
</profiles>

2. 加载配置文件并启动节点

在运行发布者/订阅者节点的终端中,先设置环境变量:

export FASTRTPS_DEFAULT_PROFILES_FILE=/你的文件路径/fastdds_tcp_config.xml
export FASTDS_BUILTIN_TRANSPORTS=LARGE_DATA

替换/你的文件路径/为配置文件实际保存的路径,之后再启动ROS2节点。

3. 验证效果

  • 同一机器的其他终端运行ros2 topic list,应该能看到目标话题;
  • 跨机器通信时,确保两台机器的配置文件都添加了对方IP,且ROS_DOMAIN_ID一致,网络连通正常。

替代方案:使用TCP发现服务器模式

如果不想手动指定节点IP,可以用FastDDS的发现服务器统一管理节点发现:

  1. 在任意一台机器上启动发现服务器:
fastdds discovery --server-id 0
  1. 所有需要通信的终端加载以下配置文件(命名为fastdds_tcp_server_config.xml):
<?xml version="1.0" encoding="UTF-8"?>
<profiles xmlns="http://www.eprosima.com/XMLSchemas/fastRTPS_Profiles">
    <transport_descriptors>
        <transport_descriptor>
            <transport_id>TCPv4Transport</transport_id>
            <type>TCPv4</type>
        </transport_descriptor>
    </transport_descriptors>

    <participant profile_name="TCPParticipantProfile" is_default_profile="true">
        <rtps>
            <userTransports>
                <transport_id>TCPv4Transport</transport_id>
            </userTransports>
            <builtin>
                <discovery_config>
                    <discoveryProtocol>CLIENT</discoveryProtocol>
                    <builtin_config>
                        <mcast_config>
                            <enabled>false</enabled>
                        </mcast_config>
                        <client>
                            <server_addresses>
                                <locator>
                                    <tcpv4>
                                        <address>192.168.1.100</address> <!-- 替换为发现服务器所在机器IP -->
                                        <port>11811</port>
                                    </tcpv4>
                                </locator>
                            </server_addresses>
                        </client>
                    </builtin_config>
                </discovery_config>
            </builtin>
        </rtps>
    </participant>
</profiles>
  1. 终端设置环境变量后启动节点:
export FASTRTPS_DEFAULT_PROFILES_FILE=/你的文件路径/fastdds_tcp_server_config.xml
export FASTDS_BUILTIN_TRANSPORTS=LARGE_DATA

内容的提问来源于stack exchange,提问作者S_Rashid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 03:10:15