pfh.glidersim.paraglider#

Models of complete paraglider systems.

Classes

ParagliderSystemDynamics6a(wing, payload, *)

A 6 degrees-of-freedom paraglider model; there is no relative motion between the wing and the harness.

ParagliderSystemDynamics6b(wing, payload)

A 6 degrees-of-freedom paraglider model; there is no relative motion between the wing and the harness.

ParagliderSystemDynamics6c(wing, payload)

A 6 degrees-of-freedom paraglider model; there is no relative motion between the wing and the harness.

ParagliderSystemDynamics9a(wing, payload[, ...])

A 9 degrees-of-freedom paraglider model, allowing rotation between the wing and the harness, with the connection modelled by spring-damper dynamics.

ParagliderSystemDynamics9b(wing, payload[, ...])

A 9 degrees-of-freedom paraglider model, allowing rotation between the wing and the harness, with the connection modelled by spring-damper dynamics.

ParagliderSystemDynamics9c(wing, payload[, ...])

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.