[PX4 ROS 2 프로그래밍] 1편: PX4-ROS 2 연동 아키텍처 이해와 환경 구축
드론 자율주행이나 컴퓨터 비전 기반의 제어를 구현하기 위해 PX4와 ROS 2를 연동하는 것은 필수적인 과정입니다. 이번 포스트에서는 PX4와 ROS 2가 어떻게 통신하는지 아키텍처를 이해하고, 실제 코드를 돌려볼 수 있는 시뮬레이션 개발 환경을 구축해 보겠습니다.
1. PX4-ROS 2 연동 아키텍처 이해하기
과거 PX4(v1.13 이전)에서는 FastRTPS라는 미들웨어를 사용했지만, PX4 v1.14 버전부터는 ‘uXRCE-DDS’라는 새로운 미들웨어를 사용하여 ROS 2와 통신합니다.
이 아키텍처의 핵심은 **클라이언트(Client)**와 **에이전트(Agent)**입니다.
- uXRCE-DDS Client (PX4 측): 드론의 비행 제어기(PX4) 내부에서 동작합니다. PX4 내부에서 사용하는 통신 규격인
uORB메시지를 ROS 2가 이해할 수 있는 형태(DDS)로 변환해 줍니다. - Micro XRCE-DDS Agent (컴패니언 컴퓨터/ROS 2 측): 라즈베리파이나 노트북 같은 외부 컴퓨터에서 동작합니다. PX4의 Client와 연결되어, 데이터를 ROS 2의 글로벌 데이터 공간으로 발행(Publish)하거나 구독(Subscribe)하는 프록시 역할을 합니다.

즉, 개발자가 ROS 2 프로그래밍을 통해 VehicleCommand(명령) 메시지를 보내면, Agent → Client를 거쳐 PX4 내부의 uORB 토픽으로 변환되어 드론이 움직이게 되는 구조입니다.
2. 개발 환경 구축하기
안정적인 개발을 위해 공식 권장 환경인 Ubuntu 22.04와 ROS 2 “Humble” 버전을 기준으로 진행합니다.
1단계: PX4 시뮬레이터(SITL) 설치
실제 드론 없이 컴퓨터 상에서 코드를 테스트하기 위해 PX4 소스코드를 다운로드하고 시뮬레이터를 설치합니다.
cd ~
git clone https://github.com/PX4/PX4-Autopilot.git --recursive
bash ./PX4-Autopilot/Tools/setup/ubuntu.sh
2단계: ROS 2 Humble 설치
Ubuntu 22.04에 ROS 2 Humble을 설치합니다. (상세한 설치는 ROS 공식 문서를 참고해도 좋습니다). 핵심 개발 패키지인 ros-dev-tools와 Python 의존성도 함께 설치해 줍니다.
sudo apt update && sudo apt install ros-humble-desktop
sudo apt install ros-dev-tools
source /opt/ros/humble/setup.bash && echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
pip install --user -U empy==3.3.4 pyros-genmsg setuptools
3단계: Micro XRCE-DDS Agent 설치 및 빌드
ROS 2 측에서 PX4와 통신을 담당할 Agent를 소스코드로부터 빌드합니다.
git clone -b v2.4.3 https://github.com/eProsima/Micro-XRCE-DDS-Agent.git
cd Micro-XRCE-DDS-Agent
mkdir build && cd build
cmake ..
make
sudo make install
sudo ldconfig /usr/local/lib/
3. ROS 2 워크스페이스 구성 및 빌드
ROS 2가 PX4의 메시지를 올바르게 해석하려면, PX4 펌웨어에서 사용된 것과 동일한 메시지 정의(Message Definitions)가 포함된 패키지(px4_msgs)가 필요합니다.
여러분의 홈 디렉토리에 워크스페이스를 만들고 패키지를 다운로드해 보겠습니다.
# 워크스페이스 폴더 생성
mkdir -p ~/ws_sensor_combined/src/
cd ~/ws_sensor_combined/src/
# px4_msgs(메시지 정의)와 px4_ros_com(예제 코드) 패키지 클론
git clone https://github.com/PX4/px4_msgs.git
git clone https://github.com/PX4/px4_ros_com.git
# 워크스페이스 빌드
cd ..
source /opt/ros/humble/setup.bash
colcon build
4. 통신 확인해보기 (예제 실행)
모든 설치가 끝났습니다! 이제 시뮬레이터를 띄우고, ROS 2 노드가 PX4의 센서 데이터를 잘 받아오는지 확인해 봅시다. 터미널을 3개 띄워서 각각 실행해야 합니다.
터미널 1: Micro XRCE-DDS Agent 실행 에이전트를 실행하여 8888번 포트로 UDP 통신을 대기시킵니다.
MicroXRCEAgent udp4 -p 8888터미널 2: PX4 시뮬레이터(SITL) 실행 미리 다운로드한 PX4 폴더로 이동하여 가제보(Gazebo) 시뮬레이터를 실행합니다. 시뮬레이터가 켜지면 PX4 내부의 Client가 자동으로 실행되어 포트 8888번을 통해 에이전트와 연결됩니다.
cd ~/PX4-Autopilot
make px4_sitl gz_x500
(연결이 성공하면 터미널 1과 2에 Data Writer 및 토픽이 생성되었다는 INFO 로그들이 출력됩니다).
...
[1675929445.268957] info | ProxyClient.cpp | create_publisher | publisher created | client_key: 0x00000001, publisher_id: 0x0DA(3), participant_id: 0x001(1)
[1675929445.269521] info | ProxyClient.cpp | create_datawriter | datawriter created | client_key: 0x00000001, datawriter_id: 0x0DA(5), publisher_id: 0x0DA(3)
[1675929445.270412] info | ProxyClient.cpp | create_topic | topic created | client_key: 0x00000001, topic_id: 0x0DF(2), participant_id: 0x001(1)
......
INFO [uxrce_dds_client] synchronized with time offset 1675929429203524us
INFO [uxrce_dds_client] successfully created rt/fmu/out/failsafe_flags data writer, topic id: 83
INFO [uxrce_dds_client] successfully created rt/fmu/out/sensor_combined data writer, topic id: 168
INFO [uxrce_dds_client] successfully created rt/fmu/out/timesync_status data writer, topic id: 188
...터미널 3: ROS 2 예제 노드 실행 (Listener) 방금 빌드한 워크스페이스 환경을 적용(source)한 뒤, 센서 데이터를 화면에 출력해주는 예제 노드를 실행합니다.
cd ~/ws_sensor_combined/
source /opt/ros/humble/setup.bash
source install/local_setup.bash
ros2 launch px4_ros_com sensor_combined_listener.launch.py명령어를 실행하면 아래와 같이 가속도 및 자이로 센서 데이터가 실시간으로 쏟아지는 것을 볼 수 있습니다. 성공적으로 통신이 이루어지고 있다는 뜻입니다!
RECEIVED DATA FROM SENSOR COMBINED
================================
ts: 870938190
gyro_rad: 0.00341645
gyro_rad[20]: 0.00626475
...YouTube 강좌
이번 1편에서는 PX4와 ROS 2 간의 uXRCE-DDS 통신 아키텍처를 이해하고, 이를 바탕으로 Ubuntu 22.04 기반의 시뮬레이션 환경 구축부터 데이터 수신 테스트까지 완료해 보았습니다.
다음 2편에서는 데이터를 수신할 때 흔히 겪는 QoS(통신 품질) 설정 문제와 드론의 제어를 위해 필수적으로 알아야 하는 좌표계 변환(Frame Conventions) 개념에 대해 심도 있게 다루어 보겠습니다. 기대해 주세요!

Author: maponarooo, CEO of QUAD Drone Lab
Date: February 27, 2026
