SO-101 只凭腕部摄像头看球,让乒乓球在球拍上保持平衡
- 制作者: zecice
一台 SO-101 用夹爪握住一块乒乓球拍,让一个乒乓球在拍面上保持平衡。腕部摄像头是它感知球的唯一传感器;其余信息都来自机械臂自身的关节读数。控制器在 MuJoCo 中训练,不做修改就能在真实机械臂上运行,作者在 X 上的一段短视频 中展示了这一点:一只手把球推向球拍边缘,机械臂又把球带回中间。
工作原理
代码仓库 中的流程分为四个阶段。腕部摄像头的画面(640x480,缩小到 128x96)送入颜色阈值检测器,找出橙色的球。一个在仿真中训练的小型 MLP 估计器,根据最近 3 次检测结果算出球在球拍上的位置。速度是这些位置经过滤波的有限差分。随后,一个用强化学习(PPO)训练的控制器以 30 Hz 输出 5 个关节位置的变化量。球拍以侧边正对摄像头的方式夹住,因此摄像头从侧面看到球拍,球则出现在图像的某一列附近。
从仿真走向现实的关键
作者的仿真到现实经验是:从一开始就带着真实系统的缺陷训练控制器,这是域随机化的一种形式:
- 控制延迟在 0 到 4 帧(0 到 133 ms)之间随机变化,观测中包含最近 3 个动作。 - 舵机增益偏软且随机,因为便宜的舵机会下垂、会滞后。 - 控制器看到的球状态带有噪声,与估计器的输出相似,其速度由机器人所用的同一个有限差分滤波器计算。用精确速度训练的控制器,换成由摄像头推出的速度后完全失败。
没有成功的做法也写了下来:一个基于腕部图像的端到端 CNN 策略,通过行为克隆和 DAgger 从 PPO 控制器学习,在仿真中表现不错,但几乎看不到真实的球。最后由简单的颜色检测器加小型估计器取而代之。
在真实机械臂上
硬件包括一台 SO-101 从动臂、一个腕部摄像头、一块夹在夹爪中的普通球拍和一个橙色的球。机械臂通过 LeRobot 中的 SO-101 follower 和 Feetech 驱动运行。README 列出了在真实机械臂上起作用的要点:
- 舵机 P 增益设为 32,而不是 LeRobot 默认的 16;在 16 时机械臂会下垂,并忽略 4 到 7 度的指令。运行脚本会自动设置。 - 水平的初始姿态:只要倾斜几度,球就会滚走,因为策略没有积分作用。每台机械臂都用附带的引导脚本记录自己的初始姿态。 - 按负载夹紧球拍(约 10%),绝不要让夹爪完全闭合:堵转会触发 Feetech 的过载保护,电机会从总线上掉线,直到重新上电。 - 用附带的脚本测量自己的延迟;控制器针对 0 到 4 个额外的 33 ms 步长进行了训练。
README 还提醒,机械臂会自行运动,并且在脚本退出后仍保持通电。
结果与发布内容
作者报告:在随机化仿真中 97.5% 的回合能保持平衡 10 秒;在包含完整摄像头流程的仿真中为 113/120;在真实机械臂上也能保持平衡。训练好的控制器和估计器权重都在仓库里,因此不需要机械臂,就能在仿真器中试用整个流程。控制器训练约 2900 万(29M)步,在一台笔记本电脑上耗时约 2 小时(6 个 CPU 核心跑仿真,一块 RTX A1000 GPU 跑网络)。开发环境为 Linux;macOS 和 Windows 未经测试。
代码和权重采用 MIT 许可。SO-101 模型文件来自 TheRobotStudio 的 SO-ARM100 仓库,采用 Apache-2.0;球拍网格来自一个乒乓球控制项目,采用 MIT。
详情
- arm: SO-101 follower
- task: Balancing a ping-pong ball on a table-tennis paddle held in the gripper
- posted: 5 November 2026 (video), repository opened 8 November 2026
- licence: MIT (code and weights); SO-101 model files Apache-2.0; paddle mesh MIT
- sensing: Wrist camera only for the ball, plus the arm's joint readings
- weights: Controller and estimator released in the repository
- training: MuJoCo with randomised latency (0-133 ms), soft servos and noisy ball state
- framework: LeRobot (SO-101 follower, Feetech drivers), MuJoCo 3.17
- controller: PPO policy, 5 joint-position changes at 30 Hz
- difficulty: Advanced
- perception: Colour-threshold detector and a small MLP estimator trained in simulation
照片和视频
- zecice/so101-pingpong-balance: The simulation, PPO training, detector and estimator, real-arm loop and pretrained weights, with a README covering what made sim-to-real work and what mattered on the real arm.
- The real arm balancing the ball: The builder's clip of the SO-101 keeping the ball on the paddle while a hand pushes it towards the edge.
链接
- 制作者: https://github.com/zecice