inav-toolkit 2.15.0__tar.gz → 2.15.1__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 (27) hide show
  1. inav_toolkit-2.15.1/PKG-INFO +264 -0
  2. inav_toolkit-2.15.1/README.md +232 -0
  3. {inav_toolkit-2.15.0 → inav_toolkit-2.15.1}/inav_toolkit/__init__.py +1 -1
  4. {inav_toolkit-2.15.0 → inav_toolkit-2.15.1}/inav_toolkit/blackbox_analyzer.py +274 -137
  5. {inav_toolkit-2.15.0 → inav_toolkit-2.15.1}/inav_toolkit/flight_db.py +1 -1
  6. inav_toolkit-2.15.1/inav_toolkit/i18n.py +192 -0
  7. inav_toolkit-2.15.1/inav_toolkit/locales/en.json +187 -0
  8. inav_toolkit-2.15.1/inav_toolkit/locales/es.json +187 -0
  9. inav_toolkit-2.15.1/inav_toolkit/locales/pt_BR.json +187 -0
  10. {inav_toolkit-2.15.0 → inav_toolkit-2.15.1}/inav_toolkit/msp.py +95 -11
  11. {inav_toolkit-2.15.0 → inav_toolkit-2.15.1}/inav_toolkit/param_analyzer.py +16 -1
  12. {inav_toolkit-2.15.0 → inav_toolkit-2.15.1}/inav_toolkit/vtol_configurator.py +1 -1
  13. {inav_toolkit-2.15.0 → inav_toolkit-2.15.1}/inav_toolkit/wizard.py +1 -1
  14. inav_toolkit-2.15.1/inav_toolkit.egg-info/PKG-INFO +264 -0
  15. {inav_toolkit-2.15.0 → inav_toolkit-2.15.1}/inav_toolkit.egg-info/SOURCES.txt +4 -0
  16. {inav_toolkit-2.15.0 → inav_toolkit-2.15.1}/pyproject.toml +4 -1
  17. {inav_toolkit-2.15.0 → inav_toolkit-2.15.1}/tests/test_smoke.py +112 -0
  18. inav_toolkit-2.15.0/PKG-INFO +0 -375
  19. inav_toolkit-2.15.0/README.md +0 -343
  20. inav_toolkit-2.15.0/inav_toolkit.egg-info/PKG-INFO +0 -375
  21. {inav_toolkit-2.15.0 → inav_toolkit-2.15.1}/LICENSE +0 -0
  22. {inav_toolkit-2.15.0 → inav_toolkit-2.15.1}/inav_toolkit/autotune.py +0 -0
  23. {inav_toolkit-2.15.0 → inav_toolkit-2.15.1}/inav_toolkit.egg-info/dependency_links.txt +0 -0
  24. {inav_toolkit-2.15.0 → inav_toolkit-2.15.1}/inav_toolkit.egg-info/entry_points.txt +0 -0
  25. {inav_toolkit-2.15.0 → inav_toolkit-2.15.1}/inav_toolkit.egg-info/requires.txt +0 -0
  26. {inav_toolkit-2.15.0 → inav_toolkit-2.15.1}/inav_toolkit.egg-info/top_level.txt +0 -0
  27. {inav_toolkit-2.15.0 → inav_toolkit-2.15.1}/setup.cfg +0 -0
@@ -0,0 +1,264 @@
1
+ Metadata-Version: 2.4
2
+ Name: inav-toolkit
3
+ Version: 2.15.1
4
+ Summary: Blackbox analyzer, parameter checker, and tuning wizard for INAV flight controllers
5
+ License: MIT
6
+ Project-URL: Homepage, https://github.com/agoliveira/INAV-Toolkit
7
+ Project-URL: Issues, https://github.com/agoliveira/INAV-Toolkit/issues
8
+ Keywords: inav,drone,blackbox,pid,tuning,flight-controller,multirotor
9
+ Classifier: Development Status :: 4 - Beta
10
+ Classifier: Environment :: Console
11
+ Classifier: Intended Audience :: End Users/Desktop
12
+ Classifier: License :: OSI Approved :: MIT License
13
+ Classifier: Operating System :: OS Independent
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Programming Language :: Python :: 3.8
16
+ Classifier: Programming Language :: Python :: 3.9
17
+ Classifier: Programming Language :: Python :: 3.10
18
+ Classifier: Programming Language :: Python :: 3.11
19
+ Classifier: Programming Language :: Python :: 3.12
20
+ Classifier: Programming Language :: Python :: 3.13
21
+ Classifier: Topic :: Scientific/Engineering
22
+ Requires-Python: >=3.8
23
+ Description-Content-Type: text/markdown
24
+ License-File: LICENSE
25
+ Requires-Dist: numpy>=1.21.0
26
+ Requires-Dist: scipy>=1.7.0
27
+ Requires-Dist: matplotlib>=3.5.0
28
+ Requires-Dist: pyserial>=3.5
29
+ Provides-Extra: test
30
+ Requires-Dist: pytest>=7.0; extra == "test"
31
+ Dynamic: license-file
32
+
33
+ # INAV Toolkit
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.
36
+
37
+ Built for the INAV long-range community. Tested on 7" to 15" multirotors with GPS navigation, INAV 9.0.x.
38
+
39
+ ## Quick Start
40
+
41
+ ### Install
42
+
43
+ ```bash
44
+ pip install numpy scipy pyserial --break-system-packages
45
+ ```
46
+
47
+ Python 3.8+. `pyserial` only needed for direct FC connection.
48
+
49
+ ### Connect and Analyze
50
+
51
+ ```bash
52
+ python3 -m inav_toolkit.blackbox_analyzer --device auto
53
+ ```
54
+
55
+ 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.
56
+
57
+ ### Output
58
+
59
+ ```
60
+ ▲ INAV Blackbox Analyzer v2.16.0
61
+ Connected: NAZGUL 10 — INAV 9.0.1
62
+ Pulling configuration (diff all)... 89 settings
63
+ Downloading 2236KB ... 204KB/s
64
+ Found 3 flights — analyzing best from latest config
65
+
66
+ TUNE QUALITY: █████████████░░░░░░░ 65/100
67
+ Noise:95 | PID:N/A | Motors:94
68
+
69
+ CONFIG:
70
+ Roll P= 32 I= 82 D= 32 (FC now: P→35, I→75, D→28)
71
+ Pitch P= 35 I= 90 D= 35 (FC now: P→38, I→82, D→31)
72
+
73
+ NOISE SOURCES:
74
+ ⚖ 50Hz motor imbalance on Roll/Yaw [medium]
75
+ ⚙ 128Hz motor noise on Pitch/Yaw [low]
76
+ ⚡ 187–437Hz (6 peaks) electrical on Pitch/Roll/Yaw [medium]
77
+
78
+ DO THIS — 2 changes:
79
+ 1. Lower dynamic_gyro_notch_min_hz: 50 → 40
80
+ 2. Consider enabling RPM filter
81
+
82
+ INAV CLI — paste into Configurator CLI tab:
83
+ set dynamic_gyro_notch_min_hz = 40
84
+ save
85
+
86
+ CONFIG REVIEW:
87
+ ✖ [CRITICAL] Critical beeper warnings disabled — BAT_CRIT_LOW, RX_LOST
88
+ ```
89
+
90
+ ## Tools
91
+
92
+ ### Blackbox Analyzer
93
+
94
+ Decodes `.bbl` / `.bfl` blackbox logs natively in Python (no `blackbox_decode` needed) and produces actionable tuning recommendations.
95
+
96
+ ```bash
97
+ # Connect to FC — pull config + download + analyze
98
+ python3 -m inav_toolkit.blackbox_analyzer --device auto
99
+
100
+ # Analyze an existing log file
101
+ python3 -m inav_toolkit.blackbox_analyzer flight.bbl
102
+
103
+ # With a saved diff for config comparison
104
+ python3 -m inav_toolkit.blackbox_analyzer flight.bbl --diff my_diff.txt
105
+
106
+ # Specify frame size for tailored thresholds
107
+ python3 -m inav_toolkit.blackbox_analyzer flight.bbl --frame 10
108
+
109
+ # Download only, analyze later
110
+ python3 -m inav_toolkit.blackbox_analyzer --device auto --download-only
111
+
112
+ # Flight progression history
113
+ python3 -m inav_toolkit.blackbox_analyzer flight.bbl --history
114
+ ```
115
+
116
+ **What it measures:**
117
+ - PID step response — overshoot %, tracking delay, settling time per axis
118
+ - Noise spectrum — identifies peak frequencies, classifies sources (propwash, electrical, motor imbalance), groups and ranks by severity
119
+ - Hover oscillation — RMS and peak-to-peak gyro during centered stick
120
+ - Motor balance — average load and saturation per motor
121
+ - Filter phase lag — total delay through the gyro/D-term filter chain
122
+ - Config mismatch — detects when the FC config has changed since the flight being analyzed
123
+
124
+ **What it outputs:**
125
+ - Terminal report with score, noise sources, specific CLI commands to paste
126
+ - HTML report with interactive charts (noise spectrum, PID response, motor traces)
127
+ - `state.json` for cross-referencing with the parameter analyzer
128
+ - SQLite flight database for progression tracking across sessions
129
+
130
+ ### Parameter Analyzer
131
+
132
+ Validates an INAV `diff all` export for configuration issues. Catches problems that blackbox data alone can't detect.
133
+
134
+ ```bash
135
+ # Check existing config
136
+ python3 -m inav_toolkit.param_analyzer my_diff.txt --frame 10
137
+
138
+ # Generate starting PIDs for a new build
139
+ python3 -m inav_toolkit.param_analyzer --setup 10 --voltage 6S
140
+
141
+ # Compare starting PIDs with current config
142
+ python3 -m inav_toolkit.param_analyzer --setup 10 --voltage 6S my_diff.txt
143
+
144
+ # Cross-reference with blackbox results
145
+ python3 -m inav_toolkit.param_analyzer my_diff.txt --blackbox state.json
146
+ ```
147
+
148
+ **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).
149
+
150
+ **Setup mode** generates conservative starting PIDs for 7/10/12/15" frames at 4S/6S/8S/12S.
151
+
152
+ ### VTOL Configurator
153
+
154
+ Validates INAV VTOL configurations using mixer_profile switching.
155
+
156
+ ```bash
157
+ python3 -m inav_toolkit.vtol_configurator vtol_diff.txt
158
+ ```
159
+
160
+ Checks MC/FW mixer profiles, tilt servo rules, motor role inference, yaw authority, FW control surfaces, mode assignments, automated RTH transition, and airmode conflicts.
161
+
162
+ ### Guided Wizard
163
+
164
+ Interactive session manager that walks you through the full workflow.
165
+
166
+ ```bash
167
+ python3 -m inav_toolkit.wizard
168
+ ```
169
+
170
+ Connects to your FC and offers: tuning session, nav health check, new build safety check, blackbox download, or config restore from backup.
171
+
172
+ ### MSP Module
173
+
174
+ Direct serial communication with INAV flight controllers. Used internally by the other tools, also usable standalone.
175
+
176
+ ```bash
177
+ # Standalone: identify FC and download blackbox
178
+ python3 -m inav_toolkit.msp --device auto
179
+ ```
180
+
181
+ Handles MSP v2 framing, pipelined dataflash download (4-deep), CLI command/batch, auto-reconnection after USB VCP reset.
182
+
183
+ ## Tuning Workflow
184
+
185
+ ```
186
+ 1. NEW BUILD
187
+ python3 -m inav_toolkit.param_analyzer --setup 10 --voltage 6S
188
+ → Conservative starting PIDs and filter settings
189
+ → Paste CLI commands into INAV Configurator
190
+
191
+ 2. SAFETY CHECK
192
+ python3 -m inav_toolkit.param_analyzer my_diff.txt --frame 10
193
+ → Catches disabled beepers, failsafe issues, battery limits
194
+ → Fix before flying
195
+
196
+ 3. FLY
197
+ → Enable blackbox logging (GYRO_RAW, MOTORS, RC_COMMAND)
198
+ → Hover for 10s, then do deliberate roll/pitch/yaw sweeps
199
+ → The analyzer needs stick inputs to measure PID response
200
+
201
+ 4. ANALYZE
202
+ python3 -m inav_toolkit.blackbox_analyzer --device auto
203
+ → Downloads log, pulls current config, runs full analysis
204
+ → Shows exactly what to change with CLI commands
205
+
206
+ 5. APPLY AND REPEAT
207
+ → Paste the CLI commands, erase flash, fly again
208
+ → Flight database tracks your progression across sessions
209
+ ```
210
+
211
+ ## Frame Size Profiles
212
+
213
+ The `--setup` mode provides conservative starting configurations:
214
+
215
+ | Frame | P Roll | P Pitch | D | Gyro LPF | Dyn Notch Min |
216
+ |-------|--------|---------|---|----------|---------------|
217
+ | 7" 4S | 35 | 38 | 23 | 90 Hz | 60 Hz |
218
+ | 10" 4S | 25 | 28 | 18 | 65 Hz | 50 Hz |
219
+ | 12" 4S | 20 | 22 | 14 | 50 Hz | 35 Hz |
220
+ | 15" 4S | 15 | 16 | 10 | 40 Hz | 25 Hz |
221
+
222
+ Higher voltage (6S/8S/12S) scales P and D down proportionally.
223
+
224
+ ## Project Structure
225
+
226
+ ```
227
+ INAV-Toolkit/
228
+ ├── inav_toolkit/
229
+ │ ├── __init__.py # Package version
230
+ │ ├── blackbox_analyzer.py # Blackbox log analyzer
231
+ │ ├── msp.py # MSP v2 serial communication
232
+ │ ├── flight_db.py # SQLite flight history
233
+ │ ├── param_analyzer.py # Config validator + setup generator
234
+ │ ├── vtol_configurator.py # VTOL mixer validator
235
+ │ ├── wizard.py # Guided session manager
236
+ │ ├── autotune.py # Autotune orchestrator (experimental)
237
+ │ ├── i18n.py # Internationalization
238
+ │ └── locales/ # en, pt_BR, es
239
+ ├── docs/
240
+ ├── tests/
241
+ ├── README.md
242
+ ├── CHANGELOG.md
243
+ ├── LICENSE # MIT
244
+ └── requirements.txt
245
+ ```
246
+
247
+ ## INAV Version Support
248
+
249
+ Developed and tested against **INAV 9.0.x**. The blackbox binary decoder handles the Cleanflight/INAV encoding format natively in Python — no external `blackbox_decode` tool needed. Parameter names are INAV-specific; Betaflight is not currently supported.
250
+
251
+ ## Contributing
252
+
253
+ 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.
254
+
255
+ ## License
256
+
257
+ MIT License. See [LICENSE](LICENSE).
258
+
259
+ ## Acknowledgments
260
+
261
+ - The INAV development team and community
262
+ - QuadMeUp (Paweł Spychalski) for filter and RPM analysis research
263
+ - The INAV Fixed Wing Group for modes documentation
264
+ - UAV Tech for the spark that gave me the idea to create this
@@ -0,0 +1,232 @@
1
+ # INAV Toolkit
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.
4
+
5
+ Built for the INAV long-range community. Tested on 7" to 15" multirotors with GPS navigation, INAV 9.0.x.
6
+
7
+ ## Quick Start
8
+
9
+ ### Install
10
+
11
+ ```bash
12
+ pip install numpy scipy pyserial --break-system-packages
13
+ ```
14
+
15
+ Python 3.8+. `pyserial` only needed for direct FC connection.
16
+
17
+ ### Connect and Analyze
18
+
19
+ ```bash
20
+ python3 -m inav_toolkit.blackbox_analyzer --device auto
21
+ ```
22
+
23
+ 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.
24
+
25
+ ### Output
26
+
27
+ ```
28
+ ▲ INAV Blackbox Analyzer v2.16.0
29
+ Connected: NAZGUL 10 — INAV 9.0.1
30
+ Pulling configuration (diff all)... 89 settings
31
+ Downloading 2236KB ... 204KB/s
32
+ Found 3 flights — analyzing best from latest config
33
+
34
+ TUNE QUALITY: █████████████░░░░░░░ 65/100
35
+ Noise:95 | PID:N/A | Motors:94
36
+
37
+ CONFIG:
38
+ Roll P= 32 I= 82 D= 32 (FC now: P→35, I→75, D→28)
39
+ Pitch P= 35 I= 90 D= 35 (FC now: P→38, I→82, D→31)
40
+
41
+ NOISE SOURCES:
42
+ ⚖ 50Hz motor imbalance on Roll/Yaw [medium]
43
+ ⚙ 128Hz motor noise on Pitch/Yaw [low]
44
+ ⚡ 187–437Hz (6 peaks) electrical on Pitch/Roll/Yaw [medium]
45
+
46
+ DO THIS — 2 changes:
47
+ 1. Lower dynamic_gyro_notch_min_hz: 50 → 40
48
+ 2. Consider enabling RPM filter
49
+
50
+ INAV CLI — paste into Configurator CLI tab:
51
+ set dynamic_gyro_notch_min_hz = 40
52
+ save
53
+
54
+ CONFIG REVIEW:
55
+ ✖ [CRITICAL] Critical beeper warnings disabled — BAT_CRIT_LOW, RX_LOST
56
+ ```
57
+
58
+ ## Tools
59
+
60
+ ### Blackbox Analyzer
61
+
62
+ Decodes `.bbl` / `.bfl` blackbox logs natively in Python (no `blackbox_decode` needed) and produces actionable tuning recommendations.
63
+
64
+ ```bash
65
+ # Connect to FC — pull config + download + analyze
66
+ python3 -m inav_toolkit.blackbox_analyzer --device auto
67
+
68
+ # Analyze an existing log file
69
+ python3 -m inav_toolkit.blackbox_analyzer flight.bbl
70
+
71
+ # With a saved diff for config comparison
72
+ python3 -m inav_toolkit.blackbox_analyzer flight.bbl --diff my_diff.txt
73
+
74
+ # Specify frame size for tailored thresholds
75
+ python3 -m inav_toolkit.blackbox_analyzer flight.bbl --frame 10
76
+
77
+ # Download only, analyze later
78
+ python3 -m inav_toolkit.blackbox_analyzer --device auto --download-only
79
+
80
+ # Flight progression history
81
+ python3 -m inav_toolkit.blackbox_analyzer flight.bbl --history
82
+ ```
83
+
84
+ **What it measures:**
85
+ - PID step response — overshoot %, tracking delay, settling time per axis
86
+ - Noise spectrum — identifies peak frequencies, classifies sources (propwash, electrical, motor imbalance), groups and ranks by severity
87
+ - Hover oscillation — RMS and peak-to-peak gyro during centered stick
88
+ - Motor balance — average load and saturation per motor
89
+ - Filter phase lag — total delay through the gyro/D-term filter chain
90
+ - Config mismatch — detects when the FC config has changed since the flight being analyzed
91
+
92
+ **What it outputs:**
93
+ - Terminal report with score, noise sources, specific CLI commands to paste
94
+ - HTML report with interactive charts (noise spectrum, PID response, motor traces)
95
+ - `state.json` for cross-referencing with the parameter analyzer
96
+ - SQLite flight database for progression tracking across sessions
97
+
98
+ ### Parameter Analyzer
99
+
100
+ Validates an INAV `diff all` export for configuration issues. Catches problems that blackbox data alone can't detect.
101
+
102
+ ```bash
103
+ # Check existing config
104
+ python3 -m inav_toolkit.param_analyzer my_diff.txt --frame 10
105
+
106
+ # Generate starting PIDs for a new build
107
+ python3 -m inav_toolkit.param_analyzer --setup 10 --voltage 6S
108
+
109
+ # Compare starting PIDs with current config
110
+ python3 -m inav_toolkit.param_analyzer --setup 10 --voltage 6S my_diff.txt
111
+
112
+ # Cross-reference with blackbox results
113
+ python3 -m inav_toolkit.param_analyzer my_diff.txt --blackbox state.json
114
+ ```
115
+
116
+ **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).
117
+
118
+ **Setup mode** generates conservative starting PIDs for 7/10/12/15" frames at 4S/6S/8S/12S.
119
+
120
+ ### VTOL Configurator
121
+
122
+ Validates INAV VTOL configurations using mixer_profile switching.
123
+
124
+ ```bash
125
+ python3 -m inav_toolkit.vtol_configurator vtol_diff.txt
126
+ ```
127
+
128
+ Checks MC/FW mixer profiles, tilt servo rules, motor role inference, yaw authority, FW control surfaces, mode assignments, automated RTH transition, and airmode conflicts.
129
+
130
+ ### Guided Wizard
131
+
132
+ Interactive session manager that walks you through the full workflow.
133
+
134
+ ```bash
135
+ python3 -m inav_toolkit.wizard
136
+ ```
137
+
138
+ Connects to your FC and offers: tuning session, nav health check, new build safety check, blackbox download, or config restore from backup.
139
+
140
+ ### MSP Module
141
+
142
+ Direct serial communication with INAV flight controllers. Used internally by the other tools, also usable standalone.
143
+
144
+ ```bash
145
+ # Standalone: identify FC and download blackbox
146
+ python3 -m inav_toolkit.msp --device auto
147
+ ```
148
+
149
+ Handles MSP v2 framing, pipelined dataflash download (4-deep), CLI command/batch, auto-reconnection after USB VCP reset.
150
+
151
+ ## Tuning Workflow
152
+
153
+ ```
154
+ 1. NEW BUILD
155
+ python3 -m inav_toolkit.param_analyzer --setup 10 --voltage 6S
156
+ → Conservative starting PIDs and filter settings
157
+ → Paste CLI commands into INAV Configurator
158
+
159
+ 2. SAFETY CHECK
160
+ python3 -m inav_toolkit.param_analyzer my_diff.txt --frame 10
161
+ → Catches disabled beepers, failsafe issues, battery limits
162
+ → Fix before flying
163
+
164
+ 3. FLY
165
+ → Enable blackbox logging (GYRO_RAW, MOTORS, RC_COMMAND)
166
+ → Hover for 10s, then do deliberate roll/pitch/yaw sweeps
167
+ → The analyzer needs stick inputs to measure PID response
168
+
169
+ 4. ANALYZE
170
+ python3 -m inav_toolkit.blackbox_analyzer --device auto
171
+ → Downloads log, pulls current config, runs full analysis
172
+ → Shows exactly what to change with CLI commands
173
+
174
+ 5. APPLY AND REPEAT
175
+ → Paste the CLI commands, erase flash, fly again
176
+ → Flight database tracks your progression across sessions
177
+ ```
178
+
179
+ ## Frame Size Profiles
180
+
181
+ The `--setup` mode provides conservative starting configurations:
182
+
183
+ | Frame | P Roll | P Pitch | D | Gyro LPF | Dyn Notch Min |
184
+ |-------|--------|---------|---|----------|---------------|
185
+ | 7" 4S | 35 | 38 | 23 | 90 Hz | 60 Hz |
186
+ | 10" 4S | 25 | 28 | 18 | 65 Hz | 50 Hz |
187
+ | 12" 4S | 20 | 22 | 14 | 50 Hz | 35 Hz |
188
+ | 15" 4S | 15 | 16 | 10 | 40 Hz | 25 Hz |
189
+
190
+ Higher voltage (6S/8S/12S) scales P and D down proportionally.
191
+
192
+ ## Project Structure
193
+
194
+ ```
195
+ INAV-Toolkit/
196
+ ├── inav_toolkit/
197
+ │ ├── __init__.py # Package version
198
+ │ ├── blackbox_analyzer.py # Blackbox log analyzer
199
+ │ ├── msp.py # MSP v2 serial communication
200
+ │ ├── flight_db.py # SQLite flight history
201
+ │ ├── param_analyzer.py # Config validator + setup generator
202
+ │ ├── vtol_configurator.py # VTOL mixer validator
203
+ │ ├── wizard.py # Guided session manager
204
+ │ ├── autotune.py # Autotune orchestrator (experimental)
205
+ │ ├── i18n.py # Internationalization
206
+ │ └── locales/ # en, pt_BR, es
207
+ ├── docs/
208
+ ├── tests/
209
+ ├── README.md
210
+ ├── CHANGELOG.md
211
+ ├── LICENSE # MIT
212
+ └── requirements.txt
213
+ ```
214
+
215
+ ## INAV Version Support
216
+
217
+ Developed and tested against **INAV 9.0.x**. The blackbox binary decoder handles the Cleanflight/INAV encoding format natively in Python — no external `blackbox_decode` tool needed. Parameter names are INAV-specific; Betaflight is not currently supported.
218
+
219
+ ## Contributing
220
+
221
+ 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.
222
+
223
+ ## License
224
+
225
+ MIT License. See [LICENSE](LICENSE).
226
+
227
+ ## Acknowledgments
228
+
229
+ - The INAV development team and community
230
+ - QuadMeUp (Paweł Spychalski) for filter and RPM analysis research
231
+ - The INAV Fixed Wing Group for modes documentation
232
+ - UAV Tech for the spark that gave me the idea to create this
@@ -1,3 +1,3 @@
1
1
  """INAV Toolkit - Blackbox analyzer, parameter checker, and tuning wizard for INAV flight controllers."""
2
2
 
3
- __version__ = "2.15.0"
3
+ __version__ = "2.16.0"