« GPManeuverSequence » : différence entre les versions
Ligne 43 : | Ligne 43 : | ||
The user will have to define: | The user will have to define: | ||
* The name of the maneuver | * The name of the maneuver | ||
* The frame in which the maneuver is defined | * Since V2.1, the type of maneuver (standard or by orbital increment) | ||
* The maneuver components (Cartesian coordinates or a norm and two angles) | ** if standard type is chosen, we will have to give: | ||
*** The frame in which the maneuver is defined | |||
*** The maneuver components (Cartesian coordinates or a norm and two angles) | |||
** if it is by orbital incréments: | |||
*** on semi-major axis | |||
*** on eccentricity (and semi-major axis eventually) | |||
*** on inclination (and semi-major axis eventually) | |||
* The orbital event that will trigger the maneuver | * The orbital event that will trigger the maneuver | ||
* The engine used taken in the list defined in the vehicle characteristics tab | * The engine used taken in the list defined in the vehicle characteristics tab |
Version du 8 novembre 2019 à 09:55
How to call it
For using the GPManeuverSequence class the developer has only to create such an object with these two possibilities:
- With just two boolean parameters to tell
- If the engines and tanks are locally managed or taken in an external data (as the vehicle one)
- to tell if the maneuvers will be displayed one below the other one or just one (false) by one (true)
manSeq = new GPManeuverSequence(true, true);
- Or with an additional parameter that corresponds to an absolute date which will be used as a reference date (for relative positioning of maneuvers).
AbsoluteDate date0 =
new AbsoluteDate(2010, 1, 1, TimeScalesFactory.getUTC());
manSeq = new GPManeuverSequence(date0, true, true);
Display
Reference date
First, the user will have to select a reference date. There are two possibilities:
- “custom”: a specific date will be entered by the user
- “external”: in that case no modification of the date is available as it corresponds to the date initially defined (note that this date may be automatically updated if the initial orbit date is modified).
Engines and Tanks
If the boolean setting the fact that the engines and tanks are locally managed, we will get these two buttons that will permit to get access to their definition. Note that the total available ergol mass is displayed (but not modifiable).
Then the user will have access to a list of maneuvers with all possibilities available with such lists (adding, removing, moving, duplicating …). Each maneuver may be an impulsive or a continuous constant thrust one.
Impulse maneuver
The user will have to define:
- The name of the maneuver
- Since V2.1, the type of maneuver (standard or by orbital increment)
- if standard type is chosen, we will have to give:
- The frame in which the maneuver is defined
- The maneuver components (Cartesian coordinates or a norm and two angles)
- if it is by orbital incréments:
- on semi-major axis
- on eccentricity (and semi-major axis eventually)
- on inclination (and semi-major axis eventually)
- if standard type is chosen, we will have to give:
- The orbital event that will trigger the maneuver
- The engine used taken in the list defined in the vehicle characteristics tab
- The tank used taken in the list defined in the vehicle characteristics tab
Constant thrust maneuver
The user will have to define:
- The name of the maneuver
- The frame in which the maneuver is defined
- The maneuver direction (Cartesian coordinates or two angles)
- The orbital event that will trigger the maneuver
- The criteria to end the maneuver (by duration or thanks to another orbital event).
- The engine used taken in the list defined in the vehicle characteristics tab
- The tank used taken in the list defined in the vehicle characteristics tab
How to use it
To get a [PATRIUS] ManeuversSequence object, we will just have to call for the getPatriusObject() method as below:
ManeuversSequence seq = manSeq.getPatriusObject();
Note: for the previous V1.3(.1) versions, it was mandatory to use the specific GENOPUS CustomManeuverSequence class.
How it is stored
Here is the XML format for a sequence:
<ComponentList name="listOfEngines">
<!--Amount of items-->
<Integer name="nbItems">1</Integer>
<ComponentListItem name="Item_1">
<Engine name="Engine">
<String name="name">Engine1</String>
<Real name="isp" unit="s">3.2E2</Real>
<Real name="thrust" unit="N">4.0E2</Real>
</Engine>
</ComponentListItem>
</ComponentList>
<ComponentList name="listOfTanks">
<!--Amount of items-->
<Integer name="nbItems">1</Integer>
<ComponentListItem name="Item_1">
<FuelTank name="Fuel_Tank">
<String name="name">Fuel Tank1</String>
<Real name="propMass" unit="kg">1.0E2</Real>
</FuelTank>
</ComponentListItem>
</ComponentList>
<String name="dateMode">external</String>
<AbsoluteDate name="referenceDate">
<String name="date">01/01/2000 00h00m00s</String>
<String name="scale">UTC</String>
</AbsoluteDate>
<AbsoluteDate name="externalDate">
<String name="date">01/01/2010 00h00m00s</String>
<String name="scale">UTC</String>
</AbsoluteDate>
<!--Ergol mass:-->
<Real name="ergMass" unit="kg">1.0E2</Real>
<Real name="delayImp" unit="s">0.0E0</Real>
<Real name="delayConst" unit="s">0.0E0</Real>
<ComponentList name="ManCustom">
<!--Amount of items-->
<Integer name="nbItems">2</Integer>
<ComponentListItem name="Item_1">
<Maneuver name="Maneuver">
<String name="typeMan">Impulsive</String>
<String name="name">Maneuver1</String>
<ImpulseManeuver name="Impulse_maneuver">
<Frame name="frame">
<String name="frameType">Inertial Frame</String>
<Frame name="inertialType">
<String name="name">EME2000</String>
</Frame>
</Frame>
<AxisCoordinates name="dv">
<String name="type">Custom - Angular coordinates</String>
<Real name="alpha" unit="deg">0.0E0</Real>
<Real name="beta" unit="deg">0.0E0</Real>
<Real name="norm" unit="m/s">1.0E1</Real>
</AxisCoordinates>
<EventSelector name="event">
<String name="eventType">RELATIVE_DATE</String>
<RelativeDateDetector name="eventData">
<DateOffset name="relativeDate">0j00h00m35s</DateOffset>
<String name="actionData">STOP</String>
<Real name="maxCheck" unit="s">1.0E10</Real>
<Real name="threshold" unit="s">1.0E-9</Real>
</RelativeDateDetector>
</EventSelector>
</ImpulseManeuver>
<String name="engine">Engine1</String>
<String name="fuelTank">Fuel Tank1</String>
</Maneuver>
</ComponentListItem>
<ComponentListItem name="Item_2">
<Maneuver name="Maneuver">
<String name="typeMan">Continuous</String>
<String name="name">Maneuver2</String>
<ConstantManeuver name="Constant_maneuver">
<Frame name="frame">
<String name="frameType">Local Orbital Frame</String>
<String name="lofType">LVLH</String>
</Frame>
<AxisCoordinates name="thrustDir">
<String name="type">Custom - Angular coordinates</String>
<Real name="alpha" unit="deg">1.8E2</Real>
<Real name="beta" unit="deg">0.0E0</Real>
</AxisCoordinates>
<EventSelector name="thrustStart">
<String name="eventType">AOL</String>
<AOLDetector name="eventData">
<Real name="aol" unit="deg">1.8E2</Real>
<String name="aolType">true</String>
<Frame name="frameAol">
<String name="name">GCRF</String>
</Frame>
<Integer name="atOccurrence">1</Integer>
<String name="actionData">STOP</String>
<Real name="maxCheck" unit="s">6.0E2</Real>
<Real name="threshold" unit="s">1.0E-6</Real>
</AOLDetector>
</EventSelector>
<String name="Stop_maneuver:__">event</String>
<EventSelector name="thrustEnd">
<String name="eventType">AOL</String>
<AOLDetector name="eventData">
<Real name="aol" unit="deg">2.0E2</Real>
<String name="aolType">true</String>
<Frame name="frameAol">
<String name="name">GCRF</String>
</Frame>
<Integer name="atOccurrence">1</Integer>
<String name="actionData">STOP</String>
<Real name="maxCheck" unit="s">6.0E2</Real>
<Real name="threshold" unit="s">1.0E-6</Real>
</AOLDetector>
</EventSelector>
</ConstantManeuver>
<String name="engine">Engine1</String>
<String name="fuelTank">Fuel Tank1</String>
</Maneuver>
</ComponentListItem>
</ComponentList>