diff --git a/2ARM_ROBOT/README.md b/2ARM_ROBOT/README.md index 7aaff2ae..ffaf198c 100644 --- a/2ARM_ROBOT/README.md +++ b/2ARM_ROBOT/README.md @@ -1,11 +1,14 @@ # SWEEPICK | 이동형 양팔 청소 로봇의 조작·학습·Sim-to-Real -청소 경로의 작은 물체를 인식해 옮기고, 확보된 공간을 청소하는 저비용 모바일 매니퓰레이터다. DAPIER 팀 프로젝트에서 SO-101 양팔·카메라·이동 베이스와 학습 기반 제어를 연결했다. 물체 이동·청소·저전력 복귀·도킹·충전은 시뮬레이션 구현을 완료했고, 실물 기능을 통합하고 있다. +청소 경로의 작은 물체를 인식해 옮기고, 확보된 공간을 청소하는 저비용 모바일 매니퓰레이터다. DAPIER 4인 팀 프로젝트에서 SO-101 양팔·카메라·이동 베이스와 학습 기반 제어를 연결했다. 물체 이동·청소·저전력 복귀·도킹·충전은 시뮬레이션 구현을 완료했다. 실물에서는 **2026-11-01에 이동 → 양팔 ACT 집기 → B 지점 놓기 → HOME 전체 과정을 사람 개입 없이 처음 성공**했고, 최종 발표 기준 작업공간 안 물체별 10회 집기는 3cm 큐브 7회, 휴지 8회, 원형 고무 7회였다(물체별 추가 파인튜닝 없음). 청소·충전의 실물 연결과 연속 성공률 측정은 남아 있다. -**ACT는 팀원과 공동 개발·검증했다. 전형주 주 담당은 모방학습·시뮬레이션·Sim-to-Real·데이터 검증이며, Visual SLAM은 협업으로 참여했다.** 아래 ACT 수치는 공동 실험 결과다. 개인 담당 경험과 연결해 설명하되, 외부 ACT·RoboTwin 구현과 팀 기여의 출처도 함께 남긴다. +**전형주는 SIM 데이터·도메인 랜덤화, 실물 Sim-to-Real 통합, 베이스↔로봇팔 ROS 2 연동을 주도했다. ACT는 팀원과 공동 개발·검증했고, Visual SLAM은 협업으로 참여했다.** 영역별 참여도는 [저장소 첫 화면의 역할 표](../README.md#내-역할과-참여도)에 있다. 아래 ACT 수치는 공동 실험 결과다. 외부 ACT·RoboTwin 구현과 팀 기여의 출처도 함께 남긴다. -[포트폴리오·이력서](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) +[포트폴리오·실물 영상](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) · [이동 베이스(팀원 저장소)](https://github.com/shouttt1320/Dapier_project_visaul_slam) +![SWEEPICK 실물 시연. 로봇 시점의 헤드 깊이와 양손목 RGB로 본 ACT 집기](../docs/media/sweepick-real-act-cams.gif) + +실물 ACT 실행 · 왼쪽부터 헤드 깊이, 왼손목 RGB, 오른손목 RGB · [실물 전체 과정 영상](https://julianjeonresume.netlify.app/assets/video/sweepick-real-full-run.mp4) ![CUSTOM ACT V1의 대표 SIM 실행과 손목 RGB 관측](../docs/media/custom-act-sim.gif) @@ -100,4 +103,4 @@ PR 상태 확인일은 2026-10-08이다. 연구 PR을 닫은 것과 `main`에 외부 라이브러리와 자산은 각 폴더의 출처·라이선스를 따른다. Visual SLAM 협업 참여 범위와 공동 저장소의 외부·팀 기여 이력을 함께 보존한다. -문서 구성 갱신: 2026-10-28. 실험 기록 기준: 2026-10-27. 새 CUSTOM ACT V1의 수집·학습·SIM 평가·분석을 추가하고 기존 실물·코드·후보 PR 기록은 보존했다. 런타임·물리 파라미터·보정값·테스트·의존성은 변경하지 않았다. +문서 구성 갱신: 2026-11-03(11/01 실물 첫 전체 성공, 최종 발표 물체별 결과, 역할 표 반영). 그 전 갱신: 2026-10-28. 실험 기록 기준: 2026-10-27. 새 CUSTOM ACT V1의 수집·학습·SIM 평가·분석을 추가하고 기존 실물·코드·후보 PR 기록은 보존했다. 런타임·물리 파라미터·보정값·테스트·의존성은 변경하지 않았다. diff --git a/README.md b/README.md index 53926cba..4a74a440 100644 --- a/README.md +++ b/README.md @@ -1,45 +1,79 @@ -# DAPIER · Physical AI와 로봇 소프트웨어 +# DAPIER · SWEEPICK과 Physical AI 미니 프로젝트 -동국대학교 DAPIER 1기에서 배운 내용을 로봇 연동·시뮬레이션·학습 데이터 검증으로 확인하며 기록하고 있다. 대표 팀 프로젝트 **SWEEPICK**에서는 청소 경로의 작은 물체를 옮기는 양팔 모바일 매니퓰레이터를 만든다. +동국대학교 DAPIER 1기(2026.07.06–11.04, 656시간)에서 한 작업을 **최종 팀 프로젝트 SWEEPICK**과 **미니 프로젝트**, **교육 실습·학습 코드**로 나눠 정리한 저장소다. -![고정 epoch30 ACT의 Test mid00_01 시뮬레이션 실행. 왼쪽은 로봇 장면, 오른쪽은 손목 카메라 관측](docs/media/custom-act-sim.gif) +**[SWEEPICK](#sweepick-최종-팀-프로젝트)** · **[미니 프로젝트](#미니-프로젝트)** · **[교육 실습·학습 코드](#교육-실습과-학습-코드)** · **[포트폴리오·실물 영상](https://julianjeonresume.netlify.app/)** -CUSTOM ACT V1 대표 SIM 실행 · 고정 epoch30 · temporal ensemble ON · Test mid00_01 한 위치의 기록 · [원본 MP4](https://julianjeonresume.netlify.app/assets/custom-act-v1/sim-test-mid00_01.mp4) · [평가 조건과 143회 결과](2ARM_ROBOT/docs/CUSTOM_ACT_V1_KO.md) · [영상 출처](docs/media/README.md) +## SWEEPICK (최종 팀 프로젝트) -**[SWEEPICK 프로젝트](2ARM_ROBOT/README.md)** · **[교육·실습 안내](docs/LEARNING_GUIDE_KO.md)** · **[포트폴리오·이력서](https://julianjeonresume.netlify.app/)** +![SWEEPICK 실물 시연. 바닥의 휴지를 양팔로 집어 ArUco 마커가 붙은 상자까지 옮겨 놓는다(4배속)](docs/media/sweepick-real-run-4x.gif) -## 무엇을 했는가 +최종 발표 시연 영상의 4배속 GIF · [원본 MP4(62초)](https://julianjeonresume.netlify.app/assets/video/sweepick-real-full-run.mp4) · [로봇 시점 ACT 실행](https://julianjeonresume.netlify.app/#demo) · [영상 출처](docs/media/README.md) -ACT는 팀원과 **공동 개발·검증**했다. 나의 주 담당은 **모방학습·시뮬레이션·Sim-to-Real·데이터 검증**이며, **Visual SLAM은 협업으로 참여**했다. 외부 교육 코드와 라이브러리는 원본 출처 및 변경 이력과 함께 읽는다. +청소 전에 바닥의 물체를 집어 치우는 저비용 양팔 모바일 매니퓰레이터다. TurtleBot3 Waffle에 SO-101 양팔과 RGB-D·손목 카메라를 올렸다. 4인 팀 프로젝트이며, **2026-11-01에 사람 개입 없이 이동 → 양팔 ACT 집기 → 이동·놓기 → HOME 복귀를 처음 끝까지 성공**했다. + +### 내 역할과 참여도 + +| 영역 | 참여 | 한 일 | +|---|---|---| +| SIM 데이터·도메인 랜덤화 | **주도** | 143개 위치 시연 → 성공 113궤적 × 외형 5종 = 565뷰, 궤적 단위 Train/Val/Test 분할과 정합 검사 | +| 실물 Sim-to-Real 통합 | **주도** | Native 교사·DAgger 수집, 집게 부하로 집기 판정(잡음 23–26 / 빈손 6–8 tick), 빈손 자동 회수·재시도, 장애 원인별 처리 | +| 베이스↔로봇팔 ROS 2 연동 | **주도** | `/task/ack` · `/task/command`(1회 10cm·30° 제한) · `/sweepick/ready` · heartbeat 2Hz 핸드셰이크, 팔 작업 중 차체 잠금 | +| Custom ACT 학습·평가 | 공동 | 팀원 1명과 200 epoch 학습, 고정 epoch30 모델 143위치 폐루프 평가, 실패 11건 분류 | +| Visual SLAM·Nav2·도킹 | 협업 | 주 담당 팀원과 재접근 한도·정지 조건을 맞춰 집기 단계와 연결 | +| YOLO 인식 · Qwen 명령 | 팀원 담당 | — | + +주도는 설계·구현·검증을 맡은 영역, 공동은 팀원과 나눠 진행한 영역, 협업은 다른 담당자의 작업에 참여한 영역이다. 공동·협업 결과는 팀 결과로 적는다. + +### 결과 + +| 구분 | 결과 | 조건 | +|---|---|---| +| 실물 전체 과정 | 2026-11-01 첫 무인 전체 성공 | A 도착 → 양팔 ACT 집기 → B 이동·놓기 → HOME·토크 해제 | +| 실물 물체별 집기 | 3cm 큐브 7/10 · 휴지 8/10 · 원형 고무 7/10 | 최종 발표 기준, 작업공간 안 10회, 물체별 추가 파인튜닝 없음 | +| SIM 폐루프 | 132/143(92.3%) · Test 27/31(87.1%) | 고정 epoch30, temporal ensemble ON(k=0.01), 위치당 1회 | +| 시연이 없던 위치 | 17/21 완료 | Expert가 실패해 학습 데이터가 없던 Train 위치 | + +SIM 완료 기준은 **30 mm 이상 Lift → Stow → 물리 2초 Hold**다. 외형(물체 색·배경/테이블 텍스처·조명)은 랜덤화하고 물체 크기 40 mm·yaw·물성·카메라 보정은 고정했다. 청소·충전의 실물 연결과 같은 세팅의 연속 성공률 측정은 남아 있다. 선택의 이유와 한계는 [포트폴리오의 WHY·PAAR](https://julianjeonresume.netlify.app/#projects)에 정리했다. + +### 코드와 관련 저장소 + +| 위치 | 내용 | +|---|---| +| [2ARM_ROBOT](2ARM_ROBOT/README.md) | SWEEPICK 양팔 SIM·데이터 검증·실물 연동 코드와 실험 문서. [CUSTOM ACT V1 기록](2ARM_ROBOT/docs/CUSTOM_ACT_V1_KO.md) 포함 | +| [so101_ros2](so101_ros2/README.md) · [contracts](contracts/README.md) | C++ 관절·지역화 계약과 ROS 2 노드, 언어 간 데이터 계약 | +| [`pro/sweepick-*` 브랜치](https://github.com/Alpenj/DAPIER/branches/all?query=sweepick) | 실물 실행기 검토 브랜치(`main` 미병합) | +| [shouttt1320/Dapier_project_visaul_slam](https://github.com/shouttt1320/Dapier_project_visaul_slam) | 팀원 저장소(협업): 이동 베이스의 Visual SLAM·Nav2·Dual ArUco 도킹·YOLO/Qwen 바닥 물체 접근 | | 분야 | 사용 기술 | 코드·기록 | |---|---|---| | 언어·개발 환경 | Python · C++ · Linux(Ubuntu) · Git | [Python 연구 계층](2ARM_ROBOT/research/README.md) · [C++ 관절 코어](so101_ros2/dapier_so101_core/src/joint_model.cpp) | -| 로봇·비전 | ROS 2 · TF · URDF/RViz · OpenCV · RGB-D | [ROS 2 스택](so101_ros2/README.md) · [Visual SLAM·이동 모듈](https://github.com/shouttt1320/Dapier_project_visaul_slam) | -| 학습·시뮬레이션 | PyTorch · LeRobot/ACT · MuJoCo · RoboTwin | [CUSTOM ACT V1](2ARM_ROBOT/docs/CUSTOM_ACT_V1_KO.md) · [교육 코드](so101_imitation_learning/README.md) | -| 장치 연동·데이터 | SO-101/STS3215 · Serial · 관절 tick↔rad · state/action 검증 | [상태 조회 기록](2ARM_ROBOT/docs/evidence/dual_arm_read_only_summary_20260820.json) · [관측 출처 계약](2ARM_ROBOT/research/OBSERVATION_PROVENANCE.md) | +| 로봇·비전 | ROS 2 · TF · URDF/RViz · OpenCV · RGB-D | [ROS 2 스택](so101_ros2/README.md) · [관측 출처 계약](2ARM_ROBOT/research/OBSERVATION_PROVENANCE.md) | +| 학습·시뮬레이션 | PyTorch · LeRobot/ACT · MuJoCo · RoboTwin | [CUSTOM ACT V1](2ARM_ROBOT/docs/CUSTOM_ACT_V1_KO.md) | +| 장치 연동·데이터 | SO-101/STS3215 · Serial · 관절 tick↔rad · 서보 부하 | [상태 조회 기록](2ARM_ROBOT/docs/evidence/dual_arm_read_only_summary_20260820.json) | -## 핵심 결과 +## 미니 프로젝트 -| 확인한 내용 | 결과와 조건 | 근거 | -|---|---|---| -| 데이터 구성 | 원본 113궤적 × 외형 5종 = 565뷰. 같은 궤적의 외형은 같은 train/val/test 분할에 유지 | [데이터·분할](2ARM_ROBOT/docs/CUSTOM_ACT_V1_KO.md#1-데이터-수집--동작을-보존하고-외형을-바꿨다) | -| ACT 학습 | 200 epoch 완료. best validation은 epoch103, prior normalized L1 0.01553 | [학습 조건·곡선](2ARM_ROBOT/docs/CUSTOM_ACT_V1_KO.md#2-학습--학습-곡선과-작업-완료를-따로-확인했다) | -| 고정 모델 SIM 평가 | 별도로 고정한 epoch30으로 143개 위치 각 1회 중 **132/143, 92.3%** 완료. Test 위치 **27/31, 87.1%** | [위치별 CSV](2ARM_ROBOT/docs/evidence/custom_act_v1_20261027_positions.csv) · [조건·집계 JSON](2ARM_ROBOT/docs/evidence/custom_act_v1_20261027_summary.json) | -| 실패 분석 | 완료하지 못한 11회는 grasp/lift 7회, stow 4회. 예측 청크·관절 명령·실측값·영상을 대조 | [추론 실행 분석](2ARM_ROBOT/docs/CUSTOM_ACT_V1_KO.md#4-분석--예측-청크가-명령이-되는-과정을-추적했다) | -| 실물 연동 | Native 교사 120/198회, 실물 데이터 ACT TJJ v2 관절 예측오차 3.30°, DAgger 교정 시연 16개를 별도 기록. 10/27에는 모터 명령 없는 정지 shadow 확인 | [실물 트랙과 후속 연동](2ARM_ROBOT/README.md#실물-데이터와-실행기-연동) | +SWEEPICK과 별개로 진행한 작업이다. 각 폴더 README에서 교육 원본과 직접 구현·실험을 구분한다. -SIM 완료 기준은 **30 mm 이상 Lift → Stow → 물리 2초 Hold**다. 외형은 랜덤화하고 물체 크기 40 mm·yaw·물성·카메라 보정은 고정했다. 위 평가 모델은 200 epoch 최종 모델과 구분한다. 물체 이동·청소·저전력 복귀·도킹·충전 전체 흐름은 시뮬레이션에서 구현했고, 현재 실물 기능을 통합하고 있다. +| 프로젝트 | 구분 | 한 일 | 위치 | +|---|---|---|---| +| deepThinkCar 후보 평가·정지 조건 | 개인 실험 | 카메라·차선 상실 정지와 watchdog, 같은 분할 조향 MAE 14.93°→4.93° 확인 후 평가 범위가 좁아 실차 적용 보류 | [deepThinkCar_mini](deepThinkCar_mini/README.md) · [PR](https://github.com/JD-edu/deepThinkCar_mini/pull/1) | +| CardBench | 개인 실험 | 양팔 카지노 딜러 아이디어를 위한 소프트웨어 실험 | [casino_dealer](casino_dealer/README.md) | +| SO-101 sim-first G0–G1 | 개인 실험 | 한 팔 SO-101의 SIM 첫 학습·scripted pick 기록 | [dapier_sim_first](dapier_sim_first/README.md) | +| ROS 2 차동구동 로봇 | 실습 | URDF·물리 장면·TF·SLAM·Nav2를 한 흐름으로 확인한 Jazzy 워크스페이스 | [ros_dd_ws](ros_dd_ws/README.md) | +| TurtleBot3 SLAM·Nav2 | 실습 | Humble·Gazebo Classic 예제를 Jazzy·Gazebo Harmonic으로 옮기며 메시지·플러그인 차이 진단 | [turtlebot3_ws](turtlebot3_ws/README.md) | +| ROS 2 + Arduino 4축 로봇암 | 실습 | ROS 2 JointState를 Arduino 시리얼 명령과 servo 각도로 연결 | [ros_arm](ros_arm/README.md) | +| jdcobot100 시뮬레이션 | 실습 | 실제 장비 연결 전 관절·모델·컨트롤러·launch 흐름 확인 | [jdcobot100_sim](jdcobot100_sim/README.md) | -## 프로젝트와 교육 코드를 찾는 순서 +## 교육 실습과 학습 코드 -| 보고 싶은 내용 | 시작점 | +| 위치 | 내용 | |---|---| -| 로봇 구성, 구현 범위, 실행기와 연구 결과 | [SWEEPICK](2ARM_ROBOT/README.md) | -| 수집 → 학습 → 추론 → 분석의 조건과 근거 | [CUSTOM ACT V1 연구 기록](2ARM_ROBOT/docs/CUSTOM_ACT_V1_KO.md) | -| RGB-D·관절 데이터 계약, 정책 제안과 C++ 실행 경계 | [Python 연구 계층](2ARM_ROBOT/research/README.md) · [제어 계약](contracts/README.md) | -| 강의에서 배운 기술과 프로젝트 적용의 연결 | [DAPIER 교육·실습 안내](docs/LEARNING_GUIDE_KO.md) | -| 예전 장비·실험·실패·후보 브랜치 | [프로젝트 문서 목록](2ARM_ROBOT/docs/README.md) · [이전 조작 연구](2ARM_ROBOT/docs/RESEARCH_SUMMARY_KO.md) | +| [so101_imitation_learning](so101_imitation_learning/README.md) | PyTorch → Transformer → ACT → SO-101·MuJoCo를 이어 읽는 학습용 포크 | +| [so101](so101/README.md) | SWEEPICK 이전 한 팔 학습·접촉 모델·장치 연결 초기 기록 | +| [docs/LEARNING_GUIDE_KO.md](docs/LEARNING_GUIDE_KO.md) | 강의에서 배운 기술과 프로젝트 적용의 연결 | +| [docs](docs/) · [project-planning](project-planning/) | 하드웨어 안전 절차, 포크 통합 기록, 기획 자료 | ## 장비 없이 먼저 확인하기 @@ -51,12 +85,12 @@ cd DAPIER python3 -m unittest discover -s 2ARM_ROBOT/research/test -v ``` -2026-10-28에 기존 소스 그대로 Windows·Python 3.12에서 33개 테스트를 확인했다. ROS 2·MuJoCo 실행은 [연구 계층](2ARM_ROBOT/research/README.md)과 각 모듈의 환경 안내를 따른다. 실물 보정·제어는 [하드웨어 안전 절차](docs/HARDWARE_SAFETY_KO.md)를 먼저 확인한다. +2026-10-28에 Windows·Python 3.12에서 33개 테스트를 확인했다. ROS 2·MuJoCo 실행은 [연구 계층](2ARM_ROBOT/research/README.md)과 각 모듈의 환경 안내를 따른다. 실물 보정·제어는 [하드웨어 안전 절차](docs/HARDWARE_SAFETY_KO.md)를 먼저 확인한다. ## 기록을 읽을 때 - **SIM / MOCK / HW**를 구분한다. 테스트 통과, 예측오차와 실제 작업 완료는 서로 다른 결과다. -- 공개 `main`과 고정 후보·검토 브랜치의 구현 범위가 다르다. 결과에 연결한 revision과 실행 조건을 함께 확인한다. +- 공개 `main`과 검토 브랜치의 구현 범위가 다르다. 결과에 연결한 revision과 실행 조건을 함께 확인한다. - 교육 예제·외부 코드·자산의 출처는 각 폴더에 보존한다. 이전 학습 포크를 옮긴 내역은 [통합 기록](docs/FORK_MIGRATION_20260907_KO.md)에 있다. -DAPIER 교육: **2026.07.06–11.04 · 수강 중 · 총 편성 656시간**. 문서 정리 기준일: 2026-10-28. +문서 정리 기준일: 2026-11-03(최종 발표 결과와 역할 표 반영). 코드·런타임·보정값은 변경하지 않았다. diff --git a/docs/media/README.md b/docs/media/README.md index 78258b9e..b084cd43 100644 --- a/docs/media/README.md +++ b/docs/media/README.md @@ -7,6 +7,8 @@ | [custom-act-sim.gif](custom-act-sim.gif) | 고정 epoch30·temporal ensemble ON, Test mid00_01 한 위치의 기존 SIM 영상. 장면과 손목 RGB를 함께 표시한다. 원본 MP4 전체 7.2초를 너비640·8fps GIF로 변환했다. | | [collection-appearances.png](collection-appearances.png) | 같은 궤적에 적용한 외형 구성. 신규 물리 동작이나 독립 궤적 수로 세지 않는다. | | [training-curves.png](training-curves.png) | 200epoch 학습 곡선. 고정epoch30 폐루프 평가와 구분한다. | +| [sweepick-real-run-4x.gif](sweepick-real-run-4x.gif) | SWEEPICK 최종 발표 시연 영상(62초, 앞부분 편집·일부 2배속)을 4배속·320px·8fps GIF로 변환. 실물 로봇이 바닥의 휴지를 집어 ArUco 마커 상자까지 옮겨 놓는다. [원본 MP4](https://julianjeonresume.netlify.app/assets/video/sweepick-real-full-run.mp4) | +| [sweepick-real-act-cams.gif](sweepick-real-act-cams.gif) | 최종 발표 자료의 실물 ACT 실행 영상(6초). 헤드 깊이·왼손목 RGB·오른손목 RGB를 나란히 표시한다. 730px·8fps GIF. | [원래 연구 페이지](https://julianjeonresume.netlify.app/research/custom-act-v1/) · [원본 MP4](https://julianjeonresume.netlify.app/assets/custom-act-v1/sim-test-mid00_01.mp4) · [평가 조건·기여도](../../2ARM_ROBOT/docs/CUSTOM_ACT_V1_KO.md) diff --git a/docs/media/sweepick-real-act-cams.gif b/docs/media/sweepick-real-act-cams.gif new file mode 100644 index 00000000..2a3d48c2 Binary files /dev/null and b/docs/media/sweepick-real-act-cams.gif differ diff --git a/docs/media/sweepick-real-run-4x.gif b/docs/media/sweepick-real-run-4x.gif new file mode 100644 index 00000000..ad66df31 Binary files /dev/null and b/docs/media/sweepick-real-run-4x.gif differ