AirSim 코드 구조

코드를 읽을 때는 개발자의 의도를 파악하고 읽으면 이해하는데 도움이 됩니다.
AirSim 개발자가 의도한 코드 구조에 대해서 소개하고자 합니다.
코드 읽기로 들어가기 전에 참고할 내용은 전체 소스코드는 Modern C++ 11 문법을 따라 구현하였습니다. 따라서 Modern C++ 11에 대한 배경지식이 있다면 코드 읽는데 어려움이 없으리라 생각합니다. 하지만 AirSim이 사용하는 외부 모듈인 rpclib의 경우에만 C++14로 빌드된다는 점을 참고하세요.

AirSim은 크게 3개 부분으로 구성됩니다. 나머지 폴더들은 예제나 빌드를 위한 도구입니다.  3개 부분은 아래와 같이 AirLib, Unreal/Plugins/AirSim 그리고 MavLinkCom입니다.

 

AirLib

다음과 같은 컴포넌트들로 구성되어 있습니다.

  • 물리 엔진
    • 물리엔진으로 다른 비행체 구현을 빠르고 확장가능하도록 설계된 물리 엔진 헤더
  • 센서 모델
    • Barometer, IMU, GPS, Magnetometer에 대한 모델 헤더
  • 비행체 모델
    • 비행체 설정 및 모델에 대한 헤더. 현재 멀티로터에 대한 모델과 PX4 QuadRotor(X)에 대한 설정을 구현
  • 제어 라이브러리
    • API에 대한 추상 base class와 MavLink처럼 특정 비행체 플랫폼에 대한 상세 구현 제공. RPC client와 server에 대한 class도 포함.

Unreal/Plugins/AirSim

  • 유일하게 Unreal 엔진과 연결되는 부분으로 향후에도 계속 독립적으로 개발해 나갈 예정이며 이를 통해서 다른 플랫폼(Unity와 같은)에 대해서도 구현이 가능하도록 합니다.
  • 핵심 Class
    • SimMode_classes
      • 다양한 시뮬레이터 모드를 지원할 수 있도록 돕는 역할을 합니다.
    • VehiclePawnBase
      • 모든 비행체 pawn 시각화를 위한 base class입니다.
    • VehicleBase
      • 렌더링 컴포넌트(Unrealpawn), 물리적 컴포넌트(MultiRotor), 제어기(MavLinkHelper)의 조합을 구현하는 추상 인터페이스를 제공

MavLinkCom

  • C++ 클래스로 구성된 MavLink 장치와 통신하는 라이브러리입니다.
  • 독립적인 라이브러리로 다른 프로젝트에서도 사용이 가능합니다.
[개발] AirSim 코드 구조

Leave a Reply

Your email address will not be published. Required fields are marked *