Robotics & Embedded

전동휠체어 자동 주차 시스템

휠체어가 스스로 트렁크까지 가는 자동 주차 시스템

기간
2025.12 ~
역할
ITRC 과제 · 3인 팀 · 위치추정과 인식, 통합
  • Python
  • YOLOv8
  • OpenCV
  • SolvePnP
  • Jetson Nano
  • AgileX TRACER

Impact

  • 카메라를 옮긴 재설계먼 구간이 안 찍혀 전면 개편차량 어라운드뷰 → 휠체어 탑재
  • 직접 구성한 데이터실차 121장, 목업 60장 라벨링차량 부위 6종을 따로 탐지
  • IMU로 회전 보정캐스터 틀어짐을 읽을 센서 없음회전속도를 맞춰 진동 제거
  • 하드웨어 최적화디코딩이 코어 하나를 91% 점유갱신 주기 분리로 4 → 15 FPS 향상

Background

전동휠체어 사용자는 차에 탄 뒤, 밖에 남은 휠체어를 스스로 실을 수 없습니다.
그래서 차를 탈 때마다 다른 사람의 도움이 필요합니다.

기아 레이를 기준으로, 휠체어가 스스로 트렁크까지 가서 주차하고 다시 나오는 시스템을 만들고 있습니다.
3인 팀에서 위치추정과 인식, 통합을 맡았습니다.

Architecture

휠체어에는 ArUco 마커만 붙어 있고, 카메라 두 대는 모두 차량에 달려 있다. 차량의 어안 카메라 좌측·후방이 그 마커를 보고 위치를 추정한 뒤 칼만 필터로 안정화하고, A* 경로계획과 경로 추종을 거쳐 CAN 으로 섀시를 움직인다. 실기체에서 8단계 중 7단계까지 동작했다. 휠체어가 멀리서 출발하면 마커가 어라운드뷰에 들어오지 않아 그 구간은 검출되지 않는다.
카메라와 초음파, IMU가 모두 휠체어에 실려 있고 주차된 차량에는 계측 장치가 없다. 카메라가 잡은 부위 6종을 번호판 규격으로 환산해 VISION 국면이 사이드미러로 시야를 맞추고, SONAR 국면이 측면 초음파 앞뒤 차이로 평행을 맞춘다. 판단 결과는 네 가지 지시가 되어 ESP32 서보가 조이스틱을 움직인다. IMU는 직진 중 방위를 유지하고, 전방 초음파는 30cm 안에서 자동으로 멈춘다.

Contributions

V1: 차량 카메라로 위치 추정

차량에 장착되어 있는 어라운드뷰 카메라로 휠체어의 ArUco 마커를 보고 위치를 추정합니다.

  • 어안 왜곡을 편 뒤 SolvePnP로 마커까지의 위치와 회전을 구함
  • 오차가 거리와 각도에 따라 일정한 방향으로 치우쳐, 그 편향을 학습으로 상쇄하는 보정층을 설계
  • 칼만 필터로 시계열을 안정화

V2: 휠체어 카메라로 위치 추정

휠체어에 실은 카메라로 차량의 특징을 봅니다.
공개 데이터셋이 실차에서 통하지 않아 직접 촬영하고 라벨링해 학습시켰습니다.

  • 번호판, 엠블럼, 손잡이, 주유구, 후미등, 사이드미러 부위 6종을 개별 탐지
  • 번호판의 규격 크기를 기준으로 거리를 추정
  • 목업 촬영분을 학습에 더한 뒤 검출이 6배 증가
왼쪽이 공개 데이터셋만 쓴 모델, 오른쪽이 직접 촬영분을 더 학습시킨 모델. 같은 프레임에서 번호판·후미등·엠블럼을 각각 잡는다.

두 가지 센서로 정렬

사이드미러로 시야를 맞춘 뒤, 초음파로 평행을 맞춥니다.
한 센서로 끝까지 가지 않고 구간마다 기준 센서를 바꿉니다.

  • VISION: 사이드미러의 화면 위치와 크기를 목표 자세에 맞춤
  • SONAR: 측면 초음파 앞뒤 거리 차이로 차량과 평행을 맞춤
  • 두 국면 모두 여덟 프레임 연속 허용범위 안에 들어야 다음으로 넘어감
9단계 주차 시나리오. 휠체어는 좌우로 이동할 수 없어 직진·후진과 회전만으로 목표 자세에 도달한다. 단계마다 기준이 되는 센서가 사이드미러, 좌측 초음파, 카메라, IMU, 전방 초음파로 바뀐다. 4단계에서 90도가 아니라 70도로 도는 것은 90도로 돌면 차량 후면 특징점이 시야에서 사라지기 때문이다. 출차는 이 순서를 뒤집은 7단계다.

하드웨어 최적화

휠체어에 장착할 컴퓨터라는 제약에서 출발해 Jetson Nano 4GB에 얹었습니다.
4 FPS에 머물던 것을 지속 15 FPS, 프레임당 추론 42 ms로 끌어올렸습니다.

  • 카메라를 30 fps로 받으면 디코딩 스레드가 코어 하나를 91% 점유해 추론이 쓸 CPU를 뺏음
  • 카메라를 15 fps로 낮추고 화면 갱신을 10 Hz로 분리
  • 모델 로드 중 프리징은 스왑 부족이 원인이라 스왑을 4 GB로 확장

Troubleshooting

먼 구간의 위치 오차가 줄지 않음

문제
보정을 더해도 먼 구간의 오차가 그대로
원인
거리가 멀어 그 구간이 아예 찍히지 않음. 파라미터로 풀 문제가 아니었음
해결
마커를 키울 수도, 보정으로 메울 수도 없음. 그 근거로, 카메라를 휠체어로 옮기자고 제안
결과
V1에서 V2로 설계를 바꿈. 경로 생성은 그대로 쓸 수 있음. 팀원 작업은 영향 없음
화면 캡처

직진 중 좌우로 진동

문제
직진 명령을 줘도 똑바로 못 감. 좌우로 흔들림
원인
앞바퀴가 캐스터라 이전 방향으로 틀어지는데, 이를 읽을 센서가 없음.
IMU 각도로 P제어를 하자 방위 오차는 1.2°인데 회전 속도가 −17.7°/s라 목표를 지나침
해결
각도로 목표 회전속도를 정함. 자이로가 그 속도를 맞추는 구조로 교체. 적분항이 캐스터의 틀어짐을 주행 중 학습
결과
목표 방향에 가까울수록 스스로 감속. 50° 벗어난 상태에서 약 7초에 복귀