ROS2之DDS问题汇集

2022-08-10 15:18:17 浏览数 (1)

参考:

answers.ros.org/question/403517/ros2-network-communication-does-it-even-work-reliably/



reliably?

目前,调通就很开心,最长测试过100小时,还别说,各种小bug,但是大问题不会有。

算可靠稳定吗?


汇总:

111

首先,可以说已经设法让两台计算机互相看到。超级简单,只需将它们设置在同一个 wifi 和 BAM 中,就可以在另一台计算机上看到正在发布的主题。但是,通信随机中断,必须重置 ros2 守护程序才能使其再次工作。此外,跨计算机发布和订阅主题似乎可行,但尝试发送导航目标(行动服务器调用),但该目标从未被接受。对于如此简单的任务,这似乎非常不可靠。

222 

最近才开始考虑将 ROS 整合到工业自动化应用程序中,并且遇到了类似的“破坏性”问题。

实验是在 Foxy 上使用 FastDDS。 遇到的特殊情况是:

  • 带有 ROS 发布者的 Windows PC
  • 办公室网络上的 IP 网络接口
  • 具有 ROS 订阅者的 Linux PC
  • 一个真实的网络接口,在办公网络上有一个 IP 地址
  • 由 Docker/VMware 创建的具有奇怪本地 IP 地址的各种其他网络接口

使用默认设置运行此安排会导致办公网络瘫痪,并使互联网带宽饱和。网络不是强项,但对发生的事情的理解是:

  • 订阅者看到它想要的主题已发布
  • 它将其所有 IP 地址作为潜在目的地发送给发布者
  • 然后发布者尝试发布到所有这些地址
  • 正确的通过(所以一切似乎都有效)
  • 但是不正确的没有路由(因为它们是用于子 PC 上的 VMware 等),因此数据包被发送到路由器,然后发送到互联网
  • 在这种情况下,模拟了来自 4 个 64 层激光雷达、数百兆比特的数据,并且外部带宽饱和了几天,直到问题被发现(都认为路由器出现故障或其他问题)。

尽管关闭整个办公室互联网令人沮丧,但真正关心的是,客户通常在偏远地区的有限带宽网络(控制设备 100Mb 或更少)上运行安全关键应用程序,所以需要谨慎传输数据的方式。过去一直使用 TCP 作为我们方法的一部分,我们希望 ROS/FastDDS 中的默认 UDP 实现仍然适用,但显然不是。

333

见过类似的问题,不是每个网络都有,但主要是无线网状网络有许多无线 AP 相互通信,其中 ROS2/DDS 流量导致它停止运行。

444

快速添加:从技术上讲,export ROS_LOCALHOST_ONLY=1不执行原始帖子的 XML 中指定的所有配置步骤。它错过了关于 <MaxAutoParticipantIndex>120</MaxAutoParticipantIndex>.

如果没有此设置,一旦有多个节点,就会遇到此错误:ros2: Failed to find a free participant index for domain ...

555

fastdds

机器人

代码语言:javascript复制
<?xml version="1.0" encoding="UTF-8" ?>
<profiles xmlns="http://www.eprosima.com/XMLSchemas/fastRTPS_Profiles">
    <participant profile_name="disable_multicast" is_default_profile="true">
        <rtps>
            <builtin>
                <metatrafficUnicastLocatorList>
                    <locator/>
                </metatrafficUnicastLocatorList>
                <initialPeersList>
                    <locator>
                        <udpv4>
                            <address>127.0.0.1</address>
                        </udpv4>
                    </locator>
                </initialPeersList>
            </builtin>
        </rtps>
    </participant>
</profiles>

笔记本

代码语言:javascript复制
<?xml version="1.0" encoding="UTF-8" ?>
<profiles xmlns="http://www.eprosima.com/XMLSchemas/fastRTPS_Profiles">
    <participant profile_name="unicast_connection" is_default_profile="true">
        <rtps>
            <builtin>
                <metatrafficUnicastLocatorList>
                    <locator/>
                </metatrafficUnicastLocatorList>
                <initialPeersList>
                    <locator>
                        <udpv4>
                            <address>$ROBOT_IP</address>
                        </udpv4>
                    </locator>
                </initialPeersList>
            </builtin>
        </rtps>
    </participant>
</profiles>

666

此外,最新发布的 Discovery Server 版本允许通过仅发现属于同一主题的发布者和订阅者来减少高达 93% 的发现流量。 


0 人点赞