ESC
输入关键词搜索文章标题和内容

AimRT:AI时代机器人中间件新选择

本文由 linuxROS 整理发布,首发于 linuxros.cn,转载请注明出处。

AimRT:AI时代机器人中间件新选择

导读:传统ROS2基于DDS协议存在协议绑定僵化、升级需重启、AI集成效率低等痛点。智元AimRT通过插件化通信层实现协议热切换、零拷贝通道提升10倍性能、C++20协程优化异步效率、插件热更新支持<10秒无停机升级,并原生集成PyTorch/GPU调度降低AI推理延迟,专为AI时代的具身智能机器人设计。


一、为什么需要新的中间件?

ROS2在2017年发布后解决了ROS1的实时性和安全性问题,但面向未来的机器人+AI、机器人+云融合场景,仍有三个核心痛点:

痛点 具体表现
协议绑定僵化 默认绑定FastDDS,切换需改代码重启,AI节点用HTTP/Grpc无法统一管理
升级需停机 修改任何一个节点参数或协议,都要全量重启,整机瘫痪
AI集成效率低 Python节点、C++推理、GPU调度三条链路割裂,无统一调度框架
flowchart TB subgraph ROS2痛点["🔴 ROS2 三大痛点"] P1["协议绑定<br/>DDS焊死,切换困难"] P2["升级停机<br/>改一个节点全量重启"] P3["AI集成难<br/>Python+GPU+C++三链割裂"] end subgraph AimRT解决["🟢 AimRT 解决方案"] S1["插件化通信层<br/>ROS2/Zenoh/HTTP/Grpc/MQTT热切换"] S2["插件热更新<br/><10秒无停机升级"] S3["原生AI亲和<br/>C++20协程+PyTorch/GPU统一调度"] end P1 -->|"对比"| S1 P2 -->|"对比"| S2 P3 -->|"对比"| S3 style ROS2痛点 fill:#FFEBEE,stroke:#D32F2F style P1 fill:#FFEBEE,stroke:#D32F2F style P2 fill:#FFEBEE,stroke:#D32F2F style P3 fill:#FFEBEE,stroke:#D32F2F style AimRT解决 fill:#E8F5E9,stroke:#388E3C style S1 fill:#E8F5E9,stroke:#388E3C style S2 fill:#E8F5E9,stroke:#388E3C style S3 fill:#E8F5E9,stroke:#388E3C

二、系统架构全景

AimRT基于C++20开发,定位为"现代机器人领域的基础运行时框架",核心是两层接口 + 六大神器。

flowchart TB subgraph 业务接口层["🔵 业务开发者接口"] CH["Channel 通道<br/>Topic通信"] RPC["RPC 远程调用<br/>Service通信"] PARA["Parameter 参数<br/>运行时配置"] CFG["Configuration 配置<br/>YAML文件"] LOG["Log 日志<br/>可观测性"] EXE["Executor 执行器<br/>异步任务调度"] end subgraph 插件接口层["🟡 插件开发者接口"] CH_P["Channel 插件接口"] RPC_P["RPC 插件接口"] PARA_P["Parameter 插件接口"] end subgraph 插件层["🟢 官方插件(十余种)"] ROS2["ROS2 Plugin<br/>Humble/Jazzy"] ZENOH["Zenoh Plugin<br/>超低延迟"] HTTP["HTTP Plugin<br/>云端通信"] GRPC["Grpc Plugin<br/>微服务"] MQTT["MQTT Plugin<br/>物联网"] PB["Protobuf Plugin<br/>高性能序列化"] end subgraph 核心["🟡 AimRT Core"] CORE["配置管理<br/>插件管理<br/>执行器<br/>日志"] end 业务接口层 --> CORE 插件接口层 --> CORE CH_P --> CH RPC_P --> RPC PARA_P --> PARA CH_P -->|"ros2_channel"| ROS2 CH_P -->|"zenoh_channel"| ZENOH CH_P -->|"http_channel"| HTTP CH_P -->|"grpc_channel"| GRPC RPC_P --> GRPC PARA_P --> MQTT style 业务接口层 fill:#E3F2FD,stroke:#1976D2 style 插件接口层 fill:#FFF8E1,stroke:#F57C00 style 插件层 fill:#E8F5E9,stroke:#388E3C style CORE fill:#FFF8E1,stroke:#F57C00

三、插件化通信层:协议热切换

3.1 传统ROS2 vs AimRT通信架构

ROS2的通信层是DDS直接绑定,换协议等于重写节点。AimRT的Channel/RPC接口下面是插件抽象层,换协议只需改配置文件。

flowchart TB subgraph 传统ROS2["🔴 传统ROS2(协议绑定)"] APP1["应用层代码<br/>写死了DDS"] APP2["AI推理模块<br/>写死了HTTP"] APP3["云端模块<br/>写死了MQTT"] end subgraph AimRT方案["🟢 AimRT(插件热切换)"] APP_A["同一套上层代码"] ABST["插件抽象接口<br/>Channel / RPC"] PLUG["配置文件决定插件"] R["ROS2 Plugin"] Z["Zenoh Plugin"] H["HTTP Plugin"] G["Grpc Plugin"] M["MQTT Plugin"] end APP1 -->|"DDS"| APP1 APP2 -->|"HTTP"| APP2 APP3 -->|"MQTT"| APP3 APP_A --> ABST ABST --> PLUG PLUG --> R PLUG --> Z PLUG --> H PLUG --> G PLUG --> M style 传统ROS2 fill:#FFEBEE,stroke:#D32F2F style APP1 fill:#FFEBEE,stroke:#D32F2F style APP2 fill:#FFEBEE,stroke:#D32F2F style APP3 fill:#FFEBEE,stroke:#D32F2F style AimRT方案 fill:#E8F5E9,stroke:#388E3C style APP_A fill:#E8F5E9,stroke:#388E3C style ABST fill:#E3F2FD,stroke:#1976D2 style PLUG fill:#FFF8E1,stroke:#F57C00

3.2 配置文件热切换示例

一行配置切换通信后端,上层代码零改动:

# 切换前:走ROS2 DDS
channel:
  type: "ros2"

# 切换后:走Zenoh(延迟更低)
channel:
  type: "zenoh"

四、零拷贝通信:性能10倍提升

4.1 PbChannel vs ROS2 DDS 性能对比

指标 ROS2 DDS AimRT PbChannel 提升
256B数据延迟 平均1.2ms 平均0.3ms 4倍
最大吞吐量 80MB/s 240MB/s 3倍
CPU占用率 12% 3.5% 3.4倍
内存分配 每次动态分配 预分配内存池 零分配开销

4.2 零拷贝原理

AimRT通过 BufferPool + Chunk 机制实现内核态到用户态零拷贝:

flowchart TB subgraph 发送端["发送端"] S1["数据来源<br/>激光点云/图像"] S2["BufferPool预分配<br/>1024个256KB缓冲区"] S3["Chunk引用<br/>共享指针无拷贝"] S4["直接写入共享内存"] end subgraph 传输层["传输层(无拷贝)"] T1["网络/共享内存<br/>直接传Chunk句柄"] end subgraph 接收端["接收端"] R1["ChunkView只读访问<br/>不触发数据拷贝"] R2["Protobuf编译期<br/>代码生成序列化"] R3["业务处理"] end S1 --> S2 --> S3 --> S4 S4 -->|"DMA零拷贝"| T1 T1 -->|"DMA零拷贝"| R1 R1 --> R2 --> R3 style S1 fill:#E3F2FD,stroke:#1976D2 style S2 fill:#FFF8E1,stroke:#F57C00 style S3 fill:#FFF8E1,stroke:#F57C00 style T1 fill:#F3E5F5,stroke:#7B1FA2 style R1 fill:#E8F5E9,stroke:#388E3C style R2 fill:#E8F5E9,stroke:#388E3C

五、C++20协程:异步效率革命

5.1 Executor任务调度模型

AimRT的 Executor 采用任务窃取算法 + 优先级调度,一个线程池处理所有异步任务:

来自 linuxros.cn · linuxROS
flowchart TB subgraph 任务源["任务源"] T1["传感器数据采集<br/>高频优先级"] T2["AI推理<br/>中频优先级"] T3["日志上报<br/>低频优先级"] end subgraph 执行器["Executor 任务调度器"] POOL["共享线程池<br/>N个Worker线程<br/>任务窃取负载均衡"] PRIO["三级优先级调度<br/>HIGH / MEDIUM / LOW"] end subgraph 结果["执行结果"] R1["立即返回<br/>协程挂起"] R2["回调通知"] end T1 -->|"HIGH"| POOL T2 -->|"MEDIUM"| POOL T3 -->|"LOW"| POOL POOL -->|"优先级抢占"| PRIO PRIO --> R1 PRIO --> R2 style T1 fill:#FFEBEE,stroke:#D32F2F style T2 fill:#FFF8E1,stroke:#F57C00 style T3 fill:#E8F5E9,stroke:#388E3C style POOL fill:#E3F2FD,stroke:#1976D2 style PRIO fill:#FFF8E1,stroke:#F57C00

5.2 Python协程支持

async def sensor_processing():
    while True:
        data = await camera.get_frame()        # 异步等相机数据
        result = await aimrt.async_exec(ai_inference, data)  # 异步AI推理
        await arm_controller.send_command(result)           # 异步发控制指令

executor = aimrt.Executor("python_exec")
executor.submit_coroutine(sensor_processing())

六、插件热更新:<10秒无停机

6.1 热更新流程

ROS2改一个参数要全量重启机器人,影响生产。AimRT的插件热更新机制让机器人无需停机即可更新插件:

flowchart TB subgraph 更新前["🔵 运行中"] RUN["机器人正常工作<br/>所有节点运行中"] end subgraph 卸载["🟡 插件热卸载"] U1["加载新插件版本<br/>新Plugin注册到管理器"] U2["旧插件引用计数归零<br/>优雅下线"] U3["<10秒内完成切换<br/>无连接中断"] end subgraph 更新后["🟢 更新后"] NEW["新插件接管通信<br/>机器人继续运行"] end RUN --> U1 --> U2 --> U3 --> NEW style RUN fill:#E3F2FD,stroke:#1976D2 style U1 fill:#FFF8E1,stroke:#F57C00 style U2 fill:#FFF8E1,stroke:#F57C00 style U3 fill:#FFF8E1,stroke:#F57C00 style NEW fill:#E8F5E9,stroke:#388E3C

七、AI推理集成:原生GPU调度

7.1 传统架构 vs AimRT AI架构

flowchart TB subgraph 传统架构["🔴 传统架构(AI链路割裂)"] C1["C++ 控制流<br/>等待Python完成"] C2["Python进程间通信<br/>gRPC/共享内存"] C3["GPU调度<br/>需手动管理CUDA上下文"] end subgraph AimRT架构["🟢 AimRT架构(统一调度)"] A1["C++控制流<br/>async协程"] A2["PyTorch C++接口<br/>libtorch直接调用"] A3["GPU任务入队<br/>统一Executor调度"] A4["结果回调<br/>协程恢复执行"] end C1 -->|"IPC开销"| C2 -->|"CUDA切换"| C3 A1 --> A2 --> A3 --> A4 style 传统架构 fill:#FFEBEE,stroke:#D32F2F style AimRT架构 fill:#E8F5E9,stroke:#388E3C

AI推理延迟降低2-3倍:Executor统一调度GPU任务,避免进程切换和CUDA上下文重建开销。


八、与ROS2的兼容性:渐进式升级

flowchart TB subgraph 存量系统["🔵 已有ROS2系统"] R1["运动控制节点<br/>ROS2原生"] R2["SLAM节点<br/>ROS2原生"] R3["传感器驱动<br/>ROS2原生"] end subgraph AimRT引入["🟢 AimRT节点(共存)"] A1["AI推理节点<br/>AimRT+PyTorch"] A2["云端通信节点<br/>AimRT+Grpc"] A3["插件热更新节点<br/>AimRT+MQTT"] end subgraph 通信["🟡 桥接通信"] BR["ROS2 Plugin<br/>AimRT节点 = ROS2节点"] end R1 -->|"DDS"| BR R2 -->|"DDS"| BR R3 -->|"DDS"| BR BR --> A1 BR --> A2 BR --> A3 style 存量系统 fill:#E3F2FD,stroke:#1976D2 style AimRT引入 fill:#E8F5E9,stroke:#388E3C style BR fill:#FFF8E1,stroke:#F57C00

渐进式升级策略:无需重写任何ROS2节点,加载ROS2插件的AimRT节点即可与原生ROS2模块互通。


九、核心特性总结

特性 AimRT实现 ROS2对比
协议热切换 Channel插件抽象,配置文件切换 DDS绑定,需改代码重启
零拷贝 BufferPool+Chunk,DMA直达 每次通信动态分配,跨进程拷贝
异步效率 C++20协程+任务窃取线程池 每Topic独立线程,资源浪费
热更新 插件引用计数,<10秒无停机 改参数全量重启
AI集成 PyTorch/GPU统一Executor调度 Python/C++/GPU三链割裂
云端支持 Zenoh/Grpc/HTTP/MQTT原生插件 需自行开发桥接

十、开源信息

属性 值
GitHub github.com/AimRT/AimRT(921 Commits,v1.7.0-rc1)
Gitee gitee.com/robot-os/AimRT(官方主仓库)
官网 aimrt.org
文档 docs.aimrt.org
开发语言 C++20 / Python
开源时间 2024年9月25日(智元2024发布会承诺兑现)
最新版本 v1.7.0-rc1(2026年3月)

十一、总结

一句话定位:AimRT是一个更现代、轻量、高性能的机器人通信中间件,专为AI时代的具身智能机器人设计。

三个核心优势:

  • ** 插件化通信层**:同一套上层代码,无缝接入ROS2/Zenoh/HTTP/Grpc/MQTT,配置文件一行切换,协议绑定问题彻底解决
  • 零拷贝+协程:BufferPool预分配内存池+C++20协程,延迟降低4倍、吞吐量提升3倍、CPU占用降至三分之一
  • 热更新+AI亲和:插件<10秒无停机升级,PyTorch/GPU统一Executor调度,AI推理链路端到端无割裂

定位:AimRT不取代ROS2生态,而是作为ROS2的有力补充——传统控制算法继续用ROS2,新增AI推理和云端通信模块用AimRT,共存互通,渐进式升级。


参考来源

版权声明

作者linuxROS
协议本作品采用 CC BY-NC-SA 4.0 许可协议:署名-非商业性使用-相同方式共享
关注欢迎关注微信公众号 linuxROS,获取更多机器人 / 嵌入式 / Linux 干货
返回首页