SoNA (Social Norm-Aware Indoor Navigation Assistant)
사회적 규범 인식 기반 실내 자율 안내 로봇 시스템
Impact
- 4개의 상태LOCKED, READY, NAV, PAUSED네 상태 사이를 버튼과 음성으로만 전환
- 사회적 규범사람의 방향을 탐지해 양보 및 추적엘리베이터 1층→5층 이동
- 결함 관리직접 기록한 결함 239건원인 세 가지로 묶어 안전부터 처리
- 당사자 인터뷰요구 3건 전부 반영밀기 기능은 원치 않아 제거
Background
ITRC 과제로 만든 사회적 규범 인식 기반 실내 자율 안내 로봇 시스템입니다.
시각장애인 사용자가 손잡이를 잡고 로봇을 따라 걸으면 목적지까지 데려다줍니다.
이전에도 시각장애인용 안내 로봇은 있었습니다.
하지만 엘리베이터 버튼을 직접 누르거나, 주변 사람을 보고 피하거나 따라가는 기능은 없었습니다.
당사자 인터뷰로 기능을 구체화했습니다.
- 마주 오는 사람은 방향을 보고 피하고, 같은 방향으로 가는 사람은 따라갈 것
- 엘리베이터를 스스로 타고 다른 층으로 갈 것
- 사람과 부딪히는 일이 없어야 하고, 움직이기 전에 사용자의 결정을 따를 것
상용 로봇(Hello Robot Stretch SE3)에 직접 만든 손잡이를 달고, 주행, 사람 추적, 음성, 엘리베이터 기능과 이것들을 묶는 상태 기계를 구현했습니다.
Architecture
Contributions
손잡이: 버튼 둘과 압력센서
Autodesk Fusion으로 설계해 3D 출력합니다.
버튼 2개와 압력센서를 아두이노로 읽습니다.
- 버튼 하나는 주변 환경을 분석해 들려줌
- 다른 버튼은 GPTPlanner가 해석한 의도를 수락
- 주행 중 손잡이를 당기면 PAUSED로 전환

OCR-RCNN으로 층 버튼을 인식해 직접 누르기
승강기는 제조사와 연식마다 제어 방식이 달라 연동에 쓸 수 있는 표준이 없습니다.
OCR-RCNN으로 그리퍼 카메라 영상에서 버튼을 인식해 직접 누릅니다.
- 호출 버튼을 누르고 탑승한 뒤, 캐빈 안에서 목표 층 버튼을 누름
- 글자를 못 읽은 버튼은 배치로 추정
- 층이 바뀌면 지도를 교체

사용자를 포함한 로봇 크기
손잡이를 쥐고 선 사용자까지 포함해 로봇 크기를 뒤로 확장하고 Nav2에 적용했습니다.
사람 인식 기반 경로 수정
로봇이 향한 방향과 사람의 이동 방향을 비교해 주행합니다.
- 접근자: 마주 오는 사람. Nav2 원칙으로 회피
- 동행자: 같은 방향으로 가는 사람. 그 진행 방향을 경로에 40%만큼 반영

음성 명령은 버튼을 눌러야 실행
GPT에는 말을 의도로 바꾸는 일까지만 맡깁니다.
- 해석한 결과를 음성으로 들려주고, 손잡이 버튼을 눌러야 실행
장애물 밀기: 구현 후 폐기
경로 위의 물체가 밀 수 있는 것인지 종류로 판단해 밀고 지나가는 기능을 만들었습니다.
당사자 인터뷰에서 원하지 않는다는 답을 듣고 폐기했습니다.
1층에서 5층까지
단국대학교 2공학관 1층에서 504호까지 주행을 완료했습니다.
- 목적지 선택, 승차지점 주행, 엘리베이터 시퀀스, 지도 전환, 5층 목적지 주행, 도착 안내
ITRC 인재양성대전 부스 시연
코엑스에서 열린 ITRC 인재양성대전에서 부스를 열고 시연했습니다.
관람객이 직접 체험하게 했고, 화면에 지도와 주행 로그를 함께 띄웠습니다.

Troubleshooting
아래쪽 층 버튼을 못 찾음
- 문제
- OCR-RCNN이 아래쪽 층 버튼을 자주 놓침
- 원인
- 금속 패널에 빛이 반사돼 인식이 흔들림. 팔과 그림자에 가리면 추정값마저 어긋남
- 해결
- 각도와 거리를 달리해 여러 장을 찍음. 카메라 파라미터로 3차원 좌표를 복원. 못 읽은 버튼은 격자 보간으로 유추

- 결과
- 촬영 조건을 달리한 세 번의 측정이 오차 4.8 mm 안에서 일치
하드코딩한 이동 거리로 인한 오차
- 문제
- 엘리베이터 앞 이동 거리를 56.5, 185, 186 cm 상수로 둠
바퀴가 미끄러지면 실제 이동량이 어긋남 - 원인
- 오도메트리가 끊기면 간 거리를 모름. 그래서 명령한 값을 간 것으로 기록. 오차가 회차마다 쌓임
- 해결
- 좌표 기반 3단 정렬로 교체
고정 거리에 기대는 구간을 최소로 줄이고, 나머지는 매 회차 다시 측정 - 결과
- 시뮬레이션 50회 중앙값 기준 좌우 오차 16.3 cm → 1 cm
자율주행 중 5초마다 멈춤
- 문제
- 승차지점으로 가는 중 5초마다 멈추고, 30초씩 서 있음
- 원인
- 엘리베이터 앱이 CPU 570%를 점유해 센서가 0.4초 늦어짐
장애물 지도 갱신이 838회 밀림. 엘리베이터 앱을 끄면 0회 - 해결
- 주행과 엘리베이터 앱 중 한쪽만 돌도록 대시보드에서 전환
시각 보조는 요청이 있을 때만 실행 - 결과
- 지도 갱신 밀림 0회, 정상 도착. 시각 보조의 대기 중 CPU 43% → 약 0%