vehicle_systems

This module contains a set of factory functions for setting up physical and system properties of a vehicle. For various high-accuracy models of non-conservative spacecraft dynamics, a so-called macromodel is required which defines the external shape of the vehicle. This macromodel is typically defined by a set of panels, with each panel assigned specific properties of how it interacts with the environment. At present, the spacecraft macromodel in Tudat is only used for the calculation of a panelled radiation pressure acceleration, but future updates will also use it for the calculation of aerodynamic coefficients in both rarefied and hypersonic flow.

The current panels in Tudat allow a list of panels to be defined, with the geometrical properties of panel \(i\) defined by the surface normal vector \(\hat{\mathbf{n}}_{i}\) and the surface area \(A_{i}\). Note that, since the panel shape or location is not yet defined, computing torques due to surface forces, or incorporating shadowing into the panel force calculation, is not yet supported.

The panel surface normal may be defined in either the body-fixed frame \(\mathcal{B}\) of the vehicle, or to a ‘vehicle-part-fixed frame’ \(\mathcal{F}_{j}\). A ‘vehicle part’ is defined as a part of the vehicle that can move/rotate w.r.t. the body-fixed frame of the spacecraft. Typical examples are the solar arrays and an movable antenna.

The panel surface normal (in either the body frame or the part frame), may be defined by the frame_fixed_panel_geometry(), time_varying_panel_geometry() or body_tracking_panel_geometry() functions, where the latter is used to ensure that a panel normal automatically points to/away from another bodY (e.g. the Sun for solar panels).

A full panel is created by defining its geometry, and models for its interaction with the environment (currently limited to a reflection law to compute the influence of radiation pressure) using the body_panel_settings() function.

The vehicle macromodel, and the rotation models from the body-fixed frame to the (optional) part-fixed frames are defined by using the full_panelled_body_settings() function, and assigned to the vehicle_shape_settings attribute of the BodySettings class. When a full macromodel is not available to the user, a ‘box-wing’ model may also be used, which creates the macromodel based on user settings, using the box_wing_panelled_body_settings() function.

Functions

frame_fixed_panel_geometry(surface_normal, area)

Function for creating settings for a vehicle exterior panel that is fixed to a given frame.

time_varying_panel_geometry(...)

Function for creating settings for a vehicle exterior panel that has time-variable orientation in a given frame.

body_tracking_panel_geometry(body_to_track, ...)

Function for creating settings for a vehicle exterior panel where the surface normal tracks a given body.

body_panel_settings(panel_geometry, ...[, ...])

Function for creating settings for a full panel

full_panelled_body_settings(panel_settings)

Function for creating settings for a full panelled vehicle exterior.

box_wing_panelled_body_settings(length, ...)

Function for creating a simple box-wing spacecraft exterior shape with reflection law settings.

frame_fixed_panel_geometry(surface_normal: numpy.ndarray[numpy.float64[3, 1]], area: float, frame_orientation: str = '') tudatpy.kernel.numerical_simulation.environment_setup.vehicle_systems.BodyPanelGeometrySettings

Function for creating settings for a vehicle exterior panel that is fixed to a given frame.

Function for creating settings for a vehicle exterior panel that is fixed to a given frame, meaning that the orientation of the panel is fully defined by the rotation model(s) defined in the vehicle. The constant surface normal \(\hat{\mathbf{n}}^{\mathcal{F}}\) in frame \(\mathcal{F}\) is provided by the user. If the frame_orientation of this function is left empty, the panel is fixed to the body-frame, and \(\mathcal{F}\) is the body-fixed frame \(\mathcal{B}\).

Alternatively, the frame_orientation may be defined as the identifier of the frame fixed to one of the vehicle parts (solar array, antenna, etc.). See full_panelled_body_settings() for the definition of rotation models of vehicle parts.

Note that this panel model does not contain information on panel location or shape, only its area and surface normal, and is therefore not suitable for computation of panel shadowing of torque computations.

Parameters:
  • surface_normal (np.array) – Panel outward surface normal vector (in specified frame)

  • area (float) – Panel surface area

  • frame_orientation (str, default = "") – Identifier of the frame to which the panel is fixed (if body-fixed frame, this can be left empty)

Returns:

Object defining settings for panel geometry

Return type:

BodyPanelGeometrySettings

time_varying_panel_geometry(surface_normal_function: Callable[[], numpy.ndarray[numpy.float64[3, 1]]], area: float, frame_orientation: str) tudatpy.kernel.numerical_simulation.environment_setup.vehicle_systems.BodyPanelGeometrySettings

Function for creating settings for a vehicle exterior panel that has time-variable orientation in a given frame.

As frame_fixed_panel_geometry(), but with a time-variable outward surface normal \(\hat{\mathbf{n}}^{\mathcal{F}}(t)\)

Parameters:
  • surface_normal_function (Callable[[], np.ndarray]) – Function which takes the current epoch as input and returns the panel outward surface normal vector (in specified frame).

  • area (float) – Panel surface area

  • frame_orientation (str, default = "") – Identifier of the frame in which the panel normal is defined

Returns:

Object defining settings for panel geometry

Return type:

BodyPanelGeometrySettings

body_tracking_panel_geometry(body_to_track: str, towards_tracked_body: bool, area: float, frame_orientation: str = '') tudatpy.kernel.numerical_simulation.environment_setup.vehicle_systems.BodyPanelGeometrySettings

Function for creating settings for a vehicle exterior panel where the surface normal tracks a given body.

Function for creating settings for a vehicle exterior panel where the surface normal tracks a given body, for instance to define the surface normal of a solar array to always point towards the Sun, or an antenna to always point towards the Earth. When using this option, the panel surface normal \(\hat{\mathbf{n}}\) is computed in an inertial frame based on the tracked body, and then (if necessary) rotated to the body-fixed frame. Note that this panel model does not contain information on panel location or shape, only its area and surface normal, and is therefore not suitable for computation of panel shadowing of torque computations.

Parameters:
  • body_to_track (str) – Name of the body towards (or away from) which the panel surface normal is to point

  • towards_tracked_body (bool) – Boolean defining whether the normal vector points towards (if true) or away from (if false) the tracked body

  • area (float) – Panel surface area

  • frame_orientation (str, default = "") – Identifier of the frame in which the panel is defined (with time-variable orientation, defined by tracked body). Note that this option is typically only relevant for internal book-keeping, and can be left empty

Returns:

Object defining settings for panel geometry

Return type:

BodyPanelGeometrySettings

body_panel_settings(panel_geometry: tudatpy.kernel.numerical_simulation.environment_setup.vehicle_systems.BodyPanelGeometrySettings, panel_reflection_law: tudatpy.kernel.numerical_simulation.environment_setup.radiation_pressure.BodyPanelReflectionLawSettings, panel_type_id: str = '') tudatpy.kernel.numerical_simulation.environment_setup.vehicle_systems.BodyPanelSettings

Function for creating settings for a full panel

Function for creating settings for a full panel (presently only geometry and reflection properties). The BodyPanelReflectionLawSettings can be created using the specular_diffuse_body_panel_reflection() or lambertian_body_panel_reflection() functions. The panel can also be endowed with an identifier to specify the type of the panel. This has no direct consequences for the model, but may be useful in estimation, to for instance estimate the reflection properties of all panels specified with identified “MLI” as a single parameter

Parameters:
Returns:

Object defining settings for a panel

Return type:

BodyPanelSettings

full_panelled_body_settings(panel_settings: list[tudatpy.kernel.numerical_simulation.environment_setup.vehicle_systems.BodyPanelSettings], part_rotation_model_settings: dict[str, tudatpy.kernel.numerical_simulation.environment_setup.rotation_model.RotationModelSettings] = {}) tudatpy.kernel.numerical_simulation.environment_setup.vehicle_systems.FullPanelledBodySettings

Function for creating settings for a full panelled vehicle exterior.

Function for creating settings for a full panelled vehicle exterior, taking a list of panel settings, and (optionally) a list of rotation model settings for vehicle parts. The identifiers for the rotation models are used to specify the names of part-fixed frames, which are used by the frame_orientation inputs to functions creating settings for BodyPanelGeometrySettings. For instance, assigning a rotation model to frame LRO_SolarArray (dict key for part_rotation_model_settings) allows panels defined in the frame with this same frame orientation to be defined. The associated rotation model defines rotations from body-fixed frame \(\mathcal{B}\) to part-fixed frame \(\mathcal{F}_{j}\) (for part \(j\)). The rotation from part-fixed (where the surface normal is defined) to inertial frame is then computed from \(\mathbf{R}^{I/\mathcal{F}_{j}}=\mathbf{R}^{I/\mathcal{B}}\mathbf{R}^{\mathcal{B}/\mathcal{F}_{j}}\), where \(\mathbf{R}^{I/\mathcal{B}}\) defines the body’s orientation, and \(\mathbf{R}^{\mathcal{B}/\mathcal{F}_{j}}\) the part orientation (w.r.t. a body-fixed frame)

Parameters:
  • panel_settings (list[BodyPanelSettings]) – List of settings for body panels.

  • part_rotation_model_settings (dict[str,RotationModelSettings], default = dict()) – Rotation model settings per vehicle part (default empty, indicating no part-fixed frames are defined)

Returns:

Object defining full panelled vehicle exterior

Return type:

FullPanelledBodySettings

box_wing_panelled_body_settings(length: float, width: float, height: float, solar_array_area: float, box_specular_reflectivity: float, box_diffuse_reflectivity: float, solar_array_specular_reflectivity: float, solar_array_diffuse_reflectivity: float, box_instantaneous_reradiation: bool = True, solar_array_instantaneous_reradiation: bool = True) tudatpy.kernel.numerical_simulation.environment_setup.vehicle_systems.FullPanelledBodySettings

Function for creating a simple box-wing spacecraft exterior shape with reflection law settings.

This function creates a full_panelled_body_settings() with panel_settings generated from simple box-wing settings. The assumptions behind the box-wing model are:

  • The spacecraft shape is defined by a rectangular box (cuboid) and solar array

  • The box has its faces parallel to the xy-, xz- and yz-planes

  • The solar array surface normal always points towards the Sun

  • Each box face has identical reflection law settings, defined by specular_diffuse_body_panel_reflection() settings.

  • The solar array has reflection law settings, defined by specular_diffuse_body_panel_reflection() settings.

Parameters:
  • length (float) – Box length (size in body-fixed x-direction).

  • width (float) – Box width (size in body-fixed y-direction).

  • height (float) – Box height (size in body-fixed z-direction).

  • solar_array_area (float) – Surface area of the solar array.

  • box_specular_reflectivity (float) – Box secular reflectivity \(\rho\).

  • box_diffuse_reflectivity (float) – Box secular reflectivity \(\delta\).

  • solar_array_specular_reflectivity (float) – Solar array secular reflectivity \(\rho\).

  • solar_array_diffuse_reflectivity (float) – Solar array secular reflectivity \(\delta\).

  • box_instantaneous_reradiation (bool) – Boolean denoting whether absorbed radiation is instantaneously retransmitted from box (yes, if true).

  • solar_array_instantaneous_reradiation (bool) – Boolean denoting whether absorbed radiation is instantaneously retransmitted from solar array (yes, if true).

Returns:

Object defining full panelled vehicle exterior

Return type:

FullPanelledBodySettings

Classes

BodyPanelGeometrySettings

Base class for defining the geometrical properties of a single panel on the vehicle's exterior.

FrameFixedBodyPanelGeometrySettings

Derived class for defining the geometrical properties of a single panel on the vehicle's exterior, with a fixed orientation in a given frame.

FrameVariableBodyPanelGeometrySettings

Derived class for defining the geometrical properties of a single panel on the vehicle's exterior, with a time-variable orientation in a given frame.

BodyPanelSettings

Class for defining the complete properties of a single panel on the vehicle's exterior.

FullPanelledBodySettings

Class for providing the complete settings for a panelled body exterior.

class BodyPanelGeometrySettings

Base class for defining the geometrical properties of a single panel on the vehicle’s exterior. A derived class of this can be instantiated through the frame_fixed_panel_geometry(), time_varying_panel_geometry(), or body_tracking_panel_geometry() functions.

class FrameFixedBodyPanelGeometrySettings

Derived class for defining the geometrical properties of a single panel on the vehicle’s exterior, with a fixed orientation in a given frame. This class is typically instantiated through the frame_fixed_panel_geometry() function.

property area

Panel surface area

Type:

float

property surface_normal

Panel outward surface normal vector (in specified frame)

Type:

np.array

class FrameVariableBodyPanelGeometrySettings

Derived class for defining the geometrical properties of a single panel on the vehicle’s exterior, with a time-variable orientation in a given frame. This class is typically instantiated through the time_varying_panel_geometry() or body_tracking_panel_geometry() functions.

property area

Panel surface area

Type:

float

property surface_normal_function

Function which takes the current epoch as input and returns the panel outward surface normal vector (in specified frame).

Type:

Callable[[float], np.ndarray]

class BodyPanelSettings

Class for defining the complete properties of a single panel on the vehicle’s exterior. This class is typically instantiated through the body_panel_settings() function.

property panel_geometry

Geometric properties of the panel, including surface normal vector and area.

Type:

BodyPanelGeometrySettings

property panel_type_id

Optional identifier for panel type. This is typically used to identify the type of panel and can be used to assign a rotation model to a specific panel type, see the full_panelled_body_settings() function.

Type:

str

property reflection_law_settings

Reflection law settings of the panel.

Type:

BodyPanelReflectionLawSettings

class FullPanelledBodySettings

Class for providing the complete settings for a panelled body exterior.

This is typically defined through the full_panelled_body_settings() or box_wing_panelled_body_settings() functions. The class contains a list of panel settings, and (optionally) a list of rotation model settings for vehicle parts.

property panel_settings_list

List of individual body panel settings on the body.

Type:

list[BodyPanelSettings]

property part_rotation_model_settings

Dictionary of rotation model settings per vehicle parts. The rotation model settings are defined per panel_type_id, as defined in the BodyPanelSettings.

Type:

dict[str,RotationModelSettings]