推理流水线概述

相关源文件

生成此 wiki 页面时使用了以下文件作为上下文:

推理流水线是 IB-Robot 的 AI 执行子系统,负责加载 LeRobot 策略模型,并将实时传感器观测转换为机器人动作。它采用契约驱动架构,通过复用与数据集转换流水线相同的数据处理逻辑,保证训练与部署对齐。

关于训练数据准备,请参见 Dataset Conversion (bag_to_lerobot)。关于动作执行和时间平滑,请参见 Action Dispatch

来源src/inference_service/inference_service/lerobot_policy_node.py:1-33src/inference_service/README.md:1-6


系统目的与范围

推理服务包(inference_service)连接已训练的 LeRobot 策略与实时机器人控制。其核心职责包括:

  1. 模型加载:加载 ACT、Diffusion Policy、VLA 和其他 LeRobot 兼容 checkpoint 文件 src/inference_service/inference_service/core/pure_inference_engine.py:169-176

  2. 观测处理:使用 TensorPreprocessor 将 ROS 2 传感器流(相机、关节状态)转换为模型可用的 tensor src/inference_service/inference_service/core/preprocessor.py:73-86

  3. GPU 推理:通过 PureInferenceEngine 执行策略 forward pass src/inference_service/inference_service/core/pure_inference_engine.py:1-14

  4. 动作生成:通过 TensorPostprocessor 将输出 tensor 转换为可执行命令 src/inference_service/inference_service/core/postprocessor.py:70-86

  5. 部署灵活性:同时支持单机(zero-copy)和分布式(edge-cloud)执行 src/inference_service/inference_service/lerobot_policy_node.py:5-26

该流水线处理动作执行、时间平滑或电机控制,这些由 Action Dispatch 系统负责。

来源src/inference_service/inference_service/lerobot_policy_node.py:1-33src/inference_service/inference_service/core/pure_inference_engine.py:1-14


三组件架构

推理流水线遵循 “Composition over Inheritance” 设计,将 AI 执行工作流拆分为三个独立且不依赖 ROS 的核心组件。深入技术细节请参见 Inference Architecture

组件图

        graph TB
    subgraph "Core Components (inference_service.core)"
        Preprocessor["TensorPreprocessor<br/>(CPU)"]
        Engine["PureInferenceEngine<br/>(GPU)"]
        Postprocessor["TensorPostprocessor<br/>(CPU)"]
    end
    
    subgraph "ROS Integration Layer"
        PolicyNode["LeRobotPolicyNode"]
        Coordinator["InferenceCoordinator"]
    end
    
    subgraph "External Systems"
        Contract["robot_config.yaml<br/>(Contract)"]
        Dispatch["ActionDispatcherNode"]
        Sensors["ROS Sensors<br/>(cameras, joint_states)"]
    end
    
    Contract --> PolicyNode
    Sensors --> PolicyNode
    PolicyNode --> Coordinator
    Coordinator --> Preprocessor
    Preprocessor --> Engine
    Engine --> Postprocessor
    Postprocessor --> PolicyNode
    PolicyNode --> Dispatch
    

来源src/inference_service/README.md:7-14src/inference_service/inference_service/lerobot_policy_node.py:57-67src/inference_service/inference_service/core/pure_inference_engine.py:3-14

TensorPreprocessor

处理观测 tensor 的转换与归一化,例如 numpy -> torchHWC -> CHW。它使用模型数据集统计信息准备输入 src/inference_service/inference_service/core/preprocessor.py:73-94

PureInferenceEngine

无状态执行引擎,封装 ACT、Pi0 等策略模型。它支持 CUDA、Ascend NPU 和 Rockchip RKNN 等多种后端 src/inference_service/inference_service/core/pure_inference_engine.py:29-49

TensorPostprocessor

将输出动作 tensor 反归一化为物理控制命令,并可按物理安全限制进行 clamp src/inference_service/inference_service/core/postprocessor.py:70-86

来源src/inference_service/inference_service/core/preprocessor.py:1-13src/inference_service/inference_service/core/pure_inference_engine.py:1-14src/inference_service/inference_service/core/postprocessor.py:1-14


执行模式

推理流水线支持两种部署架构,可通过 robot_config.yaml 中的 execution_mode 参数选择 src/robot_config/config/robots/so101_single_arm.yaml:100-101

Monolithic Mode (Single-Machine)

在 monolithic 模式中,所有处理(Pre -> Infer -> Post)都在机器人上的单个进程中完成。该模式面向搭载高性能板载 GPU 的机器人,用于获得 zero-copy 延迟 src/inference_service/README.md:20-26。详情请参见 Monolithic Execution Mode

Distributed Mode (Edge-Cloud)

LeRobotPolicyNode 在机器人(device)上作为代理运行,执行基于 CPU 的预处理,然后把轻量 tensor batch 发送到局域网中的 GPU 服务器上的 pure_inference_node src/inference_service/README.md:28-35。详情请参见 Distributed Execution Mode

        graph LR
    subgraph "Device (Robot)"
        EdgeNode["LeRobotPolicyNode (Proxy)"]
        EdgePre["Preprocessor (CPU)"]
        EdgePost["Postprocessor (CPU)"]
    end

    subgraph "Cloud/Edge (GPU Server)"
        CloudNode["PureInferenceNode"]
        CloudEngine["PureInferenceEngine (GPU)"]
    end

    EdgeNode --> EdgePre
    EdgePre -->|"/preprocessed/batch"| CloudNode
    CloudNode --> CloudEngine
    CloudEngine -->|"/inference/action"| EdgeNode
    EdgeNode --> EdgePost
    

来源src/inference_service/inference_service/lerobot_policy_node.py:5-26src/inference_service/README.md:37-54


策略节点

流水线通过两个主要 ROS 节点实现。实现细节请参见 Policy Nodes

  1. LeRobotPolicyNode:主入口。它管理对传感器数据的 ROS 订阅,提供 DispatchInfer action server,并协调推理工作流 src/inference_service/inference_service/lerobot_policy_node.py:148-169

  2. PureInferenceNode:分布式模式中的轻量节点。它订阅预处理 tensor 并发布原始动作,用于 GPU offloading src/inference_service/inference_service/pure_inference_node.py:38-46

来源src/inference_service/inference_service/lerobot_policy_node.py:1-34src/inference_service/inference_service/pure_inference_node.py:1-15


模型导出与验证 (model_utils)

流水线支持标准 PyTorch 之外的专用硬件后端。详情请参见 Model Export and Validation (model_utils)

来源src/inference_service/README.md:156-188src/inference_service/inference_service/core/pure_inference_engine.py:29-49


注意力可视化 (attention_viz)

流水线集成 attention_viz 包,用于观察模型决策过程。详情请参见 Attention Visualization (attention_viz)

来源src/inference_service/inference_service/lerobot_policy_node.py:102-113src/robot_config/robot_config/launch_builders/execution.py:64-70


Launch 集成

推理流水线由 robot_config 启动系统根据当前 control_mode 动态启动。

关键 launch builder 函数generate_inference_node(),位于 src/robot_config/robot_config/launch_builders/execution.py:123-142。它解析模型路径,配置执行模式(monolithic vs distributed),并设置可选的注意力可视化 sidecar src/robot_config/robot_config/launch_builders/execution.py:72-120

来源src/robot_config/robot_config/launch_builders/execution.py:123-166src/robot_config/config/robots/so101_single_arm.yaml:88-103