← All Use Cases
📷
Full Factorial Design

Drone Aerial Photography

Full factorial of altitude, gimbal angle, flight speed, and overlap percentage to maximize ground resolution and minimize motion blur

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

Experimental Setup

Factors

FactorLowHighUnit
altitude_m30120m
gimbal_angle-90-45deg
flight_speed212m/s
overlap_pct6085%

Fixed: camera = 1inch_sensor, wind = light

Responses

ResponseDirectionUnit
gsd_cm↓ minimizecm/px
blur_score↓ minimizepts

Configuration

use_cases/154_drone_aerial_photo/config.json
{ "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.

Runaltitude_mgimbal_angleflight_speedoverlap_pct
130-451285
2120-90285
330-45285
430-451260
5120-451260
6120-901260
7120-45260
8120-90260
930-90285
1030-901260
11120-45285
12120-451285
1330-45260
14120-901285
1530-90260
1630-901285

Step-by-Step Workflow

1

Preview the design

Terminal
$ doe info --config use_cases/154_drone_aerial_photo/config.json
2

Generate the runner script

Terminal
$ 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

Terminal
$ bash use_cases/154_drone_aerial_photo/results/run.sh
4

Analyze results

Terminal
$ doe analyze --config use_cases/154_drone_aerial_photo/config.json
5

Get optimization recommendations

Terminal
$ 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.

Terminal
$ doe optimize --config use_cases/154_drone_aerial_photo/config.json --multi
7

Generate the HTML report

Terminal
$ doe report --config use_cases/154_drone_aerial_photo/config.json \ --output use_cases/154_drone_aerial_photo/results/report.html

Features Exercised

FeatureValue
Design typefull_factorial
Factor typescontinuous (all 4)
Arg styledouble-dash
Responses2 (gsd_cm ↓, blur_score ↓)
Total runs16

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

SourceDFSSMSFp-value
SourceDFSSMSFp-value
altitude_m18.85068.85065.9580.0586
gimbal_angle10.01560.01560.0110.9223
flight_speed12.64062.64061.7770.2400
overlap_pct12.32562.32561.5650.2662
altitude_m*gimbal_angle10.01560.01560.0110.9223
altitude_m*flight_speed12.48062.48061.6700.2528
altitude_m*overlap_pct10.33060.33060.2230.6570
gimbal_angle*flight_speed12.64062.64061.7770.2400
gimbal_angle*overlap_pct13.15063.15062.1210.2051
flight_speed*overlap_pct110.725610.72567.2200.0435
Error57.42811.4856
Total1540.60442.7070

Pareto Chart

Pareto chart for gsd_cm

Main Effects Plot

Main effects plot for gsd_cm

Normal Probability Plot of Effects

Normal probability plot for gsd_cm

Half-Normal Plot of Effects

Half-normal plot for gsd_cm

Model Diagnostics

Model diagnostics for gsd_cm

Response: blur_score

Top factors: gimbal_angle (36.8%), flight_speed (31.6%), altitude_m (30.7%).

ANOVA

SourceDFSSMSFp-value
SourceDFSSMSFp-value
altitude_m13.06253.06251.2050.3224
gimbal_angle14.41004.41001.7350.2449
flight_speed13.24003.24001.2750.3101
overlap_pct10.00250.00250.0010.9762
altitude_m*gimbal_angle11.69001.69000.6650.4519
altitude_m*flight_speed11.00001.00000.3930.5580
altitude_m*overlap_pct10.02250.02250.0090.9287
gimbal_angle*flight_speed19.92259.92253.9040.1051
gimbal_angle*overlap_pct14.00004.00001.5740.2651
flight_speed*overlap_pct11.44001.44000.5670.4855
Error512.70752.5415
Total1541.49752.7665

Pareto Chart

Pareto chart for blur_score

Main Effects Plot

Main effects plot for blur_score

Normal Probability Plot of Effects

Normal probability plot for blur_score

Half-Normal Plot of Effects

Half-normal plot for blur_score

Model Diagnostics

Model diagnostics for blur_score

Response Surface Plots

3D surfaces fitted with quadratic RSM. Red dots are observed data points.

blur score altitude m vs flight speed

RSM surface: blur score altitude m vs flight speed

blur score altitude m vs gimbal angle

RSM surface: blur score altitude m vs gimbal angle

blur score altitude m vs overlap pct

RSM surface: blur score altitude m vs overlap pct

blur score flight speed vs overlap pct

RSM surface: blur score flight speed vs overlap pct

blur score gimbal angle vs flight speed

RSM surface: blur score gimbal angle vs flight speed

blur score gimbal angle vs overlap pct

RSM surface: blur score gimbal angle vs overlap pct

gsd cm altitude m vs flight speed

RSM surface: gsd cm altitude m vs flight speed

gsd cm altitude m vs gimbal angle

RSM surface: gsd cm altitude m vs gimbal angle

gsd cm altitude m vs overlap pct

RSM surface: gsd cm altitude m vs overlap pct

gsd cm flight speed vs overlap pct

RSM surface: gsd cm flight speed vs overlap pct

gsd cm gimbal angle vs flight speed

RSM surface: gsd cm gimbal angle vs flight speed

gsd cm gimbal angle vs overlap pct

RSM surface: 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

ResponseWeightDesirabilityPredictedDir
gsd_cm 1.0
0.8066
1.00 0.8066 1.00 cm/px
blur_score 1.5
0.9545
1.10 0.9545 1.10 pts

Recommended Settings

FactorValue
altitude_m30 m
gimbal_angle-45 deg
flight_speed2 m/s
overlap_pct85 %

Source: from observed run #3

Trade-off Summary

Sacrifice = how much worse than single-objective best.

ResponsePredictedBest ObservedSacrifice
blur_score1.101.10+0.00

Top 3 Runs by Desirability

RunDFactor Settings
#90.8459altitude_m=120, gimbal_angle=-90, flight_speed=2, overlap_pct=60
#130.8424altitude_m=120, gimbal_angle=-45, flight_speed=2, overlap_pct=60

Model Quality

ResponseType
blur_score0.3544linear

Full Multi-Objective Output

doe optimize --multi
============================================================ 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

doe analyze
=== 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

doe optimize
=== 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%)
← Previous: Telescope Observation Quality Next: Photo Print Color Accuracy →