Skip to content

chore: sweepick 양팔 소스를 기능별로 정리 - #73

Draft
Alpenj wants to merge 1 commit into
mainfrom
chore/sweepick-repository-layout
Draft

Alpenj wants to merge 1 commit into
mainfrom
chore/sweepick-repository-layout

Conversation

@Alpenj

@Alpenj Alpenj commented Oct 8, 2026

Copy link
Copy Markdown
Owner

현장 native 양팔 소스가 공개 main에 포함되지 않아 실행 진입점과 공통 제어기, SIM·학습 코드의 경계를 찾기 어려웠습니다. 현재 로컬 고정 소스를 2ARM_ROBOT/sweepick/src/sweepick의 기능별 경로로 정리하고, 기존 module/CLI 이름은 동일 구현을 가리키는 얇은 호환 경계로 유지합니다.

이 PR은 구조·명명·참조 정리입니다. 현재 현장 통합의 선행조건으로 삼지 않으며 main 병합이나 runtime 배포는 포함하지 않습니다.

구조와 diff

2ARM_ROBOT/sweepick/
├── README.md / pyproject.toml
├── src/sweepick/
│   ├── perception/     # OS30A·손목·feedback 관측
│   ├── manipulation/   # RECEIVE planner/dispatch·로컬 후단 owner
│   ├── control/        # 단일 run/grip·servo·Jaw·mapping·collision
│   ├── recording/      # 3-view·양팔 episode 기록
│   ├── learning/       # 실제 기존 학습/추론 위치 안내, 구현 복제 없음
│   └── integration/    # session·snapshot·상태·후단 wrapper
├── src/sweepick_*.py   # 기존 이름의 호환 alias
├── tests/
└── docs/               # 전체 tree·이관표·source SHA·검증 범위

운영 모듈 28개를 기능/역할 이름으로 정리했습니다. executor·servo·Jaw는 양팔 공통 한 구현이며, 대형 파일 분해나 새 controller는 없습니다. 이전 native source는 base main에 없었으므로 diff에는 신규 소스로 나타납니다. Git에서 추적되던 교육·ROS·SIM·vendor 영역은 이동하지 않았습니다.

2ARM_ROBOT root rename은 ROS·resource·CI 경로 약 160곳에 영향을 주므로 보류합니다. shoe_sorting_data와 연구/모델 package identity는 유지합니다. 기존 공개 학습기와 외부 runtime ACT를 같은 구현으로 표시하지 않습니다.

소스 대응과 병합 주의

공개 기준은 main@0238bbbcfa2346ce3c97e126e6e26f0467566c37입니다. 로컬 통합 담당자의 작업 중지 확인 뒤 현재 native 파일을 읽기 전용으로 고정했습니다. work6의 RECEIVE 파일 7개 중 5개는 로컬 pin과 SHA가 같고, concrete_bindings/full_episode 2개는 다릅니다. 현재 로컬 entrypoint가 실제 사용하는 고정본을 채택했으며 서버 사본을 최신으로 가정하지 않았습니다.

현재 로컬 API의 scope=full|observe와 유한 run/grip, 소유권·STOP·support 계약을 보존합니다. 기본 RECEIVE는 canonical package를 사용하며 명시적인 SWEEPICK_RECEIVE_DIR override에서는 planner와 gear helper가 같은 고정본을 사용합니다. FullEpisodeHandoff의 호출 완료와 실제 Owner/Release/Downstream 제어 결합은 구분합니다.

통합 담당자가 최신 파일에 합칠 때는 source SHA·함수/API를 다시 대조하고 path/reference 변경만 병합해야 합니다. 옛 executor/patch를 덮어쓰거나 실행 중 session의 source를 교체하지 않습니다. 기존 기록의 SHA와 checkpoint는 변환하지 않습니다.

검증

  • 기존 무장치 기준 시험: 변경 전 34 PASS / 변경 후 34 PASS. 완료된 owner/STOP 반례와 원본-only archive 검사 5개는 명시적으로 제외했습니다.
  • fresh Python 3.12 venv에서 선언 의존성 + pytest만 설치한 CI 동일 검사: 14 PASS, 0 skip.
  • 독립적인 old/new alias 24쌍, 지원 현장 runtime alias 3쌍의 동일 module identity 확인. run/grip/Jaw와 고정된 제어 함수/class의 AST·profile bytes 확인.
  • session/executor/snapshot-adapter의 canonical/legacy help 6개 exit 0. callback/controller는 실행하지 않았습니다.
  • tabletop_replay.json·desk JSON을 포함한 공개 작은 자산 7개 SHA 확인. 새 자산 누락을 skip으로 숨기지 않았습니다.
  • viewer는 기존 script-only이며 import 즉시 HTTP server를 시작하므로 실행하지 않았습니다.
  • git diff --check, 문서 링크, staged source SHA, 개인 설정·작업 기록·build 출력 제외 확인.

저장 SIM 두 성공 사례, run14, 왼 C, 완료된 상태전환 반례, ACT 학습/forward, 장치 read/write와 새 SIM 탐색은 실행하지 않았습니다. 현장 active 파일/장치/원본 기록/checkpoint는 보존합니다.

real_execution_ready=false, motor_commands_sent=0입니다. 오른 REAL profile·support·held pose의 없는 근거는 MISSING이며 합성 support를 실물 증거로 보고하지 않습니다. 현장 teacher/IK/ACT runtime은 main SIM과 다른 revision이므로 외부 고정 source boundary로 남깁니다. compiled scene, SDK, raw dataset·optimizer·checkpoint와 private 설정을 업로드하지 않습니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant