Object Detection¶
examples/object-detection.ipynb는 Line Tracing의 골격을 그대로 두고 색 필터를
신경망으로 교체합니다. 사전학습된 YOLOv8 모델이 카메라 영상에서 물체를 찾고,
차는 그중 하나를 쫓아갑니다 — 타깃 클래스(기본: sports ball)의 가장 큰 검출을 향해
조향하고, 가까워지면 멈추고, 놓치면 제자리에서 돌며 탐색합니다. 인식 → 제어 루프는
같고, '보는 일'만 달라졌습니다.
모델은 예제에 동봉되어 있습니다(examples/assets/object-detection/models/): COCO 80
클래스로 학습된 YOLOv8n을 로봇 CPU에서 가장 빠른 백엔드인 NCNN으로 내보낸
것입니다. 다운로드도, GPU도 필요 없습니다.
노트북 구성¶
| 셀 | 하는 일 |
|---|---|
| 1. Setup | camera()·drive() 헬퍼와 스냅샷 한 장 |
| 2. Detect | 모델 로드, 80개 클래스 이름 출력, 한 프레임 검출 후 박스 그리기 |
| 3. Chase | 검출 박스가 오버레이된 실시간 웹 뷰, 이어서 초당 약 10회의 추격 루프 |
실행¶
examples/object-detection.ipynb를 열고 Python 3 (PhysiCar AI) 커널을 선택하세요.- 셀을 위에서 아래로 실행하세요. 추격 셀은 ⏹ (인터럽트) 를 누를 때까지 돌고, 그때 차를 대신 멈춰 줍니다.
app.physicar→ MYAPP 탭에서 모든 검출이 박스로 표시되고 타깃이 강조된 카메라를 지켜보세요. 타깃 클래스의 물체가 실제로 월드에 있어야 합니다 — 기본sports ball이라면 축구공.
추격 원리¶
- 모델에 타깃 클래스만 요청합니다(
classes=[...]) — 비슷한 물체 옆에서도 타깃이 결과에서 밀려나지 않습니다. - 가장 큰 박스 → 그 중심의 화면 중앙 대비 오프셋 → 비례 조향(
STEER_GAIN30). - 속도는 전부 아니면 전무: 박스가 프레임 높이의
NEAR_HEIGHT(45%)를 채울 때까지SPEED0.8 m/s — 채우면 도착으로 보고 멈춥니다. - 놓쳤을 때? 한 프레임 깜빡임은 놓친 게 아닙니다 —
LOST_TIMEOUT(1.0초)이 지나야 제자리에서 돌며 탐색합니다. - 신뢰도는 일부러 낮게(
conf=0.15) — 멀리 있는 작은 물체도 잡히게.imgsz=320은 약간의 정확도를 내주고 프레임당 연산을 약 4배 아낍니다.
고쳐보기¶
TARGET— 2번 셀이 출력하는 80개 클래스 이름 중 아무거나.person으로 바꾸면 실물 키트에서 follow-me 로봇이 됩니다.NEAR_HEIGHT(0.45) — 얼마나 가까이 가서 도착 판정을 할지.conf(0.15) — 배경의 엉뚱한 물체가 잡히면 올리세요.SPEED/STEER_GAIN— Line Tracing과 같은 P 제어 감각.
주의
- 아무것도 검출되지 않는다면? 타깃 클래스가 실제로 화면에 보여야 합니다 — 루프를 의심하기 전에 2번 셀의 단일 프레임 테스트부터 확인하세요.
- 모델 로드 직후 첫 프레임들은 느립니다 — 몇 초 지나면 안정됩니다.
- 5000 포트가 사용 중이면 웹 뷰만 건너뜁니다(안내 출력) — 추격은 그대로 동작합니다.
🛠 미션: 시뮬레이터 뷰어에서 추격 중인 공을 드래그해 다른 곳으로 옮기고, 탐색
동작이 공을 다시 찾아내는 것을 지켜보세요. 그다음 TARGET을 바꿔 다른 것을 쫓아가
보세요.
더 알아보기
사전학습 모델 활용 → AI & LLM. 카메라와 센서 → 로봇 구조 & 센서. 로봇 엔드포인트 → Web API.