Hi Stephen,
First of all, IOD Lambert method gives you an initial Keplerian orbit. Therefore, I recommend you to use “Initial velocity” expression when you print the results of estimate(...)
method:
fprintf('NRev = 0; Posigrade; Initial Velocity:\n');
Another point that could be useful, even if it is not relevant here, is to use SI base unit.
In order to obtain the final velocity (i.e. v(t2)
in your image), you can use a KeplerianPropagator
. Indeed, Lambert method assumes a Keplerian motion. Therefore, you can use the Keplerian propagator to obtain the final velocity.
In order to initialize the Keplerian propagator, you can directly use the kepOrbitOut
object built from the estimate(...)
method of IODLambert
object. Below an example:
% Posigrade
posigrade = true;
nRev = 0;
kepOrbitOut = iod1.estimate(inertialFrame,posigrade,nRev,pos1_km, ...
initialDate,pos2_km,finalDate);
kepPropagator = KeplerianPropagator(kepOrbitOut, mu);
vel1_km_s = kepOrbOut.getPVCoordinates().getVelocity();
vel2_km_s = kepPropagator.propagate(finalDate).getPVCoordinates().getVelocity();
Below the results I obtain:
For NRev
= 0
NRev = 0; Posigrade; Initial Velocity:\n
vECI (km/s): {2,0006526959; 0,3876886152; -2,6669477585}
NRev = 0; Posigrade; Final Velocity:\n
vECI (km/s): {-3,7924661872; -1,7770764054; 6,856814392}
For NRev
= 1
NRev = 1; Posigrade; Initial Velocity:\n
vECI (km/s): {-2,457595532; 1,1694580063; 0,431612576}
NRev = 1; Posigrade; Final Velocity:\n
vECI (km/s): {-5,5384131781; 0,0182221332; 5,4964101543}
The results agree with Gim Der’s document.
However, I don’t think it is possible to obtain the second solution for NRev
= 1. According to IODLambert.estimate(...)
method signature, Orekit only gives you one solution. However, I didn’t find a workaround to obtain the second solution.
Best regards,
Bryan