inav-toolkit 2.20.0__tar.gz → 2.21.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (24) hide show
  1. {inav_toolkit-2.20.0 → inav_toolkit-2.21.0}/PKG-INFO +80 -58
  2. {inav_toolkit-2.20.0 → inav_toolkit-2.21.0}/README.md +79 -57
  3. {inav_toolkit-2.20.0 → inav_toolkit-2.21.0}/inav_toolkit/__init__.py +1 -1
  4. {inav_toolkit-2.20.0 → inav_toolkit-2.21.0}/inav_toolkit/blackbox_analyzer.py +3 -3
  5. {inav_toolkit-2.20.0 → inav_toolkit-2.21.0}/inav_toolkit/flight_db.py +1 -1
  6. {inav_toolkit-2.20.0 → inav_toolkit-2.21.0}/inav_toolkit/msp.py +1 -1
  7. {inav_toolkit-2.20.0 → inav_toolkit-2.21.0}/inav_toolkit/param_analyzer.py +6 -1
  8. {inav_toolkit-2.20.0 → inav_toolkit-2.21.0}/inav_toolkit/vtol_configurator.py +1 -1
  9. {inav_toolkit-2.20.0 → inav_toolkit-2.21.0}/inav_toolkit/wizard.py +1 -1
  10. {inav_toolkit-2.20.0 → inav_toolkit-2.21.0}/inav_toolkit.egg-info/PKG-INFO +80 -58
  11. {inav_toolkit-2.20.0 → inav_toolkit-2.21.0}/pyproject.toml +1 -1
  12. {inav_toolkit-2.20.0 → inav_toolkit-2.21.0}/LICENSE +0 -0
  13. {inav_toolkit-2.20.0 → inav_toolkit-2.21.0}/inav_toolkit/autotune.py +0 -0
  14. {inav_toolkit-2.20.0 → inav_toolkit-2.21.0}/inav_toolkit/i18n.py +0 -0
  15. {inav_toolkit-2.20.0 → inav_toolkit-2.21.0}/inav_toolkit/locales/en.json +0 -0
  16. {inav_toolkit-2.20.0 → inav_toolkit-2.21.0}/inav_toolkit/locales/es.json +0 -0
  17. {inav_toolkit-2.20.0 → inav_toolkit-2.21.0}/inav_toolkit/locales/pt_BR.json +0 -0
  18. {inav_toolkit-2.20.0 → inav_toolkit-2.21.0}/inav_toolkit.egg-info/SOURCES.txt +0 -0
  19. {inav_toolkit-2.20.0 → inav_toolkit-2.21.0}/inav_toolkit.egg-info/dependency_links.txt +0 -0
  20. {inav_toolkit-2.20.0 → inav_toolkit-2.21.0}/inav_toolkit.egg-info/entry_points.txt +0 -0
  21. {inav_toolkit-2.20.0 → inav_toolkit-2.21.0}/inav_toolkit.egg-info/requires.txt +0 -0
  22. {inav_toolkit-2.20.0 → inav_toolkit-2.21.0}/inav_toolkit.egg-info/top_level.txt +0 -0
  23. {inav_toolkit-2.20.0 → inav_toolkit-2.21.0}/setup.cfg +0 -0
  24. {inav_toolkit-2.20.0 → inav_toolkit-2.21.0}/tests/test_smoke.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: inav-toolkit
3
- Version: 2.20.0
3
+ Version: 2.21.0
4
4
  Summary: Blackbox analyzer, parameter checker, and tuning wizard for INAV flight controllers
5
5
  License: MIT
6
6
  Project-URL: Homepage, https://github.com/agoliveira/INAV-Toolkit
@@ -32,19 +32,24 @@ Dynamic: license-file
32
32
 
33
33
  # INAV Toolkit
34
34
 
35
- A Python toolkit for analyzing blackbox logs, validating configurations, and tuning INAV flight controllers. Plug in your FC via USB - it pulls the config, downloads the blackbox, tells you exactly what to change, and gives you the CLI commands to paste.
35
+ A Python toolkit for analyzing blackbox logs, validating configurations, and tuning INAV flight controllers. Plug in your FC via USB - it pulls the config, downloads the blackbox, analyzes PID tuning and navigation performance, tells you exactly what to change, and gives you the CLI commands to paste.
36
36
 
37
37
  Built for the INAV long-range community. Tested on 7" to 15" multirotors with GPS navigation, INAV 9.0.x.
38
38
 
39
39
  ## Install / Update
40
40
 
41
+ ```bash
42
+ pip install inav-toolkit
43
+ ```
44
+
45
+ Or from source:
46
+
41
47
  ```bash
42
48
  git clone https://github.com/agoliveira/INAV-Toolkit.git
43
49
  cd INAV-Toolkit
44
50
  python3 -m venv .venv
45
51
  source .venv/bin/activate
46
52
  pip install -r requirements.txt
47
- python3 -m inav_toolkit.blackbox_analyzer --device auto
48
53
  ```
49
54
 
50
55
  Or on Debian/Ubuntu, system packages:
@@ -61,56 +66,43 @@ Python 3.8+. `pyserial` only needed for direct FC connection.
61
66
  python3 -m inav_toolkit.blackbox_analyzer --device auto
62
67
  ```
63
68
 
64
- That's it. The tool will auto-detect your FC, pull the current config, download the blackbox, split multi-flight logs, detect config changes between sessions, and run full analysis on the best flight.
65
-
66
- ### Output
69
+ That's it. The tool will auto-detect your FC, pull the full config dump, download the blackbox, split multi-flight logs, run PID tuning and navigation analysis, clean up log files, and erase flash. Results are presented in an interactive menu:
67
70
 
68
71
  ```
69
- INAV Blackbox Analyzer v2.16.0
70
- Connected: NAZGUL 10 - INAV 9.0.1
71
- Pulling configuration (diff all)... 89 settings
72
- Downloading 2236KB ... 204KB/s
73
- Found 3 flights - analyzing best from latest config
74
-
75
- TUNE QUALITY: █████████████░░░░░░░ 65/100
76
- Noise:95 | PID:N/A | Motors:94
77
-
78
- CONFIG:
79
- Roll P= 32 I= 82 D= 32 (FC now: P->35, I->75, D->28)
80
- Pitch P= 35 I= 90 D= 35 (FC now: P->38, I->82, D->31)
81
-
82
- NOISE SOURCES:
83
- 50Hz motor imbalance on Roll/Yaw [medium]
84
- 128Hz motor noise on Pitch/Yaw [low]
85
- 187-437Hz (6 peaks) electrical on Pitch/Roll/Yaw [medium]
86
-
87
- DO THIS - 2 changes:
88
- 1. Lower dynamic_gyro_notch_min_hz: 50 -> 40
89
- 2. Consider enabling RPM filter
90
-
91
- INAV CLI - paste into Configurator CLI tab:
92
- set dynamic_gyro_notch_min_hz = 40
93
- save
94
-
95
- CONFIG REVIEW:
96
- [CRITICAL] Critical beeper warnings disabled - BAT_CRIT_LOW, RX_LOST
72
+ TUNE QUALITY: █████████░░░░░░░░░░░ 46/100
73
+ Noise:94 | PID:26 | Motors:53
74
+
75
+ [1] PID Tuning R:62%OS P:ok Y:N/A
76
+ [2] Noise Analysis 94/100 - 2 sources
77
+ [3] Hover & Stability R:moderate P:wind Y:wind
78
+ [4] Nav Performance 45/100 - 4 decel events, CEP 1271cm
79
+ [5] Nav Sensors Com:70 GPS:100 Bar:70
80
+ [6] Config Review 1 critical, 2 warnings
81
+ [7] Flight History available
82
+ [C] CLI Commands 2 changes
83
+ [A] Show All
84
+ [Q] Quit
85
+
86
+ Section (1-7, C, A, Q):
97
87
  ```
98
88
 
89
+ Each section shows a one-line status at a glance. Select a number to drill into details. The CLI Commands section gives you paste-ready commands for INAV Configurator.
90
+
99
91
  ## Tools
100
92
 
101
93
  ### Blackbox Analyzer
102
94
 
103
- Decodes `.bbl` / `.bfl` blackbox logs natively in Python (no `blackbox_decode` needed) and produces actionable tuning recommendations.
95
+ Decodes `.bbl` / `.bfl` blackbox logs natively in Python (no `blackbox_decode` needed) and produces actionable tuning and navigation recommendations.
104
96
 
105
97
  ```bash
106
- # Connect to FC - pull config + download + analyze
98
+ # Connect to FC - pull config + download + analyze + cleanup + erase
107
99
  python3 -m inav_toolkit.blackbox_analyzer --device auto
108
100
 
109
101
  # Analyze an existing log file
110
102
  python3 -m inav_toolkit.blackbox_analyzer flight.bbl
111
103
 
112
- # With a saved diff for config comparison
113
- python3 -m inav_toolkit.blackbox_analyzer flight.bbl --diff my_diff.txt
104
+ # With a saved dump/diff for config comparison
105
+ python3 -m inav_toolkit.blackbox_analyzer flight.bbl --config my_dump.txt
114
106
 
115
107
  # Specify frame size for tailored thresholds
116
108
  python3 -m inav_toolkit.blackbox_analyzer flight.bbl --frame 10
@@ -118,43 +110,70 @@ python3 -m inav_toolkit.blackbox_analyzer flight.bbl --frame 10
118
110
  # Download only, analyze later
119
111
  python3 -m inav_toolkit.blackbox_analyzer --device auto --download-only
120
112
 
113
+ # Keep raw log files (skip auto-cleanup)
114
+ python3 -m inav_toolkit.blackbox_analyzer --device auto --keep-logs
115
+
116
+ # Don't erase flash after download
117
+ python3 -m inav_toolkit.blackbox_analyzer --device auto --no-erase
118
+
119
+ # Archive analyzed flight (compress to blackbox/archive/)
120
+ python3 -m inav_toolkit.blackbox_analyzer --device auto --archive
121
+
122
+ # Skip nav analysis even if nav fields are present
123
+ python3 -m inav_toolkit.blackbox_analyzer flight.bbl --no-nav
124
+
121
125
  # Flight progression history
122
126
  python3 -m inav_toolkit.blackbox_analyzer flight.bbl --history
123
127
  ```
124
128
 
125
- **What it measures:**
126
- - PID step response - overshoot %, tracking delay, settling time per axis
127
- - Noise spectrum - identifies peak frequencies, classifies sources (propwash, electrical, motor imbalance), groups and ranks by severity
128
- - Hover oscillation - RMS and peak-to-peak gyro during centered stick
129
+ **What it analyzes (auto-detected from available data):**
130
+
131
+ PID tuning:
132
+ - Step response - overshoot %, tracking delay, settling time per axis
133
+ - FeedForward-aware - attributes overshoot between FF and P, recommends FF reduction before P cuts
134
+ - Hover oscillation - RMS and peak-to-peak gyro, wind buffeting vs P oscillation on large frames
135
+ - Noise spectrum - peak frequencies, source classification (propwash, electrical, motor imbalance)
136
+ - Filter recommendations - phase-lag-aware, won't recommend destructive LPF cuts on 10"+ frames
129
137
  - Motor balance - average load and saturation per motor
130
- - Filter phase lag - total delay through the gyro/D-term filter chain
131
- - Config mismatch - detects when the FC config has changed since the flight being analyzed
138
+
139
+ Navigation performance (when nav fields are present):
140
+ - Deceleration overshoot - measures position error when stopping, oscillation count, settling time
141
+ - Position hold quality - CEP, RMS error, max drift, toilet-bowl pattern detection
142
+ - Altitude hold quality - vertical error RMS, oscillation detection
143
+ - Controller saturation - detects when nav demands exceed platform capability
144
+ - Wind vs tuning - correlates position error with wind estimates to separate environmental drift from PID problems
145
+
146
+ Navigation sensors:
147
+ - Compass health - heading jitter, magnetic interference, drift rate
148
+ - GPS quality - fix type, satellite count, HDOP, position jumps
149
+ - Barometer - noise level, spike detection, throttle correlation
150
+ - Position estimator - GPS vs estimator divergence
132
151
 
133
152
  **What it outputs:**
134
- - Terminal report with score, noise sources, specific CLI commands to paste
153
+ - Interactive terminal menu (with `--device auto`) or sequential report
135
154
  - HTML report with interactive charts (noise spectrum, PID response, motor traces)
136
155
  - `state.json` for cross-referencing with the parameter analyzer
137
156
  - SQLite flight database for progression tracking across sessions
138
157
 
139
158
  ### Parameter Analyzer
140
159
 
141
- Validates an INAV `diff all` export for configuration issues. Catches problems that blackbox data alone can't detect.
160
+ Validates an INAV config for issues. Accepts `dump all` or `diff all` output. Catches problems that blackbox data alone can't detect.
142
161
 
143
162
  ```bash
144
163
  # Check existing config
145
- python3 -m inav_toolkit.param_analyzer my_diff.txt --frame 10
164
+ python3 -m inav_toolkit.param_analyzer my_dump.txt --frame 10
146
165
 
147
166
  # Generate starting PIDs for a new build
148
167
  python3 -m inav_toolkit.param_analyzer --setup 10 --voltage 6S
149
168
 
150
169
  # Compare starting PIDs with current config
151
- python3 -m inav_toolkit.param_analyzer --setup 10 --voltage 6S my_diff.txt
170
+ python3 -m inav_toolkit.param_analyzer --setup 10 --voltage 6S my_dump.txt
152
171
 
153
172
  # Cross-reference with blackbox results
154
- python3 -m inav_toolkit.param_analyzer my_diff.txt --blackbox state.json
173
+ python3 -m inav_toolkit.param_analyzer my_dump.txt --blackbox state.json
155
174
  ```
156
175
 
157
- **What it checks:** safety (beepers, failsafe, battery limits), motors (protocol, RPM filter, ESC telemetry), filters (frame-appropriate LPF, dynamic notch), PIDs (cross-profile consistency, antigravity), navigation (RTH altitude, position PIDs, safehome), GPS (constellations, compass cal), blackbox (logging rate, essential fields).
176
+ **What it checks:** safety (beepers, failsafe, battery limits), motors (protocol, RPM filter, ESC telemetry), filters (frame-appropriate LPF, dynamic notch), PIDs (cross-profile consistency, FF, antigravity), navigation (frame-aware nav PID thresholds, RTH altitude, deceleration time, position PIDs, safehome), GPS (constellations, compass cal), blackbox (logging rate, essential fields).
158
177
 
159
178
  **Setup mode** generates conservative starting PIDs for 7/10/12/15" frames at 4S/6S/8S/12S.
160
179
 
@@ -163,7 +182,7 @@ python3 -m inav_toolkit.param_analyzer my_diff.txt --blackbox state.json
163
182
  Validates INAV VTOL configurations using mixer_profile switching.
164
183
 
165
184
  ```bash
166
- python3 -m inav_toolkit.vtol_configurator vtol_diff.txt
185
+ python3 -m inav_toolkit.vtol_configurator vtol_config.txt
167
186
  ```
168
187
 
169
188
  Checks MC/FW mixer profiles, tilt servo rules, motor role inference, yaw authority, FW control surfaces, mode assignments, automated RTH transition, and airmode conflicts.
@@ -187,30 +206,33 @@ Direct serial communication with INAV flight controllers. Used internally by the
187
206
  python3 -m inav_toolkit.msp --device auto
188
207
  ```
189
208
 
190
- Handles MSP v2 framing, pipelined dataflash download (4-deep), CLI command/batch, auto-reconnection after USB VCP reset.
209
+ Handles MSP v2 framing, pipelined dataflash download (4-deep), CLI command/batch, `dump all`/`diff all` config pull, auto-reconnection after USB VCP reset.
191
210
 
192
211
  ## Tuning Workflow
193
212
 
194
213
  ```
195
214
  1. NEW BUILD
196
215
  python3 -m inav_toolkit.param_analyzer --setup 10 --voltage 6S
197
- -> Conservative starting PIDs and filter settings
216
+ -> Conservative starting PIDs, filters, and nav settings
198
217
  -> Paste CLI commands into INAV Configurator
199
218
 
200
219
  2. SAFETY CHECK
201
- python3 -m inav_toolkit.param_analyzer my_diff.txt --frame 10
220
+ python3 -m inav_toolkit.param_analyzer my_dump.txt --frame 10
202
221
  -> Catches disabled beepers, failsafe issues, battery limits
222
+ -> Flags nav PIDs that are INAV defaults (tuned for 5") on larger frames
203
223
  -> Fix before flying
204
224
 
205
225
  3. FLY
206
226
  -> Enable blackbox logging (GYRO_RAW, MOTORS, RC_COMMAND)
207
227
  -> Hover for 10s, then do deliberate roll/pitch/yaw sweeps
208
- -> The analyzer needs stick inputs to measure PID response
228
+ -> Engage POSHOLD and RTH for nav analysis data
209
229
 
210
230
  4. ANALYZE
211
231
  python3 -m inav_toolkit.blackbox_analyzer --device auto
212
- -> Downloads log, pulls current config, runs full analysis
232
+ -> Downloads log, pulls full config dump, runs all analysis
233
+ -> Interactive menu with PID, noise, nav, config review sections
213
234
  -> Shows exactly what to change with CLI commands
235
+ -> Auto-cleans log files and erases flash when done
214
236
 
215
237
  5. APPLY + REPEAT
216
238
  -> Paste CLI commands, fly again
@@ -237,7 +259,7 @@ Higher voltage (6S/8S/12S) scales P and D down proportionally.
237
259
  INAV-Toolkit/
238
260
  ├── inav_toolkit/
239
261
  │ ├── __init__.py # Package version
240
- │ ├── blackbox_analyzer.py # Blackbox log analyzer
262
+ │ ├── blackbox_analyzer.py # Blackbox log analyzer + nav performance
241
263
  │ ├── msp.py # MSP v2 serial communication
242
264
  │ ├── flight_db.py # SQLite flight history
243
265
  │ ├── param_analyzer.py # Config validator + setup generator
@@ -260,7 +282,7 @@ Developed and tested against **INAV 9.0.x**. The blackbox binary decoder handles
260
282
 
261
283
  ## Contributing
262
284
 
263
- This is an active project. Planned: autonomous tuning loop (Pi Zero 2W or ESP32 strapped to the quad), expanded nav analysis, and web-based report viewer.
285
+ This is an active project. Planned: autonomous tuning loop (Pi Zero 2W or ESP32 strapped to the quad) and web-based report viewer.
264
286
 
265
287
  ## License
266
288
 
@@ -1,18 +1,23 @@
1
1
  # INAV Toolkit
2
2
 
3
- A Python toolkit for analyzing blackbox logs, validating configurations, and tuning INAV flight controllers. Plug in your FC via USB - it pulls the config, downloads the blackbox, tells you exactly what to change, and gives you the CLI commands to paste.
3
+ A Python toolkit for analyzing blackbox logs, validating configurations, and tuning INAV flight controllers. Plug in your FC via USB - it pulls the config, downloads the blackbox, analyzes PID tuning and navigation performance, tells you exactly what to change, and gives you the CLI commands to paste.
4
4
 
5
5
  Built for the INAV long-range community. Tested on 7" to 15" multirotors with GPS navigation, INAV 9.0.x.
6
6
 
7
7
  ## Install / Update
8
8
 
9
+ ```bash
10
+ pip install inav-toolkit
11
+ ```
12
+
13
+ Or from source:
14
+
9
15
  ```bash
10
16
  git clone https://github.com/agoliveira/INAV-Toolkit.git
11
17
  cd INAV-Toolkit
12
18
  python3 -m venv .venv
13
19
  source .venv/bin/activate
14
20
  pip install -r requirements.txt
15
- python3 -m inav_toolkit.blackbox_analyzer --device auto
16
21
  ```
17
22
 
18
23
  Or on Debian/Ubuntu, system packages:
@@ -29,56 +34,43 @@ Python 3.8+. `pyserial` only needed for direct FC connection.
29
34
  python3 -m inav_toolkit.blackbox_analyzer --device auto
30
35
  ```
31
36
 
32
- That's it. The tool will auto-detect your FC, pull the current config, download the blackbox, split multi-flight logs, detect config changes between sessions, and run full analysis on the best flight.
33
-
34
- ### Output
37
+ That's it. The tool will auto-detect your FC, pull the full config dump, download the blackbox, split multi-flight logs, run PID tuning and navigation analysis, clean up log files, and erase flash. Results are presented in an interactive menu:
35
38
 
36
39
  ```
37
- INAV Blackbox Analyzer v2.16.0
38
- Connected: NAZGUL 10 - INAV 9.0.1
39
- Pulling configuration (diff all)... 89 settings
40
- Downloading 2236KB ... 204KB/s
41
- Found 3 flights - analyzing best from latest config
42
-
43
- TUNE QUALITY: █████████████░░░░░░░ 65/100
44
- Noise:95 | PID:N/A | Motors:94
45
-
46
- CONFIG:
47
- Roll P= 32 I= 82 D= 32 (FC now: P->35, I->75, D->28)
48
- Pitch P= 35 I= 90 D= 35 (FC now: P->38, I->82, D->31)
49
-
50
- NOISE SOURCES:
51
- 50Hz motor imbalance on Roll/Yaw [medium]
52
- 128Hz motor noise on Pitch/Yaw [low]
53
- 187-437Hz (6 peaks) electrical on Pitch/Roll/Yaw [medium]
54
-
55
- DO THIS - 2 changes:
56
- 1. Lower dynamic_gyro_notch_min_hz: 50 -> 40
57
- 2. Consider enabling RPM filter
58
-
59
- INAV CLI - paste into Configurator CLI tab:
60
- set dynamic_gyro_notch_min_hz = 40
61
- save
62
-
63
- CONFIG REVIEW:
64
- [CRITICAL] Critical beeper warnings disabled - BAT_CRIT_LOW, RX_LOST
40
+ TUNE QUALITY: █████████░░░░░░░░░░░ 46/100
41
+ Noise:94 | PID:26 | Motors:53
42
+
43
+ [1] PID Tuning R:62%OS P:ok Y:N/A
44
+ [2] Noise Analysis 94/100 - 2 sources
45
+ [3] Hover & Stability R:moderate P:wind Y:wind
46
+ [4] Nav Performance 45/100 - 4 decel events, CEP 1271cm
47
+ [5] Nav Sensors Com:70 GPS:100 Bar:70
48
+ [6] Config Review 1 critical, 2 warnings
49
+ [7] Flight History available
50
+ [C] CLI Commands 2 changes
51
+ [A] Show All
52
+ [Q] Quit
53
+
54
+ Section (1-7, C, A, Q):
65
55
  ```
66
56
 
57
+ Each section shows a one-line status at a glance. Select a number to drill into details. The CLI Commands section gives you paste-ready commands for INAV Configurator.
58
+
67
59
  ## Tools
68
60
 
69
61
  ### Blackbox Analyzer
70
62
 
71
- Decodes `.bbl` / `.bfl` blackbox logs natively in Python (no `blackbox_decode` needed) and produces actionable tuning recommendations.
63
+ Decodes `.bbl` / `.bfl` blackbox logs natively in Python (no `blackbox_decode` needed) and produces actionable tuning and navigation recommendations.
72
64
 
73
65
  ```bash
74
- # Connect to FC - pull config + download + analyze
66
+ # Connect to FC - pull config + download + analyze + cleanup + erase
75
67
  python3 -m inav_toolkit.blackbox_analyzer --device auto
76
68
 
77
69
  # Analyze an existing log file
78
70
  python3 -m inav_toolkit.blackbox_analyzer flight.bbl
79
71
 
80
- # With a saved diff for config comparison
81
- python3 -m inav_toolkit.blackbox_analyzer flight.bbl --diff my_diff.txt
72
+ # With a saved dump/diff for config comparison
73
+ python3 -m inav_toolkit.blackbox_analyzer flight.bbl --config my_dump.txt
82
74
 
83
75
  # Specify frame size for tailored thresholds
84
76
  python3 -m inav_toolkit.blackbox_analyzer flight.bbl --frame 10
@@ -86,43 +78,70 @@ python3 -m inav_toolkit.blackbox_analyzer flight.bbl --frame 10
86
78
  # Download only, analyze later
87
79
  python3 -m inav_toolkit.blackbox_analyzer --device auto --download-only
88
80
 
81
+ # Keep raw log files (skip auto-cleanup)
82
+ python3 -m inav_toolkit.blackbox_analyzer --device auto --keep-logs
83
+
84
+ # Don't erase flash after download
85
+ python3 -m inav_toolkit.blackbox_analyzer --device auto --no-erase
86
+
87
+ # Archive analyzed flight (compress to blackbox/archive/)
88
+ python3 -m inav_toolkit.blackbox_analyzer --device auto --archive
89
+
90
+ # Skip nav analysis even if nav fields are present
91
+ python3 -m inav_toolkit.blackbox_analyzer flight.bbl --no-nav
92
+
89
93
  # Flight progression history
90
94
  python3 -m inav_toolkit.blackbox_analyzer flight.bbl --history
91
95
  ```
92
96
 
93
- **What it measures:**
94
- - PID step response - overshoot %, tracking delay, settling time per axis
95
- - Noise spectrum - identifies peak frequencies, classifies sources (propwash, electrical, motor imbalance), groups and ranks by severity
96
- - Hover oscillation - RMS and peak-to-peak gyro during centered stick
97
+ **What it analyzes (auto-detected from available data):**
98
+
99
+ PID tuning:
100
+ - Step response - overshoot %, tracking delay, settling time per axis
101
+ - FeedForward-aware - attributes overshoot between FF and P, recommends FF reduction before P cuts
102
+ - Hover oscillation - RMS and peak-to-peak gyro, wind buffeting vs P oscillation on large frames
103
+ - Noise spectrum - peak frequencies, source classification (propwash, electrical, motor imbalance)
104
+ - Filter recommendations - phase-lag-aware, won't recommend destructive LPF cuts on 10"+ frames
97
105
  - Motor balance - average load and saturation per motor
98
- - Filter phase lag - total delay through the gyro/D-term filter chain
99
- - Config mismatch - detects when the FC config has changed since the flight being analyzed
106
+
107
+ Navigation performance (when nav fields are present):
108
+ - Deceleration overshoot - measures position error when stopping, oscillation count, settling time
109
+ - Position hold quality - CEP, RMS error, max drift, toilet-bowl pattern detection
110
+ - Altitude hold quality - vertical error RMS, oscillation detection
111
+ - Controller saturation - detects when nav demands exceed platform capability
112
+ - Wind vs tuning - correlates position error with wind estimates to separate environmental drift from PID problems
113
+
114
+ Navigation sensors:
115
+ - Compass health - heading jitter, magnetic interference, drift rate
116
+ - GPS quality - fix type, satellite count, HDOP, position jumps
117
+ - Barometer - noise level, spike detection, throttle correlation
118
+ - Position estimator - GPS vs estimator divergence
100
119
 
101
120
  **What it outputs:**
102
- - Terminal report with score, noise sources, specific CLI commands to paste
121
+ - Interactive terminal menu (with `--device auto`) or sequential report
103
122
  - HTML report with interactive charts (noise spectrum, PID response, motor traces)
104
123
  - `state.json` for cross-referencing with the parameter analyzer
105
124
  - SQLite flight database for progression tracking across sessions
106
125
 
107
126
  ### Parameter Analyzer
108
127
 
109
- Validates an INAV `diff all` export for configuration issues. Catches problems that blackbox data alone can't detect.
128
+ Validates an INAV config for issues. Accepts `dump all` or `diff all` output. Catches problems that blackbox data alone can't detect.
110
129
 
111
130
  ```bash
112
131
  # Check existing config
113
- python3 -m inav_toolkit.param_analyzer my_diff.txt --frame 10
132
+ python3 -m inav_toolkit.param_analyzer my_dump.txt --frame 10
114
133
 
115
134
  # Generate starting PIDs for a new build
116
135
  python3 -m inav_toolkit.param_analyzer --setup 10 --voltage 6S
117
136
 
118
137
  # Compare starting PIDs with current config
119
- python3 -m inav_toolkit.param_analyzer --setup 10 --voltage 6S my_diff.txt
138
+ python3 -m inav_toolkit.param_analyzer --setup 10 --voltage 6S my_dump.txt
120
139
 
121
140
  # Cross-reference with blackbox results
122
- python3 -m inav_toolkit.param_analyzer my_diff.txt --blackbox state.json
141
+ python3 -m inav_toolkit.param_analyzer my_dump.txt --blackbox state.json
123
142
  ```
124
143
 
125
- **What it checks:** safety (beepers, failsafe, battery limits), motors (protocol, RPM filter, ESC telemetry), filters (frame-appropriate LPF, dynamic notch), PIDs (cross-profile consistency, antigravity), navigation (RTH altitude, position PIDs, safehome), GPS (constellations, compass cal), blackbox (logging rate, essential fields).
144
+ **What it checks:** safety (beepers, failsafe, battery limits), motors (protocol, RPM filter, ESC telemetry), filters (frame-appropriate LPF, dynamic notch), PIDs (cross-profile consistency, FF, antigravity), navigation (frame-aware nav PID thresholds, RTH altitude, deceleration time, position PIDs, safehome), GPS (constellations, compass cal), blackbox (logging rate, essential fields).
126
145
 
127
146
  **Setup mode** generates conservative starting PIDs for 7/10/12/15" frames at 4S/6S/8S/12S.
128
147
 
@@ -131,7 +150,7 @@ python3 -m inav_toolkit.param_analyzer my_diff.txt --blackbox state.json
131
150
  Validates INAV VTOL configurations using mixer_profile switching.
132
151
 
133
152
  ```bash
134
- python3 -m inav_toolkit.vtol_configurator vtol_diff.txt
153
+ python3 -m inav_toolkit.vtol_configurator vtol_config.txt
135
154
  ```
136
155
 
137
156
  Checks MC/FW mixer profiles, tilt servo rules, motor role inference, yaw authority, FW control surfaces, mode assignments, automated RTH transition, and airmode conflicts.
@@ -155,30 +174,33 @@ Direct serial communication with INAV flight controllers. Used internally by the
155
174
  python3 -m inav_toolkit.msp --device auto
156
175
  ```
157
176
 
158
- Handles MSP v2 framing, pipelined dataflash download (4-deep), CLI command/batch, auto-reconnection after USB VCP reset.
177
+ Handles MSP v2 framing, pipelined dataflash download (4-deep), CLI command/batch, `dump all`/`diff all` config pull, auto-reconnection after USB VCP reset.
159
178
 
160
179
  ## Tuning Workflow
161
180
 
162
181
  ```
163
182
  1. NEW BUILD
164
183
  python3 -m inav_toolkit.param_analyzer --setup 10 --voltage 6S
165
- -> Conservative starting PIDs and filter settings
184
+ -> Conservative starting PIDs, filters, and nav settings
166
185
  -> Paste CLI commands into INAV Configurator
167
186
 
168
187
  2. SAFETY CHECK
169
- python3 -m inav_toolkit.param_analyzer my_diff.txt --frame 10
188
+ python3 -m inav_toolkit.param_analyzer my_dump.txt --frame 10
170
189
  -> Catches disabled beepers, failsafe issues, battery limits
190
+ -> Flags nav PIDs that are INAV defaults (tuned for 5") on larger frames
171
191
  -> Fix before flying
172
192
 
173
193
  3. FLY
174
194
  -> Enable blackbox logging (GYRO_RAW, MOTORS, RC_COMMAND)
175
195
  -> Hover for 10s, then do deliberate roll/pitch/yaw sweeps
176
- -> The analyzer needs stick inputs to measure PID response
196
+ -> Engage POSHOLD and RTH for nav analysis data
177
197
 
178
198
  4. ANALYZE
179
199
  python3 -m inav_toolkit.blackbox_analyzer --device auto
180
- -> Downloads log, pulls current config, runs full analysis
200
+ -> Downloads log, pulls full config dump, runs all analysis
201
+ -> Interactive menu with PID, noise, nav, config review sections
181
202
  -> Shows exactly what to change with CLI commands
203
+ -> Auto-cleans log files and erases flash when done
182
204
 
183
205
  5. APPLY + REPEAT
184
206
  -> Paste CLI commands, fly again
@@ -205,7 +227,7 @@ Higher voltage (6S/8S/12S) scales P and D down proportionally.
205
227
  INAV-Toolkit/
206
228
  ├── inav_toolkit/
207
229
  │ ├── __init__.py # Package version
208
- │ ├── blackbox_analyzer.py # Blackbox log analyzer
230
+ │ ├── blackbox_analyzer.py # Blackbox log analyzer + nav performance
209
231
  │ ├── msp.py # MSP v2 serial communication
210
232
  │ ├── flight_db.py # SQLite flight history
211
233
  │ ├── param_analyzer.py # Config validator + setup generator
@@ -228,7 +250,7 @@ Developed and tested against **INAV 9.0.x**. The blackbox binary decoder handles
228
250
 
229
251
  ## Contributing
230
252
 
231
- This is an active project. Planned: autonomous tuning loop (Pi Zero 2W or ESP32 strapped to the quad), expanded nav analysis, and web-based report viewer.
253
+ This is an active project. Planned: autonomous tuning loop (Pi Zero 2W or ESP32 strapped to the quad) and web-based report viewer.
232
254
 
233
255
  ## License
234
256
 
@@ -1,3 +1,3 @@
1
1
  """INAV Toolkit - Blackbox analyzer, parameter checker, and tuning wizard for INAV flight controllers."""
2
2
 
3
- __version__ = "2.20.0"
3
+ __version__ = "2.21.0"
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env python3
2
2
  """
3
- INAV Blackbox Analyzer - Multirotor Tuning Tool v2.20.0
3
+ INAV Blackbox Analyzer - Multirotor Tuning Tool v2.21.0
4
4
  =====================================================
5
5
  Analyzes INAV blackbox logs and tells you EXACTLY what to change.
6
6
 
@@ -104,7 +104,7 @@ def _disable_colors():
104
104
  AXIS_NAMES = ["Roll", "Pitch", "Yaw"]
105
105
  AXIS_COLORS = ["#FF6B6B", "#4ECDC4", "#FFD93D"]
106
106
  MOTOR_COLORS = ["#FF6B6B", "#4ECDC4", "#FFD93D", "#A78BFA"]
107
- REPORT_VERSION = "2.20.0"
107
+ REPORT_VERSION = "2.21.0"
108
108
 
109
109
  # ─── Frame and Prop Profiles ─────────────────────────────────────────────────
110
110
  # Two separate concerns:
@@ -7480,7 +7480,7 @@ def _post_analysis_cleanup(blackbox_dir, raw_download, split_files, analyzed_fil
7480
7480
  # ─── Main ─────────────────────────────────────────────────────────────────────
7481
7481
 
7482
7482
  def main():
7483
- parser = argparse.ArgumentParser(description="INAV Blackbox Analyzer v2.20.0 - Prescriptive Tuning",
7483
+ parser = argparse.ArgumentParser(description="INAV Blackbox Analyzer v2.21.0 - Prescriptive Tuning",
7484
7484
  formatter_class=argparse.RawDescriptionHelpFormatter)
7485
7485
  parser.add_argument("--version", action="version", version=f"inav-analyze {REPORT_VERSION}")
7486
7486
  parser.add_argument("logfile", nargs="?", default=None,
@@ -21,7 +21,7 @@ import json
21
21
  import os
22
22
  from datetime import datetime
23
23
 
24
- VERSION = "2.20.0"
24
+ VERSION = "2.21.0"
25
25
 
26
26
  SCHEMA_VERSION = 1
27
27
 
@@ -33,7 +33,7 @@ try:
33
33
  except ImportError:
34
34
  serial = None # Checked in open()
35
35
 
36
- VERSION = "2.20.0"
36
+ VERSION = "2.21.0"
37
37
 
38
38
  # ─── MSP Command IDs ─────────────────────────────────────────────────────────
39
39
 
@@ -21,7 +21,7 @@ import sys
21
21
  import textwrap
22
22
  from datetime import datetime
23
23
 
24
- VERSION = "2.20.0"
24
+ VERSION = "2.21.0"
25
25
 
26
26
 
27
27
  def _enable_ansi_colors():
@@ -140,6 +140,7 @@ FRAME_PROFILES = {
140
140
  "mc_p_roll": 40, "mc_i_roll": 60, "mc_d_roll": 26,
141
141
  "mc_cd_roll": 60,
142
142
  "mc_p_yaw": 45, "mc_i_yaw": 80, "mc_d_yaw": 0,
143
+ "mc_cd_yaw": 60,
143
144
  },
144
145
  "filters": {
145
146
  "gyro_main_lpf_hz": 110,
@@ -188,6 +189,7 @@ FRAME_PROFILES = {
188
189
  "mc_p_roll": 40, "mc_i_roll": 60, "mc_d_roll": 23,
189
190
  "mc_cd_roll": 60,
190
191
  "mc_p_yaw": 45, "mc_i_yaw": 80, "mc_d_yaw": 0,
192
+ "mc_cd_yaw": 60,
191
193
  },
192
194
  "filters": {
193
195
  "gyro_main_lpf_hz": 90,
@@ -238,6 +240,7 @@ FRAME_PROFILES = {
238
240
  "mc_p_roll": 38, "mc_i_roll": 55, "mc_d_roll": 28,
239
241
  "mc_cd_roll": 40,
240
242
  "mc_p_yaw": 40, "mc_i_yaw": 60, "mc_d_yaw": 0,
243
+ "mc_cd_yaw": 45,
241
244
  },
242
245
  "filters": {
243
246
  "gyro_main_lpf_hz": 70,
@@ -290,6 +293,7 @@ FRAME_PROFILES = {
290
293
  "mc_p_roll": 30, "mc_i_roll": 45, "mc_d_roll": 23,
291
294
  "mc_cd_roll": 30,
292
295
  "mc_p_yaw": 35, "mc_i_yaw": 50, "mc_d_yaw": 0,
296
+ "mc_cd_yaw": 35,
293
297
  },
294
298
  "filters": {
295
299
  "gyro_main_lpf_hz": 55,
@@ -342,6 +346,7 @@ FRAME_PROFILES = {
342
346
  "mc_p_roll": 26, "mc_i_roll": 40, "mc_d_roll": 20,
343
347
  "mc_cd_roll": 20,
344
348
  "mc_p_yaw": 30, "mc_i_yaw": 40, "mc_d_yaw": 0,
349
+ "mc_cd_yaw": 25,
345
350
  },
346
351
  "filters": {
347
352
  "gyro_main_lpf_hz": 45,
@@ -25,7 +25,7 @@ import re
25
25
  import sys
26
26
  import textwrap
27
27
 
28
- VERSION = "2.20.0"
28
+ VERSION = "2.21.0"
29
29
 
30
30
 
31
31
  def _enable_ansi_colors():
@@ -22,7 +22,7 @@ import time
22
22
  try:
23
23
  from inav_toolkit import __version__ as VERSION
24
24
  except ImportError:
25
- VERSION = "2.20.0"
25
+ VERSION = "2.21.0"
26
26
 
27
27
  # Module paths for subprocess invocation (package-aware)
28
28
  ANALYZER_MODULE = "inav_toolkit.blackbox_analyzer"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: inav-toolkit
3
- Version: 2.20.0
3
+ Version: 2.21.0
4
4
  Summary: Blackbox analyzer, parameter checker, and tuning wizard for INAV flight controllers
5
5
  License: MIT
6
6
  Project-URL: Homepage, https://github.com/agoliveira/INAV-Toolkit
@@ -32,19 +32,24 @@ Dynamic: license-file
32
32
 
33
33
  # INAV Toolkit
34
34
 
35
- A Python toolkit for analyzing blackbox logs, validating configurations, and tuning INAV flight controllers. Plug in your FC via USB - it pulls the config, downloads the blackbox, tells you exactly what to change, and gives you the CLI commands to paste.
35
+ A Python toolkit for analyzing blackbox logs, validating configurations, and tuning INAV flight controllers. Plug in your FC via USB - it pulls the config, downloads the blackbox, analyzes PID tuning and navigation performance, tells you exactly what to change, and gives you the CLI commands to paste.
36
36
 
37
37
  Built for the INAV long-range community. Tested on 7" to 15" multirotors with GPS navigation, INAV 9.0.x.
38
38
 
39
39
  ## Install / Update
40
40
 
41
+ ```bash
42
+ pip install inav-toolkit
43
+ ```
44
+
45
+ Or from source:
46
+
41
47
  ```bash
42
48
  git clone https://github.com/agoliveira/INAV-Toolkit.git
43
49
  cd INAV-Toolkit
44
50
  python3 -m venv .venv
45
51
  source .venv/bin/activate
46
52
  pip install -r requirements.txt
47
- python3 -m inav_toolkit.blackbox_analyzer --device auto
48
53
  ```
49
54
 
50
55
  Or on Debian/Ubuntu, system packages:
@@ -61,56 +66,43 @@ Python 3.8+. `pyserial` only needed for direct FC connection.
61
66
  python3 -m inav_toolkit.blackbox_analyzer --device auto
62
67
  ```
63
68
 
64
- That's it. The tool will auto-detect your FC, pull the current config, download the blackbox, split multi-flight logs, detect config changes between sessions, and run full analysis on the best flight.
65
-
66
- ### Output
69
+ That's it. The tool will auto-detect your FC, pull the full config dump, download the blackbox, split multi-flight logs, run PID tuning and navigation analysis, clean up log files, and erase flash. Results are presented in an interactive menu:
67
70
 
68
71
  ```
69
- INAV Blackbox Analyzer v2.16.0
70
- Connected: NAZGUL 10 - INAV 9.0.1
71
- Pulling configuration (diff all)... 89 settings
72
- Downloading 2236KB ... 204KB/s
73
- Found 3 flights - analyzing best from latest config
74
-
75
- TUNE QUALITY: █████████████░░░░░░░ 65/100
76
- Noise:95 | PID:N/A | Motors:94
77
-
78
- CONFIG:
79
- Roll P= 32 I= 82 D= 32 (FC now: P->35, I->75, D->28)
80
- Pitch P= 35 I= 90 D= 35 (FC now: P->38, I->82, D->31)
81
-
82
- NOISE SOURCES:
83
- 50Hz motor imbalance on Roll/Yaw [medium]
84
- 128Hz motor noise on Pitch/Yaw [low]
85
- 187-437Hz (6 peaks) electrical on Pitch/Roll/Yaw [medium]
86
-
87
- DO THIS - 2 changes:
88
- 1. Lower dynamic_gyro_notch_min_hz: 50 -> 40
89
- 2. Consider enabling RPM filter
90
-
91
- INAV CLI - paste into Configurator CLI tab:
92
- set dynamic_gyro_notch_min_hz = 40
93
- save
94
-
95
- CONFIG REVIEW:
96
- [CRITICAL] Critical beeper warnings disabled - BAT_CRIT_LOW, RX_LOST
72
+ TUNE QUALITY: █████████░░░░░░░░░░░ 46/100
73
+ Noise:94 | PID:26 | Motors:53
74
+
75
+ [1] PID Tuning R:62%OS P:ok Y:N/A
76
+ [2] Noise Analysis 94/100 - 2 sources
77
+ [3] Hover & Stability R:moderate P:wind Y:wind
78
+ [4] Nav Performance 45/100 - 4 decel events, CEP 1271cm
79
+ [5] Nav Sensors Com:70 GPS:100 Bar:70
80
+ [6] Config Review 1 critical, 2 warnings
81
+ [7] Flight History available
82
+ [C] CLI Commands 2 changes
83
+ [A] Show All
84
+ [Q] Quit
85
+
86
+ Section (1-7, C, A, Q):
97
87
  ```
98
88
 
89
+ Each section shows a one-line status at a glance. Select a number to drill into details. The CLI Commands section gives you paste-ready commands for INAV Configurator.
90
+
99
91
  ## Tools
100
92
 
101
93
  ### Blackbox Analyzer
102
94
 
103
- Decodes `.bbl` / `.bfl` blackbox logs natively in Python (no `blackbox_decode` needed) and produces actionable tuning recommendations.
95
+ Decodes `.bbl` / `.bfl` blackbox logs natively in Python (no `blackbox_decode` needed) and produces actionable tuning and navigation recommendations.
104
96
 
105
97
  ```bash
106
- # Connect to FC - pull config + download + analyze
98
+ # Connect to FC - pull config + download + analyze + cleanup + erase
107
99
  python3 -m inav_toolkit.blackbox_analyzer --device auto
108
100
 
109
101
  # Analyze an existing log file
110
102
  python3 -m inav_toolkit.blackbox_analyzer flight.bbl
111
103
 
112
- # With a saved diff for config comparison
113
- python3 -m inav_toolkit.blackbox_analyzer flight.bbl --diff my_diff.txt
104
+ # With a saved dump/diff for config comparison
105
+ python3 -m inav_toolkit.blackbox_analyzer flight.bbl --config my_dump.txt
114
106
 
115
107
  # Specify frame size for tailored thresholds
116
108
  python3 -m inav_toolkit.blackbox_analyzer flight.bbl --frame 10
@@ -118,43 +110,70 @@ python3 -m inav_toolkit.blackbox_analyzer flight.bbl --frame 10
118
110
  # Download only, analyze later
119
111
  python3 -m inav_toolkit.blackbox_analyzer --device auto --download-only
120
112
 
113
+ # Keep raw log files (skip auto-cleanup)
114
+ python3 -m inav_toolkit.blackbox_analyzer --device auto --keep-logs
115
+
116
+ # Don't erase flash after download
117
+ python3 -m inav_toolkit.blackbox_analyzer --device auto --no-erase
118
+
119
+ # Archive analyzed flight (compress to blackbox/archive/)
120
+ python3 -m inav_toolkit.blackbox_analyzer --device auto --archive
121
+
122
+ # Skip nav analysis even if nav fields are present
123
+ python3 -m inav_toolkit.blackbox_analyzer flight.bbl --no-nav
124
+
121
125
  # Flight progression history
122
126
  python3 -m inav_toolkit.blackbox_analyzer flight.bbl --history
123
127
  ```
124
128
 
125
- **What it measures:**
126
- - PID step response - overshoot %, tracking delay, settling time per axis
127
- - Noise spectrum - identifies peak frequencies, classifies sources (propwash, electrical, motor imbalance), groups and ranks by severity
128
- - Hover oscillation - RMS and peak-to-peak gyro during centered stick
129
+ **What it analyzes (auto-detected from available data):**
130
+
131
+ PID tuning:
132
+ - Step response - overshoot %, tracking delay, settling time per axis
133
+ - FeedForward-aware - attributes overshoot between FF and P, recommends FF reduction before P cuts
134
+ - Hover oscillation - RMS and peak-to-peak gyro, wind buffeting vs P oscillation on large frames
135
+ - Noise spectrum - peak frequencies, source classification (propwash, electrical, motor imbalance)
136
+ - Filter recommendations - phase-lag-aware, won't recommend destructive LPF cuts on 10"+ frames
129
137
  - Motor balance - average load and saturation per motor
130
- - Filter phase lag - total delay through the gyro/D-term filter chain
131
- - Config mismatch - detects when the FC config has changed since the flight being analyzed
138
+
139
+ Navigation performance (when nav fields are present):
140
+ - Deceleration overshoot - measures position error when stopping, oscillation count, settling time
141
+ - Position hold quality - CEP, RMS error, max drift, toilet-bowl pattern detection
142
+ - Altitude hold quality - vertical error RMS, oscillation detection
143
+ - Controller saturation - detects when nav demands exceed platform capability
144
+ - Wind vs tuning - correlates position error with wind estimates to separate environmental drift from PID problems
145
+
146
+ Navigation sensors:
147
+ - Compass health - heading jitter, magnetic interference, drift rate
148
+ - GPS quality - fix type, satellite count, HDOP, position jumps
149
+ - Barometer - noise level, spike detection, throttle correlation
150
+ - Position estimator - GPS vs estimator divergence
132
151
 
133
152
  **What it outputs:**
134
- - Terminal report with score, noise sources, specific CLI commands to paste
153
+ - Interactive terminal menu (with `--device auto`) or sequential report
135
154
  - HTML report with interactive charts (noise spectrum, PID response, motor traces)
136
155
  - `state.json` for cross-referencing with the parameter analyzer
137
156
  - SQLite flight database for progression tracking across sessions
138
157
 
139
158
  ### Parameter Analyzer
140
159
 
141
- Validates an INAV `diff all` export for configuration issues. Catches problems that blackbox data alone can't detect.
160
+ Validates an INAV config for issues. Accepts `dump all` or `diff all` output. Catches problems that blackbox data alone can't detect.
142
161
 
143
162
  ```bash
144
163
  # Check existing config
145
- python3 -m inav_toolkit.param_analyzer my_diff.txt --frame 10
164
+ python3 -m inav_toolkit.param_analyzer my_dump.txt --frame 10
146
165
 
147
166
  # Generate starting PIDs for a new build
148
167
  python3 -m inav_toolkit.param_analyzer --setup 10 --voltage 6S
149
168
 
150
169
  # Compare starting PIDs with current config
151
- python3 -m inav_toolkit.param_analyzer --setup 10 --voltage 6S my_diff.txt
170
+ python3 -m inav_toolkit.param_analyzer --setup 10 --voltage 6S my_dump.txt
152
171
 
153
172
  # Cross-reference with blackbox results
154
- python3 -m inav_toolkit.param_analyzer my_diff.txt --blackbox state.json
173
+ python3 -m inav_toolkit.param_analyzer my_dump.txt --blackbox state.json
155
174
  ```
156
175
 
157
- **What it checks:** safety (beepers, failsafe, battery limits), motors (protocol, RPM filter, ESC telemetry), filters (frame-appropriate LPF, dynamic notch), PIDs (cross-profile consistency, antigravity), navigation (RTH altitude, position PIDs, safehome), GPS (constellations, compass cal), blackbox (logging rate, essential fields).
176
+ **What it checks:** safety (beepers, failsafe, battery limits), motors (protocol, RPM filter, ESC telemetry), filters (frame-appropriate LPF, dynamic notch), PIDs (cross-profile consistency, FF, antigravity), navigation (frame-aware nav PID thresholds, RTH altitude, deceleration time, position PIDs, safehome), GPS (constellations, compass cal), blackbox (logging rate, essential fields).
158
177
 
159
178
  **Setup mode** generates conservative starting PIDs for 7/10/12/15" frames at 4S/6S/8S/12S.
160
179
 
@@ -163,7 +182,7 @@ python3 -m inav_toolkit.param_analyzer my_diff.txt --blackbox state.json
163
182
  Validates INAV VTOL configurations using mixer_profile switching.
164
183
 
165
184
  ```bash
166
- python3 -m inav_toolkit.vtol_configurator vtol_diff.txt
185
+ python3 -m inav_toolkit.vtol_configurator vtol_config.txt
167
186
  ```
168
187
 
169
188
  Checks MC/FW mixer profiles, tilt servo rules, motor role inference, yaw authority, FW control surfaces, mode assignments, automated RTH transition, and airmode conflicts.
@@ -187,30 +206,33 @@ Direct serial communication with INAV flight controllers. Used internally by the
187
206
  python3 -m inav_toolkit.msp --device auto
188
207
  ```
189
208
 
190
- Handles MSP v2 framing, pipelined dataflash download (4-deep), CLI command/batch, auto-reconnection after USB VCP reset.
209
+ Handles MSP v2 framing, pipelined dataflash download (4-deep), CLI command/batch, `dump all`/`diff all` config pull, auto-reconnection after USB VCP reset.
191
210
 
192
211
  ## Tuning Workflow
193
212
 
194
213
  ```
195
214
  1. NEW BUILD
196
215
  python3 -m inav_toolkit.param_analyzer --setup 10 --voltage 6S
197
- -> Conservative starting PIDs and filter settings
216
+ -> Conservative starting PIDs, filters, and nav settings
198
217
  -> Paste CLI commands into INAV Configurator
199
218
 
200
219
  2. SAFETY CHECK
201
- python3 -m inav_toolkit.param_analyzer my_diff.txt --frame 10
220
+ python3 -m inav_toolkit.param_analyzer my_dump.txt --frame 10
202
221
  -> Catches disabled beepers, failsafe issues, battery limits
222
+ -> Flags nav PIDs that are INAV defaults (tuned for 5") on larger frames
203
223
  -> Fix before flying
204
224
 
205
225
  3. FLY
206
226
  -> Enable blackbox logging (GYRO_RAW, MOTORS, RC_COMMAND)
207
227
  -> Hover for 10s, then do deliberate roll/pitch/yaw sweeps
208
- -> The analyzer needs stick inputs to measure PID response
228
+ -> Engage POSHOLD and RTH for nav analysis data
209
229
 
210
230
  4. ANALYZE
211
231
  python3 -m inav_toolkit.blackbox_analyzer --device auto
212
- -> Downloads log, pulls current config, runs full analysis
232
+ -> Downloads log, pulls full config dump, runs all analysis
233
+ -> Interactive menu with PID, noise, nav, config review sections
213
234
  -> Shows exactly what to change with CLI commands
235
+ -> Auto-cleans log files and erases flash when done
214
236
 
215
237
  5. APPLY + REPEAT
216
238
  -> Paste CLI commands, fly again
@@ -237,7 +259,7 @@ Higher voltage (6S/8S/12S) scales P and D down proportionally.
237
259
  INAV-Toolkit/
238
260
  ├── inav_toolkit/
239
261
  │ ├── __init__.py # Package version
240
- │ ├── blackbox_analyzer.py # Blackbox log analyzer
262
+ │ ├── blackbox_analyzer.py # Blackbox log analyzer + nav performance
241
263
  │ ├── msp.py # MSP v2 serial communication
242
264
  │ ├── flight_db.py # SQLite flight history
243
265
  │ ├── param_analyzer.py # Config validator + setup generator
@@ -260,7 +282,7 @@ Developed and tested against **INAV 9.0.x**. The blackbox binary decoder handles
260
282
 
261
283
  ## Contributing
262
284
 
263
- This is an active project. Planned: autonomous tuning loop (Pi Zero 2W or ESP32 strapped to the quad), expanded nav analysis, and web-based report viewer.
285
+ This is an active project. Planned: autonomous tuning loop (Pi Zero 2W or ESP32 strapped to the quad) and web-based report viewer.
264
286
 
265
287
  ## License
266
288
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "inav-toolkit"
7
- version = "2.20.0"
7
+ version = "2.21.0"
8
8
  description = "Blackbox analyzer, parameter checker, and tuning wizard for INAV flight controllers"
9
9
  readme = "README.md"
10
10
  license = {text = "MIT"}
File without changes
File without changes