Models

The Prognostics Model Package is distributed with a few pre-constructed models that can be used in simulation or prognostics (with the prog_algs package). These models are summarized in the following sections.

Battery Model - Circuit

class prog_models.models.BatteryCircuit(**kwargs)

Vectorized prognostics model for a battery, represented by an equivilant circuit model as described in the following paper: M. Daigle and S. Sankararaman, “Advanced Methods for Determining Prediction Uncertainty in Model-Based Prognostics with Application to Planetary Rovers,” Annual Conference of the Prognostics and Health Management Society 2013, pp. 262-274, New Orleans, LA, October 2013. https://papers.phmsociety.org/index.php/phmconf/article/view/2253

Events: (1)

EOD: End of Discharge

Inputs/Loading: (1)

i: Current draw on the battery

States: (4)
tb : Battery Temperature (°C)
qb : Charge stored in Capacitor Cb of the equivalent circuit model
qcp : Charge stored in Capacitor Ccp of the equivalent circuit model
qcs : Charge stored in Capacitor Ccs of the equivalent circuit model
Outputs: (2)
t: Temperature of battery (°C)
v: Voltage supplied by battery
Keyword Arguments
  • process_noise (Optional, float or Dict[Str, float]) – Process noise (applied at dx/next_state). Can be number (e.g., .2) applied to every state, a dictionary of values for each state (e.g., {‘x1’: 0.2, ‘x2’: 0.3}), or a function (x) -> x

  • process_noise_dist (Optional, String) – distribution for process noise (e.g., normal, uniform, triangular)

  • measurement_noise (Optional, float or Dict[Srt, float]) – Measurement noise (applied in output eqn). Can be number (e.g., .2) applied to every output, a dictionary of values for each output (e.g., {‘z1’: 0.2, ‘z2’: 0.3}), or a function (z) -> z

  • measurement_noise_dist (Optional, String) – distribution for measurement noise (e.g., normal, uniform, triangular)

  • V0 (float) – Nominal Battery Voltage

  • Rp (float) – Battery Parasitic Resistance

  • qMax (float) – Maximum Charge

  • CMax (float) – Maximum Capacity

  • VEOD (float) – End of Discharge Voltage Threshold

  • Cbp3 (Cb0, Cbp0, Cbp1, Cbp2,) – Battery Capacity Parameters

  • Ccp (Rs, Cs, Rcp0, Rcp1, Rcp2,) – R-C Pair Parameter

  • Ta (float) – Ambient Temperature

  • Jt (float) – Temperature parameter

  • ha (float) – Heat transfer coefficient, ambient

  • hcp (float) – Heat transfer coefficient parameter

  • hcs (float) – Heat transfer coefficient - surface

  • x0 (Dict[Str, float]) – Initial state

Note

This is quicker but also less accurate than the electrochemistry model. We recommend using the electrochemistry model, when possible.

Battery Model - Electro Chemistry

There are three different flavors of Electro Chemistry Battery Models distributed with the package, described below

End of Discharge

class prog_models.models.BatteryElectroChemEOD(**kwargs)

Vectorized prognostics model for a battery, represented by an electrochemical equations as described in the following paper: M. Daigle and C. Kulkarni, “Electrochemistry-based Battery Modeling for Prognostics,” Annual Conference of the Prognostics and Health Management Society 2013, pp. 249-261, New Orleans, LA, October 2013. https://papers.phmsociety.org/index.php/phmconf/article/view/2252. This model predicts the end of discharge event.

The default model parameters included are for Li-ion batteries, specifically 18650-type cells. Experimental discharge curves for these cells can be downloaded from the Prognostics Center of Excellence Data Repository https://ti.arc.nasa.gov/tech/dash/groups/pcoe/prognostic-data-repository/.

Events: (1)

EOD: End of Discharge

Inputs/Loading: (1)

i: Current draw on the battery

States: (8)
tb: Battery temperature (K)
Vo: Voltage Drops due to Solid-Phase Ohmic Resistances
Vsn: Negative Surface Voltage (V)
Vsp: Positive Surface Voltage (V)
qnB: Amount of Negative Ions at the Battery Bulk
qnS: Amount of Negative Ions at the Battery Surface
qpB: Amount of Positive Ions at the Battery Bulk
qpS: Amount of Positive Ions at the Battery Surface
Outputs/Measurements: (2)
t: Temperature of battery (°C)
v: Voltage supplied by battery
Keyword Arguments
  • process_noise (Optional, float or Dict[Srt, float]) – Process noise (applied at dx/next_state). Can be number (e.g., .2) applied to every state, a dictionary of values for each state (e.g., {‘x1’: 0.2, ‘x2’: 0.3}), or a function (x) -> x

  • process_noise_dist (Optional, String) – distribution for process noise (e.g., normal, uniform, triangular)

  • measurement_noise (Optional, float or Dict[Srt, float]) – Measurement noise (applied in output eqn). Can be number (e.g., .2) applied to every output, a dictionary of values for each output (e.g., {‘z1’: 0.2, ‘z2’: 0.3}), or a function (z) -> z

  • measurement_noise_dist (Optional, String) – distribution for measurement noise (e.g., normal, uniform, triangular)

  • qMobile (float) –

  • xnMax (float) – Maximum mole fraction (neg electrode)

  • xnMin (float) – Minimum mole fraction (neg electrode)

  • xpMax (float) – Maximum mole fraction (pos electrode)

  • xpMin (float) – Minimum mole fraction (pos electrode) - note xn + xp = 1

  • Ro (float) – for Ohmic drop (current collector resistances plus electrolyte resistance plus solid phase resistances at anode and cathode)

  • alpha (float) – anodic/cathodic electrochemical transfer coefficient

  • Sn (float) – Surface area (- electrode)

  • Sp (float) – Surface area (+ electrode)

  • kn (float) – lumped constant for BV (- electrode)

  • kp (float) – lumped constant for BV (+ electrode)

  • Vol (float) – total interior battery volume/2 (for computing concentrations)

  • VolSFraction (float) – fraction of total volume occupied by surface volume

  • tDiffusion (float) – diffusion time constant (increasing this causes decrease in diffusion rate)

  • to (float) – for Ohmic voltage

  • tsn (float) – for surface overpotential (neg)

  • tsp (float) – for surface overpotential (pos)

  • Ap (U0p,) – Redlich-Kister parameter (+ electrode)

  • An (U0n,) – Redlich-Kister parameter (- electrode)

  • VEOD (float) – End of Discharge Voltage Threshold

  • x0 (dict) – Initial state

End of Life (i.e., InsufficientCapacity)

class prog_models.models.BatteryElectroChemEOL(**kwargs)

Vectorized prognostics model for a battery degredation, represented by an electrochemical model as described in the following paper: M. Daigle and C. Kulkarni, “End-of-discharge and End-of-life Prediction in Lithium-ion Batteries with Electrochemistry-based Aging Models,” AIAA SciTech Forum 2016, San Diego, CA. https://arc.aiaa.org/doi/pdf/10.2514/6.2016-2132

The default model parameters included are for Li-ion batteries, specifically 18650-type cells. Experimental discharge curves for these cells can be downloaded from the Prognostics Center of Excellence Data Repository https://ti.arc.nasa.gov/tech/dash/groups/pcoe/prognostic-data-repository/.

Events: (1)

InsufficientCapacity: Insufficient battery capacity

Inputs/Loading: (1)

i: Current draw on the battery

States: (3)
qMax: Maximum battery capacity
Ro : for Ohmic drop (current collector resistances plus electrolyte resistance plus solid phase resistances at anode and cathode)
D : diffusion time constant (increasing this causes decrease in diffusion rate)

Outputs/Measurements: (0)

Keyword Arguments
  • process_noise (Optional, float or Dict[Srt, float]) – Process noise (applied at dx/next_state). Can be number (e.g., .2) applied to every state, a dictionary of values for each state (e.g., {‘x1’: 0.2, ‘x2’: 0.3}), or a function (x) -> x

  • process_noise_dist (Optional, String) – distribution for process noise (e.g., normal, uniform, triangular)

  • measurement_noise (Optional, float or Dict[Srt, float]) – Measurement noise (applied in output eqn). Can be number (e.g., .2) applied to every output, a dictionary of values for each output (e.g., {‘z1’: 0.2, ‘z2’: 0.3}), or a function (z) -> z

  • measurement_noise_dist (Optional, String) – distribution for measurement noise (e.g., normal, uniform, triangular)

  • qMaxThreshold (float) – Threshold for qMax (for threshold_met and event_state), after which the InsufficientCapacity event has occured. Note: Battery manufacturers specify a threshold of 70-80% of qMax

  • wd (wq, wr,) – Wear rate for qMax, Ro, and D respectively

  • x0 (dict) – Initial state

End of Discharge, End of Life (i.e., InsufficientCapacity & EOD)

prog_models.models.BatteryElectroChem

alias of prog_models.models.battery_electrochem.BatteryElectroChemEODEOL

class prog_models.models.BatteryElectroChemEODEOL(**kwargs)

Prognostics model for a battery degredation and discharge, represented by an electrochemical model as described in the following papers:

  1. M. Daigle and C. Kulkarni, “End-of-discharge and End-of-life Prediction in Lithium-ion Batteries with Electrochemistry-based Aging Models,” AIAA SciTech Forum 2016, San Diego, CA. https://arc.aiaa.org/doi/pdf/10.2514/6.2016-2132

  2. M. Daigle and C. Kulkarni, “Electrochemistry-based Battery Modeling for Prognostics,” Annual Conference of the Prognostics and Health Management Society 2013, pp. 249-261, New Orleans, LA, October 2013. https://papers.phmsociety.org/index.php/phmconf/article/view/2252

The default model parameters included are for Li-ion batteries, specifically 18650-type cells. Experimental discharge curves for these cells can be downloaded from the Prognostics Center of Excellence Data Repository https://ti.arc.nasa.gov/tech/dash/groups/pcoe/prognostic-data-repository/.

Events: (2)
EOD: End of Discharge
InsufficientCapacity: Insufficient battery capacity
Inputs/Loading: (1)

i: Current draw on the battery

States: (11)

See BatteryElectroChemEOD, BatteryElectroChemEOL

Outputs/Measurements: (2)
t: Temperature of battery (°C)
v: Voltage supplied by battery

Note

For keyword arguments, see BatteryElectroChemEOD, BatteryElectroChemEOL

Pump Model

There are two variants of the pump model based on if the wear parameters are estimated as part of the state. The models are described below

Pump Model (Base)

class prog_models.models.CentrifugalPumpBase(**kwargs)

Prognostics model for a Centrifugal Pump as described in the following paper: M. Daigle and K. Goebel, “Model-based Prognostics with Concurrent Damage Progression Processes,” IEEE Transactions on Systems, Man, and Cybernetics: Systems, vol. 43, no. 4, pp. 535-546, May 2013. https://www.researchgate.net/publication/260652495_Model-Based_Prognostics_With_Concurrent_Damage_Progression_Processes

Events (4)
ImpellerWearFailure: Failure of the impeller due to wear
PumpOilOverheat: Overheat of the pump oil
RadialBearingOverheat: Overheat of the radial bearing
ThrustBearingOverheat: Overhead of the thrust bearing
Inputs/Loading: (5)
Tamb: Ambient Temperature (K)
V: Voltage
pdisch: Discharge Pressure (Pa)
psuc: Suction Pressure (Pa)
wsync: Synchronous Rotational Speed of Supply Voltage (rad/sec)
States: (9)
A: Impeller Area (m^2)
Q: Flow Rate into Pump (m^3/s)
To: Oil Temperature (K)
Tr: Radial Bearing Temperature (K)
Tt: Thrust Bearing Temperature (K)
rRadial: Radial (thrust) Friction Coefficient
rThrust: Rolling Friction Coefficient
w: Rotational Velocity of Pump (rad/sec)
QLeak: Leak Flow Rate (m^3/s)
Outputs/Measurements: (5)
Qout: Discharge Flow (m^3/s)
To: Oil Temperature (K)
Tr: Radial Bearing Temperature (K)
Tt: Thrust Bearing Temperature (K)
w: Rotational Velocity of Pump (rad/sec)
Keyword Arguments
  • process_noise (Optional, float or Dict[Srt, float]) – Process noise (applied at dx/next_state). Can be number (e.g., .2) applied to every state, a dictionary of values for each state (e.g., {‘x1’: 0.2, ‘x2’: 0.3}), or a function (x) -> x

  • process_noise_dist (Optional, String) – distribution for process noise (e.g., normal, uniform, triangular)

  • measurement_noise (Optional, float or Dict[Srt, float]) – Measurement noise (applied in output eqn). Can be number (e.g., .2) applied to every output, a dictionary of values for each output (e.g., {‘z1’: 0.2, ‘z2’: 0.3}), or a function (z) -> z

  • measurement_noise_dist (Optional, String) – distribution for measurement noise (e.g., normal, uniform, triangular)

  • pAtm (float) – Atmospheric pressure

  • a2 (a0, a1,) – empirical coefficients for flow torque eqn

  • A (float) – impeller blade area

  • b (float) –

  • n (float) – Pole Phases

  • p (float) – Pole Pairs

  • I (float) – impeller/shaft/motor lumped inertia

  • r (float) – lumped friction parameter (minus bearing friction)

  • R2 (R1,) –

  • L1 (float) –

  • FluidI (float) – Pump fluid inertia

  • c (float) – Pump flow coefficient

  • cLeak (float) – Internal leak flow coefficient

  • ALeak (float) – Internal leak area

  • mcThrust (float) –

  • HThrust2 (HThrust1,) –

  • mcRadial (float) –

  • HRadial2 (HRadial1,) –

  • mcOil (float) –

  • HOil3 (HOil1, HOil2,) –

  • wThrust (wA, wRadial,) – Wear rates. See also CentrifugalPumpWithWear

  • lim (dict) – Parameter limits

  • x0 (dict) – Initial state

Pump Model (With Wear)

prog_models.models.CentrifugalPump

alias of prog_models.models.centrifugal_pump.CentrifugalPumpWithWear

class prog_models.models.CentrifugalPumpWithWear(**kwargs)

Prognostics model for a centrifugal pump with wear parameters as part of the model state. This is identical to CentrifugalPumpBase, only CentrifugalPumpBase has the wear params as parameters instead of states

This class implements a Centrifugal Pump model as described in the following paper: M. Daigle and K. Goebel, “Model-based Prognostics with Concurrent Damage Progression Processes,” IEEE Transactions on Systems, Man, and Cybernetics: Systems, vol. 43, no. 4, pp. 535-546, May 2013. https://www.researchgate.net/publication/260652495_Model-Based_Prognostics_With_Concurrent_Damage_Progression_Processes

Events (4)

See CentrifugalPumpBase

Inputs/Loading: (5)

See CentrifugalPumpBase

States: (12)
States from CentrifugalPumpBase +
wA: Wear Rate for Impeller Area
wRadial: Wear Rate for Radial (thrust) Friction Coefficient
wRadial: Wear Rate for Rolling Friction Coefficient
Outputs/Measurements: (5)

See CentrifugalPumpBase

Model Configuration Parameters:

See CentrifugalPumpBase

Pneumatic Valve

There are two variants of the valve model based on if the wear parameters are estimated as part of the state. The models are described below

Pneumatic Valve (Base)

class prog_models.models.PneumaticValveBase(**kwargs)

Prognostics model for a Pneumatic Valve model as described in the following paper: M. Daigle and K. Goebel, “A Model-based Prognostics Approach Applied to Pneumatic Valves,” International Journal of Prognostics and Health Management, vol. 2, no. 2, August 2011. https://papers.phmsociety.org/index.php/ijphm/article/view/1359

Events: (5)
Bottom Leak: Failure due to a leak at the bottom pneumatic port
Top Leak: Failure due to a leak at the top pneumatic port
Internal Leak: Failure due to an internal leak at the seal surrounding the piston
Spring Failure: Failure due to spring weakening with use
Friction Failure: Failure due to increase in friction along the piston with wear
Inputs/Loading: (4)
pL: Fluid pressure at the left side of the plug (Pa)
pR: Fluid pressure at the right side of the plug (Pa)
uBot: input pressure at the bottom pneumatic port (Pa)
uTop: input pressure at the botton pneumatic port (Pa)
States: (10)
Aeb: Area of the leak at the bottom pneumatic port
Aet: Area of the leak at the top pneumatic port
Ai: Area of the internal leak
k: Spring Coefficient
mBot: Mass on bottom of piston (kg)
mTop: Mass on top of the piston (kg)
r: Friction Coefficient
v: Velocity of the piston (m/s)
x: Poisition of the piston (m)
pDiff: Difference in pressure between the left and the right
Outputs/Measurements: 6
Q: Flowrate
iB: Is the piston at the bottom (bool)
iT: Is the piston at the top (bool)
pB: Pressure at the bottom (Pa)
pT: Pressure at the top (Pa)
x: Position of piston (m)
Keyword Arguments
  • process_noise (Optional, float or Dict[Srt, float]) – Process noise (applied at dx/next_state). Can be number (e.g., .2) applied to every state, a dictionary of values for each state (e.g., {‘x1’: 0.2, ‘x2’: 0.3}), or a function (x) -> x

  • process_noise_dist (Optional, String) – distribution for process noise (e.g., normal, uniform, triangular)

  • measurement_noise (Optional, float or Dict[Srt, float]) – Measurement noise (applied in output eqn). Can be number (e.g., .2) applied to every output, a dictionary of values for each output (e.g., {‘z1’: 0.2, ‘z2’: 0.3}), or a function (z) -> z

  • measurement_noise_dist (Optional, String) – distribution for measurement noise (e.g., normal, uniform, triangular)

  • g (float) – Acceleration due to gravity (m/s^2)

  • pAtm (float) – Atmospheric pressure (Pa)

  • m (float) – Plug mass (kg)

  • offsetX (float) – Spring offset distance (m)

  • Ls (float) – Stroke Length (m)

  • Ap (float) – Surface area of piston for gas contact (m^2)

  • Vbot0 (float) – Below piston “default” volume (m^3)

  • Vtop0 (float) – Above piston “default” volume (m^3)

  • indicatorTol (float) – tolerance bound for open/close indicators

  • pSupply (float) – Supply Pressure (Pa)

  • Av (float) – Surface area of plug end (m^2)

  • Cv (float) – flow coefficient assuming Cv of 1300 GPM

  • rhoL (float) – density of LH2 in kg/m^3

  • gas_mass (float) – Molar mass of supply gas (kg/mol)

  • gas_temp (float) – Temperature of supply gas (K)

  • gas_R (gas_gamma, gas_z,) – Supply gas parameters

  • Cb (At, Ct, Ab,) –

  • AbMax (float) – Max limit for state Aeb

  • AtMax (float) – Max limit for state Aet

  • AiMax (float) – Max limit for state Ai

  • kMin (float) – Min limit for state k

  • rMax (float) – Max limit for state r

  • x0 (Dict[str, float]) – Initial state

  • wb (float) – Wear parameter for bottom leak

  • wi (float) – Wear parameter for internal leak

  • wt (float) – Wear parameter for top leak

  • wk (float) – Wear parameter for spring

  • wr (float) – Wear parameter for friction

Note

Supply gas parameters (gas_mass, gas_temp, gas_gamme, gas_z, gas_R) are for Nitrogen by default

Pneumatic Valve (With Wear)

prog_models.models.PneumaticValve

alias of prog_models.models.pneumatic_valve.PneumaticValveWithWear

class prog_models.models.PneumaticValveWithWear(**kwargs)

Prognostics model for a pneumatic valve with wear parameters as part of the model state. This is identical to PneumaticValveBase, only PneumaticValveBase has the wear params as parameters instead of states

This class implements a Pneumatic Valve model as described in the following paper: M. Daigle and K. Goebel, “A Model-based Prognostics Approach Applied to Pneumatic Valves,” International Journal of Prognostics and Health Management, vol. 2, no. 2, August 2011. https://www.phmsociety.org/node/602

Events (4)

See PneumaticValveBase

Inputs/Loading: (5)

See PneumaticValveBase

States: (12)

States from PneumaticValveBase + wb, wi, wk, wr, wt

Outputs/Measurements: (5)

See PneumaticValveBase

Model Configuration Parameters:

See PneumaticValveBase

DC Motor

class prog_models.models.DCMotor(**kwargs)

Model of DC Motor.

References: Matteo Corbetta, Chetan S. Kulkarni. An approach for uncertainty quantification and management of unmanned aerial vehicle health. Annual Conference of the PHM Society, Scottsdale, AZ, 2019. http://papers.phmsociety.org/index.php/phmconf/article/view/847

George E. Gorospe Jr, Chetan S. Kulkarni, Edward Hogge, Andrew Hsu, and Natalie Ownby. A Study of the Degradation of Electronic Speed Controllers forBrushless DC Motors. Asia Pacific Conference of the Prognostics and Health Management Society, 2017. https://ntrs.nasa.gov/citations/20200000579

This model was developed by NASA’s System Wide Safety (SWS) Project. https://www.nasa.gov/aeroresearch/programs/aosp/sws/

Events: (0)
None
Inputs/Loading: (4)
v_a, v_b, v_c: Voltages at a, b, c
t_l: Torque from load
States: (5)
i_a, i_b, i_c: Currents provided to motor
v_rot: Rotational velocity (rad/sec)
theta: Angle of motor (rad)
Outputs: (2)
v_rot: Rotational velocity (rad/sec)
theta: Angle of motor (rad)
Model Configuration Parameters:
process_noise : Process noise (applied at dx/next_state). Can be number (e.g., .2) applied to every state, a dictionary of values for each state (e.g., {‘x1’: 0.2, ‘x2’: 0.3}), or a function (x) -> x
process_noise_dist : Optional, distribution for process noise (e.g., normal, uniform, triangular)
measurement_noise : Measurement noise (applied in output eqn) Can be number (e.g., .2) applied to every output, a dictionary of values for each output (e.g., {‘z1’: 0.2, ‘z2’: 0.3}), or a function (z) -> z
measurement_noise_dist : Optional, distribution for measurement noise (e.g., normal, uniform, triangular)
x0: Initial State
L: Inductance (H)
M: Mutual inductance (H)
R: Resistance (Ohm)
K: back emf constant / Torque constant (V/rad/sec)
B: Friction in motor / Damping (Not a function of thrust) (Nm/(rad/s))
Po: no of poles in rotor
J: Load moment of inertia (neglecting motor shaft inertia) (Kg*m^2)

ESC

class prog_models.models.ESC(**kwargs)

Simple Electronic-Speed Controller (ESC) model for powertrain modeling. This model replicates the behavior of the speed controller with pulse-width modulation (PWM) and commutation matrix. Duty cycle simulated with a square wave using scipy signal.square function.

References: Matteo Corbetta, Chetan S. Kulkarni. An approach for uncertainty quantification and management of unmanned aerial vehicle health. Annual Conference of the PHM Society, Scottsdale, AZ, 2019. http://papers.phmsociety.org/index.php/phmconf/article/view/847

George E. Gorospe Jr, Chetan S. Kulkarni, Edward Hogge, Andrew Hsu, and Natalie Ownby. A Study of the Degradation of Electronic Speed Controllers forBrushless DC Motors. Asia Pacific Conference of the Prognostics and Health Management Society, 2017. https://ntrs.nasa.gov/citations/20200000579

This model was developed by NASA’s System Wide Safety (SWS) Project. https://www.nasa.gov/aeroresearch/programs/aosp/sws/

Events: (0)
None
Inputs/Loading: (3)
duty : Duty cycle [-], percentage the input is “on” (i.e., voltage is supplied). 0 = no voltage supply (always closed), 1 = 100% voltage supply (always open).
theta : rotor position [rad].
v : voltage [V], voltage input from Battery (after DC converter, should be constant).
States: (4)
v_a : 3-phase voltage value, first phase, [V], input to the motor
v_b : 3-phase voltage value, second phase, [V], input to the motor
v_c : 3-phase voltage value, third phase [V], input to the motor
t : time value [s].
Outputs: (4)
v_a : 3-phase voltage value, first phase, [V], input to the motor
v_b : 3-phase voltage value, second phase, [V], input to the motor
v_c : 3-phase voltage value, third phase [V], input to the motor
t : time value [s].
Model Configuration Parameters:
sawtooth_freq : Frequency of PWM signal [Hz], default value in default_parameters.
x0 : Initial state containing v_a, v_b, v_c and t.
process_noise : Process noise (applied at dx/next_state). Can be number (e.g., .2) applied to every state, a dictionary of values for each state (e.g., {‘x1’: 0.2, ‘x2’: 0.3}), or a function (x) -> x
process_noise_dist : Optional, distribution for process noise (e.g., normal, uniform, triangular)
measurement_noise : Measurement noise (applied in output eqn) Can be number (e.g., .2) applied to every output, a dictionary of values for each output (e.g., {‘z1’: 0.2, ‘z2’: 0.3}), or a function (z) -> z
measurement_noise_dist : Optional, distribution for measurement noise (e.g., normal, uniform, triangular)

Powertrain

class prog_models.models.Powertrain(esc, motor, **kwargs)

Powertrain model composed of ESC and DC motor (with the option to add propeller load using parameter Cq). The powertrain model is used to simulate the motor dynamics including the effect of the speed controller and pulse-width modulation.

Parameters for a standard propeller for commercial UAV are also added to the powertrain model, so that the load torque acting on the motor can be computed. At this stage, the propeller is modeled simply as a load torque proportional to the square of the rotor speed. When simulating the full PWM signal, this model needs a very small time step size (e.g., dt=1e-5) to show the full dynamics. Faster simulations can be achieved by ignoring the PWM square wave and acting directing on the input voltage. For example, modulating the input voltage to replicate the behavior of a throttle.

References: Matteo Corbetta, Chetan S. Kulkarni. An approach for uncertainty quantification and management of unmanned aerial vehicle health. Annual Conference of the PHM Society, Scottsdale, AZ, 2019. http://papers.phmsociety.org/index.php/phmconf/article/view/847

George E. Gorospe Jr, Chetan S. Kulkarni, Edward Hogge, Andrew Hsu, and Natalie Ownby. A Study of the Degradation of Electronic Speed Controllers forBrushless DC Motors. Asia Pacific Conference of the Prognostics and Health Management Society, 2017. https://ntrs.nasa.gov/citations/20200000579

R.P. Palanisamy C. Kulkarni, M. Corbetta, P. Banerjee “Fault Detection and Performance Monitoring of Propellers in Electric UAV”, 2022 IEEE Aerospace

This model was developed by NASA’s System Wide Safety (SWS) Project. https://www.nasa.gov/aeroresearch/programs/aosp/sws/

Events: (0)
None
Inputs: (2)
duty : Duty cycle [-], percentage the input is “on” (i.e., voltage is supplied). 0 = no voltage supply (always closed), 1 = 100% voltage supply (always open).
v : voltage [V], voltage input from Battery (after DC converter, should be constant).
States: (5)
v_a : 3-phase voltage value, first phase, [V], input to the motor
v_b : 3-phase voltage value, second phase, [V], input to the motor
v_c : 3-phase voltage value, third phase [V], input to the motor
t : time value [s].
i_a : 3-phase current value, first phase [A], motor state
i_b : 3-phase current value, second phase [A], motor state
i_c : 3-phase current value, third phase [A], motor state
v_rot : Motor angular velocity [rad/s]
theta : Motor rotor position [rad]
Outputs: (2)
v_rot : Motor angular velocity [rad/s]
theta : Motor rotor position [rad]
Model Configuration Parameters:
process_noise : Process noise (applied at dx/next_state). Can be number (e.g., .2) applied to every state, a dictionary of values for each state (e.g., {‘x1’: 0.2, ‘x2’: 0.3}), or a function (x) -> x
process_noise_dist : Optional, distribution for process noise (e.g., normal, uniform, triangular)
measurement_noise : Measurement noise (applied in output eqn) Can be number (e.g., .2) applied to every output, a dictionary of values for each output (e.g., {‘z1’: 0.2, ‘z2’: 0.3}), or a function (z) -> z
measurement_noise_dist : Optional, distribution for measurement noise (e.g., normal, uniform, triangular)
c_q : Dimensionless coefficient of torque of the propeller [-], (APC data, derived).
rho : Air density [Kg/m^3].
D: Propeller diameter [m].

Note

This model is known to be sensitive to noise. The process noise and measurement noise should be set to low values.

Note

Powertrain is added on top of any noise in the underlying esc and motor models. To update the esc or motor parameters, access m.esc.parameters and m.motor.paramters, respectively.

ThrownObject

class prog_models.models.ThrownObject(**kwargs)

Simple Non-Linear Model that similates an object thrown into the air with air resistance

Events (2)
falling: The object is falling
impact: The object has hit the ground

Inputs/Loading: (0)

States: (2)
x: Position in space (m)
v: Velocity in space (m/s)
Outputs/Measurements: (1)
x: Position in space (m)
Keyword Arguments
  • process_noise (Optional, float or Dict[Srt, float]) – Process noise (applied at dx/next_state). Can be number (e.g., .2) applied to every state, a dictionary of values for each state (e.g., {‘x1’: 0.2, ‘x2’: 0.3}), or a function (x) -> x

  • process_noise_dist (Optional, String) – distribution for process noise (e.g., normal, uniform, triangular)

  • measurement_noise (Optional, float or Dict[Srt, float]) – Measurement noise (applied in output eqn). Can be number (e.g., .2) applied to every output, a dictionary of values for each output (e.g., {‘z1’: 0.2, ‘z2’: 0.3}), or a function (z) -> z

  • measurement_noise_dist (Optional, String) – distribution for measurement noise (e.g., normal, uniform, triangular)

  • g (Optional, float) – Acceleration due to gravity (m/s^2). Default is 9.81 m/s^2 (standard gravity)

  • thrower_height (Optional, float) – Height of the thrower (m). Default is 1.83 m

  • throwing_speed (Optional, float) – Speed at which the ball is thrown (m/s). Default is 40 m/s