Skip to content

tridge/pymavlink

This branch is 1 commit ahead of, 16 commits behind ArduPilot/pymavlink:master.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

0f12ad6 · Oct 24, 2024
Oct 3, 2024
Sep 3, 2016
Nov 2, 2022
Oct 24, 2024
Jan 12, 2022
Jul 8, 2024
Sep 30, 2024
Oct 9, 2024
Apr 26, 2023
Apr 26, 2023
Apr 26, 2023
Apr 26, 2023
Jun 24, 2015
Sep 30, 2024
Jul 1, 2019
May 4, 2022
Aug 27, 2024
May 15, 2024
Dec 16, 2023
Oct 10, 2016
Sep 21, 2024
Oct 7, 2024
Sep 30, 2024
Sep 30, 2024
Sep 30, 2024
Feb 18, 2024
Jan 12, 2022
Sep 8, 2024
Sep 22, 2024
Sep 3, 2016
Sep 3, 2016
Aug 14, 2022
Jul 14, 2018
Oct 10, 2016
Aug 19, 2024
Oct 29, 2023
Nov 2, 2022
Dec 28, 2022
May 16, 2023
Feb 14, 2022

Repository files navigation

Build Status

Pymavlink

This is a Python implementation of the MAVLink protocol. It includes a source code generator (generator/mavgen.py) to create MAVLink protocol implementations for other programming languages as well. Also contains tools for analyzing flight logs.

Documentation

Please see http://ardupilot.org/dev/docs/mavlink-commands.html for mavlink command reference.

For realtime discussion please see the pymavlink Gitter channel

Examples can be found in the repository or in the ArduSub book

Installation

Pymavlink supports both Python 2 and Python 3.

The following instructions assume you are using Python 3 and a Debian-based (like Ubuntu) installation.

.. note::

pymavlink assumes the command "python" is in your path. Your distribution may provide a package such as "python-is-python3" to ensure that "python" is in your path.

Dependencies

Pymavlink has several dependencies :

- [future](http://python-future.org/) : for Python 2 and Python 3 interoperability
- [lxml](http://lxml.de/installation.html) : for checking and parsing xml file 

Optional :

- numpy : for FFT
- pytest : for tests

On Linux

lxml has some additional dependencies that can be installed with your package manager (here with apt-get) :

.. note::

If you continue to use Python 2 you may need to change package names here (e.g. python3-numpy => python-numpy)

sudo apt-get install libxml2-dev libxslt-dev

Optional for FFT scripts and tests:

sudo apt-get install python3-numpy python3-pytest

Using pip you can install the required dependencies for pymavlink :

sudo python -m pip install --upgrade future lxml

On Windows

Use pip to install future as for Linux. Lxml can be installed with a Windows installer from here : https://pypi.org/project/lxml

Installation

For users

It is recommended to install pymavlink from PyPI with pip, that way dependencies should be auto installed by pip.

sudo python -m pip install --upgrade pymavlink

Mavnative

Starting from September 2022, mavnative, a C extension for parsing mavlink, was deprecated and removed. Mavnative development was stalled for long time, it only supports MAVLink1 and doesn't get any fix on the protocol.

For developers

From the pymavlink directory, you can use :

sudo MDEF=PATH_TO_message_definitions python -m pip install . -v

Since pip installation is executed from /tmp, it is necessary to point to the directory containing message definitions with MDEF. MDEF should not be set to any particular message version directory but the parent folder instead. If you have cloned from mavlink/mavlink then this is /mavlink/message_definitions . Using pip should auto install dependencies and allow you to keep them up-to-date.

Or:

sudo python setup.py install

Ardupilot Custom Modes

By default, pymavlink will map the Ardupilot mode names to mode numbers per the definitions in the ardupilotmega.xml file. However, during development, it can be useful to add to or update the default mode mappings.

To do this:

  • create a folder named .pymavlink in your home directory (i.e. $HOME on Linux, $USERPROFILE on Windows); and
  • add a JSON file called custom_mode_map.json to this new .pymavlink folder.

The JSON file is a dictionary that maps vehicle MAV_TYPE value to a dictionary of mode numbers to mode names. An example that duplicates the existing mapping for MAV_TYPE_FIXED_WING (enum value of 1) vehicles is as follows:

{
    "1": {
        "0":  "MANUAL",
        "1":  "CIRCLE",
        "2":  "STABILIZE",
        "3":  "TRAINING",
        "4":  "ACRO",
        "5":  "FBWA",
        "6":  "FBWB",
        "7":  "CRUISE",
        "8":  "AUTOTUNE",
        "10": "AUTO",
        "11": "RTL",
        "12": "LOITER",
        "13": "TAKEOFF",
        "14": "AVOID_ADSB",
        "15": "GUIDED",
        "16": "INITIALISING",
        "17": "QSTABILIZE",
        "18": "QHOVER",
        "19": "QLOITER",
        "20": "QLAND",
        "21": "QRTL",
        "22": "QAUTOTUNE",
        "23": "QACRO",
        "24": "THERMAL"
    }
}

This custom_mode_map.json file can be used to:

  • change the display name of an existing mode (e.g. change "TAKEOFF" to "LAUNCH");
  • add a new mode (e.g. add "25": "NEW_MODE"); and
  • add a mapping for an unsupported vehicle type (e.g. add a mapping for MAV_TYPE_AIRSHIP (enum value of 7) vehicles).

Notes:

  • Whilst the MAV_TYPE and mode numbers are integers, they need to be defined as strings in the JSON file, as raw integers can't be used as dictionary keys in JSON.
  • This feature updates the default definitions. You can use it to change the name-to-number mapping for a mode, but you completely can't remove an existing mapping.

License


pymavlink is released under the GNU Lesser General Public License v3 or later.

The source code generated by generator/mavgen.py is available under the permissive MIT License.

About

python MAVLink interface and utilities

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 62.3%
  • C 12.6%
  • JavaScript 10.9%
  • C++ 4.4%
  • Swift 4.4%
  • C# 1.9%
  • Other 3.5%