Get from Ico-github-logo

Download apps, toolboxes, and other File Exchange content using Add-On Explorer in MATLAB.

» Watch video

Highlights from
Skipping Stone - An interplanetary space mission design tool

  • cart2kep.m
  • build_main_window.m
  • user_MP_pruning.m
  • minor_planets_parameters.m
  • central_body_flyby.m
  • lambert_low_exposins.m
  • FindRealRoots(funfcn, a, ...
    FINDREALROOTS Find approximations to all real roots of any function
  • GODLIKE(funfcn, lb, ub, v...
  • JD2date(JD)
  • JPL_DE405_ephemerides(tim...
    JPL_DE405_EPHEMERIDES Calculates JPL/DE405 planetary ephemerides
  • Jovian_atmospheres_model(...
  • Jovian_atmospheres_parame...
  • Jovian_system_model(model...
  • Jovian_system_parameters(...
  • Julian_atmospheres_model(...
  • Julian_atmospheres_parame...
  • Julian_system_model
  • Julian_system_parameters(...
  • MJD2date(MJD)
  • NBody_Battin(y0, tspan, o...
  • SimsFlanagan(rs, tfs, Vmi...
    method by Sims and Flanagan
  • Solar_system_model(seq, t...
    SOLAR_SYSTEM_MODEL Definitions of various parameters for all the planets.
  • Solar_system_parameters(m...
    SOLAR_SYSTEM_PARAMETERS Definitions of various parameters for all the planets.
  • TOF(theta, rp, r, gradien...
  • aM2t(a, M, t0, muC)
  • ae2T(a, e, muC)
  • ae2n(a, e, muC)
  • aeM2rtheta(a, e, M, tol)
    AEM2RTHETA Convert semimajor axis, eccentricity and mean anomaly
  • aet2M(a, e, t, t0, muC)
  • aet2theta(a, e, t, t0, muC)
  • aetheta2t(a, e, theta, t0...
  • batch_optimization(varargin)
    BATCH-optimization GUI
  • callbacks(funfcn, ...
    CALLBACKS() Contains all callback functions for all controls on the
  • cancel_button_pressed(var...
  • cart2para(varargin)
    CART2PARA Convert cartesian coordinates to parametric
  • collocation(X, type, vara...
    method of collocation
  • countlines(filename)
    counts the total number of lines in a file, very quickly
  • date2JD(year, month, day,...
  • date2MJD(year, month, day...
  • date2days(year, month, da...
  • date2sec(year, month, day...
  • days2date(days)
  • eE2M(e, E)
    EE2M Convert eccentricity and eccentric anomaly to mean anomaly
  • eE2theta(e, E)
    EE2THETA Convert eccentric anomalies and eccentricities to
  • eM2E(e, M, tol)
    EM2E Convert eccentricity and mean anomaly to eccentric anomaly
  • eM2theta(e, M, tol)
    EM2THETA Convert eccentricity and mean anomaly to true anomaly
  • etheta2E(e, th)
  • etheta2M(e, theta)
  • example_costfunction(vara...
    NOTE: don't use "global MainWin" here - this would give difficulties when
  • example_postprocessor(var...
  • exposin2initial_SimsFlana...
    velocity, thrust, position and Delta-V of an ExpoSin, for an
  • exposin2initial_collocati...
    mass, velocity, thrust and position of an ExpoSin, for an
  • find_nearby_MPs(varargin)
  • generate_output(embedding)
    generate all output & graphics
  • gravity_highprecision(p, ...
    GRAVITYSPHERICALHARMONIC Implement a spherical harmonic representation
  • himmelblau(X)
    Himmelblau function
  • initialize_ephemerides_ge...
    initialize all the ephemerides generators
  • kep2cart(varargin)
  • kep2para(varargin)
    KEP2PARA Convert kepler elements to parametric representation
  • main(varargin)
  • max_MPs(MainWin, result)
    NOTE: don't use "global MainWin" here - this would give difficulties when
  • minimum_distance_conics( ...
    MINIMUM_DISTANCE Calculates the minimum distance between an
  • minimum_distance_exposins...
  • minor_planets_model(model...
    MINOR_PLANET_MODEL Definition file that loads the compete model for
  • modify_settings(funfcn, v...
    TODO: (Rody Oldenhuis) move these three to +StructureManipulation
  • ne2a(n, e, muC)
  • not_yet_done()
  • optimize_button(varargin)
    Callback function for the optimize! button
  • para2cart(varargin)
  • paretofront(varargin)
    PARETOFRONT returns the logical Pareto Front of a set of points.
  • patched_conics(seq, X, pa...
  • planetary_atmospheres_mod...
  • planetary_atmospheres_par...
  • process_EGM96_coefficients()
  • progressOrbit(varargin)
    Little wrapper function to call the MEX function when it exists,
  • progress_bar(progress, st...
  • quintic_ephemerides(seq, ...
  • rkn86(FunFcn, tspan, y0, ...
    rkn86 Integrates a special system of ordinary differential equations using
  • set_options(varargin)
  • speedup
    SPEEDUP Compile several functions to speed up Skipping Stone
  • stateceres
  • stateearth
  • statejupiter
    Jupiter Barycenter
  • statemars
  • statemercury
  • statemoon
  • stateneptune
  • statepallas
  • statepluto
  • statesaturn
    Saturn Barycenter
  • stateuranus
  • statevenus
  • statevesta
  • toggle_panel(panels_in, a...
    Toggle a panel's children's enable states.
  • two_body_ephemerides(body...
    % extract orbital elements
  • user_Jovian_system_parame...
  • user_Julian_system_parame...
  • user_MP_model(MPs)
  • user_Solar_system_paramet...
  • ASA
  • DE
  • GA
  • PSO
  • pop_multi
  • pop_single
    =insert documentation here=
  • View all files
5.0 | 1 rating Rate this file 10 Downloads (last 30 days) File Size: 50 MB File ID: #29272 Version: 1.3
image thumbnail

Skipping Stone - An interplanetary space mission design tool


Rody Oldenhuis (view profile)


04 Nov 2010 (Updated )

An easy-to-use tool to optimize trajectories for interplanetary missions using swingby manoevres

| Watch this File

File Information

Skipping Stone
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 (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:

Required Products Spline Toolbox
MATLAB release MATLAB 7.7 (R2008b)
Other requirements Optimization toolbox is supported, but not required Spline toolbox is not required if you select "Kepler (direct)" as the ephemerides generator I work with git submodules; you'll have to do a recursive checkout to get all the required code.
Tags for This File   Please login to tag files.
Please login to add a comment or rating.
Comments and Ratings (2)
25 Feb 2011 Rody Oldenhuis

Rody Oldenhuis (view profile)

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 :)

Comment only
23 Feb 2011 Bibux Bi

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?

03 Nov 2016 1.1

[linked to Github]

15 Nov 2016 1.2

Minor description update

16 Nov 2016 1.3

Included proper JPL/DE405 ephemerides routines

Contact us