GPManeuverSequence

De Wiki
Aller à : navigation, rechercher

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).

ReferenceDate.png

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).

EnginesAndTanks.png

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.

EnginesList.png TanksList.png

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 increments:
      • 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 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

GPImpulseManeuver.png

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

GPConstantThrustManeuver.png

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>