드론자율주행시스템 구축을 위해 기존에는 Ubuntu 22.04, ROS2, PX4, Gazebo를 사용했다. 다만 Gazebo를 사용하는 과정에서 해당 시뮬레이터의 안정성이 매우 떨어지고 비행제어가 잘 이뤄지지 않는 느낌을 강하게 받아 시뮬레이터를 AirSim으로 바꿔보고자 했다. AirSim 구동을 위한 UnrealEngine과 PX4와의 연동 예제가 Windows를 중점으로 이뤄져 있어 Windows 환경에 설치를 수행하기로 했다.
Windows 11에서 드론비행제어 시뮬레이션 환경을 구성하기 위해 설치해야할 항목은 4가지다. ROS2, PX4, UnrealEngine, AirSim다. Windows 11 환경에 AirSim 시뮬레이션 환경을 구축하며 느낀 것은 Ubuntu 22.04에 ROS2, PX4, Gazebo 환경을 설치할 때 보다 잡다한 에러가 상대적으로 많이 발생했다는 것이고, 레퍼런스가 많지는 않아 공식 문서와 약간의 유튜브 영상을 잘 보고 환경 구성을 해야한다는 것이다.
1. ROS2
ROS2 설치는 humble 배포판을 기준으로 수행했으며 전반적으로 아래 링크를 참조하여 수행하였다.
https://docs.ros.org/en/humble/Installation/Alternatives/Windows-Development-Setup.html#installing-prerequisites
설치해야할 것들이 많았다. chocolatey, python, visual studio, opencv, qt5, rqt 등을 위 공식문서에 따라 설치를 수행했다. 최종적으로 'hello world'를 수행했을 때 아래와 같이 topic을 publish하고 subscribe 할 수 있다면 설치가 완료된 것이다.
2. UnrealEngine & AirSim
AirSim은 UnrealEngine 기반으로 동작하기 때문에 UnrealEngine 설치가 필요하다. 전반적으로 다음 링크의 공식문서를 참조하여 UnrealEngine과 AirSim 설치를 수행했다. https://microsoft.github.io/AirSim/build_windows/
참고로 UnrealEngine 설치를 수행할 때 UnrealEngine 4.27 이상을 다운로드 받으라고 되어 있는데 23.07.31 기준 5.2.1 버전을 다운로드 받게 되면 UnrealEngine을 구동할 때 "Physxvehicles" 플러그인이 없다는 오류가 발생하므로 4.27 버전으로 맞춰 다운로드 해야 에러가 발생하지 않는다. UnrealEngine은 아래와 같이 독립적인 버전을 각각 설치해 관리할 수 있다. 4.27.2 버전을 다운로드 받자.
3. PX4
PX4를 설치하기 위해 Windows의 WSL2를 사용한다. 기존에 사용하던 Ubuntu 22.04를 삭제하고 재설치하는 과정에서 에러가 발생해서 Ubuntu 20.04를 설치했다. Ubuntu 20.04 환경에서 아래 명령을 통해 소스코드를 내려받고 빌드해주었다.
git clone https://github.com/PX4/PX4-Autopilot
make px4_sitl_default none_iris
만약 make 과정에서 오류가 발생한다면 g++, cmake 등의 빌드를 위해 필요한 패키지를 설치해주어야 한다. 그리고 Windwos 11에서 구동되는 AirSim이 PX4와 연결되기 위해서 PX4의 IP address를 알아야 한다. ipconfig를 통해 WSL에 할당된 IP를 환경변수 PX4_SIM_HOST_ADDR에 할당해준다.
알다시피 export를 통한 환경변수는 일회성이기 때문에 .bashrc의 제일 아랫 부분에 아래 명령을 추가해서 셸이 생성될 때마다 실행될 수 있도록 해주는 것이 좋다.
이후에 UnrealEngine의 AirSim에서 해당 IP와 연결하기 위해 C:\Users\<user>\Documents\AirSim 경로에 있는 settings.json 파일을 아래와 같이 수정해준다. 참고로 이 때 LocalHostIp는 위 PX4의 IP address를 기입해준다.
참고로 위 settings.json은 다음 링크를 참조하였다. https://microsoft.github.io/AirSim/px4_sitl_wsl2/
이후 UnrealEngine에서 AirSim 시뮬레이션 모드인 AirSimGameMode를 선택해주고 시뮬레이션을 수행하면 아래와 같이 AirSim의 settings.json을 로딩하고 PX4의 IP와 연결하는 것을 확인할 수 있다. 참고로 UnrealEngine에서 월드를 구성하고 시뮬레이션을 수행하는 과정 전부는 아래 링크를 참조하였다.
Unreal AirSim Setup from scratch
UnReal 환경 만들기 및 설정(pixhawk 기반 HITL)
AirSim과 PX4가 연결되면 연결을 대기 중이던 상태에서 아래와 같이 명령을 수행할 수 있는 상태로 바뀌게 된다.
현재 상태에서 아래와 같이 commander takeoff 명령을 수행하게 되면 AirSim 시뮬레이션 상으로 명령이 전달되어 드론이 이륙하는 것을 확인할 수 있다.
ROS2를 통해 PX4에서 발행하는 uORB 토픽을 subscribe하고 AirSim 상으로 비행제어 코드를 수행하는 과정은 추후 포스팅에서 다루고자 한다.
'Computer Science > 로봇공학' 카테고리의 다른 글
SLAM의 이해와 구현 PART 01 요약 (0) | 2023.07.17 |
---|---|
[로봇공학] PID 제어 (Proportional-Integral-Differential control) (0) | 2023.07.04 |
[논문리뷰] PX4-ROS 기반 자율비행 드론 시스템 개발 (0) | 2023.06.30 |
[논문리뷰] 오픈소스 소프트웨어 PX4를 이용한 UAV 자율탐사 및 경로계획에 관한 연구 (0) | 2023.06.29 |
[논문 리뷰] PX4 Autopilot 기반 드론의 데이터 추출 및 분석 도구 (0) | 2023.06.29 |