A Textual TUI wizard that talks MAVLink to an ArduPilot Rover and walks through setup, calibration and tuning step by step with the ability to autoprobe various settings. Click "❓" next to any step or field for help.
- autoprobes various settings (e.g. MOT_THR_MIN, GPSx_TYPE, ATC_SPEED_MAX, TURN_RADIUS, PID parameters etc.)
- realtime monitor for RC-Channels, Servo outputs, Accel, Gyro, relay states
- adjust arbitrary servo's PWM to verify connections
- set/get parameters from commandline with wildcard support (e.g.
rover-wizard --param ATC_SPEED_*) - parameter view to list/edit all parameters
- extensive documentation built into app
- works with current vehicle settings or after factory reset
- backup/restore current FC parameter config
- show/undo parameter changes
Inside the project directory run:
python -m venv venv
. venv/bin/activate
pip install .to use a venv or install systemwide with
pip install .rover-wizard --help
usage: rover_wizard [-h] [--version] [--conn CONN] [--baud BAUD] [--demo] [--demo-skid] [--demo-boat] [--demo-sailboat] [-p NAME[=VALUE]]
ArduPilot Rover setup & tuning wizard (Textual UI)
options:
-h, --help show this help message and exit
--version show program's version number and exit
--conn CONN MAVLink connection string, e.g. /dev/ttyACM0, udpin:0.0.0.0:14550
--baud BAUD serial baud rate (ignored for UDP/TCP)
--demo use a simulated front-wheel-steering rover
--demo-skid use a simulated skid-steering rover
--demo-boat use a simulated boat with rudder and motor
--demo-sailboat use a simulated sailing boat with a motor
-p, --param NAME[=VALUE]
print a parameter (NAME, or a pattern like 'SERVO1_*') or write it (NAME=VALUE), then exit without the UI; repeatable, handled in ordere.g.
rover-wizard --conn /dev/ttyACM0 --baud 115200or, without installing:
pip install -r requirements.txt
python -m rover_wizard --conn /dev/ttyACM0 --baud 115200 # or COM5, udpin:0.0.0.0:14550, tcp:127.0.0.1:5760
python -m rover_wizard --demo # simulated front-wheel rover, no hardware (try the UI)
python -m rover_wizard --demo-skid # simulated skid-steer rover
If --conn (or --demo) is given, the wizard connects immediately; the connect screen only stays up if that
attempt fails. The connection auto-recovers if it drops (e.g. a TCP link resets) - the status bar shows
"reconnecting ..." until it's back.
--param or -p let's you read/write parameters from the commandline without TUI.
- Bench setup - vehicle disarmed, can be done indoors
- Drive & tune - vehicle armed, needs open space
- Wrap-up - finalize setup
Every phase consists of several setup steps. Navigate them in the treeview or using the "Back", "Next", or "Skip" buttons.
Settings and measurements are stored in a vehicle_<sysid>.json, so you can stop anytime and continue later.
Every step where the vehicle moves lets you choose automatic (wizard drives) or manual (you drive, wizard records).
The first step has a checkbox for each piece of hardware ArduPilot Rover can do without. Just check every hardware that is present on your rover.
Several settings have a Probe button for autoprobing. Press to try autoconfiguration. The "❓" button displays a help text describing what will be done and what to take care for.
Below the step list, there is a monitor section:
- RC channels shows a bar for every channel your receiver delivers that is updated in realtime.
- Servo output shows the state of each output. You can change it by pressing the +/- buttons.
- Compass stripe compass shows current heading
- Accel shows current accelerometer output
- Gyro shows current gyroscope output
- Relais shows current state for each relay if present (click to switch)
- Barometer shows current barometer output
Pressing Ctrl + p (or clicking ^p parameters in the bottom menu) will open a complete, searchable list of parameters:
- Double click a row to edit the parameter.
- Press
Backupto save all parameters to a file. - Press
Restoreto restore parameters from a file. - Press Esc to exit the parameter screen.
pip install .[test] pymavlink textual # pytest plus the libraries the tests exercise
pytest # from the project folder
The tests run without hardware: a physics simulator stands in for the vehicle, a small fake autopilot built on
pymavlink checks what the wizard actually sends over MAVLink (UDP on localhost), and the real Textual UI is driven
headless with Textual's test pilot. Set ROVER_WIZARD_SCREENSHOTS to a folder to keep a text screenshot of every step.
This is a vibecoding experiment designed & created by an LLM using carefully written prompts ("You sure can hydrate a pizza, mom!"). Most of the code was read by a human and all changes (human or AI) are recorded in the git history. There's a checklist that lists, which functions haven't been tested by a human, yet. Please feel free to contribute if you tested something (un)successfully. The checklist will be removed when everything has been successfully tested once.
This software configures a vehicle that can move on its own: test every setting with the wheels off the ground or in a safe, enclosed, obstacle fee, flat area and keep your transmitter and the STOP button at hand. Review what the wizard changed before relying on it. It has been verified with a simulator, automated tests, and on real hardware but there can and will be bugs. Please take extra care to prevent harm in the case your vehicle acts erratic.

