机器人控制器开发(整体架构2 Lerobot介绍)
上一篇博文简单解释了AMR控制器的开发。
本篇文章基于控制器话题,重点围绕人形机器人控制器的设计展开讨论。
我将全面分析Lerobot的代码架构。
LeRobot 代码架构深度分析
🏗️ 整体架构设计理念
LeRobot 采用模块化、插件化的架构设计,主要特点:
- 硬件抽象层:将不同硬件(机器人、相机、电机)抽象为统一接口
- 策略插件系统:支持多种机器学习策略算法
- 数据管道:完整的数据收集、处理、存储流程
- 配置驱动:通过YAML配置文件管理所有组件
📁 核心模块详解
1. configs/ - 配置管理系统
# 配置层次结构
├── default.py # 基础配置类
├── train.py # 训练配置 (TrainPipelineConfig)
├── eval.py # 评估配置 (EvalPipelineConfig)
├── policies.py # 策略配置 (PreTrainedConfig)
└── parser.py # 命令行解析器
核心功能:
- 提供统一的配置管理接口
- 支持命令行参数覆盖
- 配置验证和默认值处理
- 与HuggingFace Hub集成
2. policies/ - 策略模型库
# 支持的策略算法
├── act/ # Action Chunking Transformer
├── diffusion/ # Diffusion Policy
├── tdmpc/ # Temporal Difference MPC
├── vqbet/ # Vector Quantized Behavior Transformer
├── sac/ # Soft Actor-Critic
├── pi0/pi0fast/ # Policy Iteration Zero
├── smolvla/ # Small Vision-Language-Action
└── factory.py # 策略工厂模式
设计模式:
- 工厂模式:
factory.py
统一创建策略实例 - 模板方法:
pretrained.py
定义预训练策略基类 - 策略模式:每个算法独立实现
3. datasets/ - 数据集管理系统
├── lerobot_dataset.py # 核心数据集类
├── utils.py # 数据处理工具
├── video_utils.py # 视频编解码
├── transforms.py # 数据变换
├── online_buffer.py # 在线数据缓冲
├── v2/ v21/ # 版本兼容性
└── factory.py # 数据集工厂
核心特性:
- 支持多模态数据(图像、状态、动作)
- 高效的视频压缩和流式加载
- 与HuggingFace Datasets兼容
- 支持增量数据收集
4. 硬件抽象层
robots/ - 机器人抽象
├── robot.py # Robot基类
├── koch_follower/ # Koch机器人
├── so100_follower/ # SO-100机器人
├── bi_so100_follower/ # 双臂SO-100
├── hope_jr/ # HOPE-JR机器人
├── lekiwi/ # LeKiwi机器人
├── stretch3/ # Stretch3机器人
└── viperx/ # ViperX机器人
cameras/ - 相机抽象
├── camera.py # Camera基类
├── opencv/ # OpenCV相机
└── realsense/ # Intel RealSense
motors/ - 电机抽象
├── motors_bus.py # 电机总线管理
├── dynamixel/ # Dynamixel电机
├── feetech/ # Feetech电机
└── calibration_gui.py # 电机标定GUI
teleoperators/ - 遥操作抽象
├── teleoperator.py # Teleoperator基类
├── keyboard/ # 键盘遥操作
├── gamepad/ # 手柄遥操作
├── homunculus/ # Homunculus设备
└── koch_leader/ # Koch主控端
5. processor/ - 数据处理管道
├── pipeline.py # 处理管道核心
├── observation_processor.py # 观察数据处理
├── normalize_processor.py # 数据标准化
├── device_processor.py # 设备转换
└── rename_processor.py # 数据重命名
管道设计:
- 责任链模式:数据依次通过多个处理器
- 可组合性:处理器可以灵活组合
- 类型安全:强类型约束确保数据一致性
6. envs/ - 环境系统
支持的环境:
- Aloha:双臂操作任务
- PushT:推动任务
- XArm:机械臂操作
7. utils/ - 工具模块
├── train_utils.py # 训练工具
├── control_utils.py # 控制工具
├── robot_utils.py # 机器人工具
├── visualization_utils.py # 可视化工具
├── buffer.py # 数据缓冲
└── hub.py # HuggingFace Hub集成
🔄 数据流和控制流
训练流程:
- 配置解析 →
configs/parser.py
- 数据加载 →
datasets/lerobot_dataset.py
- 策略创建 →
policies/factory.py
- 训练循环 →
utils/train_utils.py
- 模型权重保存 →
utils/train_utils.py
数据收集流程:
- 硬件初始化 →
robots/
,cameras/
,motors/
- 遥操作设置 →
teleoperators/
- 数据记录 →
record.py
- 数据处理 →
processor/
- 数据存储 →
datasets/
推理流程:
- 模型加载 →
policies/pretrained.py
- 环境连接 →
envs/
- 观察处理 →
processor/
- 动作预测 →
policies/
- 动作执行 →
robots/
🎯 设计模式应用
- 抽象工厂模式:
factory.py
文件统一创建对象 - 策略模式:不同算法实现统一接口
- 观察者模式:数据流的监听和处理
- 模板方法模式:基类定义流程,子类实现细节
- 适配器模式:硬件接口的统一适配
🔧 核心特性
- 硬件无关性:统一的硬件抽象接口
- 算法可扩展性:插件式策略系统
- 数据标准化:统一的数据格式和处理流程
- 云端集成:与HuggingFace Hub深度集成
- 实时性能:高效的数据处理和控制循环
- 可视化支持:集成Rerun等可视化工具
📊 架构优势
- 模块解耦:各模块职责单一,易于维护
- 插件化:新硬件和算法易于集成
- 标准化:统一的接口和数据格式
- 可测试性:每个模块都可独立测试
- 社区友好:与开源生态深度集成
这种架构设计使得LeRobot能够支持多种机器人硬件平台,集成多种学习算法,并提供完整的数据收集到模型部署的工作流程。