1. XTS系统架构与运动学基础
Beckhoff XTS(eXtended Transport System)是一种把直线电机原理“卷”成环形轨道的柔性输送系统。理解它的第一步,不是急着写碰撞避免算法,而是先弄清楚:动子(Mover)在轨道上到底处于什么位置、朝哪个方向、以什么速度运动,以及这些量由谁测量、由谁驱动。碰撞避免与间距控制,本质上就是在这套运动学模型之上,对多个动子的位置与速度施加约束。
一、XTS的物理组成
一套XTS由四个核心部分构成,它们共同决定了动子的运动学行为:
- 动子(Mover):无源部件,内部装有永磁体阵列,没有电缆和电池。动子本身不产生动力,而是被轨道上的线圈磁场推动。每个动子有唯一ID,系统通过位置反馈识别其身份。
- 轨道(Track):由多个直线段和圆弧段拼接成的闭合路径。轨道决定了动子可运动的几何空间,也决定了坐标系如何分段定义。
- 驱动线圈(Motor Module):沿轨道分布的电磁线圈段,通电后产生行波磁场,推动动子前进。线圈段是分段的,动子跨越段边界时由相邻段接力驱动。
- 位置反馈(Position Feedback):通常由轨道上的霍尔传感器阵列或编码器实现,实时测量动子在轨道上的绝对位置。位置反馈是碰撞避免的“眼睛”,没有它就无法知道两个动子是否过近。
这四者的关系可以用下面的结构图表示。注意:动子与轨道是“运动对象与路径”的关系,线圈与反馈是“执行与感知”的关系,二者共同构成闭环。
二、动子运动学模型
XTS动子在轨道上的运动可以简化为一维曲线运动。设轨道总长为 L,动子 i 的位置用弧长坐标 si 表示,si ∈ [0, L)。由于轨道是闭合的,si = L 与 si = 0 是同一个物理点,这给间距计算带来一个关键问题:两个动子的“距离”不能简单用 |s1 − s2| 表示,而要考虑环形拓扑。
正确的环形间距定义为:
d = min( |s1 - s2| , L - |s1 - s2| )
例如 L = 2000 mm,s1 = 100 mm,s2 = 1900 mm。直接相减得 1800 mm,但环形间距实际是 min(1800, 200) = 200 mm。如果碰撞避免算法忽略这一点,就会误判两个“看似很远”的动子其实已经接近。
动子的速度 vi = dsi/dt,加速度 ai = dvi/dt。XTS动子受电磁推力 F 驱动,同时受摩擦力 f 和负载力 FL 影响,运动方程为:
m · a = F - f - F_L
其中 m 为动子质量(含负载)。在碰撞避免场景中,我们通常不直接控制 F,而是通过控制器给出目标速度或目标位置,由底层电流环完成推力输出。因此,上层算法关注的是 s、v、a 的约束关系,而不是电磁细节。
三、坐标系定义
XTS使用两套坐标系,必须明确区分:
- 弧长坐标 s:一维标量,表示动子沿轨道走了多远。它是碰撞避免的核心变量,因为间距、速度、加速度都在这个坐标下定义。
- 笛卡尔坐标 (x, y):用于描述轨道几何形状和动子在二维平面上的实际位置。圆弧段上,s 与 (x, y) 的换算需要圆弧半径和圆心角。
方向约定:本文统一规定 s 沿轨道逆时针方向增加,v > 0 表示动子沿 s 增加方向运动。所有间距计算、速度限制和碰撞判断都基于这一约定。如果实际项目中轨道方向相反,只需在初始化时统一取反,不要在算法中途混用。
四、碰撞避免与间距控制在系统中的位置
从控制层级看,XTS的运动控制分为三层:底层电流环控制线圈电流,中层速度/位置环控制单个动子,上层协调层负责多动子之间的碰撞避免与间距控制。碰撞避免不是替代底层控制,而是在目标位置/速度生成阶段施加约束。
具体来说,协调层接收每个动子的目标位置 starget,结合当前位置 s 和速度 v,计算出一个“安全可达”的中间目标。如果两个动子的环形间距 d 小于最小安全间距 dmin,协调层会降低后车速度或暂停其运动,直到间距恢复。这个过程必须在每个控制周期内完成,典型周期为 1 ms 到 4 ms。
五、一个可运行的教学示例
假设轨道总长 L = 2000 mm,三个动子 M1、M2、M3 的初始位置分别为 s1 = 0 mm、s2 = 300 mm、s3 = 600 mm,均以 v = 500 mm/s 沿正方向运动。最小安全间距 dmin = 150 mm。
在 t = 0 时刻,计算环形间距:
d12 = min(|0-300|, 2000-300) = 300 mm → 安全
d23 = min(|300-600|, 2000-300) = 300 mm → 安全
d31 = min(|600-0|, 2000-600) = 600 mm → 安全
由于三个动子速度相同,间距保持不变,系统稳定运行。但如果 M1 突然减速到 200 mm/s,M2 仍以 500 mm/s 运动,d12 会以 300 mm/s 的速率缩小。当 d12 降到 150 mm 时,协调层必须让 M2 减速到 200 mm/s 或更低,否则将发生碰撞。这个判断在每个控制周期执行一次,实际实现中还需要考虑减速距离,不能等到 d = dmin 才动作。