IODLambert Issue

I am running some test cases in Lambert’s problem and am trying to get the other velocity answers. For example, I am running some case from “Superior Lambert Algorithm” by Gim Der.


I have also attached my code. I can change the prograde/retrograde flag and the number of rev’s but how do I get some of the other results?
Thanks.
orekitLambertTest.m (4.6 KB)

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

Bryan,
Thanks for the assistance especially demonstrating how to get the final velocity. Where do I go to put in a request that in the future the controls for both left and right branch, long or short way be made available to the user in iodLambert.java?
Thanks.

You can ask feature requests in the Orekit issue tracker functionality.

Bryan