ROS 2 + Vision AI + Web/DB를 연결한 AMR 기반 무인 마트 자동화 시스템
Smart Mart AutoBot은 고객 추종형 스마트 카트와 자동 재고 보충 AMR을 결합한 무인 마트 시스템입니다.
TurtleBot4 AMR 2대를 각각 고객 추종용 Smart Cart와 재고 보충용 Restock Robot으로 운용하고, OAK-D RGB-D·YOLOv8·ROS 2/Nav2·Flask-SocketIO·SQLite를 하나의 서비스 흐름으로 통합했습니다.
단순 객체 탐지 프로젝트가 아니라 센서 → Vision → ROS 2 → Robot Control → Web → DB가 연결된 시스템 통합 프로젝트입니다.
프로젝트는 다음 문제를 해결하는 것을 목표로 했습니다.
- 고객이 무거운 카트를 직접 밀어야 하는 불편
- 영상 인식 오류에 따른 잘못된 구매 처리 가능성
- 매대 재고 소진을 사람이 확인해야 하는 문제
- Vision·Robot·Web/DB가 서로 다른 주기로 동작하면서 발생하는 시스템 병목
┌──────────────────────┐
│ Customer / Admin │
│ Web Dashboard │
└──────────┬───────────┘
│ Flask / SocketIO
↓
┌────────────┐
│ SQLite DB │
│ cart/stock │
└─────┬──────┘
│
┌────────────────┴────────────────┐
│ ROS 2 Core │
│ topics · state · async control │
└───────────────┬─────────────────┘
│
┌────────────────┴────────────────┐
↓ ↓
┌────────────────────────┐ ┌────────────────────────┐
│ AMR 1 · Smart Cart │ │ AMR 2 · Restock Robot │
│ OAK-D + YOLOv8 │ │ Nav2 waypoint driving │
│ Person Follow / Buy │ │ stock refill / return │
└────────────────────────┘ └────────────────────────┘
OAK-D RGB-D와 YOLOv8을 이용해 고객을 탐지하고, 거리 정보를 기반으로 약 0.65 m의 목표 거리를 유지하도록 P 제어 기반 추종을 구현했습니다.
상품이 카메라 ROI에 들어온 뒤 단발성 탐지 결과를 바로 구매로 처리하지 않고, 60프레임 연속 확인 조건을 적용해 순간 오검출에 따른 잘못된 구매 처리를 줄였습니다.
고객이 구매를 승인하면 장바구니와 매대 재고를 SQLite DB에 반영하고 고객·관리자 웹 화면에 동기화했습니다.
매대 재고가 소진되면 관리자 측에 상태를 전달하고, 승인 후 보충 AMR이 상품별 waypoint로 이동해 보충 작업 흐름을 수행하도록 구성했습니다.
Vision inference, ROS 2 제어, Flask/Web 통신은 처리 시간이 서로 달라 한 루프에서 실행하면 지연이 누적됩니다.
이를 분리하기 위해 멀티스레딩과 상태 기반 로직을 적용하고, 각 모듈 사이의 메시지 형식과 동작 조건을 정의해 개별 기능이 전체 시스템을 블로킹하지 않도록 구성했습니다.
Team Lead · Vision AI · ROS 2 · System Integration
- 전체 서비스 플로우 및 모듈 인터페이스 조율
- OAK-D + YOLOv8 기반 고객 추종 구조 구현
- ROS 2 기반 AMR 상태 및 동작 흐름 통합
- Vision / ROS 2 / Flask 실행 흐름 분리
- 상품 검출 ROI 및 60-frame confirmation 로직 적용
- 구매·재고 상태와 Web/DB 연동
- 팀별 구현 결과 통합 및 디버깅
프로젝트 진행 중 Vision 모델은 높은 정확도를 위해 연산량이 커지고, Robot Control은 낮은 지연시간이 필요하다는 요구가 충돌했습니다. 이를 하나의 실행 루프에서 해결하려 하기보다 모듈을 비동기로 분리하고 인터페이스를 명확히 정의해 각 파트가 독립적으로 개발·검증될 수 있도록 조정했습니다.
| Area | Stack |
|---|---|
| Robotics | ROS 2 Humble, TurtleBot4, Nav2 |
| Vision | YOLOv8, OpenCV, OAK-D RGB-D |
| Backend | Python, Flask, Flask-SocketIO |
| Database | SQLite |
| Frontend | HTML, CSS, JavaScript |
| Environment | Ubuntu 22.04 |
mart_autobot/
├── amr1.py # customer follow / state control
├── AMR2_control.py # restock AMR navigation
├── beep_node.py # budget alert
├── person_detection.py # customer detection
├── customer_monitor.py # customer dashboard / purchase / DB
└── admin_monitor_topic.py # inventory dashboard / dispatch
비전 모델의 성능만 높인다고 로봇 서비스가 완성되는 것은 아니었습니다.
실제 시스템에서는 추론 주기, ROS 2 메시지 인터페이스, 상태 전이, 웹 통신, DB 트랜잭션이 함께 맞물려야 안정적으로 동작합니다. 이 프로젝트를 통해 개별 알고리즘보다 전체 데이터 흐름과 모듈 간 계약을 설계하는 것이 시스템 통합에서 중요하다는 점을 경험했습니다.