pfh.glidersim.paraglider#
Models of complete paraglider systems.
Classes
|
A 6 degrees-of-freedom paraglider model; there is no relative motion between the wing and the harness. |
|
A 6 degrees-of-freedom paraglider model; there is no relative motion between the wing and the harness. |
|
A 6 degrees-of-freedom paraglider model; there is no relative motion between the wing and the harness. |
|
A 9 degrees-of-freedom paraglider model, allowing rotation between the wing and the harness, with the connection modelled by spring-damper dynamics. |
|
A 9 degrees-of-freedom paraglider model, allowing rotation between the wing and the harness, with the connection modelled by spring-damper dynamics. |
|
A 9 degrees-of-freedom paraglider model, allowing rotation between the wing and the harness, with the connection modelled by spring-damper dynamics. |
- class pfh.glidersim.paraglider.ParagliderSystemDynamics6a(wing: ParagliderWing, payload: ParagliderHarness, *, use_apparent_mass: bool = True)#
Bases:
object
A 6 degrees-of-freedom paraglider model; there is no relative motion between the wing and the harness.
This version uses the riser connection midpoint RM as the reference point for the angular momentum, and can include the effects of apparent mass.
- Parameters
- wingParagliderWing
- payloadParagliderHarness
The harness model includes the mass of the pilot.
- use_apparent_massbool, optional
Whether to estimate the effects of apparent inertia.
Methods
accelerations
(v_RM2e, omega_b2e, g[, ...])Compute the translational and angular accelerations about the center of mass.
equilibrium_state
([delta_a, delta_b, ...])Compute the equilibrium glider state for given inputs.
r_CP2RM
([delta_a, delta_w])Compute the reference points for the composite Paraglider system.
- __init__(wing: ParagliderWing, payload: ParagliderHarness, *, use_apparent_mass: bool = True) None #
- r_CP2RM(delta_a: float = 0, delta_w: float = 0)#
Compute the reference points for the composite Paraglider system.
All the components of the Paraglider that experience aerodynamic forces need their relative wind vectors. Each component is responsible for creating a list of the coordinates where they need the value of the wind. This function then transforms them into body coordinates.
- Parameters
- delta_afloat [percentage]
The fraction of maximum accelerator
- delta_wfloat [percentage]
The fraction of weight shift, from -1 (left) to +1 (right)
- Returns
- ndarray of float, shape (K,3) [m]
The position of the control points with respect to RM.
- accelerations(v_RM2e, omega_b2e, g, delta_a: float = 0, delta_bl: float = 0, delta_br: float = 0, delta_w: float = 0, rho_air: float = 1.225, v_W2e=(0, 0, 0), reference_solution: Optional[dict] = None)#
Compute the translational and angular accelerations about the center of mass.
- Parameters
- v_RM2earray of float, shape (3,) [m/s]
Translational velocity of RM in body frd coordinates, where RM is the midpoint between the two riser connection points.
- omega_b2earray of float, shape (3,) [rad/s]
Angular velocity of the body, in body frd coordinates.
- garray of float, shape (3,) [m/s^s]
The gravity vector in body frd
- delta_afloat [percentage]
The fraction of maximum accelerator
- delta_blfloat [percentage]
The fraction of maximum left brake
- delta_brfloat [percentage]
The fraction of maximum right brake
- delta_wfloat [percentage]
The fraction of weight shift, from -1 (left) to +1 (right)
- rho_airfloat [kg/m^3], optional
Air density
- v_W2endarray of float, shape (3,) or (K,3) [m/s], optional
The wind relative to the earth, in body frd coordinates. If it is a (3,) array then the wind is uniform at every control point. If it is a (K,3) array then it is the vectors for each control point.
- reference_solutiondictionary, optional
FIXME: docstring. See Phillips.__call__
- Returns
- a_RM2earray of float, shape (3,) [m/s^2]
Translational acceleration of RM in body frd coordinates.
- alpha_b2earray of float, shape (3,) [rad/s^2]
Angular acceleration of the body with respect to Earth as the time derivative of angular velocity taken with respect to the body frame, expressed in body frd coordinates \(\left( ^b \dot{\omega}_{b/e}^b \right)\).
- solutiondictionary
FIXME: docstring. See Phillips.__call__
- equilibrium_state(delta_a: float = 0, delta_b: float = 0, rho_air: float = 1.225, alpha_0: Optional[float] = None, theta_0: float = 0, v_0: float = 10, reference_solution: Optional[dict] = None)#
Compute the equilibrium glider state for given inputs.
Assumes that the wing is symmetric about the xz-plane.
- Parameters
- delta_afloat, optional
Fraction of accelerator application, where 0 <= delta_a <= 1
- delta_bfloat, optional
Fraction of symmetric brake application, where 0 <= delta_b <= 1
- rho_airfloat [kg/m^3], optional
Air density
- alpha_0float [rad], optional
An initial proposal for the body angle of attack. If no value is set, the wing equilibrium alpha will be used.
- theta_0float [rad], optional
An initial proposal for the body pitch angle.
- v_0float [m/s], optional
An initial proposal for the body airspeed.
- reference_solutiondictionary, optional
FIXME: docstring. See Phillips.__call__
- Returns
- dictionary
- alpha_bfloat [radians]
Wing angle of attack
- gamma_bfloat [radians]
Wing glide angle
- glide_ratiofloat
Units of ground distance traveled per unit of altitude lost
- Theta_b2earray of float, shape (3,) [radians]
Equilibrium orientation of the body relative to Earth as a set of Tait-Bryan yaw-pitch-role angles.
- v_RM2efloat [m/s]
Steady-state velocity of the riser midpoint in body coordinates
- solutiondictionary
FIXME: docstring. See Phillips.__call__
- class pfh.glidersim.paraglider.ParagliderSystemDynamics6b(wing: ParagliderWing, payload: ParagliderHarness)#
Bases:
pfh.glidersim.paraglider.ParagliderSystemDynamics6a
A 6 degrees-of-freedom paraglider model; there is no relative motion between the wing and the harness.
This version uses the body center of mass B as the reference point for the angular momentum. Using the center of mass produces a decoupled linear system, which is easier to reason about, making this model useful for validating other models. The system solves for a_B2e which is then used to compute a_RM2e.
This model does not support apparent mass; the apparent mass model requires that the reference point lies in the xz-plane, which is not the case for B during weight shift control. As a result, this model is intended to help validate other models involving the real mass only.
- Parameters
- wingParagliderWing
- payloadParagliderHarness
The harness model includes the mass of the pilot.
- use_apparent_massbool, optional
Whether to estimate the effects of apparent inertia.
Methods
accelerations
(v_RM2e, omega_b2e, g[, ...])Compute the translational and angular accelerations about the center of mass.
equilibrium_state
([delta_a, delta_b, ...])Compute the equilibrium glider state for given inputs.
r_CP2RM
([delta_a, delta_w])Compute the reference points for the composite Paraglider system.
- __init__(wing: ParagliderWing, payload: ParagliderHarness) None #
- accelerations(v_RM2e, omega_b2e, g, delta_a: float = 0, delta_bl: float = 0, delta_br: float = 0, delta_w: float = 0, rho_air: float = 1.225, v_W2e=(0, 0, 0), reference_solution=None)#
Compute the translational and angular accelerations about the center of mass.
- Parameters
- v_RM2earray of float, shape (3,) [m/s]
Translational velocity of RM in body frd coordinates, where RM is the midpoint between the two riser connection points.
- omega_b2earray of float, shape (3,) [rad/s]
Angular velocity of the body, in body frd coordinates.
- garray of float, shape (3,) [m/s^s]
The gravity vector in body frd
- delta_afloat [percentage]
The fraction of maximum accelerator
- delta_blfloat [percentage]
The fraction of maximum left brake
- delta_brfloat [percentage]
The fraction of maximum right brake
- delta_wfloat [percentage]
The fraction of weight shift, from -1 (left) to +1 (right)
- rho_airfloat [kg/m^3], optional
Air density
- v_W2endarray of float, shape (3,) or (K,3) [m/s], optional
The wind relative to the earth, in body frd coordinates. If it is a (3,) array then the wind is uniform at every control point. If it is a (K,3) array then it is the vectors for each control point.
- reference_solutiondictionary, optional
FIXME: docstring. See Phillips.__call__
- Returns
- a_RM2earray of float, shape (3,) [m/s^2]
Translational acceleration of RM in body frd coordinates.
- alpha_b2earray of float, shape (3,) [rad/s^2]
Angular acceleration of the body with respect to Earth as the time derivative of angular velocity taken with respect to the body frame, expressed in body frd coordinates \(\left( ^b \dot{\omega}_{b/e}^b \right)\).
- solutiondictionary
FIXME: docstring. See Phillips.__call__
- equilibrium_state(delta_a: float = 0, delta_b: float = 0, rho_air: float = 1.225, alpha_0: Optional[float] = None, theta_0: float = 0, v_0: float = 10, reference_solution: Optional[dict] = None)#
Compute the equilibrium glider state for given inputs.
Assumes that the wing is symmetric about the xz-plane.
- Parameters
- delta_afloat, optional
Fraction of accelerator application, where 0 <= delta_a <= 1
- delta_bfloat, optional
Fraction of symmetric brake application, where 0 <= delta_b <= 1
- rho_airfloat [kg/m^3], optional
Air density
- alpha_0float [rad], optional
An initial proposal for the body angle of attack. If no value is set, the wing equilibrium alpha will be used.
- theta_0float [rad], optional
An initial proposal for the body pitch angle.
- v_0float [m/s], optional
An initial proposal for the body airspeed.
- reference_solutiondictionary, optional
FIXME: docstring. See Phillips.__call__
- Returns
- dictionary
- alpha_bfloat [radians]
Wing angle of attack
- gamma_bfloat [radians]
Wing glide angle
- glide_ratiofloat
Units of ground distance traveled per unit of altitude lost
- Theta_b2earray of float, shape (3,) [radians]
Equilibrium orientation of the body relative to Earth as a set of Tait-Bryan yaw-pitch-role angles.
- v_RM2efloat [m/s]
Steady-state velocity of the riser midpoint in body coordinates
- solutiondictionary
FIXME: docstring. See Phillips.__call__
- r_CP2RM(delta_a: float = 0, delta_w: float = 0)#
Compute the reference points for the composite Paraglider system.
All the components of the Paraglider that experience aerodynamic forces need their relative wind vectors. Each component is responsible for creating a list of the coordinates where they need the value of the wind. This function then transforms them into body coordinates.
- Parameters
- delta_afloat [percentage]
The fraction of maximum accelerator
- delta_wfloat [percentage]
The fraction of weight shift, from -1 (left) to +1 (right)
- Returns
- ndarray of float, shape (K,3) [m]
The position of the control points with respect to RM.
- class pfh.glidersim.paraglider.ParagliderSystemDynamics6c(wing: ParagliderWing, payload: ParagliderHarness)#
Bases:
pfh.glidersim.paraglider.ParagliderSystemDynamics6a
A 6 degrees-of-freedom paraglider model; there is no relative motion between the wing and the harness.
This version uses the body center of mass B as the reference point for the angular momentum. Similar to 6b, except it solves for v_RM2e directly.
This model does not support apparent mass; the apparent mass model requires that the reference point lies in the xz-plane, which is not the case for B during weight shift control. As a result, this model is intended to help validate other models involving the real mass only.
- Parameters
- wingParagliderWing
- payloadParagliderHarness
The harness model includes the mass of the pilot.
Methods
accelerations
(v_RM2e, omega_b2e, g[, ...])Compute the translational and angular accelerations about the center of mass.
equilibrium_state
([delta_a, delta_b, ...])Compute the equilibrium glider state for given inputs.
r_CP2RM
([delta_a, delta_w])Compute the reference points for the composite Paraglider system.
- __init__(wing: ParagliderWing, payload: ParagliderHarness) None #
- accelerations(v_RM2e, omega_b2e, g, delta_a: float = 0, delta_bl: float = 0, delta_br: float = 0, delta_w: float = 0, rho_air: float = 1.225, v_W2e=(0, 0, 0), r_CP2RM=None, reference_solution: Optional[dict] = None)#
Compute the translational and angular accelerations about the center of mass.
- Parameters
- v_RM2earray of float, shape (3,) [m/s]
Translational velocity of RM in body frd coordinates, where RM is the midpoint between the two riser connection points.
- omega_b2earray of float, shape (3,) [rad/s]
Angular velocity of the body, in body frd coordinates.
- garray of float, shape (3,) [m/s^s]
The gravity vector in body frd
- delta_afloat [percentage]
The fraction of maximum accelerator
- delta_blfloat [percentage]
The fraction of maximum left brake
- delta_brfloat [percentage]
The fraction of maximum right brake
- delta_wfloat [percentage]
The fraction of weight shift, from -1 (left) to +1 (right)
- rho_airfloat [kg/m^3], optional
Air density
- v_W2endarray of float, shape (3,) or (K,3) [m/s], optional
The wind relative to the earth, in body frd coordinates. If it is a (3,) array then the wind is uniform at every control point. If it is a (K,3) array then it is the vectors for each control point.
- reference_solutiondictionary, optional
FIXME: docstring. See Phillips.__call__
- Returns
- a_RM2earray of float, shape (3,) [m/s^2]
Translational acceleration of RM in body frd coordinates.
- alpha_b2earray of float, shape (3,) [rad/s^2]
Angular acceleration of the body with respect to Earth as the time derivative of angular velocity taken with respect to the body frame, expressed in body frd coordinates \(\left( ^b \dot{\omega}_{b/e}^b \right)\).
- solutiondictionary
FIXME: docstring. See Phillips.__call__
- equilibrium_state(delta_a: float = 0, delta_b: float = 0, rho_air: float = 1.225, alpha_0: Optional[float] = None, theta_0: float = 0, v_0: float = 10, reference_solution: Optional[dict] = None)#
Compute the equilibrium glider state for given inputs.
Assumes that the wing is symmetric about the xz-plane.
- Parameters
- delta_afloat, optional
Fraction of accelerator application, where 0 <= delta_a <= 1
- delta_bfloat, optional
Fraction of symmetric brake application, where 0 <= delta_b <= 1
- rho_airfloat [kg/m^3], optional
Air density
- alpha_0float [rad], optional
An initial proposal for the body angle of attack. If no value is set, the wing equilibrium alpha will be used.
- theta_0float [rad], optional
An initial proposal for the body pitch angle.
- v_0float [m/s], optional
An initial proposal for the body airspeed.
- reference_solutiondictionary, optional
FIXME: docstring. See Phillips.__call__
- Returns
- dictionary
- alpha_bfloat [radians]
Wing angle of attack
- gamma_bfloat [radians]
Wing glide angle
- glide_ratiofloat
Units of ground distance traveled per unit of altitude lost
- Theta_b2earray of float, shape (3,) [radians]
Equilibrium orientation of the body relative to Earth as a set of Tait-Bryan yaw-pitch-role angles.
- v_RM2efloat [m/s]
Steady-state velocity of the riser midpoint in body coordinates
- solutiondictionary
FIXME: docstring. See Phillips.__call__
- r_CP2RM(delta_a: float = 0, delta_w: float = 0)#
Compute the reference points for the composite Paraglider system.
All the components of the Paraglider that experience aerodynamic forces need their relative wind vectors. Each component is responsible for creating a list of the coordinates where they need the value of the wind. This function then transforms them into body coordinates.
- Parameters
- delta_afloat [percentage]
The fraction of maximum accelerator
- delta_wfloat [percentage]
The fraction of weight shift, from -1 (left) to +1 (right)
- Returns
- ndarray of float, shape (K,3) [m]
The position of the control points with respect to RM.
- class pfh.glidersim.paraglider.ParagliderSystemDynamics9a(wing: ParagliderWing, payload: ParagliderHarness, kappa_RM=(0, 0, 0), kappa_RM_dot=(0, 0, 0), *, use_apparent_mass: bool = True)#
Bases:
object
A 9 degrees-of-freedom paraglider model, allowing rotation between the wing and the harness, with the connection modelled by spring-damper dynamics.
This version uses the riser connection midpoint RM as the reference point for the angular momentum of both the body (the wing system) and the payload (the harness and pilot).
- Parameters
- wingParagliderWing
- payloadParagliderHarness
The harness model includes the mass of the pilot.
- kappa_RMarray of float, shape (3,), optional
Spring-damper coefficients for Theta_p2b (force as a linear function of angular displacement).
- kappa_RM_dotarray of float, shape (3,), optional
Spring-damper coefficients for the derivative of Theta_p2b
- use_apparent_massbool, optional
Whether to estimate the effects of apparent inertia. Default: True
Methods
accelerations
(v_RM2e, omega_b2e, omega_p2e, ...)Compute the translational and angular accelerations about the center of mass.
equilibrium_state
([delta_a, delta_b, ...])Compute the equilibrium glider state for given inputs.
r_CP2RM
(Theta_p2b[, delta_a, delta_w])Compute the reference points for the composite Paraglider system.
- __init__(wing: ParagliderWing, payload: ParagliderHarness, kappa_RM=(0, 0, 0), kappa_RM_dot=(0, 0, 0), *, use_apparent_mass: bool = True) None #
- r_CP2RM(Theta_p2b, delta_a: float = 0, delta_w: float = 0)#
Compute the reference points for the composite Paraglider system.
All the components of the Paraglider that experience aerodynamic forces need their relative wind vectors. Each component is responsible for creating a list of the coordinates where they need the value of the wind. This function then transforms them into body coordinates.
- Parameters
- Theta_p2barray of float, shape (3,) [radians]
The [phi, theta, gamma] of a yaw-pitch-roll sequence that encodes the relative orientation of the payload with respect to the body.
- delta_afloat [percentage]
The fraction of maximum accelerator
- delta_wfloat [percentage]
The fraction of weight shift, from -1 (left) to +1 (right)
- Returns
- ndarray of float, shape (K,3) [m]
The position of the control points with respect to RM.
- accelerations(v_RM2e, omega_b2e, omega_p2e, Theta_p2b, g, delta_a: float = 0, delta_bl: float = 0, delta_br: float = 0, delta_w: float = 0, rho_air: float = 1.225, v_W2e=(0, 0, 0), reference_solution: Optional[dict] = None)#
Compute the translational and angular accelerations about the center of mass.
- Parameters
- v_RM2earray of float, shape (3,) [m/s]
Translational velocity of RM in body frd coordinates, where RM is the midpoint between the two riser connection points.
- omega_b2earray of float, shape (3,) [rad/s]
Angular velocity of the body, in body frd coordinates.
- omega_p2earray of float, shape (3,) [rad/s]
Angular velocity of the payload, in payload frd coordinates.
- Theta_p2barray of float, shape (3,) [radians]
The [phi, theta, gamma] of a yaw-pitch-roll sequence that encodes the relative orientation of the payload with respect to the body.
- garray of float, shape (3,) [m/s^s]
The gravity vector in body frd
- delta_afloat [percentage]
The fraction of maximum accelerator
- delta_blfloat [percentage]
The fraction of maximum left brake
- delta_brfloat [percentage]
The fraction of maximum right brake
- delta_wfloat [percentage]
The fraction of weight shift, from -1 (left) to +1 (right)
- rho_airfloat [kg/m^3], optional
Air density
- v_W2endarray of float, shape (3,) or (K,3) [m/s], optional
The wind relative to the earth, in body frd coordinates. If it is a (3,) array then the wind is uniform at every control point. If it is a (K,3) array then it is the vectors for each control point.
- reference_solutiondictionary, optional
FIXME: docstring. See Phillips.__call__
- Returns
- a_RM2earray of float, shape (3,) [m/s^2]
Translational acceleration of RM in body frd coordinates.
- alpha_b2earray of float, shape (3,) [rad/s^2]
Angular acceleration of the body with respect to Earth as the time derivative of angular velocity taken with respect to the body frame, expressed in body frd coordinates \(\left( ^b \dot{\omega}_{b/e}^b \right)\).
- alpha_p2earray of float, shape (3,) [rad/s^2]
Angular acceleration of the payload with respect to Earth as the time derivative of angular velocity taken with respect to the payload frame, expressed in payload frd coordinates \(\left( ^p \dot{\omega}_{p/e}^p \right)\).
- solutiondictionary
FIXME: docstring. See Phillips.__call__
- equilibrium_state(delta_a: float = 0, delta_b: float = 0, rho_air: float = 1.225, alpha_0: Optional[float] = None, theta_0: float = 0, v_0: float = 10, reference_solution=None)#
Compute the equilibrium glider state for given inputs.
Assumes that the wing is symmetric about the xz-plane.
- Parameters
- delta_afloat, optional
Fraction of accelerator application, where 0 <= delta_a <= 1
- delta_bfloat, optional
Fraction of symmetric brake application, where 0 <= delta_b <= 1
- rho_airfloat [kg/m^3], optional
Air density
- alpha_0float [rad], optional
An initial proposal for the body angle of attack. If no value is set, the wing equilibrium alpha will be used.
- theta_0float [rad], optional
An initial proposal for the body pitch angle.
- v_0float [m/s], optional
An initial proposal for the body airspeed.
- reference_solutiondictionary, optional
FIXME: docstring. See Phillips.__call__
- Returns
- dictionary
- alpha_bfloat [radians]
Wing angle of attack
- gamma_bfloat [radians]
Wing glide angle
- glide_ratiofloat
Units of ground distance traveled per unit of altitude lost
- Theta_b2earray of float, shape (3,) [radians]
Equilibrium orientation of the body relative to Earth as a set of Tait-Bryan yaw-pitch-role angles.
- v_RM2efloat [m/s]
Steady-state velocity of the riser midpoint in body coordinates
- solutiondictionary
FIXME: docstring. See Phillips.__call__
- class pfh.glidersim.paraglider.ParagliderSystemDynamics9b(wing: ParagliderWing, payload: ParagliderHarness, kappa_RM=(0, 0, 0), kappa_RM_dot=(0, 0, 0))#
Bases:
pfh.glidersim.paraglider.ParagliderSystemDynamics9a
A 9 degrees-of-freedom paraglider model, allowing rotation between the wing and the harness, with the connection modelled by spring-damper dynamics.
This model uses the body center of mass B as the reference point for the angular momentum of the body (the wing system) and the payload center of mass P for the angular momentum of the payload (the harness and pilot).
This model does not support apparent mass. (Because it uses B as the reference point for the body dynamics, the system of equations for apparent mass would be in terms of a_B2e, which makes the equations involving the payload dynamics significantly messier.) Its purpose is to check for implementation errors in other models involving the real mass only.
- Parameters
- wingParagliderWing
- payloadParagliderHarness
The harness model includes the mass of the pilot.
- kappa_RMarray of float, shape (3,), optional
Spring-damper coefficients for Theta_p2b (force as a linear function of angular displacement).
- kappa_RM_dotarray of float, shape (3,), optional
Spring-damper coefficients for the derivative of Theta_p2b
Methods
accelerations
(v_RM2e, omega_b2e, omega_p2e, ...)Compute the translational and angular accelerations about the center of mass.
equilibrium_state
([delta_a, delta_b, ...])Compute the equilibrium glider state for given inputs.
r_CP2RM
(Theta_p2b[, delta_a, delta_w])Compute the reference points for the composite Paraglider system.
- __init__(wing: ParagliderWing, payload: ParagliderHarness, kappa_RM=(0, 0, 0), kappa_RM_dot=(0, 0, 0)) None #
- accelerations(v_RM2e, omega_b2e, omega_p2e, Theta_p2b, g, delta_a: float = 0, delta_bl: float = 0, delta_br: float = 0, delta_w: float = 0, rho_air: float = 1.225, v_W2e=(0, 0, 0), reference_solution: Optional[dict] = None)#
Compute the translational and angular accelerations about the center of mass.
- Parameters
- v_RM2earray of float, shape (3,) [m/s]
Translational velocity of RM in body frd coordinates, where RM is the midpoint between the two riser connection points.
- omega_b2earray of float, shape (3,) [rad/s]
Angular velocity of the body, in body frd coordinates.
- omega_p2earray of float, shape (3,) [rad/s]
Angular velocity of the payload, in payload frd coordinates.
- Theta_p2barray of float, shape (3,) [radians]
The [phi, theta, gamma] of a yaw-pitch-roll sequence that encodes the relative orientation of the payload with respect to the body.
- garray of float, shape (3,) [m/s^s]
The gravity vector in body frd
- delta_afloat [percentage]
The fraction of maximum accelerator
- delta_blfloat [percentage]
The fraction of maximum left brake
- delta_brfloat [percentage]
The fraction of maximum right brake
- delta_wfloat [percentage]
The fraction of weight shift, from -1 (left) to +1 (right)
- rho_airfloat [kg/m^3], optional
Air density
- v_W2endarray of float, shape (3,) or (K,3) [m/s], optional
The wind relative to the earth, in body frd coordinates. If it is a (3,) array then the wind is uniform at every control point. If it is a (K,3) array then it is the vectors for each control point.
- reference_solutiondictionary, optional
FIXME: docstring. See Phillips.__call__
- Returns
- a_RM2earray of float, shape (3,) [m/s^2]
Translational acceleration of RM in body frd coordinates.
- alpha_b2earray of float, shape (3,) [rad/s^2]
Angular acceleration of the body with respect to Earth as the time derivative of angular velocity taken with respect to the body frame, expressed in body frd coordinates \(\left( ^b \dot{\omega}_{b/e}^b \right)\).
- alpha_p2earray of float, shape (3,) [rad/s^2]
Angular acceleration of the payload with respect to Earth as the time derivative of angular velocity taken with respect to the payload frame, expressed in payload frd coordinates \(\left( ^p \dot{\omega}_{p/e}^p \right)\).
- solutiondictionary
FIXME: docstring. See Phillips.__call__
- equilibrium_state(delta_a: float = 0, delta_b: float = 0, rho_air: float = 1.225, alpha_0: Optional[float] = None, theta_0: float = 0, v_0: float = 10, reference_solution=None)#
Compute the equilibrium glider state for given inputs.
Assumes that the wing is symmetric about the xz-plane.
- Parameters
- delta_afloat, optional
Fraction of accelerator application, where 0 <= delta_a <= 1
- delta_bfloat, optional
Fraction of symmetric brake application, where 0 <= delta_b <= 1
- rho_airfloat [kg/m^3], optional
Air density
- alpha_0float [rad], optional
An initial proposal for the body angle of attack. If no value is set, the wing equilibrium alpha will be used.
- theta_0float [rad], optional
An initial proposal for the body pitch angle.
- v_0float [m/s], optional
An initial proposal for the body airspeed.
- reference_solutiondictionary, optional
FIXME: docstring. See Phillips.__call__
- Returns
- dictionary
- alpha_bfloat [radians]
Wing angle of attack
- gamma_bfloat [radians]
Wing glide angle
- glide_ratiofloat
Units of ground distance traveled per unit of altitude lost
- Theta_b2earray of float, shape (3,) [radians]
Equilibrium orientation of the body relative to Earth as a set of Tait-Bryan yaw-pitch-role angles.
- v_RM2efloat [m/s]
Steady-state velocity of the riser midpoint in body coordinates
- solutiondictionary
FIXME: docstring. See Phillips.__call__
- r_CP2RM(Theta_p2b, delta_a: float = 0, delta_w: float = 0)#
Compute the reference points for the composite Paraglider system.
All the components of the Paraglider that experience aerodynamic forces need their relative wind vectors. Each component is responsible for creating a list of the coordinates where they need the value of the wind. This function then transforms them into body coordinates.
- Parameters
- Theta_p2barray of float, shape (3,) [radians]
The [phi, theta, gamma] of a yaw-pitch-roll sequence that encodes the relative orientation of the payload with respect to the body.
- delta_afloat [percentage]
The fraction of maximum accelerator
- delta_wfloat [percentage]
The fraction of weight shift, from -1 (left) to +1 (right)
- Returns
- ndarray of float, shape (K,3) [m]
The position of the control points with respect to RM.
- class pfh.glidersim.paraglider.ParagliderSystemDynamics9c(wing: ParagliderWing, payload: ParagliderHarness, kappa_RM=(0, 0, 0), kappa_RM_dot=(0, 0, 0), *, use_apparent_mass: bool = True)#
Bases:
pfh.glidersim.paraglider.ParagliderSystemDynamics9a
A 9 degrees-of-freedom paraglider model, allowing rotation between the wing and the harness, with the connection modelled by spring-damper dynamics.
Similar to ParagliderSystemDynamics9a, this version uses the riser midpoint RM as the reference point for both the body and the payload. Unlike ParagliderSystemDynamics9a, this model computes dot{omega_p2b} instead of dot{omega_p2e} and converts. Also, note that it computes everything in body frd and converts omega_p2e back to payload frd at the very end.
FIXME: although 9a and 9b agree, this model produces slightly different answers, which might be worth looking into.
- Parameters
- wingParagliderWing
- payloadParagliderHarness
The harness model includes the mass of the pilot.
- kappa_RMarray of float, shape (3,), optional
Spring-damper coefficients for Theta_p2b (force as a linear function of angular displacement).
- kappa_RM_dotarray of float, shape (3,), optional
Spring-damper coefficients for the derivative of Theta_p2b
- use_apparent_massbool, optional
Whether to estimate the effects of apparent inertia. Default: True
Methods
accelerations
(v_RM2e, omega_b2e, omega_p2e, ...)Compute the translational and angular accelerations about the center of mass.
equilibrium_state
([delta_a, delta_b, ...])Compute the equilibrium glider state for given inputs.
r_CP2RM
(Theta_p2b[, delta_a, delta_w])Compute the reference points for the composite Paraglider system.
- accelerations(v_RM2e, omega_b2e, omega_p2e, Theta_p2b, g, delta_a: float = 0, delta_bl: float = 0, delta_br: float = 0, delta_w: float = 0, rho_air: float = 1.225, v_W2e=(0, 0, 0), reference_solution: Optional[dict] = None)#
Compute the translational and angular accelerations about the center of mass.
- Parameters
- v_RM2earray of float, shape (3,) [m/s]
Translational velocity of RM in body frd coordinates, where RM is the midpoint between the two riser connection points.
- omega_b2earray of float, shape (3,) [rad/s]
Angular velocity of the body, in body frd coordinates.
- omega_p2earray of float, shape (3,) [rad/s]
Angular velocity of the payload, in payload frd coordinates.
- Theta_p2barray of float, shape (3,) [radians]
The [phi, theta, gamma] of a yaw-pitch-roll sequence that encodes the relative orientation of the payload with respect to the body.
- garray of float, shape (3,) [m/s^s]
The gravity vector in body frd
- delta_afloat [percentage]
The fraction of maximum accelerator
- delta_blfloat [percentage]
The fraction of maximum left brake
- delta_brfloat [percentage]
The fraction of maximum right brake
- delta_wfloat [percentage]
The fraction of weight shift, from -1 (left) to +1 (right)
- rho_airfloat [kg/m^3], optional
Air density
- v_W2endarray of float, shape (3,) or (K,3) [m/s], optional
The wind relative to the earth, in body frd coordinates. If it is a (3,) array then the wind is uniform at every control point. If it is a (K,3) array then it is the vectors for each control point.
- reference_solutiondictionary, optional
FIXME: docstring. See Phillips.__call__
- Returns
- a_RM2earray of float, shape (3,) [m/s^2]
Translational acceleration of RM in body frd coordinates.
- alpha_b2earray of float, shape (3,) [rad/s^2]
Angular acceleration of the body with respect to Earth as the time derivative of angular velocity taken with respect to the body frame, expressed in body frd coordinates \(\left( ^b \dot{\omega}_{b/e}^b \right)\).
- alpha_p2earray of float, shape (3,) [rad/s^2]
Angular acceleration of the payload with respect to Earth as the time derivative of angular velocity taken with respect to the payload frame, expressed in payload frd coordinates \(\left( ^p \dot{\omega}_{p/e}^p \right)\).
- solutiondictionary
FIXME: docstring. See Phillips.__call__
- __init__(wing: ParagliderWing, payload: ParagliderHarness, kappa_RM=(0, 0, 0), kappa_RM_dot=(0, 0, 0), *, use_apparent_mass: bool = True) None #
- equilibrium_state(delta_a: float = 0, delta_b: float = 0, rho_air: float = 1.225, alpha_0: Optional[float] = None, theta_0: float = 0, v_0: float = 10, reference_solution=None)#
Compute the equilibrium glider state for given inputs.
Assumes that the wing is symmetric about the xz-plane.
- Parameters
- delta_afloat, optional
Fraction of accelerator application, where 0 <= delta_a <= 1
- delta_bfloat, optional
Fraction of symmetric brake application, where 0 <= delta_b <= 1
- rho_airfloat [kg/m^3], optional
Air density
- alpha_0float [rad], optional
An initial proposal for the body angle of attack. If no value is set, the wing equilibrium alpha will be used.
- theta_0float [rad], optional
An initial proposal for the body pitch angle.
- v_0float [m/s], optional
An initial proposal for the body airspeed.
- reference_solutiondictionary, optional
FIXME: docstring. See Phillips.__call__
- Returns
- dictionary
- alpha_bfloat [radians]
Wing angle of attack
- gamma_bfloat [radians]
Wing glide angle
- glide_ratiofloat
Units of ground distance traveled per unit of altitude lost
- Theta_b2earray of float, shape (3,) [radians]
Equilibrium orientation of the body relative to Earth as a set of Tait-Bryan yaw-pitch-role angles.
- v_RM2efloat [m/s]
Steady-state velocity of the riser midpoint in body coordinates
- solutiondictionary
FIXME: docstring. See Phillips.__call__
- r_CP2RM(Theta_p2b, delta_a: float = 0, delta_w: float = 0)#
Compute the reference points for the composite Paraglider system.
All the components of the Paraglider that experience aerodynamic forces need their relative wind vectors. Each component is responsible for creating a list of the coordinates where they need the value of the wind. This function then transforms them into body coordinates.
- Parameters
- Theta_p2barray of float, shape (3,) [radians]
The [phi, theta, gamma] of a yaw-pitch-roll sequence that encodes the relative orientation of the payload with respect to the body.
- delta_afloat [percentage]
The fraction of maximum accelerator
- delta_wfloat [percentage]
The fraction of weight shift, from -1 (left) to +1 (right)
- Returns
- ndarray of float, shape (K,3) [m]
The position of the control points with respect to RM.