--- license: apache-2.0 library_name: lerobot pipeline_tag: robotics tags: - robotics - lerobot - act - so-arm101 - bimanual datasets: - danny1002/trash_gathering --- # ACT — trash gathering (SO-ARM101 bimanual) 책상 위 쓰레기를 빗자루와 쓰레받기로 쓸어 담는 SO-ARM101 양팔 ACT 정책. **동작 데모와 통합 파이프라인: [donghee-ai/PAI](https://github.com/donghee-ai/PAI)** ## ⚠️ 이 정책은 언어 비조건부(language-unconditioned)다 ACT 라 instruction 의 *내용* 으로 행동이 바뀌지 않는다. 어떤 문자열을 task 로 넣든 **학습된 단일 태스크(쓰레기 모으기)만** 수행한다. 그래서 통합 파이프라인에서는 LLM 이 "말대로 조종"하지 않고, **의도를 판별해 트리거만** 건다 — 사용자 입력이 쓰레기-모으기 의도일 때만 정책을 구동하고, 그 외에는 대화 응답만 한다. 자세한 구조는 [PAI 저장소](https://github.com/donghee-ai/PAI)를 참고. ## 구성 | 항목 | 값 | |---|---| | 정책 | ACT (VAE 인코더 4층, `dim_model=512`, `n_heads=8`) | | 비전 백본 | ResNet18 (ImageNet1K_V1 사전학습) | | 액션 청크 | `chunk_size=100`, `n_action_steps=100` | | 관측 | `observation.state`, `observation.images.left_front`, `observation.images.left_wrist` | | 출력 | `action` (양팔 관절) | | 로봇 | SO-ARM101 bimanual (`bi_so_follower`) | ## 학습 | 항목 | 값 | |---|---| | 데이터셋 | [`danny1002/trash_gathering`](https://huggingface.co/datasets/danny1002/trash_gathering) | | steps | 20,000 | | batch size | 32 | | learning rate | 1e-5 | | seed | 1000 | | LeRobot | v0.5.2 | ## 사용 ```bash # 가중치만 받기 (토큰 불필요) curl -fL -o model.safetensors \ https://huggingface.co/danny1002/act-trash-gathering/resolve/main/model.safetensors ``` LeRobot 롤아웃에서는 `--policy.path` 로 이 디렉터리를 가리키면 된다. 카메라 관측키는 `bi_so_follower` 가 left_arm 의 카메라 dict 키(`front`/`wrist`)에 `left_` 접두어를 붙여 `left_front` / `left_wrist` 로 만든다. 전체 실행 절차(Docker · udev 포트 고정 · 3창 파이프라인)는 [PAI 런북](https://github.com/donghee-ai/PAI/blob/main/docs/RUNBOOK.md)에 있다. ## 한계 - **단일 태스크 전용.** 언어로 다른 작업을 시킬 수 없다. - 학습 환경(책상 배치·조명·카메라 각도)에서 벗어나면 성능이 떨어진다. - 카메라 2대(front/wrist) 관측을 전제한다. 관측 구성이 다르면 그대로 쓸 수 없다. - 제어 주파수는 학습 시 25Hz. 낮추면 동작이 그만큼 느려진다. ## 하드웨어 Jetson AGX Thor (aarch64, CUDA 13 / sm_110) + SO-ARM101 양팔 + UVC 웹캠 2대에서 수집·학습·검증했다.