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 used for the calculation of a panelled radiation pressure acceleration and the calculation of aerodynamic coefficients in both rarefied and hypersonic flow using gas-surface interaction models (GSMIs).
The main interfaces with Tudat for a vehicle shape model is the vehicle_shape_settings
attribute (of type FullPanelledBodySettings) of the body settings, which defines settings for the macromodel of a body.
The functions in this submodule are used to create these settings objects. When creating a body (typically using the
create_system_of_bodies() function), an object of type
VehicleSystems is created
and added to the associated Body object based on the settings object, which can
be retrieved using the system_models attribute. The VehicleSystems contains (among various other models) the macromodel properties of the body.
The current panels in Tudat allow a list of panels to be defined, with the minimal geometrical properties of panel \(i\) defined by the surface normal vector \(\hat{\mathbf{n}}_{i}\) and the surface area \(A_{i}\). Another way to completely define the geometry of a panel in space is by defining its three vertices (triangles allow for speed-ups at the algorithm level), a rotation frame and its origin in the body-fixed frame, allowing for the computation of self-shadowing (SSH) and panelled aerodynamic coefficients. Due to the complexity of manually defining each triangular panel, this option is available only by loading a full macromodel.
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. Large macromodels can be loaded from CAD files in DAE format using body_panel_settings_list_from_dae().
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¶
|
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 has time-variable orientation in a given frame. |
|
|
Function for creating settings for a vehicle exterior panel where the surface normal tracks a given body. |
|
Function for creating a set of material properties. |
|
Function for creating settings for a full panel |
|
Function for creating settings for a full panelled vehicle exterior. |
|
Function for creating a simple box-wing spacecraft exterior shape with reflection law settings. |
|
Function for loading a DAE file containing the macromodel of a spacecraft |
Function for merging lists of panel body settings :param list_of_lists_of_body_panel_settings: List of lists of body panel settings. |
- frame_fixed_panel_geometry(surface_normal: numpy.ndarray[numpy.float64[3, 1]], area: float | SupportsIndex, frame_orientation: str = '') tudatpy.kernel.dynamics.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_orientationof 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_orientationmay be defined as the identifier of the frame fixed to one of the vehicle parts (solar array, antenna, etc.). Seefull_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:
- Returns:
Object defining settings for panel geometry
- Return type:
- time_varying_panel_geometry(surface_normal_function: Callable[[], numpy.ndarray[numpy.float64[3, 1]]], area: float | SupportsIndex, frame_orientation: str) tudatpy.kernel.dynamics.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[[
Time], np.ndarray]) – Function which takes the current epoch as input (as Time object) 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:
- body_tracking_panel_geometry(body_to_track: str, towards_tracked_body: bool, area: float | SupportsIndex, frame_orientation: str = '') tudatpy.kernel.dynamics.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:
- material_properties(specular_reflectivity: float | SupportsIndex = -1, diffuse_reflectivity: float | SupportsIndex = -1, energy_accomodation_coefficient: float | SupportsIndex = -1, normal_accomodation_coefficient: float | SupportsIndex = -1, tangential_accomodation_coefficient: float | SupportsIndex = -1, normal_velocity_at_wall_ratio: float | SupportsIndex = -1) tudatpy.kernel.dynamics.environment_setup.vehicle_systems.MaterialProperties¶
Function for creating a set of material properties.
- Parameters:
specular_reflectivity (float, default = -1) – Specular reflectivity coefficient.
diffuse_reflectivity (float, default = -1) – Diffuse reflectivity coefficient.
energy_accomodation_coefficient (float, default = -1) – Energy accommodation coefficient.
normal_accomodation_coefficient (float, default = -1) – Normal accommodation coefficient.
tangential_accomodation_coefficient (float, default = -1) – Tangential accommodation coefficient.
normal_velocity_at_wall_ratio (float, default = -1) – Normal velocity ratio at the wall.
- Returns:
Material properties of a panel.
- Return type:
- body_panel_settings(panel_geometry: tudatpy.kernel.dynamics.environment_setup.vehicle_systems.BodyPanelGeometrySettings, panel_reflection_law: tudatpy.kernel.dynamics.environment_setup.radiation_pressure.BodyPanelReflectionLawSettings, panel_type_id: str = '', panel_material_properties: tudat::simulation_setup::MaterialProperties = None) tudatpy.kernel.dynamics.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
BodyPanelReflectionLawSettingscan be created using thespecular_diffuse_body_panel_reflection()orlambertian_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:
panel_geometry (BodyPanelGeometrySettings) – Geometric properties of the panel (size and orientation, at least)
panel_reflection_law (BodyPanelReflectionLawSettings) – Reflection law settings of the panel
panel_type_id (str, default = "") – Optional identifier for panel type
panel_material_properties (MaterialProperties, default = nullptr) – Material properties of a panel
- Returns:
Object defining settings for a panel
- Return type:
- full_panelled_body_settings(panel_settings: list[tudatpy.kernel.dynamics.environment_setup.vehicle_systems.BodyPanelSettings], part_rotation_model_settings: dict[str, tudatpy.kernel.dynamics.environment_setup.rotation_model.RotationModelSettings] = {}) tudatpy.kernel.dynamics.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_orientationinputs to functions creating settings forBodyPanelGeometrySettings. For instance, assigning a rotation model to frameLRO_SolarArray(dict key forpart_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:
- box_wing_panelled_body_settings(length: float | SupportsIndex, width: float | SupportsIndex, height: float | SupportsIndex, solar_array_area: float | SupportsIndex, box_specular_reflectivity: float | SupportsIndex, box_diffuse_reflectivity: float | SupportsIndex, solar_array_specular_reflectivity: float | SupportsIndex, solar_array_diffuse_reflectivity: float | SupportsIndex, box_instantaneous_reradiation: bool = True, solar_array_instantaneous_reradiation: bool = True) tudatpy.kernel.dynamics.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()withpanel_settingsgenerated 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:
- body_panel_settings_list_from_dae(file_path: str, frame_origin: numpy.ndarray[numpy.float64[3, 1]], material_properties: dict[str, tudat::simulation_setup::MaterialProperties], reradiation_settings: dict[str, bool], input_unit: str = 'm', frame_orientation: str = '') list[tudatpy.kernel.dynamics.environment_setup.vehicle_systems.BodyPanelSettings]¶
Function for loading a DAE file containing the macromodel of a spacecraft
This function creates a list of
BodyPanelSettingsgenerated from a custom macromodel exported in the DAE (COLLADA) file format.- Parameters:
file_path (str) – Path to .dae file with geometry data.
frame_origin (np.array) – Frame origin of the .dae part to be loaded given as cartesian coordinates in the body-fixed frame.
material_properties (dict[str, MaterialProperties]) – Dictionary of material properties, as they appear in the .dae file provided.
reradiation_settings (dict[str, bool]) – Dictionary of re-radiation settings for materials, as they appear in the .dae file provided.
input_unit (str, default = "m") – Identifier of unit of length used in input model (available units “mm”, “m”, “in”).
frame_orientation (str, default = "") – Identifier of the frame to which the panel is fixed (if body-fixed frame, this can be left empty).
- Returns:
List of settings for body panels
- Return type:
- merge_body_panel_setting_lists(list_of_lists_of_body_panel_settings: list[list[tudatpy.kernel.dynamics.environment_setup.vehicle_systems.BodyPanelSettings]]) list[tudatpy.kernel.dynamics.environment_setup.vehicle_systems.BodyPanelSettings]¶
Function for merging lists of panel body settings :param list_of_lists_of_body_panel_settings: List of lists of body panel settings. :type list_of_lists_of_body_panel_settings: list[list[BodyPanelSettings], …]
- Returns:
List of settings for body panels assembled from different parts, creating a coherent list of body panel settings.
- Return type:
Classes¶
Class for providing the complete material properties of a panel. |
|
Base class for defining the geometrical properties of a single panel on the vehicle's exterior. |
|
Derived class for defining the geometrical properties of a single panel on the vehicle's exterior, with a fixed orientation in a given frame. |
|
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. |
|
Class for defining the complete properties of a single panel on the vehicle's exterior. |
|
Class for providing the complete settings for a panelled body exterior. |
- class MaterialProperties¶
Bases:
pybind11_objectClass for providing the complete material properties of a panel.
This is typically defined through the
material_properties()function. The class contains a number of material properties used for computing radiation pressure acceleration and panelled aerodynamic coefficients.
- class BodyPanelGeometrySettings¶
Bases:
pybind11_objectBase 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(), orbody_tracking_panel_geometry()functions.
- class FrameFixedBodyPanelGeometrySettings¶
Bases:
BodyPanelGeometrySettingsDerived 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 surface_normal¶
Panel outward surface normal vector (in specified frame)
- Type:
np.array
- class FrameVariableBodyPanelGeometrySettings¶
Bases:
BodyPanelGeometrySettingsDerived 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()orbody_tracking_panel_geometry()functions.
- class BodyPanelSettings¶
Bases:
pybind11_objectClass 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.
- property panel_material_properties¶
Full material properties of the panel, both reflective and aerodynamic.
- Type:
- 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:
- property reflection_law_settings¶
Reflection law settings of the panel.
- class FullPanelledBodySettings¶
Bases:
pybind11_objectClass for providing the complete settings for a panelled body exterior.
This is typically defined through the
full_panelled_body_settings()orbox_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:
- 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: