Dev/Drone

아두파일럿 소스 분석(2) : 개요 


개요


아두파일럿에는 다음과 같은 하위 프로젝트들이 있다.

  • ArduPlane
  • ArduCopter
  • ArduRover
  • ArduSub(잠수함)


이 중에 드론(쿼드콥터)을 위한 프로젝트는 ArduCopter 인데, 가장 활발하게 참여가 이루어지는 프로젝트이기도 하다.  


먼저, 아두파일럿의 기본 구조를 살펴 보자.


[ardupilot 의 Layer 구조]





위 그림은 아두파일럿이 동작하는 드론의 구조를 고수준에서 간단하게 나타낸 다이어그램이다. 아두파일럿은 드론에서 OS 와 같은 역할을 한다. (어쩌면 드론의 OS 라고 생각해도 좋을지 모른다) 혹시 아래의 설명이 낮설고 이해가 가지 않는다면 OS 이론의 개요 부분을 읽고 오면 도움이 될 것이다.


그림 중간에 위치한 아두파일럿은 크게 Vehicle Specific Code, Shared Libraries, Hardware Abstraction Layer(HAL) 로 이루어져 있다.


그 중 가장 아래의 HAL 은 하드웨어를 추상화 하여 아두파일럿이 하드웨어에 독립적으로 동작하게 해 준다.(같은 아두파일럿 코드를 다양한 하드웨어 위에서 돌릴 수 있게 한다) 또한, 코드 내에서 HAL 객체를 통하여 하드웨어로의 접근을 제공해 준다.


Shared Libraries 는 아두파일럿 하위 프로젝트인 콥터, 플레인, 로버 등등이 공유하는 기능 혹은 Basic 한 기능들을 모아놓은 라이브러리를 제공해 준다. 예를 들면 GPS, Compass , accelometer, Math Library 등이다.


Vehicle specific code 가 바로 이 포스팅에서 분석할 부분으로, Vehicle 에 특화된 부분을 다룬다. 예를 들어 쿼드콥터의 비행 제어와 관련된 코드는 이 Layer 에 있다. 


MAVLink 는 일종의 통신 프로토콜로, 아두파일럿을 비롯한 Autopilot 시스템에서 정보, 커맨드를 주고 받는데 사용된다. Serial 통신, UDP, TCP, Telemetry 위에서 동작하는 Application Layer 의 프로토콜이다.  



가장 상위에는 Ground Station, DroneKit 등이 있는데 이 중 Ground Station 은 드론에게 미션 설정, 파라미터 설정, 드론 비행 로그 관리 외에도 잡다한 기능을 제공하는 프로그램이다.  대표적으로 APM Planner 2 가 있다. 


Dronekit 은 아두파일럿과 상호 협동할 컴퓨터 위에서 API를 제공하는 플랫폼인데, Android, Python, Cloud (Restful api), IOS(Comming soon) 가 있는데 현재 프로젝트가 잘 활성화 되어 있는 것 같지 않아 보이고 (Github 을 봤을 때) 이 중 필자의 경험으로는 Android 와 Python 은 쓸만 한 것 같다.



참고 : 

https://en.wikipedia.org/wiki/MAVLink


http://qgroundcontrol.org/mavlink/start


http://dronekit.io/