희희

cdc wiki
이동: 둘러보기, 검색

프로젝트 개요

기술개발 과제

국문 : Ohmnilabs의 telebot을 활용한 VR을 사용한 전시회 관람 로봇

영문 : A robot for watching a exhibition via VR using Ohmnilabs' telebot

과제 팀명

희희

지도교수

김성환 교수님

개발기간

2018년 3월 ~ 2018년 6월 (총 4개월)

구성원 소개

서울시립대학교 수학과 2013540003 권형구(팀장)

서울시립대학교 컴퓨터과학부 2014920029 위세라

서울시립대학교 컴퓨터과학부 2014920053 조영서

서론

개발 과제의 개요

개발 과제 요약

하루가 다르게 변해가는 세상을 살아가는 바쁜 현대인들은 시간적 또는 공간적인 제약으로 인해 관람하고자하는 전시회 또는 박람회에 참석하지 못하는 경우가 많습니다. 이러한 시공간적인 제약을 최소화 시킬 수 있는 방안을 모색하던 중에 전시회 박람 로봇을 제작하게 되었습니다. 사용자는 로봇을 원하는 장소에 보낸 후에 웹 사이트를 이용해서 ‘지도 제작’을 로봇에게 요청합니다. 로봇은 웹 서버로부터 요청을 받은 후 실시간으로 현장을 촬영하기 시작합니다. 사용자는 자신의 컴퓨터를 이용해서 현장의 상황과 지도 제작 과정을 확인할 수 있습니다. 또한 서버로부터 받은 위치 정보를 기반으로 로봇은 스스로 장애물을 피해 이동합니다. 로봇이 지도 제작을 완료한 후 사용자는 VR기기를 통해서 촬영된 지도를 확인할 수 있습니다.

개발 과제의 배경

- 교통이 좋지 않거나 시간이 없어 국내외에서 열리는 전시회 또는 박람회에 참가하지 못하는 경우가 있다.

- 어떤 전시회는 참석하지 않으면 정보의 격차를 발생시켜 개인이나 단체에 손실을 불러올 수 있다.

- 특히 국내라고 하더라도 교통 오지에 거주하는 경우 전시회가 열리는 큰 도시로 이동하는 데 막대한 비용이 발생하기 때문에 손실을 감수해야만 하는 경우도 있다.

- 전시회 관람 로봇을 활용하면 여러 사람들이 먼 곳에서도 전시회를 즐기고 배울 수 있다.

- 국내외 어느 곳이든 체험할 수 있어 환경의 제약을 벗어날 수 있게 해준다.

개발 과제의 목표 및 내용

SLAM 기법을 이용하여 로봇이 스스로 지도를 만들고 자신의 위치를 특정할 수 있게 한다.
-  라즈베리파이와 카메라 파이를 이용해 360도 주변 모습을 캡쳐한다.
-  라즈베리파이에서UV4L 모듈을 사용해 실시간 영상 스트리밍 서버를 구축한다.
- 컴퓨터에서 SLAM연산을 수행하여 지도를 제작하고 로봇의 위치정보를 다시 로봇에게 전송해준다.
◇  VR기기를 이용해 로봇을 움직이며 전시회를 관람한다. 
- HMD를 이용해 로봇이 전송해주는 이미지를 관람한다.
-  키보드 혹은 HMD의 조종 방식을 통해 로봇을 움직인다. 
- 바뀐 위치를 제작된 지도에 업데이트한다. 
- 위와 같은 방식을 반복하며 전시회를 관람한다.

관련 기술의 현황

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

*전 세계적인 기술현황
◇ SLAM
- 2016년 10월, 구글에서 2D 지도 뿐만 아니라 3D지도 또한 제작할 수 있는 '카토그래퍼'라는 SLAM기술을 오픈소스로 공개하였다.
- 최근 ‘ㅅ’사의 로봇청소기는 SLAM 알고리즘을 이용해 그동안 청소하지 못했던 위치에 대한 인식 및 측정, 청소 등을 수행하고 청소에 대한 경과 및 결과를 사용자에게 알려주는 기능을 탑재하여 출시되었다.
- 자동차 산업에서도 네비게이션, 자율 주행 등 SLAM 알고리즘을 접목시켜 진행되는 프로젝트가 꾸준히 늘어나고 있다.
- github 등 오픈소스 커뮤니티에 다양한 SLAM Project들이 올라있다.
◇ 영상 stitching
- 스마트폰의 파노라마 촬영 기능에 이용되고 있다.
- 미스티카VR 등 저렴한 가격으로 쉽게 Stitching 기술을 사용할 수 있는 소프트웨어들이 공개되어있다. 


*특허조사 및 특허 전략 분석
◇ 천정의 반복 무늬와 화소이동벡터를 이용한 로봇의 위치 및 방향 계산 
 - 2012년 5월 등록되었다.
 - 천정에 반복되는 무늬가 있는 경우 각 지점으로부터의 거리를 계산하여 로봇의 위치와 방향을 계산하는 방법이다.
-
천정의 반복 무늬와 화소이동벡터를 이용한 로봇의 위치 및 방향 계산
◇ 특징점을 이용한 영역 구분 방법 및 장치와 이를 이용한 이동 청소 로봇 
- 2007년 12월 등록되었다.
- 삼성전자주식회사에서 출원한 특허로 특징점을 이용한 영역 구분 방법 및 장치와 이를 이용한 이동 청소 로봇.
- 특징점을 이용한 영역 구분 방법은 장애물과의 거리를 감지하여 얻은 다수의 격자점을 이용하여 그리드 맵을 생성하는 단계, 그리드 맵으로부터 특징점을 추출하는 단계, 특징점 중에서 영역구분요소의 거리범위에 포함되는 후보 특징점 쌍을 추출하는 단계, 후보 특징점 쌍 중에서 영역구분요소의 요건을 만족하는 최종 특징점 쌍을 추출하는 단계, 최종 특징점 쌍을 이어 임계선을 생성하는 단계 및 임계선과 그리드 맵을 이은 폐곡선으로 만들어진 영역들 사이의 크기 관계에 따라 최종영역을 생성하는 단계를 포함한다.
-
특징점을 이용한 영역 구분 방법 및 장치와 이를 이용한 이동 청소 로봇
◇ 단일 카메라를 이용한 입력 비디오영상에서 3차원 공간정보추출 시스템
- 2008년 8월에 출원되었다.
- 본 발명은 단일 카메라로 입력되는 비디오(동영상)에서 3차원 공간정보를 추출하는 알고리즘으로서, 상세하게는 입력영상을 확장 칼만 필터(Extended Kalman Filter) 알고리즘을 이용하여 특징점(Feature Point)를 인식하고, 그 인식된 특징점의 3차원 공간상의 위치를 추적하는 소프트웨어 및 알고리즘에 관한 것이다.

*기술 로드맵

기술로드맵

시장상황에 대한 분석

  • 경쟁제품 조사 비교
- FOVE HUG Project
- HMD착용자가 더 현실감을 느낄 수 있도록 눈 위치에 해당하는 2개의 렌즈를 부착했으나 로봇은 거의 정지된 상태에서 바라보게 설계되어있다. 또 해당 위치에 대한 지도를 제공해주지는 않는다. 로봇의 시야전환에 따라 HMD착용자의 시야가 전환되므로 VR영상에 다소 지연이 있을 것으로 생각된다.
  • 마케팅 전략 제시
SWOT 분석
강점(Strength) 약점(Weakness)
1 1. 웹 기반 기술로 인터넷에 연결할 수만 있으면 공간에 제약을 받지 않음

2. SLAM기술의 적용으로 공간 독립적으로 운영할 수 있음

1. 소수의 Pi camera에 stitching 기술을 적용시켜 영상의 선명도가 낮음

2. 평면 영상 전송으로 인한 입체감 저하

기회(Opportunity) SO 전략 WO 전략
1. 비슷한 기능을 수행하는 로봇이나 상품의 부재

2. 전시회에 참석할 시간, 환경적 여건이 없어서 참석하지 못하는 사례가 많아 높은 수요가 예상됨

- 전시회의 홍보와 함께 로봇의 운영을 알림으로써 VR 관람객 확보

- 누구나 어디서든 손쉽게 사용 가능하다는 점을 강조

- 카메라 교체나 VR 영상 송출방식의 간단한 변경 등으로 성능을 향상시킬 수 있음을 강조

- 높은 수요량에 비해 낮은 공급량을 강조하여 홍보

위협(Threat) ST 전략 WT 전략
1. 전시회 측의 로봇 운영 거부 가능성

2. 관람객 등으로 인한 로봇의 파손이나 충돌, 사고 가능성

- SLAM 기술로 전시회 벽면 등과 충돌할 가능성이 적음을 강조

- 로봇의 전시회 관람만 별도로 허용되는 시간을 만드는 등의 노력을 통해 관람객과의 충돌 가능성을 낮춤

- 기기 부품의 변경으로 간단히 성능을 향상시킬 수 있음을 강조

- 입체 영상을 전송하도록 하여 로봇 조작 중 충돌 가능성을 낮춤

개발과제의 기대효과

기술적 기대효과

◇VR기술의 향상
- VR관객의 증대로 영상 송 수신 기술이 보다 중요하게 다뤄질 것이다. 또 VR기술로 사회적 불평등을 해소하려는 움직임이 늘어날 것이며 그에 따라 현재보다 다양한 방향으로 VR기술이 발전할 것이다.
◇Stitching 기술의 향상
- 영상의 품질을 결정하는 것이 Stitching 기술이 됨에 따라 보다 선명하고 이질감 없는 영상을 제공하기 위해 관련 디스플레이 성능이나 기술이 향상될 것이다.

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

사회적 파급효과
- 보다 많은 사람들이 전시회를 경험할 수 있을 것이다.
- 전시회가 자주 열리는 도시에 가지 않아도 전시회를 경험할 수 있게 됨으로써 도시와 농촌간의 문화적 격차를 해소할 수 있을 것이다.
- 환경의 제약을 받지 않고 사람들이 참여하게 되어 전시회의 가치가 보다 정확히 평가될 수 있다.
- 신체적 장애, 정신 질환 등의 이유로 외출을 꺼려하는 사람들에게도 전시회 관람 기회를 동등하게 제공함으로써 문화적 격차를 줄일 수 있을 것이다.
경제적 파급효과
- 이촌향도 현상을 일부 해소할 수 있다.
- 전시회에 참여할 수 있는 방법이 다양해짐으로 전시회 운영비를 더 많이 얻을 수 있을 것이며 향후 전시회에 긍정적인 영향을 끼칠 것이다.
- 시공간적 제약을 받지않고 다양한 전시회를 관람하는 것이 가능해지기 때문에 교통비는 절감할 수 있을 것이다.
- 학교나 기타 단체에서 체험학습으로 전시회장을 직접 가는 것 대신에 VR기기로 간접체험하는 형태의 관람이 보편화 되면서 VR기기 구매율이 증가할 것이다.

기술개발 일정 및 추진체계

개발 일정

단계별 세부개발 내용 담당자 개발기간 (월단위) 비고
3 4 5 6
개념 설계 및 주제 선정 권형구
라즈베리 파이와 파이카메라의 설치와 실시간 영상 스트리밍 위세라
SLAM기법을 이용한 지도 제작과 위치 특정 조영서
camera calibration을 통한 SLAM정확도 향상 전원
테스트 및 상용화 전원

개발일정의 간트 차트

구성원 및 추진체계

권형구
- 주제 선정 및 개념설계를 한다. 라즈베리 파이와 파이카메라를 로봇에 설치하며 촬영된 영상을 실시간으로 전송할 수 있게 한다.

위세라
- 실시간 영상으로 SLAM 연산을 수행하여  전시회장의 지도를 제작하고 로봇의 위치를 특정 지을 수 있게 한다.

조영서
- 파이 카메라에 camera calibration을 하여 내부 요인들을 구한다. 이를 SLAM에 적용하여 initializaion 시간을 단축시키고 정확도를 향상시킨다.

설계

설계사양

제품의 요구사항

번호 요구사항 D or W 비고
1 로봇이 실시간으로 촬영을 할 수 있다. D
2 사용자가 웹 사이트를 통해서 로봇에게 지도 제작 명령을 내릴 수 있다. D
3 로봇이 장애물을 피해 스스로 주행할 수 있다. D
4 로봇이 지도를 제작할 수 있다. D
5 사용자가 지도 제작 과정을 실시간으로 확인할 수 있다. D
6 사용자가 VR 기기를 사용하여 로봇이 만든 지도를 볼 수 있다. W

목적계통도

목적계통도.jpg

평가 내용

1. 로봇이 실시간으로 촬영을 할 수 있는가?

2. 로봇이 장애물을 피해서 스스로 주행할 수 있는가?

3. 로봇이 지도를 제작할 수 있는가?

4. 사용자가 지도 제작 과정을 실시간으로 확인이 가능한가?

5. 사용자가 VR 기기를 사용하여 로봇이 만든 지도를 볼 수 있는가?

개념설계안

SLAM
- 전송된 이미지들에서 특징점들을 추출하여 기록, 이를 비교하며 지도를 제작하고 이를 바탕으로 로봇 또는 드론 등의 위치를 파악해내는 기술이다. 입력 값으로 이미지 파일을, 출력 값으로 예상되는 개체의 위치를 갖는다.
Web Server
- 사용자로부터 이동명령을 입력 받아 Ohmnilabs telebot에게 명령을 전달, 로봇을 움직이고 Raspberry Pi로부터 사진을 전송 받는다. 전송 받은 이미지를 SLAM을 통해 연산하여 로봇의 위치를 계산한다. 여러 기계들이 서로 연결되는 hub역할을 한다.
- SLAM은 ORB SLAM2 라이브러리를 사용하고, HTTP 프로토콜을 사용하여 실시간 영상 스트리밍 서버에 접속하고 로봇을 조종할 때도 웹 페이지를 이용한다. 
Web Client Page
- 실시간으로 사용자에게 입력을 받아서 동작을 수행하는 테스트 페이지와 사용자가 동작을 명령하는 조작 페이지, OhmniLabs에서 제공해준 API를 이용하여 로봇에게 명령을 요청하는 명령 페이지로 구성되어있다.
- 조작 페이지에서 서버에 명령을 요청하면 서버에서는 명령 queue에 명령을 저장해둔다. 명령 페이지에서는 서버에 연속적으로 요청을 보내고 서버는 만일 명령 queue에 들어온 명령이 있다면 사용자가 요청한 명령을 명령 페이지에 전송해주고 없다면 null 값을 보내준다. 명령 페이지에서는 요청받은 명령에 따라서 미리 작성해 놓은 함수를 실행한다.
Raspberry Pi & Pi Camera
- Ohmnilabs에서 카메라 관련 API를 제공해주지 않는 관계로 로봇에 라즈베리파이와 파이카메라를 부착해서 사진 및 영상 촬영을 수행한다.
- SLAM 연산을 실시간으로 수행하기 위해서 라즈베리파이를 이용해 실시간 영상 스트리밍 서버를 구축한다.
- Raspberry Pi 3 model B를 사용했다.
Ohmnilabs telebot
- PVT Black 모델을 사용하며 웹 페이지를 열어서 로봇 동작을 수행할 수 있는 전용 어플리케이션과 브라우저를 갖고 있다. 전, 후, 시계방향 회전, 반시계방향 회전, 음성 출력, 화면 각도 조정 등의 기능을 수행할 수 있으며 이동 속도, 회전 속도 등 또한 조정할 수 있다.
희희프로젝트 설계개념도

상세설계 내용

조립도

희희 조립도.jpg

조립 순서

1. Raspberry Pi와 Pi Camera를 연결
2. PVT Black의 상단에 Pi Camera가 전방을 향하도록 Raspberry Pi 부착
3. PVT Black 및 Raspberry Pi 네트워크 연결

부품도

PVT Black과 Raspberry Pi 접합부

Ohmni Telebot에 Raspberry Pi와 파노라마 렌즈, Camera Pi를 부착하기 위한 접합부이다.

왼쪽부터 차례로 부품도1, 부품도2, 출력 예


(설명은 부품도1의 색상을 기준으로 함)

(가로 * 세로 * 높이 , 각 mm 단위)

1. 적색부분
- 92 * 59 * 3
2. 녹색부분
- 95 * 59 * 37
3. 귤색부분
- 58 * 29 * 52
4. 자색부분
- 36 * 36 * 13

소프트웨어 설계

ORB SLAM2

- Monocular, Stereo, RGB-D 카메라를 위한 SLAM 시스템을 제공하는 라이브러리로 Map reuse, Loop closing 및 Relocalization 기능을 포함하고 있다.

- 실내에서부터 산업 환경에서 비행하는 무인 비행기 및 도시 주변에서 운전하는 자동차에 이르기까지 다양한 환경에서 표준 CPU로 실시간으로 작동한다.

ORB SLAM의 결과 예
ORB SLAM의 설계
- ORB-SLAM2의 3가지 주요 병렬 스레드
1. Tracking
- Local map에 대한 특징점 매치를 발견하고 Motion-only BA(Bundle adjustment)를 적용하여 reprojection error를 최소화함으로써 매 frame마다 카메라를 localization한다.
- 위치 인식은 루프를 닫거나 공격적인 동작으로 인해 tracking failure가 발생하고 난 후, 카메라를 relocalization 하기 위한 SLAM 시스템의 핵심 모듈이다.
- Tracking failure가 발생했을 경우나 이미 매핑된 장면에서 재 초기화를 할 경우, 루프를 감지했을 경우, relocalization을 하기 위한 DBoW2기반의 위치 인식 모듈을 내장했다.

2. Local mapping
- Local map 을 관리하고 최적화한다. Local BA를 수행한다.

3. Loop closing
- 센서가 mapping된 영역으로 돌아왔을 때 감지하여 탐색에서 누적된 오류를 수정한다.
- 큰 loop를 검출하고 pose-graph 최적화를 수행함으로써 누적된 drift를 정정한다. 
- pose-graph 최적화를 수행한 후, 네번째 스레드를 시작하여 최적의 구조 및 동작 솔루션을 계산한다.
A. Monocular, Close Stereo, Far Stereo Keypoints

Stereo방식과 RGB-D방식의 차이
- Keypoints 특징 기반 방법인 ORB-SLAM2는 입력을 사전처리하기 위하여 위의 그림과 같이 주요 key point 위치에서 특징점을 추출한다.
1) Stereo camera
- 3개의 좌표 x_S=(u_L,v_L,u_R), 왼쪽 이미지의 좌표 (u_L,v_L)및 오른쪽 이미지의 u_R로 정의된다.
- 두 이미지에서 ORB를 추출하고 모든 왼쪽 ORB에 대해 오른쪽 이미지에서 일치 항목을 검색한다. 이는 정류된 스테레오 이미지라고 가정할 때 매우 효율적으로 수행될 수 있다. 그런 다음 왼쪽 ORB의 좌표와 오른쪽 일치 항목의 수평 좌표로 스테레오 keypoint를 생성한다. 
2) RGB-D camera
- RGB 이미지에서 ORB 특징점을 추출한다.
- 좌표 (u_L,v_L)를 갖는 각 특징점에 대해 깊이 값 d를 가상 오른쪽 좌표로 변환한다.
- Ur = U_L - (f_x b)/d,  (f_x 는 수평 초점 거리, b는 structured light projector와 적외선 카메라 사이의 기준선)
- 깊이 센서의 불확실성은 가상 오른쪽 좌표의 불확실성으로 표현된다.
3) Monocular camera
- Key point는 왼쪽 이미지의 두 좌표 x_m=(u_L,v_L) 로 정의되며 Stereo 일치를 찾을 수 없거나 RGB-D의 경우에 유효하지 않은 깊이 값을 갖는 모든 ORB에 해당한다. 이러한 점은 여러 보기에서 삼각형으로만 표시되며 눈금 정보는 제공하지 않지만 회전 및 평행 이동 추정에 기여한다.
B. System Bootstrapping
- Stereo 또는 RGB-D 카메라를 사용하는 주된 이점 중 하나는 한 프레임의 깊이 정보를 가짐으로써 Monocular의 경우처럼 모션 초기화의 특정 구조가 필요 없다는 것이다.
- 시스템을 시작할 때 첫번째 프레임으로 키 프레임을 만들고, pose를 원점으로 설정하고 모든 Stereo 키 포인트로부터 초기 맵을 만든다.
C. Bundle Adjustment with Monocular and Stereo Constraints
1) Motion-only BA
- Tracking스레드에서 카메라 pose를 최적화한다.
- 모든 점들의 집합이  i∈χ 일 때, Motion-only BA는 카메라 좌표계 R SO(3) 와 매치된 3D 점 점 x^i∈R^3 (Monocular x_m^i∈R^2 , Stereo x_s^i∈R^3)과 키포인트 x_((.))^i사이의  reprojection error를 최소화하는 위치 t∈R^3을 최적화한다.

Motion-only BA에서의 최적화 수식
- 여기서  ρ 는 강력한 Huber 비용 함수이고 ∑는 키 포인트의 스케일과 관련된 공분산 행렬이다. 투영 함수 π_((.)), monocular  π_m, 정류된 Stereo π_s 는 다음과 같이 정의된다.


투영함수
- (f_x, f_y) : 초점 거리
- (c_x, c_y) : 주요한 점
- b : 기준선


2) Local BA
- Local mapping 스레드에서 키 프레임들의 local window와 포인트를 최적화한다.
- Local BA는 일련의 가시적인 키 프레임 K_L과 해당 키 프레임에 표시된 모든 점을 최적화한다.
- K_L이 아닌 다른 모든 키 프레임 K_F는 P_L에서 점을 관찰하면 비용 함수에 기여하지만 최적화에서는 고정되어 있다. 키 프레임 k에서 P_L과 키 포인트의 점 사이의 일치 집합으로 X_k를 정의하면 최적화 문제는 다음과 같다.
Local BA에서의 최적화 수식
3) Full BA
- Loop closure 후 모든 키 프레임과 포인트를 최적화한다.
- Full BA는 gauge freedom를 제거하기 위해 고정된 원점 키 프레임을 제외하고 지도의 모든 키 프레임과 점이 최적화 된 로컬 BA의 특정 사례이다.
D. Loop Closing and Full BA
- Loop closing은 두 단계로 수행된다.
  1. Loop를 감지하고, 유효성을 검사한다.
  2. Pose-graph를 최적화하여 Loop를 수정한다.
- scale drift가 발생할 수 있는 Monocular의 ORB SLAM과 달리, Stereo/Depth 정보는 스케일을 관찰 가능하게 만들고, 기하학적 검증 및 pose-graph 최적화는 더 이상 scale drift를 처리할 필요가 없으며 유사성 대신 강체 변형을 기반으로 한다.
- ORB-SLAM2에서는 최적의 솔루션을 얻기 위해 pose-graph 이후 Full BA 최적화를 통합 했다. 이 최적화는 매우 많은 비용이 소요될 수 있으므로 별도의 스레드에서 동작 시켜 시스템이 계속 지도를 만들고 loop를 감지할 수 있게 해야한다. 하지만 이것은 현재 지도의 bundle adjustment 값과 합치는데 어려움을 가진다.
- 최적화를 진행하는 동안, 새로운 loop가 감지되면, 최적화를 중지하고 loop close를 진행한다.
- Full BA가 끝나면, 업데이트된 하위 키 프레임들과 full BA에 의해 최적화된 점들을 병합해야한다. 이때 키 프레임은 업데이트되지 않은 키 프레임과 최적화가 실행되는 동안 삽입된 지점을 병합해야한다.
- 이는 업데이트된 키 프레임의 수정 (즉, 최적화되지 않은 포즈에서 최적화 된 포즈로의 변형)을 스패닝 트리를 통해 업데이트되지 않은 키 프레임에 전파함으로써 수행한다.
- 업데이트되지 않은 점은 참조 키 프레임에 적용된 보정에 따라 변형된다.
E. Keyframe Insertion
- ORB-SLAM2는 Monocular ORB-SLAM에 도입된 정책에 따라 키 프레임을 자주 삽입하고 나중에 중복된 키 프레임을 제거한다.
가까운 Stereo points와 먼 Stereo points의 구분
- 가까운 stereo 포인트와 먼 stereo 포인트를 구별하면 키 프레임 삽입을 위한 새로운 조건을 도입할 수 있다. 그림에서와 같이 장면의 큰 부분이 stereo 센서에서 멀어지는 까다로운 환경에서 중요할 수 있다. 변환을 정확하게 추정하기 위해 가까운 지점을 충분히 가질 필요가 있다.
- 추적된 닫기 점의 수가 T_τ 이하로 떨어지고 프레임이 최소한 T_∁의 가까운 입체 점을 만들 수 있으면 시스템에서 새 키 프레임을 삽입한다. T_τ=100,T_∁=70 이 잘 작동한다.
F. Localization Mode
- 환경에 중대한 변화가 없는 한 잘 매핑 된 영역에서 lightweight long-term localization 에 유용할 수 있는 모드이다..
- Local mapping 및 loop closing 스레드가 비활성화되고 필요에 따라 relocalization을 사용하여 카메라가 tracking에 의해 지속적으로 localize된다.
- Tracking은 시각적인 주행 거리 일치 및 맵 지점 일치를 활용한다.

1. 시각적 인 주행 거리 일치는 현재 프레임의 ORB와 스테레오 / 깊이 정보의 이전 프레임에서 만들어진 3D 점 사이의 일치이다. 이러한 일치는 매핑 되지 않은 영역에 대해 localization을 강력하게 하지만 drift를 누적 할 수 있다.
2. 맵 포인트 매치는 기존 맵에 drift가 없는 localization을 보장한다.
UV4L

UV4L은 원래 실제 또는 가상 비디오 입출력 장치용 Video4Linux2 호환, 크로스 플랫폼, 사용자 공간 드라이버의 모듈 식 모음으로 고안되었다. 원래의 의도를 그대로 유지하면서 UV4L은 수년 동안 진화해 왔으며, 현재 선택적으로 IoT 장치 용으로 만들어진 일반 용도의 스트리밍 서버 플러그인을 포함하고 있다. 또한, 다수의 표준 및 현대식 내장형 웹 응용 프로그램을 사용할 수 있는 사용자 지정 웹 응용 프로그램을 제공한다. 암호화, 양방향 데이터 채널, 오디오 및 비디오 스트리밍 또는 웹을 통한 회의와 같은 실시간 커뮤니케이션을 위한 서비스 UV4L은 또한 자체 사용자 정의 응용 프로그램을 구현하려는 개발자에게 RESTful API를 제공한다.

- 주요 특징들
  ●HTTP / HTTPS 프로토콜 모두 지원한다.
  ●표준 HTML5에서 스트리밍 및 재생하는 동안 기록된다.
  ●RESTful API를 통해 제어 가능하다.
  ●동시에 실행되는 디바이스인 만큼, 많은 Streaming Servers가 공존할 수 있는 “per-device”를 제공한다.
  ●주어진 파일시스템 경로에서 모든 사용자 정의 웹 페이지를 제공할 수 있다.
  ●Video4linux2을 이용한 스트리밍을 이용하면서, 모든 디바이스의 설정을 concurrent하게 할 수 있는 Control Panel 웹페이지를 포함한다.
  ●MJPEG,JPEG(HTTP/HTTPS) 또는 WebRTC( audio, video, data) 같은 실시간 스트리밍을 위용한 많은 포맷들이 가능하다.
  ●다수의 클라이언트를 매우 효율적으로 지원한다.
  ●서버가 디바이스를 이용하면서 다른 어플리케이션을 중지시키지 않는다.
  ●HTTP/HTTPS 를 통해 모든 비디오 포맷의 RAW data streams를 가져오는 (브라우저 없이) “headless mode” 를 사용할 수 있다.
  ●'user’, ‘admin’, ‘config’ 그리고 ‘www’ 사용자 인증을 지원한다.
- Streaming Server : Real-time HTTP/HTTPS Streaming Server with the native uv4l-server module
UV4L 서버 모듈은 HTTP/HTTPS 프로토콜을 통해 어느 브라우저에서나 동시에 액세스 할 수 있는 카메라 별 스트리밍 서버를 가능하게 하는 UV4L용 플러그인이다.
무엇보다도, 비디오 스트림을 다양한 방식으로 볼 수 있는 웹 인터페이스와 모든 Video4Linux로 스트리밍하는 동안 카메라 설정을 완벽하게 제어할 수 있는 제어 페이지를 제공한다. 보안 HTTPS 프로토콜 외에도 일반 및 관리자(admin) 사용자 모두에 대한 기본 인증도 지원된다.
아래에 있는 모든 URL은 단순히 하기 위해 insecure HTTP protocol 기반이지만, SSL이 활성화되어 있으면 스트리밍 서버가 보안 HTTPS 프로토콜도 지원한다.
기본적으로 서버의 홈페이지는 다음 주소를 통해 접근 가능하다.
http://raspberrypi_ip_address:8080
비디오 스트림을 보기 위해 반드시 브라우저가 필요한 것은 아니다. 비디오를 표시하는 대체 응용 프로그램으로 VLC를 사용하기도 한다. VLC 내에서 HTTP / HTTPS 를 통해 거의 모든 종류의 스트림 형식을 볼 수 있고 코드 변환 및 기록이 가능하다.
- RESTful API
UV4L에 의해 지원되는 RESTful API이다.
이 API는 Streaming Server module이 설치되어 있다면 사용 가능하다.
UV4L의 각 인스턴스는 하나의 오디오-비디오 입력장치와 연결되어 있으므로, 두 개 이상의 장치를 제어하려는 경우 두 개 이상의 전용장치가 필요하며 각 장치에는 각 configurations가 필요하다. (예 : 다른 포트 수신)
클라이언트는 Streaming Server에 대해 구성된 프로토콜에 따라 HTTP 또는 HTTPS를 통해 이 인터페이스를 이용할 수 있다. 또한 Streaming server는 개발자가 /restapi-panel 경로 아래의 웹페이지에서 이 API에서 지원하는 모든 요청을 테스트할 수 있는 패널을 제공한다.
RESTful API Panel
요청은 JSON 포맷이어야 한다. 만약 Streaming Server에서 HTTP(S) authentication을 사용한다면,각 요청은 적절한 승인 헤더를 포함하고 있어야 한다.
이 요청들을 통해 상호 작용할 수 있는 다양한 리소스가 있다. 각 자원의 아래 목록의 endpoint로 식별된다.
  ●	/api/videodev/settings
  ●	/api/webrtc/settings
  ●	/api/janus/client/settings
  ●	/api/janus/client/events
Camera Configuration for SLAM

카메라로 3차원 공간을 촬영하면 어디서 사진을 촬영했느냐에 따라 차이가 생긴다. 이때의 차이를 역이용한 것이 SLAM 기술인데 여러 방향에서 촬영된 사진들을 조합하여 촬영 위치를 역추적하는 것이다. 따라서 카메라와 실제 이미지 사이의 변형되는 정도나 방식이 중요하게 작용하는데 이러한 내부요인을 제거해야 3차원 공간좌표에 온전히 영상을 복원할 수 있기 때문이다. 이때 이 내부요인을 구하는 과정을 Camera Calibration이라고 한다.

- 주요 용어들
  ●	카메라 내부 파라미터 : 초점거리, 주점, 비대칭계수 등 카메라 제조 과정 등에서 이미 결정된 값들을 뜻한다.
  ●	카메라 외부 파라미터 : 카메라 좌표와 실제 세상에서의 좌표 사이의 변환 관계를 설명하는 파라미터이다. 즉 카메라가 어떤 위치에 어떤 방향으로 설치되어 있느냐에 영향을 받는 값으로써 우리가 수행하려는 Ohmni robot에 장착된 파이카메라를 이용, SLAM을 수연산하는 데는 큰 문제가 없다.
  ●	초점거리 f : 렌즈 중심과 이미지센서까지의 거리를 뜻한다. 일반적으로 이야기하는 렌즈의 초점거리 와는 다르다. 디지털 카메라에서 초점거리는 mm단위로 표현되고 고정되겠지만 카메라모델에서 이야기하는 초점거리는 픽셀 단위이다. 이는 촬영된 이미지는 센서의 각 cell에 해당되는데 해상도에 따라 한 cell에 할당되는 이미지의 크기가 달라지기 때문이다. 예를 들어 이미지 센서의 cell 크기가 0.1mm이고 초점거리가 f=100pixel이면 렌즈 중심에서 이미지 센서까지의 거리는 10mm인 것으로 생각하는 게 맞다. 픽셀단위로 계산하는 것은 픽셀들로 제공되는 영상에서 해석을 쉽게 하기 위해서이다.
때때로 f가 아니라 fx, fy로 나뉘어 표현되는 경우가 있는데 이것은 셀 간격이 가로와 세로 방향으로 차이가 있을 수 있기 때문이다. 하지만 현대의 대부분 카메라는 둘이 일치한다. 특히 해상도를 k배 하면 초점거리도 k배 된다는 사실에 주의해야 한다. 이는 초점거리가 디지털 카메라 등과는 다르게 상대적인 거리로 제공되기 때문이다.
  ●	Normalized Image Plane : 초점으로부터의 거리가 이미지센서 쪽으로 1픽셀인 평면을 뜻한다. 카메라로 포착한 점을 영상좌표계로 옮길 때는 우선 normalized image plane으로 옮겨야 한다. 각 X, Y 좌표를 카메라 초점에서 실제 물체까지의 거리로 나눔으로써 이 평면 상으로 점을 옮겨올 수 있다.
  ●	Normalized Image Coordinate : 3차원 상의 점을 Normalized Image Plane으로 옮겨왔을 때의 점을 말한다.
  ●	주점 : Image Center와는 다른데 영상의 중심이 아니라 실제로 핀홀(렌즈의 중심)에서 이미지 센서에 수직으로 발을 내렸을 때 수선의 발의 위치를 픽셀 단위로 나타낸 것이다. X 와 Y축에 따라 각각 cx와 cy로 표기한다. 영상 좌표는 좌측 상단 모서리가 기준이므로 앞서 설명한 Normalized Image Plane의 x, y값에 각각 cx와 cy를 더함으로써 실제 영상에서의 좌표를 얻을 수 있다.
  ●	비대칭 계수 skew_c : 이미지 센서에서 cell의 y축이 기울어진 정도를 뜻한다. 의도된 바는 아니고 제조 과정에서의 오차에서 발생하는데 현대 카메라는 대부분 이런 오류가 발생하지 않기 때문에 오늘날 중요하게 작용 하진 않는다.
Calibration에서의 초점거리
- Calibration 계산 과정
카메라 촬영에서 실제 좌표(X,Y,Z)에서 영상좌표(X, Y)로 옮기는 과정은 다음과 같다.
내부 파라미터를 포함한 계산
여기서 A행렬은 카메라 내부 파라미터이고 각 기호는 앞서 용어에서 설명한 것과 같은 것을 사용하였다. R|t에서 행렬 R은 카메라 촬영 시 카메라고 얼만큼 회전되어 있었느냐 하는 것이고 t벡터는 카메라가 어떤 위치에 있었느냐 하는 값으로 모두 카메라 외부 파라미터에 해당된다. 즉 카메라 외부 요인에 의해 점이 변형된 뒤 카메라 내부 요인에 의해 영상으로 옮겨지면서 실제 모습과는 다르게 뒤틀리는 것이다. 거꾸로 Calibration할 때 우리는 반대로 내부 요인을 먼저 계산해낸 뒤 외부 요인을 계산할 것이다.
우리는 여기서 GML C++ Camera Calibration Toolbox를 이용해 Pi Camera2의 Calibration을 수행할 것이다. Calibration을 위한 공개 tool로 쉽게 이용할 수 있다는 장점이 있다.
  ●Calibration에 사용한 이미지
Calibration에 사용한 이미지
  ●Calibration 결과
Calibration 결과
    - 초점거리 fx = 914.200  fy = 925.630
    - 주점 cx = 645.483  cy = 498.366
    - 렌즈 왜곡계수 k1 = -0.06639  k2 = 0.137605  p1 = 0.002799  p2 = 0.022749

  ●결과 적용
    SLAM의 참고자료로 카메라 Calibration, frame rate 등의 정보를 포함하고 있는 webcam.yaml에서 Calibration 결과에 해당하는 값들을 알맞게 수정하였으며 frame rate을 전송되는 이미지의 속도에 맞게 120으로, 보다 안정적인 결과를 얻을 수 있도록 nFeatures를 1000에서 3000으로 변경하였다
UV4L Camera Control Panel

UV4L에서 제공하는 카메라 configuration을 조정해주는 값이다.. 카메라로 똑같이 촬용한 뒤 제공하는 영상의 값을 수정하는 것이다. 수정할 수 있는 항목은 다음과 같다.

- 편집가능 항목
●brightness : 영상의 밝기이다. 높은 값을 줄수록 밝다. 기본값은 50.
●contrast : 영상의 각 부분 사이의 대조를 뜻한다. 값이 높을수록 대조가 크다. 기본 값은 50. SLAM은 특징점을 잡아내는 게 중요하므로 조금 높은 값을 주었다.
●saturation : 채도를 뜻한다. 값이 높을수록 채도가 높으며 기본값은 50.
●red balance, blue balance : 각각 RGB 중 빨간색과 파란색의 balance 값이다. 높을수록 해당 색상이 강하게 드러난다.
●sharpness : 영상을 좀 더 선명하게 다듬는다. 높을수록 많이 다듬으며 기본값은 50.
●rotate : 영상을 회전시키는 정도이다. 여기서는 필요치 않다.
●shutter speed : 셔터를 닫는 속도를 뜻한다. 높을수록 빠르게 닫히며 빠르게 닫힐수록 빛을 덜 받으므로 보다 밝은 빛만 잡아낸다.
●zoom factor : 영상이 확대된 수준. 기본은 1이다.
●iso sensitivity : 빛에 대한 민감도를 나타내는 값이다. 높을수록 민감하며 더불어 noise도 심해진다. 기본값은 0.
●jpeg quality : 제공되는 jpeg의 질을 뜻한다. 0에서 100의 값을 가지며 기본값은 80이다.
●frame rate : 영상은 이미지의 연속이다. 초당 제공되는 이미지의 숫자를 뜻하며 1~120의 값을 갖는다.
●mirror : 수평과 수직으로 영상을 대칭 시키는 기능이다.
●denoise : 노이즈를 제거해준다.
●auto white balance mode : 흰색 값의 balance를 조정한다. 여러 상황을 가정한 값을 제공한다. 

SLAM에 필요한 만큼 자주 영상을 제공하기 위해 frame rate을 120으로, 보다 나은 SLAM연산을 위해 width를 1000, height를 560으로, brightness를 60으로, jpeg quality를 90~100으로 조정했다.

Streaming 관련 프로토콜
RTP (Real – time transport protocol)
- 데이터의 실시간 전달과 멀티캐스팅에 사용
- 대역폭, 네트워크 구조, 라우팅 방식, 전송 프로토콜의 종류 등에 의해 데이터의 지연이 가변적
- 따라서 데이터를 즉시 보내지 않고, 지연 버퍼를 거쳐 일정한 간격으로 도착하도록 함
- RTP 프로토콜은 빠르게 데이터를 전달할 수 있는 UDP 프로토콜 위에서 구현됨
- UDP에 신뢰성을 보완함.
- 패킷 손실 검출, 패킷 순서 재구성 등 순서번호의 보장
- 불규칙하게 수신되는 데이터의 순서를 정렬하기 위해 타임스탬프 방식을 사용
- RTP의 구조
  고정 크기 헤더를 가지며, 헤더 다음에는 데이터에 따라 정보가 붙게 됨
  RTP 프로토콜 스택 구조
- 프로토콜의 동작이 응용 프로그램의 라이브러리 형태로 구현됨
- 프로토콜 내부에 위치하는 버퍼의 크기를 각 응용 프로그램마다 별도로 관리하기 용이
- RTP 에 대한 Flow control 을 위해 RTCP(Real-time Transport Control Protocol) 사용
- RTSP(Real-Time Streaming Protocol) : 실시간 전송을 위한 애플리케이션 단계의 계층의 통신 프로토콜
Web Server

Node.js의 express 프레임워크를 기반으로 웹 서버 구축. 웹 페이지에서 사용자에게 받은 명령을 Ohmni 로봇에게 전달한다. (이때, Ohmni 로봇에는 ms단위로 서버에게 request를 보내는 페이지가 띄워져있다.)

[ 사용자 <-> Ohmni ]
  1. 사용자는 조작 페이지에 접속해 서버에게 원하는 명령을 request한다.
  2. 서버에서는 사용자에게 받은 request를 명령 queue에 삽입한다.
  3. 클라이언트 페이지에 적절한 response를 보내준다.
    3-1. 명령 queue에 명령이 있으면, Ohmni 로봇이 보내는 request에 response로 사용자의 명령을 전달한다.
    3-2. 명령 queue에 명령이 없으면, response 값으로 null을 보낸다.
  4. Ohmni 로봇에 띄워져 있는 request 페이지는 서버로부터 받은 응답에 따라 함수를 호출한다.
    4-1. ‘forward’ => goForward()
    4-2. ‘left’ => turnLeft()
    4-3. ‘right’ => turnRight()
    4-4. ‘backward’ => goBackward()
Server 개요
  5. ORB-SLAM2라는 Open Source Library를 사용하여 SLAM 연산을 수행한다.
    5-1. Raspberry Pi는 포트번호 8080으로 실시간으로 영상을 스트리밍한다. 
    5-2. HTTP 프로토콜을 이용하여 Raspberry Pi가 제공하는 영상을 기반으로 SLAM 연산을 수행한다.
    5-3. 사용자가 보는 웹 페이지에 지도 만드는 과정을  미러링해서 보여준다.
  6. Raspberry Pi 가 촬영한 사진을 바탕으로 웹 페이지를 통해서 사용자에게 VR 이미지를 제공한다.
Raspberry Pi

Raspbian Stretch 운영체제를 사용한다. UV4L 모듈을 이용하여 실시간 영상 스트리밍 서버를 구축한다.

Ohmni Robot

웹 페이지가 명령하는 대로 작동한다.

유스케이스 다이어그램
Usecase Diagram

1. USER는 로봇을 조작할 수 있는 웹페이지에 로그인한다.

2. 로봇 동작 명령을 내리거나, SLAM 이용하여 지도를 제작하거나, 파이 카메라로부터 수신한 사진을 볼 수 있다.

3. 지도를 제작할 경우 사용자가 로봇 동작 명령을 내려 로봇을 움직인다

자재소요서

부품번호 부품명 규격 재질 수량 구매, 외주, 제작 비고
1 PVT Black과 Raspberry Pi 접합관절 <부품도>참조 필라멘트 1 제작 3D 프린터 이용

결과 및 평가

완료 작품의 소개

프로토타입 사진

시작 페이지 및 조작 페이지
왼쪽부터 각각 시작페이지, 조작페이지
테스트 페이지
테스트 페이지
Ohmni X Raspberry Pi X Pi Camera
Ohmni Robot과 Raspberry Pi, 그리고 Pi Camera
Pi Camera를 이용한 ORB SLAM2
Pi Camera를 이용한 ORB SLAM2

포스터

두 종류의 포스터

개발사업비 내역서

항목

(품명, 규격)

수량 단가 금액 (단위 : 천 원) 비고
현금

학생인건비(학사과정 개발자) 3 1000 3000
Raspberry Pi3 Model B 1 43.7 43.7
Pi Camera v2 1 18.7 18.7
Kogeto Dot 360º Panoramic lens 1 13.9 13.9
합계 6 3076.3

완료작품의 평가

평가항목 평가방법 적용기준 개발 목표치 비중(%) 평가결과
1.실시간 사진 및 동영상 전송 파이 카메라가 촬영한 영상을 사용자가 실시간으로 볼 수 있는지 평가 1. SLAM 연산을 수행하기에 충분한 속도와 해상도를 제공하는가

2.향후 VR영상을 제공하기에 충분한 화질과 속도로 볼 수 있는가

Frame rate 100이상, 한쪽 눈에 1280*1280 정도의 해상도 20 해상도 1920*1080의 화면도 mjpeg로 최대 120 Frames/second까지 전송이 가능하다.
2.지도 제작의 유효성 SLAM을 통해 제작된 지도를 바탕으로 위치를 잘 특정 짓는지를 평가 재방문시 로봇의 위치를 얼마나 정확하게 알아내는가 80~90%의 정확도 20 SLAM에 충분한 시간을 들이면 높은 정확도를 얻을 수 있음
3.사용자 편의성 사용자가 로봇을 통해 편리하게 지도제작을 하고 영상을 확인할 수 있는지 평가 1. 로봇의 조종이 과정이 편리한가

2. 영상이 안정적으로 제공되는가

지도 제작을 시작하는 과정이 편리하고 영상이 끊기지 않음 20 라즈베리파이의 ip를 확인하여 지도 제작을 시작해야하며 화면이 급격히 변하면 SLAM이 오류를 일으키며 종료됨
4.실시간 지도 제작 과정 확인 사용자가 지도가 제작되는 모습을 실시간으로 확인할 수 있는지 평가 사용자가 충분히 관리 가능하도록 지도 제작 과정을 제공하는가 사용자가 실시간으로 지도 제작을 감시하고 관리할 수 있도록 과정 제공 20 사용자가 지도 제작 과정을 실시간으로 확인가능
5.VR 기기를 사용한 사용자 지도 제공 VR기기를 통해 사용자가 알아볼 수 있는 지도를 전송하는지 평가 지도가 전시회 관람을 방해하지 않는가 방해 받지 않으면서 실시간으로 위치를 확인할 수 있도록 지도 제공 20 VR기기를 통한 사용자 지도는 제공되지 않음

향후계획

- SLAM을 통해 생성된 지도를 기반으로 사용자가 알아보기 쉬운 지도를 만든다.
- SLAM으로 생성된 지도를 이용해, 로봇이 스스로 이동하면서 촬영할 수 있도록 한다.
- 파노라마 렌즈를 이용하여 360도 영상을 촬영하여 사용자가 VR 기기를 통해 볼 수 있도록 한다. 
- 파노라마 렌즈를 사용했을 때, 화질이 낮아지는 것에 대한 해결 방안을 모색해야 한다.
- 로봇이 실제 전시회에 사용될 수 있도록 전시회 측의 동의를 얻어야 한다.
- 라즈베리 파이와 사용자 서버가 다른 네트워크에 있을 때 동작할 수 있는 방법을 찾아야 한다.