SixDOF Sequencers¶
A SixDOF type definition may include one or more “sequencers” which provide a means for a SixDOF object to take action based on the occurrence of one or more events. Sequencers can be used to perform a range of tasks, such as deploying high-drag devices on a retarded-fall bomb several seconds after release from its parent aircraft, or triggering staging events on a multi-stage rocket. Sequencers are a powerful, yet easy to use, means of controlling a sequence of events for a SixDOF object that can be triggered by events based on time, altitude, speed, etc.
- sequencer … end_sequencer¶
A sequencer block has an identifier, which is the string argument after ‘sequencer’. This identifier must be unique within the vehicle type. The sequencer block has to include at least one Sequencer Actions, which is the action the sequencer shall perform when it is activated. The sequencer block may include one or more Sequencer Events, if no Sequencer Events are provided the sequencer may only be activated through the WsfSixDOF_Mover.ActivateSequencer script function. The sequencer block may include one or more Nested Sequencers which will be used once the containing sequencer has been activated – this allows for sequential events, where the second event cannot occur until the first event has occurred.
sequencer <string> // Sequencer Events event_timer ... event_timer_int_msec ... event_timer_int_nanosec ... event_lifetime ... event_lifetime_int_msec ... event_lifetime_int_nanosec ... event_above_alt ... event_below_alt ... event_dynamic_pressure_above ... event_dynamic_pressure_below ... event_static_pressure_above ... event_static_pressure_below ... event_fuel_percent_below ... event_ground_distance ... event_nx_above ... event_nx_below ... event_ny_above ... event_ny_below ... event_nz_above ... event_nz_below ... event_released_from_parent ... event_manual_input_trigger ... event_manual_input_button ... event_manual_input_button_released ... event_boolean_input ... event_null ... all_events ... // Sequencer Actions action_null ... action_jett_obj ... action_jett_self ... action_ignite_engine ... action_ignite_subobject ... action_ignite_self ... action_terminate_thrust ... action_shutdown_engine ... action_shutdown_subobject ... action_change_aero_mode ... action_enable_size_factor ... action_set_graphical_model ... action_activate_subobject_sequencer ... action_enable_controls ... action_disable_controls ... // Nested Sequencers sequencer ... end_sequencer end_sequencer Each sequencer is named, using the first argument after sequencer.
An example of a simple, timer-event sequencer that jettisons two external fuel tank objects after 120 seconds has elapsed is:
sequencer DropTipTanks event_timer 120.0 sec action_jett_obj RightTipTank action_jett_obj LeftTipTank end_sequencer
Sequencer Events¶
Sequencer events are tested to determine if a sequencer should be activated. If more than one event is specified, the sequencer will activate if at least one of the events is true. If is it desired to activate only if all of the events are true, the all_events command should be included.
- event_timer <time-value>¶
This event is based on reaching the specified time. The timer will begin counting once the sequencer is being tested. For top-level sequencers, this is equivalent to event_lifetime but if the sequencer is nested, its counter will not begin running until its parent sequencer has been activated.
- event_timer_int_msec <integer-value>¶
This event is based on reaching the specified time, which is an integer number of milliseconds. The timer will begin counting once the sequencer is being tested. For top-level sequencers, this is equivalent to event_lifetime_int_msec but if the sequencer is nested, its counter will not begin running until its parent sequencer has been activated.
- event_timer_int_nanosec <integer-value>¶
This event is based on reaching the specified time, which is an integer number of nanoseconds. The timer will begin counting once the sequencer is being tested. For top-level sequencers, this is equivalent to event_lifetime_int_nanosec but if the sequencer is nested, its counter will not begin running until its parent sequencer has been activated.
- event_lifetime <time-value>¶
This event is based on reaching the specified lifetime. The lifetime timer begins counting once the platform is active (alive). This timer is different from the event_timer since it uses a platform-centric timer as opposed to a sequencer-centric timer.
- event_lifetime_int_msec <integer-value>¶
This event is based on reaching the specified lifetime, which is an integer number of milliseconds. The lifetime timer begins counting once the platform is active (alive). This timer is different from the event_timer_int_msec since it uses a platform-centric timer as opposed to a sequencer-centric timer.
- event_lifetime_int_nanosec <integer-value>¶
This event is based on reaching the specified lifetime, which is an integer number of nanoseconds. The lifetime timer begins counting once the platform is active (alive). This timer is different from the event_timer_int_nanosec since it uses a platform-centric timer as opposed to a sequencer-centric timer.
- event_above_alt <length-value>¶
This event is based on the platform being above the specified altitude (MSL).
- event_below_alt <length-value>¶
This event is based on the platform being below the specified altitude (MSL).
- event_dynamic_pressure_above <pressure-value>¶
This event is based on the platform having a dynamic pressure above the specified value.
- event_dynamic_pressure_below <pressure-value>¶
This event is based on the platform having a dynamic pressure below the specified value.
- event_static_pressure_above <pressure-value>¶
This event is based on the platform having a static pressure above the specified value.
- event_static_pressure_below <pressure-value>¶
This event is based on the platform having a static pressure below the specified value.
- event_fuel_percent_below <real-value>¶
Specify the fuel value as a normalized number (50% is 0.50). This event is based on the fuel level in the “main tank” being below the specified value. The main tank is considered to be the first tank specified in the propulsion_data block.
- event_ground_distance <length-value>¶
This event is based on the platform being beyond the specified distance (great circle) from the point at which it started.
- event_nx_above <acceleration-value>¶
This event is based on the x-acceleration, known as Nx, (in body coordinates) being above the specified value.
- event_nx_below <acceleration-value>¶
This event is based on the y-acceleration, known as Nx, (in body coordinates) being below the specified value.
- event_ny_above <acceleration-value>¶
This event is based on the y-acceleration, known as Ny, (in body coordinates) being above the specified value.
- event_ny_below <acceleration-value>¶
This event is based on the y-acceleration, known as Ny, (in body coordinates) being below the specified value.
- event_nz_above <acceleration-value>¶
This event is based on the z-acceleration, known as Nz, (in body coordinates) being above the specified value.
- event_nz_below <acceleration-value>¶
This event is based on the z-acceleration, known as Nz, (in body coordinates) being below the specified value.
- event_released_from_parent¶
This event is based on the platform being newly released from its parent.
- event_manual_input_trigger¶
This event allows a trigger pulled input from the P6Net interface to activate.
This event allows an input button down from the P6Net interface to activate.
This event allows an input button release from the P6Net interface to activate.
- event_boolean_input <string>¶
This event is based on a control_boolean within flight_controls being true. This allows an event to be controlled by a ManualPilot or SyntheticPilot, for example.
- event_null¶
This purpose of this event is for to prevent any action without an external command to active the sequencer (see action_activate_subobject_sequencer).
- all_events¶
This flag indicates that the sequencer will be activated only if all events for the sequencer are true.
Sequencer Actions¶
- action_null¶
This action should be specified when no action is desired, such as for a parent sequencer that does not need any action to be performed at its level.
- action_jett_self¶
This action will jettison the object from its parent.
- action_ignite_engine <string>¶
This action will “ignite” the specified engine and set thrust (if applicable) to 100%.
- action_ignite_self¶
This action will “ignite” all engines on the object.
- action_terminate_thrust¶
This action will terminate the thrust for all engines on the object (shutdown the engines).
- action_shutdown_engine <string>¶
This action will “shutdown” the specified engine and set thrust (if applicable) to 0%.
- action_shutdown_subobject <string>¶
This action will “shutdown” all engines on the specified subobject.
- action_change_aero_mode <string>¶
This action will change the object’s aero_mode to the specified mode.
- action_enable_size_factor¶
This action will enable the size factor. See Size Factor Parameters for details.
- action_set_graphical_model <integer-value>¶
This action will set the current graphical model for networked tools.
- action_activate_subobject_sequencer <string> <string>¶
The first string is the name of the subobject and the second string is the name of the sequencer. This action will activate the sequencer with the specified name on the specified subobject. If no subobject or sequencer exists, no action will be performed.
- action_enable_controls¶
This action will enable control input for normal operation. See action_disable_controls to turn off the controls.
- action_disable_controls¶
This action will disable control input, zeroing all control inputs. See action_enable_controls to turn on the controls.
Nested Sequencers¶
Nested sequencers are sequencers that are defined within another (parent) sequencer. The nested sequencer does not have its events tested until its parent sequencer has been activated. This allows for sequential events, since the second event cannot occur until the first event has occurred. In many cases, the various parent sequencers will use an action_null action, since no action is desired until the final sequencer is activated.
Consider this case:
sequencer
name Sequencer1
event_above_alt 80000.0 ft
action_null
sequencer
name Sequencer2
event_below_alt 70000.0 ft
action_null
sequencer
name Sequencer3
event_timer 10.0 sec
action_ignite_engine BoostRocket
end_sequencer
end_sequencer
end_sequencer
In this case, the sequencer chain will ignite a BoostRocket 10 seconds after the platform comes back down below 70,000 feet after first reaching 80,000 feet.
Removing Sequencers¶
- remove_sequencer <string>¶
This removes the specified sequencer. It is typically used to remove a sequencer that was derived from a parent class object. If no sequencer with the specified name exists, the command is ignored.
Return to six_dof_object_types, rigid_body_vehicle_type, point_mass_vehicle_type