Inav Mcp

io.github.starlordz12由 GitHub 帳號 starlordz12 發布v1.0.0更新於 Nov 3, 2026

MCP server for iNAV flight-controller configuration and diagnostics

已驗證STDIO僅桌面位置與生活開發者工具

概覽

AI 產生的概覽

透過 USB 序列埠設定、診斷與排解 iNAV 飛控,主要針對固定翼與飛翼機型。

可以做什麼
  • 尋找並開啟飛控序列埠連線,讀取板卡身分與即時狀態
  • 讀取即時遙控通道、感測器、姿態、電池、GPS 與禁止解鎖旗標,並執行完整診斷掃描並列出依優先順序排列的修正建議
  • 離線規劃機型設定方案、套用到飛控,並比對實際設定是否符合方案
  • 指派、清除與建議飛行模式開關配置,設定失控保護、GPS 與導航/返航參數
  • 讀取與設定固定翼 PID 增益、速率與濾波參數
  • 備份、列出與還原 CLI 設定檔,執行單筆或批次 CLI 指令
適用情境
適合在建置新的 iNAV 固定翼或飛翼時使用,也適合飛行器無法解鎖或出現異常時排查,或希望助理在試運行預覽下協助完成模式指派、失控保護、GPS 與調參變更。
執行需求
以 Python 套件形式在本機透過 stdio 執行(需 Python 3.10+),並在 MCP 用戶端設定中註冊。需要一台以 USB 連接的 iNAV 飛控,以及它列舉出的序列埠(例如 COM3 或 /dev/ttyACM0)。未宣告任何帳號、API 金鑰或環境變數。
安裝前請注意
寫入操作會變更飛控:設定寫入預設僅試運行、需 confirm 確認,寫入前自動備份,解鎖狀態下拒絕執行,並會儲存並重新啟動飛控。test_motor 會驅動實際馬達輸出,必須提供 props_removed=True 與 confirm=True,請先拆下螺旋槳。原始 cli 與 cli_batch 可執行任意 CLI 指令,包括寫入。PID、失控保護與導航變更會影響飛行行為。備份檔會寫入本機 backups 目錄。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Inav Mcp,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

iNAV MCP Server

[CI] [License: MIT] [Python] [MCP] [PyPI]

An MCP server that lets Claude configure, diagnose, and troubleshoot an iNAV flight controller over USB — built primarily for flying wings (elevon FPV wings like the TBS Chupito and Mojito), and also for conventional fixed-wing planes.

It talks to the FC through a single serial connection, using the iNAV CLI for configuration writes and a small built-in MSP codec for live/binary reads. Every write is dry-run by default, auto-backs-up first, refuses while the board is armed, and reads back to verify.

[iNAV MCP session — Claude finding the flight controller and reading its status over USB]

Recorded against a live iNAV 6.1.0 flight controller over USB.

⚠️ Safety: Always remove props from the aircraft before any motor test. This tool never switches the FC into MSP-RX mode and never arms the aircraft.


Requirements

  • Python 3.10+
  • An iNAV flight controller (developed against iNAV 8.x/9.x) connected over USB
  • The serial port the FC enumerates as (e.g. COM3 on Windows, /dev/ttyACM0 on Linux)

Install

From PyPI (once the first release is published):

bash
pip install inav-mcp

From source (for development, or to run the latest unreleased code):

bash
# from the repo rootpython -m venv .venv.venv/Scripts/python -m pip install -e .          # Windows# source .venv/bin/activate && pip install -e .    # Linux/macOS

For development (tests):

bash
.venv/Scripts/python -m pip install -e ".[dev]"

Try it without a flight controller

You don't need any hardware to confirm the project works — the test suite runs fully offline (no FC required):

bash
.venv/Scripts/python -m pytest        # Windows# .venv/bin/pytest                     # Linux/macOS

All 186 tests should pass. To actually use the server, though, you need a flight controller flashed with iNAV firmware (developed against iNAV 8.x/9.x) connected over USB — without one, the connection tools have nothing to talk to.

Register with Claude

Add the server to your Claude (Code or Desktop) MCP config (~/.claude/settings.json or the Claude Desktop config). Replace the paths below with wherever you cloned this repo — the command points at the Python inside your .venv, and cwd is the repo root.

Windows:

json
{  "mcpServers": {    "inav": {      "command": "C:\\path\\to\\inav-mcp\\.venv\\Scripts\\python.exe",      "args": ["-m", "inav_mcp.server"],      "cwd": "C:\\path\\to\\inav-mcp"    }  }}

Linux / macOS:

json
{  "mcpServers": {    "inav": {      "command": "/path/to/inav-mcp/.venv/bin/python",      "args": ["-m", "inav_mcp.server"],      "cwd": "/path/to/inav-mcp"    }  }}

The server speaks MCP over stdio. You can also run it directly with the installed entry point inav-mcp.


Typical workflows

The server ships prompts that walk Claude through the common jobs — just pick one:

  • new_fixed_wing_setup — gather hardware details → define_aircraft → review → apply.
  • troubleshoot_no_arm — decode arming-prevention flags → guided fixes.
  • configure_modes — identify switches from live RC → suggest a layout → assign modes.

Or drive it conversationally, e.g.:

"Connect to my FC on COM3 and tell me why it won't arm."

"Set up a 4S flying wing on DSHOT600, then show me the commands before applying."


Tools (35)

Connection & identity

ToolWhat it does
list_serial_ports()List available serial ports.
find_fc(baud=115200, probe_all=False)Auto-detect which port has an FC by probing for MSP identity — no guessing the port.
connect(port, baud=115200)Open the FC connection, return board identity.
disconnect()Close the connection.
board_info()FC variant, firmware version, target, API version, sensors.

Hardware setup

ToolWhat it does
define_aircraft(name, wing_type, esc_protocol, cells, …)Offline planner — stores a profile and generates the CLI config plan.
get_aircraft_profile()The current declared profile + plan.
apply_aircraft_setup(confirm=False)Apply the plan (gated: not armed, auto-backup, read-back verify). On iNAV, applying is inherently save+reboot.
check_config()diff all + lint against the declared profile + ARM check.

Flight modes & switches

ToolWhat it does
suggest_mode_layout(skill_level, num_switches, has_gps=False)Recommend a fixed-wing switch/mode layout (offline).
set_flight_mode(mode_name, aux_channel, range_low, range_high, confirm=False)Assign one mode to an aux range.
assign_switch(switch_channel, switch_positions, mode_per_position, confirm=False)Map a whole 2/3/6-pos switch in one call.
clear_flight_mode(mode_name, confirm=False)Remove a mode's switch assignments.

Diagnostics

ToolWhat it does
diagnose()Full sweep: arming, sensors, RC, battery, GPS → prioritized fixes.
why_wont_it_arm()Decode arming-prevention flags into plain reasons + fixes.
read_rc_channels()Live RC channel values — flip a switch, see which channel moves.
read_sensors()Live attitude, per-sensor health, battery.
get_status()MSP status + CLI status/tasks.
list_flight_modes()All modes and their current switch assignments.
check_failsafe()Read failsafe_* settings, explain the RC-loss procedure, flag risky setups (e.g. RTH without GPS).

Bench tests & calibration

ToolWhat it does
test_motor(motor, throttle_us=1100, duration_s=2.0, props_removed=False, confirm=False)Spin ONE motor briefly. Hard-gated: props_removed=True + confirm=True, refuses while armed, always auto-stops. (No test_servo — iNAV has no live servo override; verify surfaces with the TX sticks + read_rc_channels().)
calibrate_accelerometer(confirm=False)Zero-level the accelerometer (board flat + still). Fixes most "not level" arming blocks.
calibrate_magnetometer(confirm=False)Calibrate the compass (rotate the craft ~30s).

Navigation & tuning

ToolWhat it does
read_gps()Live GPS fix/sats/position + nav-readiness assessment (read-only).
configure_gps(provider="UBLOX", sbas=None, confirm=False)Enable the GPS feature and set provider/SBAS.
set_nav(rth_altitude_m=None, rth_climb_first=None, rth_allow_landing=None, loiter_radius_m=None, confirm=False)Set fixed-wing RTH altitude / climb-first / landing / loiter radius.
read_tuning()Read fixed-wing PID gains, rates, and filter cutoffs.
set_pid(axis, p=None, i=None, d=None, ff=None, confirm=False)Set fixed-wing P/I/D/FF gains for one axis.

Config management

ToolWhat it does
backup_config(label=None)Save diff all to a timestamped file under ./backups/.
list_backups()List saved backups (path, time, size, label), newest first.
restore_config(path, confirm=False)Replay a saved backup via CLI.
set_failsafe(procedure=None, throttle_us=None, confirm=False)Set the RC-loss procedure / throttle (atomic write; FC validates the procedure token).
cli(command, confirm_for_writes=False, props_removed=False)Raw CLI escape hatch (ONE command, one reboot). Writes need confirm_for_writes; a live motor test needs props_removed=True and is never saved.
cli_batch(commands, confirm_for_writes=False)Run MANY CLI commands in one session → one reboot. Read-only batch exits without saving; a write batch backs up + saves once (rolls back if any command is rejected). Motor/save/exit commands refused.
save_and_reboot(confirm=False)save to EEPROM and reboot (marks the connection stale).

Resources

  • inav://modes-reference — iNAV mode glossary with fixed-wing relevance.
  • inav://current-profile — the declared aircraft profile + generated plan.
  • inav://last-backup — the most recent diff all backup.

Safety model

  1. Props-off gate — test_motor() and any live motor command via cli(...) require props_removed=True (the generic write-confirm cannot bypass it), refuse while the board is armed, and are never saved. test_motor() also clamps throttle/duration and always commands the motor back to stop.
  2. Armed guard — all writes (and motor tests / calibrations) refuse if the FC reports armed.
  3. Auto-backup before every write; the backup path is returned.
  4. Dry-run by default — writes return the exact commands; confirm=True applies.
  5. Read-back verify — after applying, settings are re-read and mismatches flagged.
  6. save = reboot — save_and_reboot warns and marks the connection stale.
  7. No receiver-mode changes — the FC is never switched to MSP-RX.

Reboot model — why batching matters

On iNAV, leaving the CLI always reboots the FC — both save (persist to EEPROM) and exit (discard changes) trigger a reboot, after which the USB VCP re-enumerates and we reconnect (~6–8 s, surfaced as reboot_seconds). So every CLI round-trip costs one reboot, including read-only ones (get, diff, dump, version). There is no way to read over the CLI without that reboot — the only lever is to do fewer CLI sessions.

What this server does to keep reboot churn down:

  • Reads prefer MSP, which never reboots. get_status, read_rc_channels, read_sensors, read_gps, list_flight_modes, why_wont_it_arm, diagnose, and the armed-guard all read structured data over MSP — zero reboots. Only data that's CLI-only (diff all, get failsafe, PID/rate/filter gets) pays a reboot.
  • Writes are atomic and batch internally. Each write tool (apply_aircraft_setup, set_flight_mode, assign_switch, set_pid, set_failsafe, restore_config, …) opens one CLI session: backup → apply all commands → save → reboot once. Multiple settings = one reboot.
  • cli_batch() for ad-hoc runs. Instead of calling cli() in a loop (one reboot per command — the cadence that can knock a board into DFU), pass a list to cli_batch(): one session, one reboot. Read-only batches exit without saving; write batches back up and save once (rolling back if any command is rejected).
  • Resilient reconnect. After a reboot the reconnect waits a short settle, then polls with backoff; if the original COM port doesn't return it scans for a re-enumerated one, and if the board came back in DFU/bootloader mode it says so and tells you to power-cycle (USB unplug/replug) rather than hanging.

How it works

  • Single serial handle shared between MSP and CLI modes (connection.py), tracked by a mode state machine. Never two handles on one port.
  • CLI-first writes — the CLI is stable across firmware versions; MSP command IDs can drift. A thin MSP v1/v2 codec (msp.py) handles only the live binary reads (status, RC, attitude, analog, GPS, sensor health, mode ranges, box maps).
  • Box IDs are resolved at runtime via MSP_BOXNAMES + MSP_BOXIDS — never hardcoded.
  • Arming flags are decoded from knowledge/arming_flags.json, calibrated to iNAV 8.x/9.x bit positions. The table declares its calibrated major versions, and connect() / board_info() / why_wont_it_arm() / diagnose() warn when the connected firmware is outside that range (bit positions shift between majors, so flag names may be mislabelled even though the raw flag value is correct).

Development

bash
.venv/Scripts/python -m pytest          # 186 tests, all offline (no FC needed)

The suite covers the MSP codec round-trips, CLI response parsing, the diagnostic rule engine, offline profile/command generation, mode-range read-modify-write logic (against a mock connection), and resource/prompt registration.

Project layout:

inav_mcp/  server.py          # FastMCP app: all tools, resources, prompts  connection.py      # single serial handle, MSP + CLI mode switching  msp.py             # MSP v1/v2 codec + parsers  cli.py             # CLI response parsing, write-command detection  modes.py           # box maps, mode-range read/write, layout planner  profiles.py        # AircraftProfile + offline CLI command generator  troubleshoot.py    # diagnose() rule engine + arming-flag decode  safety.py          # armed guard, backup paths  state.py           # connection + profile singletons  knowledge/         # arming_flags / modes_reference / esc_protocols / fc_targets (JSON)tests/               # offline pytest suitetools/               # gen_readme_tools.py — regenerates the tool reference belowexamples/            # flying_wing_quickstart.md — end-to-end walkthrough

Release history is in CHANGELOG.md.

Full tool reference

Complete, signature-accurate list — regenerate after changing tools with python -m tools.gen_readme_tools (a test fails if this drifts):

35 tools — auto-generated by tools/gen_readme_tools.py; do not edit by hand.

ToolDescription
apply_aircraft_setup(confirm=False)Apply the declared aircraft profile to the FC, then save and reboot.
assign_switch(switch_channel, switch_positions, mode_per_position, confirm=False)Map a multi-position switch's detents to flight modes in one call.
backup_config(label=None)Save the current FC config to a timestamped backup file.
board_info()Read flight-controller identity over MSP.
calibrate_accelerometer(confirm=False)Calibrate the accelerometer (zero-level). Fixes most 'not level' / 'accel not
calibrate_magnetometer(confirm=False)Calibrate the compass (magnetometer). Only useful if a compass is installed.
check_config()Compare the FC's actual configuration against the declared aircraft profile.
check_failsafe()Read and explain the failsafe configuration (what happens on RC loss).
clear_flight_mode(mode_name, confirm=False)Remove all switch assignments for a flight mode (disables its slots via CLI 'aux').
cli(command, confirm_for_writes=False, props_removed=False)Raw CLI escape hatch — run any iNAV CLI command directly.
cli_batch(commands, confirm_for_writes=False)Run MANY CLI commands in ONE CLI session — a single reboot for the whole batch.
configure_gps(provider='UBLOX', sbas=None, confirm=False)Enable the GPS feature and set the receiver provider / SBAS (atomic CLI write).
connect(port, baud=115200)Open the serial connection to the FC and return board identity.
define_aircraft(name, wing_type, esc_protocol, cells, fc_target=None, motor_kv=None, motor_poles=14, servo_count=None, notes=None)Define the aircraft hardware profile and generate a configuration plan.
diagnose()Full diagnostic sweep — the flagship troubleshooter.
disconnect()Close the serial connection to the FC.
find_fc(baud=115200, probe_all=False)Auto-detect which serial port has a flight controller, so you don't guess.
get_aircraft_profile()Return the currently declared aircraft profile.
get_status()Read FC status via both MSP and CLI.
list_backups()List saved config backups under ./backups/, newest first. No FC needed.
list_flight_modes()List all available flight modes and their current switch assignments.
list_serial_ports()List all available serial ports.
read_gps()Live GPS status: fix type, satellites, position, speed, HDOP + nav-readiness.
read_rc_channels()Read live RC channel values via MSP.
read_sensors()Read live sensor values: attitude, per-sensor health, and analog (battery).
read_tuning()Read fixed-wing PID gains, rates, and key filter cutoffs (via CLI).
restore_config(path, confirm=False)Restore FC config by replaying a backup file's CLI commands, then save+reboot.
save_and_reboot(confirm=False)Save the running config to EEPROM and reboot the FC.
set_failsafe(procedure=None, throttle_us=None, delay_s=None, off_delay_s=None, confirm=False)Set the core failsafe behaviour (atomic CLI write: backup → apply → save+reboot).
set_flight_mode(mode_name, aux_channel, range_low, range_high, confirm=False)Assign a flight mode to an aux channel range (read-modify-write via CLI 'aux').
set_nav(rth_altitude_m=None, rth_climb_first=None, rth_allow_landing=None, loiter_radius_m=None, confirm=False)Set core fixed-wing navigation / RTH parameters (atomic CLI write).
set_pid(axis, p=None, i=None, d=None, ff=None, confirm=False)Set fixed-wing PID gains for ONE axis (atomic CLI write).
suggest_mode_layout(skill_level='beginner', num_switches=2, has_gps=False)Recommend a fixed-wing flight-mode/switch layout. Pure knowledge — no FC needed.
test_motor(motor, throttle_us=1100, duration_s=2.0, props_removed=False, confirm=False)Spin ONE motor briefly for a bench test (direction / wiring / response).
why_wont_it_arm()Decode the FC's arming-prevention flags into plain English.

Roadmap

This is an actively developed project — more tools are on the way. Areas currently in progress or planned:

  • Deeper fixed-wing tuning helpers (autotune review, in-flight rate feedback).
  • Broader sensor / ESC telemetry readouts.
  • More guided prompts for common setup and troubleshooting flows.

Have a flight-controller task you wish Claude could do? Open an issue and request a tool — feature requests directly shape what gets built next.

Contributing & feedback

If this saved you a bench session, here's how to help the project grow:

  • ⭐ Star the repo so other iNAV pilots can find it.
  • 🐛 Open an issue for bugs, firmware quirks, or new-tool requests.
  • 🔧 PRs welcome — the test suite is fully offline (pytest, 186 tests), so you can add and verify a new tool without any hardware on the bench.

Hardware-tested on iNAV 6.1.0 (SpeedyBee F405 Wing). The arming-flag decoder is calibrated for iNAV 8.x/9.x and warns when it sees another major version. Results and PRs from other targets and firmware versions are especially welcome.

License

MIT. This project ships its own MSP codec and does not import GPL libraries (uNAVlib / YAMSPy) at runtime, keeping it permissively licensed.

來源:README.md,提交 3140c77

工具

35

list_serial_ports

List all available serial ports. Use this to find the COM port (Windows) or /dev/tty* (Linux/macOS) for the FC. Plug in the FC, run this, and look for a new entry (often labelled 'STM32' or 'CP210x' for iNAV boards).

無需輸入參數。

connect

Open the serial connection to the FC and return board identity. Args: port: Serial port, e.g. 'COM3' (Windows) or '/dev/ttyACM0' (Linux). baud: Baud rate (default 115200 — matches iNAV's USB VCP default). Returns board variant, firmware version, target name, API version, build info, and a summary of detected sensors.

輸入參數baudport必填

disconnect

Close the serial connection to the FC.

無需輸入參數。

board_info

Read flight-controller identity over MSP. Returns: FC variant (e.g. 'INAV'), firmware version, board/target name, API version, build date/time/git revision, and sensors detected. Requires an active connection (call connect first).

無需輸入參數。

find_fc

Auto-detect which serial port has a flight controller, so you don't guess. Briefly opens each likely USB-serial port and asks for MSP identity; returns the ports that answered as an FC (variant + firmware). Then call connect(port). Args: baud: Baud to probe at (default 115200, iNAV's USB VCP default). probe_all: If True, probe EVERY serial port; otherwise only USB-serial-looking ones (safer — avoids poking unrelated devices like Bluetooth/modems).

輸入參數baudprobe_all

backup_config

Save the current FC config to a timestamped backup file. Runs 'diff all' in the CLI and writes the output to ./backups/<timestamp>.txt. NOTE: on iNAV, leaving the CLI reboots the FC, so this reboots and then auto-reconnects (~7s). The result includes 'rebooted': True. Args: label: Optional suffix added to the filename for easy identification.

輸入參數label

restore_config

Restore FC config by replaying a backup file's CLI commands, then save+reboot. On iNAV this is atomic: a pre-restore backup is taken, the file's commands are replayed in one CLI session, then SAVED to EEPROM and the FC reboots (we reconnect). If any line errors, all changes are rolled back. Args: path: Path to a backup file (as returned by backup_config). confirm: Must be True to apply. Dry-run by default.

輸入參數path必填confirm

cli

Raw CLI escape hatch — run any iNAV CLI command directly. Read-only commands (diff, get, status, dump, tasks, help, version) run and the FC reboots on CLI exit (auto-reconnected). Write commands (set, aux, feature, smix, ...) require confirm_for_writes=True and are SAVED (persist + reboot), since on iNAV exiting CLI without save discards changes. SAFETY — motor commands: a 'motor ...' command drives a LIVE motor output and can spin a propeller. It is gated separately from ordinary writes: it requires props_removed=True (NOT confirm_for_writes), refuses if the board is armed, and is NEVER saved — it's a momentary bench test that stops when the FC reboots on CLI exit. Prefer the dedicated write tools (they back up and verify). Use this for one-off commands the other tools don't cover. Args: command: The CLI command to run (without trailing newline). confirm_for_writes: Set True to allow (and persist) write commands. props_removed: Set True to allow a live 'motor' test — ONLY after physically removing all propellers from the aircraft.

輸入參數command必填props_removedconfirm_for_writes

cli_batch

Run MANY CLI commands in ONE CLI session — a single reboot for the whole batch. On iNAV, leaving the CLI ALWAYS reboots the FC, so every separate cli() call costs a full reboot + USB re-enumeration + reconnect (~7s). Doing a run of commands one cli() call at a time means one reboot PER command — the rapid reboot cadence is disruptive and can even knock the board into DFU/bootloader mode. This collapses N commands into ONE session = ONE reboot. Prefer it for any ad-hoc multi-command work (several `get` reads, or several `set` writes). (The dedicated write tools — apply_aircraft_setup, set_flight_mode, etc. — already batch internally; this is the escape hatch for everything else.) Behaviour: - All read-only batch (get/diff/dump/status/tasks/version): the session exits WITHOUT saving — no EEPROM write, nothing persists. Still one reboot (unavoidable on iNAV), but reads are free of a save. - Any write (set/aux/feature/…): requires confirm_for_writes=True; a backup is taken first and the whole batch is SAVED once at the end (persist + reboot). If ANY command is rejected by the FC, the batch exits WITHOUT saving so nothing partial persists (all-or-nothing). - Live `motor` commands and session-control verbs (save/exit/batch) are rejected up front — motor tests must never be saved (use cli(..., props_removed=True) / test_motor()), and the batch manages save/exit itself. Args: commands: Ordered list of CLI commands to run in one session. confirm_for_writes: Set True to run and persist a batch containing writes. Returns per-command output, whether it saved, the backup path (if it wrote), and the measured reboot/reconnect seconds for the single reboot.

輸入參數commands必填confirm_for_writes

save_and_reboot

Save the running config to EEPROM and reboot the FC. Takes a backup, then 'save' (persist + reboot), then auto-reconnects (~7s). NOTE: the dedicated write tools already save automatically on iNAV, so you rarely need this — it's for persisting changes made via the raw cli() reads or to force a clean reboot. Args: confirm: Must be True to proceed. Dry-run by default.

輸入參數confirm

read_rc_channels

Read live RC channel values via MSP. Returns up to 16 channel values in microseconds (988–2012 µs typical). Core UX: flip a switch and watch which channel value changes — that's the aux channel to use when assigning flight modes.

無需輸入參數。

read_sensors

Read live sensor values: attitude, per-sensor health, and analog (battery). Good for a quick sanity pass before flying: - Attitude should read ~0°/0° when the aircraft is level. - All required sensors (gyro, acc) should report OK. - Battery voltage should match your pack's cell count.

無需輸入參數。

get_status

Read FC status via both MSP and CLI. Returns MSP_STATUS data (cycle time, sensor bits, CPU load, arming flags) plus the human-readable output of the CLI 'status' and 'tasks' commands.

無需輸入參數。

list_flight_modes

List all available flight modes and their current switch assignments. Returns: - all_modes: every mode the FC knows about (id + name + assigned flag) - assigned_modes: which modes are on which aux channel and range - unassigned_modes: mode names with no switch assignment yet - arm_assigned: bool — critical to know before first flight Tip: call read_rc_channels() to identify which channel your switches use, then use assign_switch() to map modes to them.

無需輸入參數。

why_wont_it_arm

Decode the FC's arming-prevention flags into plain English. This is the #1 question from new iNAV users. Each set bit is mapped to: - A flag name - A plain-language reason - A concrete fix Also checks whether ARM mode is assigned to a switch.

無需輸入參數。

diagnose

Full diagnostic sweep — the flagship troubleshooter. Collects: arming flags, sensor health, RC channels, battery, GPS, attitude, and mode assignments. Runs all diagnostic rules and returns a prioritized problem list with concrete fixes for each issue found. Use this when 'something is wrong but I'm not sure what.'

無需輸入參數。

define_aircraft

Define the aircraft hardware profile and generate a configuration plan. This is an OFFLINE planner — no FC connection required. Call it first to review the generated CLI commands, then call apply_aircraft_setup() to apply. Args: name: A descriptive name for this aircraft (e.g., "My FPV Wing"). wing_type: One of: flying_wing, conventional, vtail, twin_tail, delta. esc_protocol: One of: DSHOT600, DSHOT300, DSHOT150, MULTISHOT, ONESHOT125, PWM. cells: LiPo battery cell count (e.g. 4 for 4S). fc_target: Optional FC board name (e.g. MATEKF405). Used for target hints. motor_kv: Optional motor KV rating (informational only). motor_poles: Motor pole count for RPM telemetry (default 14; verify with your motor). servo_count: Optional total servo count (informational). notes: Free text notes to store with the profile. Returns a plan dict with: - profile: the stored profile - commands: the CLI commands to apply - summary: human-readable description - warnings: things to verify before/after applying

輸入參數name必填cells必填notesmotor_kvfc_targetwing_type必填motor_polesservo_countesc_protocol必填

get_aircraft_profile

Return the currently declared aircraft profile. Call define_aircraft() first to set a profile.

無需輸入參數。

apply_aircraft_setup

Apply the declared aircraft profile to the FC, then save and reboot. On iNAV this is an ATOMIC operation: the commands are applied in one CLI session, backed up first, then SAVED to EEPROM (the only way changes persist) and the FC reboots. We reconnect automatically and verify by read-back. If any command fails, ALL changes are rolled back (nothing is saved). Gates: - A profile must be defined via define_aircraft(). - Connected and not armed. - confirm=True required (dry-run by default). Args: confirm: True to apply+save+reboot. Default False = dry-run (shows commands).

輸入參數confirm

check_config

Compare the FC's actual configuration against the declared aircraft profile. Runs 'diff all' via CLI, parses key settings, and reports mismatches against the profile declared with define_aircraft(). Also checks if ARM mode is assigned to a switch. Useful after apply_aircraft_setup() or to sanity-check a partially configured FC.

無需輸入參數。

suggest_mode_layout

Recommend a fixed-wing flight-mode/switch layout. Pure knowledge — no FC needed. Suggests which switches to use for ARM, flight modes (ANGLE/HORIZON/MANUAL), and (with GPS) NAV RTH / NAV LAUNCH, with the exact aux channels and µs ranges. Args: skill_level: beginner | intermediate | advanced (tailors the advice). num_switches: How many spare switches you have available. has_gps: True if a GPS module is installed (enables RTH suggestion). Returns a layout plan you can hand to assign_switch() to apply.

輸入參數has_gpsskill_levelnum_switches

set_flight_mode

Assign a flight mode to an aux channel range (read-modify-write via CLI 'aux'). Finds an existing slot for this mode+channel (to modify) or the first free slot (to create), then writes the assignment. Dry-run by default. Gates: connected, not armed, auto-backup before write. Requires confirm=True to apply. Args: mode_name: Exact mode name as shown by list_flight_modes (e.g. "ANGLE", "NAV RTH"). aux_channel: 1-based AUX number (1 = AUX1 = RC channel 5), matching list_flight_modes. range_low: Range start in µs (900–2100). range_high: Range end in µs (must be > range_low, ≤ 2100). confirm: True to apply. Default False = dry-run (returns the command only).

輸入參數confirmmode_name必填range_low必填range_high必填aux_channel必填

assign_switch

Map a multi-position switch's detents to flight modes in one call. Computes the µs range for each detent and writes one 'aux' assignment per mode. Dry-run by default. Gates: connected, not armed, auto-backup before write. Args: switch_channel: 1-based AUX number the switch is on (1 = AUX1 = RC channel 5). switch_positions: Number of detents on the switch: 2, 3, or 6. mode_per_position: Map of position → mode name. Position keys may be "low"/"mid"/"high" (for 2/3-pos) or "1".."N" / "pos1".., e.g. {"low": "ANGLE", "mid": "HORIZON", "high": "MANUAL"}. confirm: True to apply. Default False = dry-run.

輸入參數confirmswitch_channel必填switch_positions必填mode_per_position必填

clear_flight_mode

Remove all switch assignments for a flight mode (disables its slots via CLI 'aux'). Dry-run by default. Gates: connected, not armed, auto-backup before write. Args: mode_name: Exact mode name (e.g. "HORIZON", "NAV RTH"). confirm: True to apply. Default False = dry-run.

輸入參數confirmmode_name必填

test_motor

Spin ONE motor briefly for a bench test (direction / wiring / response). ⚠ DANGER: this drives a LIVE motor output. REMOVE ALL PROPELLERS FIRST. Safety gates (enforced in code): - props_removed=True is REQUIRED (refuses otherwise), - refuses if the FC reports armed, - confirm=True is REQUIRED (dry-run preview otherwise), - throttle clamped to 1000–2000 µs, duration clamped to 0.2–5.0 s, - the motor is ALWAYS commanded back to stop (1000 µs) when the test ends. The override is live (MSP, not saved); it also stops if the FC reboots or loses power. Args: motor: 1-based motor number (1 = motor 1). Only this motor spins; all others are held at 1000 µs (stop). throttle_us: Output in µs (1000 = stop, ~1100 = gentle, 2000 = full). Keep it LOW for a direction check. duration_s: How long to hold the output (0.2–5.0 s). props_removed: MUST be True — confirms props are physically removed. confirm: MUST be True to actually run.

輸入參數motor必填confirmduration_sthrottle_usprops_removed

calibrate_accelerometer

Calibrate the accelerometer (zero-level). Fixes most 'not level' / 'accel not calibrated' arming blocks. Sends MSP_ACC_CALIBRATION; iNAV samples for ~2s and saves to EEPROM automatically (no reboot). BEFORE running: set the board/aircraft on a LEVEL surface in its normal flight orientation and DO NOT move it until this returns. Gates: connected, not armed, confirm=True (dry-run otherwise).

輸入參數confirm

calibrate_magnetometer

Calibrate the compass (magnetometer). Only useful if a compass is installed. Sends MSP_MAG_CALIBRATION; you then have ~30s to rotate the aircraft 360° around all three axes. iNAV saves the result automatically. Gates: connected, not armed, confirm=True (dry-run otherwise).

輸入參數confirm

check_failsafe

Read and explain the failsafe configuration (what happens on RC loss). Reads all `failsafe_*` settings via CLI `get failsafe`, summarises the RC-loss procedure in plain English, and flags risky setups (procedure NONE; RTH without GPS). NOTE: reads over CLI; exiting CLI reboots the FC, so this reboots and reconnects (~7s).

無需輸入參數。

set_failsafe

Set the core failsafe behaviour (atomic CLI write: backup → apply → save+reboot). Only the arguments you pass are changed; dry-run by default. For other failsafe_* knobs (distances, angles) use cli('set failsafe_... = N', confirm_for_writes=True). Args: procedure: RC-loss action — one of DROP | LAND | SET-THR | RTH | NONE. The exact accepted tokens depend on firmware; an invalid value is rejected by the FC and the whole write is rolled back. throttle_us: failsafe_throttle in µs (used by SET-THR / LAND). Clamped 1000–2000. delay_s: Guard time after RC loss before failsafe triggers (failsafe_delay). iNAV stores this in 0.1 s units, so this is converted ×10. off_delay_s: Time the failsafe stage runs before the motor is killed (failsafe_off_delay), also 0.1 s units (×10). confirm: True to apply (saves + reboots). Dry-run otherwise. Gates: connected, not armed, auto-backup. RTH without GPS will not work — use DROP/LAND.

輸入參數confirmdelay_sprocedureoff_delay_sthrottle_us

list_backups

List saved config backups under ./backups/, newest first. No FC needed. Returns each backup's path, modified time, size, line count, and label — so you can pick one to replay with restore_config(path).

無需輸入參數。

read_gps

Live GPS status: fix type, satellites, position, speed, HDOP + nav-readiness. Read-only (MSP_RAW_GPS, no reboot). Use this before relying on RTH or any position-holding navigation mode.

無需輸入參數。

configure_gps

Enable the GPS feature and set the receiver provider / SBAS (atomic CLI write). Args: provider: GPS provider token — e.g. UBLOX | NMEA | MSP (the FC validates it). sbas: Optional SBAS mode — AUTO | EGNOS | WAAS | MSAS | GAGAN | NONE. confirm: True to apply (save+reboot). Dry-run otherwise. Gates: connected, not armed, auto-backup. After applying, give the GPS time to acquire satellites and check read_gps().

輸入參數sbasconfirmprovider

set_nav

Set core fixed-wing navigation / RTH parameters (atomic CLI write). Only the arguments you pass are changed. Dry-run by default. Args: rth_altitude_m: Return-to-home altitude, metres (nav_rth_altitude, stored cm). rth_climb_first: Climb to RTH altitude before heading home (nav_rth_climb_first). rth_allow_landing: NEVER | ALWAYS | FS_ONLY (nav_rth_allow_landing). loiter_radius_m: Fixed-wing loiter radius, metres (nav_fw_loiter_radius, stored cm). confirm: True to apply (save+reboot). Dry-run otherwise. Gates: connected, not armed, auto-backup. RTH needs a working GPS and a home fix.

輸入參數confirmrth_altitude_mloiter_radius_mrth_climb_firstrth_allow_landing

read_tuning

Read fixed-wing PID gains, rates, and key filter cutoffs (via CLI). Returns PIDs grouped by axis, plus rate and low-pass-filter settings. NOTE: reads over CLI; exiting CLI reboots the FC, so this reboots and reconnects (~7s).

無需輸入參數。

set_pid

Set fixed-wing PID gains for ONE axis (atomic CLI write). Changes only the terms you pass. Dry-run by default. Args: axis: roll | pitch | yaw. p, i, d, ff: Gains for fw_p_<axis> / fw_i_<axis> / fw_d_<axis> / fw_ff_<axis>. confirm: True to apply (save+reboot). Dry-run otherwise. ⚠ PID changes alter flight behaviour — change gradually and test carefully. Gates: connected, not armed, auto-backup.

輸入參數dipffaxis必填confirm

版本歷史

2
  1. v1.0.0最新Oct 29, 2026
  2. v0.3.2Sep 16, 2026

評分

已滿足適用檢查項的 90%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分
  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分