2. 实时系统基础
在多轴关节控制中,控制器必须在确定的时刻完成采样、轨迹插补、逆运动学计算与PWM输出。如果某次计算延迟了几毫秒,机械臂可能已经偏离期望轨迹,轻则抖动、重则撞机。因此,理解“实时”不是“快”,而是“可预测地在截止期内完成”,是进入实时Linux控制工程的第一道门槛。
一、实时性的定义:正确性 = 逻辑正确 + 时间正确
通用计算追求平均吞吐量,而实时系统追求最坏情况下的可预测性。实时性可形式化描述为:对于任务 τ,其第 k 次作业的释放时间为 rk,执行时间为 Ck,截止期为 dk,完成时间为 fk。若对所有 k 都满足 fk ≤ rk + dk,则系统满足实时约束。
关键指标包括:响应时间(从事件到输出)、抖动(响应时间的波动范围)、最坏执行时间 WCET。对六轴关节伺服,典型控制周期为 1 ms,抖动通常要求小于周期的 5%~10%,即 50~100 μs。
二、硬实时与软实时:错过截止期的代价不同
硬实时(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)的场合。
五、案例与常见误区
某六轴机械臂项目最初在标准 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 # 按需隔离