随着机器人越来越智能,机器人控制系统正在发生一个非常明显的变化。

过去,一台机器人控制器可能主要负责:

传感器采集
    ↓
状态计算
    ↓
运动控制
    ↓
执行器输出

系统结构相对简单。

但今天的人形机器人、工业机械臂、移动机器人以及具身智能系统,往往需要在同一台计算平台上同时运行:

ROS 2
AI推理
视觉识别
语音交互
SLAM
路径规划
运动规划
状态估计
关节控制
安全监控
网络通信
数据记录

这意味着机器人计算平台正在从一个单纯的“控制器”,逐渐变成一个复杂的多任务实时计算平台。

问题也随之出现:

如果AI推理突然占满CPU,1kHz关节控制怎么办?

如果视觉任务产生大量内存访问,控制线程会不会受到影响?

如果网络、存储、GPU、PCIe设备同时产生大量中断,实时任务还能不能按时执行?

如果所有任务都运行在同一套Linux环境中,仅仅把控制线程设置成SCHED_FIFO高优先级,真的就够了吗?

答案是:不一定。

因为实时系统真正需要解决的,并不是简单的:

“谁的优先级最高?”

而是:

关键任务所需要的计算资源,能不能与其他任务形成稳定、可预测的边界?

这就是资源隔离(Resource Isolation)。

对于ROS 2机器人系统而言,资源隔离正在成为从“能运行”走向“稳定运行”的重要技术环节。


一、为什么CPU够用,机器人控制依然可能出现延迟?

先看一个非常典型的机器人场景。

假设现在有一台拥有16个CPU核心的机器人计算平台。

理论上:

CPU 0~15

计算能力已经非常充足。

系统同时运行:

1kHz关节控制
500Hz状态估计
100Hz传感器融合
30Hz视觉
AI推理
SLAM
路径规划
ROS 2通信
日志
网络

如果只从总CPU利用率看:

CPU利用率 = 60%

似乎还有40%的余量。

于是有人可能会认为:

CPU还有很多空闲,实时控制肯定没问题。

但现实并不是这么简单。

因为:

CPU平均利用率低,不代表关键任务一定能够及时获得CPU。

例如:

CPU平均利用率:60%

控制线程:
偶尔等待500μs

某一次:
突然等待4ms

对于普通应用来说,这种偶发延迟可能完全不明显。

但对于:

1kHz控制

来说:

1ms = 一个完整控制周期

如果某一次调度延迟达到4ms,那么就可能连续错过多个周期。

因此实时系统不能简单用:

CPU还有多少百分比空闲?

来判断是否安全。

更应该问:

关键任务在最坏情况下能否获得稳定的CPU资源?

这就是资源隔离和普通资源利用率之间的区别。


二、优先级为什么还不够?因为“高优先级”解决不了所有资源竞争

上一章我们讲到了:

SCHED_FIFO
SCHED_RR
SCHED_DEADLINE

它们可以帮助Linux调度器判断:

哪个线程应该优先运行?

但这并不等于:

这个线程拥有了独占资源。

假设:

控制线程
Priority 90

而:

AI推理线程
Priority 50

看起来控制线程优先级明显更高。

但是机器人系统中的资源竞争并不只有“CPU时间”这一种。

还可能包括:

CPU
内存
缓存
I/O
IRQ
网络
PCIe
GPU
锁
共享数据
设备驱动

于是可能出现这样的情况:

                机器人系统
                    │
       ┌────────────┼────────────┐
       ↓            ↓            ↓
      CPU          内存          I/O
       │            │            │
      IRQ          Cache       Driver
       │            │            │
       └────────────┼────────────┘
                    ↓
               控制线程

即使控制线程拥有很高的CPU调度优先级,也不能让其他任务凭空消失。

因此:

实时性不仅是调度问题,也是资源管理问题。


三、什么叫资源隔离?先从最容易理解的CPU隔离开始

资源隔离并不是说:

“所有资源都必须物理分开。”

它更重要的思想是:

让不同类型任务的资源边界更加明确,减少不必要的相互干扰。

最容易理解的是CPU核心隔离。

例如一个机器人有8个CPU核心:

CPU 0
CPU 1
CPU 2
CPU 3
CPU 4
CPU 5
CPU 6
CPU 7

我们可以进行任务划分:

CPU 0~3
普通计算任务

├── AI
├── 视觉
├── SLAM
├── 网络
└── 日志


CPU 4~5
机器人控制任务

├── ROS 2 Executor
├── 关节控制
└── 实时硬件接口


CPU 6~7
状态估计等实时任务

├── IMU
├── 状态融合
└── 运动状态计算

这样做的核心目的不是让CPU 4、5变得更快。

而是尽量减少:

AI
视觉
日志
网络

等普通任务进入关键控制CPU。

于是:

普通任务
       ↓
CPU 0~3


实时控制
       ↓
CPU 4~5

形成相对明确的资源边界。

这就是核心隔离最直观的价值。


四、CPU Affinity、Core Isolation、IRQ Affinity,到底是不是一回事?

这三个概念在ROS 2实时优化文章中经常同时出现,但它们解决的问题其实不同。

可以用三个问题来区分。

CPU Affinity:这个线程可以去哪里?

例如:

控制线程
Affinity = CPU 4

表示这个线程被限制在指定CPU上运行。

它解决的是:

线程允许运行在哪些CPU上?


Core Isolation:哪些普通任务不要进入这个CPU?

例如:

CPU 4

作为实时控制CPU。

那么核心隔离的目标就是减少普通任务进入这个CPU。

它解决的是:

如何让关键CPU尽可能保持干净?


IRQ Affinity:硬件中断去哪?

例如:

网卡IRQ
↓
CPU 0~3

而:

CPU 4~5

尽量用于实时控制。

它解决的是:

哪些CPU负责处理硬件中断?

所以三者可以这样记:

CPU Affinity
→ 我的线程去哪里?

Core Isolation
→ 普通任务不要去哪里?

IRQ Affinity
→ 硬件中断去哪里?

如果只做其中一个,通常不能形成完整的CPU实时隔离。


五、为什么视觉和AI任务特别容易影响实时控制?

现代机器人系统中,一个越来越明显的问题是:

AI计算和实时控制开始进入同一台计算设备。

例如人形机器人可能同时运行:

摄像头
 ↓
视觉模型
 ↓
目标识别
 ↓
环境理解
 ↓
路径规划
 ↓
运动控制

与此同时,另一条链路还在运行:

编码器
 ↓
关节状态
 ↓
控制器
 ↓
电机

两条链路最终可能汇聚到同一套CPU和内存系统。

这时候问题就出现了。

AI推理通常具有:

高计算量
大量内存访问
较大数据集
复杂缓存行为

而实时控制更希望:

稳定
短周期
低抖动
可预测

两者天然存在不同的计算特征。

例如:

AI推理:

计算量很大
可以持续运行
吞吐量重要
偶尔延迟通常可以接受


关节控制:

计算量不一定大
但周期严格
延迟必须可控
抖动需要尽可能小

这意味着:

高吞吐任务和高确定性任务,本身就是两类不同的计算任务。

如果没有合理隔离,它们就可能相互干扰。


六、内存为什么也需要考虑隔离?

很多人谈实时优化时,只关注CPU。

但机器人系统中,内存同样可能影响实时性。

例如一个大型视觉模型正在进行推理:

Camera Frame
      ↓
大规模数据
      ↓
模型计算
      ↓
频繁内存访问

与此同时:

1kHz控制线程
      ↓
读取关节状态
      ↓
控制计算

两者可能共享:

内存
Cache
Memory Bus

即使控制线程的CPU调度优先级很高,也不意味着它拥有独立的内存访问路径。

因此,实时系统关注的不仅是:

CPU调度

还需要考虑:

内存行为
Cache行为
内存分配
页面访问
数据共享

特别是在实时路径中,应尽量避免引入不可预测的内存操作。

例如:

实时控制线程
      ↓
频繁动态内存分配
      ↓
不可预测的分配时间

相比之下:

初始化阶段
      ↓
准备固定内存
      ↓
运行阶段复用

通常更加符合确定性设计思路。

这就是为什么实时系统往往强调:

把不可预测的操作尽可能从实时路径中移出去。


七、IRQ为什么是实时控制中的“隐形干扰源”?

假设现在我们已经完成:

CPU 4
专门给控制线程

看起来一切都很好。

但是CPU 4仍然可能处理某些硬件中断。

例如:

网卡
PCIe设备
USB
定时器
传感器
存储

这些设备发生事件时,都可能触发中断处理。

于是可能出现:

控制线程
    ↓
正在执行
    ↓
硬件IRQ到来
    ↓
CPU响应中断
    ↓
控制线程暂时受到影响

如果这种中断非常频繁,那么实时控制任务的执行时间就会产生抖动。

因此,一个更加完整的实时CPU设计应该类似:

实时CPU
  │
  ├── 控制线程
  ├── 实时Executor
  └── 必要实时任务

尽量减少:
  │
  ├── 普通任务
  ├── 网络IRQ
  ├── 存储IRQ
  └── 其他后台活动

这就是为什么:

核心隔离和IRQ隔离往往需要结合起来考虑。


八、资源隔离不是“浪费CPU”,而是在购买确定性

看到这里,有人可能会提出一个问题:

如果把CPU 4、5专门给实时控制,那不是浪费了吗?

从普通服务器的角度看,这种说法似乎有道理。

因为:

CPU利用率越高
→ 吞吐量越高

通常是一件好事。

但是实时控制的目标不同。

对于关键控制任务来说:

100%利用率

未必比:

60%利用率
+
稳定的调度延迟

更有价值。

因为机器人真正需要的是:

关键任务
    ↓
稳定获得CPU
    ↓
稳定执行
    ↓
稳定输出

所以资源隔离实际上是在做一件事情:

牺牲一部分资源利用率,换取关键任务更加确定的运行环境。

这也是实时系统和通用计算系统在设计目标上的重要区别。

通用计算更关注:

吞吐量
资源利用率
平均性能

实时控制更关注:

最坏情况
确定性
Deadline
抖动

因此不能单纯用“CPU有没有充分利用”判断实时系统设计是否合理。


九、ROS 2 + AI + 视觉 + 实时控制,应该如何进行任务分层?

一个比较典型的机器人软件架构可以设计成:

                机器人计算平台
                       │
        ┌──────────────┼──────────────┐
        ↓              ↓              ↓
    AI/视觉区       实时控制区       系统服务区
        │              │              │
    CPU 0~3         CPU 4~5         CPU 6~7
        │              │              │
    视觉模型       ROS 2控制        网络
    AI推理         Executor         日志
    SLAM           关节控制         管理
    感知           状态估计         UI

这并不是唯一的设计方式,但体现了一个重要思想:

不同实时等级的任务,不应该完全没有边界地竞争同一组资源。

例如:

实时控制区

1kHz关节控制
500Hz姿态控制
实时硬件接口

重点:

低延迟
低抖动
高确定性

AI/视觉区

目标检测
视觉识别
大模型推理
SLAM
环境理解

重点:

高吞吐
高计算能力
数据处理能力

系统服务区

网络
日志
数据记录
系统管理

重点:

不影响实时任务

于是系统架构从:

所有任务
     ↓
同一CPU资源
     ↓
互相竞争

变成:

不同任务
     ↓
不同资源区域
     ↓
减少干扰

这就是资源隔离的核心思想。


十、为什么机器人越来越需要“实时域”和“非实时域”?

从这个角度来看,未来机器人系统很可能越来越接近一种“实时域 + 非实时域”的架构。

可以简单画成:

                 机器人系统
                     │
          ┌──────────┴──────────┐
          ↓                     ↓
       实时域                  非实时域
          │                     │
      关节控制                AI推理
      伺服控制                视觉
      安全控制                SLAM
      硬件接口                规划
          │                     │
      强确定性                高吞吐
          │                     │
          └──────────┬──────────┘
                     ↓
                  ROS 2

当然,实际系统不会这么简单地划分。

因为实时域和非实时域之间仍然需要通信。

例如:

视觉
 ↓
识别到目标
 ↓
规划
 ↓
控制

所以关键问题又变成:

实时域和非实时域之间如何通信?

如果AI任务产生的数据直接阻塞实时控制线程,那么隔离就失去了意义。

因此还需要设计:

消息队列
共享内存
环形缓冲区
无锁数据结构
实时通信接口

等机制。

这里也再次体现了为什么ROS 2的通信机制、DDS、QoS以及Executor需要和底层实时机制一起考虑。


十一、为什么核心隔离是机器人实时系统中非常关键的一环?

到这里,我们可以重新理解“核心隔离”这件事。

它并不是简单地:

给控制线程绑定一个CPU。

真正的核心隔离思想是:

关键CPU
    ↓
减少普通任务进入
    ↓
合理安排IRQ
    ↓
安排实时线程
    ↓
控制共享资源
    ↓
降低系统干扰
    ↓
提高时间确定性

所以:

CPU Affinity

只是:

这个线程去哪?

而:

Core Isolation

更关注:

这个CPU上允许什么任务?

两者是完全不同的概念。

对于需要较高实时确定性的机器人系统,核心隔离的意义就在于:

给关键实时任务创造一个相对独立、可预测的计算环境。

这也是为什么在实际实时系统设计中,“核心隔离”往往不是一个简单的性能优化选项,而是系统架构的一部分。


十二、从ROS 2到实时Linux:真正需要隔离的不是“一个线程”,而是一整条实时链路

现在把前面几篇文章串起来看,就会发现一个非常完整的技术链。

最开始我们讨论:

ROS 2 Node

然后进入:

Topic
Service
Action
DDS
QoS

接着进入:

Executor
Callback
Thread

然后遇到了:

优先级反转

进一步进入:

CPU Affinity
Core Isolation
IRQ Affinity

然后开始研究:

SCHED_FIFO
SCHED_RR
SCHED_DEADLINE

而现在继续往前走:

资源隔离

整个技术链已经变成:

                    ROS 2机器人应用
                           │
                           ↓
                     Node / Topic
                           │
                           ↓
                       DDS / QoS
                           │
                           ↓
                        Executor
                           │
                           ↓
                     Callback / Thread
                           │
                           ↓
                    实时调度策略
                           │
                 ┌─────────┼─────────┐
                 ↓         ↓         ↓
                CPU       IRQ       Lock
                 │         │         │
                 └─────────┼─────────┘
                           ↓
                       核心隔离
                           ↓
                       资源隔离
                           ↓
                     实时操作系统
                           ↓
                         硬件

这时候我们就能更加准确地理解:

为什么机器人实时性不是一个ROS 2参数,也不是一个Linux参数。

它实际上是整个软件栈共同作用的结果。


十三、为什么这对望获rtLinux这样的实时操作系统很重要?

如果只是运行一个简单的机器人Demo:

ROS 2
+
普通Linux

通常已经能够完成很多任务。

但当系统进一步增加:

AI
视觉
SLAM
规划
多传感器
高频控制

系统复杂度也会随之增加。

这时候真正需要解决的问题变成:

如何让不同任务共存?

而不是:

如何让某一个线程跑得更快?

这也是实时操作系统在机器人系统中的价值所在。

它需要从更底层的角度解决:

调度
+
核心
+
中断
+
同步
+
资源
+
隔离

等问题。

对于工业机器人、机械臂、人形机器人等对实时确定性要求较高的场景,望获rtLinux可以作为机器人实时运行环境的一种技术选择,将实时调度、核心隔离以及资源隔离等能力放到操作系统层面考虑,而不是仅仅依赖应用层不断打补丁。

这时候,望获rtLinux和ROS 2的关系也就比较容易理解:

ROS 2
负责:
机器人软件框架
通信
节点
任务组织
应用开发


望获rtLinux
负责:
底层实时运行环境
实时调度
核心隔离
资源隔离
系统级实时能力

二者并不是替代关系,而是上下层关系。

最终目标仍然是:

让AI、视觉、规划等高吞吐任务
与
1kHz甚至更高频率的关键控制任务

能够在同一机器人平台上
尽可能稳定、可预测地协同运行。

十四、机器人实时系统最终追求的,其实不是“所有任务都实时”

这是理解资源隔离非常重要的一点。

一个真正复杂的机器人系统,不可能也没有必要让所有任务都拥有最高实时等级。

真正合理的方式应该是:

任务分级
    ↓
实时等级划分
    ↓
资源划分
    ↓
调度策略匹配
    ↓
不同任务隔离
    ↓
关键任务获得确定性

例如:

任务典型特征重点
关节控制高频、严格周期确定性
伺服控制高频、低抖动Deadline
状态估计周期性稳定调度
视觉识别高计算量吞吐
AI推理高算力计算资源
路径规划相对低频计算效率
日志非关键不干扰实时域
UI非实时交互体验

这样一来,机器人系统就不再是:

所有任务
     ↓
抢CPU

而变成:

不同任务
     ↓
不同实时等级
     ↓
不同调度策略
     ↓
不同资源区域

这才是面向复杂机器人系统的实时架构。


十五、从“CPU隔离”到“系统隔离”:机器人实时计算正在进入下一阶段

如果把机器人软件的发展过程总结一下,会发现一个很明显的趋势。

早期:

单任务
 ↓
能运行即可

后来:

多线程
 ↓
提高性能

再后来:

ROS 2
 ↓
模块化
 ↓
分布式通信

而现在:

ROS 2
+
AI
+
视觉
+
规划
+
实时控制

真正的问题开始变成:

如何让不同计算范式在同一个机器人平台上共存?

AI希望:

更多算力

视觉希望:

更高吞吐

规划希望:

更多计算资源

而控制系统希望:

更低延迟
更低抖动
更强确定性

这几种需求并不是完全一致的。

因此,未来机器人操作系统的一个重要能力,很可能就是:

如何把不同实时等级、不同资源需求的任务组织在同一个计算平台中,同时保证关键任务的确定性。

这也意味着,机器人操作系统的竞争点会逐渐从“能不能运行ROS 2”,进一步走向:

ROS 2兼容
+
实时调度
+
核心隔离
+
资源隔离
+
国产芯片适配
+
工业生态兼容

而这也是国产机器人操作系统值得进一步讨论的技术方向。


十六、总结:实时系统不是让CPU更忙,而是让关键任务更可控

通过这一篇,我们可以把一个非常容易混淆的问题彻底拆开:

CPU利用率高,不等于实时性好。

CPU数量多,不等于实时性好。

线程优先级高,也不等于实时性好。

使用SCHED_FIFO,也不等于整个系统已经实时。

真正的实时系统需要解决的是:

关键任务
    ↓
什么时候运行?
    ↓
能运行多久?
    ↓
会不会被抢占?
    ↓
会不会受到IRQ影响?
    ↓
会不会等待锁?
    ↓
会不会受到AI/视觉任务影响?
    ↓
能不能获得稳定的CPU资源?
    ↓
最坏情况下能否满足Deadline?

所以:

实时性的本质不是让所有任务都跑得更快,而是让关键任务在规定的时间约束下,拥有更加确定、可预测的运行环境。

而资源隔离正是实现这一目标的重要手段之一。

从ROS 2的角度看:

ROS 2
 ↓
Executor
 ↓
Thread
 ↓
Scheduler
 ↓
CPU
 ↓
Core Isolation
 ↓
IRQ Isolation
 ↓
Resource Isolation
 ↓
Hardware

这条链路越完整,机器人系统的实时能力就越有可能从“理论上可以运行”走向“工程上稳定运行”。

尤其是在未来的人形机器人、工业机器人、机械臂等系统中,当AI推理、视觉感知、运动规划和高频控制越来越多地集中在同一计算平台上时,实时任务与非实时任务之间的资源边界会变得越来越重要。

下一篇可以继续沿着这个方向深入一个非常实际的问题:

《ROS 2实时控制为什么需要内存隔离?动态内存分配为什么可能成为机器人实时系统的隐患?》

这一篇将从 malloc/new、内存分配、页面缺失、内存锁定、预分配、实时线程等角度继续往Linux底层走,并进一步解释为什么真正的实时ROS 2系统不仅要“CPU隔离”,还要关注内存确定性。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐