aerosandbox.dynamics.rigid_body
#
Subpackages#
Submodules#
Package Contents#
Classes#
Dynamics instance: |
|
Dynamics instance: |
- class aerosandbox.dynamics.rigid_body.DynamicsRigidBody2DBody(mass_props=None, x_e=0, z_e=0, u_b=0, w_b=0, theta=0, q=0)[source]#
Bases:
aerosandbox.dynamics.rigid_body.rigid_3D.body_euler.DynamicsRigidBody3DBodyEuler
Dynamics instance: * simulating a rigid body * in 2D * with velocity parameterized in body axes
- State variables:
x_e: x-position, in Earth axes. [meters] z_e: z-position, in Earth axes. [meters] u_b: x-velocity, in body axes. [m/s] w_b: z-velocity, in body axes. [m/s] theta: pitch angle. [rad] q: y-angular-velocity, in body axes. [rad/sec]
- Control variables:
Fx_b: Force along the body-x axis. [N] Fz_b: Force along the body-z axis. [N] My_b: Moment about the body-y axis. [Nm]
- Parameters:
mass_props (aerosandbox.weights.mass_properties.MassProperties) –
x_e (Union[float, aerosandbox.numpy.ndarray]) –
z_e (Union[float, aerosandbox.numpy.ndarray]) –
u_b (Union[float, aerosandbox.numpy.ndarray]) –
w_b (Union[float, aerosandbox.numpy.ndarray]) –
theta (Union[float, aerosandbox.numpy.ndarray]) –
q (Union[float, aerosandbox.numpy.ndarray]) –
- property state#
Returns the state variables of this Dynamics instance as a Dict.
Keys are strings that give the name of the variables. Values are the variables themselves.
- This method should look something like:
>>> { >>> "x_e": self.x_e, >>> "u_e": self.u_e, >>> ... >>> }
- property control_variables#
- state_derivatives()[source]#
Computes the state derivatives (i.e. equations of motion) for a body in 3D space.
Based on Section 9.8.2 of Flight Vehicle Aerodynamics by Mark Drela.
- Returns:
- {
“xe” : d_xe, “ye” : d_ye, “ze” : d_ze, “u” : d_u, “v” : d_v, “w” : d_w, “phi” : d_phi, “theta”: d_theta, “psi” : d_psi, “p” : d_p, “q” : d_q, “r” : d_r,
}
- Return type:
Time derivatives of each of the 12 state variables, given in a dictionary
- class aerosandbox.dynamics.rigid_body.DynamicsRigidBody3DBodyEuler(mass_props=None, x_e=0, y_e=0, z_e=0, u_b=0, v_b=0, w_b=0, phi=0, theta=0, psi=0, p=0, q=0, r=0)[source]#
Bases:
aerosandbox.dynamics.rigid_body.common_rigid_body._DynamicsRigidBodyBaseClass
Dynamics instance: * simulating a rigid body * in 3D * with velocity parameterized in body axes * and angle parameterized in Euler angles
- State variables:
x_e: x-position, in Earth axes. [meters] y_e: y-position, in Earth axes. [meters] z_e: z-position, in Earth axes. [meters] u_b: x-velocity, in body axes. [m/s] v_b: y-velocity, in body axes. [m/s] w_b: z-velocity, in body axes. [m/s] phi: roll angle. Uses yaw-pitch-roll Euler angle convention. [rad] theta: pitch angle. Uses yaw-pitch-roll Euler angle convention. [rad] psi: yaw angle. Uses yaw-pitch-roll Euler angle convention. [rad] p: x-angular-velocity, in body axes. [rad/sec] q: y-angular-velocity, in body axes. [rad/sec] r: z-angular-velocity, in body axes. [rad/sec]
- Control variables:
Fx_b: Force along the body-x axis. [N] Fy_b: Force along the body-y axis. [N] Fz_b: Force along the body-z axis. [N] Mx_b: Moment about the body-x axis. [Nm] My_b: Moment about the body-y axis. [Nm] Mz_b: Moment about the body-z axis. [Nm] hx_b: Angular momentum (e.g., propellers) about the body-x axis. [kg*m^2/sec] hy_b: Angular momentum (e.g., propellers) about the body-y axis. [kg*m^2/sec] hz_b: Angular momentum (e.g., propellers) about the body-z axis. [kg*m^2/sec]
- Parameters:
mass_props (aerosandbox.weights.mass_properties.MassProperties) –
x_e (Union[float, aerosandbox.numpy.ndarray]) –
y_e (Union[float, aerosandbox.numpy.ndarray]) –
z_e (Union[float, aerosandbox.numpy.ndarray]) –
u_b (Union[float, aerosandbox.numpy.ndarray]) –
v_b (Union[float, aerosandbox.numpy.ndarray]) –
w_b (Union[float, aerosandbox.numpy.ndarray]) –
phi (Union[float, aerosandbox.numpy.ndarray]) –
theta (Union[float, aerosandbox.numpy.ndarray]) –
psi (Union[float, aerosandbox.numpy.ndarray]) –
p (Union[float, aerosandbox.numpy.ndarray]) –
q (Union[float, aerosandbox.numpy.ndarray]) –
r (Union[float, aerosandbox.numpy.ndarray]) –
- property state#
Returns the state variables of this Dynamics instance as a Dict.
Keys are strings that give the name of the variables. Values are the variables themselves.
- This method should look something like:
>>> { >>> "x_e": self.x_e, >>> "u_e": self.u_e, >>> ... >>> }
- property control_variables#
- property speed#
The speed of the object, expressed as a scalar.
- property alpha#
The angle of attack, in degrees.
- property beta#
The sideslip angle, in degrees.
- state_derivatives()[source]#
Computes the state derivatives (i.e. equations of motion) for a body in 3D space.
Based on Section 9.8.2 of Flight Vehicle Aerodynamics by Mark Drela.
- Returns:
- {
“xe” : d_xe, “ye” : d_ye, “ze” : d_ze, “u” : d_u, “v” : d_v, “w” : d_w, “phi” : d_phi, “theta”: d_theta, “psi” : d_psi, “p” : d_p, “q” : d_q, “r” : d_r,
}
- Return type:
Time derivatives of each of the 12 state variables, given in a dictionary
- convert_axes(x_from, y_from, z_from, from_axes, to_axes)[source]#
Converts a vector [x_from, y_from, z_from], as given in the from_axes frame, to an equivalent vector [x_to, y_to, z_to], as given in the to_axes frame.
Identical to OperatingPoint.convert_axes(), but adds in “earth” as a valid axis frame. For more documentation, see the docstring of OperatingPoint.convert_axes().
- Both from_axes and to_axes should be a string, one of:
“geometry”
“body”
“wind”
“stability”
“earth”
- Parameters:
x_from – x-component of the vector, in from_axes frame.
y_from – y-component of the vector, in from_axes frame.
z_from – z-component of the vector, in from_axes frame.
from_axes (str) – The axes to convert from.
to_axes (str) – The axes to convert to.
Returns: The x-, y-, and z-components of the vector, in to_axes frame. Given as a tuple.
- add_force(Fx=0, Fy=0, Fz=0, axes='body')[source]#
Adds a force (in whichever axis system you choose) to this Dynamics instance.
- Parameters:
Fx (Union[float, aerosandbox.numpy.ndarray]) – Force in the x-direction in the axis system chosen. [N]
Fy (Union[float, aerosandbox.numpy.ndarray]) – Force in the y-direction in the axis system chosen. [N]
Fz (Union[float, aerosandbox.numpy.ndarray]) – Force in the z-direction in the axis system chosen. [N]
axes – The axis system that the specified force is in. One of: * “geometry” * “body” * “wind” * “stability” * “earth”
Returns: None (in-place)
- add_moment(Mx=0, My=0, Mz=0, axes='body')[source]#
Adds a moment (in whichever axis system you choose) to this Dynamics instance.
- Parameters:
Mx (Union[float, aerosandbox.numpy.ndarray]) – Moment about the x-axis in the axis system chosen. Assumed these moments are applied about the center of mass. [Nm]
My (Union[float, aerosandbox.numpy.ndarray]) – Moment about the y-axis in the axis system chosen. Assumed these moments are applied about the center of mass. [Nm]
Mz (Union[float, aerosandbox.numpy.ndarray]) – Moment about the z-axis in the axis system chosen. Assumed these moments are applied about the center of mass. [Nm]
axes – The axis system that the specified moment is in. One of: * “geometry” * “body” * “wind” * “stability” * “earth”
Returns: None (in-place)