AirSim with Unreal Engine 기록 1

3월경쯤 연구실에 있는 시뮬레이터용 데스크탑으로 어찌저찌 AirSim을 위한 언리얼 환경을 만들어내는 것은 해냈었는데, 그동안 놓고 있다가 약 반년쯤 지난 지금 다시 해보려니 어떻게 했었는지 기억이 안나는 것이다. 내 기억력을 과신해선 안된다는 사실을 다시 한번 실감하면서 찬찬히 과정을 여기 기록해보기로 한다.

제일 먼저 필요한 것은 역시나 Microsoft AirSim. git clone으로 원하는 디렉토리에 다운로드하였다. Script fail의 우려가 있으므로 C가 아닌 D 혹은 E에서의 클론을 권장하고 있기에, D 드라이브에 클론하였다.
https://github.com/microsoft/AirSim

또한 Unreal Engine 환경에서 진행하기 때문에 Epic game Launcher를 깔고, 런처 실행 후 필요한 버전의 Unreal Engine을 받아줘야 한다. 최신은 4.24로 업그레이드되었다. https://www.unrealengine.com/ko/get-now

Build AirSim

Unity 환경에서의 구축과 마찬가지로, 현재 컴퓨터엔 Visual Studio 2017가 설치되어 있기 때문에 VS 2017용 네이티브 도구 명령 프롬프트를 실행하여, 클론한 해당 디렉토리로 이동한다.
빌드를 시도하던 차, 최근 2019로 업그레이드 된 사실을 알게 되었다. 2019를 설치하고 (C++, Windows 10 SDK, .NET 포함) VS 2019 명령 프롬프트로 클론된 디렉토리로 이동하여 build.cmd를 실행하였다. 언리얼 프로젝트에 드롭될 플러그인이 준비되었다.

Build Unreal Project

기존 제공되는 Built-in Blocks Environment와 새 Unreal Environment를 작성하는 두 옵션에서, 최종적으로는 건설 현장 환경을 구축하고 드론 시뮬레이션을 하고 싶기 때문에, 새로운 언리얼 프로젝트를 작성하였다. 언리얼 버젼 4.24로 진행하였다.

파일 메뉴에서 새로운 C++ 클래스를 작성하게 되면 Visual Studio에서 sln으로 오픈할 수 있게 된다. AirSim/Unreal 내 Plugins 폴더를 해당 언리얼 프로젝트의 폴더 안에 복사함으로서 해당 언리얼 프로젝트에서 AirSim 플러그인을 사용할 수 있게 된다.

Visual Studio 2017과 2019가 같이 깔려있었기 때문에, Unreal Project를 2019에서 사용하기 위해 커맨드창에서 이하의 명령어를 실행시켜 주었다. update_from_git.bat 의 디폴트가 2017로 되어있기 때문이다. 이 과정을 해주지 않으면 에러가 발생한다. (익스플로러의 프로젝트명 오른쪽에서 2017이 표시되어있진 않은지 확인한다.)

C:\Program Files\Epic Games\UE_4.24\Engine\Binaries\DotNET\UnrealBuildTool.exe -projectfiles -project=<your.uproject>  -game -rocket -progress -2019 

.uproject 를 이하와 같은 구성으로 편집한다.

{
    "FileVersion": 3,
    "EngineAssociation": "4.24",
    "Category": "Samples",
    "Description": "",
    "Modules": [
        {
            "Name": "LandscapeMountains",
            "Type": "Runtime",
            "LoadingPhase": "Default",
            "AdditionalDependencies": [
                "AirSim"
            ]
        }
    ],
    "TargetPlatforms": [
        "MacNoEditor",
        "WindowsNoEditor"
    ],
    "Plugins": [
        {
            "Name": "AirSim",
            "Enabled": true
        }
    ]
}

Unreal Engine Project File을 우클릭 후, Generate Visual Studio Project Files을 실행시킴으로서 플러그인을 sln에 적용할 수 있게 된다. 이후 .sln파일을 2019로 실행, DebugGame Editor와 Win64로 설정한 후 빌드를 하게 되면 언리얼 프로젝트가 실행된다.

언리얼 프로젝트 실행 뒤 수순

https://microsoft.github.io/AirSim/unreal_custenv/

아웃라이너에서 Player Start를 찾아 설정을 확인해주고, Window/World Settings에서 AirSimGameMode로 설정한 뒤 플레이해주면, AirSim 동작을 확인할 수 있다.

유니티에서 AirSim 사용하기

현재 소속된 연구실에서 드론의 안전성에 관한 프로젝트가 진행될 예정이다. 사용할 드론 시뮬레이터를 탐색하던 와중 AirSim을 찾았고, 직접 해보는 과정을 기록해본다.

AirSim은 Microsoft AI & Research에서 제공되는 오픈 소스 시뮬레이터이며, Unreal Engine, Unity에서 자율 주행 자동차를 빌드, 운행하는 것이 가능하다.
드론 모드의 빌드도 가능하며, PX4와 같은 비행 컨트롤러의 Hardware-in-the-loop 또한 지원하고 있다.

개인 노트북으로는 Unreal 환경 구축에는 무리가 있어, Unity 환경에서 먼저 진행해보았다.
또한 기존에 연구실에서 사용되고 있던 fbx 파일 형식의 3d map를 사용할 수도 있기 때문에, AirSim에서 Unity가 실험 단계임에도 우선적으로 시도해보았다.
이 과정에 있어서 먼저 다운받은 목록은 다음과 같다

AirSim build

build0
build1

OS는 Windows로, 먼저 https://microsoft.github.io/AirSim/docs/build_windows/ 에서 게시된 순서대로 빌드를 진행하였다.

Build AirSim in Unity

build2
build3

Build AirSim in Unity

build2
build3

Unity 폴더로 이동한뒤 빌드를 진행해준다.

Unity 실행

unity0
unity1
unity2
unity3

Unity 실행

unity0
unity1
unity2
unity3

Unity Hub를 실행한 뒤, 설치 탭에서 추가를 통해 아카이브에 접속, 버젼 2019.2.14f1를 다운받아준다. AirSim on Unity 깃허브 페이지에서는 2019.2.15f1를 다운받으라고 게시되어 있었지만, Unity Demo의 유니티 버젼이 2019.2.14f1로 되어있었기 때문에 선택하였다.

프로젝트 탭에서 추가를 통해 AirSim 폴더 내 Unity\UnityDemo를 추가해준다.
UnityDemo를 클릭 시 이미지와 같이 Unity가 실행된다.

Assets 내 Scenes에서 SimModeSelector를 더블클릭함으로서 Hierarchy 패널에 들어가도록한다. 이 때 CarDemo, DroneDemo는 패널에 들어가지 않도록 주의한다.

Scene의 실행

car1
drone1

Scene의 실행

car1
drone1

위의 재생 버튼을 누름으로서 씬를 플레이할 수 있다. 이미지는 각각 Car Mode와 Drone Mode를 선택하고 볼 수 있는 화면으로, 드론은 키보드로 컨트롤이 불가능하지만, 자동차는 키보드 방향키와 WASD 버튼으로 이동한다.

AirSim 빌드 과정에 있어서 생긴 오류는 https://kolikim.tistory.com/34  의 포스트 내용을 통하여 해결하였습니다.

항공 용어 정리 (1) : ATC와 ATM

항공교통과 관련된 공부를 하는 입장에 있어, 여러 전문 용어가 영어의 약어로 정의되어 있기에 순차적으로 관련글을 작성해보고자 한다.

이번 포스트에서는 항공 교통 분야에서 주로 쓰이는 ATC와 ATM의 정의와 차이 및 기타 관련 용어에 대해 정리한다.

유럽항공안전청(EASA : European union Aviation Safety Agency)은 REGULATION (EC) No 549/2004 OF THE EUROPEAN PARLIAMENT AND OF THE COUNCIL 문서에 기반하여 FAQ에서 ATC와 ATM의 차이에 대해 이하와 같이 용어를 정의, 답변하였다.

  • Air Traffic Control (ATC)
    (1) 항공기 사이 및 기동 지역(Manoeuvring area)내에서의 항공기와 장애물 간의 충돌 방지
    (2) 항공 교통의 순차적 흐름의 진척 및 유지
    와 같은 목적에 의해 제공되는 서비스
  • Air Traffic Management (ATM)
    모든 운항 단계에서 항공기의 안전하고 효율적인 기동을 위해 요구되어지는 공중 및 지상 기반의 기능[항공 교통 서비스, 공역 관리(ASM) 및 항공 교통 흐름 관리(ATFM)]의 집합

항공 교통 서비스는 다양한 항공 정보 서비스, 경보 서비스, 항공 교통 자문 서비스 및 ATC 서비스를 의미한다.
ATC 서비스는 이하 세 항목의 서비스를 포함하는데,
지역 제어 서비스(area control service)는 공역의 한 블록에서 제어 비행을 위한 ATC 서비스,
접근 제어 서비스(approach control service)는 이착륙 중인 제어 비행을 위한 ATC 서비스,
비행장 제어 서비스(aerodrome control service)는 비행장 내 교통을 위한 ATC 서비스이다.

항공 교통 관리(ATM) 센터의 주 업무내용은 세가지로 다음과 같다.

  • 항공 교통 흐름 관리 (ATFM : Air Traffic Flow Management)

항공 교통 흐름 관리는 ATC 용량이 가능한 최대로 활용되어, 항공교통량과 인증된 항공 교통 서비스 제공 업체에 의해 정의된 용량이 양립할 수 있도록 함으로서 안전하고 질서있으며 신속한 항공 교통의 흐름에 기여하도록 설립된 기능이다.
복잡한 항공교통량과 악천후가 예상되는 공역을 예측하여 항공기가 적절한 항공로를 따라 운항할 수 있도록 항공 관제를 하는 것을 포함한다.

  • 공역관리 (ASM : Air Space Management)

하늘에는 여객기, 경비행기, 헬리콥터 등 다양한 비행체가 존재하는데, 이들은 공항, 항공로의 분할 스케쥴을 통해 운행되고 있다. 하늘을 최대한 효율적으로 활용하기 위한 항공로의 설정, 공역으로의 지역항법(RNAV : Area Navigation) 경로 등의 설정 등을 통해 차질 없이 항공 관제를 할 수 있도록 공역관리가 진행되고 있다.

  • 해상관리 (Oceanic ATM : Oceanic Air Traffic Management)

넓은 해상에서도 또한 안전하게 비행할 수 있도록 항공 관제를 진행하는데, ICAO(국제 민간 항공 기관)를 통해 항공 관제의 책임분담을 각국이 가지고, FIR(Flight Information Region : 비행정보구) 를 접하는 공해를 포함하여 해상의 항공 관제를 행하고 있다.

참고 관련 링크 및 서적
[1] https://eur-lex.europa.eu/LexUriServ/LexUriServ.do?uri=CONSLEG:2004R0549:20091204:EN:PDF
[2] https://www.easa.europa.eu/faq/45953
[3] カラー図解でわかる航空管制「超」入門