以太网是世界上最普及的通信标准。然而,由于其假定的非确定性行为,很少应用在机器人上。在本文中,我们将展示以太网的确定性一面,它可以为机器人通信提供灵活可靠的解决方案。
用于控制机器人系统的网络拓扑和流量模式跟传统网络又很大的不同,后者专注于大型、自组织网络。下面,我们介绍了一些测试和基准测试的结果,涉及超过1亿个传输数据包。在我们的所有测试过程中,没有丢弃或接收无序的数据包。由于文章比较长,我们将分多篇发布。
__技术背景__
机器人工程师在考虑实时控制技术时,主要关注点之一是延迟的可预测性。最坏的情况下,延迟往往比总吞吐量更重要,因此,延迟尖峰和分组丢失的可能性在通信标准中通常是红色标记。
将以太网用于实时控制的争论始于网络早期。通过单个共享介质进行通信的节点,采用随机元素的控制方法进行仲裁访问(CSMA/CD)。当两个帧在传输期间发生冲突时,发送方退出随机超时并尝试重新传输。在多次尝试失败后,帧可以完全丢弃。通过Hub连接的节点越多,冲突域进一步扩展,将出现更多的冲突和更少的可预测行为。
从1990年开始,Hub完全被每个端口都具有专用全双工(用于发送和接收的单独线路)连接的交换机替代。它将段分离,隔离冲突域,消除了发生在物理(线)层面的任何冲突。CSMA / CD仍然支持向后兼容性和半双工连接,但它基本上已过时。
使用专用线路引入附加缓冲和开销,用于将帧转发到目标接收器。截至2016年,几乎所有交换机都实现存储转发交换架构,其中交换机完全接收数据包,将它们存储在内部缓冲区中,然后将它们转发到相应的接收器端口。随着分组经过的交换机数量增加,延迟成本也随之上涨。在替代切入方法中,交换机可以在接收到目标地址之后立即转发分组,可能使延迟大大降低。这种方法有时会用在对延迟非常敏感的应用中,例如金融交易应用,通常很少会用在消费级硬件上。它更难以实现,只有两个端口协商相同的速度,并要求接收端口空闲才能正常工作。由于需要缓冲足够的数据来评估目标地址,因此对较小分组的好处也不太显着。
许多机器人工程师通常关注的另一个问题是无序接收,这意味着来自单一来源的分组序列接收顺序可能是不一样的。这与通过互联网通信相关,但通常不适用于没有冗余路由和负载平衡的本地网络。根据驱动程序的实现,它理论上可能发生在本地网络上,但我们还没有观察到这种情况。
以太网有多个网络标准,可以确保能用于工业自动化(工业以太网)。他们通过严格控制网络布局和限制可连接的组件来实现这一点。但是,如果用类似的方法控制网络,即使是廉价的消费级网络设备也可以得到很好的结果。
注意,这不是一个新的概念。我们发现十几年前就有多篇文章讨论了类似的发现,例如,实时以太网(2001)、在Windows和Linux上使用UDP的实时性能测试(2005)、评估工业以太网(2007)、确定性网络:从利基到主流(2013).
__标准的建立__
对网络进行基准测试的一种常用方法是设置两台计算机,并让发送方向接收方发送消息以回送消息。这样,发送方可以测量往返时间(RTT)并收集网络的统计数据。这通常工作良好,但大型操作系统堆栈和设备驱动程序可能会添加大量的变化。为了减少不必要的抖动,我们决定使用两个嵌入式设备来设置基准。
图1 HEBIRobotics I/O 板
我们的初创公司HEBIRobotics建立了各种各样的模块,可以帮助快速开发定制机器人系统。我们主要关注执行器,但我们也开发了其他设备,如I / O板,如上图所示。每个板有48个引脚,可用于通过网络远程访问的各种功能(模拟和数字I / O,PWM,编码器输入等)。我们通常用它来连接制动器和外部设备,例如抓手或气动阀,或获取各种传感器数据输入到MATLAB。
每个设备包含一个168MHz的ARM微控制器(STM32f407)和一个100 Mbit / s的网络端口,我们发现用它们来做网络测试非常方便。我们选择两个I / O板作为发送方和接收方节点,并开发了定制固件以隔离网络堆栈。得到的固件基于ChibiOS 2.6.8和lwIP 1.4.1。使用一个分辨率为250ns硬件计数器测定所用的时间。
由于没有办法在这些设备上存储多个千兆字节,我们决定使用可以接收测量数据并持久保存到磁盘的UDP服务远程记录数据。为了避免由磁盘I / O引起的停顿,主要的套接字处理程序写入一个由后台线程持久化的双缓冲结构。线程之间的同步是使用WriterReaderPhaser来完成的,这是一个同步原语,允许读者翻转缓冲区,同时保持编写器无等待。
步骤流程如下:
1. 发送方以固定速率(例如100Hz)唤醒
2. 发送方递增序列号
3. 发送方测量时间(“发送时间戳”),并向接收方发送数据包
4. 接收方将数据包回送到发送方
5. 发送方接收数据包并测量时间(“接收时间戳”)
6. 发送方将测量结果发送到日志服务器
7. 日志服务器接收测量结果并保存到磁盘
将所得到的二进制数据加载到MATLAB中用于分析和可视化。
往返时间是接收和发送时间戳之间的差。我们还记录每个分组的序列号和接收方节点的IP地址,以便检测分组丢失和追踪排序。
__UDP数据包大小__
UDP数据包包括各种报头,至少要占据66字节。此外,以太网帧的最小规格为84字节,因此UDP数据包的最小有效载荷是18字节。粗略结构图如下图所示,更多详细信息可查看以太网II、英特网协议(IPv4)和用户数据协议(UDP)。
图2 UDP / IPv4 / 以太网II帧结构
对于有效载荷较小(小于10字节)的传统自动化应用而言,虽然这种开销看起来很高,但它与智能设备通信时可以快速摊销。例如,我们每个X系列执行器包括40多个传感器(位置、速度、扭矩、3轴陀螺仪、3轴加速度计、多个温度传感器,等等)它们被组合成一个单独的数据包, 占用185和215字节有效负载。来自I/O板的典型反馈分组甚至更大,需要大约300个字节。当比较开销时,考虑可用带宽很重要,例如,通过千兆以太网(甚至超过100Mbit/秒)发送100字节比使用传统的基于非以太网的备选例如RS485或CAN总线发送单字节更快。
对于这些基准,我们选择测量200字节有效负载的往返时间。在包括所有开销后,线上的实际大小是266字节。在100Mbit/s和1Gbit/s以太网上传输266字节所需的理论时间分别为20.3us和2.03us。
注意,尽管大小规格代表典型致动器反馈分组,但是生产中的往返时间可能更快,因为输出分组(命令)显着小于响应分组(反馈)。
(张有凤编译整理)