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.
- {inav_toolkit-2.20.0 → inav_toolkit-2.21.0}/PKG-INFO +80 -58
- {inav_toolkit-2.20.0 → inav_toolkit-2.21.0}/README.md +79 -57
- {inav_toolkit-2.20.0 → inav_toolkit-2.21.0}/inav_toolkit/__init__.py +1 -1
- {inav_toolkit-2.20.0 → inav_toolkit-2.21.0}/inav_toolkit/blackbox_analyzer.py +3 -3
- {inav_toolkit-2.20.0 → inav_toolkit-2.21.0}/inav_toolkit/flight_db.py +1 -1
- {inav_toolkit-2.20.0 → inav_toolkit-2.21.0}/inav_toolkit/msp.py +1 -1
- {inav_toolkit-2.20.0 → inav_toolkit-2.21.0}/inav_toolkit/param_analyzer.py +6 -1
- {inav_toolkit-2.20.0 → inav_toolkit-2.21.0}/inav_toolkit/vtol_configurator.py +1 -1
- {inav_toolkit-2.20.0 → inav_toolkit-2.21.0}/inav_toolkit/wizard.py +1 -1
- {inav_toolkit-2.20.0 → inav_toolkit-2.21.0}/inav_toolkit.egg-info/PKG-INFO +80 -58
- {inav_toolkit-2.20.0 → inav_toolkit-2.21.0}/pyproject.toml +1 -1
- {inav_toolkit-2.20.0 → inav_toolkit-2.21.0}/LICENSE +0 -0
- {inav_toolkit-2.20.0 → inav_toolkit-2.21.0}/inav_toolkit/autotune.py +0 -0
- {inav_toolkit-2.20.0 → inav_toolkit-2.21.0}/inav_toolkit/i18n.py +0 -0
- {inav_toolkit-2.20.0 → inav_toolkit-2.21.0}/inav_toolkit/locales/en.json +0 -0
- {inav_toolkit-2.20.0 → inav_toolkit-2.21.0}/inav_toolkit/locales/es.json +0 -0
- {inav_toolkit-2.20.0 → inav_toolkit-2.21.0}/inav_toolkit/locales/pt_BR.json +0 -0
- {inav_toolkit-2.20.0 → inav_toolkit-2.21.0}/inav_toolkit.egg-info/SOURCES.txt +0 -0
- {inav_toolkit-2.20.0 → inav_toolkit-2.21.0}/inav_toolkit.egg-info/dependency_links.txt +0 -0
- {inav_toolkit-2.20.0 → inav_toolkit-2.21.0}/inav_toolkit.egg-info/entry_points.txt +0 -0
- {inav_toolkit-2.20.0 → inav_toolkit-2.21.0}/inav_toolkit.egg-info/requires.txt +0 -0
- {inav_toolkit-2.20.0 → inav_toolkit-2.21.0}/inav_toolkit.egg-info/top_level.txt +0 -0
- {inav_toolkit-2.20.0 → inav_toolkit-2.21.0}/setup.cfg +0 -0
- {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.
|
|
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
|
|
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
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
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 --
|
|
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
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
-
|
|
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
|
-
|
|
131
|
-
|
|
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
|
-
-
|
|
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 `
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
->
|
|
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
|
|
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)
|
|
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
|
|
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
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
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 --
|
|
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
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
-
|
|
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
|
-
|
|
99
|
-
|
|
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
|
-
-
|
|
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 `
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
->
|
|
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
|
|
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)
|
|
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,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env python3
|
|
2
2
|
"""
|
|
3
|
-
INAV Blackbox Analyzer - Multirotor Tuning Tool v2.
|
|
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.
|
|
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.
|
|
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 sys
|
|
|
21
21
|
import textwrap
|
|
22
22
|
from datetime import datetime
|
|
23
23
|
|
|
24
|
-
VERSION = "2.
|
|
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,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: inav-toolkit
|
|
3
|
-
Version: 2.
|
|
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
|
|
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
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
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 --
|
|
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
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
-
|
|
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
|
-
|
|
131
|
-
|
|
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
|
-
-
|
|
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 `
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
->
|
|
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
|
|
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)
|
|
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.
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|