본문 바로가기
Robotics/Control Theory

ROS2 × PX4로 시작하는 자율비행 드론 제어 (2) PX4 + Ignition Gazebo + MAVROS2 연동 전체 형태 구성

by 항공학도 2025. 5. 2.

이 블로그 시리즈에서는 Gazebo + ROS 2 + PX4(MAVROS)를 활용해 드론을 제어하고, 최적 제어 알고리즘 Model Predictive Path Integral (MPPI) 를 직접 구현하는 과정을 기록합니다. 이후에는 더 진화된 강화학습(RL) 기반 제어로까지 확장하며, 최신 오픈소스 생태계가 실제 연구·개발 파이프라인에서 어떻게 유기적으로 엮이는지 보여드릴 예정입니다.

Generated by ChatGPT, super cool!

드론을 직접 들고 야외로 나가기 전에, 시뮬레이터 상에서 테스트해볼 수 있다면, 개발 속도를 수직 상승시킬 수 있습니다. 이 글에서는 PX4 SITL, Ignition Gazebo, MAVROS2를 하나의 파이프라인으로 엮어 드론을 관찰·제어하도록 만드는 과정을 단계별로 정리합니다.

1. PX4 SITL + Ignition Gazebo 시작하기

cd ~/PX4-Autopilot
make px4_sitl gz_x500

 

  • gz_x500 환경이 부팅되면 Ignition Gazebo 창에 x500 쿼드콥터가 (0,0,0) 좌표에 아래 그림과 같이 스폰됩니다.

Ignition Gazebo

2. MAVROS2 연결

ros2 launch mavros px4.launch.py fcu_url:=udp://:14540@127.0.0.1:14580

 

  • PX4 SITL ↔ MAVROS2 사이에서 UDP 14540 포트를 사용해 MAVLink를 주고받습니다.
  • px4.launch.py는 MAVROS2 패키지에서 제공하는 기본 런치 파일이며, 필요 시 매개변수를 조정해 사용할 수 있습니다.

mavros 실행 후에 아래 명령어로 연결 상태 확인해 보겠습니다.

ros2 topic list | grep mavros

 

아래와 같은 필수 토픽들이 출력되어야 합니다.

/mavros/state
/mavros/local_position/pose
/mavros/setpoint_position/local

토픽이 정상적으로 출력되는지 아래 명령어로 확인해보겠습니다. 현재 mavros의 상태를 보여주는 명령어 입니다.

ros2 topic echo /mavros/state

다음과 같이 connected: True 가 확인되면 PX4 ↔ MAVROS2 브리지가 성공적으로 연결된 것입니다.

header:
  stamp:
    sec: 1746168519
    nanosec: 154139416
  frame_id: ''
connected: true
armed: false
guided: true
manual_input: false
mode: AUTO.LOITER
system_status: 3

 

다음 글에서는 위에서 구축한 스택을 기반으로 모터를 구동하고 (Arming) Offboard 모드에 진입해 이륙 (Takeoff) 후드론을 자율로 전진시키고, 안전하게 착륙 (Landing) 후 모터를 정지시키는 (disarm) 실습을 다룹니다.
Arming - Offboard - Takeoff - Autonomous Flight - Landing - Disarm

댓글