A richly featured application to design trajectories for interplanetary space missions using (multiple) gravity-assist maneuvers. Its most prominent capabilities are:
- single/multi objective optimization
- can work with a multitude of (heuristic) optimization algorithms
- Low/high thrust propulsion both supported
- (rough) global and (accurate) local searches seamlessly integrated
- additional functionality can be added easily via user-definable plugins
- intuitive GUI, nice plots of best trajectory found, speed w.r.t. central body, and many others. Designed to easily explore various mission scenarios, BATCH optimization to find the best in a whole set of scenarios, etc.
- Comes ready with "nearby MPs" post processor, to also locate the known asteroids/comets/etc. that come close to the final trajectory.
I wrote this application for my Master's thesis in Space Engineering. The idea was to make everything as general and easy to understand as possible, so that other, future students could easily experiment with their problem(s), and eventually expand and improve this program. If anything, it is an excellent showcase of all that's possible with MATLAB (and all that's not :) See https://dl.dropboxusercontent.com/u/5045692/MSC_thesis_FINAL.pdf (my master thesis) for all the details and background.
To start Skipping Stone, just clone the repository (recursively, it contains submodules) or download and unpack the zip, navigate to its home directory in MATLAB and execute "main.m".
A word of advice: First run "speedup.m" (also in the home directory) first to compile a few bottleneck-algorithms; this speeds up the optimizations pretty dramatically. It is not required though; everything should work as is.
An easy example: find a so-called Mars-free-return trajectory:
- run "main.m" and leave all settings untouched
- on the "Sequence" tab, select "Venus" as swingby1, and "Mars" as target.
- Press the OPTIMIZE! button and wait a few seconds.
Feel free to add more planets and play with all the settings. Note that low thrust trajectories are MUCH harder to optimize, so you should expect to wait longer. Naturally, this also holds for increasingly complex problems; 5 swingbys with multiple revolutions and long/short way optimized will require a LOT more time than the Mars-free return mission mentioned above.
Although I took great care to catch all errors I can think of, I expect lots of bugs are still present. So if you do find any strange errors popping up, or have a much more general question, please e-mail me with a brief description, screenshots etc. so I can post a fix, or post your request here on the forum. Also, if you are also an aerospace student and want to participate, I can sure use a hand or two (or more)!
Known flaws, improvements, etc.:
- second order optimizations ("high-accuracy local search") NOT YET IMPLEMENTED: expect errors when trying this! It's something that wasn't required for my thesis, so due to time pressure at the time I didn't implement this correctly yet.
- A much better approach to building the windows and data management etc. would be to make a class out of the main window (plus all callbacks). This would make it a lot more scalable and easier to understand. But at the time I wrote this, I didn't know how to do this properly, and now that I do it's an awful lot of work: so for now this is future work.
- There is NO clear documentation (although the code is pretty well documented). This is a problem with all software written under pressure of course; it's something I'm still working on...
- As for validation: as you can read in my thesis, all missions I tried could be found by Skipping Stone, EXCEPT NASA's Galileo for some reason. Please; if you find that reason, I'd be very happy!
If you find this work useful, please consider a donation:
When I run main.m, I get an error message about a missing function:
"Undefined function or variable 'tsjiolkovsky'."
There is a folder by this name in the ZIP file, but it is empty. Is something missing from the code or are there additional steps I need to take before running the software?
Oh no!!!! :)
Anyway, I suspect it's the global optimizer: Although the solution I reported gave my ~15km/s, that does not mean that solution is easy to find! In my thesis there's also a section of "raw data" (somewhere in the appendices), which shows per point I tried that different optimizers often find wildly different results.
I suspect that if you retry a few times, it'll probably decrease from a few hundred to a few tens to (hopefully for me!) ~fifteen.
Anyway, keep in mind that the global optimization algorithms I used (GA, PSO, etc.) use a fair bit of randomness. Chances are you'll find different results each time you run an optimization.
Of course, if you try 100 times and you still don't find anything lower than say 25km/s, I'd like to hear about that :)
Hi, this program is wonderfull. I tried to do a mission in solar bow shock to confront results written in your thesis. The program give me a total DV of several hundred of km/s... there is something that escape me? why in your thesis there are total DV of 15 km/s?
Included proper JPL/DE405 ephemerides routines
Minor description update
[linked to Github]