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