基于 LeRobot 的 6 自由度机械臂操作系统,支持仿真与物理机器人的双向交互、数据收集、策略训练和部署。
Slobot 是一个完整的机器人学习系统,专为 SO-ARM-100 6 自由度机械臂设计。系统集成了 Genesis 物理仿真器、LeRobot 机器人框架和 Feetech 电机控制,实现了从数据收集到模型部署的完整工作流程。
# 克隆仓库
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
硬件要求:
启动 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 是一个高性能的物理仿真器,支持 GPU 加速的物理计算和渲染。
主要功能:
6 自由度机械臂控制类,提供完整的机械臂控制接口。
关节配置:
shoulder_pan: 肩部旋转shoulder_lift: 肩部升降elbow_flex: 肘部弯曲wrist_flex: 腕部弯曲wrist_roll: 腕部旋转gripper: 夹爪物理电机控制类,用于控制真实的 Feetech STS3215 伺服电机。
主要功能:
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 脚本 └─> 将策略部署到真实机器人
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"
在 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
A: 编辑 dataflow/train.yaml 中的环境变量,如 TRAIN_STEPS、BATCH_SIZE
A: 默认保存在 /workspace/dataflow/data/,可通过 LOCAL_DATA_DIR 环境变量修改
A: 训练日志会实时输出到终端,包含步数、损失等信息
A: 不需要,仿真环境可以完全独立运行
A: 编辑 scripts/keyboard_node.py 中的步长参数:
POS_STEP = 0.002 # 移动步长
ROT_STEP = 0.05 # 旋转步长
GRIPPER_STEP = 0.1 # 夹爪速度
A: 在 slobot/src/slobot/configuration.py 的 QPOS_MAP 中添加新的位置配置
A: 目前主要支持 ACT (Action Chunking with Transformer) 策略,可以扩展支持其他策略
scripts/ 目录创建新的策略节点dataflow/ 目录创建对应的配置文件select_action 方法dataflow/ 目录创建新的 YAML 配置文件dora start <config.yaml> 启动control_position 等方法configuration.py 中添加配置确保使用 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 版本正确:
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 文件。
感谢以下开源项目:
注意: 本项目主要用于研究和教育目的。使用物理机器人时请确保安全操作。