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/



Dev/Drone

Ardupilot 코드 분석(1) : 사전 준비



이 포스팅을 수월하게 이해하기 위해서는 독자에게 요구되는 수준은 다음 질문에 대답할 수 있어야 한다

  • git 이 무엇인지 아는가?
  • Linux 환경의 경험이 있는가? 
  • C++ 코드를 읽을 수 있다.(이것만 가능해도 된다.)

사전 준비




가장 중요한 아두파일럿의 코드는 아래의 Github repo에서 구할 수 있다.


https://github.com/ArduPilot/ardupilot/



각자 익숙한 C++ 환경 (Eclipse, Vim & Ctags, Clion ... ) 에서 코드를 분석하기를 바란다.


장인은 도구를 탓하지 않지만, 굳이 Nodepad 로 소스를 분석하는 장인은 없을 것이다.


가능하면 Navigation 기능이 있는 환경에서 코드를 분석하도록 하자. 

. 코드 분석에는 Navigation 기능이 크게 도움이 되기 때문이다. (Find Usage, Go to Declaraton 등등) 학생 혜택 등으로 라이센스가 있다면 CLion 을 추천하지만, 상황의 여의치 않다면 Eclipse 등을 사용해도 무방하다.



CLion 


공식 Wiki Eclipse 환경세팅법



필자는 Ubuntu 14.04 환경에서 Clion 으로 에서 작업하였다. 아래는 Clion 에서의 간단한 코드 분석 환경(빌드는 X) 설정법이다.




Clion 에서 코드 네비게이션 기능 적용시키기





import Project from Source 를 클릭한다. 




본인의 아두파일럿 프로젝트가 있는 디렉터리를 선택하고 OK 를 누른다. 



ArduCopter 디렉터리와 Libraries 디렉터리를 위와 같이 Project Sources and Headers 로 지정해 주면 아래와 같이 Code Navigation 기능을 이용할 수 있게 된다. 







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


Dev/Drone

SITL 개요

SITL 이란?

SITL 이란 Software-In-The-Loop 의 줄임말으로써, Ardupilot 코드를 PC 와 같은 Linux 머신 위에서 빌드 및 테스트 해 볼수 있는 시뮬레이션 프로그램이다.

SITL 을 이용하면 다음과 같은 점을 기대해 볼 수 있겠다.

  • Hardware 에 종속적이지 않게 Vehicle specific code 를 Testing 할 수 있다
  • Physical 하지 않은 function 들을 안전하게 test, Debugging 할 수 있다.(즉, 드론이 덜 추락할 것이므로 돈을 아낄 수 있다.)
  • 실제 드론, 즉 하드웨어가 없어도 아두파일럿을 빌드하고 실행되는 모습을 가볍게 볼 수 있으므로 편리하다 그러나 다음과 같은 한계도 지닌다. *실제 비행 제어 (Physical) 의 동작은 신뢰할 수 없는 시뮬레이터의 한계를 가진다.


[SITL 의 Architecture]

아두파일럿 코드를 SITL 을 target 으로 빌드하게 되면, 리눅스 실행 바이너리인 .elf 형태로 빌드된다. 이것을 실제로 실행해 보면 아래와 같이 실행된다. 코드를 빌드하고 매개변수를 전달하여 실행하는 과정은 스크립트로 자동화 되어 제공되는데, 뒤에서 자세히 다루겠다.

아래 스크린샷은 SITL 을 실행한 모습이다.

[SITL 이 실행되는 모습]



[ardupilot][SITL] SITL(2) : 시뮬레이터 설치


1 2 3 4
블로그 이미지

IT & Computer Science

빨간호랑이