2. 机器人控制器基础

要谈延迟测试与优化,必须先建立一张“控制器内部地图”。机器人控制器并不是一块简单的单片机,而是由实时计算、运动规划、总线通信、伺服驱动与安全逻辑共同构成的软硬件系统。延迟可能出现在任何一个环节,且往往以串联方式叠加。理解控制器架构、实时操作系统、运动控制周期与通信总线,是后续定位延迟、设计测试用例、判断优化收益的前提。

一、控制器架构:从指令到关节力矩的分层链路

典型工业机器人控制器可划分为四层:应用层、规划层、实时控制层与驱动执行层。应用层负责工艺程序、轨迹示教与人机交互;规划层完成逆解、轨迹插补、速度规划与奇异点处理;实时控制层以固定周期执行伺服更新、前馈补偿与安全监控;驱动执行层通过总线把位置、速度或力矩指令下发到各关节伺服,并回读编码器与电流数据。

这四层之间并非简单调用关系,而是存在明确的时间边界。应用层可以“慢”,规划层通常为毫秒级,实时控制层则常为 125 μs 至 1 ms,驱动层电流环甚至可达 10~50 μs。延迟测试时,必须明确被测对象位于哪一层,否则测到的“总延迟”无法归因。

机器人控制器分层架构与延迟来源 应用层 工艺程序 / 示教器 / HMI / 上位机通信 延迟来源:任务调度抖动 非实时线程阻塞、网络往返 规划层 逆运动学 / 轨迹插补 / 速度规划 / 奇异处理 延迟来源:插补周期偏大 逆解迭代耗时、队列排队 实时控制层 伺服更新 / 前馈补偿 / 安全监控 / 状态机 延迟来源:周期抖动、优先级反转 中断延迟、缓存未命中 驱动执行层 EtherCAT / CANopen / 伺服驱动器 / 编码器反馈 延迟来源:总线周期、帧排队 从站处理、电流环响应 总延迟 ≈ 应用调度 + 规划计算 + 实时周期 + 总线传输 + 伺服响应,各环节串联叠加

二、实时操作系统:延迟确定性的根基

机器人控制器普遍运行实时操作系统(RTOS)或 Linux 实时补丁(如 PREEMPT_RT、Xenomai)。实时并不等于“快”,而是“可预测”。一个 1 ms 的控制周期,如果每次抖动都在 ±5 μs 以内,系统就是确定的;如果偶尔抖动到 500 μs,即使平均很快,也会造成轨迹抖动甚至报警。

实时性主要受以下因素影响:

  • 调度策略:控制任务通常采用 SCHED_FIFO 或 SCHED_RR,优先级高于普通线程。
  • 中断延迟:网卡中断、定时器中断与 DMA 完成中断会打断控制任务。
  • 优先级反转:低优先级任务持有互斥锁,导致高优先级控制任务等待。
  • 内存与缓存:缺页异常、缓存未命中、NUMA 跨节点访问都会引入微秒级抖动。
测试建议:先用 cyclictest 或 oslat 测量系统空载与负载下的最大抖动,再叠加机器人控制任务,观察抖动是否被放大。空载抖动小不代表带载后仍小。

三、运动控制周期:延迟测试的时间标尺

运动控制周期是控制器最核心的时间参数。常见配置如下:

层级 典型周期 主要任务 延迟敏感度
应用/规划 4~20 ms 轨迹插补、逆解、逻辑判断 中
实时控制 0.5~2 ms 伺服更新、前馈、安全监控 高
总线通信 0.25~1 ms 指令下发、状态回读 高
电流环 10~50 μs 力矩闭环、PWM 输出 极高

测试时,控制周期本身就是“时间标尺”。如果控制周期为 1 ms,那么单次总线延迟 200 μs 已占周期的 20%,足以影响轨迹精度。因此,延迟指标必须与控制周期一起看,不能孤立地谈“多少毫秒”。

四、通信总线:延迟最集中的物理通道

机器人控制器与伺服之间常用 EtherCAT、CANopen、Powerlink、SERCOS 等总线。以 EtherCAT 为例,其延迟主要来自:主站协议栈处理、帧在从站间的转发、从站本地处理、分布式时钟同步误差。CANopen 则受限于 1 Mbps 带宽与仲裁机制,延迟更大且更不确定。

# EtherCAT 主站周期与延迟观测示例
ethercat master
ethercat slaves
ethercat pdos
# 查看从站通信状态与工作计数器
ethercat master | grep -E "Cycle|Latency|WC"

总线延迟测试通常关注三个指标:周期抖动(cycle jitter)、帧往返时间(round-trip time)与工作计数器增量(working counter)。工作计数器不增长,说明帧未正确到达或返回,属于通信故障而非单纯延迟。

五、延迟来源全景与常见误区

把上述内容汇总,控制器延迟来源可分为五类:调度延迟、计算延迟、排队延迟、传输延迟与执行延迟。测试时最常见的误区有三个:

  1. 只测平均值:平均延迟 100 μs 看似优秀,但最大延迟 2 ms 已足以导致报警。必须关注 P99、最大值与抖动分布。
  2. 忽略时间同步:多轴系统中,各从站时钟不同步会表现为“延迟”,实际是同步误差。应先校准分布式时钟,再测延迟。
  3. 把总线延迟等同于系统延迟:总线只是链路一环,规划层排队与实时任务抖动往往才是大头。
复盘要点:任何一次延迟异常,都应先确认控制周期是否稳定、总线工作计数器是否正常、实时任务是否被抢占,再深入协议栈或应用代码。顺序错了,容易在错误层面反复优化。