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  의 포스트 내용을 통하여 해결하였습니다.