Here is a preliminary presentation of the approach for solving low-thrust trajectory problem under GMAT.

The method used for formulating the optimizationn problem is based on pseudospectral method. The objective function is always the mass (minimisation).The code is full functional, although only rendezvous terminal constraints are implemented, and the initial guess is proposed internally by the code. Eventually, as we discussed, the user should be able to provide the initial guess - most certainly under the form of an array of variables [10 x number of nodes]

Any comments on improving the GUI are welcome. I basically tried to make it simple, avoiding duplication with other GMAT feature, and implementing some of the options that have been discussed.

Joris

Attachments

example of low-thrust transfer from Earth to Mars. Earth and Mars are massless point. 25 nodes.

Is the time of flight currently a fixed constant or can departure and arrival epoch be included as optimization parameters?

For longer or more complex trajectories, we probably need to have several pseudospectral segments that have position (and probably velocity) continuity at the nodes. Can you implement something where you can create a number of segments and then order them into a complete trajectory like this:

So far, the time of flight is fixed, but it can be easily included as an optimization parameter. However, we have to be careful about how the ephemerides are handled. It is not possible to use the ephemerides (e.g. DE405) directly during the optimisation - non differentiability in general - and most likely we should use somewhat degraded ephemerides, for instance, by propagating a celestial body state (e.g. planet or moon) from a DE405 state during the optimisation ... not sure I am clear.

I will implement the LowThrustArc object you propose and most certainly something similar for the constraints. That would yield something cleaner for the scripting, which is for now "heavy" for the pseudospectral command.

I think the swing-by/flyby case can be tricky! Basically, for fidelity purposes, I am not sure the swing-by phase should be done with intermediate constraints, but it is possible to have: {PseudoSpectral LowThrust Segment 1 + Propagate + PseudoSpectral LowThrust Segment 2} to construct a valid NLP for the Optimize command. Thus, it would simply require an inequality terminal constraint on the final state wrt the flyby body B-plane for {PseudoSpectral LowThrust Segment 1}.This constraint is not yet implemented. We should also check how the vinfs are defined, and if the periapsis radius can be easily computed. I may be a bit over optimistic for that part though...

Jorisatesa wrote:So far, the time of flight is fixed, but it can be easily included as an optimization parameter. However, we have to be careful about how the ephemerides are handled. It is not possible to use the ephemerides (e.g. DE405) directly during the optimisation - non differentiability in general -

The DE files are contain coefficients of Chebyshev polynomials (9th order if my memory is correct) and so they can provide planetary velocities and accelerations. Isn't that all you need to allow the endpoints to vary?

It is indeed a plugin, which is however not yet fully operational for GMAT. The dynamic is a separate implementation the one used in GMAT. That is, you can compute an optimal low-thrust trajectory, but it would overlook dynamical contributions other than the main gravity. All parameters are however coming from GMAT. Changes on the plugin would be minor and straightforward, but GMAT has to provide information on the gradient of the dynamics for the plugin to be full operational - I haven't checked if it is the case in the new release.Furthermore, this plugin requires an optimizer, e.g. Ipopt or Snopt. It is given in a separate plugin. Unfortunately for this one, few changes were necessary in the older version of GMAT, and I haven't checked yet if it can work with the R2011a without changes of GMAT's base code.

At this stage, if you only need a simple two-body low-thrust trajectory under GMAT, the only thing to check would be the optimizer plugin. If you want, I can send you the code and tell you how to make it work.