Introduction
The MAVLink SDK is a lightweight, standalone C++17 library for communicating with ArduPilot-based autopilots. It provides a clean, event-driven API for connecting to drones via UDP, TCP, or Serial interfaces.
This SDK can be used independently of the full DroneEngage system, making it ideal for developers who want to integrate MAVLink communication into their own C++ projects.
Features
Multiple Connection Types
UDP support for SITL, MAVProxy, and network connections
TCP support for MAVLink routers and proxies
Serial port support for direct flight controller connections
Event-Driven Architecture
Callback-based notifications for vehicle state changes
Automatic detection of connection, arm/disarm, mode changes
Real-time telemetry updates through callbacks
Vehicle State Management
Automatic parsing and storage of MAVLink messages
Cached telemetry data for easy access
State detection (armed, flying, ready to arm, motor enabled)
System ID filtering for multi-vehicle scenarios
Mission Management
Upload waypoint missions to the vehicle
Download and monitor mission progress
Clear missions and set active waypoints
Mission acknowledgment tracking
Parameter Management
Read individual parameters
Write parameter values
Request complete parameter list
Parameter change notifications
Command Interface
High-level API for common drone operations
Arm/disarm control
Flight mode changes
Takeoff and guided navigation
Altitude control
Home position and ROI setting
Yaw control
Servo and RC channel control
Emergency flight termination
Modern C++ Design
C++17 standard with smart pointers and RAII patterns
Singleton pattern for easy access to SDK components
Thread-safe singleton instances
Clean, intuitive API
Autopilot Compatibility
ArduPilot support (Copter, Plane, Rover)
PX4 support
Automatic handling of firmware differences
High-latency satellite link support
Project Structure
The SDK is organized as follows:
mavlink_sdk/
├── src/
│ ├── mavlink_sdk.h/cpp # Main SDK entry point
│ ├── vehicle.h/cpp # Vehicle state and telemetry
│ ├── mavlink_command.h/cpp # Command API for vehicle control
│ ├── mavlink_events.h # Event callback interface
│ ├── mavlink_waypoint_manager.h/cpp # Mission management
│ ├── mavlink_parameter_manager.h/cpp # Parameter management
│ ├── mavlink_communicator.h/cpp # Message routing
│ ├── mavlink_helper.h/cpp # Utility functions
│ ├── generic_port.h # Abstract port interface
│ ├── udp_port.h/cpp # UDP communication
│ ├── tcp_client_port.h/cpp # TCP communication
│ ├── serial_port.h/cpp # Serial communication
│ └── helpers/
│ ├── colors.h # Console color definitions
│ └── utils.h # Utility helpers
├── CMakeLists.txt # CMake build configuration
└── build.sh # Build script
Key Components
CMavlinkSDK
Main entry point for the SDK. Provides connection management (UDP, TCP, Serial) and controls the SDK lifecycle (start/stop).
CVehicle
Central component for vehicle state and telemetry. Automatically parses incoming MAVLink messages, maintains cached telemetry data, and triggers callbacks on state changes.
CMavlinkCommand
High-level command interface for vehicle control. Provides methods for arming, mode changes, navigation, mission management, and parameter operations.
CMavlinkEvents
Abstract callback interface that you inherit from to receive event notifications. Override methods to handle connection events, vehicle state changes, telemetry updates, mission events, and parameter changes.
CMavlinkWaypointManager
Handles mission/waypoint operations. Uploads, downloads, and monitors waypoint missions.
CMavlinkParameterManager
Manages autopilot parameters. Reads, writes, and tracks parameter values.
Port Classes
Abstract communication layer with implementations for UDP, TCP, and Serial connections.
Requirements
C++17 compatible compiler (GCC 7+ or Clang 5+)
CMake 3.1.0 or higher
MAVLink C library (c_library_v2) - should be placed at
../c_library_v2relative to the SDK
License
This SDK is provided under the BSD-3-Clause license, consistent with the MAVLink project licensing.