MAVROS
ROS gateway for MAVLink-compatible autopilots (PX4, ArduPilot)
License
BSD 3-Clause, GPL 3.0, LGPL 3.0
Triple-licensed: BSD-3-Clause / GPLv3 / LGPLv3. Users may choose any of the three licenses.
Overview
MAVROS is the official ROS/ROS2 package that bridges the MAVLink protocol to the ROS ecosystem, enabling communication between ROS-based systems and MAVLink-compatible autopilots like PX4 and ArduPilot. It provides ROS topics, services, and actions for telemetry, waypoint navigation, parameter management, and actuator control. MAVROS is fundamental infrastructure for any ROS-based drone or unmanned vehicle project — essentially the standard interface layer between autonomous flight software and autopilot hardware.
MAVROS is the official ROS communication node for MAVLink-based autopilots, serving as the standard bridge between the ROS ecosystem and flight controllers running PX4 or ArduPilot. It translates MAVLink messages into ROS topics, services, and actions, providing access to telemetry, GPS, IMU, battery status, and flight modes while enabling commands for arming, takeoff, waypoint navigation, and offboard control.
The project consists of several packages: the core mavros node, mavros_extras with additional plugins for vision pose estimation and camera control, libmavconn for MAVLink communication outside of ROS, mavros_msgs for message and service definitions, and test_mavros for SITL testing. It handles coordinate frame conversions and uses GeographicLib for correct altitude transformations between autopilot and ROS reference frames.
Developed since 2014 and now supporting both ROS 1 and ROS 2, MAVROS is the most widely used MAVLink-ROS interface in the drone community. It supports MAVLink 2.0, is triple-licensed under GPL/LGPL/BSD, and is actively maintained with over 200 commits per year.
Why it matters
MAVROS is the standard bridge between the ROS ecosystem and MAVLink-based autopilots, making it an essential component for any research or commercial drone system that combines ROS-based perception and planning with PX4 or ArduPilot flight controllers. Its decade of development has made it the de facto interface for autonomous UAV applications in the ROS community.
Problem it solves
Autonomous drone systems typically use ROS for high-level perception and decision-making but rely on MAVLink-based flight controllers (PX4, ArduPilot) for low-level flight control. MAVROS bridges this gap by translating MAVLink messages into ROS topics, services, and actions, enabling seamless communication between the two ecosystems without requiring custom protocol handling.
Key takeaways
- Official MAVLink-to-ROS gateway supporting both ROS 1 (Noetic) and ROS 2
- Provides ROS topics for telemetry, GPS, IMU, battery, and state data from the autopilot
- Supports both PX4 and ArduPilot flight stacks via the MAVLink protocol
- Includes mavros_extras for additional plugins like vision pose estimation and camera control
- Uses GeographicLib for correct altitude conversion between AMSL (FCU) and WGS84 (ROS) frames
Who it is for
- UAV researchers building autonomous drone systems with ROS
- PX4 and ArduPilot developers integrating onboard computers with flight controllers
- Computer vision engineers deploying perception pipelines on drones
- Commercial drone companies using ROS for mission planning and autonomy
Limitations
- Tightly coupled to the MAVLink protocol — not usable with non-MAVLink flight controllers
- ROS 2 support (v2.x) is newer and may have fewer community resources than the ROS 1 version
- Configuration can be complex due to the many MAVLink message types and frame conventions
- Performance depends on the serial or UDP link quality between the companion computer and flight controller