使用 Isaac Lab 实现 SO-101 键盘打字#
SO-101 打字项目 训练 SO-101 从臂使用打字夹爪,按下固定位置的 Logitech MX Keys 键盘上的字母键,再通过 LeRobot 将学到的策略部署到硬件。可以用它研究打字任务的仿真到现实迁移,在仿真中运行已发布策略,或为自己的机器人和键盘配置进行标定及策略训练。
备注
Isaac Lab 版本。 本项目使用固定版本、应用过补丁的 Isaac Lab 3.0.0 运行时,基于源码提交 6f991d4becf7 构建。请使用项目提供的 Docker 镜像,而不是已有的 Isaac Lab 安装。未经修改的 3.0 正式版及后续版本尚未经过兼容性验证。源码补丁和固定的依赖版本见 运行时来源说明。
项目内容#
基于 Newton MJWarp 求解器的 Isaac Lab 打字环境,支持配置执行器模型,并通过 RSL-RL 进行 PPO 训练和评估。
测量夹具的工具,以及根据记录的真实按键数据拟合仿真键盘位姿和标定关节角的工具。
已发布的检查点、仿真回放,以及独立的 CPU 部署程序。部署程序通过 LeRobot 控制电机,并用 Linux 键盘事件获取按下和释放反馈。
策略使用固定的 A–Z 按键位置映射,不输入相机图像,因此无法适应键盘位置变化。部署到真实硬件前,需要完成标定,并检查真实机器人在训练对应场景中能否正确到达和释放目标按键。
支持的平台与要求#
本指南中的工作流程 仅支持 Linux x86-64。本项目尚未验证 Windows 和 ARM 平台。
仿真和训练需要 NVIDIA GPU、配置了 NVIDIA Container Toolkit 的 Docker、主机上的 Python 3.10 或更新版本,以及 curl 或 wget。运行仿真命令前,先用 ./so101 build 构建项目的 Docker 镜像。请为 Docker 镜像层、缓存和运行数据预留 至少 70 GB 可用磁盘空间;构建后的镜像约为 32.6 GB。应根据 GPU 显存调整并行环境数量,这也会改变每次训练更新的样本量。
硬件部署还需要配备受支持打字夹爪的 SO-101 从臂、Logitech MX Keys 键盘,以及用于独立 LeRobot 环境的 uv。硬件推理不需要 Isaac Sim 或 GPU。标定、设备访问和操作流程见 硬件准备指南。
开始仿真#
克隆公开仓库并构建其固定版本运行时:
git clone https://github.com/NVIDIA/so101-typing-task.git
cd so101-typing-task
./so101 build
下载 9 月发布的检查点并生成一次打字策略执行结果,无需真实机器人:
./so101 download
bundle=.artifacts/so101-keyboard-typing-benchmark/releases/calibrated-20260917
./so101 video --actuator anchorbench --stage transit15 \
--checkpoint "$bundle/model_2498.pt" \
--env-config "$bundle/params/env.yaml" --target NEWTON
回放、评估和部署时,保留检查点完整的 params/ 目录。首次启动仿真会编译 Warp 内核。
训练与真实硬件部署#
双字母 P1A 阶段和六字母 Transit15 阶段的训练方法见仓库的 训练指南。示例的起始训练量为 P1A 更新 500 次、Transit15 更新 2,000 次,使用 4,096 个并行环境。应在阶段之间进行评估,并按需增加训练量;这并不是保证成功的最低训练量。示例中的随机种子用于复现实验,不是成功所必需的取值。
在真实硬件上执行前,请为自己的机器人完成 场景标定 和 对齐检查。已发布的关节角偏移量只用于将原始设备的编码器读数映射到模型坐标,不能替代另一台机器人的标定。