
Addon Requests If you have a request for a new addon or want to know where to find a specific addon, ask it here! 

Thread Tools 
02122016, 01:24 AM  #1 
Orbinaut

The Aldrin Cycler?
Hi,
For anyone who knows about the idea of the cycler proposed by Mr Aldrin, you know the former Lunar Module pilot. Further orbits around the Martian planet line up to eventually get back to the Earth. Could this be an addon for Orbiter? 
Thanked by: 
02122016, 03:50 AM  #2 
Addon Developer

Probably yes, as Orbiter has shown to be very accurate. I don't know it well enough to know if it needs orbit corrections.
Anyway, it's a very interesting concept and if I was going to Mars now, I'd get 2 of those things going to "pave the way". 
02122016, 07:34 AM  #3 
shoemaker without legs

I was thinking about that every now and then. Technicall it should work, but I have no Idea how stable it would be at high time acceleration. Would probably require user intervention to keep it on track over several cycles.

02122016, 02:34 PM  #4 
Orbinaut

For anyone up to the challenge of creating this type of addon, it would be interesting to see part of Aldrin's plan with assisting to get a crew to Mars.
I've seen on the youtube site a clip with a proposed station that goes into this orbit between the planets. 
02122016, 07:31 PM  #5 
Donator

I think the cycler is too difficult and impractical to work. I mean how is something supposed to rendevous it, eg wait in LEO for it to arrive, when it arrives apply enough thrust for a Mars transfer, then rendevous.

02122016, 08:21 PM  #7 
shoemaker without legs

Dug out the old thread about it (what do you know, you search for "aldrin cycler orbital elements" and of course an OF thread would be among the top 5... )
There's two scenarios as well as links to a few papers, some of them with more math than I can take on a normal day, much less after being shellshocked by a shell script examn we turned out to have to do on paper. As I expected, the cycler trajectory isn't maintenance free... the required adjustments consume very little propellant, but they need to be made, or you won't see neither earth nor mars again after the first half of the cycle. Automating this in orbiter would seem a major mathematical undertaking. 
02132016, 12:51 AM  #8 
Orbinaut

I really don't know very much about cycler orbits, but based on what I have quickly read from this paper  http://russell.ae.utexas.edu/FinalPu...AAS03145.pdf  it would seem that to operate the cycler trajectory requires some very precise gravityassist encounters for it to operate. Performing any gravityassist is like balancing on a knife's edge: a slight variation in approach altitude or angle will have a large effect on the outgoing trajectory. No matter how you do it, course corrections will be required and automating those course corrections is challenging.
The best way that I can think of doing it is for someone to invest time in designing a 'reference trajectory' for the cycler orbit. This reference trajectory would be specific to a particular date range and would specify the 'ideal' state vectors (position and velocity) of the spacecraft at any point in time during the cycler orbit. Then, one would set up some form of autopilot that would make small adjustments to speed and direction so as to stay 'close' to the reference trajectory  with 1 km and 1 m/s say of the 'ideal' position and velocity. Under high timewarp, though, this scheme may fail miserably. Last edited by Keithth G; 03062017 at 12:12 AM. 
Thanked by: 
02132016, 12:52 AM  #9 
Orbinaut

Unfortunately, my maths is at a school's level, really bad.

02132016, 05:31 PM  #10 
shoemaker without legs

Quote:
I guess I could write a short plugin that saves the state vectors to a file every minute or so, and then cycle for a few weeks, but with a sixdays work week and two kids, there's no chance of that happening Quote:

02142016, 02:18 PM  #11 
Orbinaut

Quote:
With some effort, I daresay I could calculate an accurate ephemeris for a cycler orbit and present this in an appropriate (compressed) form. (I would have to learn somewhat more than I do now about cycler orbits first, but that's an acceptable cost.) But, sadly, my skills don't extend to coding an Orbiter addon. Last edited by Keithth G; 03062017 at 12:12 AM. 
02142016, 02:21 PM  #12 
Orbinaut

Folks if it isn't workable, don't worry. It was just another idea.

02142016, 04:40 PM  #13 
shoemaker without legs

Quote:
As a bonus, a general enough dll could just as easily be used to do stable lagrange point stations and stuff like that if there's a data set. Quote:
Last edited by jedidia; 02142016 at 04:44 PM. 
Thanked by: 
02142016, 04:48 PM  #14 
Orbinaut

Ah right. Well for anyone that can try this out, should be interesting. As for an actual cycler outpost?

02152016, 05:36 AM  #15 
Orbinaut

Quote:
The basic scheme for determining the Cycler trajectory is: 1. Work out the basic logic of the Cycler trajectory assuming circular, coplanar orbits for Earth and Mars; 2. Using this as a starting point, refine the trajectory plan in a linkedconics model that takes not account orbital eccentricity and inclination of Earth and Mars; then 3. Using that as a starting point, produce the full ephemeris trajectory solution using an nbody integrator; and finally 4. Encode the nbody ephemeris trajectory as a data file that can be decoded using the C function call. I have all the tools needed to do this  but it still isn't the work of a few moments. The result, though, will be a highfidelity model consistent with Orbiter's underlying gravity model and accurate to, say, < 10^2 m/s in speed and < 10 m in position. Quote:
Code:
 get the handle for the spacecraft ves = vessel.get_focushandle()  get the handles for the Earth and the Moon earth = oapi.get_objhandle("Earth") moon = oapi.get_objhandle("Moon")  define a set of constants relevant to the EarthMoon L2 libration points GM1 = 398600440157821.0  gravitational constant for the Earth (SI units) GM2 = 4902794935300.0  gravitational constant for the Moon (SI units) GM = GM1 + GM2 MU1 = GM1 / GM MU2 = GM2 / GM alpha = 1.155682111433621  the libration parameter for the EarthMoon L2 point  get the current location of the vessel q = oapi.get_globalpos(ves) p = oapi.get_globalvel(ves)  get the current location of Earth q_ear = oapi.get_globalpos(earth) p_ear = oapi.get_globalvel(earth)  get the current location of the Moon q_mon = oapi.get_globalpos(moon) p_mon = oapi.get_globalvel(moon)  calculate the weighted average position and velocity of the Earth and Moon com = vec.add( vec.mul( q_ear, MU1 ), vec.mul( q_mon, MU2 ) ) cov = vec.add( vec.mul( p_ear, MU1 ), vec.mul( p_mon, MU2 ) )  calculate the position of the Moon relative to the Earth r = vec.sub( q_mon, q_ear ) v = vec.sub( p_mon, p_ear )  calculate some quantities that are used multiple times in the ensuing calculations vsq = vec.dotp( v, v) rln = vec.length( r ) rv = vec.dotp( r, v)  calculate:  'e'  the eccentricity vector of the Moon relative to Earth  'ecc'  the eccentricity  'a'  the semimajor axis  'nu'  the mean anomaly e = vec.sub( vec.sub( vec.mul( r, vsq / GM ), vec.mul( v, rv / GM) ), vec.mul( r, 1.0 / rln ) ) ecc = vec.length(e) a = GM / (2.0 * GM / rln  vsq) nu = math.acos( vec.dotp(e, r) / ecc / rln) if rv < 0 then nu = 2.0 * math.pi  nu end  calculate the unit vectors of a dextral reference frame aligned with the Moon's  orbital plane and orbital orientation:  'xhat'  a unit vector pointing in the direction to the Moon's orbital periapsis  'zhat'  a unit vector point normal to the Moon's orbital plane  'yhat'  the third unit vector to complete the trio xhat = vec.unit( e ) zhat = vec.unit( vec.crossp( r , v ) ) yhat = vec.unit( vec.crossp( zhat, xhat ) )  calculate some more intermediate values k1 = a * (1.0  ecc * ecc ) k2 = math.sqrt( GM / k1 ) cnu = math.cos(nu) snu = math.sin(nu) k3 = 1.0 + ecc * cnu  calculate the position of the Lagrange point in the dextral reference frame:  'qx'  the position of the Lagrange point in the 'xhat' direction  'qy'  the position of the Lagrange point in the 'yhat' direction  'qz' = 0 by definition  'px'  the speed of the Lagrange point in the 'xhat' direction  'py'  the speed of the Lagrange point in the 'yhat' direction  'pz' = 0 by definition qx = alpha * k1 * cnu / k3 qy = alpha * k1 * snu / k3 px = alpha * snu * k2 py = alpha * (ecc + cnu) * k2  caluclate the position of the Lagrange point in Orbiter's global reference frame l2qa = vec.mul( xhat, qx ) l2qb = vec.mul( yhat, qy ) l2qc = vec.add( l2qa, l2qb ) l2q = vec.add( l2qc, com )  calculate the velocity of the Lagrange point in Orbiter's global reference frame l2pa = vec.mul( xhat, px ) l2pb = vec.mul( yhat, py ) l2pc = vec.add( l2pa, l2pb ) l2p = vec.add( l2pc, cos ) Last edited by Keithth G; 03062017 at 12:11 AM. 

Thread Tools  


Quick Links  Need Help? 