logo
0
0
WeChat Login

Slobot - SO-ARM-100 机器人操作系统

基于 LeRobot 的 6 自由度机械臂操作系统,支持仿真与物理机器人的双向交互、数据收集、策略训练和部署。

项目简介

Slobot 是一个完整的机器人学习系统,专为 SO-ARM-100 6 自由度机械臂设计。系统集成了 Genesis 物理仿真器、LeRobot 机器人框架和 Feetech 电机控制,实现了从数据收集到模型部署的完整工作流程。

核心特性

  • Sim-to-Real: 使用 Genesis 仿真器控制物理机器人
  • Real-to-Sim: 物理机器人运动实时同步到仿真环境
  • 键盘遥操作: 直观的键盘控制界面
  • 主从遥操作: 支持主从机械臂远程控制
  • 策略训练: 集成 ACT 策略进行模仿学习
  • 数据管理: 完整的数据收集、录制和管理流程
  • Web 监控: Gradio 实时监控界面

技术架构

  • 物理仿真: Genesis (GPU 加速)
  • 机器人框架: LeRobot (Hugging Face)
  • 硬件控制: Feetech STS3215 伺服电机
  • 深度学习: PyTorch
  • Web 界面: Gradio
  • 数据流: Dora
  • 计算平台: Modal (无服务器 GPU)

快速开始

环境要求

  • Python 3.8+
  • CUDA 11.0+ (用于 GPU 加速)
  • Linux 系统

安装

# 克隆仓库
git clone <repository-url>
cd slobot

# 安装依赖
pip install -e .

# 安装额外依赖
pip install genesis-world lerobot dora-rs

快速体验

# 1. 启动数据收集(键盘控制)
cd dataflow
dora start keyboard_collect.yaml

# 2. 使用键盘控制机器人
# 按 1 开始录制,2 停止录制,0 复位

# 3. 训练策略
dora start train.yaml

# 4. 策略推理
dora start infer.yaml

使用指南

数据收集

使用键盘控制仿真机器人并收集训练数据:

cd dataflow
dora start keyboard_collect.yaml

键盘控制说明

按键功能
↑/↓前后移动(X轴)
←/→左右移动(Y轴)
Q/E升降(Z轴)
N/M旋转(Roll)
U/J夹爪开合
1开始录制
2停止录制并保存
0复位到初始状态
3删除当前/上一次录制

数据会保存到 dataflow/data/ 目录。

策略训练

使用收集的数据训练 ACT 策略:

cd dataflow
dora start train.yaml

训练参数配置

train.yaml 中修改环境变量:

env:
  TRAIN_STEPS: "80000"    # 训练步数
  BATCH_SIZE: "8"         # 批量大小
  DATASET_REPO_ID: "slobot/dora_collection_01"
  LOCAL_DATA_DIR: "data"
  OUTPUT_DIR: "outputs/train"

模型权重会保存到 outputs/train/checkpoints/ 目录。

策略推理

使用训练好的策略控制机器人:

cd dataflow
dora start infer.yaml

前提条件:需要先完成训练,模型权重位于 outputs/train/checkpoints/last/pretrained_model

物理机器人控制

如果你有真实的 SO-ARM-100 机器人:

cd slobot/scripts
python real.py

机器人会依次移动到预设位置:

  • zero: 零位
  • middle: 中间位置
  • rotated: 旋转位置
  • rest: 休息位置

主从遥操作

使用主从遥操作控制机器人:

cd slobot/scripts/teleop
python teleoperate.py

硬件要求:

  • 2 个 Feetech 电机控制器
  • PORT0: follower(从机械臂)
  • PORT1: leader(主机械臂)

Web 监控界面

启动 Gradio Web 界面监控机器人状态:

cd slobot/scripts
python sim_gradio_dashboard.py

项目结构

workspace/
├── slobot/                          # 主包
│   ├── src/slobot/
│   │   ├── genesis.py              # 仿真环境封装
│   │   ├── so_arm_100.py           # 机械臂控制
│   │   ├── feetech.py              # 电机控制
│   │   ├── configuration.py        # 配置管理
│   │   ├── simulation_frame.py     # 仿真帧数据结构
│   │   ├── rigid_body/             # 求解器实现
│   │   │   ├── numpy_solver.py     # NumPy 求解器
│   │   │   ├── pytorch_solver.py   # PyTorch 求解器
│   │   │   └── scip_solver.py      # SCIP 求解器
│   │   ├── lerobot/                # LeRobot 集成
│   │   │   ├── policy_evaluator.py # 策略评估器
│   │   │   ├── sim_dataset_generator.py # 仿真数据生成
│   │   │   └── episode_replayer.py # Episode 回放
│   │   ├── teleop/                 # 遥操作
│   │   │   ├── teleoperator.py     # 遥操作控制器
│   │   │   └── gradio_control_app.py # Gradio 控制界面
│   │   ├── gradio_*.py             # Gradio Web 应用
│   │   ├── metrics/                # 指标监控
│   │   └── config/                 # 配置文件
│   ├── scripts/
│   │   ├── sim_*.py                # 仿真脚本
│   │   ├── validation/             # 校准验证脚本
│   │   ├── teleop/                 # 遥操作脚本
│   │   ├── policy/                 # 策略脚本
│   │   └── sim/                    # 仿真相关脚本
│   ├── tests/                      # 测试文件
│   ├── pyproject.toml              # 项目配置
│   └── README.md                   # 原始 README
├── scripts/                        # Dora 节点
│   ├── keyboard_node.py            # 键盘控制节点
│   ├── follower_node.py            # 仿真环境节点
│   ├── recorder_node.py            # 数据录制节点
│   ├── train_node.py               # 训练节点
│   ├── policy_node.py              # 策略推理节点
│   ├── leader_node.py              # 主机械臂节点
│   └── follower_node.py            # 从机械臂节点
├── dataflow/                       # 数据流配置
│   ├── keyboard_collect.yaml       # 数据收集流程
│   ├── train.yaml                  # 训练流程
│   ├── infer.yaml                  # 推理流程
│   └── data/                       # 数据存储目录
└── README.md                       # 本文件

核心组件

Genesis 仿真环境

Genesis 是一个高性能的物理仿真器,支持 GPU 加速的物理计算和渲染。

主要功能:

  • 实时物理仿真(60 FPS)
  • 多种渲染模式(RGB, Depth, Segmentation, Normal)
  • IK 求解器集成
  • 支持多种物体类型

SoArm100 机械臂

6 自由度机械臂控制类,提供完整的机械臂控制接口。

关节配置:

  • shoulder_pan: 肩部旋转
  • shoulder_lift: 肩部升降
  • elbow_flex: 肘部弯曲
  • wrist_flex: 腕部弯曲
  • wrist_roll: 腕部旋转
  • gripper: 夹爪

Feetech 电机控制

物理电机控制类,用于控制真实的 Feetech STS3215 伺服电机。

主要功能:

  • 双端口通信(leader/follower)
  • 力矩模式支持
  • PD 控制器
  • 实时位置反馈

Dora 数据流

Dora 是一个高性能的数据流框架,用于连接各个节点。

主要节点:

  • keyboard: 键盘控制节点
  • follower: 仿真环境节点
  • recorder: 数据录制节点
  • train: 训练节点
  • policy: 策略推理节点

工作流程

完整训练流程

1. 数据收集
   └─> dora start keyboard_collect.yaml
       └─> 使用键盘控制机器人
       └─> 按 1 开始录制,2 停止录制

2. 数据预处理
   └─> 数据自动保存为 LeRobot 格式
       └─> 存储在 dataflow/data/ 目录

3. 策略训练
   └─> dora start train.yaml
       └─> ACT 策略训练
       └─> 模型保存到 outputs/train/

4. 策略评估
   └─> dora start infer.yaml
       └─> 观察机器人自主执行任务

5. 部署到物理机器人(可选)
   └─> 使用 sim_to_real 脚本
       └─> 将策略部署到真实机器人

Sim-to-Real 流程

1. 仿真训练
   └─> 在 Genesis 仿真环境中训练策略

2. 校准验证
   └─> 运行 validation 脚本
       └─> 确保仿真与物理机器人一致

3. 策略迁移
   └─> 使用 sim_to_real 脚本
       └─> 将策略部署到物理机器人

4. 实际测试
   └─> 在真实环境中测试策略

配置说明

机械臂参数

slobot/src/slobot/configuration.py 中配置:

DOFS = 6
JOINT_NAMES = ["shoulder_pan", "shoulder_lift", "elbow_flex", 
               "wrist_flex", "wrist_roll", "gripper"]

QPOS_MAP = {
    "middle": [0, -np.pi/2, np.pi/2, 0, 0, -0.15],
    "zero": [0, 0, 0, 0, 0, 0],
    "rotated": [-np.pi/2, -np.pi/2, np.pi/2, np.pi/2, -np.pi/2, np.pi/2],
    "rest": [0.049, -3.32, 3.14, 1.21, -0.17, -0.17]
}

训练参数

dataflow/train.yaml 中配置:

env:
  TRAIN_STEPS: "80000"      # 训练步数
  BATCH_SIZE: "8"           # 批量大小
  DATASET_REPO_ID: "slobot/dora_collection_01"
  LOCAL_DATA_DIR: "data"
  OUTPUT_DIR: "outputs/train"

ACT 策略参数

scripts/train_node.py 中配置:

policy_config = ACTConfig(
    dim_model=512,           # 模型维度
    n_action_steps=50,       # 动作步数
    chunk_size=50,           # 块大小
    dropout=0.1,            # Dropout 率
    n_heads=8,               # 注意力头数
    n_encoder_layers=4,      # 编码器层数
    n_decoder_layers=1,      # 解码器层数
)

校准与验证

系统提供了完整的校准和验证脚本,确保 Sim-to-Real 的准确性。

校准步骤

cd slobot/scripts/validation

# 1. 验证仿真关节位置
python 0_validate_sim_qpos.py

# 2. 校准电机位置
python 1_calibrate_motor_pos.py

# 3. 验证仿真位置
python 2_validate_sim_pos.py

# 4. 验证物理机器人位置
python 3_validate_real_pos.py

# 5. 验证 Real-to-Sim
python 4_validate_real_to_sim.py

# 6. 验证 Sim-to-Real
python 5_validate_sim_to_real.py

常见问题

Q: 如何修改训练参数?

A: 编辑 dataflow/train.yaml 中的环境变量,如 TRAIN_STEPSBATCH_SIZE

Q: 数据保存在哪里?

A: 默认保存在 /workspace/dataflow/data/,可通过 LOCAL_DATA_DIR 环境变量修改

Q: 如何查看训练进度?

A: 训练日志会实时输出到终端,包含步数、损失等信息

Q: 需要物理机器人吗?

A: 不需要,仿真环境可以完全独立运行

Q: 如何调整键盘控制的灵敏度?

A: 编辑 scripts/keyboard_node.py 中的步长参数:

POS_STEP = 0.002    # 移动步长
ROT_STEP = 0.05     # 旋转步长
GRIPPER_STEP = 0.1  # 夹爪速度

Q: 如何添加新的预设位置?

A: 在 slobot/src/slobot/configuration.pyQPOS_MAP 中添加新的位置配置

Q: 支持哪些策略?

A: 目前主要支持 ACT (Action Chunking with Transformer) 策略,可以扩展支持其他策略

扩展开发

添加新的策略

  1. scripts/ 目录创建新的策略节点
  2. dataflow/ 目录创建对应的配置文件
  3. 实现策略的 select_action 方法

添加新的数据流

  1. dataflow/ 目录创建新的 YAML 配置文件
  2. 定义节点和连接关系
  3. 使用 dora start <config.yaml> 启动

自定义机械臂

  1. 创建新的机械臂类继承自基础类
  2. 实现 control_position 等方法
  3. configuration.py 中添加配置

性能优化

GPU 加速

确保使用 GPU 进行仿真和训练:

export CUDA_VISIBLE_DEVICES="0"

批量大小调整

根据 GPU 内存调整批量大小:

env:
  BATCH_SIZE: "16"  # 增加/减少批量大小

仿真精度调整

follower_node.py 中调整仿真参数:

sim_options=gs.options.SimOptions(dt=0.01, substeps=2)

故障排除

仿真启动失败

检查 Genesis 是否正确安装:

python -c "import genesis as gs; print(gs.__version__)"

训练时 CUDA 错误

确保 CUDA 版本正确:

nvidia-smi

数据录制失败

检查数据目录权限:

ls -la dataflow/data/

电机连接失败

检查串口设备:

ls /dev/ttyACM*

贡献指南

欢迎贡献代码、报告问题或提出建议!

开发环境设置

# 克隆仓库
git clone <repository-url>
cd slobot

# 创建虚拟环境
python -m venv venv
source venv/bin/activate

# 安装开发依赖
pip install -e ".[dev]"

# 运行测试
pytest slobot/tests/

代码风格

遵循 PEP 8 代码风格,使用 black 格式化代码:

black slobot/

许可证

本项目采用 Apache License 2.0 许可证。详见 LICENSE 文件。

致谢

感谢以下开源项目:

联系方式

  • 项目主页: [GitHub Repository]
  • 问题反馈: [GitHub Issues]
  • 文档: [Project Documentation]

更新日志

v0.1.17 (当前版本)

  • 完整的 Sim-to-Real 支持
  • 键盘遥操作界面
  • ACT 策略训练和推理
  • 数据收集和管理
  • Web 监控界面
  • 完整的校准验证流程

注意: 本项目主要用于研究和教育目的。使用物理机器人时请确保安全操作。

About

Dora 在线数据采集仿真

dorobotrepo-named
Language
Python96%
Dockerfile2.8%
Shell1.2%