Summary
This experiment investigates drone aerial photography. Full factorial of altitude, gimbal angle, flight speed, and overlap percentage to maximize ground resolution and minimize motion blur.
The design varies 4 factors: altitude m (m), ranging from 30 to 120, gimbal angle (deg), ranging from -90 to -45, flight speed (m/s), ranging from 2 to 12, and overlap pct (%), ranging from 60 to 85. The goal is to optimize 2 responses: gsd cm (cm/px) (minimize) and blur score (pts) (minimize). Fixed conditions held constant across all runs include camera = 1inch_sensor, wind = light.
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 gsd cm, the most influential factors were altitude m (47.6%), flight speed (26.0%), overlap pct (24.4%). The best observed value was 0.3 (at altitude m = 30, gimbal angle = -90, flight speed = 12).
For blur score, the most influential factors were gimbal angle (36.8%), flight speed (31.6%), altitude m (30.7%). The best observed value was 1.1 (at altitude m = 120, gimbal angle = -45, flight speed = 2).
Recommended Next Steps
- Consider whether any fixed factors should be varied in a future study.
Experimental Setup
Factors
| Factor | Low | High | Unit |
altitude_m | 30 | 120 | m |
gimbal_angle | -90 | -45 | deg |
flight_speed | 2 | 12 | m/s |
overlap_pct | 60 | 85 | % |
Fixed: camera = 1inch_sensor, wind = light
Responses
| Response | Direction | Unit |
gsd_cm | ↓ minimize | cm/px |
blur_score | ↓ minimize | pts |
Configuration
{
"metadata": {
"name": "Drone Aerial Photography",
"description": "Full factorial of altitude, gimbal angle, flight speed, and overlap percentage to maximize ground resolution and minimize motion blur"
},
"factors": [
{
"name": "altitude_m",
"levels": [
"30",
"120"
],
"type": "continuous",
"unit": "m"
},
{
"name": "gimbal_angle",
"levels": [
"-90",
"-45"
],
"type": "continuous",
"unit": "deg"
},
{
"name": "flight_speed",
"levels": [
"2",
"12"
],
"type": "continuous",
"unit": "m/s"
},
{
"name": "overlap_pct",
"levels": [
"60",
"85"
],
"type": "continuous",
"unit": "%"
}
],
"fixed_factors": {
"camera": "1inch_sensor",
"wind": "light"
},
"responses": [
{
"name": "gsd_cm",
"optimize": "minimize",
"unit": "cm/px"
},
{
"name": "blur_score",
"optimize": "minimize",
"unit": "pts"
}
],
"settings": {
"operation": "full_factorial",
"test_script": "use_cases/154_drone_aerial_photo/sim.sh"
}
}
Experimental Matrix
The Full Factorial Design produces 16 runs. Each row is one experiment with specific factor settings.
| Run | altitude_m | gimbal_angle | flight_speed | overlap_pct |
| 1 | 30 | -45 | 12 | 85 |
| 2 | 120 | -90 | 2 | 85 |
| 3 | 30 | -45 | 2 | 85 |
| 4 | 30 | -45 | 12 | 60 |
| 5 | 120 | -45 | 12 | 60 |
| 6 | 120 | -90 | 12 | 60 |
| 7 | 120 | -45 | 2 | 60 |
| 8 | 120 | -90 | 2 | 60 |
| 9 | 30 | -90 | 2 | 85 |
| 10 | 30 | -90 | 12 | 60 |
| 11 | 120 | -45 | 2 | 85 |
| 12 | 120 | -45 | 12 | 85 |
| 13 | 30 | -45 | 2 | 60 |
| 14 | 120 | -90 | 12 | 85 |
| 15 | 30 | -90 | 2 | 60 |
| 16 | 30 | -90 | 12 | 85 |
Step-by-Step Workflow
1
Preview the design
$ doe info --config use_cases/154_drone_aerial_photo/config.json
2
Generate the runner script
$ doe generate --config use_cases/154_drone_aerial_photo/config.json \
--output use_cases/154_drone_aerial_photo/results/run.sh --seed 42
3
Execute the experiments
$ bash use_cases/154_drone_aerial_photo/results/run.sh
4
Analyze results
$ doe analyze --config use_cases/154_drone_aerial_photo/config.json
5
Get optimization recommendations
$ doe optimize --config use_cases/154_drone_aerial_photo/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/154_drone_aerial_photo/config.json --multi
7
Generate the HTML report
$ doe report --config use_cases/154_drone_aerial_photo/config.json \
--output use_cases/154_drone_aerial_photo/results/report.html
Features Exercised
| Feature | Value |
| Design type | full_factorial |
| Factor types | continuous (all 4) |
| Arg style | double-dash |
| Responses | 2 (gsd_cm ↓, blur_score ↓) |
| Total runs | 16 |
Analysis Results
Generated from actual experiment runs using the DOE Helper Tool.
Response: gsd_cm
Top factors: altitude_m (47.6%), flight_speed (26.0%), overlap_pct (24.4%).
ANOVA
| Source | DF | SS | MS | F | p-value |
| Source | DF | SS | MS | F | p-value |
| altitude_m | 1 | 8.8506 | 8.8506 | 5.958 | 0.0586 |
| gimbal_angle | 1 | 0.0156 | 0.0156 | 0.011 | 0.9223 |
| flight_speed | 1 | 2.6406 | 2.6406 | 1.777 | 0.2400 |
| overlap_pct | 1 | 2.3256 | 2.3256 | 1.565 | 0.2662 |
| altitude_m*gimbal_angle | 1 | 0.0156 | 0.0156 | 0.011 | 0.9223 |
| altitude_m*flight_speed | 1 | 2.4806 | 2.4806 | 1.670 | 0.2528 |
| altitude_m*overlap_pct | 1 | 0.3306 | 0.3306 | 0.223 | 0.6570 |
| gimbal_angle*flight_speed | 1 | 2.6406 | 2.6406 | 1.777 | 0.2400 |
| gimbal_angle*overlap_pct | 1 | 3.1506 | 3.1506 | 2.121 | 0.2051 |
| flight_speed*overlap_pct | 1 | 10.7256 | 10.7256 | 7.220 | 0.0435 |
| Error | 5 | 7.4281 | 1.4856 | | |
| Total | 15 | 40.6044 | 2.7070 | | |
Pareto Chart
Main Effects Plot
Normal Probability Plot of Effects
Half-Normal Plot of Effects
Model Diagnostics
Response: blur_score
Top factors: gimbal_angle (36.8%), flight_speed (31.6%), altitude_m (30.7%).
ANOVA
| Source | DF | SS | MS | F | p-value |
| Source | DF | SS | MS | F | p-value |
| altitude_m | 1 | 3.0625 | 3.0625 | 1.205 | 0.3224 |
| gimbal_angle | 1 | 4.4100 | 4.4100 | 1.735 | 0.2449 |
| flight_speed | 1 | 3.2400 | 3.2400 | 1.275 | 0.3101 |
| overlap_pct | 1 | 0.0025 | 0.0025 | 0.001 | 0.9762 |
| altitude_m*gimbal_angle | 1 | 1.6900 | 1.6900 | 0.665 | 0.4519 |
| altitude_m*flight_speed | 1 | 1.0000 | 1.0000 | 0.393 | 0.5580 |
| altitude_m*overlap_pct | 1 | 0.0225 | 0.0225 | 0.009 | 0.9287 |
| gimbal_angle*flight_speed | 1 | 9.9225 | 9.9225 | 3.904 | 0.1051 |
| gimbal_angle*overlap_pct | 1 | 4.0000 | 4.0000 | 1.574 | 0.2651 |
| flight_speed*overlap_pct | 1 | 1.4400 | 1.4400 | 0.567 | 0.4855 |
| Error | 5 | 12.7075 | 2.5415 | | |
| Total | 15 | 41.4975 | 2.7665 | | |
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.
blur score altitude m vs flight speed
blur score altitude m vs gimbal angle
blur score altitude m vs overlap pct
blur score flight speed vs overlap pct
blur score gimbal angle vs flight speed
blur score gimbal angle vs overlap pct
gsd cm altitude m vs flight speed
gsd cm altitude m vs gimbal angle
gsd cm altitude m vs overlap pct
gsd cm flight speed vs overlap pct
gsd cm gimbal angle vs flight speed
gsd cm gimbal angle vs overlap pct
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.8923
Per-Response Desirability
| Response | Weight | Desirability | Predicted | Dir |
gsd_cm |
1.0 |
|
1.00 0.8066 1.00 cm/px |
↓ |
blur_score |
1.5 |
|
1.10 0.9545 1.10 pts |
↓ |
Recommended Settings
| Factor | Value |
altitude_m | 30 m |
gimbal_angle | -45 deg |
flight_speed | 2 m/s |
overlap_pct | 85 % |
Source: from observed run #3
Trade-off Summary
Sacrifice = how much worse than single-objective best.
| Response | Predicted | Best Observed | Sacrifice |
blur_score | 1.10 | 1.10 | +0.00 |
Top 3 Runs by Desirability
| Run | D | Factor Settings |
| #9 | 0.8459 | altitude_m=120, gimbal_angle=-90, flight_speed=2, overlap_pct=60 |
| #13 | 0.8424 | altitude_m=120, gimbal_angle=-45, flight_speed=2, overlap_pct=60 |
Model Quality
| Response | R² | Type |
blur_score | 0.3544 | linear |
Full Multi-Objective Output
============================================================
MULTI-OBJECTIVE OPTIMIZATION
Method: Derringer-Suich Desirability Function
============================================================
Overall desirability: D = 0.8923
Response Weight Desirability Predicted Direction
---------------------------------------------------------------------
gsd_cm 1.0 0.8066 1.00 cm/px ↓
blur_score 1.5 0.9545 1.10 pts ↓
Recommended settings:
altitude_m = 30 m
gimbal_angle = -45 deg
flight_speed = 2 m/s
overlap_pct = 85 %
(from observed run #3)
Trade-off summary:
gsd_cm: 1.00 (best observed: 0.30, sacrifice: +0.70)
blur_score: 1.10 (best observed: 1.10, sacrifice: +0.00)
Model quality:
gsd_cm: R² = 0.7937 (linear)
blur_score: R² = 0.3544 (linear)
Top 3 observed runs by overall desirability:
1. Run #3 (D=0.8923): altitude_m=30, gimbal_angle=-45, flight_speed=2, overlap_pct=85
2. Run #9 (D=0.8459): altitude_m=120, gimbal_angle=-90, flight_speed=2, overlap_pct=60
3. Run #13 (D=0.8424): altitude_m=120, gimbal_angle=-45, flight_speed=2, overlap_pct=60
Full Analysis Output
=== Main Effects: gsd_cm ===
Factor Effect Std Error % Contribution
--------------------------------------------------------------
altitude_m -1.4875 0.4113 47.6%
flight_speed -0.8125 0.4113 26.0%
overlap_pct 0.7625 0.4113 24.4%
gimbal_angle 0.0625 0.4113 2.0%
=== ANOVA Table: gsd_cm ===
Source DF SS MS F p-value
-----------------------------------------------------------------------------
altitude_m 1 8.8506 8.8506 5.958 0.0586
gimbal_angle 1 0.0156 0.0156 0.011 0.9223
flight_speed 1 2.6406 2.6406 1.777 0.2400
overlap_pct 1 2.3256 2.3256 1.565 0.2662
altitude_m*gimbal_angle 1 0.0156 0.0156 0.011 0.9223
altitude_m*flight_speed 1 2.4806 2.4806 1.670 0.2528
altitude_m*overlap_pct 1 0.3306 0.3306 0.223 0.6570
gimbal_angle*flight_speed 1 2.6406 2.6406 1.777 0.2400
gimbal_angle*overlap_pct 1 3.1506 3.1506 2.121 0.2051
flight_speed*overlap_pct 1 10.7256 10.7256 7.220 0.0435
Error 5 7.4281 1.4856
Total 15 40.6044 2.7070
=== Interaction Effects: gsd_cm ===
Factor A Factor B Interaction % Contribution
------------------------------------------------------------------------
flight_speed overlap_pct -1.6375 36.6%
gimbal_angle overlap_pct 0.8875 19.8%
gimbal_angle flight_speed 0.8125 18.2%
altitude_m flight_speed -0.7875 17.6%
altitude_m overlap_pct 0.2875 6.4%
altitude_m gimbal_angle -0.0625 1.4%
=== Summary Statistics: gsd_cm ===
altitude_m:
Level N Mean Std Min Max
------------------------------------------------------------
120 8 3.2625 1.7361 0.3000 4.6000
30 8 1.7750 1.2338 0.7000 4.1000
gimbal_angle:
Level N Mean Std Min Max
------------------------------------------------------------
-45 8 2.4875 1.5189 0.7000 4.6000
-90 8 2.5500 1.8685 0.3000 4.5000
flight_speed:
Level N Mean Std Min Max
------------------------------------------------------------
12 8 2.9250 1.6342 0.3000 4.6000
2 8 2.1125 1.6591 0.7000 4.3000
overlap_pct:
Level N Mean Std Min Max
------------------------------------------------------------
60 8 2.1375 1.5408 0.3000 4.3000
85 8 2.9000 1.7591 0.7000 4.6000
=== Main Effects: blur_score ===
Factor Effect Std Error % Contribution
--------------------------------------------------------------
gimbal_angle -1.0500 0.4158 36.8%
flight_speed 0.9000 0.4158 31.6%
altitude_m -0.8750 0.4158 30.7%
overlap_pct -0.0250 0.4158 0.9%
=== ANOVA Table: blur_score ===
Source DF SS MS F p-value
-----------------------------------------------------------------------------
altitude_m 1 3.0625 3.0625 1.205 0.3224
gimbal_angle 1 4.4100 4.4100 1.735 0.2449
flight_speed 1 3.2400 3.2400 1.275 0.3101
overlap_pct 1 0.0025 0.0025 0.001 0.9762
altitude_m*gimbal_angle 1 1.6900 1.6900 0.665 0.4519
altitude_m*flight_speed 1 1.0000 1.0000 0.393 0.5580
altitude_m*overlap_pct 1 0.0225 0.0225 0.009 0.9287
gimbal_angle*flight_speed 1 9.9225 9.9225 3.904 0.1051
gimbal_angle*overlap_pct 1 4.0000 4.0000 1.574 0.2651
flight_speed*overlap_pct 1 1.4400 1.4400 0.567 0.4855
Error 5 12.7075 2.5415
Total 15 41.4975 2.7665
=== Interaction Effects: blur_score ===
Factor A Factor B Interaction % Contribution
------------------------------------------------------------------------
gimbal_angle flight_speed 1.5750 35.8%
gimbal_angle overlap_pct 1.0000 22.7%
altitude_m gimbal_angle -0.6500 14.8%
flight_speed overlap_pct 0.6000 13.6%
altitude_m flight_speed 0.5000 11.4%
altitude_m overlap_pct -0.0750 1.7%
=== Summary Statistics: blur_score ===
altitude_m:
Level N Mean Std Min Max
------------------------------------------------------------
120 8 3.7250 1.6909 1.6000 5.8000
30 8 2.8500 1.6222 1.1000 5.2000
gimbal_angle:
Level N Mean Std Min Max
------------------------------------------------------------
-45 8 3.8125 1.3174 2.1000 5.3000
-90 8 2.7625 1.8875 1.1000 5.8000
flight_speed:
Level N Mean Std Min Max
------------------------------------------------------------
12 8 2.8375 1.7246 1.2000 5.3000
2 8 3.7375 1.5784 1.1000 5.8000
overlap_pct:
Level N Mean Std Min Max
------------------------------------------------------------
60 8 3.3000 1.7254 1.1000 5.3000
85 8 3.2750 1.7178 1.2000 5.8000
Optimization Recommendations
=== Optimization: gsd_cm ===
Direction: minimize
Best observed run: #9
altitude_m = 30
gimbal_angle = -90
flight_speed = 12
overlap_pct = 85
Value: 0.3
RSM Model (linear, R² = 0.0427, Adj R² = -0.3055):
Coefficients:
intercept +2.5188
altitude_m +0.1688
gimbal_angle +0.0813
flight_speed -0.0312
overlap_pct +0.2688
RSM Model (quadratic, R² = 0.3102, Adj R² = -9.3467):
Coefficients:
intercept +0.5038
altitude_m +0.1687
gimbal_angle +0.0813
flight_speed -0.0312
overlap_pct +0.2688
altitude_m*gimbal_angle -0.0688
altitude_m*flight_speed +0.0938
altitude_m*overlap_pct +0.5938
gimbal_angle*flight_speed +0.0563
gimbal_angle*overlap_pct +0.2313
flight_speed*overlap_pct -0.5062
altitude_m^2 +0.5038
gimbal_angle^2 +0.5038
flight_speed^2 +0.5038
overlap_pct^2 +0.5038
Curvature analysis:
altitude_m coef=+0.5038 convex (has a minimum)
gimbal_angle coef=+0.5038 convex (has a minimum)
flight_speed coef=+0.5038 convex (has a minimum)
overlap_pct coef=+0.5038 convex (has a minimum)
Notable interactions:
altitude_m*overlap_pct coef=+0.5938 (synergistic)
flight_speed*overlap_pct coef=-0.5062 (antagonistic)
Predicted optimum (from linear model, at observed points):
altitude_m = 120
gimbal_angle = -45
flight_speed = 2
overlap_pct = 85
Predicted value: 3.0688
Surface optimum (via L-BFGS-B, linear model):
altitude_m = 30
gimbal_angle = -90
flight_speed = 12
overlap_pct = 60
Predicted value: 1.9688
Model quality: Weak fit — consider adding center points or using a different design.
Factor importance:
1. overlap_pct (effect: 0.5, contribution: 48.9%)
2. altitude_m (effect: -0.3, contribution: 30.7%)
3. gimbal_angle (effect: -0.2, contribution: 14.8%)
4. flight_speed (effect: 0.1, contribution: 5.7%)
=== Optimization: blur_score ===
Direction: minimize
Best observed run: #3
altitude_m = 120
gimbal_angle = -45
flight_speed = 2
overlap_pct = 60
Value: 1.1
RSM Model (linear, R² = 0.2958, Adj R² = 0.0397):
Coefficients:
intercept +3.2875
altitude_m +0.4000
gimbal_angle -0.5125
flight_speed +0.2625
overlap_pct +0.5250
RSM Model (quadratic, R² = 0.8875, Adj R² = -0.6871):
Coefficients:
intercept +0.6575
altitude_m +0.4000
gimbal_angle -0.5125
flight_speed +0.2625
overlap_pct +0.5250
altitude_m*gimbal_angle -0.1750
altitude_m*flight_speed -0.2000
altitude_m*overlap_pct +0.5875
gimbal_angle*flight_speed -0.2375
gimbal_angle*overlap_pct +0.2500
flight_speed*overlap_pct -1.0000
altitude_m^2 +0.6575
gimbal_angle^2 +0.6575
flight_speed^2 +0.6575
overlap_pct^2 +0.6575
Curvature analysis:
altitude_m coef=+0.6575 convex (has a minimum)
gimbal_angle coef=+0.6575 convex (has a minimum)
overlap_pct coef=+0.6575 convex (has a minimum)
flight_speed coef=+0.6575 convex (has a minimum)
Notable interactions:
flight_speed*overlap_pct coef=-1.0000 (antagonistic)
altitude_m*overlap_pct coef=+0.5875 (synergistic)
Predicted optimum (from linear model, at observed points):
altitude_m = 120
gimbal_angle = -90
flight_speed = 12
overlap_pct = 85
Predicted value: 4.9875
Surface optimum (via L-BFGS-B, linear model):
altitude_m = 30
gimbal_angle = -45
flight_speed = 2
overlap_pct = 60
Predicted value: 1.5875
Model quality: Weak fit — consider adding center points or using a different design.
Factor importance:
1. overlap_pct (effect: 1.0, contribution: 30.9%)
2. gimbal_angle (effect: 1.0, contribution: 30.1%)
3. altitude_m (effect: -0.8, contribution: 23.5%)
4. flight_speed (effect: -0.5, contribution: 15.4%)