PX4 MAVSDK – C++ Programming [3편] MAVSDK C++ 설치 및 SITL 시뮬레이션 환경 구축
안녕하세요! 마케팅팀 에이든(Aiden)입니다. 지난 2편에서는 MAVSDK C++을 다루기 위해 필수적인 C++의 핵심 문법(포인터, 참조, 람다 함수, 템플릿 등)을 함께 살펴보았습니다.
이론적인 배경지식을 탄탄히 다졌으니, 이제 본격적으로 코드가 실행될 ‘놀이터’를 만들어 볼 차례입니다. 연구실이나 실험실에서 개발한 드론 제어 코드를 실제 기체에 바로 올려서 테스트하는 것은 매우 위험합니다. 작은 오타 하나, 로직의 사소한 오류 하나가 수백만 원짜리 기체의 추락이나 심각한 인명 피해로 이어질 수 있기 때문입니다.
그래서 전 세계의 로보틱스 연구원들과 대학생들은 SITL(Software In The Loop)이라는 가상의 시뮬레이션 환경에서 코드를 먼저 완벽하게 검증합니다. 이번 3편에서는 안전한 자율 비행 개발을 위한 PX4 SITL 및 Gazebo 시뮬레이터 연동 방법과 MAVSDK C++ 라이브러리의 설치 과정을 아주 친절하고 상세하게 안내해 드리겠습니다.

SITL(Software In The Loop) 시뮬레이션이란?
SITL(Software In The Loop)은 말 그대로 “소프트웨어가 루프(Loop) 안에 있다”는 뜻으로, 실제 드론 하드웨어(비행 제어기, 센서, 모터 등) 없이 컴퓨터의 프로세서 위에서 PX4 비행 스택(펌웨어)을 그대로 실행하는 방식을 말합니다.

- 물리 환경 모사: 가상 환경에서의 중력, 바람, 센서 데이터(GPS, IMU 등)는 Gazebo나 jMAVSim과 같은 강력한 3D 물리 시뮬레이터로부터 제공받습니다.
- 완벽한 코드 재사용성: 놀랍게도 SITL 환경에서 작성하고 테스트한 MAVSDK C++ 코드는, 단 한 줄의 수정 없이도 실제 드론의 컴패니언 컴퓨터(Raspberry Pi, NVIDIA Jetson 등)에 이식하여 똑같이 동작시킬 수 있습니다.
- 통신 포트의 이해: 실제 드론과 통신할 때는 시리얼(UART) 포트나 무선 텔레메트리를 사용하지만, SITL 시뮬레이션에서는 컴퓨터 내부의 가상 네트워크 포트를 사용합니다. 보통 UDP 14540 포트가 MAVSDK 오프보드(Offboard) 제어를 위해 할당된 표준 포트입니다.
MAVSDK C++ 라이브러리 설치하기 (소스 빌드 권장)
MAVSDK C++ 라이브러리를 설치하는 방법에는 크게 미리 빌드된 패키지(.deb)를 설치하는 방법과, 소스 코드를 직접 다운로드하여 빌드하는 방법이 있습니다.
대학원생이나 연구원 여러분들께는 최신 기능을 사용하고 라이브러리의 내부 구조를 파악하기 용이한 소스 빌드(Build from Source) 방식을 강력히 권장합니다. 본 가이드는 권장 OS인 Ubuntu-22.04 LTS 환경을 기준으로 설명합니다.
단계 1: 소스 코드 다운로드
터미널을 열고 git을 사용하여 MAVSDK 소스 코드를 가져옵니다. 이때 하위 모듈(Submodule)들도 함께 받아야 하므로 --recursive 옵션이 필수적입니다.
git clone https://github.com/mavlink/MAVSDK.git
cd MAVSDK
git submodule update --init --recursive
단계 2: Cmake 구성 및 빌드 옵션 설정
MAVSDK는 크로스 플랫폼 빌드 시스템인 cmake를 사용합니다. 연구 목적에 따라 디버깅 기호가 포함된 디버그(Debug) 빌드와 성능이 최적화된 릴리스(Release) 빌드 중 하나를 선택하여 구성할 수 있습니다.
[옵션 A: 개발 및 테스트용 디버그 빌드] 에러를 추적하고 내부 동작을 확인하고 싶을 때 사용합니다.
cmake -DCMAKE_BUILD_TYPE=Debug -Bbuild/default -H.
[옵션 B: 실제 비행 및 성능 최적화용 릴리스 빌드] 최대 성능을 내야 하는 프로덕션 환경이나 무거운 알고리즘을 돌릴 때 사용합니다.
cmake -DCMAKE_BUILD_TYPE=Release -Bbuild/default -H.
💡 연구원들을 위한 빌드 옵션 팁(Build Options):
cmake구성 시 다양한 플래그를 추가할 수 있습니다.
-DBUILD_SHARED_LIBS=ON: 동적 라이브러리(.so)로 빌드합니다 (OFF 시 정적 라이브러리.a로 빌드).-DBUILD_MAVSDK_SERVER=ON: Python이나 Swift 등 다른 언어 래퍼(Wrapper)가 MAVSDK C++ 코어에 접근할 수 있도록 도와주는 gRPC 백엔드 서버(mavsdk_server)를 함께 빌드합니다.
단계 3: 컴파일 및 설치
이제 구성된 환경을 바탕으로 코드를 컴파일(빌드)하고 시스템에 설치합니다. -j8 옵션은 CPU 코어 8개를 사용하여 병렬로 빠르게 빌드하라는 뜻이며, 본인의 PC 환경에 맞춰 숫자를 조절하세요.
# 컴파일 진행 (시간이 조금 소요됩니다)
cmake --build build/default -j8
# 시스템 전체(/usr/local)에 라이브러리 및 헤더 파일 설치
sudo cmake --build build/default --target install이제 여러분의 Ubuntu 시스템 전역에서 #include <mavsdk/mavsdk.h> 형태로 MAVSDK를 사용할 수 있게 되었습니다!
PX4 SITL 시뮬레이터(Gazebo) 실행하기
MAVSDK 앱이 명령을 내릴 대상인 “가상의 드론”을 띄워보겠습니다. PX4 소스 코드가 이미 여러분의 PC에 다운로드되어 있다고 가정합니다 (아직 없다면 공식 PX4-Autopilot 레포지토리를 클론하세요).
터미널을 열고 PX4 소스 코드가 있는 디렉터리로 이동한 후, 다음 명령어를 실행합니다.
cd PX4-Autopilot
make px4_sitl gazebo명령어를 입력하면 검은색 터미널 창에 PX4 펌웨어가 부팅되는 로그가 주르륵 올라가며, 잠시 후 Gazebo 3D 시뮬레이터 창이 열리며 활주로 위에 멋지게 대기 중인 가상의 쿼드콥터 드론을 보실 수 있습니다.

이 시뮬레이터는 실제 드론처럼 시동이 걸리면 프로펠러가 돌고, 물리 엔진이 적용되어 바람에 흔들리거나 벽에 부딪히면 추락하기도 합니다. 이제 우리의 “안전한 실험실”이 완벽하게 준비되었습니다.
MAVSDK 예제 앱 빌드 및 이착륙(Takeoff & Land) 연동
시뮬레이터가 켜져 있는 상태에서, 새로운 터미널을 열고 MAVSDK 소스 코드 내에 포함된 “이륙 및 착륙(Takeoff and Land)” 예제를 실행해 보겠습니다.
앞서 언급했듯, 시뮬레이터는 기본적으로 UDP 14540 포트를 통해 외부 컴퓨터(우리의 MAVSDK 앱)의 명령을 기다리고 있습니다.
1. 예제 디렉터리로 이동 및 빌드
# MAVSDK를 클론해둔 폴더 안의 예제 폴더로 이동
cd ~/MAVSDK/examples/takeoff_and_land/
# CMake로 예제 프로젝트 빌드 파일 생성
cmake -Bbuild -S.
# 예제 코드 컴파일
cmake --build build -j42. 시뮬레이터와 연결하여 예제 실행 컴파일이 완료되면 build 폴더 안에 실행 파일이 생성됩니다. 이 실행 파일에 드론의 연결 주소인 udpin://0.0.0.0:14540을 인자로 전달하여 실행합니다.
./build/takeoff_and_land udpin://0.0.0.0:14540

실행 결과 및 워크플로우 분석: 명령어를 실행하세요
- 터미널 창에는 드론의 연결 성공, Telemetry 정보 수신 로그가 출력됩니다.
- 드론이 스스로 시스템 상태(GPS 잠금 등)를 확인합니다.
Action::arm()명령에 의해 모터에 시동이 걸리며 Gazebo 화면 속 드론의 프로펠러가 회전하기 시작합니다.Action::takeoff()명령이 전송되며, 드론이 약 2~5미터 상공으로 수직 이륙하여 안정적으로 호버링(Hovering)합니다.- 코딩된 대기 시간이 지나면
Action::land()명령을 통해 원래 위치로 안전하게 착륙한 뒤 모터가 꺼집니다.
오늘 드론 자율 비행 연구의 첫 번째 허들이라고 할 수 있는 PX4 SITL 가상 환경 구축과 MAVSDK C++ 라이브러리의 소스 빌드, 그리고 예제 코드를 통한 가상 드론의 이착륙 제어까지 성공적으로 마쳤습니다.
이제 우리는 어떠한 복잡한 알고리즘이나 수식을 코드로 짜더라도, 현실 세계의 견적(수리비) 걱정 없이 마음껏 실험해 볼 수 있는 강력한 무기를 얻었습니다.
다음 [4편: C++ 앱 빌드 및 통신 연결]에서는 남이 만들어둔 예제 코드를 실행하는 것을 넘어, 빈 폴더에서부터 CMakeLists.txt를 직접 작성하여 나만의 MAVSDK 프로젝트를 세팅하고 드론과 통신을 연결하는 방법을 깊이있게 파헤쳐 보겠습니다.
YouTube 강좌

작성자: 에이든(Aiden), 쿼드(QUAD) 드론연구소 마케팅팀
기고일: 2026.03.13
