Open Source Robotics

고품질 오픈소스 로봇 프로젝트, 도구 및 소프트웨어의 엄선된 컬렉션.

손목 카메라로만 공을 보며 탁구공을 라켓 위에서 균형 잡는 SO-101

SO-101 Open Robot Arm

  • 제작자: zecice

SO-101이 그리퍼로 탁구 라켓을 쥐고 그 위에서 탁구공의 균형을 유지합니다. 공을 감지하는 센서는 손목 카메라뿐이고, 나머지는 모두 팔 자체의 관절 측정값에서 나옵니다. 컨트롤러는 MuJoCo에서 학습했고 수정 없이 실제 팔에서 실행되며, 제작자는 X에 올린 짧은 영상에서 이를 보여 줍니다. 손이 공을 라켓 가장자리로 밀면 팔이 공을 다시 가운데로 가져옵니다.

작동 방식

저장소의 파이프라인은 4단계입니다. 손목 카메라의 프레임(640x480을 128x96으로 축소)은 색 임계값 검출기로 들어가 주황색 공을 찾습니다. 시뮬레이션에서 학습한 작은 MLP 추정기가 최근 3번의 검출 결과로 라켓 위 공의 위치를 계산합니다. 속도는 그 위치들의 필터링된 유한 차분입니다. 이어서 강화 학습(PPO)으로 학습한 컨트롤러가 30 Hz로 5개 관절 위치의 변화량을 출력합니다. 라켓은 카메라에 모서리가 향하도록 고정되어 있어서 카메라는 라켓을 옆에서 보고, 공은 이미지의 한 열 근처에 보입니다.

시뮬레이션에서 실제로 넘어가게 한 것

제작자의 Sim2Real 교훈은 처음부터 실제 시스템의 결함을 그대로 넣어 컨트롤러를 학습시키라는 것으로, 도메인 랜덤화의 한 형태입니다.

- 제어 지연을 0~4프레임(0~133 ms) 범위에서 무작위로 두고, 최근 3개의 행동을 관측에 포함합니다. - 값싼 서보는 처지고 늦게 반응하므로 서보 게인을 부드럽고 무작위로 설정합니다. - 컨트롤러가 보는 공의 상태에 추정기 출력과 비슷한 노이즈를 넣고, 속도는 로봇이 쓰는 것과 같은 유한 차분 필터로 계산합니다. 정확한 속도로 학습한 컨트롤러는 카메라에서 얻은 속도로는 완전히 실패했습니다.

통하지 않은 방법도 적혀 있습니다. 손목 이미지를 입력으로 하는 엔드투엔드 CNN 정책을 PPO 컨트롤러로부터 행동 복제와 DAgger로 학습시켰더니, 시뮬레이션에서는 괜찮았지만 실제 공은 거의 보지 못했습니다. 단순한 색 검출기와 작은 추정기가 이를 대신했습니다.

실제 팔에서

하드웨어는 SO-101 팔로워 팔, 손목 카메라, 그리퍼에 물린 일반 탁구 라켓, 주황색 공입니다. 팔은 LeRobot의 SO-101 follower 및 Feetech 드라이버로 구동됩니다. README에는 실제 팔에서 중요했던 점이 정리되어 있습니다.

- 서보 P 게인은 LeRobot 기본값 16이 아닌 32로 합니다. 16에서는 팔이 처지고 4~7도 명령을 무시합니다. 실행 스크립트가 이 값을 설정합니다. - 홈 자세를 수평으로 맞춥니다. 몇 도만 기울어도 공이 굴러떨어지는데, 정책에 적분 동작이 없기 때문입니다. 각 팔은 포함된 가이드 스크립트로 자신의 홈 자세를 기록합니다. - 라켓은 부하 기준(약 10%)으로 조이고, 그리퍼를 완전히 닫으라는 명령은 절대 내리지 않습니다. 스톨이 일어나면 Feetech 과부하 보호가 작동해 전원을 껐다 켤 때까지 모터가 버스에서 빠집니다. - 포함된 스크립트로 자신의 지연을 측정합니다. 컨트롤러는 33 ms 단위의 추가 스텝 0~4개에 맞춰 학습되었습니다.

README는 또한 팔이 스스로 움직이고 스크립트가 끝난 뒤에도 전원이 켜진 상태로 남는다고 경고합니다.

결과와 공개된 것

제작자는 무작위화된 시뮬레이션에서 에피소드의 97.5%가 10초 동안 균형을 유지했고, 카메라 파이프라인 전체를 거친 시뮬레이션에서는 120번 중 113번, 그리고 실제 팔에서도 균형을 잡는다고 보고합니다. 학습된 컨트롤러와 추정기의 가중치가 저장소에 있으므로 팔 없이도 시뮬레이터에서 파이프라인 전체를 시험해 볼 수 있습니다. 컨트롤러 학습에는 약 2900만(29M) 스텝, 노트북에서 약 2시간이 걸렸습니다(시뮬레이션에 CPU 6코어, 네트워크에 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

이 웹사이트는 JavaScript가 필요합니다. 오픈소스 로봇 프로젝트를 탐색하려면 JavaScript를 활성화하세요.