architecture.md
ROBOTO Origin 全局架构文档
版本: 1.0.0
更新日期: 2026-04-09
项目: ROBOTO Origin 人形机器人
许可证: GPLv3
目录
- 项目概述
- 全局架构总览
- 模块间关联关系
- 模块详细设计
- 模块功能完整度分析
- 架构设计亮点与改进建议
1. 项目概述
1.1 项目简介
ROBOTO Origin 是由 RoboParty(上海萝博派对科技有限公司)开发的完全开源 DIY 人形机器人项目。项目涵盖从机械结构设计、电子电路、强化学习训练到 ROS2 部署的完整研发流程,全部采用 GPLv3 开源许可证。
1.2 主要技术参数
| 参数 |
规格 |
| 机器人类型 |
人形双足机器人 |
| 自由度 (DOF) |
23 + 6 (虚拟浮动基座) |
| 腿部自由度 |
12 (每腿6个关节) |
| 手臂自由度 |
10 (每臂5个关节) |
| 腰部自由度 |
1 |
| 预期体重 |
~20kg |
| 电机类型 |
Damiao (DM) 系列伺服执行器 |
| 主控板 |
Orange Pi 5 Plus (RK3588) / RDK X5 |
| 通信协议 |
CAN 2.0 (USB2CAN适配器) |
| IMU |
HiPNUC |
| 训练框架 |
IsaacLab 2.3.2 + IsaacSim 5.1.0 |
| 强化学习算法 |
RSL-RL 3.3.0 (PPO/AMP) |
| 仿真器 |
IsaacSim, MuJoCo |
| 操作系统 |
Ubuntu 22.04 (Linux RT kernel) |
| 中间件 |
ROS2 Humble |
1.3 版本演进
| 版本 |
代号 |
架构特点 |
| V1.0 |
Atom01 |
分布式架构:独立电源板 + USB2CAN + 机械本体 |
| V2.0 |
Roboto Origin |
集成架构:3合1核心板 (RBE_Board) + 改进机械设计 |
2. 全局架构总览
2.1 系统层次架构图
┌─────────────────────────────────────────────────────────────────────────────┐
│ 用户层 (User Layer) │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐ │
│ │ 游戏手柄控制 │ │ Python SDK │ │ ROS2 客户端 │ │ Web/移动端 (规划中) │ │
│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ └──────────┬──────────┘ │
└─────────┼────────────────┼────────────────┼───────────────────┼─────────────┘
│ │ │ │
▼ ▼ ▼ ▼
┌─────────────────────────────────────────────────────────────────────────────┐
│ 应用软件层 (Application Layer) │
│ ┌───────────────────────────────────────────────────────────────────────┐ │
│ │ atom01_deploy (ROS2 Humble) │ │
│ │ ┌─────────┐ ┌─────────────┐ ┌──────────────┐ ┌─────────────────┐ │ │
│ │ │inference │ │ motor_driver│ │ imu_driver │ │ gamepad_bridge │ │ │
│ │ │ node │ │ (CAN bus) │ │ (serial/CAN) │ │ (joy → ROS) │ │ │
│ │ └────┬─────┘ └──────┬──────┘ └──────┬──────┘ └────────┬────────┘ │ │
│ │ └───────────────┼─────────────────┼──────────────────┘ │ │
│ │ ▼ │ │ │
│ │ ┌────────────────┐ │ │ │
│ │ │ RobotInterface │◄────────────┘ │ │
│ │ │ (统一抽象层) │ │ │
│ │ └────────┬───────┘ │ │
│ └───────────────────────┼──────────────────────────────────────────────────┘ │
└──────────────────────────┼────────────────────────────────────────────────────┘
│ USB-C / CAN
┌──────────────────────────┼────────────────────────────────────────────────────┐
│ 固件层 (Firmware Layer) │
│ ┌───────────────────────┴───────────────────────────────────────────────┐ │
│ │ atom01_firmware │ │
│ │ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────────┐ │ │
│ │ │ roboto_usb2can │ │ orangepi-build │ │ x5-rdk-gen │ │ │
│ │ │ (Zephyr RTOS) │ │ (Linux镜像构建) │ │ (RDK X5镜像构建) │ │ │
│ │ │ STM32G431 + USB │ │ RK3588 镜像 │ │ Horizon RDK X5 │ │ │
│ │ │ + FDCAN │ │ Linux + RT kernel│ │ 镜像 + RT kernel │ │ │
│ │ └────────┬─────────┘ └────────┬─────────┘ └──────────┬─────────┘ │ │
│ └───────────┼─────────────────────┼─────────────────────────┼─────────────┘ │
└──────────────┼─────────────────────┼─────────────────────────┼───────────────┘
│ USB │ 网络/SD卡 │ 网络/SD卡
┌──────────────┼─────────────────────┼─────────────────────────┼───────────────┐
│ 硬件抽象层 (Hardware Abstraction Layer) │
│ ┌──────────┴─────────┐ ┌────────┴────────┐ ┌────────────┴────────────┐ │
│ │ RBE_Board v2.0 │ │ Orange Pi 5 Plus│ │ RDK X5 │ │
│ │ ┌────┐ ┌────┐ ┌───┐│ │ (RK3588) │ │ (地平线) │ │
│ │ │48V→│ │USB→│ │CAN││ │ ┌───────────┐ │ │ ┌───────────┐ │ │
│ │ │5V │ │CAN │ │hub││ │ │ Linux RT │ │ │ │ Linux RT │ │ │
│ │ │buck│ │转换│ │ ││ │ │ + ROS2 │ │ │ │ + ROS2 │ │ │
│ │ └────┘ └────┘ └───┘│ │ └───────────┘ │ │ └───────────┘ │ │
│ │ (3合1集成板) │ └────────────────┘ └────────────────────────┘ │
│ └──────────┬──────────┘ │
└─────────────┼─────────────────────────────────────────────────────────────────┘
│ CAN总线
┌─────────────┼─────────────────────────────────────────────────────────────────┐
│ 执行器层 (Actuator Layer) │
│ ┌──────────┴──────────────────────────────────────────────────────────────┐ │
│ │ DM 系列伺服电机 │ │
│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌────────┐ │ │
│ │ │ 左腿 │ │ 右腿+ │ │ 左臂 │ │ 右臂 │ │ │ │ ... │ │ │
│ │ │ 6个电机 │ │ 腰部7个 │ │ 5个电机 │ │ 5个电机 │ │ │ │ │ │ │
│ │ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘ └────────┘ └────────┘ │ │
│ │ │ │ │ │ │ │
│ │ can0 │ │ can1 │ can2 │ can3 │ │
│ └───────┼───────────┼───────────┼───────────┼──────────────────────────────┘ │
└───────────┼───────────┼───────────┼───────────┼──────────────────────────────────┘
│ │ │ │
▼ ▼ ▼ ▼
┌─────────────────────────────────────────────────────────────────────────────┐
│ 机械结构层 (Mechanical Layer) │
│ ┌─────────────────────────────────────────────────────────────────────────┐ │
│ │ Atom01_hardware │ │
│ │ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────────────────┐ │ │
│ │ │ V1.0 (Atom01) │ │ V2.0 (Roboto │ │ V2.0 PCB (RBE_Board) │ │ │
│ │ │ 分布式机械设计 │ │ Origin) │ │ 3合1集成电子板 │ │ │
│ │ │ • CAD图纸 │ │ 改进型机械设计 │ │ • 48V→5V降压 │ │ │
│ │ │ • 分离式PCB │ │ • CAD图纸 │ │ • 电源分配 │ │ │
│ │ │ • BOM清单 │ │ • 集成PCB │ │ • USB-CAN转换 │ │ │
│ │ └─────────────────┘ │ • BOM清单 │ └─────────────────────────────┘ │ │
│ │ └─────────────────┘ │ │
│ └─────────────────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────────────┘
2.2 数据流架构图
┌──────────────────────────────────────────────────────────────────────────────┐
│ 离线训练流程 (Offline Training) │
└──────────────────────────────────────────────────────────────────────────────┘
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ motion_data │ │ IsaacLab │ │ RSL-RL │
│ (.npz) │ ───► │ (Simulator) │ ◄──► │ (PPO/AMP) │
│ 运动捕捉数据 │ │ IsaacSim 5.1 │ │ 强化学习 │
└──────────────┘ └───────┬───────┘ └──────┬───────┘
│ │
▼ │
┌──────────────┐ │
│ Policy │ │
│ (.onnx) │◄───────────────┘
│ 策略模型 │ 训练迭代
└───────┬───────┘
│
▼
┌──────────────────────────────────────────────────────────────────────────────┐
│ 在线部署流程 (Online Deployment) │
└──────────────────────────────────────────────────────────────────────────────┘
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ gamepad │ │ inference │ │ CAN bus │
│ 遥控器 │ ────► │ node (ROS2) │ ────► │ (4通道) │
│ / cmd_vel │ │ ONNX Runtime │ │ │
└──────────────┘ └───────┬───────┘ └──────┬───────┘
│ │
▼ ▼
┌──────────────┐ ┌──────────────┐
│ RobotInterface│ │ DM Motors │
│ 统一接口 │ │ 执行器 │
└──────────────┘ └──────────────┘
2.3 模块依赖关系图
┌─────────────────────────────────────────────────────┐
│ atom01_description (核心依赖) │
│ ┌─────────────────────────────────────────────────┐ │
│ │ • URDF: 机器人运动学/动力学描述 │ │
│ │ • STL meshes: 视觉和碰撞网格 │ │
│ │ • MJCF: MuJoCo仿真模型 │ │
│ │ • terrain_assets: 地形资产 │ │
│ └─────────────────────────────────────────────────┘ │
└────────────────────────┬────────────────────────────┘
│
┌─────────────────────────────┼─────────────────────────────┐
│ │ │
▼ ▼ ▼
┌─────────────────────────────────┐ ┌─────────────────────────────────┐ ┌─────────────────────────────┐
│ Atom01_hardware │ │ atom01_train │ │ atom01_deploy │
│ ┌───────────────────────────┐ │ │ ┌───────────────────────────┐ │ │ ┌─────────────────────────┐ │
│ │ • CAD源文件 (V1.0/V2.0) │ │ │ │ • URDF + STL → IsaacLab │ │ │ │ • URDF → 控制器配置 │ │
│ │ • PCB设计 (原理图/Gerber) │ │ │ │ • MJCF → MuJoCo │ │ │ │ • 电机参数 (CAN ID映射) │ │
│ │ • BOM清单 (散件清单) │ │ │ │ • 物理参数验证 │ │ │ │ • 关节限位/力矩 │ │
│ │ • 装配指导文档 │ │ │ └───────────────────────────┘ │ │ └─────────────────────────┘ │
│ └───────────────────────────┘ │ └─────────────────────────────────┘ └─────────────────────────────┘
│ │ │
│ 机械约束 │ 训练数据 │ 运行配置
▼ ▼ ▼
┌─────────────────────────────────┐ ┌─────────────────────────────────┐ ┌─────────────────────────────┐
│ atom01_firmware │ │ 生成的策略文件 │ │ 运行时依赖 │
│ ┌───────────────────────────┐ │ │ ┌───────────────────────────┐ │ │ ┌─────────────────────────┐ │
│ │ • USB2CAN固件 (Zephyr) │ │ │ │ • *.onnx (神经网络策略) │ │ │ │ • ONNX Runtime 1.21.0 │ │
│ │ • RK3588 Linux镜像构建 │ │ │ │ • *.npz (参考运动数据) │ │ │ │ • ROS2 Humble │ │
│ │ • RDK X5镜像构建 │ │ │ └───────────────────────────┘ │ │ │ • Fast DDS │ │
│ │ • BMS电池管理守护进程 │ │ │ │ │ │ └─────────────────────────┘ │
│ └───────────────────────────┘ │ │ │ Sim2Sim迁移 │ │
└─────────────────────────────────┘ └─────────────────────────────────┘ └─────────────────────────────┘
│ │ │
└───────────────────────────────────┴───────────────────────────────────┘
│
▼
┌───────────────────────┐
│ 物理机器人系统 │
│ (硬件+固件+软件) │
└───────────────────────┘
3. 模块间关联关系
3.1 模块依赖矩阵
| 依赖方 ↓ / 被依赖方 → |
Atom01_hardware |
atom01_description |
atom01_train |
atom01_deploy |
atom01_firmware |
| Atom01_hardware |
- |
M (URDF生成) |
S (物理参数) |
S (板级支持) |
H (固件源码) |
| atom01_description |
H (设计约束) |
- |
H (仿真输入) |
H (配置来源) |
L (无直接依赖) |
| atom01_train |
L (质量参考) |
M (核心输入) |
- |
L (无直接依赖) |
L (无直接依赖) |
| atom01_deploy |
L (可选离线) |
M (配置来源) |
M (策略加载) |
- |
M (固件驱动) |
| atom01_firmware |
M (PCB设计) |
L (无直接依赖) |
L (无直接依赖) |
H (ROS2节点) |
- |
说明: M=强依赖, H=中依赖, S=弱依赖, L=无直接依赖
3.2 核心数据流
┌────────────────────────────────────────────────────────────────────────────────┐
│ 核心数据流 │
├────────────────────────────────────────────────────────────────────────────────┤
│ │
│ 1. 仿真训练数据流: │
│ CAD设计 ──► URDF ──► IsaacLab ──► 策略模型 (.onnx) │
│ │ │ │
│ │ ▼ │
│ STL meshes Sim2Sim ──► MuJoCo验证 │
│ │
│ 2. 机器人部署数据流: │
│ URDF配置 ──► robot.yaml ──► RobotInterface ──► CAN命令 ──► 电机 │
│ │ │
│ 策略模型 ◄── .onnx ──► inference_node ──► action ──► MotorControl │
│ │
│ 3. 固件更新数据流: │
│ USB2CAN固件 ──► STM32 ──► CAN总线 ◄── ROS2驱动 │
│ │
└────────────────────────────────────────────────────────────────────────────────┘
3.3 版本兼容性矩阵
| 模块 |
V1.0 兼容 |
V2.0 兼容 |
跨版本策略 |
| Atom01_hardware |
✅ 完整支持 |
✅ 完整支持 |
完全独立设计 |
| atom01_description |
✅ Atom01.urdf |
✅ roboto_origin.urdf |
配置分离 |
| atom01_train |
✅ Atom01EnvCfg |
✅ (需验证) |
环境配置分离 |
| atom01_deploy |
✅ (通用) |
✅ (通用) |
YAML配置驱动 |
| atom01_firmware |
✅ 分布式板 |
✅ 集成板 |
固件区分编译 |
4. 模块详细设计
4.1 Atom01_hardware 硬件模块
4.1.1 模块概述
功能定位: 提供机器人完整的机械结构和电子设计文件,支持用户自行加工装配。
版本: V1.0 (Atom01) 和 V2.0 (Roboto Origin)
4.1.2 目录结构
Atom01_hardware/
├── V1.0/
│ ├── atom01_mechanic/ # V1.0 机械设计
│ │ ├── 00_Docs/ # 装配指南、BOM、教程
│ │ ├── 01_SW_Project/ # SolidWorks 源文件 (.SLDASM/.SLDPRT)
│ │ ├── 02_Manufacturing/ # 3D打印 & CNC加工文件
│ │ │ ├── 3D_Printing/ # 3D打印件 (.STL/.STEP)
│ │ │ └── CNC_Machining/ # CNC件
│ │ └── 03_URDF/ # V1.0 URDF文件
│ │ └── urdf/Atom01_urdf.urdf
│ └── atom01_pcb/ # V1.0 电子设计
│ ├── Roboto_Power/ # 电源分配板
│ │ ├── Gerber/ # PCB制造文件
│ │ └── BOM/ # 元器件清单
│ └── Roboto_Usb2Can/ # USB2CAN适配器
│ └── Gerber/
│
└── V2.0/
├── roboto_origin_mechanic/ # V2.0 机械设计
│ ├── 00_Docs/ # 安装手册、走线说明
│ ├── 01_SW_Project/ # SolidWorks 源文件
│ ├── 02_Manufacturing/ # 制造文件
│ └── 03_URDF/ # V2.0 URDF文件
│ └── urdf/roboto_origin.urdf
└── roboto_origin_pcb/ # V2.0 电子设计
├── 00_Docs/ # 接口说明、3D模型、原理图
├── 01_Gerber/ # PCB制造文件
├── 02_Assembly/ # BOM、贴片文件
└── 03_Sch/ # 原理图
4.1.3 架构设计
V1.0 vs V2.0 架构对比:
V1.0 分布式架构: V2.0 集成架构:
┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────────────┐
│ 电源板 │ │ USB2CAN │ │ 机械本体 │ │ RBE_Board │
│Roboto │ │ Roboto │ │ │ │ (3合1集成) │
│_Power │ │_Usb2Can │ │ │ │ │
└────┬────┘ └────┬────┘ └────┬────┘ └────────┬────────┘
│ │ │ │
│ 48V │ CAN信号 │ │
└───────────┼────────────┘ │
│ │
▼ ▼
┌───────────────┐ ┌───────────────┐
│ 电机 (CAN总线) │ │ 电机 (CAN总线) │
└───────────────┘ └───────────────┘
4.1.4 关节规格
| 关节类型 |
V1.0 力矩 (N·m) |
V1.0 速度 (rad/s) |
V2.0 力矩 (N·m) |
V2.0 速度 (rad/s) |
| 髋关节 yaw |
80 |
10.47 |
80 |
10.47 |
| 髋关节 roll |
80 |
10.47 |
80 |
10.47 |
| 髋关节 pitch |
80 |
10.47 |
80 |
10.47 |
| 膝关节 |
80 |
10.47 |
80 |
10.47 |
| 踝关节 pitch |
18 |
3.77 |
18 |
3.77 |
| 踝关节 roll |
18 |
3.77 |
18 |
3.77 |
| 肩关节/手臂 |
18 |
3.77 |
18 |
3.77 |
4.1.5 PCB设计
RBE_Board v2.0 规格:
| 参数 |
规格 |
| 尺寸 |
80mm x 60mm |
| 电源输入 |
XT60接口, 48VDC |
| 5V输出 |
Type-C, 最大8A (供给Orange Pi) |
| 48V输出 |
XT30 x 4 (分发给四肢电机) |
| 通信 |
USB 2.0 Type-C (USB-CAN功能) |
| 风扇接口 |
GH1.25, 5V |
CAN总线拓扑:
- CAN1: 左腿 (6个电机)
- CAN2: 右腿 + 腰部 (7个电机)
- CAN3: 左臂 (5个电机)
- CAN4: 右臂 (5个电机)
4.2 atom01_description 机器人描述模块
4.2.1 模块概述
功能定位: 提供机器人运动学/动力学描述文件,是仿真和控制的共同基础。
核心文件: URDF、MJCF、STL meshes
4.2.2 目录结构
atom01_description/
├── urdf/
│ └── atom01.urdf # 主URDF文件 (23 DOF)
├── mjcf/
│ ├── atom01.xml # MuJoCo平地图模型
│ └── atom01_terrain.xml # MuJoCo高度场地形模型
├── meshes/ # 23个关节的STL网格
│ ├── base_link.STL
│ ├── torso_link.STL
│ ├── left_thigh_yaw_link.STL ~ right_elbow_yaw_link.STL
│ └── ...
└── terrain_assets/
└── terrain_hfield.png # 高度场地形图
4.2.3 URDF 关节配置
base_link (虚拟6DOF浮动基座)
├── left_thigh_yaw_link (1 DOF: yaw)
│ └── left_thigh_roll_link (1 DOF: roll)
│ └── left_thigh_pitch_link (1 DOF: pitch)
│ └── left_knee_link (1 DOF: pitch)
│ └── left_ankle_pitch_link (1 DOF: pitch)
│ └── left_ankle_roll_link (1 DOF: roll)
├── right_thigh_* (同左腿结构)
└── torso_link (1 DOF: yaw)
├── left_arm_pitch_link (1 DOF: pitch)
│ └── left_arm_roll_link (1 DOF: roll)
│ └── left_arm_yaw_link (1 DOF: yaw)
│ └── left_elbow_pitch_link (1 DOF: pitch)
│ └── left_elbow_yaw_link (1 DOF: yaw)
└── right_arm_* (同左臂结构)
总计: 23个转动关节
4.2.4 碰撞 vs 视觉网格策略
| 类型 |
策略 |
原因 |
| 视觉网格 |
完整STL |
渲染美观 |
| 碰撞网格 |
简化Box/Cylinder |
计算效率 |
4.2.5 MJCF传感器配置
<!-- IMU传感器 (base_link) -->
<sensor>
<framequat site="imu" />
<gyro site="imu" noise="0.005" />
<velocimeter site="imu" />
<accelerometer site="imu" />
<magnetometer site="imu" />
</sensor>
<!-- 关节传感器 (23关节 x 2 = 46传感器) -->
<jointsensename>
<joint sensor="position" joint="*_joint" />
<joint sensor="velocity" joint="*_joint" />
<joint sensor="torque" joint="*_joint" />
</jointsensename>
4.3 atom01_train 强化学习训练模块
4.3.1 模块概述
功能定位: 基于IsaacLab和RSL-RL的强化学习训练框架,支持Sim2Sim迁移到MuJoCo。
4.3.2 目录结构
atom01_train/
├── rsl_rl/ # RSL-RL算法库 (子模块)
│ ├── rsl_rl/
│ │ ├── algorithms/ # PPO, AMP, Distillation
│ │ ├── modules/ # Actor-Critic网络
│ │ ├── networks/ # MLP, CNN, 归一化
│ │ ├── storage/ # RolloutStorage
│ │ ├── runners/ # OnPolicyRunner
│ │ └── utils/ # Logger (TensorBoard/WandB)
│ └── pyproject.toml
│
├── robolab/ # IsaacLab扩展
│ ├── robolab/
│ │ ├── tasks/
│ │ │ ├── direct/ # 直接RL环境 (非管理器)
│ │ │ │ ├── base/ # 基础配置
│ │ │ │ │ ├── base_env.py
│ │ │ │ │ ├── atom01_env_cfg.py
│ │ │ │ │ └── mdp/rewards.py
│ │ │ │ ├── amp/ # AMP变体
│ │ │ │ └── interrupt/ # 中断处理
│ │ │ └── manager_based/ # 管理器环境 (AMP/BeyondMimic)
│ │ │ ├── amp/
│ │ │ └── beyondmimic/
│ │ └── assets/robots/
│ │ └── roboparty.py # ATOM01_CFG配置
│ └── scripts/
│ ├── rsl_rl/
│ │ ├── train.py # 训练入口
│ │ └── play.py # 播放/评估
│ └── mujoco/ # Sim2Sim脚本
│ └── sim2sim_atom01.py
│
└── data/motions/atom01_lab/ # 运动捕捉数据
4.3.3 训练架构图
┌─────────────────────────────────────────────────────────────────────────┐
│ train.py (训练入口) │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ AppLauncher() ──► IsaacSim ──► gym.make(task_name, cfg) │
│ │ │
│ ▼ │
│ ┌────────────────────────┐ │
│ │ RslRlVecEnvWrapper │ │
│ │ (环境封装) │ │
│ └───────────┬────────────┘ │
│ │ │
│ ▼ │
│ ┌────────────────────────┐ │
│ │ OnPolicyRunner │ │
│ │ ├─ PPO Algorithm │ │
│ │ ├─ Actor-Critic │ │
│ │ └─ RolloutStorage │ │
│ └───────────┬────────────┘ │
│ │ │
│ ┌────────────────────────────────┼────────────────────────────────┐
│ │ 训练循环 │ │
│ │ │ │
│ ▼ ▼ │
│ ┌─────────────────┐ ┌─────────────────┐ │
│ │ Rollout Phase │ │ Update Phase │ │
│ │ (num_steps=24) │ │ (PPO Clip/Adv) │ │
│ │ │ │ │ │
│ │ actions = │ │ loss = │ │
│ │ alg.act(obs) │ │ alg.update() │ │
│ │ obs, rew = │ │ │ │
│ │ env.step(act) │ │ logger.log(...) │ │
│ └─────────────────┘ └─────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
4.3.4 Sim2Sim迁移架构
┌─────────────────────────────────────────────────────────────────────────┐
│ IsaacLab (Source Simulator) │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ Policy (.pt) ──► torch.jit.save() ──► *.onnx │
│ │
└─────────────────────────────────────────────────────────────────────────┘
│
│ ONNX Export
▼
┌─────────────────────────────────────────────────────────────────────────┐
│ MuJoCo (Target Simulator) │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ obs_pipeline: │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ MuJoCo │───►│ Joint │───►│ Frame │───►│ Policy │ │
│ │ Sensors │ │ Order │ │ Stack │ │ Input │ │
│ │ │ │ Remap │ │ (10) │ │ (78D) │ │
│ └──────────┘ └──────────┘ └──────────┘ └────┬────┘ │
│ │ │
│ ▼ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Motor │◄───│ PD │◄───│ Actions │◄───│ Policy │ │
│ │ Commands │ │ Control │ │ (23D) │ │ Output │ │
│ │ │ │ (1kHz) │ │ (50Hz) │ │ │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
4.3.5 环境配置
| 配置项 |
Flat环境 |
Rough环境 |
| 观测维度 |
78 |
326 |
| 动作维度 |
23 |
23 |
| 地形 |
平坦地面 |
随机粗糙 + 楼梯/坡道 |
| 奖励函数 |
基础跟踪 |
地形适应 |
4.4 atom01_deploy ROS2部署模块
4.4.1 模块概述
功能定位: 基于ROS2 Humble的部署框架,包括推理节点、电机驱动、IMU驱动。
4.4.2 目录结构
atom01_deploy/
├── README.md / README_CN.md
├── assets/
│ ├── linux-*.deb # 实时内核包 (RK3588)
│ ├── rt_fastdds_profile.xml # FastDDS低延迟配置
│ └── 99-*-devs-*.rules # udev规则
│
├── scripts/
│ ├── imu_py_example.py # IMU Python示例
│ ├── motors_py_example.py # 电机Python示例
│ ├── motion_player.py # 运动播放
│ ├── set_zero.py # 零点设置
│ └── config/robot.yaml # 机器人配置
│
├── src/
│ ├── imu/ # IMU驱动包
│ │ ├── include/imu_driver.hpp
│ │ └── src/
│ │ ├── drivers/hipnuc/
│ │ └── protocol/
│ │ ├── can/socket_can.cpp
│ │ └── serial/serial_port.cpp
│ │
│ ├── motors/ # 电机驱动包
│ │ ├── include/motor_driver.hpp
│ │ └── src/
│ │ ├── drivers/dm/dm_motor_driver.cpp
│ │ └── protocol/can/socket_can.hpp
│ │
│ └── inference/ # 推理节点包
│ ├── src/
│ │ ├── inference_node.cpp/hpp
│ │ ├── robot_interface.cpp
│ │ └── ros_interface.cpp
│ ├── config/robot.yaml
│ ├── models/*.onnx # 策略模型
│ └── motions/*.npz # 参考运动
│
└── tools/
├── start_robot.sh # 启动脚本
└── create_ap/ # WiFi AP配置
4.4.3 ROS2节点架构
┌─────────────────────────────────────────────────────────────────────────┐
│ 节点架构图 │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ gamepad_bridge (独立进程) │
│ │ │
│ │ /joy (sensor_msgs/Joy) │
│ ▼ │
│ ┌──────────────────────────────────────────────────────────────────┐ │
│ │ inference_node │ │
│ │ ┌────────────┐ ┌─────────────┐ ┌────────────────────────────┐ │ │
│ │ │ ROS │ │ ONNX │ │ RobotInterface │ │ │
│ │ │ Interface │──│ Runtime │──│ (统一抽象) │ │ │
│ │ └────────────┘ └─────────────┘ └─────────────┬───────────────┘ │ │
│ │ │ │ │
│ │ ┌───────────────────────────┼───────────────┐ │ │
│ │ │ │ │ │ │
│ │ ▼ ▼ │ │ │
│ │ ┌────────────┐ ┌────────────┐ │ │ │
│ │ │ MotorDriver│ │ IMUDriver │ │ │ │
│ │ │ (CAN bus) │ │ (Serial) │ │ │ │
│ │ └─────┬──────┘ └─────┬──────┘ │ │ │
│ └───────────────────┼───────────────────────────┼────────────────────┘ │
│ │ │ │
│ ▼ ▼ │
│ ┌────────┐ ┌────────┐ │
│ │ CAN bus│ │Serial │ │
│ │(4通道) │ │/ttyUSB0│ │
│ └───┬────┘ └───┬────┘ │
└──────────────────────┼─────────────────────────┼────────────────────────────┘
│ │
▼ ▼
┌─────────────┐ ┌─────────────┐
│ DM Motors │ │ HiPNUC IMU │
│ (23个) │ │ │
└─────────────┘ └─────────────┘
4.4.4 主题与服务
ROS2 Topics (QoS: Best Effort, Volatile):
| Topic |
类型 |
方向 |
说明 |
/joy |
sensor_msgs/Joy |
输入 |
游戏手柄 |
/cmd_vel |
geometry_msgs/Twist |
输入 |
速度命令 |
/action |
sensor_msgs/JointState |
输出 |
电机动作 |
/imu |
sensor_msgs/Imu |
输出 |
IMU数据 |
/joint_states |
sensor_msgs/JointState |
输出 |
关节状态 |
ROS2 Services:
| Service |
功能 |
/init_motors |
初始化电机 |
/start_inference |
启动推理 |
/stop_inference |
停止推理 |
/reset_joints |
重置关节 |
/set_zeros |
设置零点 |
/read_joints |
读取关节状态 |
4.4.5 Python SDK 设计
# 电机控制
motor = motors_py.MotorDriver.create_motor(1, "can", "can0", "DM", 0, 16)
motor.init_motor()
motor.motor_mit_cmd(position, velocity, kp, kd, torque)
# IMU读取
imu = imu_py.IMUDriver.create_imu(8, "serial", "/dev/ttyUSB0", "HIPNUC", 921600)
quat = imu.get_quat() # [w, x, y, z]
# 机器人统一接口
robot = robot_py.RobotInterface("config/robot.yaml")
robot.init_motors()
robot.apply_action([0.0] * 23)
4.5 atom01_firmware 固件模块
4.5.1 模块概述
功能定位: 嵌入式固件,包括USB2CAN适配器固件、Linux镜像构建、RDK X5镜像构建。
4.5.2 目录结构
atom01_firmware/
├── roboto_usb2can/ # USB2CAN适配器固件
│ ├── CMakeLists.txt
│ ├── west.yml # West清单
│ ├── prj.conf # Kconfig配置
│ ├── boards/roboto_usb2can/
│ │ ├── roboto_usb2can.dts # 设备树 (STM32G431)
│ │ └── roboto_usb2can_defconfig
│ └── src/
│ ├── main.c
│ ├── roboto_usb2can.h
│ └── led.c
│
├── orangepi-build/ # OrangePi Linux镜像构建
│ ├── build.sh # 主入口
│ ├── scripts/
│ │ ├── compilation.sh
│ │ ├── debootstrap.sh
│ │ └── distributions.sh
│ ├── external/
│ │ ├── cache/sources/ # BSP源码
│ │ ├── config/ # 内核配置
│ │ └── extensions/ # OrangePi扩展
│ └── external/cache/debs/ # 预编译包
│
├── x5-rdk-gen/ # RDK X5镜像构建
│ ├── build.sh
│ ├── build_params/
│ ├── mk_kernel.sh / mk_kernel_rt.sh
│ ├── mk_debs.sh
│ ├── pack_image.sh
│ ├── samplefs/
│ ├── source/
│ └── deploy/
│
└── bms_daemon/ # 电池管理系统守护进程
├── src/
│ ├── main.cpp
│ └── protocol.cpp
├── include/bms_status.h
├── config/
├── service/
└── scripts/
4.5.3 USB2CAN固件架构
┌─────────────────────────────────────────────────────────────────────────┐
│ roboto_usb2can 固件架构 │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌────────────────────────────────────────────────────────────────────┐ │
│ │ Zephyr RTOS │ │
│ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────────────────┐ │ │
│ │ │ USB Device │ │ FDCAN (CAN1)│ │ LED指示灯 │ │ │
│ │ │ Stack │ │ Driver │ │ • Blue: USB状态 │ │ │
│ │ │ • MSOS 2.0 │ │ • 1Mbps │ │ • Yellow: CAN状态 │ │ │
│ │ │ • WinUSB │ │ • Error Mon │ │ • Green: 活动指示 │ │ │
│ │ └──────┬───────┘ └──────┬───────┘ └──────────────────────────┘ │ │
│ │ │ │ │ │
│ │ └────────┬─────────┘ │ │
│ │ ▼ │ │
│ │ ┌─────────────────────┐ │ │
│ │ │ GS-USB Protocol │ │ │
│ │ │ (candleLightfd) │ │ │
│ │ └─────────────────────┘ │ │
│ └────────────────────────────────────────────────────────────────────┘ │
│ │
│ Hardware: STM32G431CBT6 (Cortex-M4+ @ 170MHz) │
│ Interfaces: USB 2.0 Full Speed (Type-C), FDCAN1, 3x LEDs │
│ │
└─────────────────────────────────────────────────────────────────────────┘
4.5.4 实时内核配置
| 平台 |
内核版本 |
实时补丁 |
配置 |
| Orange Pi 5 Plus (RK3588) |
5.10.y |
RT |
Ubuntu 22.04 + RT_PREEMPT |
| RDK X5 |
6.1.83 |
rt28 |
Ubuntu 22.04 + RT_PREEMPT |
4.5.5 BMS守护进程架构
┌─────────────────────────────────────────────────────────────────────────┐
│ BMS Daemon 架构 │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────────────┐ │
│ │ Serial │───►│ Modbus RTU │───►│ BMS Protocol Handler │ │
│ │ /dev/ttyS* │ │ Parser │ │ • Status parsing │ │
│ │ │ │ │ │ • Checksum validation │ │
│ └─────────────┘ └─────────────┘ └─────────────┬───────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────┐ │
│ │ Unix Domain Socket │ │
│ │ /tmp/bms.sock │ │
│ │ (JSON广播) │ │
│ └─────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
5. 模块功能完整度分析
5.1 功能完整性评估表
| 模块 |
功能覆盖 |
代码完整度 |
文档完整度 |
测试覆盖 |
总体评级 |
| Atom01_hardware |
★★★★★ |
★★★★★ |
★★★★☆ |
N/A |
A |
| atom01_description |
★★★★★ |
★★★★★ |
★★★★★ |
N/A |
A |
| atom01_train |
★★★★☆ |
★★★★☆ |
★★★★☆ |
★★★☆☆ |
B+ |
| atom01_deploy |
★★★★☆ |
★★★★☆ |
★★★☆☆ |
★★☆☆☆ |
B |
| atom01_firmware |
★★★★☆ |
★★★★☆ |
★★★☆☆ |
★★☆☆☆ |
B |
5.2 各模块详细评估
Atom01_hardware (评级: A)
优点:
- 完整的V1.0和V2.0设计文件
- CAD源文件、 manufacturing文件、BOM清单位齐全
- 原理图和Gerber文件完整
- 装配指导文档详尽
不足:
- 缺少3D预览动画/渲染图
- PCB设计缺少3D模型导出
建议: 增加STEP格式的整体3D模型导出
atom01_description (评级: A)
优点:
- URDF和MJCF模型完整
- 碰撞/视觉网格分离合理
- IMU和关节传感器配置完整
- 高度场地形资产齐全
不足:
建议: 增加传感器噪声参数的标定方法文档
atom01_train (评级: B+)
优点:
- 基于IsaacLab的完整训练流程
- 支持PPO、AMP、BeyondMimic多种算法
- Sim2Sim迁移脚本完善
- 奖励函数模块化设计
不足:
- 训练收敛稳定性文档不足
- 超参数调优指南缺失
- 动作空间未归一化说明
建议: 增加训练指南和故障排查文档
atom01_deploy (评级: B)
优点:
- ROS2架构清晰
- Python SDK封装良好
- CAN通信协议完善
- 实时性考虑充分
不足:
- 启动脚本缺少错误处理
- 状态监控/日志不完善
- 缺少部署验证测试
建议: 增加健康检查脚本和日志系统
atom01_firmware (评级: B)
优点:
- Zephyr RTOS架构现代化
- USB2CAN固件支持WinUSB免驱
- 镜像构建脚本自动化
不足:
建议: 增加OTA更新机制和回滚支持
5.3 模块间接口完整性
┌─────────────────────────────────────────────────────────────────────────────┐
│ 接口完整性矩阵 │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ 接口 状态 说明 │
│ ───────────────────────────────────────────────────────────────────────── │
│ URDF → IsaacLab ✅ 完整 标准格式支持 │
│ URDF → MuJoCo (MJCF) ✅ 完整 手工转换脚本 │
│ IsaacLab → MuJoCo (Sim2Sim) ✅ 完整 关节映射+PD控制 │
│ ONNX Model → inference_node ✅ 完整 ONNX Runtime 1.21 │
│ CAN Protocol → DM Motors ✅ 完整 4通道CAN总线 │
│ IMU Driver → ROS2 ✅ 完整 Serial/CAN双模式 │
│ Gamepad → ROS2 ✅ 完整 joy包桥接 │
│ Firmware → Linux Driver ✅ 完整 gs_usb兼容 │
│ BMS → UDS Socket ✅ 完整 JSON广播 │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
6. 架构设计亮点与改进建议
6.1 架构亮点
- 模块化设计: 清晰的模块边界,便于独立开发和部署
- 版本分离: V1.0和V2.0完全独立,避免兼容性债务
- Sim2Sim迁移: 完善的仿真到仿真迁移流程
- 实时性考虑: Linux RT内核 + ROS2 QoS配置
- 开源完整性: 从CAD到RL的完整开源链路
6.2 改进建议
| 优先级 |
模块 |
建议 |
影响 |
| 高 |
deploy |
增加部署验证测试套件 |
提高可靠性 |
| 高 |
firmware |
实现安全的OTA更新机制 |
提高可维护性 |
| 中 |
train |
增加训练收敛性文档和调优指南 |
降低使用门槛 |
| 中 |
description |
增加传感器标定文档 |
提高模型精度 |
| 低 |
hardware |
增加3D模型导出和渲染图 |
提升社区体验 |
6.3 技术债务
| 项目 |
描述 |
风险 |
| 关节映射硬编码 |
sim2sim中usd2urdf映射硬编码在脚本中 |
中 |
| 固件无版本管理 |
USB2CAN固件无明确版本追踪 |
低 |
| 多控制器支持不完善 |
OrangePi和RDK X5配置差异未文档化 |
中 |
附录
A. 文件索引
| 文件路径 |
说明 |
modules/Atom01_hardware/V2.0/roboto_origin_pcb/00_Docs/三合一电路V1.0硬件说明.pdf |
RBE_Board原理图 |
modules/atom01_description/urdf/atom01.urdf |
主URDF文件 |
modules/atom01_description/mjcf/atom01.xml |
MuJoCo模型 |
modules/atom01_train/robolab/scripts/rsl_rl/train.py |
训练入口 |
modules/atom01_deploy/src/inference/src/inference_node.cpp |
推理节点 |
modules/atom01_firmware/roboto_usb2can/src/main.c |
USB2CAN固件 |
B. 参考链接
本文档由 Claude Code 自动生成,遵循 ROBOTO Origin 项目架构实际情况。
architecture.md
ROBOTO Origin 全局架构文档
目录
1. 项目概述
1.1 项目简介
ROBOTO Origin 是由 RoboParty(上海萝博派对科技有限公司)开发的完全开源 DIY 人形机器人项目。项目涵盖从机械结构设计、电子电路、强化学习训练到 ROS2 部署的完整研发流程,全部采用 GPLv3 开源许可证。
1.2 主要技术参数
1.3 版本演进
2. 全局架构总览
2.1 系统层次架构图
2.2 数据流架构图
2.3 模块依赖关系图
3. 模块间关联关系
3.1 模块依赖矩阵
说明: M=强依赖, H=中依赖, S=弱依赖, L=无直接依赖
3.2 核心数据流
3.3 版本兼容性矩阵
4. 模块详细设计
4.1 Atom01_hardware 硬件模块
4.1.1 模块概述
功能定位: 提供机器人完整的机械结构和电子设计文件,支持用户自行加工装配。
版本: V1.0 (Atom01) 和 V2.0 (Roboto Origin)
4.1.2 目录结构
4.1.3 架构设计
V1.0 vs V2.0 架构对比:
4.1.4 关节规格
4.1.5 PCB设计
RBE_Board v2.0 规格:
CAN总线拓扑:
4.2 atom01_description 机器人描述模块
4.2.1 模块概述
功能定位: 提供机器人运动学/动力学描述文件,是仿真和控制的共同基础。
核心文件: URDF、MJCF、STL meshes
4.2.2 目录结构
4.2.3 URDF 关节配置
4.2.4 碰撞 vs 视觉网格策略
4.2.5 MJCF传感器配置
4.3 atom01_train 强化学习训练模块
4.3.1 模块概述
功能定位: 基于IsaacLab和RSL-RL的强化学习训练框架,支持Sim2Sim迁移到MuJoCo。
4.3.2 目录结构
4.3.3 训练架构图
4.3.4 Sim2Sim迁移架构
4.3.5 环境配置
4.4 atom01_deploy ROS2部署模块
4.4.1 模块概述
功能定位: 基于ROS2 Humble的部署框架,包括推理节点、电机驱动、IMU驱动。
4.4.2 目录结构
4.4.3 ROS2节点架构
4.4.4 主题与服务
ROS2 Topics (QoS: Best Effort, Volatile):
/joy/cmd_vel/action/imu/joint_statesROS2 Services:
/init_motors/start_inference/stop_inference/reset_joints/set_zeros/read_joints4.4.5 Python SDK 设计
4.5 atom01_firmware 固件模块
4.5.1 模块概述
功能定位: 嵌入式固件,包括USB2CAN适配器固件、Linux镜像构建、RDK X5镜像构建。
4.5.2 目录结构
4.5.3 USB2CAN固件架构
4.5.4 实时内核配置
4.5.5 BMS守护进程架构
5. 模块功能完整度分析
5.1 功能完整性评估表
5.2 各模块详细评估
Atom01_hardware (评级: A)
优点:
不足:
建议: 增加STEP格式的整体3D模型导出
atom01_description (评级: A)
优点:
不足:
建议: 增加传感器噪声参数的标定方法文档
atom01_train (评级: B+)
优点:
不足:
建议: 增加训练指南和故障排查文档
atom01_deploy (评级: B)
优点:
不足:
建议: 增加健康检查脚本和日志系统
atom01_firmware (评级: B)
优点:
不足:
建议: 增加OTA更新机制和回滚支持
5.3 模块间接口完整性
6. 架构设计亮点与改进建议
6.1 架构亮点
6.2 改进建议
6.3 技术债务
附录
A. 文件索引
modules/Atom01_hardware/V2.0/roboto_origin_pcb/00_Docs/三合一电路V1.0硬件说明.pdfmodules/atom01_description/urdf/atom01.urdfmodules/atom01_description/mjcf/atom01.xmlmodules/atom01_train/robolab/scripts/rsl_rl/train.pymodules/atom01_deploy/src/inference/src/inference_node.cppmodules/atom01_firmware/roboto_usb2can/src/main.cB. 参考链接
本文档由 Claude Code 自动生成,遵循 ROBOTO Origin 项目架构实际情况。