Matlab code for designing flight paths for UAVs scanning fields in wind.
Results and method are described in "Flight Optimization for an Agricultural Unmanned Air Vehicle" by A. Richards, European Control Conference, 2018, available at: https://ieeexplore.ieee.org/document/8550307
Each of the scripts "comp...m" runs a sweep of different flight angles for a particular field and wind. For each angle, the function "tspSequence" will divide the field polygon into strips, cutting along the current angle choice, and then find the optimal sequence with with to fly every strip.
Run script "set_paths.m" to get the required subdirectories on your Matlab path.
The travelling salesman solver uses the free GLPSOL utility, either in Linux or via Cygwin on Windows. The rest of the code runs in Matlab, so the whole package can run on Windows or Linux.
By far the slowest bit of the method is the calculation of the fastest flights paths between all pairs of strips, which uses a Dubins-like method with corrections for wind, by Mcgee, Spry and Hedrick. To speed things up, this has been compiled to a MEX file in Matlab. Cross-platform users will have to run the code generation script to compile it for their OS etc.
- Matlab
- GLPSOL (part of the GLPK suite)
- ampltools: utilities for writing the datafiles for the TSP, which share their format with the AMPL language
- heading: functions to determine aircraft heading to fly a given ground track in wind, plus determine the ground speed
- sim: a simple simulator for validation, implemented in Simulink
- strips: robust code for dividing a polygon into strips, which was surprisingly hard!
- tsp: the AMPL/GLPSOL model file (.mod) and other files should you want to run it in AMPL
- windpath: determination of fastest path between two poses in wind. Run "codegenWindPath" to compile the MEX.