9조
cdc wiki
프로젝트 개요
기술개발 과제
- 국문 : 드론에 응용가능한 SLAM 알고리즘을 이용한 3D 지형 추출 기술
- 영문 : 3D terrain extraction techniques using SLAM algorithms applicable to drones
과제 팀명
- 9조
지도교수
- 김성환 교수님
개발기간
- 2018년 3월 ~ 2018년 6월 (총 4개월)
구성원 소개
- 서울시립대학교 컴퓨터과학부 20159200** 곽*우(팀장)
- 서울시립대학교 컴퓨터과학부 20159200** 김*권
서론
개발 과제의 개요
개발 과제 요약
드론에 적용가능한 SLAM 알고리즘 및 응용 기술
개발 과제의 배경
- 최근에는 드론이 4차 산업혁명을 주도할 핵심 동력으로 기존 군사 및 정찰 목적용 드론 산업에서 통신, 물류, 농업, 엔터테인먼트 등 다양한 산업으로의 활용 가치가 확대되고 있는 만큼 드론 관련 기술 또한 중요해지고 있다.
- 우선적으로 드론에 위치와 지형을 인식시켜 드론 같은 소형 무인 비행기의 자동 운전을 용이하게 할 수 있다. 또한 지형을 따로 추출하여 다양한 분야에 이용할 수 있다. 예를 들면 전시관이나 기업에서 지형 추출을 사용해 영화 또는 VR 등에 사용할 수 있는 가상공간의 모델을 쉽게 구현할 수 있다.
개발 과제의 목표 및 내용
- SLAM(Simultaneous Localization and Mapping) 알고리즘과 모노 카메라를 사용하는 드론을 이용하여 주변 3D 지형을 추출할 수 있는 기술 및 응용 기술을 개발하기로 한다.
- 로봇 청소기같이 공중에 뜨지 못하는 지상의 로봇에서 사용했던 지형 추출 기술에서 좀 더 나아가 지상의 로봇이 보지 못하는 공간까지 맵핑 할 수 있는 3D 지형 추출 기술을 드론을 활용하여 개발하기로 한다.
- 초음파 센서 등을 이용할 경우 적합하지 않은 환경(예를 들면 흙)에서는 여러 오류가 발생할 수 있으므로 이를 보완하기 위해 모노 카메라로 촬영한 영상을 기반으로 하여 해당 기술을 개발하기로 한다.
관련 기술의 현황
관련 기술의 현황 및 분석(State of art)
- 기술 로드맵
- 천장 지향 모노카메라 기반 SLAM: 실내공간에서 천장 지향 카메라를 사용하면 로봇의 이동에 따라 특징과 카메라 사이의 거리와 카메라의 방향이 변화하지 않으므로 특징의 스케일, 어파인 변화를 고려하지 않아도 된다. 또한 로봇 주변의 사람과 같은 동적 장애물이 카메라의 시야를 방해하지 않아 지속적인 SLAM이 가능하다. 그리고 일반적으로 천장의 높이는 제한적이므로 지연 없는 특징 초기화가 가능하다. 그러나 환경에 따라 특징 개수가 부족한 경우가 있다. 특징이 부족하면 위치오차가 누적되어 필터가 발산할 위험이 커지게 된다. 다른 방법들에 비해 상대적으로 연산량이 적어 저사양의 임베디드 시스템에서 동작 가능하므로, 청소로봇 등의 로봇에 탑재되어 성공적으로 상용화되었다.
- EKF-SLAM: EKF-SLAM은 정보를 평균과 공분산을 이용하여 나타내며, 공분산 행렬을 갱신하는 과정에 많은 연산이 필요하다. 그러나 항상 로봇 위치와 특징지도에 대한 가장 좋은 추정치를 유지한다. 특징의 개수가 N이라고 할 때 EKF의 연산량은 O(N^2)으로 나타낼 수 있다. 따라서 특징의 개수가 증가할 때 연산량은 기하급수적으로 증가하여 넓은 환경에서 많은 개수의 특징으로 실시간 SLAM을 수행하는데 어려움이 있다. 이러한 문제를 해결하기 위하여 EKF로 부분지도를 작성하여 통합하는 방법들이 제시되었다.
- FastSLAM: Particle Filter로 로봇의 위치를 추정하고 EKF로 특징지도를 작성하는 방법샘플/특징의 개수가 각각 M/N개일 경우 필터 갱신에 O(MlogN)의 시간이 소요된다. 일반적인 Kalman Filter 기반의 방법이 O(N^2)의 복잡도를 갖는 것과 비교하면 상당히 적은 연산량으로 SLAM을 수행할 수 있다.
- Graph 기반 SLAM: Graph 기반의 SLAM (이하 GraphSLAM)은 로봇이 지나간 지점 또는 특징 위치를 노드로 표시하고, 센서정보로부터 노드와 노드 사이의 구속조건을 에지(edge)로 정의하여 graph를 작성하며, 전체 graph를 최적화하여 누적된 오차를 최소화하는 방법이다. 그러나 상대적으로 높은 복잡도를 갖는 오차 최소화 문제를 해결하는데 어려움을 겪어 GraphSLAM 이 주요 이슈로 급부상하기까지 몇 년이 소요되었다. GraphSLAM은 정보를 누적하여 한꺼번에 graph의 최적화 문제를 해결한다. 정보를 누적하는 동안에는 로봇의 위치오차가 증가하지만, 수집한 모든 정보에 가장 최적인 추정치를 제공해주므로 EKF로 작성된 지도보다 정확한 지도를 작성할 수 있다.
개발 과제의 기대효과
기술적 기대효과
- 드론에 위치와 지형을 인식시켜 드론 같은 소형 무인 비행기의 자동 운전을 용이하게 할 수 있다. 또한 SLAM 기술 개선을 통해 자율주행 드론들의 장애물 인식 능력이 높아진다면 그에 따른 SLAM을 이용한 자율주행 드론들의 사고율도 감소할 것이다.
경제적, 사회적 기대 및 파급효과
- 지형을 따로 추출하여 다양한 분야에 이용할 수 있다. 예를 들면 전시관이나 기업에서 지형 추출을 사용해 영화 또는 VR 등에 사용할 수 있는 가상공간의 모델을 쉽게 구현할 수 있다.
- 흙과 같이 초음파 센서를 사용하기 힘든 농업 환경 등에서 이미지 인식을 기반으로 하는 SLAM을 개발한다면 해당 기술을 농업용 드론에도 적용할 수 있을 것이다.
기술개발 일정 및 추진체계
개발 일정
섬네일을 만드는 중 오류 발생: convert: Image width exceeds user limit in IHDR `/var/www/capstone/cdc/images/6/6a/9조_개발일정.png' @ warning/png.c/MagickPNGWarningHandler/1672.
convert: Image height exceeds user limit in IHDR `/var/www/capstone/cdc/images/6/6a/9조_개발일정.png' @ warning/png.c/MagickPNGWarningHandler/1672.
convert: Invalid IHDR data `/var/www/capstone/cdc/images/6/6a/9조_개발일정.png' @ error/png.c/MagickPNGErrorHandler/1646.
convert: corrupt image `/var/www/capstone/cdc/images/6/6a/9조_개발일정.png' @ error/png.c/ReadPNGImage/4095.
convert: no images defined `/tmp/transform_dc374c513086.png' @ error/convert.c/ConvertImageCommand/3210.
Error code: 1
convert: Image height exceeds user limit in IHDR `/var/www/capstone/cdc/images/6/6a/9조_개발일정.png' @ warning/png.c/MagickPNGWarningHandler/1672.
convert: Invalid IHDR data `/var/www/capstone/cdc/images/6/6a/9조_개발일정.png' @ error/png.c/MagickPNGErrorHandler/1646.
convert: corrupt image `/var/www/capstone/cdc/images/6/6a/9조_개발일정.png' @ error/png.c/ReadPNGImage/4095.
convert: no images defined `/tmp/transform_dc374c513086.png' @ error/convert.c/ConvertImageCommand/3210.
Error code: 1
구성원 및 추진체계
- 팀이 두 명만으로 구성되었기 때문에 완전히 추진체계를 세분하는 것은 의미가 없을 것으로 여겼고 각각 코드 구현과 산출물 관리에 있어서 책임자를 맡아 해당 분야에서 의견 대립으로 인한 갈등이 생겼을 때 책임자의 의견에 따르는 방식으로 위험을 회피할 수 있도록 결정하였다.
설계
설계사양
제품의 요구사항
- 요구사항 1, 2는 ORB SLAM 알고리즘을 이용해 계산한다.
- 요구사항 3은 YOLO 라는 실시간 이미지 인식 신경망을 이용해서 물체 인식 부분을 구현하고 ASSIMP 라이브러리를 통해 FBX 파일 형식의 3D 모델을 로드하여 인식한 물체에 모델을 부착할 수 있도록 구현한다.
개발 환경
- 하드웨어
- Android 운영체제의 스마트폰 (Monocular Camera)
- CUDA 9.0을 지원하는 NVIDIA Graphic Card가 장착된 PC
- 개발 환경
- Windows7 운영체제
- C++ 프로그래밍 언어
개념설계안
- 기기 구성도
- AR 모델 기능 구성도
사용 관련 기술 및 알고리즘
- SLAM 도식
- 1. Tracking: 매 프레임마다 카메라의 위치 파악, 키프레임 삽입 시기 결정
- 2. Local Mapping: 키프레임 처리 및 local BA 실행 등 map point, key frame 최적화
- 3. Loop Closing: 카메라가 루프를 그렸는지 확인 및 오차 수정
- Epipolar Geometry에 의하면 임의의 두 지점에서 찍은 영상의 매칭점 쌍들은 Epipolar Constraint에 의해 관계되어있기 때문에 두 이미지와 대응되는 최소 5개의 매칭 쌍을 알면 행렬 형태의 두 이미지 간의 기하학적 관계 정보를 알 수 있다. 또한 삼각측량을 이용해 두 이미지 평면 사이의 기하학적 관계와 매칭 쌍이 주어지면 이로부터 원래의 3D 공간좌표를 알 수 있다. SLAM은 해당 기하학적 원리를 이용한다.
- ORB-SLAM 알고리즘 설명
- ORBSLAM은 PTAM (Parallel Tracking and Mapping) 방식으로 Tracking, Local Mapping, Loop Closing 작업을 3개의 스레드을 이용하여 병렬처리한다. 이러한 방식은 작업들 간의 종속성을 제거한다. 비교적 연산 로드가 적은 카메라 tracking은 모든 영상프레임에 적용하여 실시간성을 추구, 맵 갱신은 주요 키프레임에만 적용하되 시간이 오래 걸리더라도 정밀한 알고리즘을 사용하여 정확도를 추구한다.
- Tracking은 매 프레임마다 카메라의 위치를 알아내고, key frame을 결정한다. 먼저 ORB 특징점을 추출한다. 만약 이전 프레임에서 tracking이 성공했다면 constant velocity model을 사용해 카메라 위치를 추정하고 이전 프레임에서 관측된 맵 포인트에서 검색해본다. 만약 충분한 양의 결과가 나오지 않으면 더 넓은 범위에서 검색한다. 만약 tracking이 실패했다면 프레임에서 Place Recognition을 통해 연관된 key frame을 검색하고 카메라의 위치를 추정한다. 위치 추정과 특징점 매칭이 끝나면 해당 프레임을 맵에 투영한다. 마지막으로 해당 프레임을 key frame으로 여길 것인지 결정하는데, 가장 최근의 key frame 삽입이나 global relocalization으로부터 20프레임 이상 시간 차이가 나고, 기존 맵과의 최단 거리가 특정 임계값 이하, 50개 이상의 특징점을 추적, 그리고 reference key frame과 공유하는 포인트가 90% 이하라면 key frame으로 저장될 수 있다.
- Local Mapping 단계에서는 얻었던 key frame을 이용하여 맵 포인트를 생성한다. 먼저 Tracking 결과로 얻은 key frame을 삽입한다. 이 때 covisibility graph, spanning tree, bags of words도 함께 업데이트한다. 다음으로 추적성과 삼각측량이 잘못되지 않았는지 맵 포인트들을 검사한 뒤, 연결된 key frame에서 얻은 triangulating ORB를 사용해 새로운 맵 포인트를 생성한다. 만약 ORB가 매칭되지 않으면 다른 key frame에서 매칭시켜본다. 매칭은 epipolar constraint를 만족해야 한다.(이론적으로 서로 다른 두 시점에서 획득한 두 이미지에 대해 5개 이상의 매칭쌍이 있으면 두 카메라 시점 사이의 3차원 관계 및 매칭점들의 3D 위치를 복원할 수 있음을 이용) local bundle adjustment를 수행하여 맵 상의 3차원 포인트들을 key frame에 투영시킨 위치와 해당 영상 프레임에서 실제 관측된 위치의 차이가 최소화되도록 위치를 조정한다. 마지막으로 중복되는 key frame을 검사하고 제거하는 과정을 통해 검사할 key frame이 줄어들면서 좀 더 효율적으로 동작하도록 한다.
- Loop Closing 단계에는 마지막 key frame으로 loop를 검사하고 닫는 작업을 수행함으로써 map의 오차를 줄인다. 먼저 loop 후보를 검색한다. 현재 key frame에서 bag of words를 이용해 유사도를 구하고 제일 낮은 점수를 임계점으로 잡는다. 이제 recognition database에서 방금 구한 임계점보다 낮은 key frame들과 현재 프레임과 직접 연결된 key frame을 버린다. 이를 통해 후보를 구한다. 다음으로 similarity transformation을 계산한다. 다음으로 루프를 융합한다. 중복된 맵 포인트를 융합하고 covisibility graph에 새로운 edge를 삽입한다. 마지막으로 효율적으로 loop를 닫기 위해 pose graph optimazation을 한다.
- Darknet 설명
- [[파일:9조_Darknet.png]|Darknet Layers]
- Darknet은 Joseph Redmon이 독자적으로 개발한 신경망 프레임워크(neural network framework)로서 DNN(deep neural network)의 학습 레이어들을 배치시키고 실행시킬 수 있는 틀(framework)이다. DNN은 인간의 뇌가 패턴을 인식하는 방식을 모사한 알고리즘으로 입력 레이어와 출력 레이어 사이에 여러 개의 히든 레이어들로 이루어진 인공신경망이다. 각 레이어에서 나온 결과값(추출된 특징값)을 다음 레이어의 입력으로 주고 최종적으로는 이를 통해 분류나 군집화 작업을 수행할 수 있다. YOLO도 Darknet을 이용하여 학습된 신경망(결과물) 중 하나이다. Darknet을 이용하면 YOLO 뿐만 아니라 AlexNet, VGG-16, Resnet, Densenet 등 기존의 정통 주류의 DNN(Deep Neural Network)들도 돌려 볼 수 있다.
- YOLO(You Only Look Once)
- YOLO는 각 이미지를 S x S 개의 그리드로 분할하고, 그리드의 신뢰도를 계산한다. 신뢰도는 그리드 내 객체 인식 시 정확성을 반영한다. 다음 그림과 같이 처음에는 객체 인식과는 동떨어진 경계 상자가 설정되지만, 신뢰도를 계산하여 경계 상자의 위치를 조정함으로써, 가장 높은 객체 인식 정확성을 가지는 경계 상자를 얻을 수 있다.
- 그리드의 객체 포함 여부를 계산하기 위해, 객체 클래스 점수를 계산하고 이 결과로 총 S x S x N개의 객체가 예측된다. 이 그리드의 대부분은 낮은 신뢰도를 가진다. 신뢰도를 높이기 위해 주변의 그리드를 합치고 이후에 임계값을 설정해 임계값 이하의 불필요한 부분은 제거할 수 있다. 아래 그림을 통해 30% 신뢰도 임계값을 설정함으로써 많은 그리드가 제거됨을 알 수 있다.
- YOLO는 단순한 처리로 속도가 매우 빠르다. 기존 다른 real-time 비전 기술과 비교할 때, 2배 정도 높은 성능을 보인다. 이미지 전체를 한 번에 바라보는 방식으로 클래스를 분별한다.
상세설계 내용
- UI Diagram - CAM UI
- Checkbox (On-Off):
- Localization Mode: 기존 특징점만을 이용한 Tracking 활성화 여부
- Show Points: CAM Frame 위에 특징점 출력 여부
- Show Model: CAM Frame 위에 AR 모델 출력 여부
- Button:
- Set AR Model: 클릭 시, 인식할 사물과 부착할 AR 모델을 설정할 수 있는 창을 띄운다.
- Start SLAM: 클릭 시, 영상 열기 창을 띄우고 영상을 선택하면 해당 영상에 대해 슬램 알고리즘을 실행한다.
- Exit: 클릭 시, 해당 프로그램을 종료한다.
- CAM Frame: 슬램 알고리즘이 실행되면 화면에 영상을 출력한다. 화면의 아래 쪽에 슬램 알고리즘의 상태를 출력하고 체크박스 설정에 따라 특징점과 AR 모델을 화면 위에 출력한다.
- UI Diagram - MAPPING UI
- Checkbox (On-Off):
- Show Key Frames: Mapping Frame 위에 Key Frames 출력 여부
- Show Graph: Mapping Frame 위에 Covisibility Graph 출력 여부
- Button:
- Save Mapped Model: 클릭 시, 경로를 입력할 수 있는 창을 띄운다. 경로가 입력되면 해당 경로에 맵핑 정보가 담긴 파일을 저장한다.
- Load Mapped Model: 클릭 시, 파일을 열 수 있는 창을 띄운다. 파일을 선택하고 올바른 파일 형식이라면 해당 모델을 로드한다. Localization Mode가 on일 때만 사용가능하다.
- Reset: Mapping Frame을 초기화한다.
- Mapping Frame: 슬램 알고리즘이 실행되고 SLAM ON 상태가 되면 추정한 카메라의 위치를 중심에 두고 인식된 특징점들을 카메라의 시점에 따라 회전시켜 화면에 출력한다. 체크박스 설정에 따라 Key Frame과 Covisibility Graph를 화면 위에 출력한다.
결과 및 평가
완료 작품의 소개
프로토타입 사진 혹은 작동 장면
- 카메라를 선택하고 나면 영상을 받아와 SLAM 알고리즘을 수행하면서 현재 SLAM의 상태를 카메라 프레임 아래에 표시해준다.
- 카메라 프레임에 영상에서 인식한 물체를 바운더리로 표시하고 인식한 특징점들을 출력한다.
- Draw Points 체크박스를 통해 특징점을 화면 위에 출력할 것인지의 여부를 결정할 수 있고, Localization 체크박스를 통해 특징점 추출은 잠시 멈추고 위치 계산만을 진행하는 Localization 모드로 설정할 것인지를 결정할 수 있다.
- SLAM 알고리즘을 수행하면서 계산한 3D 맵 포인트를 비롯한 맵 정보를 Mapping Frame에 출력한다. 녹색 직사각형은 현재 카메라 프레임의 위치를 나타내고, 붉은 점들은 현재 카메라의 위치를 추정하는 데 사용된 3D 맵 포인트를 의미하고 검은 점들은 사용되지 않은 포인트를 의미한다.
- 왼쪽의 Show Key Frame, Show Graph 체크박스를 통해 Key Frame 또는 Covisibility Graph를 화면 위에 출력할 것인지의 여부를 결정할 수 있고 Localization 체크박스를 통해 Localization 모드로 설정할 것인지를 결정할 수 있다. Follow Camera 체크박스를 통해 모드를 끄거나 켜서 카메라를 움직였을 때 Mapping Frame에서 맵 포인트들을 이동하게 할 것인지 현재 카메라 프레임을 이동하게 할 것인지 여부를 결정할 수 있다.
- Mapping Frame에서 마우스의 클릭이나 스크롤을 이용해 화면을 회전하거나 확대할 수 있다.
- Plane Detect 버튼을 클릭하면 인식된 평면 위에 AR 모델을 부착한 영상을 Cam Frame에 출력한다.
- Object Detect 버튼을 클릭하면 인식한 물체 위에 AR 모델을 부착한 영상을 Cam Frame에 출력한다.
- Clear All 버튼을 클릭하면 부착된 AR 모델들을 모두 제거한다.
- Play Animation 체크박스를 통해서 AR 모델에 적용된 애니메이션을 실행할 것인지 여부를 결정할 수 있다.
- AR 모델은 적당한 3D 모델과 텍스처 파일을 미리 설정해두면 이용할 수 있기 때문에 다른 모델로도 해당 기능을 사용할 수 있다.
- 왼쪽의 메뉴를 통해 AR 모델에 대해서 크기 설정이 가능하다.
- Draw Grid 모드를 끄거나 켜서 인식한 평면을 격자로 영상에 표현하게 할 것인지 여부를 결정할 수 있고 격자의 형태도 왼쪽 메뉴에서 조절할 수 있다.
포스터
내용
관련사업비 내역서
완료작품의 평가
향후평가
- 깊이 카메라 등을 활용하기 힘든 드론을 비롯한 모노 카메라를 이용한 드론의 자율 주행이나 장애물 인식 기능 자체 또는 모니터링 기능에 해당 기술을 적용할 수 있을 것으로 전망하였다. 추출한 맵 정보들은 포인트 클라우드에 mesh를 만들어 적절한 가공을 거쳐 모델링을 하면 영화 또는 VR 등에 사용할 수 있는 가상공간의 모델로 이용될 수 있을 것으로 전망하였다. 인식한 물체에 AR 모델을 부착하는 기능은 물체의 레이블별로 구별되는 AR 모델을 붙이거나 하는 방식을 이용하여 다양한 응용에서 활용할 수 있을 것으로 전망하였다.
특허 출원 내용
내용