2. 实时系统基础

在多轴关节控制中,控制器必须在确定的时刻完成采样、轨迹插补、逆运动学计算与PWM输出。如果某次计算延迟了几毫秒,机械臂可能已经偏离期望轨迹,轻则抖动、重则撞机。因此,理解“实时”不是“快”,而是“可预测地在截止期内完成”,是进入实时Linux控制工程的第一道门槛。

一、实时性的定义:正确性 = 逻辑正确 + 时间正确

通用计算追求平均吞吐量,而实时系统追求最坏情况下的可预测性。实时性可形式化描述为:对于任务 τ,其第 k 次作业的释放时间为 rk,执行时间为 Ck,截止期为 dk,完成时间为 fk。若对所有 k 都满足 fk ≤ rk + dk,则系统满足实时约束。

关键指标包括:响应时间(从事件到输出)、抖动(响应时间的波动范围)、最坏执行时间 WCET。对六轴关节伺服,典型控制周期为 1 ms,抖动通常要求小于周期的 5%~10%,即 50~100 μs。

实时 ≠ 高性能。一个 100 MHz 的 MCU 若能保证 1 ms 周期内抖动 < 10 μs,其“实时性”优于一台负载波动剧烈、抖动达 5 ms 的 3 GHz 服务器。

二、硬实时与软实时:错过截止期的代价不同

硬实时(Hard Real-Time)要求任何一次截止期错过都视为系统失败,可能造成安全事故或不可逆损失。例如:伺服电流环中断、安全急停回路、关节限位保护。软实时(Soft Real-Time)允许偶发超时,只导致服务质量下降,例如:上位机轨迹预览、日志上传、人机界面刷新。

两者之间还有固实时(Firm Real-Time):结果在截止期后到达即失去价值,但不会造成灾难,如视觉引导中的单帧图像处理。

类型截止期约束超时后果多轴控制示例典型抖动要求
硬实时必须满足系统失败/安全事故电流环、位置环、急停< 10 μs
固实时结果过期即无效任务作废,无灾难视觉伺服单帧处理< 1 ms
软实时尽量满足体验/吞吐下降HMI、日志、轨迹预览< 50 ms

三、实时调度理论:从 RMS 到 EDF

实时调度理论回答“一组任务能否在截止期内完成”。最经典的是速率单调调度(RMS):周期越短,优先级越高,适用于固定优先级抢占式调度。其可调度性充分条件为:

Σ (C_i / T_i) ≤ n · (2^(1/n) − 1)

其中 C_i 为任务执行时间,T_i 为周期,n 为任务数。
n=3 时利用率上限约 0.780;n→∞ 时趋近 ln2 ≈ 0.693。

最早截止期优先(EDF)是动态优先级算法,理论上单处理器利用率可达 100%。但在过载时,EDF 可能出现“多米诺效应”,导致多个任务连续错过截止期;RMS 在过载时低优先级任务先失效,行为更可预测。因此工业伺服中常采用 RMS 或固定优先级,配合优先级继承避免优先级反转。

多轴控制中的典型任务集:

  • 电流环:周期 100 μs,硬实时,最高优先级;
  • 位置/速度环:周期 1 ms,硬实时,高优先级;
  • 轨迹插补:周期 2 ms,硬实时,中优先级;
  • EtherCAT 主站通信:周期 1 ms,硬实时,与位置环同步;
  • 状态监控与日志:周期 20 ms,软实时,低优先级。

四、Linux 实时化方案概述

标准 Linux 内核为追求吞吐量,存在不可抢占区、中断关闭、优先级反转等问题,难以直接满足硬实时。主流实时化路线如下:

  • PREEMPT_RT 补丁:将自旋锁转为可睡眠的互斥锁,中断线程化,使内核几乎完全可抢占。当前已逐步合入主线,是工业控制的主流选择,典型抖动可做到几十微秒。
  • 双内核方案(Xenomai / RTAI):在 Linux 旁运行一个实时微内核,实时任务由微内核调度,Linux 作为最低优先级任务运行。抖动可低至几微秒,但编程模型与生态相对独立。
  • AMP 异构方案:Linux 运行于应用核,实时控制运行于独立 MCU 或 DSP,通过共享内存/SPI 通信。适合安全等级高、周期极短(< 50 μs)的场合。
选型建议:一般多轴关节控制优先采用 PREEMPT_RT + EtherCAT;若要求电流环 < 50 μs 或需功能安全认证,则考虑 AMP 异构架构。

五、案例与常见误区

某六轴机械臂项目最初在标准 Linux 上运行 1 ms 控制周期,实测抖动达 3~8 ms,表现为关节周期性抖动。排查发现:网卡中断未线程化、日志写入触发文件系统阻塞、CPU 频率调节导致执行时间波动。改用 PREEMPT_RT 后,配合 CPU 隔离与中断亲和性设置,抖动降至约 40 μs,轨迹跟踪误差下降一个数量级。

# 常用实时性检查与配置
uname -a                          # 确认是否含 PREEMPT_RT
cyclictest -m -p 80 -n -i 1000 -l 100000
taskset -c 2,3 ./motion_control   # 隔离 CPU 运行控制任务
echo 1 > /sys/devices/system/cpu/cpu2/online  # 按需隔离
常见误区:① 认为“CPU 快就能实时”,忽略抖动与最坏路径;② 在实时线程中调用 malloc、printf、文件 IO 等非确定操作;③ 只测平均延迟,不测最坏延迟;④ 把软实时任务与硬实时任务混在同一优先级,造成优先级反转。
实时系统基础与 Linux 实时化路线 实时性定义 · 硬/软实时 · 调度理论 · 内核方案 实时性定义 正确性 = 逻辑正确 + 时间正确 f_k ≤ r_k + d_k (截止期约束) 响应时间 · 抖动 · WCET 1 ms 周期 → 抖动 < 50~100 μs 实时 ≠ 高性能,而是可预测 硬实时 vs 软实时 硬实时 必须满足截止期 超时 = 系统失败 电流环 / 急停 抖动 < 10 μs 软实时 尽量满足截止期 超时 = 体验下降 HMI / 日志 抖动 < 50 ms 实时调度理论 RMS:周期短 → 优先级高 Σ(C_i/T_i) ≤ n(2^(1/n)−1) EDF:动态优先级,利用率 100% 过载时 RMS 行为更可预测 优先级继承 → 避免优先级反转 工业伺服常用固定优先级 Linux 实时化三条路线 PREEMPT_RT • 自旋锁 → 可睡眠互斥锁 • 中断线程化,内核可抢占 • 抖动:几十 μs • 主流工业控制首选 双内核 Xenomai / RTAI • 实时微内核 + Linux 并存 • Linux 为最低优先级任务 • 抖动:几 μs • 编程模型独立,生态受限 AMP 异构 • Linux 应用核 + MCU/DSP • 共享内存 / SPI 通信 • 周期可 < 50 μs • 适合功能安全认证场景