[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Orekit Users] Generate TLE



Hi Javier,

On Fri, 2018-07-06 at 10:49 +0000, Montemayor Mancias, Javier wrote:
Hi Pascal,

Thanks for the help. I'm still having a bit of trouble following your instructions, I'm not sure if what I am doing is how it should be done:

            OEMParser parser = new OEMParser();
            parser = parser.withInternationalDesignator(2018,12,"UUU"); // I'm not sure if this is required, it's fake info anyway
            OEMFile file = parser.parse("file.oem");

            // This is how I am creating the list of SpacecraftState

            List<OEMFile.EphemeridesBlock> ephemeridesBlockList = file.getEphemeridesBlocks();
            OEMFile.EphemeridesBlock block = ephemeridesBlockList.get(0);
            BoundedPropagator boundedPropagator = block.getPropagator();
            List<SpacecraftState> spacecraftStateList = new ArrayList<>();

            for (AbsoluteDate date = block.getStart(); date.compareTo(block.getStop()) <= 0; date = date.shiftedBy(60)) {
                spacecraftStateList.add(boundedPropagator.propagate(date));
            }

            // Up to everything works without throwing any exceptions

            // This throws an exception (Jacobi Matrix of type CARTESIAN is singular for the current orbit) <-- (Jacobi Matrix des Typs CARTESIAN ist singulär für die aktuelle Umlaufbahn)
            FiniteDifferencePropagatorConverter converter =
                    new FiniteDifferencePropagatorConverter(new TLEPropagatorBuilder(
                            new TLE(1,'U',2018,12,"UUU",
                                    1,1,block.getStart(),0.0,
                                    0.0,0.0,0.0,98.17,0,
                                    Math.toRadians(10.0),0.0,0,0.0),
                            PositionAngle.TRUE,1.0),0.01,60);
            // Should I get a TLE template some other way? Or how should I use the FiniteDifferencePropagatorConverter class?

You have to provide a decent guess or initial condition. The TLE you create here has zero mean motion which implies it is located very far from Earth. A good initial guess would be the Keplerian states of one of the SpacecraftStates you've collected from the Propagator. Use it for the six orbital elements. TLES use mean anomaly instead of true anomaly so there will be less conversions if you also use mean anomaly for the TLEPropagatorBuilder. 

            // Is this the proper way to build the TLEPropagator from the list?
            TLEPropagator tlePropagator = (TLEPropagator) converter.convert(spacecraftStateList,false,"");

Depends what you're using it for but TLES are typically used for pointing antennas which only care about the position of the satellite, not the velocity. You can estimate the drag coefficient as well if the satellite is in LEO by adding the extra parameter "BSTAR".

Best Regards,
Evan

            System.out.println(tlePropagator.getTLE());

Best regards,
Javier

-----Ursprüngliche Nachricht-----
Von: orekit-users-request@orekit.org [mailto:orekit-users-request@orekit.org] Im Auftrag von Pascal Parraud
Gesendet: Freitag, 6. Juli 2018 11:07
An: orekit-users@orekit.org
Betreff: Re: [Orekit Users] Generate TLE

Hi Javier,

To convert ephemeris data to a TLE, you have to use the FiniteDifferencePropagatorConverter which allows to convert a list of SpacecraftState, to be build from the ephemeris data, into a TLEPropagator, from which you can get a TLE.

The OMMFile is only supposed to be recovered from a CCSDS OMM file parsed thanks to the OMMParser, so it isn't the right way to do the expected job.

Best regards,

Pascal


Le 06/07/2018 à 10:27, javier.montemayor.mancias@emi.fraunhofer.de a écrit :
Hi guys, I'm trying to generate a TLE from ephemeris data but can't find a way to do so. Does anybody know how to do it? I've found that the OMMFile class has a generateTLE() method but I don't see any way to link the file to that method. Best regards, Javier