5조-오늘제빵소

MIE capstone
이동: 둘러보기, 검색

목차

프로젝트 개요

기술개발 과제

국문 : 시각 장애인을 위한 실내 길 안내 서비스

영문 : Indoor navigation system for people with visual impairments

과제 팀명

오늘제빵소

지도교수

황면중 교수님

개발기간

2021년 9월 ~ 2021년 12월 (총 4개월)

구성원 소개

서울시립대학교 기계정보공학과 20164300** 이*재(팀장)

서울시립대학교 기계정보공학과 20154300** 김*호

서울시립대학교 기계정보공학과 20154300** 김*민

서울시립대학교 기계정보공학과 20144300** 노*하

서론

개발 과제의 개요

개발 과제 요약

시각장애인들이 실내에서 원하는 목적지로의 길을 찾기 어려운 문제를 해결하기 위해 백화점이나 공항 같은 대형 건물의 실내 길안내를 도와주는 웨어러블 디바이스를 이용한 길 안내 서비스를 설계한다. 지도 작성 및 위치추정 기술을 사용하여 사용자에게 위치 정보를 제공하고, 추정된 위치로부터 목적지까지의 경로계획을 통해 사용자에게 경로 또한 제시한다. 사용자의 특수성을 고려하여 사용자 가 GUI를 통해 목적지를 입력하면, 디바이스는 음성 메시지 방식을 통해 위치 및 경로 정보를 제공하도록 한다.

개발 과제의 배경

시각 장애인의 독립 보행이란 특정환경 속에서 자신의 잔존시각을 포함한 잔존 감각을 활용하여 자신의 현재 위치를 파악하고 주변 환경과 관계하여 자신이 원하는 목적지까지 이동하는 행동으로 정의내릴 수 있다. 독립 보행능력 보유 여부는 시각장애인의 자기존중감에 긍정적 영향을 미치며, 신체적 능력 향상과 사회활동 참여 증진, 고용기회의 확대까지 이어진다는 점에서 시각장애인 교육 및 재활 분야의 핵심으로 간주되고 있다.최근 들어 GPS기반 장비와 각종 표지판, 이정표와 같은 랜드마크들이 늘어남에 따라 실외에서의 길찾기 작업 점점 수월해지고 있다. 하지만 실내 공간의 길 찾기의 경우 실내공간의 대형화, 전자지도 구축미비, GPS 기반 도구의 기능적 한계 등의 문제로 인해 이전에 비해 점점 어려워지고 있으며, 이는 시각장애인 또한 해당되는 흐름이다.「시각장애인 실내보행용 앱 개발을 위한 욕구 및 선호 연구」 에 따르면 조성재는 시각장애인을 대상으로 한 실내 공간 이용시 느끼는 주관적 어려움정도를 조사한 결과에서 “어려운 편이다”~”어렵다” 의 경우가 적게는 66%, 많게는 80%까지 나타나는 사실을 지적하고 있다.특히 백화점이나 공항의 경우는 그 비율이 더 높은 것으로 확인되었다. 이렇듯 현재 시각장애인들은 실내 공간에서 길을 찾기 어려운 현실을 마주하고 있다. 이러한 어려움을 해결하기 위해 우리나라의 경우, 위와 같은 몇몇 장소들은 점자블록, 음성안내 단말기, 음향신호기 수신기 등을 설치하여 시각장애인들이 위치에 대한 정보를 얻을 수 있게끔 시행하고 있다. 하지만 그러한 노력들에도 불구하고 여전히 시각장애인들에 대한 위 기관들의 접근성은 매우 낮은 것으로 알려져 있다. 이는 「시각장애인의 실내안내시설 설치 이용만족도 조사 (김인배, 2020)」 에서 나타나는데, 모든 연령대에서 낮은 만족도를 보여준다. 때문에 결국 흰 지팡이나 안내견, 행인에게 묻기 등의 수단으로 이동하는 것이 보통이다.우리는 이러한 문제를 개선하기 위해 웨어러블 기기를 이용하여 시각장애인이 원하는 목적지지까지의 길을 안내해주는 서비스를 설계및 제작할 것이다. 이를 통해 시각장애인들이 백화점이나 공항과 같은 길찾기가 어렵고 복잡한 건물에서 목적지까지 쉽게 도착할 수 있게 하여, 실내외 어느 곳에서도 불편함을 느끼지 않게 독립보행 능력을 실현하는 데 도움을 줄 것이다.
시각장애인에 대한 실내시설 이용의 어려움 & 실내 안내시설 불만족도

개발 과제의 목표 및 내용

개발 목표

우리들은 백화점이나 공항 등 규모가 크고 내부 구조가 복잡한 건물에서 길을 찾아주는 웨어러블 디바이스를 제작하고 이를 통해 실질적으로 길찾기에 도움을 주는 것을 목표로 한다. 우리가 설계할 장치에는 가급적 실제 사용자들이 중요시하는 부분을 구현하는 것을 목표로 하였다. 「시각장애인 실내보행용 앱 개발을 위한 욕구 및 선호 연구」에 따르면 조성재는 시각장애인들은 실내 보행 및 길찾기를 도와주는 어플리케이션에 바라는 항목들로 현재 위치에서 가고자 하는 목적지까지의 거리와 방향, 자신의 현재 위치, 목적지에 도착하거나 지나칠 경우 자동도착 알림 기능 3가지가 핵심적인 요구 기능으로 선호되고 있다고 하였다.

또한 웨어러블 디바이스인만큼 너무 거추장스럽거나 무거우면 오히려 불편함을 초래할 것이다. 따라서 휴대성과 사용성 또한 고려하여야 한다. 일반적인 웨어러블 기기나 어플리케이션과는 달리 장치의 조작방법과 피드백을 받는 방식 또한 사용자에 맞추어 디자인하여야 한다. 같은 연구에서 실내보행용 스마트폰 app으로 정보 수용 시 선호하는 방식으로 음성 메시지 단독 사용과, 음향 신호와 진동음 병용이 주로 꼽혔다.

이에 따라 가장 높게 선호되는 음성 메시지 방식으로 사용자에게 정보를 전달하는 것을 목표로 한다. 따라서 우리의 개발 목표치는 다음과 같다. 1. 원하는 목적지까지 길을 정확하게 안내하는 것 2. 시스템이 현재 위치를 정확히 파악하는 것 3. 목적지에 도착할 경우 도착 알림을 하는 것 4. 휴대하기 편안한 것 5. 시각장애자가 조작하고 피드백을 받기에 편리한 것

시각장애인을 위한 길안내 서비스는 수익을 내기 위함이라기보다는 공익을 위한 서비스이므로, 가격 경쟁력을 갖추기 보다는 정확한 서비스를 제공하는 제품을 설계하고, 백화점이나 공항 등 특정 공간에 정부 또는 지자체 지원을 받아 구비하는것을 목표로 한다. 이렇게 구비된 제품을 안내데스크에서 대여해주는 방식으로 사용자가 이용한다. 기기의 이용은 전맹 사용자보다는 저시력자와 시야장애자를 대상으로 하고, 전맹 사용자는 안내데스크에서 기기의 조작을 도와주는 것을 목표로 한다.

세부 개발 내용

웨어러블 디바이스

디바이스 개략도
시스템 개략도
임베디드 컴퓨터가 장착된 디바이스를 사용자가 착용하는 형태를 목표로 한다. 디바이스는 카메라가 상향된 전방을 확인할 수 있도록 전면으로 멜 수 있는 슬링백 형태로 제작하도록 한다. 휴대하기 용이하도록 무게가 무겁지 않게 하고, 디바이스의 통기성을 높여 발열 또한 고려해야 한다. 디바이스 내에는 임베디드 컴퓨터, RGBD 카메라, 충전형 배터리, 터치스크린 디스플레이가 하우징 되어 장착된다. 장착된 컴퓨터에 맞게 배터리 형태로 전원을 공급하고, 다른 기기와의 통신 없이 장착된 컴퓨터 내에서 목표한 기능을 수행한다. 생성된 경로와 위치 정보는 골전도 이어폰을 통해 사용자가 주변 소리를 듣지 못하는 단점을 극복하고 사용자에게 음성 피드백 형태로 제공할 수 있도록 설계한다. 

소프트웨어

RGBD 카메라를 이용해 지도를 작성하고, 완성된 지도를 바탕으로 목표한 기능들을 수행한다. 지점마다의 마커를 제외하면 별도의 통신설비가 필요 없고, 지속적인 지도 업데이트를 통해 장소의 변형이나 교체에 유연하게 대처 가능하도록 설계한다. 사용자의 특수성을 고려하여 정보 입력, 전달의 편의성 또한 목표치에 추가하여 설계하도록 한다. 
  • Mapping
    단안, 양안 카메라에 비해 깊이를 직접 계산할 필요가 없는 RGBD 카메라를 사용한다. 사용자에게 길을 안내하는 서비스를 수행하기 이전에 디바이스는 지도를 작성하고, 지도 데이터를 저장한다. 저장된 지도 내에는 목적지로 설정 가능한 지점마다의 마커가 있으며, 각 마커에는 지점의 정보가 포함된다. 목표한 기능을 수행할 수 있을 만큼의 밀도를 갖춘 포인트 클라우드 지도를 작성하도록 한다.
  • Localization
    지도 작성 또는 길 안내 서비스 도중에 수행하며, 저장된 지도를 바탕으로 특징점 기반 visual localization을 실시한다. 키 프레임마다 현재의 위치를 추정한 후 지도 작성중에는 지도를 최적화 하는 역할을 수행하고, 길안내 서비스 중에는 목적지 도착 여부를 판별 하거나 경로 이탈의 경우 경로를 재설정하도록 한다.
  • Path Planning
    현재 상용 네비게이션에서 사용되고 있는 다익스트라 알고리즘을 이용한다. 실내 건물은 실제로 3D이지만, 같은 층 내에서는 실질적으로 2D인 점에서 실내 길찾기에도 동일한 알고리즘을 적용 가능하다. 벽면에 가중치를 높게 두면 최대한 안전한 경로를 찾는 등 적용범위가 넓다.
  • 정보 전달
    「시각장애인 실내보행용 앱 개발을 위한 욕구 및 선호 연구」 에 따르면 시각장애인들은 정보 수용 시 음성메시지를 가장 높게 선호하는 경향을 보여주었다. 이에 따라 본 시스템에서도 TTS API를 통해 사용자에게 음성 메시지를 출력하는 방식으로 설계한다. 또한 입력의 경우 본 시스템은 저시력자와 시야 장애자를 주 대상으로 하므로 GUI 사용이 어느정도 가능함을 상정하고 있다. 따라서 사용자 입력은 디스플레이를 사용하고, 직관성을 높인 터치 GUI를 통해 목적지를 입력하도록 한다.

관련 기술의 현황

관련 기술의 현황 및 분석(State of art)

실내 측위 기술

내비게이션의 정확도는 자기 위치의 정확도에 직결된다. 이를 인지한 많은 사람들이 다양한 방식을 통해 자신의 위치를 측정하는 방법을 연구 및 개발하였고, 현재 GPS를 기반으로 한 측위 시스템은 이러한 기술의 중심에 서 있다. 하지만 실내의 경우 수신되는 GPS 신호에 문제가 있기 때문에 대신에 다른 신호 혹은 센서를 통해 위치를 측정해야 한다. 근거리 무선통신을 이용하는 신호기반 측위와 센서자체를 사용하는 센서 기반 측위가 있다. 하나의 방법을 사용하기도 하지만, 정확도 향상을 위해 복수의 방법을 혼합하여 측위를 하는 경우 또한 있다.  
오늘제빵소 무선근거리통신기반.png
오늘제빵소 센서기반.png
무선 근거리 통신 기반 센서 기반
  • 무선 근거리 통신 기반
    • Indoor Positioning System (IPS) 라고도 한다. GPS와 유사하게 실내에 송신기를 두어 각 위치에서 신호를 발신하고, 수신기가 신호의 패턴, 강도 등을 분석하여 자신의 위치를 측정한다. 현재의 실내 위치 측정에 많은 부분을 차지하고 있으며, 2000년대 중반 RFID, WiFi, Bluetooth를 사용한 기술들로부터 시작하여 최근의 BLE, UWB, LTE 등 다양한 신호를 기반으로 한 기술들이 개발되어 왔다. 송신기의 비용은 비교적 저렴하지만, 대형 인프라를 구축하기 위해서는 복수의 송신기가 필요하며, 신호가 측정의 기준이기 때문에 간섭에 취약하다. 따라서 설비 원가 절감과 타 신호 간섭에 대해 강건한 측위방법이 연구되고 있다.
    • 저전력 블루투스(BLE)
      저전력 블루투스
      최근 사용되는 BLE 비콘은 기존 블루투스 프로토콜에 비해 배터리소모가 적은 것을 최대 장점으로 가진다. 또한 이용자가 별도의 행동을 취하지 않더라도 삼각측량법 또는 핑거프린트 방법을 통해 자동으로 이용자의 위치를 파악하고, 관련 서비스를 제공 가능하다. 측정 범위가 50m정도로 넓고, RSS를 사용하여 근접 정보까지 이용 가능하다. 현재는 측정된 위치의 정확도가 떨어져 넓게 상용화되지는 않았지만, 앞서 서술한 강점들 덕분에 스마트 모바일 기기 환경과 융합도가 높고 비용면의 큰 이점을 통해 향후 실내 측위를 위한 가장 주목받는 기술 중 하나이다.
    • Wi-Fi
      WiFi
      Wi-Fi기반 AP는 오늘날 대부분의 실내 환경에 비치되어 있고 소비자용 장치들 대다수가 Wi-Fi를 지원하고 있다. 근거리 네트워크를 위해 개발되었지만, 이러한 특징을 통해 별도의 단말기 보급 없이 Wi-Fi를 이용한 실내 측위 연구가 활발히 진행되어 왔다. 블루투스와 마찬가지로 AP로부터 정보를 수집해 삼각측량법 혹은 핑거프린트 방법으로 이용자의 위치를 측위 한다.
    • UWB(Ultra-WideBand)
      UWB는 500MHz 이상의 대역폭을 가지거나 점유 대역폭이 중심 주파수의 20% 이상인 무선 기술로 정의된다. UWB는 저전력의 광대역 신호를 사용하여 높은 에너지 효율성과 다중경로 페이딩에 강하며, IR-UWB의 경우 매우 짧은 펄스 신호를 사용하여 수 센티미터 이내의 정확도를 갖는다. 이러한 특성은 실내 환경에서 활용하기 매우 적합한 측위 기술로 평가되고 있지만, UWB 활용 가능 주파수 대역이 대부분의 국가에서 이미 다른 용도의 시스템에 할당되어 운용되고 있기 때문에 간섭 회피 기술이 요구되며, 기존 실내 환경에 이미 보급되어 사용되고 있는 Wi-Fi, BLE 방식에 비해 비용 효율 측면에서는 여전히 불리함을 지니고 있다.
  • 센서 기반
    • 수신기의 역할이 더 확대되어 장착된 센서를 통해 직접 정보를 스캔하고 분석하여 위치를 추정한다. 경우에 따라 기지국이 필요하지 않을 수도 있으며, 카메라, 초음파 센서, 라이다 등 다양한 센서가 사용된다. 실제로 측정이 아닌 센서값에 따른 추정이기 때문에 정확한 알고리즘, 필터링, 상대적으로 높은 성능의 하드웨어가 필요하며, 이를 보완하기 위해 두 개 이상의 센서를 융합하거나 인공지능 기반의 필터를 통해 추정 오차를 보완하는 방향으로 연구되고 있다.
    • Visual Localization
      Visual Localization
      Visual Localization 기술은 실내/실외에서 이미지만으로 현재 위치를 추정하는 기술이다. 지도가 필요하지 않은 인공지능 기반의 기술 또한 존재하지만, 많은 경우 3D 지도를 이용하여 이용자의 위치를 추정한다. 이는 기존의 Visual-SLAM 시스템에서의 Relocalization 기능과 유사한데, Relocalization은 미리 Visulal-SLAM으로 작성된 3D 지도 데이터에서 특징점을 연결 짓거나 Bags of Words 사전을 이용하여 루프를 탐지하고 자신의 위치를 구하는 SLAM 모듈 이다. 즉 실질적으로 기존 지도가 없는 상황에서는 Visual-SLAM을 통해 3D지도를 작성해야 하며, 만들어진 포인트 클라우드 지도가 Visual Localization의 시작점이 된다.
    • Pedestrian Dead Reckoning
      Pedestrian dead reckoning
      Pedestrian Dead Reckoning은 IMU센서를 이용하여 보행자의 가속도와 각속도를 측정하고, 이를 통해 보행자의 속도와 방향, 거리를 계산하는 기법이다. PDR 시스템은 구축비용이 비교적 적고, 환경의 제약이 없다는 장점을 가진다. 자이로스코프, 가속도계, 지자기센서가 측정하는 각각의 값을 통해 초기위치로부터 dx, dy, dz를 더해나가면서 이동경로를 추정한다. 이때 오차가 계속 쌓이기 때문에 필터의 사용이 필수적이다. 지도 혹은 다른 실내 측위 방법 없이는 절대적 위치를 파악할 수 없지만, 앞서 서술한 강점들 덕분에 현재 소방관들의 이동 경로 파악 시스템 개발에 이용되고 있다.

시각장애인에 대한 접근성을 높이는 설계

오늘제빵소 확대보조기기.png
오늘제빵소 청각및촉각보조기기.jpg
확대 보조기기 청각 및 촉각을 활용한 보조기기

보조 공학 기기 보조공학기기란 장애인, 노인 등이 일상생활 및 직업생활, 교육활동 등을 잘 영위할 수 있도록 도움을 주고자 연구되고 개발된 모든 기기를 말하며, 이는 소프트웨어 및 하드웨어를 포함한 전자공학기술이 채용된 기기와 물리적 기능을 향상시키는 기구장치 등이 포함된다. 시각장애인을 위한 보조공학기기로는 점자정보단말기, 확대용 CCVTV, 점자프린터, 음성합성 소프트웨어 등이 있다. 대체로 시각적 정보를 배로 확대시키거나, 다른 감각정보로 바꿔 전달해주는 것을 그 방식으로 취하고 있다. 이는 실제 시각장애인들이 보조공학기기에게 바라는 역할이 무엇인지 시사하고 있다.

  • 확대 보조기기
    독서확대기는 저시력시각장애인 또는 노인이 문자를 읽을 수 있도록 확대시켜 주는 장치를 말한다. 기기에 장착된 카메라가 인쇄물을 실시간으로 촬영하고, 촬영된 영상을 처리하여 화면으로 보여준다. 단순 확대만 가능한 일반 광학돋보기와는 달리 바탕의 대비를 증가시켜 문자인식을 용이하게 하고, 반전을 통해 저시력인이 쉽게 느끼는 눈부심을 줄여주는 등 다양한 저시력 증상에 맞춰 가독성을 높여준다. 또한 최근의 디지털 독서확대기는 음성지원기능이 포함되기도 한다.
  • 청각 및 촉각을 활용한 보조기기
    활용시력이 없는 전맹인을 위한 보조기기는 시각이 아닌 청각 또는 촉각으로 정보를 전달한다. PC의 화면을 읽어주는 스크린리더, 점자 또는 음성으로 내용을 출력해주는 점자정보단말기가 대표적이다. 점자정보단말기는 모니터 대신 내장된 점자셀, 묵자를 출력해주는 화면, 문자를 읽어주는 음성을 통해 내용을 확인할 수 있는 점자노트북이다. 실제 많이 사용되는 셀바스헬스케어 사의 한소네의 경우 구글 드라이브, 문서 등의 사무 APP을 점자로 지원하여 점자와 묵자간의 벽을 허무는 기기로 평가받고 있다, 스크린리더로 많이 이용되는 소프트웨어로는 센스리더가 있으며, 이 센스리더는 동영상 자막처리 자동화, 점자정보단말기와의 연동을 포함한 다양한 컴퓨터 환경을 지원한다.

특허조사 및 특허 전략 분석

  • 시각장애인용 길안내 시스템
특허 명칭 특허 설명
시각장애인용 스마트 지팡이 GPS 기반, 음성 인식, 음성 피드백, 카메라를 통한 장애물 인식
능동형 RFID/NFC 태그를 이용한 시각장애인 길안내 시스템 점자보도의 RFID 태그를 통해 길안내정보를 전송,지팡이에 RFID 리더기를 설치
시각장애인을 위한 길안내 서비스 시스템 및 방법 스테레오 헤드셋, RFID 태그 이용, 자이로스코프로 시선방향 감지, 입체음향 길안내, 장애물 인식 센서
시각장애인을 위한 길안내 서비스 시스템 GPS 이용, 음성인식, 영상 인식,음성, 촉각 피드백
시각장애인용 건물 길안내 시스템 건물 내 길안내 센서 사용, 장애물 센서 이용, 음성, 촉각 피드백
  • 실내 길안내 시스템
특허 명칭 특허 설명
실내 길안내 장치 및 그 방법 가속도 센서,영상 카메라, PointCloud지도 + 가속도 데이터 특징점 사용, 경로 저장 및 길 안내
디지털 사이니지를 이용한 실내 길안내 장치 특정 구역 존재하는 디지털 사이니지의 위치를 기준으로 하여 단말기의 증강현실로 길안내
다양한 가중치를 적용한 맞춤형 실내 길안내 경로탐색 장치 및 방법 와이파이 포지셔닝, 사용자 단말 위치정보+목적지 단말의 위치정보로 최단거리 연산

특허전략

본 과제는 사용자, 즉 시각장애인이 실외뿐만 아니라 실내 길찾기 또한 제약을 가지고 있음에 착안하여 기존의 GPS 기반의 실외 시스템이 아닌 카메라 센서 기반 실내 내비게이션 시스템을 제시하여 신규성을 얻어낼 수 있다. 또한 RFID 태그 혹은 신호 송신기 등의 추가적인 실내 설비 없이 지도 기반의 시스템을 설계한다. 지도 및 이미지 기반의 실내 내비게이션 시스템은 많은 분야에서 연구되고 특허에 등록되어 있지만, 시각장애인의 특수성과 편의성을 고려해 GUI 와 입출력 방식에 차별화를 가진 디바이스를 제시함으로써 기존의 내비게이션 시스템에 비해 신규성을 얻어낼 수 있을 것으로 생각된다. 
  • 기술 로드맵
기술 로드맵

실내 측위의 기술 동향을 살펴보면, BLE, Wi-Fi, PDR 에 의한 실내 측위 기술의 경우 상용화 단계까지 이르렀음을 확인할 수 있다. 그리고 UWB는 다른 역할들에 비해 실내측위에 대한 기능은 아직 부족한 단계에 있고, Visual Localization의 경우 최근 활성화된 컴퓨팅 자원으로 구글과 네이버를 중심으로 다양한 연구가 이루어지고 있다. 접근성 설계의 경우 시각장애인의 보조공학기기에 대한 수요는 2000년도 후반부터 계속해서 이어져 왔는데, 현재의 디지털 보조공학기기는 대부분 음성지원을 포함함을 확인할 수 있다. 또한 시각장애인을 하나의 증상으로 통일하지 않고 각 장애증상에 따라 다른 서비스를 지원할 수 있도록 하는 움직임 또한 보여주고 있다.

시장상황에 대한 분석

  • 경쟁제품 조사 비교
제조사 오캠 구글 아담 스파이어스 이사이트(eSight)
사진 오늘제빵소 오캠.png 오늘제빵소 매빌리트.jpg 오늘제빵소 애니모터스.jpg 오늘제빵소 이사이트.jpg
제품명 마이아이 2.0 매빌리트 프로그램 애니 모터스(Animotus) eSight Glass
특징 웨어러블 어플리케이션 웨어러블 웨어러블
카메라사용 O O X O
음성지원 O O X O
장애물 알림 X O O X
실내지원 X X X X

기존 경쟁제품들의 경우 실내 길찾기를 지원하지 않는 것을 알 수 있다.

  • 마케팅 전략

우리가 제안할 제품은 실수요자의 직접 구매보다는 공항, 백화점 등의 기관에서 구비하여 이용자에게 대여해주는 방식으로 운영되는 것을 목표로 한다.

SWOT 분석

Strength(강점) 시각장애인을 위한 실내 길안내 서비스라는 차별화성

주기적 데이터(지도) 업데이트의 용이성

Weakness(약점) 건물 별 지도 작성이 필요하다는 단점 → 특징점 + 마커 기반의 지도 작성 간략화
Opportunity(기회) 복지 차원에서 고려될 수 있음

실수요와 확장 가능성이 높음

Threat(위협) 개인 초상권 침해 우려

개발과제의 기대효과

기술적 기대효과

  • 이미지 정보의 확장성
여타 측위 기술과는 다른 점으로, 이미지 정보를 통한 측위는 인간의 눈과 비슷한 시각적 정보와 함께 다양한 기능으로 확장 가능하다. 현재 컴퓨터 비전 기술은 기계학습과 함께 매년 높은 성장률을 보이고 있으며 객체 인식, 증강 현실 등 다양한 분야에서 사용된다. 개발 과제에서는 실내 측위에만 카메라가 이용되나, 이후 장애물 회피, 사물 판별 등 좀 더 고도화된 시각 정보를 제공할 수 있는 가능성이 있다. 
  • 디바이스의 독립성
스마트폰 어플리케이션이나 무선랜 통신을 통해 데이터를 주고받지 않고 단독형태의 디바이스로 설계되었기 때문에 서버를 따로 두지 않아 공간 변화에 독립적으로 대응가능하다. 또한 좀 더 하드웨어적으로나 소프트웨어적으로나 오픈소스적인 특성을 가지기에 공간특성에 맞춰 다양한 어플리케이션을 추가 가능하여 보다 폭넓은 서비스 제공이 가능하다.

경제적, 사회적 기대 및 파급효과

웨어러블 기기를 이용하여 시각장애인들이 백화점이나 공항 같은 길 찾기가 어렵고 복잡한 건물에서 목적지까지 쉽게 도착할 수 있게 하여 안전하게 실내를 돌아다닐 수 있을 것이다. 이러한 효과들이 낯선 곳에 대한 방문을 두렵지 않게 함으로써 반복적인 활동을 통해 디바이스 없이도 대형 건물을 쉽게 돌아다닐 수 있게 할 것으로 기대되며, 이는 시각장애인의 외출 난이도를 크게 낮춰 독립보행의 능력을 높여 줄 것으로 예상된다. 결국 시각장애인들의 겪는 실내활동 제약을 사라지게 함으로써 경제 활동의 증진, 고용 기회의 확대까지 이어질 수 있을 것으로 기대할 수 있다.

기술개발 일정 및 추진체계

개발 일정

오늘제빵소 개발일정.png

구성원 및 추진체계

  • 김*호: 소프트웨어 개발 - 3d mapping, localization 담당
  • 김*민: 하드웨어 제작, 음성 피드백 담당
  • 노*하: 하드웨어 제작, 맵 데이터 최적화 담당
  • 이*재: 소프트웨어 개발- Path planning, 디스플레이 GUI 제작 담당

설계

설계사양

제품의 요구사항

번호 요구사항 D or W 중요도
1 길을 정확하게 안내해주는가? D
2 길을 음성으로 안내해주는가? D
3 웨어러블 기기가 너무 크거나 무겁지 않은가? D
4 장치의 GUI가 직관적인가? W
5 배터리가 오래 가는가? W
6 실내에 추가적인 장치의 설치가 불필요한가? W

설계 사양

평가항목 평가방법 적용기준 개발 목표치 비중(%)
1. 정확도 길 찾기 및 실내 측위 정확도 m 0.5m 이하 25
2. 실시간성 동작시간 측정 0.5초 이하 20
3. 시인성 UI 화면 크기 cm 15cm 이상 15
4. 무게 저울 kg 1.5kg 이하 15
5. 디자인 설문조사 평균 4점 이상(5점 만점) 15
6. 전력 사용 시간 측정 시간 2시간 이상 동작 10

개념설계안

지도 작성 및 실내 측위

개념설계안-실내측위/경로생성 방식
먼저 실내 측위를 위한 지도를 작성하고, 후에 작성된 지도를 바탕으로 길을 안내한다. 지도를 작성할 때에는 3D 점구름 지도와 2D 점유격자지도를 동시에 생성한다. 점구름 지도의 경우 특징점으로 이루어진 점구름을 통해 실내 위치를 추정하는 역할을 수행한다. 또한 2D 점유격자지도의 경우 가중치가 포함된 노드 그래프를 구성함으로써 최단경로와 안전경로를 포함하는 경로계획을 수행할 수 있도록 한다.

사용자 피드백

개념설계안-사용자의 접근 방식
음성피드백은 시각장애인 에게 있어 매우 큰 정보량을 지닌다. 디스플에이의 경우 시각장애인에 대한 이해가 필요하다 .시각장애인중 전맹 비율은 약 5퍼센트이고, 90퍼센트는 후천적인 시각장애를 겪는다. 시각장애인 또한 마찬가지로 시각정보를 결코 무시할 수 없으며, 음성안내기와 더불어 가장 큰 파이를 가지는 보조 공학도구인 확대기는 이점을 시사하고 있다. 이처럼 큰 화면을 통한 정보 전달은 다른 어떠한 방식보다 높은 정보 전달성을 가진다. 지도를 보여주지 않고 목적지에 대한 거리와 방향을 제시하는 GUI와 구글 WaveNet을 통해 목소리 형태로 전달되는 음성 TTS를 조합한다. 최대한 크고 직관적이게 설계한다. 목표에 맞는 GUI설계가 필요하다.

이론적 계산 및 시뮬레이션

디바이스 소모 전력 및 사용 시간

우리가 사용할 임베디드 보드인 라떼판다 델타의 소모 전력은 최대 45W, 입력 전압은 최대 15V, 사용할 배터리는 20000mAh 용량에 15V 출력을 가지고 있다. 따라서 약 6.7시간의 러닝 타임을 가진다. 이는 사용자가 길 찾기를 하기에 충분한 시간이다.

조립도

  1. 조립도
    전체 디바이스 구성도
    구성품은 이어폰, 슬링백, 카메라, 메인디바이스(라떼판다 + 디스플레이), 배터리로 이루어져있다. 이중 카메라는 슬링백에 결합되어 있고, 나머지 부품들은 슬링백에 보관하여 꺼내어 사용한다.슬링백 앞 포켓에는 카메라 하우징을 장착하고, 라떼판다 단자에 USB 포트를 연결하여 장치 간 교류한다. 이어폰은 꺼내기 쉽도록 파우치를 외부에 결합한다. 파우치의 끈을 슬링백과 묶어 결합한다
  2. 조립 순서
    메인 디바이스 모델링
    라떼판다 본체와 디스플레이를 하우징에 결합한다. 디스플레이는 제품 후면부의 접착제를 통해 하우징과 결합되고, 나머지 하우징과 임베디드 보드는 위와 같은 조립도에 따라 볼트 너트로 결합된다.

부품도

  • 임베디드 보드
    메인보드 - 라떼판다
임베디드 보드는 라떼판다 델타 모델을 사용한다. 타 임베디드 보드와 다르게 아키텍쳐가 x86으로 일반 PC와 같기 때문에 개발에 용이하다. 전원은 c-type 케이블단자를 통해 전력을 공급받는다. USB 단자는 Wi-Fi 랜 수신기와 RGBD 카메라 두 개의 포트를 사용한다.  
  • RGBD 카메라
    RGBD 카메라 - Intel Realsense d435
본 프로젝트의 프로그램에서 양안/단안 카메라를 통한 깊이 추정은 한정된 컴퓨팅 자원으로 오차를 불러일으킬 것으로 판단되어 깊이를 직접 측정하는 RGBD 카메라를 사용한다. 카메라는 Intel사의 RealSense d435 모델을 사용한다. 시야각이 좁지만 기존 롤링셔터 문제를 해소하는 글로벌 셔터를 내장하고 있으며 크기가 작기 때문에 웨어러블 모델에 적합하다.  
  • 디스플레이
    디스플레이 - 라떼판다 전용 7인치 터치스크린
디스플레이는 장치와의 호환성을 고려하여 라떼판다 전용 7인치 터치 디스플레이를 사용한다. 
  • 배터리
    배터리 - 45W PD 충전기
배터리는 20000mAh, 45W 출력이 가능한 제품을 사용한다. 
  • 이어폰
    이어폰 - 골전도 이어폰
골전도 이어폰을 사용하여 사용자가 주변 소리를 듣고 돌발상황에 대처할 수 있도록 하였고, 위와 같은 포켓에 담겨져 보관된다. 
  • 슬링백
    슬링백
설계에 이용되는 슬링백의 크기는 다음과 같다. 내부에 디스플레이, RGBD 카메라, 배터리를 보관해야 하므로 160*250*80의 넉넉한 사이즈를 사용한다.  
  • 라떼판다 및 디스플레이 하우징
    메인 디바이스 하우징 모델링
메인 프로세서인 라떼판다 본체와 디스플레이는 위와 같이 두 파츠로 나누어진 하우징을 통해 조립된다. 라떼판다의 방열팬은 디스플레이 반대편을 바라보아야 하고, 디스플레이와 라떼판다의 연결을 두기 위해 다음과 같이 설계한다. 설계 하우징이 단순하기 때문에 3D printing을 통해 하우징을 제작한다. 가벼운 무게를 위해 PLA 재질의 필라멘트를 사용하여 3D printing 한다.  
  • 카메라 하우징
    카메라 하우징
슬링 백에 카메라를 장착한다. 웨어러블 디바이스와 카메라 사이의 완충과 사이즈에 따른 가공 및 수정의 난이도를 고려하여 PE폼을 내부 하우징 재료로 선정하고, 카메라와 카메라 케이블, 슬링백의 치수에 맞춰 가공한다.

상세설계 내용

메인 동작 시나리오

크게 두 가지 기능으로 나눈다. 하나는 장소에 맞춰 지도를 생성하는 지도 작성 기능이고, 또 하나는 시각장애인 보행자가 이용하는 길 안내기능이다. 사용자층이 나눠져 있으므로 각각의 사용자를 작성자와 보행자로 구분하도록 한다. 
  1. 지도 작성
    지도 작성 3D PointCloud 지도(좌)/ 2D OccupancyGrid 지도(우)
    목적지 설정 UI
    작성자는 지도 작성 프로세스를 실행시킨 후, 건물 내를 촬영하면서 지도를 작성한다. 지도는 3차원 점구름 지도와 2차원 격자지도가 있으며, 프로세스는 두 지도를 동시에 작성한다. 작성이 끝난 지도는 각각 bin 확장자의 이진파일과 png 확장자의 이미지파일로 저장된다. 이후 작성자는 목적지 저장 프로그램을 실행시켜 저장된 2차원 격자지도를 불러오고, GUI를 통해 목적지가 될 수 있는 지점들을 설정하여 각 지점들의 정보를 문서파일에 저장한다.
  2. 길 안내
    시각적 위치추정 & 경로생성
    디스플레이 GUI & 음성 피드백
    보행자가 길 안내 프로세스를 실행시키면, 저장된 문서파일로부터 목적지를 불러온다. 보행자가 목적지를 입력하면 시각적 위치 추정을 통해 보행자의 현 위치를 파악하고, 목적지를 향해 경로를 생성한다. 생성된 경로를 바탕으로 음성 내비게이션 형식에 맞춘 음성메시지와 디스플레이 GUI를 출력한다.

주요 알고리즘 및 상세 설계

  1. ORB SLAM
    프로젝트의 지도 작성 기능 부분에서는 Visual SLAM 알고리즘이 이용된다. Visual SLAM은 이미지 정보를 이용하여 지도 작성과 위치추정을 동시에 하는 기술이다. Visual SLAM에는 다양한 방식들이 있지만, 본 프로젝트에서는 특징점 기반 알고리즘중 하나인 ORB SLAM 을 사용한다, 특징점이란 이미지를 대표하는 점이며, 일반적으로 이미지 내의 코너포인트를 사용한다. ORB SLAM은 Gray스케일 이미지의 밝기 변화를 단순비교하기 때문에 코너 추출이 빠르고, 변화량을 통해 모서리의 방향을 저장하므로 신뢰도 높은 특징점을 얻을 수 있다.
    ORB 특징점
    때문에 로봇에 의해 일정한 속도로 촬영을 하지 않고 인간의 몸에 장착된 카메라를 사용하는 본 프로젝트의 특성상 알고리즘의 실시간성이 매우 유효할 것으로 고려되어 해당 알고리즘을 이용하도록 한다. 특징점 기반 SLAM은 일반적으로 특징점 추출 – 위치 추정 - KeyFrame 선정 및 Loop Closing 순으로 이루어진다. 그 과정으로는 우선 카메라 이미지 정보로부터 특징점들을 추출하고, 추출된 특징점들로부터 카메라의 위치를 추정한다. 위치를 추정하기 위해서는 각 이미지의 깊이 정보가 필요한데, 본 프로젝트는 깊이를 계산하지 않고 RGBD 카메라로부터 직접 깊이를 측정하여 사용하도록 한다. 추정된 위치가 이전 위치와 너무 비슷하지 않고, 특징점 개수가 충분하다면 이를 키프레임이라고 부르며, 이러한 키프레임 내의 특징점들을 3차원 유클리드 공간에 재투영시켜 점구름 지도가 생성되는 것이 ORB-SLAM의 기본적인 지도 작성 프로세스이다.
    ORB_SLAM 노드의 입력과 출력
  2. 격자 지도 작성
    Grid_Mapping 노드는 ORB SLAM으로부터 발행되는 3D 지도와 키프레임, 카메라 위치를 사용하여 2D격자지도를 그린다. 2D 지도를 사용하는 이유는 경로계획이 단순해지고, png 이미지 파일이기 때문에 지도의 변형이 쉽기 때문에 이용한다. 키프레임에 존재하는 점들을 2차원 평면에 사영 시키고, 카메라의 위치로부터 그 점까지의 위치를 점유되지 않은 격자픽셀로 둠으로써 라이다 센서의 2D-Gmapping과 비슷하게 동작한다. 이후 만들어진 격자 지도에 가우시안 필터, 천장 및 바닥 임계값 필터, Canny Boundary Detection, 방문 카운터와 같은 알고리즘을 추가하여 경로 계획이 가능한 수준의 Occupancy Grid Map을 작성한다.
    키프레임의 Projection Map과 필터를 거친 Occupancy grid Map
    GridMap 노드의 입력과 출력
    ORB_SLAM, 격자 지도 작성은 메인 동작 시나리오 중 지도 작성 부분에서 역할을 수행한다. ROS에서 표현되는 노드와 토픽의 흐름은 다음과 같다. all_kfs_and_pts 와 pts_and_pose 토픽이 3D 포인트클라우드 지도에 해당하며, Gridmap.png는 2D점유격자 지도에 해당한다.
    지도작성 프로세스 노드 흐름
  3. 시각적 위치 추정
    시각적 위치추정은 Visual SLAM의 Localization과 Relocalization 기능을 기본으로 둔다. Localization은 연속적인 프레임에서 특징점들을 Tracking 하고, Relocalization은 Localization 도중 급격한 움직임이나 노이즈로 인해 Tracking을 놓쳤을 경우 Bag of word 사전에서 자신의 위치를 검색하여 자신의 위치를 해당 위치로 추정한다. Bag of word 에는 지도작성을 하면서 저장된 키프레임이 들어있으며, 특징점의 매칭 비율을 통해 자신의 위치를 추정한다. 이는 하드웨어 사양과 밀접한 연관이 있으며, 본 프로젝트에서는 하드웨어의 사양이 좋지 않기 때문에 스로틀링을 통해 연산의 프레임을 낮추고, 모든 UI를 제거함으로써 이를 해결하고자 하였다.
    Bag of words 에 저장된 키프레임
    ORB SLAM 노드는 지도를 그리지 않고 이미 저장된 지도로부터 Localization 과 Relocalization을 수행하는 모드를 지원하고 있으며 길안내 프로세스에서는 해당 모드를 사용하도록 하였다.
    길 안내 프로세스의 ORB SLAM 노드 입/출력
  4. 경로 계획
    경로계획은 A* 알고리즘을 사용한다. 오늘제빵소 경로계획1.gif 여기서 F: 시작–목표 노드의 경로가중치, G: 시작–현재 노드의 경로가중치, H: 현재–목표 노드의 추정 경로 가중치를 의미한다. 지도이미지의 Heuristic 그래프 H는 픽셀간 거리로써 간단하게 만들어 질 수 있다. 격자지도 또한 벽면의 가중치를 높여 경로에서 벽에 부딪치지 않도록 한다.만들어진 경로는 경로 단순화 알고리즘을 통해 회전지점을 기준으로 간단하게 변형되며 이렇게 생성된 간단한 경로를 기준으로 길 안내를 실행한다. 경로직선 각각을 하나의 과정으로 두고, 자신이 속한 경로 다음 경로의 위치와 회전각으로 사용자에게 다음 회전지점까지의 거리와 회전 방향을 제시한다. 또한 자신의 위치가 현재 속한 경로로부터 일정거리 이상으로 멀어지게 되면 경로를 재생성하고, 같은 프로세스를 반복하도록 한다.
    경로계획 (분홍:A*경로 초록:단순경로)
    ORB_SLAM, 경로계획은 메인 동작 시나리오 중 길 안내 부분에서 역할을 수행한다. ROS에서 표현되는 노드와 토픽의 흐름은 다음과 같다. navigation_gui노드가 target_point, 즉 목적지를 선택하면, pose_converter가 전체 프로세스를 실행시킨다. pose_converter는 3D 좌표를 2D로 바꾸고, 현재 위치와 목적지 위치를 출력함으로써 경로계획을 수행할 수 있도록하는 노드이다. A* 알고리즘은 이를 입력받아 경로를 출력하고, navigation 노드를 통해 경로가 단순화 되어 사용자가 경로를 따라갈 수 있게끔 제시하는 토픽 Instruct를 생성한다.
    길 안내 프로세스I
  5. GUI 설계
    PyQt를 활용하여 라떼판다 디스플레이를 통해 조작하는 것을 전제로 한 GUI를 만든다. GUI는 크게 두 가지로 나누어진다. 1. 작성자의 목적지 노드 설정 UI, 2. 사용자의 길안내 UI이다.첫 번째로 작성자가 사용하는 2D Map 상에서 목적지를 지정해주는 GUI이다. 지도 작성을 통해 만들어진 2D Map을 불러오면 작성자는 원하는 목적지들을 터치하고, 각 목적지에 이름을 입력해주면 지점의 픽셀위치와 정보를 저장할 수 있도록 한다.
    목적지 리스트 작성 UI
    두 번째로는 보행자 길 안내 UI이다. 시각장애인을 대상으로 하므로 가능한 한 복잡하지 않고 메뉴가 적으면서 글자와 버튼들이 크게 만들기 위하여 실행 프로세스를 3단계로 간소화하였다. 보행자가 길 안내 프로세스를 실행시키면, 저장된 문서파일로부터 목적지를 불러온다. 목적지 선택은 먼저 목적지가 속한 그룹을 선택하고 그 다음 목적지를 스크롤해서 찾는다.목적지를 정하면 길 안내 프로세스에 의해 경로계획이 이루어진다. 길 안내 UI 에서는 경로의 회전지점까지의 거리와 회전 방향을 제시한다. 목적지에 거의 접근한 경우 음성뿐만 아니라 디스플레이에서도 도착을 표시한다. 시인성 높은 색상을 고려해야 하며, 최대한 직관적으로 표시하도록 한다.
    목적지 선택UI 와 길 안내UI
  6. 음성 피드백
    Python 내의 GTTS 모듈을 사용하여 상황에 맞게 음성파일을 만들고 지우면서 음성을 출력한다. 도착알림을 시작으로 간단한 경로를 기준으로 경로를 각각의 과정으로 나누어 사용자가 진행중인 경로에 맞게 음성을 제시한다. 음성출력은 크게 네가지로 나뉘며, 1.도착알림 2.반대방향알림 3.모퉁이알림 4.거리/회전방향 제시이다. 이를 순서에 입각하여 출력한다.

결과 및 평가

완료 작품의 소개

프로토타입 사진 혹은 작동 장면

디바이스 전체구성
디바이스의 전체적인 구성이다. 좌로부터 배터리, 메인 디바이스( 임베디드보드 + 디스플레이 ), 슬링백 ( 카메라 부 ) 로 이루어져 있다.
지도 작성 프로세스
지도 작성 프로세스의 사진이다. 왼쪽 가장 위 화면은 현재 프레임 내의 특징점을 보여준다. 지도를 작성할 때 특징점을 잃어버리지 않도록 하면서 지도를 작성한다. 왼쪽 아래 그림은 점과 키프레임으로 이루어진 3D 점구름 지도이며, 오른쪽은 3D 지도를 바탕으로 구성하는 2D 점유격자 지도이다. 
목적지 저장 UI
목적지를 저장하는 GUI의 사진이다. 완성된 2D 지도는 디바이스내에 저장되고, 이 지도에 맞는 픽셀 위치로 목적지를 텍스트 파일 형태로 저장할 수 있다.

길 안내 프로세스
길안내 프로세스의 사진이다. 왼쪽은 길찾기 수행 시 디바이스에서 출력되는 화면이다. 보행자에게 오른쪽의 시각화 툴은 제시되지 않는다. 오른쪽은 시연용으로 열려있는 경로생성과 시각적 위치추정에 대한 시각화 툴이다. 디바이스의 GUI를 바탕으로 음성 메시지가 출력되며, 보행자는 두가지 정보를 통해 목적지에 다다른다. 목적지에 다다르면 디바이스는 음성과 GUI를 통해 도착을 표시한다.

포스터

오늘제빵소 포스터.png

관련사업비 내역서

항목 (품명, 규격) 수량 단가 금액(원) 비고
직접개발비
Intel RealSense D435 1 437,190 437,190
라떼판다 델타 432 DFR0543 1 271,700 271,700
7inch eDP Touch Display 1 105,900 105,900
슬링 백 1 20,680 20,680
배터리 1 36,540 36,540
골전도 이어폰 1 47,820 47,820
Wi-Fi 수신기 1 5,000 5,000
디스플레이 Housing 1 - 제작
라떼판다 Housing 1 - 제작
카메라 Housing 1 - 제작
합계 924,830

완료작품의 평가

평가항목 평가방법 적용기준 개발 목표치 비중(%) 평가결과
1. 정확도 길 찾기 및 실내 측위 정확도 m 0.5m 이하 25 만족 (평균 0.24m)
2. 실시간성 동작시간 측정 0.5초 이하 20 만족 (평균 0.12초)
3. 시인성 UI 화면 크기 cm 15cm 이상 15 만족 (7in = 17.78cm)
4. 무게 저울 kg 1.5kg 이하 15 만족 (1.2kg)
5. 디자인 설문조사 평균 4점 이상(5점 만점) 15 만족 (4.3점)
6. 전력 사용 시간 측정 시간 2시간 이상 동작 10 만족 (5시간 이상 동작)

전체적인 지도 작성 & 길찾기 프로세스는 활동에 제약이 그나마 적은 과학기술관 3층에서 실행되었다.

정확도의 경우 실내 위치 추정이 가능한 10개의 무작위 위치에서 실제 위치와의 오차를 측정함으로써 평가하였다. 이는 평균 0.24초가 나왔으며, 이론적인 시각적 위치추정의 정확도만큼 정확하게 측정되었다.

실시간성은 특징점 매치 후 GUI 출력까지를 기준으로 평가하였다. 카메라는 20프레임으로 0,05초마다 한번의 알고리즘을 수행한다. Time 모듈을 통해 확인한 결과, GUI/음성에 적용되는 지시가 나타나기까지 평균 0.34초의 수행시간을 가졌음으로 평가를 만족하였다.

시인성의 경우 7인치 디바이스를 사용함으로써 나안시력 0.1을 가진 조원이 길 안내에서 나타나는 화살표의 방향을 평가하는데 무리가 없었다.

디자인은 23 명의 사람들에게 디바이스의 디자인을 설문하였으며, 평균 4.3 점으로 목표치를 달성하였다.

무게는 1.2 kg 으로 개발 목표치를 준수하였으며, 디바이스는 5시간 이상 동작하였다.

향후계획

현재 프로토타입의 평가는 위와 같이 요구사항을 대부분 만족시켰으나, 사용된 임베디드 보드가 지도 작성프로세스에 있어 일정 수준 이상 단계에서 한계를 보이기 때문에 몇가지 상정된 경로를 기준으로 지도 작성을 해야 한다. 이어지는 문제점으로 지도공간이 한정되어 시각적 위치추정 또한 한정적으로 진행된다. 이에 대한 개선방안으로는 하드웨어 자원을 좀 더 강화하거나 향후에 존재할 더욱 가벼운 알고리즘을 사용하는 것으로 개선될 수 있다.이미지 정보를 지도 작성에 사용하는 경우 특징점이 잘 나타날 수 있는 공간이 필요하다. 특징점이 잘 나타나는 공간이란, 기본적으로 코너포인트가 많은 공간을 의미하며 때문에 이러한 방식의 지도 작성에서는 공간의 소유주가 인위적으로 공간의 변화를 주는 경우가 많다.                                 
그러나 학교 건물은 공간을 인위적으로 조작할 수 없어 프로젝트의 특징점 개수가 상대적으로 적었다. 본 프로젝트는 이를 경로의 단순화와 지도의 오프셋을 통해 해결하였지만, 향후에 더 자율적인 공간에서 디바이스를 실험할 수 있을것이다. 코로나 사태로 인해 실제 시각장애인분을 섭외하기가 어려워 대신 나안 시력이 0.1*인 조원이 디바이스를 실험해야 하였다. 이는 추후에 사태가 진정되면 실제 시각장애인분을 모셔와 디바이스를 테스트하고, 개선해야 할 것이다. 또한 전맹의 경우 현재 목적지입력 방식이 스크린터치이기 때문에 어려울것이라고 생각한다. 따라서 향후 음석인식 모듈을 통해 이를 해결할 것이다.

특허 출원 내용

발명의 명칭 : 영상을 활용한 실내 길안내 서비스와 그 방법(Indoor navigation service using video and Method)

출원번호 : 10-2021-0177128

부록

참고문헌 및 참고사이트

SBAUPT-Based Pedestrian Dead Reckoning Algorithm for Free-Moving Handheld Devices (2021, Maan Khedr and Naser El-Sheimy)

http://www.cv-learn.com/20210405-visloc-my-thoughts/ (Hyunggi Jang)

ORB-SLAM: a Versatile and Accurate Monocular SLAM System (Raul Mur-Artal, J. M. M. Montiel)

시각장애를 위한 정보통신 접근 보조기기의 소개 및 발전방향 (윤양택)

2020년 국내 위치정보 산업 실태조사 보고서 (KISA)

관련 특허

시각장애인용 스마트 지팡이(SMART STICK FOR BLIND), 1020190145726

능동형 RFID/NFC 태그를 이용한 시각장애인 길안내 시스템(Navigating system to guide the blind using active RFID/NFC Tag), 1020140090302

시각장애인을 위한 길안내 서비스 시스템 및 방법(Navigation service system and method for blindindividuals), 1020060045931

시각장애인을 위한 길안내 서비스 시스템(SYSTEM FOR PROVIDING NAVIGATION SERVICE FOR VISUALLY IMPAIRED PERSON), 1020200031925

시각장애인용 건물 길안내 시스템(GUIDE SYSTEM FOR BLIND PEOPLE), 1020170052935

실내 길안내 장치 및 그 방법(INDOOR NAVIGATION APPARATUS AND METHOD), 1020180075476

디지털 사이니지를 이용한 실내 길안내 장치(Indoor navigation apparatus using digital signage), 1020200026861

다양한 가중치를 적용한 맞춤형 실내 길안내 경로탐색 장치 및 방법(CUSTOMIZED INDOOR PATH GUIDE APPARATUS AND METHOD USING VARIOUS COST FUNCTION), 1020200026861

소스코드

GUI

  • mapping.py
    class mapping_ui(QWidget, mapping_ui.Ui_Dialog):
        
    
        def __init__(self):
            super(mapping_ui, self).__init__()
            self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
            self.setupUi(self)
            self.painter = PaintTable(self)
            self.painter.setGeometry(50,200,500,500)
            self.painter.hide()
    
    
        def open_image_btn(self):
            print("open image btn pressed")
            #address = self.get_map_addr()
            address = self.painter.get_map_addr()
            #self.open_image(address)
            #self.painter.open_image(address)
    
            self.painter.show()
        
        def close_btn(self):
            if self.painter.pos != []:
                alert_warning = '저장 경고'.decode('utf-8')
                alert_content = '저장하지 않은 내용이 있습니다.\n저장하시겠습니까?'.decode('utf-8')
                buttonReply = QMessageBox.information(self, alert_warning, alert_content,   QMessageBox.Yes | QMessageBox.No | QMessageBox.Cancel)
    
                if buttonReply == QMessageBox.Yes:
                    print('Yes clicked.')
                    self.painter.save_pos_addr(self.painter.pos_name , self.painter.pos)
                elif buttonReply == QMessageBox.No:
                    print('No clicked.')
                    sys.exit()
                elif buttonReply == QMessageBox.Cancel:
                    print('Cancel clicked.')
            else:
                sys.exit()
    
    
        def save_btn(self):
            print("save button pressed")
            self.painter.save_pos_addr(self.painter.pos_name , self.painter.pos)
        
        def get_map_addr(self):
            addr = QtGui.QFileDialog.getOpenFileName()
            return addr
    
        def open_image(self,file_addr):
            try: #이미 open된 이미지를 닫음
                self.lbl.hide()
            except:
                pass
    
            
    
            self.lbl = QLabel(self)
            self.lbl.resize(500,500)
            #맵 이미지가 500x500이라고 가정
            pixmap = QPixmap(file_addr)
            self.lbl.setPixmap(pixmap)
            self.lbl.resize(500,500)
            self.lbl.setGeometry(50,200,500,500)
            self.lbl.show()
    
    
        
    
    
    class PaintTable(QtGui.QTableWidget):
        #pixmap = QPixmap("aa.png")
    
        def __init__(self, parent):
            QtGui.QTableWidget.__init__(self, parent)
            self.center = QtCore.QPoint(-10,-10)
            self.addr = ""
            self.pos_name = []
            self.pos = []
    
        def open_image(self,file_addr):
            try: #이미 open된 이미지를 닫음
                self.lbl.hide()
            except:
                pass
    
    
            self.lbl = QLabel(self)
            self.lbl.resize(500,500)
            #맵 이미지가 500x500이라고 가정
            pixmap = QPixmap(file_addr)
            self.lbl.setPixmap(pixmap)
            self.lbl.resize(500,500)
            self.lbl.setGeometry(0,0,500,500)
            self.lbl.show()
             
    
        def paintEvent(self, event):
            painter = QtGui.QPainter(self.viewport()) 
            pixmap = QPixmap(self.addr)
            painter.drawPixmap(self.rect(),pixmap)
            painter.drawEllipse(self.center,5,5)
            QtGui.QTableWidget.paintEvent(self,event)
    
    
    
    
        def mousePressEvent(self, event):
            if event.buttons() == QtCore.Qt.RightButton:
                self.center = QtCore.QPoint(event.pos().x(),  event.pos().y())
                print self.center
                self.viewport().repaint()
                pos_name = str(self.show_input_dialog()) 
                if pos_name != '':
    
                    self.pos_name.append(pos_name)
                    self.pos.append(str(self.center)[19:])
    
    
            elif event.buttons() == QtCore.Qt.LeftButton:
                QtGui.QTableWidget.mousePressEvent(self,event)
    
    
        def get_map_addr(self):
            addr = QtGui.QFileDialog.getOpenFileName()
            self.addr = addr
            return addr
    
        def show_input_dialog(self):
            dialog_name = "장소 저장".decode('utf-8')
            dialog_content = "저장할 위치의 이름을 입력해주세요".decode('utf-8')
            get_text_dialog = QInputDialog.getText(self, dialog_name, dialog_content)
            print(get_text_dialog)
            name_position, ok = str(get_text_dialog[0]) , get_text_dialog[1] 
            if ok:
                #print(name_position)
                return name_position
            else:
                return ''
    
        def save_pos_addr(self,pos_name,pos):
            f = open("dests.txt", 'a')
            for i in range(0,len(pos_name)):
                f.write(pos_name[i]+', '+pos[i][1:-1]+', 0\n')
            f.close()
            self.pos = []
            self.pos_name = []
    
  • navigator.py
    class dest_list_dialog(QWidget, dest_list_ui2.Ui_Form):
        #목적지 선택 gui
        def __init__(self):
            super(dest_list_dialog, self).__init__()
            self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
            self.lay = QtGui.QHBoxLayout()
            self.sA = QtGui.QScrollArea()
    
            #self.sA_Lay = QtGui.QVBoxLayout()
           # self.sA.setLayout(self.sA_Lay)
           # self.lay.addWidget(self.sA)
            #self.setLayout(self.lay)
            #QWidget.__init__(self)
            # setupUi() 메서드는 화면에 다이얼로그 보여줌
            self.setupUi(self)    
        def add_list_item(self,button_name):
            
            button = QtGui.QPushButton(button_name)
            self.sA_Lay.addWidget(button)
            return
    
    
        def hide_arrow(self):
            #화살표를 숨기는 메소드. 다른 화살표를 띄우기 전에 실행
            try:
                self.lbl.hide()
    
            except:
                pass
        def hide_text(self):
            #텍스트를 숨기는 메소드. 남은 거리를 바꾸기 전에 실행
            try:
                self.lbl_text.hide()
    
            except:
                pass
    
        def print_arrived(self):
            #"도착" 글씨를 띄우는 메소드
            self.lbl = QLabel(self)
            self.lbl.resize(600,800)  
            pixmap = QPixmap("text_arrive.png")
            self.lbl.setPixmap(pixmap)
            
            self.lbl.show()          
    
        def print_right_arrow(self):
            #오른쪽 화살표 띄우는 메소드
            self.lbl = QLabel(self)
            self.lbl.resize(600,800)  
            pixmap = QPixmap("arrow_right.png")
            self.lbl.setPixmap(pixmap)
            
            self.lbl.show()       
    
        def print_left_arrow(self):
            #왼쪽 화살표 띄우는 메소드
            self.lbl = QLabel(self)
            self.lbl.resize(600,800)  
            pixmap = QPixmap("arrow_left.png")
            self.lbl.setPixmap(pixmap)
            self.lbl.show() 
    
        def print_straight_arrow(self):
            #직진 화살표 띄우는 메소드
            self.lbl = QLabel(self)
            self.lbl.resize(600,800)   # 이미지를 보여주기 위해 출력될 label의 크기를 설정
            pixmap = QPixmap("arrow_straight.png")
            self.lbl.setPixmap(pixmap)
            self.lbl.show() 
    
        def print_meter_text(self,meter):
            self.lbl_text = QLabel(self)
            self.lbl_text.resize(300,50)
            text_to_print = str(meter) +"m"
            text_to_print = text_to_print.decode('utf-8')
            self.lbl_text.setText(text_to_print)
            self.lbl_text.setFont(QtGui.QFont("맑은고딕",48))
            self.lbl_text.setGeometry(240,750,300,50)
            self.lbl_text.show()
    
        def home(self):
            #홈버튼이 눌렸을 때 할 행동
            self.hide_arrow()
            self.hide_text()
            pass