4. 实时系统核心概念

在机器人实时运动控制系统中,“实时”并不等于“快”,而是指系统能够在确定的时间约束内完成计算并输出控制量。一个控制周期为 1 ms 的伺服环路,如果偶尔延迟到 3 ms 才输出,即使平均速度再快,也可能造成关节抖动、轨迹偏差甚至机械冲击。因此,理解硬实时与软实时、任务调度、优先级、中断延迟、抖动、确定性以及实时性能指标,是开发可靠运动控制器的前提。

一、硬实时与软实时:约束的性质不同

硬实时要求任务必须在截止时间前完成,一旦超时即视为系统失败,可能带来安全风险或不可逆后果。例如电流环控制、编码器采样、急停响应、关节位置闭环,都属于硬实时任务。它们的截止时间通常由机械与电气特性决定,超时会导致失稳。

软实时则允许偶尔超时,只要整体服务质量可接受即可。例如上位机轨迹预览、状态日志上传、人机界面刷新、非关键传感器数据记录,通常属于软实时任务。超时只会降低体验,不会立即造成危险。

判断标准不是“任务重不重要”,而是“错过截止时间是否会导致系统失败”。同一个机器人中,电流环是硬实时,日志上传是软实时,二者可以共存,但必须被区别调度。

二、任务调度与优先级:让关键任务先执行

实时系统通常采用优先级抢占式调度。每个任务被赋予优先级,高优先级任务就绪时可以打断低优先级任务。常见策略包括:固定优先级调度(如 Rate Monotonic,周期越短优先级越高)、最早截止时间优先(EDF)、时间片轮转(用于同优先级软实时任务)。

在机器人控制器中,典型任务优先级从高到低可安排为:急停与安全监控 → 电流环 → 速度环 → 位置环 → 轨迹插补 → 通信与日志。优先级反转是常见陷阱:低优先级任务持有高优先级任务所需的锁,导致高优先级任务被阻塞。解决方法是使用优先级继承或优先级天花板协议。

机器人实时控制:任务优先级与时间指标 急停/安全监控 电流环 1 kHz 速度环 500 Hz 位置环 250 Hz 轨迹插补 100 Hz 通信/日志 软实时 优先级由高到低 一个控制周期内的时间轴 t 中断 电流环计算 位置更新 PWM 输出 日志/通信 中断延迟 执行时间 周期抖动 确定性 最坏执行时间可预测 响应时间有上界 抖动 周期偏差越小越好 影响轨迹平滑度 实时性能指标 延迟、抖动、超时率 CPU 占用、最坏响应

三、中断延迟、抖动与确定性

中断延迟指从中断信号到达 CPU 到中断服务程序开始执行的时间,包括硬件响应、关中断时间、中断控制器排队等。对于电流环和编码器采样,中断延迟直接决定控制精度。若中断被长时间关闭,采样就会丢失或延迟,导致电流纹波增大。

抖动是任务实际执行时刻与理想周期时刻之间的偏差。例如控制周期设定为 1 ms,实际在 0.95 ms 到 1.12 ms 之间波动,抖动约为 170 μs。抖动会引入速度估计误差,使微分项噪声放大,最终表现为关节异响或轨迹不平滑。

确定性强调最坏情况可预测,而不是平均性能好。一个系统即使平均延迟只有 50 μs,但最坏延迟达到 5 ms,也不能称为确定性实时系统。实时开发中必须关注 WCET(最坏执行时间)和 WCRT(最坏响应时间)。

四、实时性能指标与常见误区

评估机器人实时性能时,常用指标包括:控制周期、中断延迟、任务响应时间、抖动、超时率、CPU 占用率、上下文切换次数、最坏执行时间。下表给出典型参考范围。

指标 含义 典型目标 超限影响
中断延迟 中断到 ISR 执行的时间 < 10 μs 采样延迟、电流环失真
周期抖动 实际周期与理想周期偏差 < 5% 周期 速度估计噪声、轨迹抖动
最坏响应时间 任务从就绪到完成的最长耗时 小于截止时间 硬实时任务失败
CPU 占用率 周期内计算资源使用比例 < 70% 余量不足,易超时
超时率 超过截止时间的任务比例 硬实时为 0 系统失稳或安全风险
常见误区:只测平均延迟,不测最坏延迟;把所有任务都设为高优先级,导致优先级失去意义;在硬实时任务中调用动态内存分配、文件 IO 或阻塞锁;忽略中断关闭时间对抖动的影响。

五、案例:1 kHz 电流环的实时调优

某关节驱动器设定电流环周期为 1 ms,使用定时器中断触发 ADC 采样与 FOC 计算。初始版本在中断中执行了日志打印和 CAN 发送,导致抖动达到 300 μs,电机出现明显啸叫。优化措施如下:

  1. 将日志和 CAN 发送移出中断,放入低优先级软实时任务;
  2. 缩短关中断临界区,使用无锁环形缓冲区传递采样数据;
  3. 为电流环任务配置最高优先级,并启用优先级继承;
  4. 使用硬件触发 ADC,减少软件采样抖动;
  5. 测量最坏执行时间,确保 WCET 小于周期的 60%。
// 伪代码:中断中只做关键计算
void CurrentLoop_ISR(void) {
    adc_read(&ia, &ib, &ic);      // 硬件触发采样
    clarke_park(ia, ib, ic, theta);
    foc_calculate(&ud, &uq);
    svpwm_output(ud, uq);         // 直接写 PWM 寄存器
    rtos_sem_post_from_isr(&log_sem); // 仅通知低优先级任务
}

优化后,中断延迟稳定在 6 μs 以内,周期抖动降至 20 μs 以下,电流环噪声显著降低,关节运行更平滑。这说明实时性能不是靠“提高主频”解决的,而是靠合理的任务划分、优先级设计和中断管理。

核心结论:硬实时任务必须满足截止时间,软实时任务允许偶尔超时;优先级抢占与合理的中断设计是基础;中断延迟和抖动决定控制品质;确定性关注最坏情况;实时性能指标应围绕延迟、抖动、超时率和最坏响应时间来度量。