AeroCoder Logo

Implementation Guide

Generating custom MAVLink libraries

Using mavgen to create headers from your own XML dialect definitions.

If you define custom messages for a payload or sensor, you write an XML dialect file that includes common.xml and adds your messages. Then run mavgen to produce language-specific libraries.

xml

<!-- my_dialect.xml -->
<?xml version="1.0"?>
<mavlink>
  <include>common.xml</include>
  <messages>
    <message id="50001" name="MY_SENSOR_DATA">
      <field type="uint32_t" name="timestamp_ms">Milliseconds since boot</field>
      <field type="float" name="temperature">Celsius</field>
      <field type="float" name="pressure">Pascal</field>
    </message>
  </messages>
</mavlink>

bash

# Generate C headers from your dialect
python3 -m pymavlink.tools.mavgen \
  --lang=C \
  --wire-protocol=2.0 \
  --output=generated/my_dialect \
  my_dialect.xml

# Generate Python bindings
python3 -m pymavlink.tools.mavgen \
  --lang=Python \
  --wire-protocol=2.0 \
  --output=generated/my_dialect.py \
  my_dialect.xml

Message ID ranges

IDs 0–149 are reserved for common.xml. 150–229 are for vendor dialects. 230–255 are for MAVLink 1 testing. MAVLink 2 extends to 0–16777215 — use IDs above 50000 for private/experimental messages.

← Previous

SITL connection examples

Next →

C++ implementation flowchart

Edit this page on mavlink.io ↗

On This Page

Message ID ranges

© 2024 AeroCoder. All rights reserved

TwitterYouTubeInstagram