반응형

다음의 문서를 참고하였으며 이를 분석하였습니다.

 

참고문헌

1. "Learning the code/Learning ArduPilot - Introduction," ardupilot.org/dev/docs/learning-ardupilot-introduction.html

2. "Learning the code/ArduPilot Libraries," ardupilot.org/dev/docs/apmcopter-programming-libraries.html

 


 

기본 구조[1]

ArduPilot의 기본 구조는 5가지의 주요 항목으로 나뉜다.

  • Vehicle code
  • Shared libraries
  • Hardware Abstruction Layer(AP_HAL, 하드웨어 추상화 계층)
  • Tool directories
  • External support code (i.e. mavlink, dronekit)

기체 코드

 기체 코드는 최상위 디렉토리로써, 각 기체 타입에 대한 펌웨어를 정의한다. 현재 5가지의 기체 종류가 존재하며, Plane, Copter, Rover, Sub, AntennaTracker가 있다. 각각의 공통 요소가 있지만 다른점이 존재한다.

 *.cpp 파일과 함께, 각 기체 디렉토리는 make.inc를 가지는데, 이는 라이브러리 의존성을 열거한다. Makefile은 빌드를 위해 -l 또는 -L 플레그를 만들기 위해 이를 읽는다.

 

라이브러리들

라이브러리는 네 가지 기체 종류 Copter, Plane, Rover, AntennaTracker 사이에서 공유된다. 이 라이브러리들은 센서 드라이버, 자세 및 위치 추정기(a.k.a EKF), 제어 코드(i.e. PID 제어기)를 포함한다.

 

하드웨어 추상화 계층, AP_HAL

AP_HAL 계층은 어떻게 ArduPilot을 다양한 플랫폼에 이식할 수 있을지에 대한 것이다. libraries/AP_HAL의 최상위 AP_HAL은 인터페이스를 정의하고 있다. 또한 각 보드 종류에 대해 AP_HAL_XXX의 이름으로 하위 디렉토리를 가진다. 예를 들면 AP_HAL_AVR은 AVR 기반 보드이고 AP_HAL_PX4는 Pixhawk 보드이고, AP_HAL_Linux는 Linux 기반 보드를 위한 라이브러리이다.

 

툴 디렉토리

툴 디렉토리는 기타 지원 디렉토리이다. 예를 들면 tool/autotest는 autotest 인프라를 제공하며, tools/Replay는 로그 재생 기능을 제공한다.

 

외부 지원 코드

어떤  플랫폼에서는, 보드 지원이나 추가적인 기능을 제공하기 위한 외부 지원 코드가 필요하다. 현재 외부 트리는 PX4NuttX, PX4Firmware, uavcan, mavlink가 있다.

 


 

ArduPilot 라이브러리들[2]

이 라이브러리는 Copter, Plane, Rover가 공유한다. 아래는 고수준의 라이브러리와 함수이다.

핵심 라이브러리

AP_AHRS DCM 또는 EKF를 이용한 자세 추정
AP_Common 모든 스케치와 라이브러리에서 요구되는 핵심
AP_Math 벡터 연산에 특히 유용한 다양한 수학 함수
AC_PID PID 제어기 라이브러리
AC_InertialNav 가속도계 입력에 GPS와 기압계 데이터를 섞는 관성항법 라이브러리
AC_AttitudeControl PID 제어기 기반 위치, 자세 제어 함수를 포함한 ArduCopter의 제어 라이브러리
AC_WPNav 경로점 항법 라이브러리
AP_Motors 멀티로터와 전형적인 헬리콥터 모터 믹싱
RC_Channel APM_RC에서 각도 같은 내부 단위로 PWM 입출력을 변환하는 라이브러리
AP_HAL
AP_HAL_ChibiOS
AP_HAL_Linux
"하드웨어 추상화 계층, HAL"을 수행하는 라이브러리로, HAL은 고유한 인터페이스를 고수준의 코드로 나타내어, 다른 보드로 더욱 쉽게 포팅하기 좋게 해준다.
 쉬운 말로 정리하면 보드 별로 다른 특징을 추상화시켜서 상위 계층에서 사용할 때 같은 기능으로 쓰기 좋게 해주는 계층을 하드웨어 추상화 계층이다. 해당 계층이 있으면 보드 별로 디바이스 드라이버를 따로 개발할 필요가 없다.

 

센서 라이브러리

AP_InertialSensor 각속도, 가속도 값을 읽어오고, 보정을 수행하며, 표준 단위로 주 코드와 다른 라이브러리에 데이터를 제공한다.
AP_RangeFinder 소나와 IR 거리 센서 인터페이스 라이브러리
AP_Baro 기압계 인터페이스 라이브러리
AP_GPS GPS 인터페이스 라이브러리
AP_Compass 3축 지자계 인터페이스 라이브러리
AP_OpticalFlow 광류 센서 인터페이스 라이브러리

 

기타 라이브러리

AP_Mount
AP_Camera
AP_Relay
카메라 장착 제어 라이브러리,
카메라 셔터 제어 라이브러리
AP_Mission EEPROM으로부터 임무 명령을 저장/불러오기
AP_Buffer 관성 항법에 사용하기 위한 간단한 FIFO 버퍼

 

 

 

728x90

+ Recent posts