Skip to content
Jinwoong Han edited this page May 18, 2014 · 124 revisions

종합설계 프로젝트 제안서

1. 프로젝트 개요

1.1 프로젝트 의도

몇 년전만 해도 멀티콥터 기술은 연구 대상으로 일반인이 접하기 힘든 기술이였지만 최근 멀티콥터(쿼드콥터)는 레저용으로 일반인에게 널리 보편화 되어있다. 하지만 레저용 쿼드콥터는 대부분 완성된 소프트웨어와 하드웨어로 구성되어 있다. 이러한 쿼드콥터를 구입하기 보다는 쿼드콥터 제작부터 소프트웨어까지 직접 만들며 작동원리를 이해하고 임베디드 시스템, 영상처리, 서버, 안드로이드 등 다양한 분야의 지식을 함양하고자 한다.

1.2 프로젝트 목적

프로젝트의 최종 목적은 쿼드콥터 비행에 성공하여 지상의 RC Car를 식별하고 이를 사용자에게 알리는 것에 목적이 있다. 이를 활용하여 고속도로나 도심 속 불법주차, 갓길운행 등 불법주행을 적발하는 기능을 수행할 수 있다.

2. 프로젝트 내용

total concept

[그림1 전체 시스템 구성도]

본 프로젝트는 호스트 서버와 쿼드콥터, RC Car, 사용자 어플리케이션으로 구성한다.

2.1 사용 시나리오

쿼드콥터가 공중을 비행을 하며 지상을 촬영한다. 촬영된 이미지는 서버와의 통신을 통해 서버로 전송 되며 서버에서는 이미지를 처리하여 RC Car를 식별한다. 식별된 RC Car에 대한 정보를 데이터베이스에 저장하며 이를 사용자 어플리케이션을 통해 사용자에게도 제공한다.

사용자는 사용자 어플리케이션을 통해 쿼드콥터 또는 RC Car를 조종한다. 사용자 어플리케이션을 통해 내려진 명령은 서버로 전송되어 서버에서 처리하고 각 클라이언트에게 명령을 전달한다. 쿼드콥터를 조종할 때에는 쿼드콥터가 식별한 RC Car에 대한 정보를 받아 볼수 있다.

2.2 구성요소

프로젝트는 아래와 같이 4개로 구성되어 있다.

  1. 쿼드콥터
  2. 호스트 서버
  3. 사용자 어플리케이션
  4. RC Car

2.2.1 쿼드콥터

ODROID-U3 을 중심으로 하여 보조기억장치WiFi 모듈, IO 쉴드, ODROID USB CAM, 9축 자이로센서 를 이용하여 쿼드콥터의 시스템을 구성한다. 이 시스템은 리눅스 기반 우분투 운영체제를 사용하며 디바이스 드라이버를 모듈로 커널에 적재하여 하드웨어를 제어하는데에 목적이 있다. 또한 서버와 통신도 하며 쿼드콥터의 핵심 요소이다.

위 시스템을 쿼드콥터 프레임에 탑재하고 모터와 변속기, 프로펠러, 스키드, 카메라를 프레임에 장착하여 쿼드콥터를 완성한다.

QC HW/SW [그림2 쿼드콥터 하드웨어/소프트웨어 세부 구성]


쿼드콥터 설계

쿼드콥터 연구

가. 호버링

호버링(hovering)은 쿼드콥터가 공중에 정지해 있는 상태를 말하는 것으로 쿼드콥터의 이륙에 성공하고 공중에서 호버링 상태를 유지한 후에 정상적인 착륙까지 하는 것을 뜻한다. 호버링을 구현하기 위해서 자이로 센서 제어, 모터 제어 등의 기술이 필요하다. 9축 자이로 센서에는 3축 가속도 센서, 3축 자이로센서, 3축 자기센서가 종합적으로 들어있으며 각 센서 값들을 칼만필터를 이용하여 신뢰할 수 있는 값으로 만든 후 얻어낸 값을 이용하여 쿼드콥터의 4개의 모터를 제어하여 프로펠러의 회전속도를 실시간으로 변화시켜 호버링을 시작한다.

나. 자유비행

쿼드콥터가 공중에서 자유롭게 비행할 수 있게 구현한다. 4개의 모터 rpm을 유동적으로 제어하여 사용자가 원하는 방향으로 쿼드콥터를 비행할 수 있게 구현하는것이 목표다. 구현하는 과정에서 쿼드콥터가 뒤집히거나 원하는대로 제어가 되지 않아 불시착 하는 것에 대한 대책을 마련해야한다.

다. 이미지 샘플링

쿼드콥터에 설치된 카메라로 캡쳐된 이미지를 서버로 전송하기에 적합한 이미지로 변환하는 작업이다. 이미지 압축 등을 통해 이미지를 변환하여 용량을 줄이는것이 목표다.

라. 서버와 통신

쿼드콥터는 스스로 떠 있을 수는 있지만 개별적으로 작업은 불가능 하다. 서버와 연결하여 사용자의 명령을 받거나 정해진 동작패턴대로 동작하기 위해서는 서버와의 통신이 필수적이다. 쿼드콥터 제어 명령 외에도 이미지와 같은 큰 용량의 데이터도 전송하는데에 문제가 없어야한다.

2.2.2 호스트 서버

호스트 서버는 클라이언트들로부터 전달 받은 정보, 명령을 처리하는 메인 서버이다. 사용자 어플리케이션을 통해 받은 명령을 처리하여 쿼드콥터나 RC Car를 제어하며 쿼드콥터로 부터 받은 정보를 사용자에게 제공, 수집한다. 또한 인공지능 서비스와 웹 서비스를 제공하여 사용자가 쉽게 클라이언트를 제어하고 안드로이드 앱 뿐만 아니라 웹 페이지로도 클라이언트를 제어할 수 있도록 지원한다.

호스트서버 HW/SW 구성 [그림3 호스트서버 하드웨어/소프트웨어 세부 구성]


호스트서버 설계

호스트서버 연구

가. 통신 프로토콜

호스트 서버는 쿼드콥터, 사용자 클라이언트와 통신한다. 그 과정에 사용되는 통신 프로토콜을 설계 한다. 통신 프로토콜은 호스트 서버를 중심으로 설계하며 호스트 서버에 정의된 프로토콜을 이용하여 쿼드콥터와 사용자 어플리케이션의 통신을 구현한다. 통신 프로토콜은 C 의 구조체를 이용하여 정의하며 정확하고 신속한 데이터 통신을 위해 최소의 바이트만을 사용하여 설계한다.

나. 사용자 명령 처리

사용자 어플리케이션을 통해 전달 받은 명령을 디코딩하여 쿼드콥터 또는 RC Car에게 명령을 내리는 작업이다.

다. 이미지 처리

쿼드콥터로 부터 받은 이미지를 처리하여 사용자에게 제공한다. 이미지 처리는 OpenCV 라이브러리를 사용하며 이미지에서 RC Car를 식별하는 작업을 한다. 이를 더 확장시켜 물체를 식별, 추적하는 기능을 수행하거나 GPS를 연동하여 물체의 위치정보 등을 파악 할 수 있다.

라. 인공지능 서비스

쿼드콥터와 RC Car가 사용자의 제어없이 자동으로 장애물을 회피하며 움직이는 알고리즘을 설계하여 인공지능 서비스를 제공한다.

마. 웹 서비스

호스트 서버는 사용자 어플리케이션이 웹 서비스 형태로 지원 가능하도록 웹 서버 기능을 한다. 웹 서비스는 쿼드콥터 작업 흐름 지정 및 쿼드콥터의 옵션을 조정하여 사용자가 원하는 작동이 가능하도록 각종 인터페이스를 지원한다.

바. 데이터베이스

쿼드콥터에서 식별한 RC Car에 대한 정보 등을 저장, 관리하기 위해 데이터베이스를 구축한다. NoSQL 데이터베이스를 사용하여 대량의 데이터 입출력을 쉽게 처리하고 확장성을 용이하게 한다.

2.2.3 사용자 어플리케이션

사용자는 어플리케이션을 통해 각 클라이언트들에게 명령을 내리거나 정보를 얻을 수 있다. 어플리케이션은 안드로이드 앱과 웹 서비스 형태로 지원되며 사용자는 이를 통해 쿼드콥터, RC Car를 원하는대로 제어를 하고 쿼드콥터가 촬영한 이미지와 식별한 RC Car에 대한 정보도 획득할 수 있다.

[그림4 사용자 어플리케이션 플랫폼/소프트웨어 세부 구성]


사용자 어플리케이션 설계

사용자 어플리케이션 연구

가. 안드로이드 앱

앱은 쿼드콥터 또는 RC Car를 제어하는 조종 인터페이스를 가지며 쿼드콥터 제어 상태에서는 쿼드콥터를 통해 제공되는 정보를 받을 수 있다. 제공되는 정보는 항공촬영 이미지, 식별된 RC Car에 대한 정보 등이 있다.

나. 웹 페이지

웹 페이지에서도 안드로이드 앱과 같이 조종 인터페이스로 쿼드콥터, RC Car를 제어할 수 있으며 쿼드콥터를 통해 제공되는 정보도 받을 수 있다.

다. 증강현실

쿼드콥터가 촬영한 이미지를 바탕으로 식별된 RC Car에 대한 정보 등을 증강현실로 제공한다.

2.2.4 RC Car

원격조종 미니카로 사용자 어플리케이션을 통해 제어된다. 사용자가 직접 제어하는 Maual모드와 초음파센서를 통해 장애물을 자동으로 피하며 움직이는 Auto모드가 지원된다.

RC HW/SW [그림5 RC Car 하드웨어/소프트웨어 세부 구성]


RC Car 설계

RC Car 연구

가. 모터 제어

RC Car가 사용자가 원하는 방향으로 움직일 수 있도록 모터를 제어하는데에 목표가 있다.

나. 초음파센서 제어

RC Car를 Auto모드로 운용할 때에 초음파센서를 통해 전방의 장애물을 식별하는데에 목표가 있다.

3. 진행 일정 및 팀원 역할

3.1 진행 일정(월별 일정)

| | '14.05 | 06 | 07 | 08 | 09 | '14.10 | |---|---|---|---|---|---|---|---| | ※ 쿼드콥터 | | | | | | | | - 제작 | ㅇ | | | | | | | - 모터 제어 | | ㅇ | | | | | | - 자이로센서 제어 | | ㅇ | | | | | | - 호버링 | | ㅇ | ㅇ | ㅇ | | | | - 자유 비행 | | | | ㅇ | ㅇ | ㅇ | | - 촬영 이미지 샘플링 | | ㅇ | ㅇ | | | | | ※ 호스트 서버 | | | | | | | | - 설계 | ㅇ | | | | | | | - 통신 프로토콜 정의 | ㅇ | | | | | | | - 사용자 명령 처리 | | ㅇ | | | | | | - 이미지 처리 | | ㅇ | ㅇ | ㅇ | | | | - 인공지능 서비스 | | | ㅇ | ㅇ | | | | - 웹 서비스 | | | | ㅇ | ㅇ | | | - 데이터베이스 설계 & 구축 | ㅇ | ㅇ | | | | | | ※ 사용자 어플리케이션 | | | | | | | | - 네트워크 | ㅇ | ㅇ | | | | | | - 쿼드콥터 조종 인터페이스 | | ㅇ | ㅇ | ㅇ | | | | - 증강현실 | | | ㅇ | ㅇ | ㅇ | | | - 미니카 조종 인터페이스 | | ㅇ | ㅇ | ㅇ | | | | ※ RC Car | | | | | | | | - 제작 | ㅇ | | | | | | | - 모터 제어 | | ㅇ | ㅇ | | | | | - 초음파센서 제어 | | ㅇ | ㅇ | | | | | ※ 기타 | | | | | | | | - 테스트 | | | | ㅇ | ㅇ | ㅇ | | - 문제 해결 | | | | ㅇ | ㅇ | ㅇ | | - 기능 추가 | | | | | ㅇ | ㅇ |

3.2 업무별 팀원 역할

| | 김계형 | 김윤호 | 문주성 | 이승원 | 한진웅 | |---|---|---|---|---|---|---|---| | 쿼드콥터 | ㅇ | | | ㅇ | | | 호스트 서버 | ㅇ | | | | ㅇ | | 사용자 어플리케이션 | | ㅇ | | | | | RC Car | | | ㅇ | | | | 프로젝트 관리 | ㅇ | ㅇ | ㅇ | ㅇ | ㅇ |

###· 김계형 쿼드콥터 파트를 담당하며 비행 알고리즘을 설계하고, 센서 제어 결과를 바탕으로 모터를 제어하여 쿼드콥터가 정상적인 호버링을 할 수 있도록 연구하고 호스트 서버를 제작하는데 보조하게 된다.

###· 김윤호 사용자 어플리케이션 파트를 담당하며 호스트서버와의 통신부터 호스트서버가 전송한 데이터를 가지고 어플리케이션에 표시하며 호스트서버의 웹 서비스와 연계하여 쿼드콥터 제어에 용이한 사용자 어플리케이션을 제작한다.

###· 문주성 RC Car 파트를 담당하며 RC Car의 모터를 제어하며 원하는 방향으로 진행할 수 있도록 안정감 있는 주행을 구현하고 초음파 센서를 이용하여 전방의 장애물을 감지하여 회피를 계획하고 호스트 서버와 통신하여 사용자 어플리케이션을 통해 제어 될 수 있는 RC Car를 제작한다.

###· 이승원 쿼드콥터 파트를 담당하며 쿼드콥터 제작부터 자유비행까지 쿼드콥터를 안정적으로 비행시키기 위해 연구하고 테스트를 하여 쿼드콥터의 완성도를 높이는데 중점을 두고 프로젝트에 임하게 될 것이다.

###· 한진웅 호스트 서버 파트를 담당하며 설계와 각종처리 서비스를 구현하여 쿼드콥터와 RC Car 그리고 사용자 어플리케이션간에 통신에 중요한 다리 역할을 할 수 있는 서버를 제작하기 위해 연구하고 설계하고 구현한다.

4. 기타

4.1 관련 기술

  1. OpenCV
  2. Device Driver
  3. C, Java
  4. html5, CSS, Javascript, jQuery
  5. OpenGL 또는 WebGL
  6. Node.js
  7. 안드로이드 프로그래밍
  8. 리눅스 프로그래밍
  9. WIFI, Bluetooth

4.2 추가 연구

4.2.1 스테레오 비전

RC Car에 카메라 2개를 설치하고 이를 통해 스테레오 비전을 구현한다. 스테레오 비전을 통해 지상에 있는 장애물들을 인식하고 3D로 3D Map을 그린다.

4.2.2 GPS

쿼드콥터에 GPS를 장착하여 위치 정보를 기반으로 쿼드콥터 자동귀환 기능이나 카메라가 촬영한 이미지에 있는 건물 등에 대한 정보를 제공하는 서비스를 구현한다.

4.3 응용 분야

쿼드콥터가 지상의 RC Car를 식별하는 기술을 좀 더 발전시켜 도로나 도심 속 불법주차, 갓길운행 등 불법주행을 적발하는 기능을 수행할 수 있다. 또한 항공촬영 기술을 통해 여러 분야에 응용하여 사용될 수 있다.

4.4 유사 수행 과제 및 결과

쿼드콥터를 주제로 수행된 프로젝트는 대부분 쿼드콥터 '제어기법'에 초점이 맞춰져 있다. 하지만 본 프로젝트는 쿼드콥터에 카메라를 설치하여 카메라를 통해 지상에 있는 RC Car를 식별하는데에 중점을 두었다.

4.4.1 원대연, "쿼드 로터 무인항공기 동역학 모델링 및 제어시스템 설계 연구"

불안정한 모드를 포함하고 있는 쿼드 로터 무인항공기를 적절하게 제어하기 위해서 PID 제어기법을 적용하여 자세유지, 고도유지, 속도유지 오토파일럿을 설계하였다. 또한 비전 기반 제어 기법을 응용하여 두 개의 탑재 카메라를 이용한 자세 안정화 기법을 제안하였다. 제안된 비전 기반 자세 안정화 기법 및 제어시스템은 수치 시뮬레이션을 통해 그 성능을 입증하였다.

4.4.2 윤병모 외 4명, "자이로센서와 가속도센서 결합을 통한 쿼드콥터 자세제어"

쿼드콥터의 자세를 제어하는데 있어서 장치의 특성을 명확히 파악해야하고 설계 단계에서 최적의 센서를 설계해야한다. 센서를 고를 시 안정성, 노이즈, 신호의 신뢰도 등을 고려해야한다. 향후에 효과적인 제어를 하기 위해 비선형적인 모델제어를 위한 최적화 알고리즘 방법과 적응제어 등의 방법이 적용되어야 할 것이며, 나아가 현재의 모델을 기타 다른 쿼드콥터의 동작에 변화를 줄 수 있는지에 관해 여러 모델에 적용하여서 안정화된 자세 제어가 될 수 있도록 연구가 필요할 것이다.

Clone this wiki locally