Tools and REST API for configuring PX4 from a companion computer
Project description
px4-configuration
Repository that collects scripts to configure and modify PX4 from a companion Linux computer. All tooling is built on top of MAVSDK-Python.
Installation
Development Installation
# Optional: create a virtual environment
python3 -m venv .venv
source .venv/bin/activate
# Install the package (installs all required dependencies)
pip install -e .
Building a Wheel Package
To build a distributable wheel (.whl) file:
# Install build tools (if not already installed)
pip install build
# Build the wheel package
python -m build --wheel
# The wheel file will be created in the dist/ directory
# Example: dist/px4_configuration-0.1.0-py3-none-any.whl
To build both wheel and source distribution:
python -m build
Installing from a built wheel:
# Install from the wheel file
pip install dist/px4_configuration-0.1.0-py3-none-any.whl
Requirements
- Python 3.10+
- PX4 flight controller connected over serial (e.g.
/dev/pixhawk) - User added to the
dialoutgroup for serial access (sudo usermod -aG dialout $USER)
Scripts
All scripts use a serial connection to talk to PX4.
scripts/calibrate.py– run gyro, accel, mag, level and (future) ESC calibrationscripts/set-params.py– bulk upload parameters from.paramsfiles inconfigs/scripts/upload-sdcard-config.py– upload files (e.g.extras.txt) to the PX4 SD card via MAVLink FTPscripts/shell.py– open an interactive PX4 NSH shell session over MAVLinkscripts/px_uploader.py– PX4 firmware uploader (original PX4 script, unverified here)
REST API (FastAPI)
The companion computer can expose the same functionality through a REST API located in the px4_configuration.api package.
Run the API server
# Using the packaged console script
px4-config-api --host 0.0.0.0 --port 8000
# Or via the helper module
python run_api.py
# Or directly with uvicorn
uvicorn px4_configuration.api.main:app --host 0.0.0.0 --port 8000
Endpoints
GET /health– health checkPOST /calibration/start– start selected calibrations, returns Server-Sent Events (SSE) with progressPOST /params/upload– upload a.paramsfile (multipart form), SSE progress streamPOST /sdcard/upload– upload a file (e.g.extras.txt) to the SD card, SSE progress streamWS /shell/connect– interactive PX4 shell over WebSocket
All endpoints accept optional port and baudrate (defaults /dev/pixhawk, 2000000). SSE responses emit JSON payloads with keys such as type, message, progress, etc.
Calibration Message Structure
The /calibration/start endpoint returns structured JSON messages via Server-Sent Events (SSE). Each calibration type has a specific message format:
Accelerometer Calibration
The /calibration/start endpoint returns structured JSON messages via Server-Sent Events (SSE). Each calibration type has a specific message format:
{
"type": "accelerometer_progress",
"progress": 0.17,
"status_text": "down side result: [0.020 0.819 -9.750]",
"pending_orientations": ["back", "front", "left", "right", "up"],
"current_orientation": "down",
"current_message": "measuring",
"result": [0.020, 0.819, -9.750],
"is_complete": false
}
Fields:
pending_orientations: List of remaining orientations to measure (e.g.,["back", "front", "left", "right", "up"])current_orientation: Currently detected orientation being measured (e.g.,"down","left")current_message: Instruction type -"hold_still","rest_detected","measuring","rotate","orientation_detected","already_completed","complete"progress: Progress value (0.0 to 1.0)result: Measurement result array[x, y, z]when availableis_complete: Boolean indicating completion
Completion message:
{
"type": "accelerometer_complete",
"message": "Accelerometer calibration finished",
"is_complete": true
}
Magnetometer Calibration
{
"type": "magnetometer_progress",
"progress": 0.33,
"status_text": "right orientation detected",
"pending_orientations": ["back", "front", "left", "up"],
"current_orientation": "right",
"current_message": "orientation_detected",
"is_complete": false
}
Fields:
pending_orientations: List of remaining orientations to measurecurrent_orientation: Currently detected orientationcurrent_message: Instruction type -"rotate","hold_still","rest_detected","motion_detected","orientation_detected","already_completed","complete"progress: Progress value (0.0 to 1.0) that increments during rotationis_complete: Boolean indicating completion (true when progress >= 1.0)
Completion message:
{
"type": "magnetometer_complete",
"message": "Magnetometer calibration finished",
"is_complete": true
}
Gyroscope Calibration
{
"type": "gyroscope_progress",
"progress": 0.5,
"status_text": null,
"current_message": "calibrating",
"is_complete": false
}
Fields:
progress: Progress value (0.0 to 1.0)current_message:"calibrating"during progress,"complete"when doneis_complete: Boolean indicating completion (true when progress >= 1.0)
Completion message:
{
"type": "gyroscope_complete",
"message": "Gyroscope calibration finished",
"is_complete": true
}
Level Horizon Calibration
{
"type": "horizon_progress",
"progress": 0.4,
"status_text": null,
"current_message": "calibrating",
"is_complete": false
}
Fields:
progress: Progress value (0.0 to 1.0)current_message:"calibrating"during progress,"complete"when doneis_complete: Boolean indicating completion (true when progress >= 1.0)
Completion message:
{
"type": "horizon_complete",
"message": "Level horizon calibration finished",
"is_complete": true
}
Status Messages
General status messages are also emitted:
{
"type": "status",
"message": "Starting accelerometer calibration..."
}
{
"type": "error",
"message": "Calibration failed: <error details>"
}
{
"type": "success",
"message": "All calibrations completed"
}
Notes
- Ensure the vehicle is disarmed and stationary before running calibration or parameter uploads.
- The API and scripts require serial access; add your user to the
dialoutgroup if needed. - Example parameter files and
extras.txtlive under theconfigs/directory.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file px4_configuration-0.3.1.tar.gz.
File metadata
- Download URL: px4_configuration-0.3.1.tar.gz
- Upload date:
- Size: 32.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.19
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
73db642a3f5cec25d929887a546ce0a3c758aeb708a23a223c765c8dc0339365
|
|
| MD5 |
7348d1314626b69ca1f5fefb48e9d99f
|
|
| BLAKE2b-256 |
e246b3096372eb33ec6c4efd22b7dc8c639eccc234976242001273a1f0f63771
|
File details
Details for the file px4_configuration-0.3.1-py3-none-any.whl.
File metadata
- Download URL: px4_configuration-0.3.1-py3-none-any.whl
- Upload date:
- Size: 25.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.19
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e218defd28a23a29e08b7a6dcfad1e9f7ed7f59782f819780870d3979ef5531b
|
|
| MD5 |
f8299d42a3b345194c078d5c292c683b
|
|
| BLAKE2b-256 |
1ade740bdbb694c97658c0377bd7f53411176dc7d47a9d8e3636d058c3a66462
|