Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 32 additions & 28 deletions 2ARM_ROBOT/README.md
Original file line number Diff line number Diff line change
@@ -1,16 +1,38 @@
# sweepick (TJJ) | 이동형 양팔 청소 로봇의 조작·학습·Sim-to-Real
# SWEEPICK | 이동형 양팔 청소 로봇의 조작·학습·Sim-to-Real

DAPIER 교육에서 진행하는 팀 프로젝트다. 바닥의 물체를 보고(OS30A RGB-D) 접근해 집고, 지정한 곳에 놓은 뒤 그 자리를 청소하고 충전대로 돌아가는 저비용 모바일 매니퓰레이터 **sweepick**을 만든다. 2026-10-16부터 이 팀의 범위는 **상체(SO-101 양팔·그리퍼·손목 카메라·작업공간 카메라)의 팔 선택·집기·운반·놓기**이고, 이동 베이스·Visual SLAM·도킹은 다른 팀이 맡는다. 상체는 베이스를 직접 움직이지 않고 정지 요청만 보낸다. 초기 박스·신발 과제는 개발 이력으로만 남겼다.
청소 경로의 작은 물체를 인식해 옮기고, 확보된 공간을 청소하는 저비용 모바일 매니퓰레이터다. DAPIER 팀 프로젝트에서 SO-101 양팔·카메라·이동 베이스와 학습 기반 제어를 연결했다. 물체 이동·청소·저전력 복귀·도킹·충전은 시뮬레이션 구현을 완료했고, 실물 기능을 통합하고 있다.

**전형주 주 담당: 모방학습 · 시뮬레이션 · Sim-to-Real.** Visual SLAM의 설계·구현·코드 작업에도 협업 참여했다. 이동 모듈의 주 담당은 팀원 `shouttt1320`이다.
**전형주 주 담당: 모방학습·시뮬레이션·Sim-to-Real·데이터 검증. Visual SLAM도 직접 설계·구현했다.** 프로젝트 전체 실험 결과는 담당 경험과 연결해 설명하되, 외부 ACT·RoboTwin 구현과 팀 공동 자료의 저작 범위는 구분한다.

[전체 포트폴리오](../README.md) · [sweepick 실행 소스(검토 브랜치)](https://github.com/Alpenj/DAPIER/tree/pro/sweepick-review-20261015/2ARM_ROBOT/sweepick) · [실험과 문제 해결 기록](docs/RESEARCH_SUMMARY_KO.md) · [이동·도킹 협업 코드](https://github.com/shouttt1320/Dapier_project_visaul_slam)
[포트폴리오·이력서](https://julianjeonresume.netlify.app/) · [CUSTOM ACT V1 상세](docs/CUSTOM_ACT_V1_KO.md) · [그림·영상](https://julianjeonresume.netlify.app/research/custom-act-v1/) · [이전 조작 연구](docs/RESEARCH_SUMMARY_KO.md) · [실물 검토 브랜치](https://github.com/Alpenj/DAPIER/tree/pro/sweepick-review-20261015/2ARM_ROBOT/sweepick)

## 풀고 있는 문제
## CUSTOM ACT V1: 데이터에서 실행까지

로봇이 물체에 닿았다는 사실만으로 들어 올릴 수 있는 것은 아니었다. 파지 이후의 압축량, 계획한 손끝 위치와 실행 후 위치의 차이, 시뮬레이션 접촉 설정에 따른 미끄러짐을 나누어 조사했다. 카메라가 본 위치를 관절 명령으로 옮기는 과정에서는 좌표계, 영점, 단위와 관측 시각도 함께 확인했다.
학습 손실만으로 로봇의 작업 완료를 판단하기 어려웠다. 시연을 어떤 기준으로 나누었는지, 정책이 어떤 관측을 받는지, 예측한 행동 청크가 실제 명령으로 어떻게 이어지는지를 함께 기록했다.

학습 쪽에서는 시연을 저장하는 것에서 끝내지 않고, 측정 상태와 전송 명령의 의미, 에피소드 경계, 전처리와 행동 묶음의 실행을 연결하는 데 집중한다. 모델의 학습 실행, 보류 데이터 예측과 폐루프 조작 성공은 별도로 평가한다.
| 단계 | 수행 내용 | 확인한 결과 |
|---|---|---|
| 데이터 수집 | 원본 113개 궤적의 동작을 유지하며 손목 RGB의 물체색·배경·테이블 텍스처·조명을 5개 외형으로 구성. 관측·상태·명령·시각 정합 확인 | 565개 뷰. 궤적 train/val/test=59/29/25, 뷰=295/145/125. 같은 궤적의 외형은 동일 분할 유지 |
| 학습 | 양손목 RGB·head PCD·관절 상태를 입력으로 사용하는 ACT 학습 | 200 epoch 완료. best validation은 epoch103, prior normalized L1=0.01553 |
| 추론 | 별도로 고정한 epoch30 체크포인트, temporal ensemble ON(k=0.01)으로 SIM 폐루프 평가 | 143개 위치 각 1회 중 132회 완료(92.3%). Test 위치는 27/31(87.1%) |
| 분석 | 예측 청크의 target 시점·가중치·관절 명령·실측값·phase·영상 연결 | 실패 11회 중 grasp/lift 7회, stow 4회. 청크 집계 결과를 저장 CSV에서 재구성해 확인 |

폐루프 완료 기준은 **30 mm 이상 Lift → Stow → 물리 2초 Hold**다. 외형은 랜덤화하고 물체 크기(40 mm)·yaw·물성·카메라 보정은 고정했다. 위 92.3%는 이 SIM 조작 평가의 관측값이다. 200 epoch 최종 모델의 폐루프 결과, 실물 성공률이나 전체 청소 시나리오 성공률과 합산하지 않는다.

## 실물 데이터와 실행기 연동

| 트랙 | 확인된 결과 | 지표의 의미 |
|---|---|---|
| Native 교사 콘솔, 10/18~26 | 120/198회 집기·이동·놓기·복귀 성공 판정 | 규칙 기반 교사 실행 기록 |
| 실물 데이터 ACT TJJ v2 | train46/val7 run, 관절 예측오차3.30°·epoch690 | 보류 데이터 예측 평가 |
| DAgger, 10/23~25 | 정체 후 교사 인계 교정 시연16개 | 정책이 방문한 상태의 교정 데이터 |
| 10/27 후속 연동 | ACT30·실물 실행기의 관측/절대행동·앙상블·STOP·feedback·파지 증거 경로 정합 확인 | 저장 기록·코드·정지 shadow 단계 |

10/08의 첫 무인 왼팔 집기, 10/18~23의 약170회 자동 교사 실행, 10/23의 ACT 접근 뒤 교사 마무리 기록은 위 후속 실험에 이르는 개발 이력이다. 10/26까지의 TJJ 실물 기록에서 ACT 단독 집기 완료는 관찰되지 않았다. 신규 CUSTOM ACT V1 SIM 폐루프 완료와 이 실물 기록을 혼동하지 않는다.

10/27의 새 IR2 정지 shadow는 양팔 각300 prefix를 30초 동안 확인했고 위반0·모터쓰기0이었다. 기록상 full180s=false/all_pass=false이므로 전체 검증 통과로 표시하지 않는다. 최신 후속 노트3개는 [연구 노트 입구](https://www.notion.so/4065788b5ed1810aaec9c710b0d9e288)(접근 권한 필요)에서 연결한다.

10/16 이후 상체 실행기는 이동 베이스를 직접 움직이지 않고 정지 요청을 전달한다. 모듈을 나눈 실행 구조는 본인의 Visual SLAM 직접 설계·구현 경험을 축소하는 의미가 아니다. 이동·도킹 공동 코드의 출처와 변경 이력도 유지한다.

## 구성과 코드 위치

Expand All @@ -28,7 +50,7 @@ native ACT 코드와 LeRobot을 재사용한 다른 학습 실험은 같은 구

### 장비 역할과 과거 설정

최근 조작 연구에서는 SO-101 양팔·PGripper, 작업공간용 OS30A RGB-D와 양손목 RGB를 다룬다. 이동 모듈의 Astra S는 Visual SLAM·도킹용 센서다. 두 RGB-D 센서의 역할을 섞지 않는다.
최근 조작 연구에서는 SO-101 양팔·PGripper, 작업공간용 OS30A RGB-D와 양손목 RGB를 다룬다. 이동 베이스 전면 중앙의 Astra RGB-D는 Visual SLAM용 별도 센서다. 두 RGB-D 센서의 역할을 섞지 않는다.

`main`의 [hardware_roles.json](config/hardware_roles.json)은 `effective_date=2026-09-03`이며 작업공간 카메라를 H201로 기록한 **당시 구성**이다. 일부 모델 README와 실습 절차도 그 배치를 설명한다. 이후 OS30A·PGripper 연구의 설명을 읽었다고 이 설정 파일이나 모든 실행기가 갱신된 것으로 해석하지 않는다. 실제 실행에는 해당 장치와 소스 revision의 설정·보정이 필요하다. 이 문서 갱신에서는 설정이나 런타임을 변경하지 않았다.

Expand All @@ -44,24 +66,6 @@ native ACT 코드와 LeRobot을 재사용한 다른 학습 실험은 같은 구

PR 상태 확인일은 2026-10-08이다. 연구 PR을 닫은 것과 `main`에 병합한 것은 다르다. 위 후보 결과는 고정 커밋의 연구 이력으로 남기며, 저장소를 새로 받은 사람이 기본 실행만으로 같은 결과를 얻는다고 안내하지 않는다.

## 10/08 이후 실물 진행

| 날짜 | 내용 | 상태 |
|---|---|---|
| 10/08 | 왼팔이 사람 도움 없이 블록을 집고·들고·내려놓은 첫 1회 (OS30A 깊이 → IK 접근 → 손목 영상 정렬) | 실물 1회 |
| 10/16 | 범위를 상체로 한정(베이스·SLAM·도킹은 다른 팀), 양팔 상체 상태기·팔 선택 | 코드 확인 |
| 10/18~23 | 자동 교사 약 170회 실행, 3-view(손목 RGB 2 + OS30A RGB-D)·양팔 측정값·실제 서보 명령 기록. 교사 판정 성공: 빨강 40 mm 큐브 약 50, 검정 30 mm 큐브 20, 검정 막대 22 | 실물 확인 |
| 10/23 | ACT가 블록 위까지 접근 → 정체 감지 → 교사 실행기가 집기~운반~놓기~복귀 마무리 | 실물 1회 |
| 10/23~ | 실물 시연 원본에서 학습 데이터를 다시 만들어 헤드 점군 + 양 손목 RGB 입력 ACT 재학습 | 진행 중 |

ACT 단독으로 집기를 끝낸 실물 결과는 아직 없다. 지금 관찰된 주된 실패는 ACT가 블록 위에서 내려가지 못하고 멈추는 것이다.

## 다음 검증

ACT가 블록 위에서 멈추지 않고 정렬·하강까지 이어 가는지를 실시간 shadow와 제한된 실물 실행으로 확인한다. 같은 데이터 분할·전처리에서 교사 실행기와 비교하고, ACT가 실제로 머무는 상태에서 교사가 교정한 기록(DAgger)을 학습에 더한다. 이동 베이스와의 결합에서는 도착·정지, 조작 결과와 후속 이동 조건을 확인한다.

청소·도킹까지 이어지는 전체 시나리오는 목표다. 개별 모듈의 코드, 한 번의 실물 성공이나 SIM 결과를 전체 과제 완료로 쓰지 않는다.

## 실행 안내와 과거 실습

> **`main` 코드의 실물 실행 상태 (2026-09-04 안전 고지 유지):** 이 저장소 `main`의 2ARM_ROBOT 실행기에서 physical motion과 camera streaming은 local safety integration(connected-endpoint identity binding, 독립 device-side watchdog, 카메라 serial/cryptographic binding 확인)이 끝날 때까지 비활성화돼 있다. sweepick 실물 실행은 검토 브랜치의 별도 실행기(단일 owner·정지 조건·현장 승인)로 하며, 그 코드는 아직 `main`에 병합하지 않았다.
Expand All @@ -70,6 +74,6 @@ ACT가 블록 위에서 멈추지 않고 정렬·하강까지 이어 가는지

초기 ROS 2 환경 점검, 합성 토픽 녹화, golden episode 생성과 장치 snapshot 절차는 [갱신 전 README의 고정본](https://github.com/Alpenj/DAPIER/blob/9b1138dbc462d293cbde62961d4d3534a71b2061/2ARM_ROBOT/README.md)에 보존했다. 그 문서의 신발·H201 구성과 실행 제한은 당시 소스의 안내다. 과거 실행 절차를 최신 장비 설정으로 대신하지 않는다.

외부 라이브러리와 자산은 각 폴더의 출처·라이선스를 따른다. 팀 이동 모듈의 전체 구현을 개인 단독 성과로 계산하지 않는다.
외부 라이브러리와 자산은 각 폴더의 출처·라이선스를 따른다. Visual SLAM의 직접 설계·구현 경험과 공동 저장소의 외부·팀 기여 이력을 함께 보존한다.

문서 갱신: 2026-10-24(프로젝트 소개를 sweepick 기준으로 바꾸고 10/08 이후 실물 진행 추가). 런타임·물리 파라미터·보정값·테스트·의존성은 변경하지 않았다.
문서 갱신: 2026-10-27. 새 CUSTOM ACT V1의 수집·학습·SIM 평가·분석을 추가하고 기존 실물·코드·후보 PR 기록은 보존했다. 런타임·물리 파라미터·보정값·테스트·의존성은 변경하지 않았다.
89 changes: 89 additions & 0 deletions 2ARM_ROBOT/docs/CUSTOM_ACT_V1_KO.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
# CUSTOM ACT V1 | 관측과 행동이 이어지는지 확인한 기록

SWEEPICK에서 학습 정책을 적용할 때, 낮은 예측 손실만으로는 물체를 끝까지 옮기는지 알 수 없었다. 시연의 외형을 늘리는 단계부터 분할, 모델 학습, 폐루프 실행과 실패 분석까지 같은 기록으로 연결했다.

**전형주 주 담당: 모방학습·시뮬레이션·Sim-to-Real·데이터 검증. Visual SLAM도 직접 설계·구현했다.** 프로젝트 전체 실험 결과는 담당 경험과 연결해 설명하되, 외부 ACT·RoboTwin 구현과 팀 공동 자료의 저작 범위는 구분한다.

[프로젝트](../README.md) · [그림·영상으로 보기](https://julianjeonresume.netlify.app/research/custom-act-v1/) · [Notion 연구 노트](https://www.notion.so/4065788b5ed1810aaec9c710b0d9e288)(접근 권한 필요) · [이전 접촉·계획 연구](RESEARCH_SUMMARY_KO.md)

## 1. 데이터 수집 — 동작을 보존하고 외형을 바꿨다

원본113개 궤적에 각4개 외형을 더해 총565개 뷰를 구성했다. 같은 상태·관절 동작에서 손목 RGB의 물체색, 테이블·벽 텍스처와 조명을 다시 렌더링했다. 565개는 서로 다른 물리 시연565회가 아니라 113개 동작의 외형5종이다.

| 분할 | 원본 궤적 | 외형 뷰 |
|---|---:|---:|
| Train | 59 | 295 |
| Validation | 29 | 145 |
| Test | 25 | 125 |
| 합계 | 113 | 565 |

관절 상태·명령·시각·물체 pose와 head depth/PCD가 같은지 검사했다. 한 궤적의 외형 변형은 같은 분할에 묶어, 같은 동작이 학습과 평가에 나뉘어 들어가지 않게 했다. 정책 입력은 관절q·head PCD·양손목 RGB이며, 정답 행동·phase·물체 정답pose를 추론 입력에서 제외했다.

![동일 궤적의 다섯 외형](https://julianjeonresume.netlify.app/assets/custom-act-v1/collection-appearances.png)

## 2. 학습 — 학습 곡선과 작업 완료를 따로 확인했다

shared wrist ResNet18+1×1 projection, hidden256, chunk20, state/action12, KL10, prior z=0 구성으로200 epoch 학습을 완료했다. epoch1~3은 batch4, 이후는 batch32였으며 epoch63 이후 재개한 기록을 포함한다.

| 지표 | 기록 |
|---|---:|
| Best validation prior normalized L1 | 0.01553423676 (epoch103) |
| Epoch200 validation prior normalized L1 | 0.01951522965 |

최저 검증 손실은 epoch103에서 나왔다. 이200 epoch 실행의 최종·best 모델은 원본 묶음에서 폐루프 평가되지 않았다. 다음 절의 작업 완료율은 별도로 고정한 epoch30 체크포인트의 결과다.

![학습·검증 손실과 재개 구간](https://julianjeonresume.netlify.app/assets/custom-act-v1/training-curves.png)

## 3. 추론 — 고정한 모델로143개 위치를 실행했다

epoch30 체크포인트와 temporal ensemble ON(k=0.01), prior z=0을 고정해143개 위치를 각1회 평가했다. 완료 기준은 **Lift≥30mm → measured Stow(오차0.025rad 이내) → 상승·접촉 상태를 물리2초 유지**다.

| 위치 구분 | 완료/시도 | 관측 완료율 |
|---|---:|---:|
| Train 영역 | 76/80 | 95.0% |
| Validation 영역 | 29/32 | 90.6% |
| Test 영역 | 27/31 | 87.1% |
| 전체 | 132/143 | 92.3% |

블록색·테이블/벽 텍스처·조명을 랜덤화했다. 물체 크기40mm·yaw·물성·카메라 보정은 고정했다. Test 결과로 평가 체크포인트를 바꾸거나 선택하지 않았고 Test expert HDF5는 학습에 사용하지 않았다. Train영역80개는 학습에 쓴59개와 그 외21개를 포함하며, 그 결과는 각각59/59와17/21이다.

143개 위치 각1회의 SIM 조작 평가이므로 이 값을 실물 성공률·반복 신뢰도·양팔 동시 조작 성능이나 전체 이동·청소·충전 과제의 완료율로 확대하지 않는다.

- [143개 위치별 공개 결과 CSV](evidence/custom_act_v1_20261027_positions.csv)
- [조건·집계 공개 요약 JSON](evidence/custom_act_v1_20261027_summary.json)
- [작업공간 분포](https://julianjeonresume.netlify.app/assets/custom-act-v1/evaluation-workspace.svg)
- [Test mid00_01 대표 SIM 영상](https://julianjeonresume.netlify.app/assets/custom-act-v1/sim-test-mid00_01.mp4)

## 4. 분석 — 예측 청크가 명령이 되는 과정을 추적했다

실패11회는 grasp/lift7회와 stow4회로 나눴다. query 시점, 예측 horizon, 실제 target 시점, 집계 가중치, 전송 명령, 실측 관절, phase와 영상을 함께 읽었다. 저장된17,280개 예측 행·15,000개 후보 행·864개 실행 행을 재계산했을 때 target정렬 오류는0, 가중치식 최대오차는1.85×10⁻⁸, 출력 재구성 최대오차는1.84×10⁻⁷rad였다. 저장 데이터의 일관성 검사이며 새 실행 결과는 아니다.

Val mid00_00·seed701000000의 단일 비교에서는 같은 epoch30의 ON이 Lift→Stow→Hold를 마쳤고, 기존 first-action-only OFF는8.4초 관찰 후 중단됐다. 이 OFF는 원본 ACT의 청크 순차 실행과 다른 방식이다. 원본 sequential OFF는 실행하지 않았으므로, 중단을 완료 실패로 세거나 앙상블의 일반적인 성능 향상으로 단정하지 않는다.

![명령을 생성하는 실행 방식 비교](https://julianjeonresume.netlify.app/assets/custom-act-v1/control-schedules.png)

## 실물 연동과 후속 기록

SWEEPICK의 물체 이동·청소·저전력 복귀·도킹·충전 흐름은 시뮬레이션에서 구현했고 실물 통합을 진행하고 있다. 이 전체 흐름의 구현 여부와 본문의 ACT 조작 완료율은 별도 근거다.

기존 실물 트랙은 Native 교사120/198회(10/18~26), ACT TJJ v2 train46/val7 run·관절 예측오차3.30°(epoch690), DAgger 교정 시연16개(10/23~25)를 유지한다. 각각 교사 작업 판정·오프라인 예측·교정 데이터로 의미가 다르다.

10/27 후속 노트는 ACT30과 실물 실행기의 관측·12축 절대행동 계약, 앙상블·STOP·feedback·파지 증거 경로를 정리한다. 저장 앙상블 비교와 코드 검사는 새 실물 파지 결과가 아니다. 새IR2는30초 정지 shadow, 양팔 각300 prefix, 위반0·모터쓰기0이며 full180s=false/all_pass=false다. 이전180초 G4 UNKNOWN 기록도 그대로 보존한다.

- [SIM+실물 공동 학습·실행기 정합](https://www.notion.so/4065788b5ed1818f9df0dd925ddecff4)
- [절대행동·STOP·feedback·파지 증거 경로](https://www.notion.so/4065788b5ed18153ba4cde8a49e0c1f1)
- [IR2 정지 shadow 읽기 기록](https://www.notion.so/4065788b5ed181329e50ed6501a5942a)

## 출처와 재검증 범위

사용자가 제공한 `CUSTOM_ACT_V1_standalone_20261027.html`을 직접 읽었다. 내장 ZIP의 보고서·원본 시도 CSV143행·에피소드 JSON143개·학습 곡선과 로그·청크 비교 CSV를 대조했다. 원본 HTML SHA256은 다음과 같다.

`b0d3b524f57b6ae4e2f01c2533bab8c0ca90a532c99112a13bdfdf9092fa599f`

평가 epoch30 체크포인트 SHA256:

`032aab674bdbe83a3e75ebf793fc98026ea0c382f994f40ef05f5c4730ab0cf7`

공개 CSV·JSON은 평가 조건과 결과에 필요한 필드만 골랐다. 원시 데이터·학습 tensor·개인 장치 경로는 포함하지 않는다. 공식 ACT/RoboTwin 등 외부 구현의 출처·라이선스는 기존 코드와 원자료에 따른다. 이 문서는 담당 경험과 프로젝트 실험을 연결한 연구 요약이며 공동 데이터·외부 라이브러리 전체의 단독 저작을 주장하지 않는다.

갱신2026-10-27. 저장 기록을 재계산·대조했으며, 이 문서 작업 중 시뮬레이터나 실물 로봇을 새로 실행하지 않았다.
Loading
Loading