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%