Summary
This experiment investigates rc plane trim settings. Full factorial of elevator trim, aileron differential, throttle curve, and CG position to maximize flight time and handling score.
The design varies 4 factors: elevator pct (%), ranging from -5 to 5, aileron diff pct (%), ranging from 0 to 40, throttle curve (%), ranging from 50 to 100, and cg pct mac (%MAC), ranging from 25 to 35. The goal is to optimize 2 responses: flight time min (min) (maximize) and handling score (pts) (maximize). Fixed conditions held constant across all runs include model = trainer, wingspan = 1200mm.
A full factorial design was used to explore all 16 possible combinations of the 4 factors at two levels. This guarantees that every main effect and interaction can be estimated independently, at the cost of a larger experiment (16 runs).
Quadratic response surface models were fitted to capture potential curvature and factor interactions. The RSM contour plots below visualize how pairs of factors jointly affect each response.
Key Findings
For flight time min, the most influential factors were aileron diff pct (45.7%), cg pct mac (32.4%), elevator pct (21.1%). The best observed value was 14.5 (at elevator pct = -5, aileron diff pct = 0, throttle curve = 100).
For handling score, the most influential factors were elevator pct (58.0%), throttle curve (22.0%), aileron diff pct (18.0%). The best observed value was 6.9 (at elevator pct = 5, aileron diff pct = 0, throttle curve = 100).
Recommended Next Steps
- Consider whether any fixed factors should be varied in a future study.
Experimental Setup
Factors
| Factor | Low | High | Unit |
elevator_pct | -5 | 5 | % |
aileron_diff_pct | 0 | 40 | % |
throttle_curve | 50 | 100 | % |
cg_pct_mac | 25 | 35 | %MAC |
Fixed: model = trainer, wingspan = 1200mm
Responses
| Response | Direction | Unit |
flight_time_min | ↑ maximize | min |
handling_score | ↑ maximize | pts |
Configuration
{
"metadata": {
"name": "RC Plane Trim Settings",
"description": "Full factorial of elevator trim, aileron differential, throttle curve, and CG position to maximize flight time and handling score"
},
"factors": [
{
"name": "elevator_pct",
"levels": [
"-5",
"5"
],
"type": "continuous",
"unit": "%"
},
{
"name": "aileron_diff_pct",
"levels": [
"0",
"40"
],
"type": "continuous",
"unit": "%"
},
{
"name": "throttle_curve",
"levels": [
"50",
"100"
],
"type": "continuous",
"unit": "%"
},
{
"name": "cg_pct_mac",
"levels": [
"25",
"35"
],
"type": "continuous",
"unit": "%MAC"
}
],
"fixed_factors": {
"model": "trainer",
"wingspan": "1200mm"
},
"responses": [
{
"name": "flight_time_min",
"optimize": "maximize",
"unit": "min"
},
{
"name": "handling_score",
"optimize": "maximize",
"unit": "pts"
}
],
"settings": {
"operation": "full_factorial",
"test_script": "use_cases/263_rc_plane_trim/sim.sh"
}
}
Experimental Matrix
The Full Factorial Design produces 16 runs. Each row is one experiment with specific factor settings.
| Run | elevator_pct | aileron_diff_pct | throttle_curve | cg_pct_mac |
| 1 | -5 | 40 | 100 | 35 |
| 2 | 5 | 0 | 50 | 35 |
| 3 | -5 | 40 | 50 | 35 |
| 4 | -5 | 40 | 100 | 25 |
| 5 | 5 | 40 | 100 | 25 |
| 6 | 5 | 0 | 100 | 25 |
| 7 | 5 | 40 | 50 | 25 |
| 8 | 5 | 0 | 50 | 25 |
| 9 | -5 | 0 | 50 | 35 |
| 10 | -5 | 0 | 100 | 25 |
| 11 | 5 | 40 | 50 | 35 |
| 12 | 5 | 40 | 100 | 35 |
| 13 | -5 | 40 | 50 | 25 |
| 14 | 5 | 0 | 100 | 35 |
| 15 | -5 | 0 | 50 | 25 |
| 16 | -5 | 0 | 100 | 35 |
Step-by-Step Workflow
1
Preview the design
$ doe info --config use_cases/263_rc_plane_trim/config.json
2
Generate the runner script
$ doe generate --config use_cases/263_rc_plane_trim/config.json \
--output use_cases/263_rc_plane_trim/results/run.sh --seed 42
3
Execute the experiments
$ bash use_cases/263_rc_plane_trim/results/run.sh
4
Analyze results
$ doe analyze --config use_cases/263_rc_plane_trim/config.json
5
Get optimization recommendations
$ doe optimize --config use_cases/263_rc_plane_trim/config.json
6
Multi-objective optimization
With 2 competing responses, use --multi to find the best compromise via Derringer–Suich desirability.
$ doe optimize --config use_cases/263_rc_plane_trim/config.json --multi
7
Generate the HTML report
$ doe report --config use_cases/263_rc_plane_trim/config.json \
--output use_cases/263_rc_plane_trim/results/report.html
Features Exercised
| Feature | Value |
| Design type | full_factorial |
| Factor types | continuous (all 4) |
| Arg style | double-dash |
| Responses | 2 (flight_time_min ↑, handling_score ↑) |
| Total runs | 16 |
Analysis Results
Generated from actual experiment runs using the DOE Helper Tool.
Response: flight_time_min
Top factors: aileron_diff_pct (45.7%), cg_pct_mac (32.4%), elevator_pct (21.1%).
ANOVA
| Source | DF | SS | MS | F | p-value |
| Source | DF | SS | MS | F | p-value |
| elevator_pct | 1 | 3.9006 | 3.9006 | 0.786 | 0.4160 |
| aileron_diff_pct | 1 | 18.2756 | 18.2756 | 3.682 | 0.1131 |
| throttle_curve | 1 | 0.0056 | 0.0056 | 0.001 | 0.9744 |
| cg_pct_mac | 1 | 9.1506 | 9.1506 | 1.844 | 0.2326 |
| elevator_pct*aileron_diff_pct | 1 | 0.6806 | 0.6806 | 0.137 | 0.7263 |
| elevator_pct*throttle_curve | 1 | 2.3256 | 2.3256 | 0.469 | 0.5241 |
| elevator_pct*cg_pct_mac | 1 | 0.0156 | 0.0156 | 0.003 | 0.9574 |
| aileron_diff_pct*throttle_curve | 1 | 0.0056 | 0.0056 | 0.001 | 0.9744 |
| aileron_diff_pct*cg_pct_mac | 1 | 4.9506 | 4.9506 | 0.997 | 0.3638 |
| throttle_curve*cg_pct_mac | 1 | 13.1406 | 13.1406 | 2.647 | 0.1646 |
| Error | 5 | 24.8181 | 4.9636 | | |
| Total | 15 | 77.2694 | 5.1513 | | |
Pareto Chart
Main Effects Plot
Normal Probability Plot of Effects
Half-Normal Plot of Effects
Model Diagnostics
Response: handling_score
Top factors: elevator_pct (58.0%), throttle_curve (22.0%), aileron_diff_pct (18.0%).
ANOVA
| Source | DF | SS | MS | F | p-value |
| Source | DF | SS | MS | F | p-value |
| elevator_pct | 1 | 0.5256 | 0.5256 | 0.545 | 0.4934 |
| aileron_diff_pct | 1 | 0.0506 | 0.0506 | 0.053 | 0.8278 |
| throttle_curve | 1 | 0.0756 | 0.0756 | 0.078 | 0.7906 |
| cg_pct_mac | 1 | 0.0006 | 0.0006 | 0.001 | 0.9807 |
| elevator_pct*aileron_diff_pct | 1 | 3.7056 | 3.7056 | 3.846 | 0.1072 |
| elevator_pct*throttle_curve | 1 | 3.3306 | 3.3306 | 3.456 | 0.1221 |
| elevator_pct*cg_pct_mac | 1 | 2.3256 | 2.3256 | 2.413 | 0.1810 |
| aileron_diff_pct*throttle_curve | 1 | 0.2256 | 0.2256 | 0.234 | 0.6489 |
| aileron_diff_pct*cg_pct_mac | 1 | 0.3306 | 0.3306 | 0.343 | 0.5835 |
| throttle_curve*cg_pct_mac | 1 | 3.3306 | 3.3306 | 3.456 | 0.1221 |
| Error | 5 | 4.8181 | 0.9636 | | |
| Total | 15 | 18.7194 | 1.2480 | | |
Pareto Chart
Main Effects Plot
Normal Probability Plot of Effects
Half-Normal Plot of Effects
Model Diagnostics
Response Surface Plots
3D surfaces fitted with quadratic RSM. Red dots are observed data points.
flight time min aileron diff pct vs cg pct mac
flight time min aileron diff pct vs throttle curve
flight time min elevator pct vs aileron diff pct
flight time min elevator pct vs cg pct mac
flight time min elevator pct vs throttle curve
flight time min throttle curve vs cg pct mac
handling score aileron diff pct vs cg pct mac
handling score aileron diff pct vs throttle curve
handling score elevator pct vs aileron diff pct
handling score elevator pct vs cg pct mac
handling score elevator pct vs throttle curve
handling score throttle curve vs cg pct mac
Multi-Objective Optimization
When responses compete, Derringer–Suich desirability finds the best compromise.
Each response is scaled to a 0–1 desirability, then combined via a weighted geometric mean.
Overall Desirability
D = 0.8312
Per-Response Desirability
| Response | Weight | Desirability | Predicted | Dir |
flight_time_min |
1.0 |
|
14.50 0.9545 14.50 min |
↑ |
handling_score |
1.5 |
|
6.10 0.7580 6.10 pts |
↑ |
Recommended Settings
| Factor | Value |
elevator_pct | -5 % |
aileron_diff_pct | 0 % |
throttle_curve | 100 % |
cg_pct_mac | 35 %MAC |
Source: from observed run #13
Trade-off Summary
Sacrifice = how much worse than single-objective best.
| Response | Predicted | Best Observed | Sacrifice |
handling_score | 6.10 | 6.90 | +0.80 |
Top 3 Runs by Desirability
| Run | D | Factor Settings |
| #7 | 0.8159 | elevator_pct=5, aileron_diff_pct=40, throttle_curve=100, cg_pct_mac=25 |
| #15 | 0.6481 | elevator_pct=-5, aileron_diff_pct=40, throttle_curve=100, cg_pct_mac=25 |
Model Quality
| Response | R² | Type |
handling_score | 0.2192 | linear |
Full Multi-Objective Output
============================================================
MULTI-OBJECTIVE OPTIMIZATION
Method: Derringer-Suich Desirability Function
============================================================
Overall desirability: D = 0.8312
Response Weight Desirability Predicted Direction
---------------------------------------------------------------------
flight_time_min 1.0 0.9545 14.50 min ↑
handling_score 1.5 0.7580 6.10 pts ↑
Recommended settings:
elevator_pct = -5 %
aileron_diff_pct = 0 %
throttle_curve = 100 %
cg_pct_mac = 35 %MAC
(from observed run #13)
Trade-off summary:
flight_time_min: 14.50 (best observed: 14.50, sacrifice: +0.00)
handling_score: 6.10 (best observed: 6.90, sacrifice: +0.80)
Model quality:
flight_time_min: R² = 0.5152 (linear)
handling_score: R² = 0.2192 (linear)
Top 3 observed runs by overall desirability:
1. Run #13 (D=0.8312): elevator_pct=-5, aileron_diff_pct=0, throttle_curve=100, cg_pct_mac=35
2. Run #7 (D=0.8159): elevator_pct=5, aileron_diff_pct=40, throttle_curve=100, cg_pct_mac=25
3. Run #15 (D=0.6481): elevator_pct=-5, aileron_diff_pct=40, throttle_curve=100, cg_pct_mac=25
Full Analysis Output
=== Main Effects: flight_time_min ===
Factor Effect Std Error % Contribution
--------------------------------------------------------------
aileron_diff_pct -2.1375 0.5674 45.7%
cg_pct_mac -1.5125 0.5674 32.4%
elevator_pct 0.9875 0.5674 21.1%
throttle_curve 0.0375 0.5674 0.8%
=== ANOVA Table: flight_time_min ===
Source DF SS MS F p-value
-----------------------------------------------------------------------------
elevator_pct 1 3.9006 3.9006 0.786 0.4160
aileron_diff_pct 1 18.2756 18.2756 3.682 0.1131
throttle_curve 1 0.0056 0.0056 0.001 0.9744
cg_pct_mac 1 9.1506 9.1506 1.844 0.2326
elevator_pct*aileron_diff_pct 1 0.6806 0.6806 0.137 0.7263
elevator_pct*throttle_curve 1 2.3256 2.3256 0.469 0.5241
elevator_pct*cg_pct_mac 1 0.0156 0.0156 0.003 0.9574
aileron_diff_pct*throttle_curve 1 0.0056 0.0056 0.001 0.9744
aileron_diff_pct*cg_pct_mac 1 4.9506 4.9506 0.997 0.3638
throttle_curve*cg_pct_mac 1 13.1406 13.1406 2.647 0.1646
Error 5 24.8181 4.9636
Total 15 77.2694 5.1513
=== Interaction Effects: flight_time_min ===
Factor A Factor B Interaction % Contribution
------------------------------------------------------------------------
throttle_curve cg_pct_mac -1.8125 43.2%
aileron_diff_pct cg_pct_mac 1.1125 26.5%
elevator_pct throttle_curve -0.7625 18.2%
elevator_pct aileron_diff_pct 0.4125 9.8%
elevator_pct cg_pct_mac -0.0625 1.5%
aileron_diff_pct throttle_curve -0.0375 0.9%
=== Summary Statistics: flight_time_min ===
elevator_pct:
Level N Mean Std Min Max
------------------------------------------------------------
-5 8 11.2000 1.9712 9.0000 14.5000
5 8 12.1875 2.5682 8.9000 14.5000
aileron_diff_pct:
Level N Mean Std Min Max
------------------------------------------------------------
0 8 12.7625 2.0839 9.5000 14.5000
40 8 10.6250 2.0211 8.9000 14.3000
throttle_curve:
Level N Mean Std Min Max
------------------------------------------------------------
100 8 11.6750 2.1433 8.9000 14.2000
50 8 11.7125 2.5385 9.0000 14.5000
cg_pct_mac:
Level N Mean Std Min Max
------------------------------------------------------------
25 8 12.4500 2.3749 8.9000 14.5000
35 8 10.9375 2.0227 9.0000 14.0000
=== Main Effects: handling_score ===
Factor Effect Std Error % Contribution
--------------------------------------------------------------
elevator_pct -0.3625 0.2793 58.0%
throttle_curve 0.1375 0.2793 22.0%
aileron_diff_pct -0.1125 0.2793 18.0%
cg_pct_mac -0.0125 0.2793 2.0%
=== ANOVA Table: handling_score ===
Source DF SS MS F p-value
-----------------------------------------------------------------------------
elevator_pct 1 0.5256 0.5256 0.545 0.4934
aileron_diff_pct 1 0.0506 0.0506 0.053 0.8278
throttle_curve 1 0.0756 0.0756 0.078 0.7906
cg_pct_mac 1 0.0006 0.0006 0.001 0.9807
elevator_pct*aileron_diff_pct 1 3.7056 3.7056 3.846 0.1072
elevator_pct*throttle_curve 1 3.3306 3.3306 3.456 0.1221
elevator_pct*cg_pct_mac 1 2.3256 2.3256 2.413 0.1810
aileron_diff_pct*throttle_curve 1 0.2256 0.2256 0.234 0.6489
aileron_diff_pct*cg_pct_mac 1 0.3306 0.3306 0.343 0.5835
throttle_curve*cg_pct_mac 1 3.3306 3.3306 3.456 0.1221
Error 5 4.8181 0.9636
Total 15 18.7194 1.2480
=== Interaction Effects: handling_score ===
Factor A Factor B Interaction % Contribution
------------------------------------------------------------------------
elevator_pct aileron_diff_pct 0.9625 23.6%
elevator_pct throttle_curve 0.9125 22.4%
throttle_curve cg_pct_mac 0.9125 22.4%
elevator_pct cg_pct_mac 0.7625 18.7%
aileron_diff_pct cg_pct_mac -0.2875 7.1%
aileron_diff_pct throttle_curve -0.2375 5.8%
=== Summary Statistics: handling_score ===
elevator_pct:
Level N Mean Std Min Max
------------------------------------------------------------
-5 8 5.3375 1.1288 3.5000 6.7000
5 8 4.9750 1.1511 3.2000 6.9000
aileron_diff_pct:
Level N Mean Std Min Max
------------------------------------------------------------
0 8 5.2125 1.0494 3.2000 6.6000
40 8 5.1000 1.2513 3.5000 6.9000
throttle_curve:
Level N Mean Std Min Max
------------------------------------------------------------
100 8 5.0875 1.2484 3.2000 6.7000
50 8 5.2250 1.0512 3.5000 6.9000
cg_pct_mac:
Level N Mean Std Min Max
------------------------------------------------------------
25 8 5.1625 1.3522 3.2000 6.7000
35 8 5.1500 0.9196 3.9000 6.9000
Optimization Recommendations
=== Optimization: flight_time_min ===
Direction: maximize
Best observed run: #3
elevator_pct = -5
aileron_diff_pct = 0
throttle_curve = 100
cg_pct_mac = 25
Value: 14.5
RSM Model (linear, R² = 0.0649, Adj R² = -0.2751):
Coefficients:
intercept +11.6938
elevator_pct -0.4187
aileron_diff_pct +0.0062
throttle_curve -0.1062
cg_pct_mac +0.3562
RSM Model (quadratic, R² = 0.8601, Adj R² = -1.0981):
Coefficients:
intercept +2.3388
elevator_pct -0.4188
aileron_diff_pct +0.0062
throttle_curve -0.1062
cg_pct_mac +0.3562
elevator_pct*aileron_diff_pct +0.5437
elevator_pct*throttle_curve -0.3938
elevator_pct*cg_pct_mac +1.2438
aileron_diff_pct*throttle_curve +0.8312
aileron_diff_pct*cg_pct_mac +0.8188
throttle_curve*cg_pct_mac -0.6938
elevator_pct^2 +2.3388
aileron_diff_pct^2 +2.3388
throttle_curve^2 +2.3388
cg_pct_mac^2 +2.3388
Curvature analysis:
elevator_pct coef=+2.3388 convex (has a minimum)
aileron_diff_pct coef=+2.3388 convex (has a minimum)
throttle_curve coef=+2.3388 convex (has a minimum)
cg_pct_mac coef=+2.3388 convex (has a minimum)
Notable interactions:
elevator_pct*cg_pct_mac coef=+1.2438 (synergistic)
aileron_diff_pct*throttle_curve coef=+0.8312 (synergistic)
aileron_diff_pct*cg_pct_mac coef=+0.8188 (synergistic)
throttle_curve*cg_pct_mac coef=-0.6938 (antagonistic)
elevator_pct*aileron_diff_pct coef=+0.5437 (synergistic)
elevator_pct*throttle_curve coef=-0.3938 (antagonistic)
Predicted optimum (from linear model, at observed points):
elevator_pct = -5
aileron_diff_pct = 40
throttle_curve = 50
cg_pct_mac = 35
Predicted value: 12.5813
Surface optimum (via L-BFGS-B, linear model):
elevator_pct = -5
aileron_diff_pct = 40
throttle_curve = 50
cg_pct_mac = 35
Predicted value: 12.5813
Model quality: Weak fit — consider adding center points or using a different design.
Factor importance:
1. elevator_pct (effect: -0.8, contribution: 47.2%)
2. cg_pct_mac (effect: 0.7, contribution: 40.1%)
3. throttle_curve (effect: 0.2, contribution: 12.0%)
4. aileron_diff_pct (effect: 0.0, contribution: 0.7%)
=== Optimization: handling_score ===
Direction: maximize
Best observed run: #5
elevator_pct = 5
aileron_diff_pct = 0
throttle_curve = 100
cg_pct_mac = 35
Value: 6.9
RSM Model (linear, R² = 0.0642, Adj R² = -0.2760):
Coefficients:
intercept +5.1563
elevator_pct -0.1437
aileron_diff_pct -0.1813
throttle_curve +0.1438
cg_pct_mac +0.0312
RSM Model (quadratic, R² = 0.7621, Adj R² = -2.5683):
Coefficients:
intercept +1.0312
elevator_pct -0.1438
aileron_diff_pct -0.1813
throttle_curve +0.1438
cg_pct_mac +0.0313
elevator_pct*aileron_diff_pct -0.0563
elevator_pct*throttle_curve +0.2938
elevator_pct*cg_pct_mac +0.0063
aileron_diff_pct*throttle_curve +0.1562
aileron_diff_pct*cg_pct_mac -0.4313
throttle_curve*cg_pct_mac +0.7187
elevator_pct^2 +1.0313
aileron_diff_pct^2 +1.0312
throttle_curve^2 +1.0312
cg_pct_mac^2 +1.0312
Curvature analysis:
elevator_pct coef=+1.0313 convex (has a minimum)
aileron_diff_pct coef=+1.0312 convex (has a minimum)
throttle_curve coef=+1.0312 convex (has a minimum)
cg_pct_mac coef=+1.0312 convex (has a minimum)
Notable interactions:
throttle_curve*cg_pct_mac coef=+0.7187 (synergistic)
aileron_diff_pct*cg_pct_mac coef=-0.4313 (antagonistic)
Predicted optimum (from linear model, at observed points):
elevator_pct = -5
aileron_diff_pct = 0
throttle_curve = 100
cg_pct_mac = 35
Predicted value: 5.6563
Surface optimum (via L-BFGS-B, linear model):
elevator_pct = -5
aileron_diff_pct = 0
throttle_curve = 100
cg_pct_mac = 35
Predicted value: 5.6563
Model quality: Weak fit — consider adding center points or using a different design.
Factor importance:
1. aileron_diff_pct (effect: -0.4, contribution: 36.3%)
2. elevator_pct (effect: -0.3, contribution: 28.7%)
3. throttle_curve (effect: -0.3, contribution: 28.7%)
4. cg_pct_mac (effect: 0.1, contribution: 6.2%)