参考:
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% 的发现流量。