작업일지 — 2026-06-16 (eye-in-hand 카메라 + 색상 검출)
집게에 카메라를 새로 달아 "물건 자체를 인식해 팔이 알아서 정렬·집기"(비주얼 서보잉)로 방향 전환한 날.
1. 오늘 한 일 요약
| # |
작업 |
결과 |
| 1 |
그리퍼 교체 후 값 재조정 (닫기 50→20, 집기손목 155→150) |
✅ |
| 2 |
놓기 손목 더 숙임 (고리 걸림 대응, 110→90) |
✅ |
| 3 |
주차 기준점 재측정 → park.py 갱신 (Z 236→234, yaw -2.0→-2.2) |
✅ |
| 4 |
카메라를 집게 안쪽에 장착 (eye-in-hand) |
✅ 연결확인 |
| 5 |
카메라 연결/토픽 확인 (16Hz로 향상) |
✅ |
| 6 |
색상(주황) 검출 구현·테스트 (color_detect.py) |
✅ 검출 안정 |
| 7 |
비주얼 서보잉 노드 작성 (visual_pick.py) |
🟡 미완 |
| 8 |
Claude Code용 전체 인수인계 문서 작성 |
✅ HANDOFF_for_claude_code.md |
2. 방향 전환 — 왜 카메라를 집게에 달았나
- 기존: ArUco 마커 보드 + 주차로 위치 맞춤 → 팔 고정각 집기
- 문제의식: 터틀봇 주차 오차가 심해도 로봇팔이 알아서 회전해 잡게 하고 싶음
- 해결: 집게에 카메라(eye-in-hand) → 물건(주황) 보고 베이스 회전으로 정렬 → 집기
- 인식 방법: 색상 검출 채택 (YOLO는 라파이서 무겁고 학습 필요. 물건을 우리가 만드니 색으로 디자인)
3. 확정/변경된 값
그리퍼 (새 집게)
| 항목 |
구 |
신 |
| GRIP_CLOSE (닫기) |
50 |
20 |
| GRIP_WRIST (집기 손목) |
155 |
150 |
| PLACE_WRIST (놓기 숙임) |
110 |
90 |
주차 기준점 (park.py, 재측정)
| 축 |
값 |
노이즈 |
| X_TARGET |
-12.0 (±2) |
±0 |
| YAW_TARGET |
-2.2 (구 -2.0) |
±0.34 |
| Z_TARGET |
234.0 (구 236) |
±0 |
색 검출 (color_detect.py)
물건: 밝은 주황 테이프
HSV_LOW=(5,120,120), HSV_HIGH=(22,255,255), MIN_AREA=600
화면: 1640x1232, 중심(820,616)
검출 안정적 (cx/cy/area가 물건 따라 정확히 변함)
카메라 부호 실측 (eye-in-hand)
| 동작 |
결과 |
기울기 |
| 베이스(CH15) ↑ (145→150→155) |
cx ↑ (862→1017→1150) |
약 29 px/도 |
| 어깨(CH13) ↑ (110→120) |
area ↑ (563→821) |
약 26 /도 |
집기 위치 측정값 (어깨25/팔꿈치20/손목140/베이스150, 물건 가까움)
cx≈760, cy≈240, area≈35000
정중앙 베이스: arm 15 30 (별도 측정)
4. 핵심 난관 (현재 막힌 지점)
① 카메라가 앞(수평)을 봄 → 아래 물건 안 보임
- 집게 안쪽 카메라가 거의 수평. 물건은 12cm 낮음.
- 팔 든 대기자세에선 물건이 화면에 안 들어옴.
- 해결책(다음): 대기자세의 CH9(손목)을 숙여(값↓) 카메라가 아래 향하게. 지금까지 자세값은 다 "카메라 없을 때" 기준이라 카메라용으로 새로 잡아야 함.
② 물건이 집게에 닿아 cx 출렁임
- 집게 안쪽 카메라라 물건에 가까우면 물건이 집게에 닿아 팔과 같이 움직임 → cx ±600 출렁(로그 확인), area 160000까지 튐 → 정렬 불가.
- 해결책: 물건에서 떨어진 대기자세에서 cx 정렬 → 정렬되면 open-loop로 하강·집기(집기 중 카메라 무시). visual_pick.py가 이 구조로 작성됨.
사고 (소): 후면으로 팔 뻗는 비상 → stop으로 정리, 베이스 정중앙 30 재확정.
5. visual_pick.py 현재 상태 (미완)
구조: HOME → 대기자세 → cx만 베이스 정렬 → 1초유지 → 어깨25 하강 → 집게20 닫기 → 들기120
BASE_START=30, SH_GRIP=25, ELBOW=20, WRIST=140, ROLL=130
K_BASE=0.6/29, STEP_MAX=4, BASE_SIGN=-1, CX_TOL=25
★미측정/미해결: SH_WAIT(대기 어깨), 대기자세 CH9(손목 숙임), TARGET_CX
→ 대기자세에서 카메라가 물건 보게 CH9 숙이는 설계부터 다시 해야 함
6. 다음 할 일
- 대기자세 재설계 (핵심): CH9(손목) 숙여 카메라가 아래 물건 보게. 그 자세에서:
- 물건 화면에 들어오는 SH_WAIT(어깨)+CH9(손목) 조합 찾기
- 물건을 집기 위치에 두고 TARGET_CX(좌우 정중앙 cx) 측정
- visual_pick.py에 반영 → 정렬 테스트 (stop 준비)
- 정렬 후 하강·집기가 좌우 유지하는지 확인
- (정밀 거리) area 부정확 → ArUco PnP 또는 motion stereo(두 자세 시차) 검토
- 색검출 견고화 (배경 주황빛 오검출 시 HSV 상향/ROI)
7. 오늘 만든/수정한 파일
| 파일 |
내용 |
color_detect.py |
신규 — 색(주황) 검출 테스트 |
visual_pick.py |
신규 — eye-in-hand 색 서보잉 (미완) |
aruco_ros_node.py |
yaw 출력 추가 |
auto_pick.py |
GRIP_CLOSE20, GRIP_WRIST150, PLACE_WRIST90 |
park.py |
기준점 Z234/yaw-2.2 |
HANDOFF_for_claude_code.md |
신규 — Claude Code 전용 전체 인수인계 |
전송 필요(윈도우→라파이 scp): color_detect.py, visual_pick.py, auto_pick.py, park.py, aruco_ros_node.py
8. 한 줄 결론
eye-in-hand 색 검출까지 성공(주황 안정 검출, 16Hz). 비주얼 서보는 카메라가 앞을 봐서 대기자세서 물건을 못 보는 게 막힌 지점 — 다음엔 손목(CH9) 숙여 카메라 시야를 아래로 잡는 것부터