rigid_body_vehicle_type

A rigid_body_vehicle_type is a critical component of a WSF_RIGID_BODY_SIX_DOF_MOVER. It is the rigid_body_vehicle_type that defines the characteristics of the various components (mass properties, aerodynamics, propulsion, etc.) that determine how a WSF_RIGID_BODY_SIX_DOF_MOVER will perform. A rigid_body_vehicle_type must be defined before being referenced in a WSF_RIGID_BODY_SIX_DOF_MOVER. A rigid_body_vehicle_type may be derived from another rigid_body_vehicle_type or from BASE_TYPE (the base class for RB6 object types).

rigid_body_vehicle_type <type_name> <derived_from_object_name> … end_rigid_body_vehicle_type

The definition of a rigid_body_vehicle_type is performed within a rigid_body_vehicle_type block. Each rigid_body_vehicle_type defines a ‘type’ of vehicle, ranging from a simple, hand-launched drone to a complex spacecraft. A rigid_body_vehicle_type may include the definition of mass properties, primary aerodynamics, propulsion system components (including engines and fuel systems), subobjects (such as weapons, fuel tanks, etc.), sequencers (which can produce an “action” based on an “event”), controls providers (which include manual pilots, synthetic pilots, autopilots, and guidance systems), flight control systems (which determine how control inputs are routed/mixed to move control surfaces), secondary aerodynamics (which includes control surface aerodynamics), size factor parameters (which allow an object’s size to vary, such as that of a parachute or balloon), relative positioning (which defines how a subobject is positioned relative to its parent while captive), separation effects (which impart a delta-V or angular rate to a subobject when it is jettisoned from its parent), and other special properties.

rigid_body_vehicle_type F-86_Saber BASE_TYPE

   // Mass Properties
   mass ...
   moment_of_inertia_ixx ...
   moment_of_inertia_iyy ...
   moment_of_inertia_izz ...
   center_of_mass_x ...
   center_of_mass_y ...
   center_of_mass_z ...

   // SixDOF Mass Properties Data
   mass_properties ... end_mass_properties

   // SixDOF Aerodynamics Data
   aero_data ... end_aero_data
   aero_component ... end_aero_component

   // SixDOF Pilot Manager and Control Inputs
   pilot_manager ... end_pilot_manager

   // SixDOF Flight Control System Definition
   flight_controls ... end_flight_controls

   // SixDOF Propulsion System Definition
   propulsion_data ... end_propulsion_data

   // SixDOF Integrator
   integrator ...

   // SixDOF Landing Gear
   landing_gear ... end_landing_gear

   // Fuel Transfers
   fuel_transfer ... end_fuel_transfer
   remove_fuel_transfer ...

   // Fuel System Modification
   remove_fuel_tank ...
   modify_fuel_quantity ... end_modify_fuel_quantity

   // SixDOF Subobjects
   subobject ... end_subobject

   // SixDOF Sequencers
   sequencer ... end_sequencer
   remove_sequencer ...

   // Parent-Relative Positioning and Separation
   parent_rel_x ...
   parent_rel_y ...
   parent_rel_z ...
   parent_rel_yaw ...
   parent_rel_pitch ...
   parent_rel_roll ...
   separation_vx ...
   separation_vy ...
   separation_vz ...
   separation_omega_x ...
   separation_omega_y ...
   separation_omega_z ...

   // Size Factor Parameters
   size_factor_radius ...
   size_factor_min ...
   size_factor_max ...
   size_factor_volume_rate_m3_per_sec ...
   size_factor_area_rate_m2_per_sec ...
   size_factor_radius_rate_m_per_sec ...

   // Special Properties
   use_spherical_earth ...
   use_rotating_earth ...
   ignore_jettisoned_objects ...
   fixed_object ...

   // Object Creation Support
   nominal_max_mach ...
   nominal_max_alpha ...
   nominal_min_alpha ...
   nominal_max_beta ...

end_rigid_body_vehicle_type

Mass Properties

Mass properties include the mass and moments of inertia for the object when empty (no fuel or payload). Additional mass properties contributions by fuel and payload are considered separately.

mass <mass-value>

The (empty) mass of the object, not including fuel.

moment_of_inertia_ixx <angular-inertia-value>

The (empty) moment of inertia about the x-axis the object, not including fuel.

moment_of_inertia_iyy <angular-inertia-value>

The (empty) moment of inertia about the y-axis the object, not including fuel.

moment_of_inertia_izz <angular-inertia-value>

The (empty) moment of inertia about the z-axis the object, not including fuel.

center_of_mass_x <length-value>

The empty center of mass (in the object’s x-direction) relative to the reference point.

center_of_mass_y <length-value>

The empty center of mass (in the object’s y-direction) relative to the reference point.

center_of_mass_z <length-value>

The empty center of mass (in the object’s z-direction) relative to the reference point.

SixDOF Integrator

integrator <string>

This sets the object’s integrator type to the specified name. If no integrator with the specified name exists, an exception will be thrown, since SixDOF objects cannot function without an integrator.

If no integrator is specified, the object will use the default integrator.

Fuel Transfers

Typically, fuel transfers are defined within the propulsion_data block. However, when external tanks (in subobjects) are present, fuel transfers may be defined outside of the propulsion system block (but still within the rigid_body_vehicle_type block).

fuel_transfer … end_fuel_transfer

Regardless of whether a fuel transfer is defined within the propulsion_data block or the rigid_body_vehicle_type block, a fuel transfer always consists of a source tank and a target tank. During runtime, the source tank will attempt to transfer fuel to the target tank, limited by the transfer rates of the two tanks.

fuel_transfer <string>
   source_tank ...
   target_tank ...
end_fuel_transfer

Each transfer is named, using the first argument after fuel_transfer.
source_tank <string>

The source tank is defined by its string name.

target_tank <string>

The target tank is defined by its string name.

remove_fuel_transfer <string>

This removes the fuel transfer with the specified name. If a no transfer exists with the name, the command is ignored.

Fuel System Modification

A fuel system can be modified (often modifying an inherited fuel system from a parent object), using the remove_fuel_tank and modify_fuel_quantity commands.

remove_fuel_tank <string>

This removes the fuel tank with the specified name. If a no tank exists with the name, the command is ignored.

modify_fuel_quantity .. end_modify_fuel_quantity
modify_fuel_quantity <string>
   fuel_quantity <mass-value>
end_modify_fuel_quantity

This modifies the quantity of fuel in the fuel tank with the specified name. If a no tank exists with the name, the command is ignored.

Parent-Relative Positioning and Separation

The following commands specify how a subobject should be positioned relative to its parent while captive.

parent_rel_x <length-value>

This specifies the x-location of the object’s reference point relative to the parent’s reference point using the parent’s body coordinate system.

Default: 0.0

parent_rel_y <length-value>

This specifies the y-location of the object’s reference point relative to the parent’s reference point using the parent’s body coordinate system.

Default: 0.0

parent_rel_z <length-value>

This specifies the z-location of the object’s reference point relative to the parent’s reference point using the parent’s body coordinate system.

Default: 0.0

parent_rel_yaw <angle-value>

This specifies the yaw of the object about its reference point relative to the parent’s body coordinate system.

Default: 0.0

parent_rel_pitch <angle-value>

This specifies the pitch of the object about its reference point relative to the parent’s body coordinate system.

parent_rel_roll <angle-value>

This specifies the roll of the object about its reference point relative to the parent’s body coordinate system.

Default: 0.0

The following commands specify the perturbation that will be applied to a subobject when it is jettisoned from its parent.

separation_vx <length-value>

This specifies the x-component of velocity (in parent body coordinates) that is imparted to the subobject when it separates from the parent.

Default: 0.0

separation_vy <length-value>

This specifies the y-component of velocity (in parent body coordinates) that is imparted to the subobject when it separates from the parent.

Default: 0.0

separation_vz <length-value>

This specifies the z-component of velocity (in parent body coordinates) that is imparted to the subobject when it separates from the parent.

Default: 0.0

separation_omega_x <length-value>

This specifies the x-component of angular velocity (in subobject body coordinates) that is imparted to the subobject when it separates from the parent.

Default: 0.0

separation_omega_y <length-value>

This specifies the y-component of angular velocity (in subobject body coordinates) that is imparted to the subobject when it separates from the parent.

Default: 0.0

separation_omega_z <length-value>

This specifies the z-component of angular velocity (in subobject body coordinates) that is imparted to the subobject when it separates from the parent.

Default: 0.0

Size Factor Parameters

The size factor parameters provide a means to adjust the size of an object. This is useful for things like parachutes or balloons which can change their size and their size determines (in part) their aerodynamic drag. Size factor supports rate of change based on radius, area, or volume. When enabled, using a sequencer action (action_enable_size_factor), the size factor will change based on the rate type selected and will “grow” or “shrink” until reaching a minimum or maximum size factor limit.

size_factor_radius <length-value>

This is the “reference” radius that is the starting radius of the object. This radius is also used to calculate a reference area and a reference volume.

Default: 1.0 m

size_factor_min <real-value>

This is the minimum factor (multiplier) that the reference radius is allowed to achieve.

Default: 1.0

size_factor_max <real-value>

This is the maximum factor (multiplier) that the reference radius is allowed to achieve.

Default: 1.0

size_factor_volume_rate_m3_per_sec <real-value>

This provides a volume-based rate of change of cubic meters per second. When volume-based mode is used, the area and radius modes should not be used.

Default: 0.0

size_factor_area_rate_m2_per_sec <real-value>

This provides an area-based rate of change of square meters per second. When area-based mode is used, the volume and radius modes should not be used.

Default: 0.0

size_factor_radius_rate_m_per_sec <real-value>

This provides an radius-based rate of change of meters per second. When radius-based mode is used, the volume and area modes should not be used.

Default: 0.0

Special Properties

Several ‘special properties’ are available to modify how a SixDOF object will behave.

use_spherical_earth <boolean-value>

If ‘true’, the SixDOF object will use a spherical earth model rather than a WGS84 (oblate) earth model. This is often a useful simplification when using ballistic missiles and space launch vehicles, since it eliminates latitude issues for guidance associated with an oblate earth.

Default: false

use_rotating_earth <boolean-value>

If ‘true’, the SixDOF object will use a rotating earth model rather than a non-rotating earth model.

Default: false

ignore_jettisoned_objects <boolean-value>

If ‘true’, any subobjects that are jettisoned from the SixDOF object will be removed immediately and will never have an AFSIM platform. This is often used to speed up runtimes when spent stages from a ballistic missile or space launch vehicle are not needed.

Default: false

fixed_object <boolean-value>

If ‘true’, the SixDOF object will not perform kinematic calculations as part of its “update” but will instead remain motionless.

Default: false

Object Creation Support

These commands are used by functions that will help create SixDOF models. They are used to define limits to the performance envelope.

nominal_max_mach <real-value>

This defines the maximum Mach expected by the object. This does not impose a limit on performance, rather it is a hint for functions that calculate performance and/or analysis.

nominal_max_alpha <angle-value>

This defines the maximum alpha (angle of attack) expected by the object. This does not impose a limit on performance, rather it is a hint for functions that calculate performance and/or analysis.

nominal_min_alpha <angle-value>

This defines the minimum alpha (angle of attack) expected by the object. This does not impose a limit on performance, rather it is a hint for functions that calculate performance and/or analysis.

nominal_max_beta <angle-value>

This defines the maximum beta (angle of sideslip) expected by the object. This does not impose a limit on performance, rather it is a hint for functions that calculate performance and/or analysis.