프로젝트/무인 사물함

[AIoT] 무인 사물함 프로젝트 개요

마달랭 2025. 1. 23. 14:35
반응형

개요

무인 사물함을 구현하는 AIoT 프로젝트를 시작하였다.

프로젝트 인원은 총 6명으로 임베디드 2명, 프론트엔드 2명, 백엔드 2명으로 구성된 팀이다.

임베디드를 공부하긴 했지만 백엔드 쪽에 관심이 더 생겨 나는 백엔드 파트를 맡게 되었다.

 

여태 개인 프로젝트만 진행하다 팀 프로젝트를 처음으로 진행하게 되어 걱정 반 기대 반인 상태이다.

프로젝트 명세를 데드라인까지 성공적으로 구현하고 좋은 결과를 도출하면 좋겠다.

 

 

아이디어

프로젝트 주제를 정의하기 까지 수 많은 아이디어가 오고갔다.

무엇보다 AI요소를 접목하여 자율주행이 가능한 IoT를 개발해야 한다는 것이 주제 선정에 크게 애를 먹였다.

 

삼성의 볼리처럼 가전용 기계가 방을 순회하며 온습도 및 에어컨 등을 자동으로 틀어주는 로봇

공장 재고파악을 자동으로 해주는 로봇

식물 관리를 자동으로 해주는 로봇

얼굴을 인식하여 출/퇴근 혹은 입/퇴실을 자동으로 체크해주는 기능 등

다양한 아이디어가 오고갔으나 최종적으로 무인 창고형 물품 보관 서비스를 주제로 정했다.

 

 

1. Why?

스키장, 놀이공원, 쇼핑센터 등 인파가 몰리는 장소의 경우 물품보관소의 갯수가 부족하거나 접근이 용이한 곳에 위치하지 않은 경우에 불편함을 느끼는 것을 타겟으로 잡았다.


2. What?

창고 형태의 물품 보관소를 운영하여 공간 활용도를 최대로 한 무인 물품 보관소를 운영한다.


3. How?

키오스크를 통해 보관소에서 물품 보관을 요청하면 무인 로봇이 창고로 옮겨 보관해 준다.

물품 수령 요청 시 대기열에 삽입되며 차례가 되면 로봇이 보관중이던 물품을 가져온다.


4. WhatEffect?(Benefit)

사용자는 직접 빈 사물함을 찾으러 다닐 수고를 덜 수 있고, 사업장은 자동화를 통해 인건비를 절약할 수 있다.

 

 

리스크

1. 병목 현상

사람이 몰리는 시즌엔 로봇이 놀 수도 있고, 피크 타임엔 로봇이 부족해 사용자의 대기시간이 길어져 불편을 느낄 수 있다.
-> 관리자 페이지를 별도로 운영하여 사용 현황 데이터를 누적해 데이터 분석을 통해 개선할 수 있다.

 

2. 효율성

컨베이어 벨트를 활용한 자동화가 더 간편하고 빠를 수있다.

-> 컨베이어 벨트의 경우 창고 형식의 운영에는 적합하지 않다, 공간 절약의 효과가 주 목적이다.

 

 

고객여정맵

  1. 스키장에 도착하여 스키복으로 갈아입은 후 스키와 보호장구를 렌탈했다.
  2. 스키화를 신은 후 신발을 보관하기 위해 사물함을 찾아보았으나 실내엔 이미 모든 사물함이 사용중인 상태다.
  3. 실외 사물함을 이용하기엔 날씨도 춥고 짐이 너무 많아 들고 나가기 불편하다.
  4. 렌탈 구역 옆에 무인 물품 보관소가 눈에 띈다.
  5. 제공되는 바구니에 물품을 올리기만 하면 물품을 알아서 보관해 준다기에 맡긴 후 바로 스키를 타러 갔다.
  6. 2시간 정도 스키를 타다 마지막 슬로프에 리프트를 타고 올라왔다.
  7. 출발하기 전 물품 수령하기를 요청한 후 마지막 슬로프를 즐긴다.
  8. 사용한 장비를 정리하고 물품 보관소의 대기열을 확인하니 2번 뒤에 나의 물품을 받을 수 있다.
  9. 렌탈한 장비를 반납하고 물품 보관소에 방문하니 내 물품이 나와있다.
  10. 물품을 수령하고 스키장을 유유히 떠난다.

 

기술 스택

1. 프론트엔드

  • Clinet : React

2. 백엔드

  • Cloud : AWS EC2
  • Server : Spring(JAVA)
  • DB : PostgreSQL

3. 임베디드

  • Board : RaspberryPi5, NVIDIA Jetson Nano
  • Server : Flask(Python)
  • AI : Yolov8(OpenCV)

 

플로우 차트



물품 보관 알고리즘

  1. 사용자가 키오스크에서 사용 가능한 사물함을 터치
  2. 핸드폰 번호 입력 후 물품 보관 요청
  3. 사용자가 물품을 바구니에 담아 보관 구역에 비치 시 담당 로봇이 해당 구역에 물품 보관
  4. 클라이언트가 서버로 사물함 번호와 핸드폰 번호 전달
  5. 서버에서 6자리 정수로 이루어진 난수 생성
  6. 난수를 DB에 전달하여 새로운 토큰ID 생성 및 토큰ID 반환
  7. 핸드폰 번호를 기준으로 기존 사용 이력 조회, 없다면 생성 후 유저ID 반환
  8. DB에서 현재 사용 가능 상태인 로봇 탐색 후 존재하면 로봇ID 반환 후 사용 중으로 변경
  9. 사물함번호의 토큰ID 칼럼을 새로 생성한 토큰ID로 갱신
  10. 사물함번호, 유저ID, 토큰ID, 로봇ID, 현재 시간을 기준으로 보관 이력 생성
  11. 클라이언트에게 물품 보관 요청에 대한 성공 여부 전달, 성공 시 생성된 난수 전달
  12. 서버에서 라즈베리파이로 로봇ID와 사물함 번호 전달
  13. 라즈베리파이에서 로봇ID와 일치하는 로봇을 제어
  14. 젯슨 나노와 실시간 객체 인식 정보를 MQTT로 통신하여 사물함 번호의 위치로 이동 및 물품 보관
  15. 보관 작업 완료 시 서버로 완료 메시지를 보냄, DB에서 해당 로봇ID를 사용 가능 상태로 변경
  16. 요청 성공 시 유저의 핸드폰 번호으로 사물함 번호 및 난수 전달

 

물품 반환 알고리즘

  1. 사용자가 키오스크 혹은 웹 페이지를 통해 물품을 보관한 사물함 터치
  2. 유저에게 전달된 6자리 난수를 입력
  3. 서버에서 사물함 번호의 토큰ID값을 참조하여 토큰ID의 Value가 사용자가 입력한 난수와 일치 여부 확인
  4. 일치할 경우 클라이언트에게 반환 요청 성공 응답을 보냄
  5. 성공 응답을 받았을 경우 클라이언트 대기열에 유저의 요청 정보 삽입
  6. 해당 유저의 차례가 된 경우 클라이언트가 서버로 물품 반환 요청 진행
  7. 서버가 DB에서 사용 가능한 상태인 로봇 ID를 반환 후 사용 중으로 변경
  8. 서버에서 로봇ID와 사물함 번호를 라즈베리파이로 전달
  9. 라즈베리파이에서 로봇ID와 일치하는 로봇을 제어
  10. 젯슨 나노와 실시간 객체 인식 정보를 MQTT로 통신하여 사물함 번호의 위치로 이동 및 물품 수령
  11. 반환 작업 완료 시 서버로 완료 메시지를 보냄, DB에서 해당 로봇ID를 사용 가능 상태로 변경
  12. 요청 성공 시 클라이언트의 대기열에서 해당 유저 정보 삭제

 

728x90
반응형