-
Notifications
You must be signed in to change notification settings - Fork 70
Expand file tree
/
Copy pathconfiguration_steps_Heli.json
More file actions
1369 lines (1369 loc) · 109 KB
/
Copy pathconfiguration_steps_Heli.json
File metadata and controls
1369 lines (1369 loc) · 109 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
{
"steps": {
"02_imu_temperature_calibration_setup.param": {
"why": "The IMU drift is temperature dependent and can cause gyro and/or accel inconsistent errors",
"why_now": "You need to cool down the FC to perform this calibration. It is easier to do before the FC is mounted in the vehicle",
"blog_text": "IMU (Inertial Measurement Unit) temperature calibration setup",
"blog_url": "https://ardupilot.github.io/MethodicConfigurator/TUNING_GUIDE_Heli#41-setup-imu-temperature-calibration",
"wiki_text": "IMU Temperature Calibration",
"wiki_url": "https://ardupilot.org/copter/docs/common-imutempcal.html",
"external_tool_text": "",
"external_tool_url": "",
"mandatory_text": "80% mandatory (20% optional)",
"auto_changed_by": "",
"autoimport_nondefault_regexp": ["BRD_HEAT_.*", "INS_TCAL_OPTIONS", "TCAL_ENABLED"],
"forced_parameters": {
"INS_TCAL1_ENABLE": { "New Value": 2, "Change Reason": "Activates the temperature calibration for IMU 1 at the next start" },
"LOG_BITMASK": { "New Value": 524416, "Change Reason": "Only for IMU and Raw-IMU" },
"LOG_DISARMED": { "New Value": 1, "Change Reason": "Gather data for the offline IMU temperature calibration while the FC is disarmed" },
"INS_RAW_LOG_OPT": { "New Value": "0", "Change Reason": "No need to log raw data for IMU temperature calibration" }
},
"derived_parameters": {
"INS_TCAL2_ENABLE": { "if": "'INS_TCAL2_ENABLE' in fc_parameters", "New Value": "2", "Change Reason": "Activates the temperature calibration for IMU 2 at the next start" },
"INS_TCAL3_ENABLE": { "if": "'INS_TCAL3_ENABLE' in fc_parameters", "New Value": "2", "Change Reason": "Activates the temperature calibration for IMU 3 at the next start" }
},
"add_parameters": {
"BRD_HEAT_TARG": { "if": "'BRD_HEAT_TARG' in fc_parameters", "New Value": "65", "Change Reason": "Reasonable for most places on this planet" }
},
"delete_parameters": {
"INS_TCAL2_ENABLE": { "if": "'INS_TCAL2_ENABLE' not in fc_parameters" },
"INS_TCAL3_ENABLE": { "if": "'INS_TCAL3_ENABLE' not in fc_parameters" },
"BRD_HEAT_TARG": { "if": "'BRD_HEAT_TARG' not in fc_parameters" }
},
"jump_possible": {"05_board_orientation.param": "IMU temperature calibration reduces the number of possible 'Accel inconsistent' and 'Gyro inconsistent' errors.\nIMU temperature calibration is optional.\n\nDo you want to skip it?"},
"old_filenames": []
},
"03_imu_temperature_calibration_results.param": {
"why": "The IMU drift is temperature dependent and can cause gyro and/or accel inconsistent errors",
"why_now": "Requires the setup step. It is easier to do before the FC is mounted in the vehicle",
"blog_text": "IMU (Inertial Measurement Unit) temperature calibration results",
"blog_url": "https://ardupilot.github.io/MethodicConfigurator/TUNING_GUIDE_Heli#42-calculate-imu-temperature-calibration",
"wiki_text": "IMU Temperature Calibration",
"wiki_url": "https://ardupilot.org/copter/docs/common-imutempcal.html",
"external_tool_text": "",
"external_tool_url": "",
"mandatory_text": "80% mandatory (20% optional)",
"auto_changed_by": "",
"autoimport_nondefault_regexp": ["INS_TCAL1_.*", "INS_TCAL2_.*", "INS_TCAL3_.*"],
"add_parameters": {
"INS_TCAL2_ENABLE": { "if": "'INS_TCAL2_ENABLE' in fc_parameters", "Change Reason": "After a successful IMU temperature calibration, the FC will automatically set this to 1" },
"INS_TCAL2_TMIN": { "if": "'INS_TCAL2_ENABLE' in fc_parameters" },
"INS_TCAL2_TMAX": { "if": "'INS_TCAL2_ENABLE' in fc_parameters" },
"INS_TCAL2_ACC1_X": { "if": "'INS_TCAL2_ENABLE' in fc_parameters" },
"INS_TCAL2_ACC1_Y": { "if": "'INS_TCAL2_ENABLE' in fc_parameters" },
"INS_TCAL2_ACC1_Z": { "if": "'INS_TCAL2_ENABLE' in fc_parameters" },
"INS_TCAL2_ACC2_X": { "if": "'INS_TCAL2_ENABLE' in fc_parameters" },
"INS_TCAL2_ACC2_Y": { "if": "'INS_TCAL2_ENABLE' in fc_parameters" },
"INS_TCAL2_ACC2_Z": { "if": "'INS_TCAL2_ENABLE' in fc_parameters" },
"INS_TCAL2_ACC3_X": { "if": "'INS_TCAL2_ENABLE' in fc_parameters" },
"INS_TCAL2_ACC3_Y": { "if": "'INS_TCAL2_ENABLE' in fc_parameters" },
"INS_TCAL2_ACC3_Z": { "if": "'INS_TCAL2_ENABLE' in fc_parameters" },
"INS_TCAL2_GYR1_X": { "if": "'INS_TCAL2_ENABLE' in fc_parameters" },
"INS_TCAL2_GYR1_Y": { "if": "'INS_TCAL2_ENABLE' in fc_parameters" },
"INS_TCAL2_GYR1_Z": { "if": "'INS_TCAL2_ENABLE' in fc_parameters" },
"INS_TCAL2_GYR2_X": { "if": "'INS_TCAL2_ENABLE' in fc_parameters" },
"INS_TCAL2_GYR2_Y": { "if": "'INS_TCAL2_ENABLE' in fc_parameters" },
"INS_TCAL2_GYR2_Z": { "if": "'INS_TCAL2_ENABLE' in fc_parameters" },
"INS_TCAL2_GYR3_X": { "if": "'INS_TCAL2_ENABLE' in fc_parameters" },
"INS_TCAL2_GYR3_Y": { "if": "'INS_TCAL2_ENABLE' in fc_parameters" },
"INS_TCAL2_GYR3_Z": { "if": "'INS_TCAL2_ENABLE' in fc_parameters" },
"INS_TCAL3_ENABLE": { "if": "'INS_TCAL3_ENABLE' in fc_parameters", "Change Reason": "After a successful IMU temperature calibration, the FC will automatically set this to 1" },
"INS_TCAL3_TMIN": { "if": "'INS_TCAL3_ENABLE' in fc_parameters" },
"INS_TCAL3_TMAX": { "if": "'INS_TCAL3_ENABLE' in fc_parameters" },
"INS_TCAL3_ACC1_X": { "if": "'INS_TCAL3_ENABLE' in fc_parameters" },
"INS_TCAL3_ACC1_Y": { "if": "'INS_TCAL3_ENABLE' in fc_parameters" },
"INS_TCAL3_ACC1_Z": { "if": "'INS_TCAL3_ENABLE' in fc_parameters" },
"INS_TCAL3_ACC2_X": { "if": "'INS_TCAL3_ENABLE' in fc_parameters" },
"INS_TCAL3_ACC2_Y": { "if": "'INS_TCAL3_ENABLE' in fc_parameters" },
"INS_TCAL3_ACC2_Z": { "if": "'INS_TCAL3_ENABLE' in fc_parameters" },
"INS_TCAL3_ACC3_X": { "if": "'INS_TCAL3_ENABLE' in fc_parameters" },
"INS_TCAL3_ACC3_Y": { "if": "'INS_TCAL3_ENABLE' in fc_parameters" },
"INS_TCAL3_ACC3_Z": { "if": "'INS_TCAL3_ENABLE' in fc_parameters" },
"INS_TCAL3_GYR1_X": { "if": "'INS_TCAL3_ENABLE' in fc_parameters" },
"INS_TCAL3_GYR1_Y": { "if": "'INS_TCAL3_ENABLE' in fc_parameters" },
"INS_TCAL3_GYR1_Z": { "if": "'INS_TCAL3_ENABLE' in fc_parameters" },
"INS_TCAL3_GYR2_X": { "if": "'INS_TCAL3_ENABLE' in fc_parameters" },
"INS_TCAL3_GYR2_Y": { "if": "'INS_TCAL3_ENABLE' in fc_parameters" },
"INS_TCAL3_GYR2_Z": { "if": "'INS_TCAL3_ENABLE' in fc_parameters" },
"INS_TCAL3_GYR3_X": { "if": "'INS_TCAL3_ENABLE' in fc_parameters" },
"INS_TCAL3_GYR3_Y": { "if": "'INS_TCAL3_ENABLE' in fc_parameters" },
"INS_TCAL3_GYR3_Z": { "if": "'INS_TCAL3_ENABLE' in fc_parameters" }
},
"delete_parameters": {
"INS_TCAL2_ENABLE": { "if": "'INS_TCAL2_ENABLE' not in fc_parameters" },
"INS_TCAL2_TMIN": { "if": "'INS_TCAL2_ENABLE' not in fc_parameters" },
"INS_TCAL2_TMAX": { "if": "'INS_TCAL2_ENABLE' not in fc_parameters" },
"INS_TCAL2_ACC1_X": { "if": "'INS_TCAL2_ENABLE' not in fc_parameters" },
"INS_TCAL2_ACC1_Y": { "if": "'INS_TCAL2_ENABLE' not in fc_parameters" },
"INS_TCAL2_ACC1_Z": { "if": "'INS_TCAL2_ENABLE' not in fc_parameters" },
"INS_TCAL2_ACC2_X": { "if": "'INS_TCAL2_ENABLE' not in fc_parameters" },
"INS_TCAL2_ACC2_Y": { "if": "'INS_TCAL2_ENABLE' not in fc_parameters" },
"INS_TCAL2_ACC2_Z": { "if": "'INS_TCAL2_ENABLE' not in fc_parameters" },
"INS_TCAL2_ACC3_X": { "if": "'INS_TCAL2_ENABLE' not in fc_parameters" },
"INS_TCAL2_ACC3_Y": { "if": "'INS_TCAL2_ENABLE' not in fc_parameters" },
"INS_TCAL2_ACC3_Z": { "if": "'INS_TCAL2_ENABLE' not in fc_parameters" },
"INS_TCAL2_GYR1_X": { "if": "'INS_TCAL2_ENABLE' not in fc_parameters" },
"INS_TCAL2_GYR1_Y": { "if": "'INS_TCAL2_ENABLE' not in fc_parameters" },
"INS_TCAL2_GYR1_Z": { "if": "'INS_TCAL2_ENABLE' not in fc_parameters" },
"INS_TCAL2_GYR2_X": { "if": "'INS_TCAL2_ENABLE' not in fc_parameters" },
"INS_TCAL2_GYR2_Y": { "if": "'INS_TCAL2_ENABLE' not in fc_parameters" },
"INS_TCAL2_GYR2_Z": { "if": "'INS_TCAL2_ENABLE' not in fc_parameters" },
"INS_TCAL2_GYR3_X": { "if": "'INS_TCAL2_ENABLE' not in fc_parameters" },
"INS_TCAL2_GYR3_Y": { "if": "'INS_TCAL2_ENABLE' not in fc_parameters" },
"INS_TCAL2_GYR3_Z": { "if": "'INS_TCAL2_ENABLE' not in fc_parameters" },
"INS_TCAL3_ENABLE": { "if": "'INS_TCAL3_ENABLE' not in fc_parameters" },
"INS_TCAL3_TMIN": { "if": "'INS_TCAL3_ENABLE' not in fc_parameters" },
"INS_TCAL3_TMAX": { "if": "'INS_TCAL3_ENABLE' not in fc_parameters" },
"INS_TCAL3_ACC1_X": { "if": "'INS_TCAL3_ENABLE' not in fc_parameters" },
"INS_TCAL3_ACC1_Y": { "if": "'INS_TCAL3_ENABLE' not in fc_parameters" },
"INS_TCAL3_ACC1_Z": { "if": "'INS_TCAL3_ENABLE' not in fc_parameters" },
"INS_TCAL3_ACC2_X": { "if": "'INS_TCAL3_ENABLE' not in fc_parameters" },
"INS_TCAL3_ACC2_Y": { "if": "'INS_TCAL3_ENABLE' not in fc_parameters" },
"INS_TCAL3_ACC2_Z": { "if": "'INS_TCAL3_ENABLE' not in fc_parameters" },
"INS_TCAL3_ACC3_X": { "if": "'INS_TCAL3_ENABLE' not in fc_parameters" },
"INS_TCAL3_ACC3_Y": { "if": "'INS_TCAL3_ENABLE' not in fc_parameters" },
"INS_TCAL3_ACC3_Z": { "if": "'INS_TCAL3_ENABLE' not in fc_parameters" },
"INS_TCAL3_GYR1_X": { "if": "'INS_TCAL3_ENABLE' not in fc_parameters" },
"INS_TCAL3_GYR1_Y": { "if": "'INS_TCAL3_ENABLE' not in fc_parameters" },
"INS_TCAL3_GYR1_Z": { "if": "'INS_TCAL3_ENABLE' not in fc_parameters" },
"INS_TCAL3_GYR2_X": { "if": "'INS_TCAL3_ENABLE' not in fc_parameters" },
"INS_TCAL3_GYR2_Y": { "if": "'INS_TCAL3_ENABLE' not in fc_parameters" },
"INS_TCAL3_GYR2_Z": { "if": "'INS_TCAL3_ENABLE' not in fc_parameters" },
"INS_TCAL3_GYR3_X": { "if": "'INS_TCAL3_ENABLE' not in fc_parameters" },
"INS_TCAL3_GYR3_Y": { "if": "'INS_TCAL3_ENABLE' not in fc_parameters" },
"INS_TCAL3_GYR3_Z": { "if": "'INS_TCAL3_ENABLE' not in fc_parameters" }
},
"old_filenames": []
},
"04_imu_temperature_calibration_finish.param": {
"why": "After calibrating the IMU temperature bias, disable disarmed logging (no longer needed) and set board target temperature.",
"why_now": "Can only be done after IMU temperature compensation results are available. Future steps will use a drift-compensated, constant temperature and only log when armed.",
"blog_text": "Finish IMU (Inertial Measurement Unit) temperature calibration",
"blog_url": "https://ardupilot.github.io/MethodicConfigurator/TUNING_GUIDE_Heli#42-calculate-imu-temperature-calibration",
"wiki_text": "IMU Temperature Calibration",
"wiki_url": "https://ardupilot.org/copter/docs/common-imutempcal.html",
"external_tool_text": "",
"external_tool_url": "",
"mandatory_text": "80% mandatory (20% optional)",
"auto_changed_by": "",
"forced_parameters": {
"LOG_DISARMED": { "New Value": 0, "Change Reason": "IMU temperature calibration is finished, we no longer need to log data when disarmed" }
},
"add_parameters": {
"BRD_HEAT_TARG": { "if": "'BRD_HEAT_TARG' in fc_parameters", "New Value": "45", "Change Reason": "Reset to default after offline IMU temperature calibration" },
"BRD_HEAT_LOWMGN": { "if": "'BRD_HEAT_LOWMGN' in fc_parameters", "New Value": "0", "Change Reason": "Now that IMU temperature is calibrated, arm ASAP" }
},
"delete_parameters": {
"BRD_HEAT_TARG": { "if": "'BRD_HEAT_TARG' not in fc_parameters" }
},
"old_filenames": []
},
"05_board_orientation.param": {
"why": "Correct orientation ensures that the flight controller accurately interprets the vehicle's movements and orientation, which is fundamental for stable flight and navigation.",
"why_now": "The following steps require that the orientation is correctly set",
"blog_text": "Define the orientation of the flight controller board relative to the vehicle's body frame",
"blog_url": "https://ardupilot.github.io/MethodicConfigurator/TUNING_GUIDE_Heli#61-configure-flight-controller-orientation",
"wiki_text": "Mounting the Autopilot - AHRS_ORIENTATION parameter",
"wiki_url": "https://ardupilot.org/copter/docs/common-mounting-the-flight-controller.html",
"external_tool_text": "",
"external_tool_url": "",
"mandatory_text": "100% mandatory (0% optional)",
"component": "Frame",
"plugin": {
"name": "ahrs_orientation",
"placement": "left"
},
"auto_changed_by": "",
"derived_parameters": {
"FRAME_CLASS": { "New Value": "vehicle_components['Frame']['Specifications']['Frame class']", "Change Reason": "Selected in the component editor" }
},
"old_filenames": ["04_board_orientation.param"]
},
"06_remote_controller_receiver.param": {
"why": "Remote controller is mandatory in the initial configuration and tuning phases. Later might be required for operation and/or safety",
"why_now": "It is a pre-requirement for configuring some telemetry systems and ESCs",
"blog_text": "Configure remote controller connection, protocol and settings, including channel mapping and flight modes",
"blog_url": "https://ardupilot.github.io/MethodicConfigurator/TUNING_GUIDE_Heli#621-configure-the-rc-receiver",
"wiki_text": "Radio Control Systems",
"wiki_url": "https://ardupilot.org/copter/docs/common-rc-systems.html",
"external_tool_text": "EdgeTX Companion",
"external_tool_url": "https://edgetx.org/getedgetx/",
"mandatory_text": "100% mandatory (0% optional)",
"component": "RC Receiver",
"auto_changed_by": "",
"autoimport_nondefault_regexp": ["FS_THR_VALUE", "RC_.*"],
"derived_parameters": {
"RC_PROTOCOLS": { "New Value": "vehicle_components['RC Receiver']['FC Connection']['Protocol']", "Change Reason": "Selected in the component editor" },
"FLTMODE_CH": { "if": "vehicle_components['RC Receiver']['FC Connection']['Protocol'] == 'ExpressLRS'", "New Value": "6", "Change Reason": "ExpressLRS requires FLTMODE_CH != 5" }
},
"rename_connection": "vehicle_components['RC Receiver']['FC Connection']['Type']",
"old_filenames": ["05_remote_controller.param"]
},
"07_remote_controller_controller.param": {
"why": "Configuring RC controller options ensures correct arming behavior and channel function assignments for the specific RC system in use",
"why_now": "After the RC receiver protocol is configured, the controller-specific options such as arming method and channel function can be set",
"blog_text": "Configure RC controller options including the arming method and RC channel option assignments",
"blog_url": "https://ardupilot.github.io/MethodicConfigurator/TUNING_GUIDE_Heli#622-configure-the-rc-controller",
"wiki_text": "Radio Control Systems",
"wiki_url": "https://ardupilot.org/copter/docs/common-rc-systems.html",
"external_tool_text": "",
"external_tool_url": "",
"mandatory_text": "100% mandatory (0% optional)",
"component": "RC Controller",
"auto_changed_by": "",
"derived_parameters": {
"RC5_OPTION": { "if": "vehicle_components['RC Receiver']['FC Connection']['Protocol'] == 'ExpressLRS'", "New Value": "1", "Change Reason": "ExpressLRS requires RC5 to be used for arming (Arm/Disarm function)" }
},
"old_filenames": []
},
"08_telemetry.param": {
"why": "Telemetry allows the ground control station to monitor the vehicle's status in real-time, providing flight information for safe and efficient operation.",
"why_now": "Sometimes it depends on the remote controller. Configuring telemetry early allows vehicle configuration and sensor calibration in later steps without requiring a USB cable connection to the autopilot",
"blog_text": "Configure telemetry connection, data protocol and settings between the autopilot and the ground control station(s)",
"blog_url": "https://ardupilot.github.io/MethodicConfigurator/TUNING_GUIDE_Heli#63-configure-telemetry",
"wiki_text": "Telemetry (landing page)",
"wiki_url": "https://ardupilot.org/copter/docs/common-telemetry-landingpage.html",
"external_tool_text": "",
"external_tool_url": "",
"mandatory_text": "100% mandatory (0% optional)",
"component": "Telemetry",
"auto_changed_by": "",
"rename_connection": "vehicle_components['Telemetry']['FC Connection']['Type']",
"old_filenames": ["06_telemetry.param"]
},
"09_esc_telemetry.param": {
"why": "Proper ESC configuration is crucial for accurate motor control, affecting vehicle performance and safety. It ensures motors respond correctly to control signals and fail safely in various flight conditions.",
"why_now": "Pre-requires remote control configuration. Uses GCS telemetry if available. Setting up ESCs early allows for initial motor tests and ensures a stable base for further tuning and flight testing without risking damage to the vehicle.",
"blog_text": "Configure settings for the Electronic Speed Controllers (ESCs), including PWM range and failsafe behavior",
"blog_url": "https://ardupilot.github.io/MethodicConfigurator/TUNING_GUIDE_Heli#64-configure-the-esc",
"wiki_text": "ESC (Electronic Speed Controls)",
"wiki_url": "https://ardupilot.org/copter/docs/common-esc-guide.html",
"external_tool_text": "BLHeliSuite32",
"external_tool_url": "https://www.mediafire.com/file/fj1p9qlbzo5bl5g/BLHeliSuite32_32.9.0.6.zip/file",
"mandatory_text": "100% mandatory (0% optional)",
"component": "ESC",
"auto_changed_by": "",
"autoimport_nondefault_regexp": ["SERVO_BLH_TRATE"],
"derived_parameters": {
"SCR_ENABLE": { "if": "vehicle_components['ESC']['ESC->FC Telemetry']['Protocol'] == 'Scripting'", "New Value": "1", "Change Reason": "ESC RPM telemetry requires lua scripting" },
"MOT_PWM_TYPE": { "New Value": "vehicle_components['ESC']['FC->ESC Connection']['Protocol']", "Change Reason": "Specified in component editor window" },
"SERIAL1_PROTOCOL": { "if": "vehicle_components['ESC']['ESC->FC Telemetry']['Type'] == 'SERIAL1'", "New Value": "vehicle_components['ESC']['ESC->FC Telemetry']['Protocol']", "Change Reason": "Defined in ESC specifications above" },
"SERIAL2_PROTOCOL": { "if": "vehicle_components['ESC']['ESC->FC Telemetry']['Type'] == 'SERIAL2'", "New Value": "vehicle_components['ESC']['ESC->FC Telemetry']['Protocol']", "Change Reason": "Defined in ESC specifications above" },
"SERIAL3_PROTOCOL": { "if": "vehicle_components['ESC']['ESC->FC Telemetry']['Type'] == 'SERIAL3'", "New Value": "vehicle_components['ESC']['ESC->FC Telemetry']['Protocol']", "Change Reason": "Defined in ESC specifications above" },
"SERIAL4_PROTOCOL": { "if": "vehicle_components['ESC']['ESC->FC Telemetry']['Type'] == 'SERIAL4'", "New Value": "vehicle_components['ESC']['ESC->FC Telemetry']['Protocol']", "Change Reason": "Defined in ESC specifications above" },
"SERIAL5_PROTOCOL": { "if": "vehicle_components['ESC']['ESC->FC Telemetry']['Type'] == 'SERIAL5'", "New Value": "vehicle_components['ESC']['ESC->FC Telemetry']['Protocol']", "Change Reason": "Defined in ESC specifications above" },
"SERIAL6_PROTOCOL": { "if": "vehicle_components['ESC']['ESC->FC Telemetry']['Type'] == 'SERIAL6'", "New Value": "vehicle_components['ESC']['ESC->FC Telemetry']['Protocol']", "Change Reason": "Defined in ESC specifications above" },
"SERIAL7_PROTOCOL": { "if": "vehicle_components['ESC']['ESC->FC Telemetry']['Type'] == 'SERIAL7'", "New Value": "vehicle_components['ESC']['ESC->FC Telemetry']['Protocol']", "Change Reason": "Defined in ESC specifications above" },
"SERIAL8_PROTOCOL": { "if": "vehicle_components['ESC']['ESC->FC Telemetry']['Type'] == 'SERIAL8'", "New Value": "vehicle_components['ESC']['ESC->FC Telemetry']['Protocol']", "Change Reason": "Defined in ESC specifications above" },
"SERIAL9_PROTOCOL": { "if": "vehicle_components['ESC']['ESC->FC Telemetry']['Type'] == 'SERIAL9'", "New Value": "vehicle_components['ESC']['ESC->FC Telemetry']['Protocol']", "Change Reason": "Defined in ESC specifications above" }
},
"delete_parameters": {
"ESC_HW_POLES": {},
"KDE_NPOLE": {},
"SERVO_BLH_POLES": {},
"SERVO_FTW_POLES": {}
},
"rename_connection": "vehicle_components['ESC']['ESC->FC Telemetry']['Type']",
"old_filenames": ["07_esc.param"],
"plugin": {
"if": "vehicle_components['ESC']['ESC->FC Telemetry']['Protocol'] == 'Scripting'",
"name": "esc_rpm_scale",
"placement": "left"
}
},
"10_battery_monitor.param": {
"why": "The battery monitor must be configured to match the hardware connection type so that the autopilot correctly reads battery voltage and current",
"why_now": "After the battery voltage and failsafe thresholds are set, the monitor hardware connection parameters can be configured",
"blog_text": "Configure the battery monitor hardware connection type, protocol and calibration values",
"blog_url": "https://ardupilot.github.io/MethodicConfigurator/TUNING_GUIDE_Heli#65-configure-the-primary-battery-monitor",
"wiki_text": "Battery Monitors (aka Power Monitors/Modules) - BATT_* parameters",
"wiki_url": "https://ardupilot.org/copter/docs/common-powermodule-landingpage.html",
"external_tool_text": "",
"external_tool_url": "",
"mandatory_text": "100% mandatory (0% optional)",
"component": "Battery Monitor",
"auto_changed_by": "",
"derived_parameters": {
"BATT_MONITOR": { "New Value": "vehicle_components['Battery Monitor']['FC Connection']['Protocol']", "Change Reason": "Selected in component editor window" },
"BATT_I2C_BUS": { "if": "vehicle_components['Battery Monitor']['FC Connection']['Type'] in ['I2C1', 'I2C2', 'I2C3', 'I2C4']", "New Value": "1 if vehicle_components['Battery Monitor']['FC Connection']['Type'] == 'I2C2' else 2 if vehicle_components['Battery Monitor']['FC Connection']['Type'] == 'I2C3' else 3 if vehicle_components['Battery Monitor']['FC Connection']['Type'] == 'I2C4' else 0", "Change Reason": "Selected in component editor window" }
},
"delete_parameters": {
"BATT_I2C_BUS": { "if": "vehicle_components['Battery Monitor']['FC Connection']['Type'] not in ['I2C1', 'I2C2', 'I2C3', 'I2C4']" },
"BATT_AMP_OFFSET": { "if": "vehicle_components['Battery Monitor']['FC Connection']['Type'] != 'Analog' or vehicle_components['Battery Monitor']['FC Connection']['Protocol'] in ['Analog Voltage Only', 'FuelLevelAnalog']" },
"BATT_AMP_PERVLT": { "if": "vehicle_components['Battery Monitor']['FC Connection']['Type'] != 'Analog' or vehicle_components['Battery Monitor']['FC Connection']['Protocol'] in ['Analog Voltage Only', 'FuelLevelAnalog']" },
"BATT_VOLT_MULT": { "if": "vehicle_components['Battery Monitor']['FC Connection']['Type'] != 'Analog'" }
},
"old_filenames": [],
"plugin": {
"name": "battery_monitor",
"placement": "left"
}
},
"11_battery.param": {
"why": "Ensures the vehicle operates within safe voltage limits and can trigger appropriate failsafe actions to protect the vehicle and its surroundings. It also helps by scaling the PIDs to provide a constant flight behavior, independent of the battery state-of-charge",
"why_now": "The failsafe configuration step requires this. During flight tests PID scaling depends on the battery voltage",
"blog_text": "Configure parameters for the first battery, including health monitoring thresholds and failsafe behavior",
"blog_url": "https://ardupilot.github.io/MethodicConfigurator/TUNING_GUIDE_Heli#65-configure-the-primary-battery-monitor",
"wiki_text": "Battery Monitors (aka Power Monitors/Modules) - BATT_* parameters",
"wiki_url": "https://ardupilot.org/copter/docs/common-powermodule-landingpage.html",
"external_tool_text": "",
"external_tool_url": "",
"mandatory_text": "100% mandatory (0% optional)",
"component": "Battery",
"auto_changed_by": "",
"autoimport_nondefault_regexp": ["BATT.*"],
"forced_parameters": {
"BATT_FS_CRT_ACT": { "New Value": 1, "Change Reason": "Land ASAP" },
"BATT_FS_LOW_ACT": { "New Value": 2, "Change Reason": "Return and land at home or rally point" }
},
"derived_parameters": {
"BATT_ARM_VOLT": { "New Value": "vehicle_components['Battery']['Specifications']['Volt per cell arm']*vehicle_components['Battery']['Specifications']['Number of cells']", "Change Reason": "Only arm above this voltage, to avoid taking off with insufficient battery capacity" },
"BATT_CAPACITY": { "New Value": "vehicle_components['Battery']['Specifications']['Capacity mAh']", "Change Reason": "Total battery capacity specified in the component editor" },
"BATT_CRT_VOLT": { "New Value": "vehicle_components['Battery']['Specifications']['Volt per cell crit']*vehicle_components['Battery']['Specifications']['Number of cells']", "Change Reason": "Critical failsafe voltage x nr. of cells" },
"BATT_LOW_VOLT": { "New Value": "vehicle_components['Battery']['Specifications']['Volt per cell low']*vehicle_components['Battery']['Specifications']['Number of cells']", "Change Reason": "Low failsafe voltage x nr. of cells" },
"MOT_BAT_VOLT_MAX": { "New Value": "vehicle_components['Battery']['Specifications']['Volt per cell max']*vehicle_components['Battery']['Specifications']['Number of cells']", "Change Reason": "Scale the PIDs up when battery voltage is below this threshold" },
"MOT_BAT_VOLT_MIN": { "New Value": "vehicle_components['Battery']['Specifications']['Volt per cell min']*vehicle_components['Battery']['Specifications']['Number of cells']", "Change Reason": "Scale the PIDs up when battery voltage is above this threshold" }
},
"delete_parameters": {
"BATT_AMP_OFFSET": {},
"BATT_AMP_PERVLT": {},
"BATT_I2C_BUS": {},
"BATT_MONITOR": {},
"BATT_VOLT_MULT": {}
},
"rename_connection": "vehicle_components['Battery Monitor']['FC Connection']['Type']",
"old_filenames": ["08_batt1.param"]
},
"12_gnss.param": {
"why": "GNSS positioning is required to compensate for the IMU drift. This is required by the configuration and tuning steps. After configuration and tuning are complete the GNSS can be replaced by other positioning system",
"why_now": "Needs to be done before compass calibration",
"blog_text": "Configure the GNSS (Global Navigation Satellite System) connection and settings, including antenna phase center location and constellation selection for optimal update rates",
"blog_url": "https://ardupilot.github.io/MethodicConfigurator/TUNING_GUIDE_Heli#66-configure-the-gnss-receivers",
"wiki_text": "GPS/Compass (landing page) - GPS* parameters",
"wiki_url": "https://ardupilot.org/copter/docs/common-positioning-landing-page.html",
"external_tool_text": "",
"external_tool_url": "",
"mandatory_text": "100% mandatory (0% optional)",
"component": "GNSS Receiver",
"auto_changed_by": "",
"autoimport_nondefault_regexp": ["BRD_BOOT_DELAY", "GPS.*", "GNSS.*"],
"derived_parameters": {
"GPS_TYPE": { "if": "Version(vehicle_components['Flight Controller']['Firmware']['Version'].split(' ')[0]) < Version('4.6')", "New Value": "vehicle_components['GNSS Receiver']['FC Connection']['Protocol']", "Change Reason": "Defined in component editor" },
"GPS1_TYPE": { "if": "Version(vehicle_components['Flight Controller']['Firmware']['Version'].split(' ')[0]) >= Version('4.6')","New Value": "vehicle_components['GNSS Receiver']['FC Connection']['Protocol']", "Change Reason": "Defined in component editor" }
},
"rename_connection": "vehicle_components['GNSS Receiver']['FC Connection']['Type']",
"old_filenames": ["10_gnss.param"]
},
"13_initial_atc.param": {
"why": "Propeller size has a big influence on the vehicle dynamics, this adapts the attitude controller response to it",
"why_now": "Done before sensor calibration in Mission Planner to minimize the changes the user has to do in mission planner",
"blog_text": "Initial attitude controller configuration depends on the vehicle's propeller size defined in the component editor window",
"blog_url": "https://ardupilot.github.io/MethodicConfigurator/TUNING_GUIDE_Heli#67-initial-attitude-pid-gains-vehicle-size-dependent",
"wiki_text": "Initial parameters calculator",
"wiki_url": "https://discuss.ardupilot.org/t/initial-parameters-calculator-plugin/56909/61",
"external_tool_text": "",
"external_tool_url": "",
"mandatory_text": "100% mandatory (0% optional)",
"component": "Propellers",
"auto_changed_by": "",
"forced_parameters": {
"ATC_RAT_PIT_FLTE": { "New Value": "0", "Change Reason": "Initial value, will be improved at a later step" },
"ATC_RAT_RLL_FLTE": { "New Value": "0", "Change Reason": "Initial value, will be improved at a later step" },
"ATC_RAT_YAW_FLTD": { "New Value": "0", "Change Reason": "Initial value, will be improved at a later step" },
"ATC_RAT_YAW_FLTE": { "New Value": "2", "Change Reason": "Initial value, will be improved at a later step" },
"ATC_THR_MIX_MAN": { "New Value": "0.1", "Change Reason": "Value for the first couple of flights will be changed later once MOT_THST_HOVER is learned" },
"INS_ACCEL_FILTER": { "New Value": "10", "Change Reason": "The default is 20Hz but that is too high in most situations" },
"MOT_THST_HOVER": { "New Value": "0.2", "Change Reason": "Hover learn will improve this initial guess" }
},
"derived_parameters": {
"ATC_ANG_YAW_P": { "New Value": "round(0.5*max(8000, round(-900*vehicle_components['Propellers']['Specifications']['Diameter_inches']+36000, -2))/3000, 1)", "Change Reason": "Derived from vehicle component editor propeller size" },
"ATC_ACCEL_P_MAX": { "if": "'ATC_ACCEL_P_MAX' in fc_parameters", "New Value": "max(10000,(round(-2.613267*vehicle_components['Propellers']['Specifications']['Diameter_inches']**3+343.39216*vehicle_components['Propellers']['Specifications']['Diameter_inches']**2-15083.7121*vehicle_components['Propellers']['Specifications']['Diameter_inches']+235771, -2)))", "Change Reason": "Derived from vehicle component editor propeller size" },
"ATC_ACCEL_R_MAX": { "if": "'ATC_ACCEL_R_MAX' in fc_parameters", "New Value": "max(10000,(round(-2.613267*vehicle_components['Propellers']['Specifications']['Diameter_inches']**3+343.39216*vehicle_components['Propellers']['Specifications']['Diameter_inches']**2-15083.7121*vehicle_components['Propellers']['Specifications']['Diameter_inches']+235771, -2)))", "Change Reason": "Derived from vehicle component editor propeller size" },
"ATC_ACCEL_Y_MAX": { "if": "'ATC_ACCEL_Y_MAX' in fc_parameters", "New Value": "max(8000, round(-900*vehicle_components['Propellers']['Specifications']['Diameter_inches']+36000, -2))", "Change Reason": "Derived from vehicle component editor propeller size" },
"ATC_ACC_P_MAX": { "if": "'ATC_ACC_P_MAX' in fc_parameters", "New Value": "max(10000,(round(-2.613267*vehicle_components['Propellers']['Specifications']['Diameter_inches']**3+343.39216*vehicle_components['Propellers']['Specifications']['Diameter_inches']**2-15083.7121*vehicle_components['Propellers']['Specifications']['Diameter_inches']+235771, -2)))/100", "Change Reason": "Derived from vehicle component editor propeller size" },
"ATC_ACC_R_MAX": { "if": "'ATC_ACC_R_MAX' in fc_parameters", "New Value": "max(10000,(round(-2.613267*vehicle_components['Propellers']['Specifications']['Diameter_inches']**3+343.39216*vehicle_components['Propellers']['Specifications']['Diameter_inches']**2-15083.7121*vehicle_components['Propellers']['Specifications']['Diameter_inches']+235771, -2)))/100", "Change Reason": "Derived from vehicle component editor propeller size" },
"ATC_ACC_Y_MAX": { "if": "'ATC_ACC_Y_MAX' in fc_parameters", "New Value": "max(8000, round(-900*vehicle_components['Propellers']['Specifications']['Diameter_inches']+36000, -2))/100", "Change Reason": "Derived from vehicle component editor propeller size" },
"ATC_RAT_PIT_FLTD": { "New Value": "max(20, (round(289.22*vehicle_components['Propellers']['Specifications']['Diameter_inches']**-0.838, 0))) / 2", "Change Reason": "INS_GYRO_FILTER / 2" },
"ATC_RAT_PIT_FLTT": { "New Value": "max(20, (round(289.22*vehicle_components['Propellers']['Specifications']['Diameter_inches']**-0.838, 0))) / 2", "Change Reason": "INS_GYRO_FILTER / 2" },
"ATC_RAT_RLL_FLTD": { "New Value": "max(20, (round(289.22*vehicle_components['Propellers']['Specifications']['Diameter_inches']**-0.838, 0))) / 2", "Change Reason": "INS_GYRO_FILTER / 2" },
"ATC_RAT_RLL_FLTT": { "New Value": "max(20, (round(289.22*vehicle_components['Propellers']['Specifications']['Diameter_inches']**-0.838, 0))) / 2", "Change Reason": "INS_GYRO_FILTER / 2" },
"ATC_RAT_YAW_FLTT": { "New Value": "max(20, (round(289.22*vehicle_components['Propellers']['Specifications']['Diameter_inches']**-0.838, 0))) / 2", "Change Reason": "INS_GYRO_FILTER / 2" },
"INS_GYRO_FILTER": { "New Value": "max(20, (round(289.22*vehicle_components['Propellers']['Specifications']['Diameter_inches']**-0.838, 0)))", "Change Reason": "Derived from vehicle component editor propeller size" },
"MOT_THST_EXPO": { "New Value": "min(0.8, round(0.15686*log(vehicle_components['Propellers']['Specifications']['Diameter_inches'])+0.23693, 2))", "Change Reason": "Derived from vehicle component editor propeller size" }
},
"old_filenames": ["11_initial_atc.param"]
},
"14_mp_setup_mandatory_hardware.param": {
"why": "Sensors need to be calibrated once, before they can be used",
"why_now": "Can only be done after the connections and device drivers have been configured in the preceding steps",
"blog_text": "Set up mandatory hardware components using Mission Planner",
"blog_url": "https://ardupilot.github.io/MethodicConfigurator/TUNING_GUIDE_Heli#68-configure-mandatory-hardware-parameters",
"wiki_text": "Follow the blog instructions and use Mission Planner instead of this tool to configure the mandatory hardware parameters.",
"wiki_url": "",
"external_tool_text": "Mission Planner",
"external_tool_url": "https://ardupilot.github.io/MethodicConfigurator/TUNING_GUIDE_Heli#68-configure-mandatory-hardware-parameters",
"mandatory_text": "100% mandatory (0% optional)",
"auto_changed_by": "Mission Planner. If you have not done this step in Mission Planner yet, close this application and use Mission Planner",
"autoimport_nondefault_regexp": ["COMPASS_PRIO[0-9]_ID", "RC[0-9]+_.+", "SERVO[0-9]+_.+"],
"add_parameters": {
"INS_ACC2SCAL_X": { "if": "'INS_ACC2SCAL_X' in fc_parameters" },
"INS_ACC2SCAL_Y": { "if": "'INS_ACC2SCAL_X' in fc_parameters" },
"INS_ACC2SCAL_Z": { "if": "'INS_ACC2SCAL_X' in fc_parameters" },
"INS_ACC3SCAL_X": { "if": "'INS_ACC3SCAL_X' in fc_parameters" },
"INS_ACC3SCAL_Y": { "if": "'INS_ACC3SCAL_X' in fc_parameters" },
"INS_ACC3SCAL_Z": { "if": "'INS_ACC3SCAL_X' in fc_parameters" }
},
"delete_parameters": {
"INS_ACC2SCAL_X": { "if": "'INS_ACC2SCAL_X' not in fc_parameters" },
"INS_ACC2SCAL_Y": { "if": "'INS_ACC2SCAL_X' not in fc_parameters" },
"INS_ACC2SCAL_Z": { "if": "'INS_ACC2SCAL_X' not in fc_parameters" },
"INS_ACC3SCAL_X": { "if": "'INS_ACC3SCAL_X' not in fc_parameters" },
"INS_ACC3SCAL_Y": { "if": "'INS_ACC3SCAL_X' not in fc_parameters" },
"INS_ACC3SCAL_Z": { "if": "'INS_ACC3SCAL_X' not in fc_parameters" }
},
"old_filenames": ["11_mp_setup_mandatory_hardware.param", "12_mp_setup_mandatory_hardware.param"]
},
"15_general_configuration.param": {
"why": "The parameter defaults of some parameters are not suitable for the flight tests that will follow",
"why_now": "Most parameters have been configured in previous steps. These are parameters that did not fit in any of the categories of the previous steps.",
"blog_text": "General configuration parameters for the vehicle, including flight modes and safety settings",
"blog_url": "https://ardupilot.github.io/MethodicConfigurator/TUNING_GUIDE_Heli#69-general-configuration",
"wiki_text": "",
"wiki_url": "",
"external_tool_text": "ArduPilot Hardware report",
"external_tool_url": "https://firmware.ardupilot.org/Tools/WebTools/HardwareReport/",
"mandatory_text": "100% mandatory (0% optional)",
"auto_changed_by": "",
"delete_parameters": {
"ARMING_CHECK": {}
},
"old_filenames": ["12_general_configuration.param", "13_general_configuration.param"]
},
"16_safety_setup.param": {
"why": "Safety parameters protect the vehicle and its surroundings by enabling arming checks, geofencing and failsafe actions. ESC slew rate limits protect the ESCs from desync events.",
"why_now": "Before the first flight so that arming checks are enforced and the vehicle responds safely to abnormal conditions",
"blog_text": "Configure safety parameters including arming checks, geofence, failsafe actions and ESC slew rate limits",
"blog_url": "https://ardupilot.github.io/MethodicConfigurator/TUNING_GUIDE_Heli#691-safety-setup",
"wiki_text": "Arming Checks",
"wiki_url": "https://ardupilot.org/copter/docs/common-prearm-safety-checks.html",
"external_tool_text": "",
"external_tool_url": "",
"mandatory_text": "100% mandatory (0% optional)",
"auto_changed_by": "",
"forced_parameters": {
"ARMING_CHECK": { "if": "'ARMING_CHECK' in fc_parameters", "New Value": 1, "Change Reason": "Perform all arming checks. If you have a problem fix its source. Do NOT change this" },
"ARMING_SKIPCHK": { "if": "'ARMING_SKIPCHK' in fc_parameters", "New Value": 0, "Change Reason": "Perform all arming checks. If you have a problem fix its source. Do NOT change this" }
},
"old_filenames": []
},
"17_remote_id.param": {
"why": "Some countries require a remote ID for drones to be flown legally.",
"why_now": "Remote ID requires GNSS and air pressure to be configured before, and it must be set up before the first flight",
"blog_text": "Set the remote ID for the vehicle, to comply with local laws if applicable",
"blog_url": "https://ardupilot.github.io/MethodicConfigurator/TUNING_GUIDE_Heli#692-remote-id-aka-drone-id-optional",
"wiki_text": "Remote ID (aka Drone ID)",
"wiki_url": "https://ardupilot.org/copter/docs/common-remoteid.html",
"external_tool_text": "Dronetag BS user manual",
"external_tool_url": "https://help.dronetag.cz/dronetag-bs",
"mandatory_text": "0% mandatory (100% optional)",
"auto_changed_by": "",
"old_filenames": ["16_remote_id.param"]
},
"18_osd.param": {
"why": "An OSD (On Screen Display) overlays flight data on the FPV video feed, giving the pilot situational awareness without looking away from the aircraft",
"why_now": "OSD configuration depends on the telemetry and battery monitor being configured in the preceding steps, and it must be set up before the first flight",
"blog_text": "Configure the On Screen Display (OSD) to show relevant flight data on the FPV video feed",
"blog_url": "https://ardupilot.github.io/MethodicConfigurator/TUNING_GUIDE_Heli#693-on-screen-display-optional",
"wiki_text": "OSD (On Screen Display)",
"wiki_url": "https://ardupilot.org/copter/docs/common-osd-overview.html",
"external_tool_text": "",
"external_tool_url": "",
"mandatory_text": "0% mandatory (100% optional)",
"auto_changed_by": "",
"autoimport_nondefault_regexp": ["OSD[0-9]*_.*"],
"old_filenames": []
},
"19_motor.param": {
"why": "To determine motor RPM the number of electrical poles must be known",
"why_now": "Needs to be done after setting ESC telemetry, but before testing the motor",
"blog_text": "Motor specifications",
"blog_url": "https://ardupilot.github.io/MethodicConfigurator/TUNING_GUIDE_ArduCopter#motor-thrust-scaling-mot_thst_expo-mot_spin_min-and-mot_spin_max",
"wiki_text": "",
"wiki_url": "",
"external_tool_text": "",
"external_tool_url": "",
"mandatory_text": "40% mandatory (60% optional)",
"component": "Motors",
"auto_changed_by": "",
"derived_parameters": {
"ESC_HW_POLES": { "if": "vehicle_components['ESC']['ESC->FC Telemetry']['Protocol'] == 'Scripting'", "New Value": "vehicle_components['Motors']['Specifications']['Poles']", "Change Reason": "Specified in component editor window" },
"SERVO_BLH_POLES": { "if": "vehicle_components['ESC']['ESC->FC Telemetry']['Protocol'] in ['ESC Telemetry', 'BDShotOnly']", "New Value": "vehicle_components['Motors']['Specifications']['Poles']", "Change Reason": "Specified in component editor window" },
"SERVO_FTW_POLES": { "if": "vehicle_components['ESC']['ESC->FC Telemetry']['Protocol'] == 'FETtecOneWire'", "New Value": "vehicle_components['Motors']['Specifications']['Poles']", "Change Reason": "Specified in component editor window" }
},
"old_filenames": []
},
"20_esc.param": {
"why": "The motor thrust linearization is crucial for the throttle controller tuning, and throttle-based notch filter operation",
"why_now": "The notch filter setup step requires this, and the safety of the vehicle depends on the ESC and motor configuration",
"blog_text": "ESC, Motor and propeller configurations",
"blog_url": "https://ardupilot.github.io/MethodicConfigurator/TUNING_GUIDE_ArduCopter#motor-thrust-scaling-mot_thst_expo-mot_spin_min-and-mot_spin_max",
"wiki_text": "Motor Thrust Scaling",
"wiki_url": "https://ardupilot.org/copter/docs/motor-thrust-scaling.html",
"external_tool_text": "ArduPilot Thrust Expo",
"external_tool_url": "https://firmware.ardupilot.org/Tools/WebTools/ThrustExpo/",
"mandatory_text": "40% mandatory (60% optional)",
"auto_changed_by": "",
"autoimport_nondefault_regexp": ["BRD_IO_DSHOT", "BRD_IO_ENABLE", "SERVO_.*"],
"derived_parameters": {
"MOT_PWM_MAX": { "if": "vehicle_components['ESC']['FC->ESC Connection']['Protocol'] not in ['Normal', 'Brushed', 'PWMAngle', 'PWMRange']", "New Value": "2000", "Change Reason": "Digital ESC protocol maximum is per definition 2000" },
"MOT_PWM_MIN": { "if": "vehicle_components['ESC']['FC->ESC Connection']['Protocol'] not in ['Normal', 'Brushed', 'PWMAngle', 'PWMRange']", "New Value": "1000", "Change Reason": "Digital ESC protocol minimum is per definition 1000" }
},
"delete_parameters": {
"ESC_HW_POLES": {},
"KDE_NPOLE": {},
"SERVO_BLH_POLES": {},
"SERVO_BLH_TRATE": {},
"SERVO_FTW_POLES": {}
},
"old_filenames": ["14_motor.param", "15_motor.param"],
"plugin": {
"name": "motor_test",
"placement": "left"
}
},
"21_motor_notch_filter_setup.param": {
"why": "When the gyroscope signal is less noisy the PID gains can be higher without causing motor output oscillations",
"why_now": "Before the first flight so that it can gather data and safeguard the vehicle from some of the noise",
"blog_text": "Configure the notch filter settings, used to reduce gyroscope signal noise caused by the motors rotation",
"blog_url": "https://ardupilot.github.io/MethodicConfigurator/TUNING_GUIDE_Heli#81-notch-filter-calibration",
"wiki_text": "Managing Gyro Noise with the Dynamic Harmonic Notch Filters",
"wiki_url": "https://ardupilot.org/copter/docs/common-imu-notch-filtering.html",
"external_tool_text": "New FFT Filter setup and review web tool",
"external_tool_url": "https://discuss.ardupilot.org/t/new-fft-filter-setup-and-review-web-tool/102572",
"mandatory_text": "100% mandatory (0% optional)",
"auto_changed_by": "",
"autoimport_nondefault_regexp": ["FFT_.*", "INS_HNTCH[0-9]*_.*"],
"forced_parameters": {
"INS_HNTCH_ENABLE": { "New Value": 1, "Change Reason": "Use the first notch filter to filter the noise created by the motors/propellers" }
},
"derived_parameters": {
"INS_HNTCH_FREQ": { "New Value": "1.4*fc_parameters['INS_GYRO_FILTER']", "Change Reason": "Use 1.4 * INS_GYRO_FILTER as a first guess" },
"INS_HNTCH_MODE": { "New Value": "1 if vehicle_components['ESC']['ESC->FC Telemetry']['Protocol'] == 'None' else 3", "Change Reason": "'Use throttle-based dynamic notch filter to reduce propeller noise' if vehicle_components['ESC']['ESC->FC Telemetry']['Protocol'] == 'None' else 'Use ESC telemetry RPM to dynamically adjust the propeller notch filter'" }
},
"old_filenames": ["17_notch_filter_setup.param", "18_notch_filter_setup.param"]
},
"22_motor_notch_logging.param": {
"why": "parameter values at later steps depend on data that is gathered by means of logging",
"why_now": "All the previous steps did not require logging, but the following ones do",
"blog_text": "Configure logging parameters, including what data is logged and how it's stored",
"blog_url": "https://ardupilot.github.io/MethodicConfigurator/TUNING_GUIDE_Heli#614-configure-logging",
"wiki_text": "Downloading and Analyzing Data Logs in Mission Planner",
"wiki_url": "https://ardupilot.org/copter/docs/common-downloading-and-analyzing-data-logs-in-mission-planner.html",
"external_tool_text": "Motor/Propeller order and direction test",
"external_tool_url": "https://ardupilot.github.io/MethodicConfigurator/TUNING_GUIDE_ArduCopter#613-motorpropeller-order-and-direction-test",
"mandatory_text": "100% mandatory (0% optional)",
"auto_changed_by": "",
"autoimport_nondefault_regexp": ["INS_LOG_BAT_.+", "LOG_FILE_.+"],
"forced_parameters": {
"LOG_BITMASK": { "New Value": 145374, "Change Reason": "Log relevant data for dynamic notch filter tuning. Later on we'll change this to other subsystems" },
"LOG_FILE_DSRMROT": { "New Value": 1, "Change Reason": "One .bin log file per flight, not per battery/reboot" },
"MOT_HOVER_LEARN": { "if": "fc_parameters['MOT_THST_HOVER'] > 0.125", "New Value": 2, "Change Reason": "So that it can tune the throttle controller on 24_throttle_controller.param file" }
},
"derived_parameters": {
"INS_LOG_BAT_MASK": { "New Value": "1 if 'F4' in vehicle_components['Flight Controller']['Specifications']['MCU Series'] or vehicle_components['Propellers']['Specifications']['Diameter_inches'] >= 15 else 0", "Change Reason": "Use acc and gyro batch logging on F4 processors or big props, gyro raw logging on others" },
"INS_LOG_BAT_OPT": { "New Value": "4 if 'F4' in vehicle_components['Flight Controller']['Specifications']['MCU Series'] or vehicle_components['Propellers']['Specifications']['Diameter_inches'] >= 15 else 0", "Change Reason": "Use pre and post filters acc and gyro batch logging on F4 processors or big props, pre-post gyro raw logging on others" },
"INS_RAW_LOG_OPT": { "New Value": "0 if 'F4' in vehicle_components['Flight Controller']['Specifications']['MCU Series'] or vehicle_components['Propellers']['Specifications']['Diameter_inches'] >= 15 else 9", "Change Reason": "Use pre and post filters acc and gyro batch logging on F4 processors or big props, pre-post gyro raw logging on others" }
},
"old_filenames": ["13_logging.param", "14_logging.param"]
},
"23_optional_pid_adjustment.param": {
"instructions_popup": {
"type": "info",
"msg": "This step is optional, only perform it if your vehicle is tiny, huge, or its motor outputs oscillate"
},
"why": "With very large or very small vehicles the default PID values are not suitable for the first flight",
"why_now": "Most other parameters are done and these need to be corrected (depending on the vehicle size) before the first flight",
"blog_text": "Adjust the Proportional-Integral-Derivative (PID) controllers based on the vehicle size before the first flight",
"blog_url": "https://ardupilot.github.io/MethodicConfigurator/TUNING_GUIDE_Heli#615-optional-pid-adjustment-not-sure-how-this-applies-to-helicopters",
"wiki_text": "Manual tuning of Roll and Pitch",
"wiki_url": "https://ardupilot.org/copter/docs/ac_rollpitchtuning.html",
"external_tool_text": "param_pid_adjustment_update.py",
"external_tool_url": "https://github.com/ArduPilot/MethodicConfigurator/blob/master/ardupilot_methodic_configurator/param_pid_adjustment_update.py",
"mandatory_text": "20% mandatory (80% optional)",
"auto_changed_by": "",
"old_filenames": ["15_pid_adjustment.param", "16_pid_adjustment.param"]
},
"24_throttle_controller.param": {
"why": "The throttle controller is crucial for maintaining altitude and controlling the vehicle's vertical movement.",
"why_now": "After the first flight because it depends on the MOT_THST_HOVER parameter, before the second flight so that it can safely use the altitude controller",
"blog_text": "Use MOT_THST_HOVER value calculated during the first flight to set throttle controller PIDs",
"blog_url": "https://ardupilot.github.io/MethodicConfigurator/TUNING_GUIDE_Heli#82-configure-the-throttle-controller",
"wiki_text": "Test AltHold",
"wiki_url": "https://ardupilot.org/copter/docs/initial-tuning-flight.html#test-althold",
"external_tool_text": "",
"external_tool_url": "",
"mandatory_text": "100% mandatory (0% optional)",
"auto_changed_by": "",
"derived_parameters": {
"ATC_THR_MIX_MAN": { "New Value": "0.5", "Change Reason": "Because ALTHOLD flight mode was used for more than 30 seconds to correctly learn the MOT_THST_HOVER value" },
"PSC_ACCZ_I": { "if": "Version(vehicle_components['Flight Controller']['Firmware']['Version'].split(' ')[0]) < Version('4.7')", "New Value": "2*fc_parameters['MOT_THST_HOVER']", "Change Reason": "Use 2 * MOT_THST_HOVER assuming MOT_THST_HOVER has been correctly learned" },
"PSC_D_ACC_I": { "if": "Version(vehicle_components['Flight Controller']['Firmware']['Version'].split(' ')[0]) >= Version('4.7')", "New Value": "0.2*fc_parameters['MOT_THST_HOVER']", "Change Reason": "Use 0.2 * MOT_THST_HOVER assuming MOT_THST_HOVER has been correctly learned" },
"PSC_ACCZ_P": { "if": "Version(vehicle_components['Flight Controller']['Firmware']['Version'].split(' ')[0]) < Version('4.7')", "New Value": "1*fc_parameters['MOT_THST_HOVER']", "Change Reason": "Use MOT_THST_HOVER assuming MOT_THST_HOVER has been correctly learned" },
"PSC_D_ACC_P": { "if": "Version(vehicle_components['Flight Controller']['Firmware']['Version'].split(' ')[0]) >= Version('4.7')", "New Value": "0.1*fc_parameters['MOT_THST_HOVER']", "Change Reason": "Use 0.1 * MOT_THST_HOVER assuming MOT_THST_HOVER has been correctly learned" }
},
"add_parameters": {
"MOT_BAT_VOLT_MAX": { "New Value": "fc_parameters['MOT_BAT_VOLT_MAX']", "Change Reason": "To correctly scale the PID gains. Voltage of a healthy, fully charged battery immediately after takeoff. Read from a flight log" }
},
"old_filenames": ["19_throttle_controller.param", "20_throttle_controller.param"]
},
"25_motor_notch_filter_results.param": {
"why": "The notch filter(s) configuration depends on real-flight data.",
"why_now": "real-flight data is only available after the first flight",
"blog_text": "Configure the notch filter(s) based on the data collected from the first flight",
"blog_url": "https://ardupilot.github.io/MethodicConfigurator/TUNING_GUIDE_Heli#81-notch-filter-calibration",
"wiki_text": "Managing Gyro Noise with the Dynamic Harmonic Notch Filters",
"wiki_url": "https://ardupilot.org/copter/docs/common-imu-notch-filtering.html",
"external_tool_text": "Ardupilot Filter Review tool",
"external_tool_url": "https://firmware.ardupilot.org/Tools/WebTools/FilterReview/",
"mandatory_text": "100% mandatory (0% optional)",
"auto_changed_by": "",
"autoimport_nondefault_regexp": ["FFT_.*", "INS_GYRO_FILTER"],
"old_filenames": ["18_notch_filter_results.param", "19_notch_filter_results.param"]
},
"26_ekf_config.param": {
"why": "Sometimes the weights of the barometer vs. GNSS altitude need to be adjusted.",
"why_now": "Before the second flight so that the EKF can be used to estimate the vehicle's position",
"blog_text": "Configure Extended Kalman Filter (EKF) noise weights",
"blog_url": "https://ardupilot.github.io/MethodicConfigurator/TUNING_GUIDE_Heli#83-configure-the-ekf-altitude-source-weights",
"wiki_text": "Extended Kalman filter tuning",
"wiki_url": "https://ardupilot.org/dev/docs/extended-kalman-filter.html",
"external_tool_text": "",
"external_tool_url": "",
"mandatory_text": "0% mandatory (100% optional)",
"old_filenames": ["20_ekf_config.param", "21_ekf_config.param"]
},
"27_pid_notch_filter_logging.param": {
"why": "parameter values at later steps depend on data that is gathered by means of logging",
"why_now": "PID notch filters require different logging parameters from motor notch filters",
"blog_text": "Configure PID notch filters logging",
"blog_url": "https://ardupilot.github.io/MethodicConfigurator/TUNING_GUIDE_Heli#614-configure-logging",
"wiki_text": "Downloading and Analyzing Data Logs in Mission Planner",
"wiki_url": "https://ardupilot.org/copter/docs/common-downloading-and-analyzing-data-logs-in-mission-planner.html",
"external_tool_text": "Motor/Propeller order and direction test",
"external_tool_url": "https://ardupilot.github.io/MethodicConfigurator/TUNING_GUIDE_ArduCopter#613-motorpropeller-order-and-direction-test",
"mandatory_text": "100% mandatory (0% optional)",
"auto_changed_by": "",
"autoimport_nondefault_regexp": ["INS_LOG_BAT_.+", "LOG_FILE_.+"],
"forced_parameters": {
"INS_LOG_BAT_MASK": { "New Value": "1", "Change Reason": "PID notch filters require batch logging, not raw logging" },
"INS_LOG_BAT_OPT": { "New Value": "4", "Change Reason": "PID notch filters require batch pre- and post- filters logging" },
"INS_RAW_LOG_OPT": { "New Value": "0", "Change Reason": "PID notch filters require batch logging, not raw logging" },
"LOG_BITMASK": { "New Value": 407517, "Change Reason": "Log relevant data for PID notch filters tuning. Later on we'll change this to other subsystems" }
},
"old_filenames": []
},
"28_pid_notch_filter_results.param": {
"why": "The PID notch filter(s) configuration depends on real-flight data collected with the logging enabled in the previous step",
"why_now": "Real-flight data with PID notch filter batch logging is only available after the dedicated logging flight",
"blog_text": "Configure the PID notch filter(s) based on the data collected from the logging flight",
"blog_url": "https://ardupilot.github.io/MethodicConfigurator/TUNING_GUIDE_Heli#81-notch-filter-calibration",
"wiki_text": "Managing Gyro Noise with the Dynamic Harmonic Notch Filters",
"wiki_url": "https://ardupilot.org/copter/docs/common-imu-notch-filtering.html",
"external_tool_text": "Ardupilot Filter Review tool",
"external_tool_url": "https://firmware.ardupilot.org/Tools/WebTools/FilterReview/",
"mandatory_text": "100% mandatory (0% optional)",
"auto_changed_by": "",
"autoimport_nondefault_regexp": ["FILT.+", "ATC_RAT_.+_N[ET]F", "PSC_ACCZ_N[ET]F"],
"add_parameters": {
"ATC_RAT_RLL_NEF": { "if": "Version(vehicle_components['Flight Controller']['Firmware']['Version'].split(' ')[0]) >= Version('4.5')", "New Value": "0", "Change Reason": "" },
"ATC_RAT_RLL_NTF": { "if": "Version(vehicle_components['Flight Controller']['Firmware']['Version'].split(' ')[0]) >= Version('4.5')", "New Value": "0", "Change Reason": "" },
"ATC_RAT_PIT_NEF": { "if": "Version(vehicle_components['Flight Controller']['Firmware']['Version'].split(' ')[0]) >= Version('4.5')", "New Value": "0", "Change Reason": "" },
"ATC_RAT_PIT_NTF": { "if": "Version(vehicle_components['Flight Controller']['Firmware']['Version'].split(' ')[0]) >= Version('4.5')", "New Value": "0", "Change Reason": "" },
"ATC_RAT_YAW_NEF": { "if": "Version(vehicle_components['Flight Controller']['Firmware']['Version'].split(' ')[0]) >= Version('4.5')", "New Value": "0", "Change Reason": "" },
"ATC_RAT_YAW_NTF": { "if": "Version(vehicle_components['Flight Controller']['Firmware']['Version'].split(' ')[0]) >= Version('4.5')", "New Value": "0", "Change Reason": "" },
"PSC_ACCZ_NEF": { "if": "'PSC_ACCZ_NEF' in fc_parameters", "New Value": "0", "Change Reason": "" },
"PSC_ACCZ_NTF": { "if": "'PSC_ACCZ_NTF' in fc_parameters", "New Value": "0", "Change Reason": "" },
"PSC_D_ACC_NEF": { "if": "'PSC_D_ACC_NEF' in fc_parameters", "New Value": "0", "Change Reason": "" },
"PSC_D_ACC_NTF": { "if": "'PSC_D_ACC_NTF' in fc_parameters", "New Value": "0", "Change Reason": "" }
},
"old_filenames": []
},
"29_quick_tune_setup.param": {
"why": "The VTOL-quicktune lua script can safely estimate good PID starting values for the vehicle.",
"why_now": "Before the second flight so that the vehicle can be safely tuned.",
"blog_text": "Set up the in-flight VTOL-quicktune lua script to tune the PIDs before the MAGFit flight",
"blog_url": "https://ardupilot.github.io/MethodicConfigurator/TUNING_GUIDE_Heli#85-second-flight-pid-vtol-quiktune-lua-script-or-manual-pid-tune",
"wiki_text": "If lua scripting is not possible, do a manual tune instead",
"wiki_url": "https://ardupilot.org/copter/docs/ac_rollpitchtuning.html",
"external_tool_text": "VTOL-quicktune lua script",
"external_tool_url": "https://github.com/ArduPilot/ardupilot/blob/master/libraries/AP_Scripting/applets/VTOL-quicktune.md",
"mandatory_text": "80% mandatory (20% optional)",
"auto_changed_by": "",
"autoimport_nondefault_regexp": ["QUIK_.*"],
"forced_parameters": {
"SCR_ENABLE": { "New Value": 1, "Change Reason": "Use lua scripting for VTOL-Quicktune" },
"QUIK_ENABLE": { "New Value": 1, "Change Reason": "Use VTOL-Quicktune lua script to estimate a good PID starting values" }
},
"old_filenames": ["20_quick_tune_setup.param", "22_quick_tune_setup.param"],
"download_file": { "source_url": "https://raw.githubusercontent.com/ArduPilot/ardupilot/Copter-4.5/libraries/AP_Scripting/applets/VTOL-quicktune.lua", "dest_local": "VTOL-quicktune.lua" },
"upload_file": { "source_local": "VTOL-quicktune.lua", "dest_on_fc": "/APM/Scripts/VTOL-quicktune.lua" }
},
"30_quick_tune_results.param": {
"why": "The VTOL-quicktune lua script can safely estimate good PID starting values for the vehicle.",
"why_now": "Before the second flight so that the vehicle can be safely tuned.",
"blog_text": "Results of the in-flight VTOL-quicktune lua script PIDs before the MAGFit flight.",
"blog_url": "https://ardupilot.github.io/MethodicConfigurator/TUNING_GUIDE_Heli#85-second-flight-pid-vtol-quiktune-lua-script-or-manual-pid-tune",
"wiki_text": "If lua scripting is not possible, do a manual tune instead",
"wiki_url": "https://ardupilot.org/copter/docs/ac_rollpitchtuning.html",
"external_tool_text": "VTOL-quicktune lua script",
"external_tool_url": "https://github.com/ArduPilot/ardupilot/blob/master/libraries/AP_Scripting/applets/VTOL-quicktune.md",
"mandatory_text": "80% mandatory (20% optional)",
"auto_changed_by": "VTOL-quicktune lua script",
"old_filenames": ["21_quick_tune_results.param", "23_quick_tune_results.param"]
},
"31_inflight_magnetometer_fit_setup.param": {
"why": "The compass heading is crucial for the vehicle's navigation and the calibration is very accurate if done during a special flight path.",
"why_now": "Requires a basic tune (provided by the previous step) in order to be able to safely navigate in a figure eight flight path.",
"blog_text": "Set up parameters for the in-flight magnetometer calibration",
"blog_url": "https://ardupilot.github.io/MethodicConfigurator/TUNING_GUIDE_Heli#911-setup-inflight-magfit-calibration",
"wiki_text": "If lua scripting is not possible do compassmot instead",
"wiki_url": "https://ardupilot.org/copter/docs/common-compass-setup-advanced.html#compassmot-compensation-for-interference-from-the-power-wires-escs-and-motors",
"external_tool_text": "ArduPilot MAGFit in flight compass calibration",
"external_tool_url": "https://firmware.ardupilot.org/Tools/WebTools/MAGFit/",
"mandatory_text": "80% mandatory (20% optional)",
"auto_changed_by": "",
"autoimport_nondefault_regexp": ["MAGH_.*"],
"forced_parameters": {
"MAGH_LOG_ENABLE": { "New Value": 1, "Change Reason": "Activates the logging of the MAGH.Active message" },
"SCR_ENABLE": { "New Value": 1, "Change Reason": "Use lua scripting for MagFit flight path automation" }
},
"jump_possible": {"66_everyday_use.param": "If you are impatient and do not want a fully optimized flight controller\nYou can skip some steps now.\n\nJump to '66_everyday_use.param' file?"},
"old_filenames": ["22_inflight_magnetometer_fit_setup.param", "24_inflight_magnetometer_fit_setup.param"],
"download_file": { "source_url": "https://discuss.ardupilot.org/uploads/short-url/4pyrl7PcfqiMEaRItUhljuAqLSs.lua", "dest_local": "copter-magfit-helper.lua" },
"upload_file": { "source_local": "copter-magfit-helper.lua", "dest_on_fc": "/APM/Scripts/copter-magfit-helper.lua" }
},
"32_inflight_magnetometer_fit_results.param": {
"why": "The compass heading is crucial for the vehicle's navigation and the calibration is very accurate if done during a special flight path.",
"why_now": "Requires the setup (provided by the previous step) and should be done before the second quicktune.",
"blog_text": "Record the results of the in-flight magnetometer calibration",
"blog_url": "https://ardupilot.github.io/MethodicConfigurator/TUNING_GUIDE_Heli#912-calculate-inflight-magfit-calibration",
"wiki_text": "If lua scripting is not possible do compassmot instead",
"wiki_url": "https://ardupilot.org/copter/docs/common-compass-setup-advanced.html#compassmot-compensation-for-interference-from-the-power-wires-escs-and-motors",
"external_tool_text": "ArduPilot MAGFit in flight compass calibration",
"external_tool_url": "https://firmware.ardupilot.org/Tools/WebTools/MAGFit/",
"mandatory_text": "80% mandatory (20% optional)",
"auto_changed_by": "MAGFit Webtool and YOU manually uploaded the result to the FC already",
"autoimport_nondefault_regexp": ["COMPASS_DIA[0-9]*_.*", "COMPASS_MOT[0-9]*_.*", "COMPASS_MOTCT", "COMPASS_ODI[0-9]*_.*", "COMPASS_OFS[0-9]*_.*", "COMPASS_ORIENT[0-9]*", "COMPASS_SCALE[0-9]*"],
"add_parameters": {
"COMPASS_DIA2_X": { "if": "'COMPASS_ORIENT2' in fc_parameters" },
"COMPASS_DIA2_Y": { "if": "'COMPASS_ORIENT2' in fc_parameters" },
"COMPASS_DIA2_Z": { "if": "'COMPASS_ORIENT2' in fc_parameters" },
"COMPASS_MOT2_X": { "if": "'COMPASS_ORIENT2' in fc_parameters" },
"COMPASS_MOT2_Y": { "if": "'COMPASS_ORIENT2' in fc_parameters" },
"COMPASS_MOT2_Z": { "if": "'COMPASS_ORIENT2' in fc_parameters" },
"COMPASS_ODI2_X": { "if": "'COMPASS_ORIENT2' in fc_parameters" },
"COMPASS_ODI2_Y": { "if": "'COMPASS_ORIENT2' in fc_parameters" },
"COMPASS_ODI2_Z": { "if": "'COMPASS_ORIENT2' in fc_parameters" },
"COMPASS_OFS2_X": { "if": "'COMPASS_ORIENT2' in fc_parameters" },
"COMPASS_OFS2_Y": { "if": "'COMPASS_ORIENT2' in fc_parameters" },
"COMPASS_OFS2_Z": { "if": "'COMPASS_ORIENT2' in fc_parameters" },
"COMPASS_ORIENT2": { "if": "'COMPASS_ORIENT2' in fc_parameters" },
"COMPASS_SCALE2": { "if": "'COMPASS_ORIENT2' in fc_parameters" },
"COMPASS_DIA3_X": { "if": "'COMPASS_ORIENT3' in fc_parameters" },
"COMPASS_DIA3_Y": { "if": "'COMPASS_ORIENT3' in fc_parameters" },
"COMPASS_DIA3_Z": { "if": "'COMPASS_ORIENT3' in fc_parameters" },
"COMPASS_MOT3_X": { "if": "'COMPASS_ORIENT3' in fc_parameters" },
"COMPASS_MOT3_Y": { "if": "'COMPASS_ORIENT3' in fc_parameters" },
"COMPASS_MOT3_Z": { "if": "'COMPASS_ORIENT3' in fc_parameters" },
"COMPASS_ODI3_X": { "if": "'COMPASS_ORIENT3' in fc_parameters" },
"COMPASS_ODI3_Y": { "if": "'COMPASS_ORIENT3' in fc_parameters" },
"COMPASS_ODI3_Z": { "if": "'COMPASS_ORIENT3' in fc_parameters" },
"COMPASS_OFS3_X": { "if": "'COMPASS_ORIENT3' in fc_parameters" },
"COMPASS_OFS3_Y": { "if": "'COMPASS_ORIENT3' in fc_parameters" },
"COMPASS_OFS3_Z": { "if": "'COMPASS_ORIENT3' in fc_parameters" },
"COMPASS_ORIENT3": { "if": "'COMPASS_ORIENT3' in fc_parameters" },
"COMPASS_SCALE3": { "if": "'COMPASS_ORIENT3' in fc_parameters" }
},
"delete_parameters": {
"COMPASS_DIA2_X": { "if": "'COMPASS_ORIENT2' not in fc_parameters" },
"COMPASS_DIA2_Y": { "if": "'COMPASS_ORIENT2' not in fc_parameters" },
"COMPASS_DIA2_Z": { "if": "'COMPASS_ORIENT2' not in fc_parameters" },
"COMPASS_MOT2_X": { "if": "'COMPASS_ORIENT2' not in fc_parameters" },
"COMPASS_MOT2_Y": { "if": "'COMPASS_ORIENT2' not in fc_parameters" },
"COMPASS_MOT2_Z": { "if": "'COMPASS_ORIENT2' not in fc_parameters" },
"COMPASS_ODI2_X": { "if": "'COMPASS_ORIENT2' not in fc_parameters" },
"COMPASS_ODI2_Y": { "if": "'COMPASS_ORIENT2' not in fc_parameters" },
"COMPASS_ODI2_Z": { "if": "'COMPASS_ORIENT2' not in fc_parameters" },
"COMPASS_OFS2_X": { "if": "'COMPASS_ORIENT2' not in fc_parameters" },
"COMPASS_OFS2_Y": { "if": "'COMPASS_ORIENT2' not in fc_parameters" },
"COMPASS_OFS2_Z": { "if": "'COMPASS_ORIENT2' not in fc_parameters" },
"COMPASS_ORIENT2": { "if": "'COMPASS_ORIENT2' not in fc_parameters" },
"COMPASS_SCALE2": { "if": "'COMPASS_ORIENT2' not in fc_parameters" },
"COMPASS_DIA3_X": { "if": "'COMPASS_ORIENT3' not in fc_parameters" },
"COMPASS_DIA3_Y": { "if": "'COMPASS_ORIENT3' not in fc_parameters" },
"COMPASS_DIA3_Z": { "if": "'COMPASS_ORIENT3' not in fc_parameters" },
"COMPASS_MOT3_X": { "if": "'COMPASS_ORIENT3' not in fc_parameters" },
"COMPASS_MOT3_Y": { "if": "'COMPASS_ORIENT3' not in fc_parameters" },
"COMPASS_MOT3_Z": { "if": "'COMPASS_ORIENT3' not in fc_parameters" },
"COMPASS_ODI3_X": { "if": "'COMPASS_ORIENT3' not in fc_parameters" },
"COMPASS_ODI3_Y": { "if": "'COMPASS_ORIENT3' not in fc_parameters" },
"COMPASS_ODI3_Z": { "if": "'COMPASS_ORIENT3' not in fc_parameters" },
"COMPASS_OFS3_X": { "if": "'COMPASS_ORIENT3' not in fc_parameters" },
"COMPASS_OFS3_Y": { "if": "'COMPASS_ORIENT3' not in fc_parameters" },
"COMPASS_OFS3_Z": { "if": "'COMPASS_ORIENT3' not in fc_parameters" },
"COMPASS_ORIENT3": { "if": "'COMPASS_ORIENT3' not in fc_parameters" },
"COMPASS_SCALE3": { "if": "'COMPASS_ORIENT3' not in fc_parameters" }
},
"old_filenames": ["23_inflight_magnetometer_fit_results.param", "25_inflight_magnetometer_fit_results.param"]
},
"33_evaluate_the_aircraft_tune_ff_disable.param": {
"why": "Evaluating the aircraft's PID tuning and flight characteristics is best done with feed-forward disabled",
"why_now": "Before the autotune process to estimate if autotune can safely operate the vehicle",
"blog_text": "Evaluate the aircraft's tuning with feed-forward control disabled",
"blog_url": "https://ardupilot.github.io/MethodicConfigurator/TUNING_GUIDE_Heli#93-fifth-flight-evaluate-the-aircraft-tune---part-1",
"wiki_text": "Evaluating the aircraft tune",
"wiki_url": "https://ardupilot.org/copter/docs/evaluating-the-aircraft-tune.html#evaluating-the-aircraft-tune",
"external_tool_text": "",
"external_tool_url": "",
"mandatory_text": "80% mandatory (20% optional)",
"auto_changed_by": "",
"forced_parameters": {
"ATC_RATE_FF_ENAB": { "New Value": 0, "Change Reason": "test the stabilization loops independent of the input shaping" },
"INS_LOG_BAT_MASK": { "New Value": 0, "Change Reason": "IMU batch logging no longer required, notch filter setup is complete, this reduces processor load and log file size" },
"INS_RAW_LOG_OPT": { "New Value": 0, "Change Reason": "Gyro raw logging no longer required, notch filter setup is complete, this reduces processor load and log file size" },
"LOG_BITMASK": { "New Value": 145118, "Change Reason": "Disable fast harmonic notch logging" }
},
"add_parameters": {
"MOT_HOVER_LEARN": { "if": "vehicle_components['Frame']['Specifications']['TOW max Kg'] - vehicle_components['Frame']['Specifications']['TOW min Kg'] < 0.01*vehicle_components['Frame']['Specifications']['TOW max Kg']", "New Value": "1", "Change Reason": "The vehicle TOW weight does not change, so no need to save it" }
},
"old_filenames": ["26_evaluate_the_aircraft_tune_ff_disable.param", "28_evaluate_the_aircraft_tune_ff_disable.param"]
},
"34_evaluate_the_aircraft_tune_ff_enable.param": {
"why": "Evaluate the aircraft's PID tuning and flight characteristics with feed-forward enable to test faster dynamics",
"why_now": "Before the autotune process to estimate if autotune can safely operate the vehicle",
"blog_text": "Evaluate the aircraft's tuning with feed-forward control enabled",
"blog_url": "https://ardupilot.github.io/MethodicConfigurator/TUNING_GUIDE_Heli#94-sixth-flight-evaluate-the-aircraft-tune---part-2",
"wiki_text": "Evaluating the aircraft tune",
"wiki_url": "https://ardupilot.org/copter/docs/evaluating-the-aircraft-tune.html#evaluating-the-aircraft-tune",
"external_tool_text": "",
"external_tool_url": "",
"mandatory_text": "80% mandatory (20% optional)",
"auto_changed_by": "",
"forced_parameters": {
"ATC_RATE_FF_ENAB": { "New Value": 1, "Change Reason": "re-enable normal operation, activate input shaping" }
},
"old_filenames": ["27_evaluate_the_aircraft_tune_ff_enable.param", "29_evaluate_the_aircraft_tune_ff_enable.param"]
},
"35_autotune_roll_setup.param": {
"why": "To optimize roll step response.",
"why_now": "Because roll is usually the axis that has the highest dynamic, and we start with the highest dynamic axis",
"blog_text": "Set up parameters for the roll axis autotuning process",
"blog_url": "https://ardupilot.github.io/MethodicConfigurator/TUNING_GUIDE_Heli#951-roll-axis-autotune",
"wiki_text": "AutoTune",
"wiki_url": "https://ardupilot.org/copter/docs/autotune.html",
"external_tool_text": "",
"external_tool_url": "",
"mandatory_text": "80% mandatory (20% optional)",
"auto_changed_by": "",
"forced_parameters": {
"AUTOTUNE_AXES": { "New Value": 1, "Change Reason": "Autotune roll axis" }
},
"old_filenames": ["28_autotune_roll_setup.param", "30_autotune_roll_setup.param"]
},
"36_autotune_roll_results.param": {
"why": "To record autotune results after roll step response optimization",
"why_now": "Because roll is usually the axis that has the highest dynamic, and we start with the highest dynamic axis",
"blog_text": "Record the results of the roll axis autotuning, providing data for analysis and adjustment.",
"blog_url": "https://ardupilot.github.io/MethodicConfigurator/TUNING_GUIDE_Heli#951-roll-axis-autotune",
"wiki_text": "AutoTune",
"wiki_url": "https://ardupilot.org/copter/docs/autotune.html",
"external_tool_text": "ArduPilot PID Review Tool",
"external_tool_url": "https://firmware.ardupilot.org/Tools/WebTools/PIDReview/",
"mandatory_text": "80% mandatory (20% optional)",
"auto_changed_by": "ArduPilot autotune",
"old_filenames": ["29_autotune_roll_results.param", "31_autotune_roll_results.param"]
},
"37_autotune_pitch_setup.param": {
"why": "To optimize pitch step response.",
"why_now": "Because pitch is usually the axis that has the second highest dynamic, and we continue with the second highest dynamic axis",
"blog_text": "Set up parameters for the pitch axis autotuning process",
"blog_url": "https://ardupilot.github.io/MethodicConfigurator/TUNING_GUIDE_Heli#952-pitch-axis-autotune",
"wiki_text": "AutoTune",
"wiki_url": "https://ardupilot.org/copter/docs/autotune.html",
"external_tool_text": "",
"external_tool_url": "",
"mandatory_text": "80% mandatory (20% optional)",
"auto_changed_by": "",
"forced_parameters": {
"AUTOTUNE_AXES": { "New Value": 2, "Change Reason": "Autotune pitch axis" }
},
"old_filenames": ["30_autotune_pitch_setup.param", "32_autotune_pitch_setup.param"]
},
"38_autotune_pitch_results.param": {
"why": "To record autotune results after pitch step response optimization",
"why_now": "Because pitch is usually the axis that has the second highest dynamic, and we continue with the second highest dynamic axis",
"blog_text": "Record the results of the pitch axis autotuning",
"blog_url": "https://ardupilot.github.io/MethodicConfigurator/TUNING_GUIDE_Heli#952-pitch-axis-autotune",
"wiki_text": "AutoTune",
"wiki_url": "https://ardupilot.org/copter/docs/autotune.html",
"external_tool_text": "ArduPilot PID Review Tool",
"external_tool_url": "https://firmware.ardupilot.org/Tools/WebTools/PIDReview/",
"mandatory_text": "80% mandatory (20% optional)",
"auto_changed_by": "ArduPilot autotune",
"old_filenames": ["31_autotune_pitch_results.param", "33_autotune_pitch_results.param"]
},
"39_autotune_yaw_setup.param": {
"why": "To optimize yaw step response.",
"why_now": "Because yaw is usually the axis that has the third highest dynamic, and we continue with the third highest dynamic axis",
"blog_text": "Set up parameters for the yaw axis autotuning process",
"blog_url": "https://ardupilot.github.io/MethodicConfigurator/TUNING_GUIDE_Heli#953-yaw-axis-autotune",
"wiki_text": "AutoTune",
"wiki_url": "https://ardupilot.org/copter/docs/autotune.html",
"external_tool_text": "",
"external_tool_url": "",
"mandatory_text": "80% mandatory (20% optional)",
"auto_changed_by": "",
"forced_parameters": {
"AUTOTUNE_AXES": { "New Value": 4, "Change Reason": "Autotune yaw axis" }
},
"derived_parameters": {
"ATC_RAT_YAW_FLTD": { "New Value": "fc_parameters['INS_GYRO_FILTER'] / 4", "Change Reason": "Use INS_GYRO_FILTER / 4 as a first guess" }
},
"old_filenames": ["32_autotune_yaw_setup.param", "34_autotune_yaw_setup.param"]
},
"40_autotune_yaw_results.param": {
"why": "To record autotune results after yaw step response optimization",
"why_now": "Because yaw is usually the axis that has the third highest dynamic, and we continue with the third highest dynamic axis",
"blog_text": "Record the results of the yaw axis autotuning, providing data for analysis and adjustment.",
"blog_url": "https://ardupilot.github.io/MethodicConfigurator/TUNING_GUIDE_Heli#953-yaw-axis-autotune",
"wiki_text": "AutoTune",
"wiki_url": "https://ardupilot.org/copter/docs/autotune.html",
"external_tool_text": "ArduPilot PID Review Tool",
"external_tool_url": "https://firmware.ardupilot.org/Tools/WebTools/PIDReview/",
"mandatory_text": "80% mandatory (20% optional)",
"auto_changed_by": "ArduPilot autotune",
"old_filenames": ["33_autotune_yaw_results.param", "35_autotune_yaw_results.param"]
},
"41_autotune_yawd_setup.param": {
"why": "To optimize yaw D step response.",
"why_now": "Because yaw D can only be done after yaw",
"blog_text": "Set up parameters for the yaw rate autotuning process",
"blog_url": "https://ardupilot.github.io/MethodicConfigurator/TUNING_GUIDE_Heli#954-yaw-d-axis-autotune-optional",
"wiki_text": "AutoTune",
"wiki_url": "https://ardupilot.org/copter/docs/autotune.html",
"external_tool_text": "",
"external_tool_url": "",
"mandatory_text": "80% mandatory (20% optional)",
"auto_changed_by": "",
"forced_parameters": {
"AUTOTUNE_AXES": { "New Value": 8, "Change Reason": "Autotune yaw D axis" }
},
"old_filenames": ["34_autotune_yawd_setup.param", "36_autotune_yawd_setup.param"]
},
"42_autotune_yawd_results.param": {
"why": "To record autotune results after yaw D step response optimization",
"why_now": "Because yaw D can only be done after yaw",
"blog_text": "Record the results of the yaw rate autotuning",
"blog_url": "https://ardupilot.github.io/MethodicConfigurator/TUNING_GUIDE_Heli#954-yaw-d-axis-autotune-optional",
"wiki_text": "AutoTune",
"wiki_url": "https://ardupilot.org/copter/docs/autotune.html",
"external_tool_text": "ArduPilot PID Review Tool",
"external_tool_url": "https://firmware.ardupilot.org/Tools/WebTools/PIDReview/",
"mandatory_text": "80% mandatory (20% optional)",
"auto_changed_by": "ArduPilot autotune",
"old_filenames": ["35_autotune_yawd_results.param", "37_autotune_yawd_results.param"]
},
"43_autotune_roll_pitch_retune_setup.param": {
"why": "An even better result for roll and pitch will be achieved by re-autotuning an already (in all axis) autotuned vehicle",
"why_now": "Because it needs an initial autotune of all axis",
"blog_text": "Set up parameters for the roll and pitch axis retuning process",
"blog_url": "https://ardupilot.github.io/MethodicConfigurator/TUNING_GUIDE_Heli#955-roll-and-pitch-axis-re-autotune",
"wiki_text": "AutoTune",
"wiki_url": "https://ardupilot.org/copter/docs/autotune.html",
"external_tool_text": "",
"external_tool_url": "",
"mandatory_text": "80% mandatory (20% optional)",
"auto_changed_by": "",
"forced_parameters": {
"AUTOTUNE_AXES": { "New Value": 3, "Change Reason": "Autotune roll and pitch axis" }
},
"old_filenames": ["36_autotune_roll_pitch_retune_setup.param", "38_autotune_roll_pitch_retune_setup.param"]
},
"44_autotune_roll_pitch_retune_results.param": {
"why": "To record autotune roll-pitch results",
"why_now": "Because it can only be done after the respective autotune flight",
"blog_text": "Record the results of the roll and pitch axis retuning, providing data for analysis and adjustment.",
"blog_url": "https://ardupilot.github.io/MethodicConfigurator/TUNING_GUIDE_Heli#955-roll-and-pitch-axis-re-autotune",
"wiki_text": "AutoTune",
"wiki_url": "https://ardupilot.org/copter/docs/autotune.html",
"external_tool_text": "ArduPilot PID Review Tool",
"external_tool_url": "https://firmware.ardupilot.org/Tools/WebTools/PIDReview/",