From 6f989c91577c7d4dc9ac972b12e3617326fbb420 Mon Sep 17 00:00:00 2001 From: "John M. Penn" Date: Mon, 23 Mar 2015 13:56:01 -0500 Subject: [PATCH] Implement Felix Baumgartner parachutist simulation. Fixes #32 --- trick_models/parachute/include/Parachutist.hh | 49 ++++++ trick_models/parachute/include/interpolate.h | 15 ++ trick_models/parachute/src/Parachutist.cpp | 160 ++++++++++++++++++ trick_models/parachute/src/interpolate | Bin 0 -> 15648 bytes trick_models/parachute/src/interpolate.cpp | 22 +++ .../DP_Product/DP_parachutist.xml | 47 +++++ .../Modified_data/parachutist.dr | 20 +++ .../RUN_Baumgartner_jump/input.py | 7 + trick_sims/SIM_parachute/S_define | 30 ++++ trick_sims/SIM_parachute/S_overrides.mk | 4 + 10 files changed, 354 insertions(+) create mode 100644 trick_models/parachute/include/Parachutist.hh create mode 100644 trick_models/parachute/include/interpolate.h create mode 100644 trick_models/parachute/src/Parachutist.cpp create mode 100755 trick_models/parachute/src/interpolate create mode 100644 trick_models/parachute/src/interpolate.cpp create mode 100644 trick_sims/SIM_parachute/DP_Product/DP_parachutist.xml create mode 100644 trick_sims/SIM_parachute/Modified_data/parachutist.dr create mode 100644 trick_sims/SIM_parachute/RUN_Baumgartner_jump/input.py create mode 100644 trick_sims/SIM_parachute/S_define create mode 100644 trick_sims/SIM_parachute/S_overrides.mk diff --git a/trick_models/parachute/include/Parachutist.hh b/trick_models/parachute/include/Parachutist.hh new file mode 100644 index 00000000..b20f8786 --- /dev/null +++ b/trick_models/parachute/include/Parachutist.hh @@ -0,0 +1,49 @@ +/************************************************************************* +PURPOSE: (Parachutist Structure) +LIBRARY DEPENDENCIES: + ( + (parachutist/src/Parachutist.o) + ) + +**************************************************************************/ + +#ifndef _parachutist_hh_ +#define _parachutist_hh_ +#include "sim_services/Integrator/include/regula_falsi.h" + +class Parachutist { + + public: + double position ; /* m xyz-position */ + double velocity ; /* m/s xyz-velocity */ + double acceleration ; /* m/s2 xyz-acceleration */ + + double crossSectionalArea; /* m2 */ + double crossSectionalAreaRate; /* m2/s */ + double cooefficientOfDrag; /* -- */ + double cooefficientOfDragRate; /* -- */ + double mass; /* kg */ + + double parachuteDeploymentStartTime; /* s */ + double parachuteDeploymentDuration; /* s */ + + static const double crossSectionalArea_freefall; /* m2 */ + static const double crossSectionalArea_parachute; /* m2 */ + static const double cooefficientOfDrag_freefall; /* -- */ + static const double cooefficientOfDrag_parachute; /* -- */ + + bool touchDown; /* -- */ + + REGULA_FALSI rf ; + + int default_data(); + int state_init(); + int state_deriv(); + int state_integ(); + int parachute_control(); + double touch_down(); + private: + double parachuteDeploymentEndTime; /* s */ +}; + +#endif diff --git a/trick_models/parachute/include/interpolate.h b/trick_models/parachute/include/interpolate.h new file mode 100644 index 00000000..4ba3a23b --- /dev/null +++ b/trick_models/parachute/include/interpolate.h @@ -0,0 +1,15 @@ +#ifndef INTERPOLATE_H +#define INTERPOLATE_H + +#ifdef __cplusplus +extern "C" { +#endif + +double interpolate( double x, const double xa[], const double fa[], int N_elems ); + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/trick_models/parachute/src/Parachutist.cpp b/trick_models/parachute/src/Parachutist.cpp new file mode 100644 index 00000000..caacb53d --- /dev/null +++ b/trick_models/parachute/src/Parachutist.cpp @@ -0,0 +1,160 @@ +/********************************* TRICK HEADER ******************************* +PURPOSE: ( Simulate a skydiver jumping from very high altitude.) +LIBRARY DEPENDENCY: + ((Parachutist.o)(interpolate.o)) +PROGRAMMERS: + (((John M. Penn) (L3 Communications) (March 2015) (Trick Refresher Project))) +*******************************************************************************/ +#include "../include/Parachutist.hh" +#include "../include/interpolate.h" +#include + +// The following three data arrays come from: +// http://www.engineeringtoolbox.com/standard-atmosphere-d_604.html +// U.S Standard Atmosphere Air Properties in SI Units +#define NUM_ELEMENTS 21 + +// Units = meters (above sea level). +const double altitude_array[NUM_ELEMENTS] = { + -1000.0, 0.0, 1000.0, 2000.0, 3000.0, 4000.0, 5000.0, 6000.0, + 7000.0, 8000.0, 9000.0, 10000.0, 15000.0, 20000.0, 25000.0, 30000.0, + 40000.0, 50000.0, 60000.0, 70000.0, 80000.0 }; + +// Units = kilograms per cubic meter. +const double air_density_array[NUM_ELEMENTS] = { + 1.347, 1.225, 1.112, 1.007, 0.9093, 0.8194, 0.7364, 0.6601, + 0.5900, 0.5258, 0.4671, 0.4135, 0.1948, 0.08891, 0.04008, 0.01841, + 0.003996, 0.001027, 0.0003097, 0.00008283, 0.00001846 }; + +// Units = meters per second squared. +const double gravity_array[NUM_ELEMENTS] = { +9.810, 9.807, 9.804, 9.801, 9.797, 9.794, 9.791, 9.788, +9.785, 9.782, 9.779, 9.776, 9.761, 9.745, 9.730, 9.715, +9.684, 9.654, 9.624, 9.594, 9.564 +}; + +const double Parachutist::crossSectionalArea_freefall = 0.75 ; +const double Parachutist::crossSectionalArea_parachute = 30.00; +const double Parachutist::cooefficientOfDrag_freefall = 0.75; +const double Parachutist::cooefficientOfDrag_parachute = 1.30; + +int Parachutist::default_data() { + + position = 38969.3; //38969.3 meters = 127852 feet + velocity = 0.0; + acceleration = 0.0; + parachuteDeploymentStartTime = 259; /* 4 minutes, 19 seconds*/ + parachuteDeploymentDuration = 3; + crossSectionalArea = crossSectionalArea_freefall; + cooefficientOfDrag = cooefficientOfDrag_freefall; + touchDown = false; + mass = 82.0; + + return (0); +} + +int Parachutist::state_init() { + parachuteDeploymentEndTime = parachuteDeploymentStartTime + parachuteDeploymentDuration; + return (0); +} + +#include "sim_services/Executive/include/exec_proto.h" +int Parachutist::parachute_control() { + + double currentTime = exec_get_sim_time(); + + if ((currentTime > parachuteDeploymentStartTime) && + (currentTime <= parachuteDeploymentEndTime)) { + cooefficientOfDragRate = (cooefficientOfDrag_parachute - cooefficientOfDrag_freefall) + / parachuteDeploymentDuration; + crossSectionalAreaRate = (crossSectionalArea_parachute - crossSectionalArea_freefall) + / parachuteDeploymentDuration; + } else { + cooefficientOfDragRate = 0.0; + crossSectionalAreaRate = 0.0; + } + return (0); +} + +int Parachutist::state_deriv() { + + // Calculate the force of gravity. +#if 1 + double g = 9.81; +#else + double g = interpolate( position, altitude_array, gravity_array, NUM_ELEMENTS ); +#endif + + double Force_gravity = mass * -g; + + // Calculate the force of drag. + double air_density = interpolate( position, altitude_array, air_density_array, NUM_ELEMENTS ); + double Force_drag = cooefficientOfDrag * 0.5 * air_density * velocity * velocity * crossSectionalArea; + + // Sum the forces and calculate acceleration. + double Force_total; + + // If skydiver has touched down then set state derivatives to zero. + if ( touchDown ) { + Force_total = 0.0; + velocity = 0.0; + acceleration = 0.0; + } else { + Force_total = Force_gravity + Force_drag ; + acceleration = Force_total / mass; + } + + /* RETURN: -- Always return zero. */ + return(0); +} + +#include "sim_services/Integrator/include/integrator_c_intf.h" +int Parachutist::state_integ() { + + int integration_step; + + load_state( &position, + &velocity, + &cooefficientOfDrag, + &crossSectionalArea, + (double*)0 + ); + + load_deriv ( &velocity, + &acceleration, + &cooefficientOfDragRate, + &crossSectionalAreaRate, + (double*)0 + ); + + integration_step = integrate(); + + unload_state( &position, + &velocity, + &cooefficientOfDrag, + &crossSectionalArea, + (double*)0 + ); + + return(integration_step); +} + +double Parachutist::touch_down() { + double tgo ; + double now ; + + /* error function: how far the skydiver is above ground */ + rf.error = position ; + + now = get_integ_time() ; + tgo = regula_falsi( now, &rf ) ; + if (tgo == 0.0) { + now = get_integ_time() ; + reset_regula_falsi( now, &rf); + velocity = 0.0; + acceleration = 0.0; + touchDown = true; + std::cout << "Touchdown: time = " << now << "." << std::endl; + } + return ( tgo ) ; +} diff --git a/trick_models/parachute/src/interpolate b/trick_models/parachute/src/interpolate new file mode 100755 index 0000000000000000000000000000000000000000..a461ad1c84a7981608e25d5a97bff2c1cdc5f1b9 GIT binary patch literal 15648 zcmeHOeRLbul^^9}V?Gio;d3bv5hV~ln%Mbt4y2wG&oU-vuHozI)$&_uhBkeIN5Az5MZepU#jZ$5csbo+3%oY&`jYAxV1kWhhC~ zU*b{mXj=K287*)++QT8KF#0g^Vi3;n72At-U(Y?K08s82+xw27Ay*y z=8MK6!Emij&y{!0#lpTbY3Q(1KO5|cdK7ebL|_jSK{p%1eop+~aLYF2&n9RIrn# z)z*!V!pZiz+`>KpPK2jyAp*%ej|z6uw2=3+?8|oxc^x)C;hFNNzvQb_qOw>=N=w$Q zRf5AW6nQ6dE+^^Ju@FP(kY#BCO=oDaH1hCME9s&IjS=g>B+}K zbt3*7QF4syhJN4GS1&491S5jgY*%3hzr*qOn172BgR|JFs{w3~oi_>Al;g#QR$ ziHD#HoYK{JQh0zVliB}e4^*ng+iJ_PHuT}RbG9<58chSL(a>j9zSytyP|vy~v#h6O zKLy>jWiQ5+JOBp)3c8&iEsk7||;9Cx~=?I#1e%*vjY148D3teU+xZ(o|XGlzG)rUN|6 zAhNP9*fikWeI0bG=IU7&03?=su##Gb5ymM04W@-^C>AMSmiJ^?j&P|P|=)x z2yIy&L@9fnyNiUZ16VfD{=^)}+971k6|zPlYXq`J$0|ptA*^9pdLw$AEVIS!J?^|s z*hr*<(XOgRuDl4h-2rA1UY9srpjRYfuU@8r%Er)0fZ$G$&(<0~G zT|gy?$9Ly3mzr3;2EB&C{|WFs4G1+JrN*Py2cKXlb{=xwelUZ7w&1_x+>`kaXY;ol zqvMEbPJae+)x^wM@JYWyev^!*4tS$YHTqTKC2PGC_0PRdF@bbkbzZd}E{mdeAHj3$*&&p);~H z=>e)reoD%Ex%?rqnX5lVAK{w&g}#kKUk~(kK_6gm6&eba8&Mjo1YOX~ZX!TyIe-;m zt$}Z5YgMT#DztLBMQDu+t=|w@|ASm;D42a^eb5TnE3;^LuDcMWu}aVd&13?!=9B0X z*gMtdM(5M4NqbdaNL8QEK$*QkzaKLMvde8x2KYFGOjq5_CZ` zyNLj;E&yxygj(~c>RF+c%k9Kwu6{@a)Axkd4`3(yYC-ETv;y`@ESmZ{3Qu7cLMziu zCP3>5=$4DMwrSaYwWw;1(8}exVB;e*=%+N!*P6|)okqjBX!EXa_(L^Zb+I`=hwXf!>f8b^yw1)!m=*f@;(wy{^Ro+rN! z2N}PFm;s~gkeX;3wBEt-h()3+1J(&(RNrru#jUmEP2xEKDyqA%&O7&wSnUEukCbNX z-Za8%9`*8b)+fuPCUB^A7YbXl*RPgiogAjU6z+%+3TM@5=Rh^PnV9J1p!^yd3&Rr} zr5IeAI;zQ_H7}lcA7kCBQ=Z

T!Nl6FSA6Y9@pZU1c2!S+r)%6qv!wh-xINL|uS^ zjm=ig^%zTdD^V}#42(phzyv5+s2X`#vA829&tlaCfx=*b#uH)HX*TAeufr6Zy{{uT zb;=iXVE|UUkvVm|`(X%prmItRc88%4f+>lqo~{uj@KFsq$V#Usg!kIHyBsFaeH=Ck z!Z%d&ZV*02uyi3FyNb=-w7>K#C(w_vVhj{Q=|u6h6#e=D2{saa4BC4bbaw$bb)M;_ zP6+xnbXYm+=BbfDT$P`Z9xPh!lwkz+U9SiYkMPAr zOojLRM(<->hX~h2sk;LNj`MaZA=LFB048O0gQLCAD0>l+JYbFD#e$W<>wPAOh8_o} zk=RB2^ALI>`V-B-ts7~Xp=SG2&01NobKih!wo^xqR&o^_PKX&NBz`2`em5}H?4>Yk z)d?x)COpDu$xbxciKV7aPPFPc>h*e*g?$NL1mOrG!Q&$guqx25*h1%hL;H^>N1TTTaRexi50oa_hcMiwiH9%b zZuRCd=$06?k5VXL6o|#pEr7WGd!m^MVk|WtUPz4nx*LEJhM6g5H&L*J6*B0~CtwP! zAF8S2?Lwt6z-X6=rR5{4bL!YkX^4e2x(ijwf5BLSM7BUZ8+auql|IM>HqM?;;M&Xj z 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 literal 0 HcmV?d00001 diff --git a/trick_models/parachute/src/interpolate.cpp b/trick_models/parachute/src/interpolate.cpp new file mode 100644 index 00000000..3858108b --- /dev/null +++ b/trick_models/parachute/src/interpolate.cpp @@ -0,0 +1,22 @@ +#include "../include/interpolate.h" +#include + +double interpolate( double x, const double xa[], const double fa[], int N_elems ) { + int ii; + for (ii=0 ; ((ii+2 < N_elems ) && (x > xa[ii+1])) ; ii++ ) ; + double x_lower = xa[ii]; + double x_upper = xa[ii+1]; + double f_lower = fa[ii]; + double f_upper = fa[ii+1]; + if (x < x_lower) { + fprintf(stderr, "Interpolation x is out of range low.\n"); + return(f_lower); + } + if (x > x_upper) { + fprintf(stderr, "Interpolation x is out of range high.\n"); + return(f_upper); + } + double f = (x_upper - x)/(x_upper - x_lower) * f_lower + + (x - x_lower)/(x_upper - x_lower) * f_upper ; + return(f); +} diff --git a/trick_sims/SIM_parachute/DP_Product/DP_parachutist.xml b/trick_sims/SIM_parachute/DP_Product/DP_parachutist.xml new file mode 100644 index 00000000..5a4984d2 --- /dev/null +++ b/trick_sims/SIM_parachute/DP_Product/DP_parachutist.xml @@ -0,0 +1,47 @@ + + + + -1.0E20 + 1.0E20 + 0.0 + + Page + + Plot + + sys.exec.out.time + dyn.parachutist.position + + + + + Page + + Plot + + sys.exec.out.time + dyn.parachutist.velocity + + + + + Page + + Plot + + sys.exec.out.time + dyn.parachutist.acceleration + + + + + Page + + Plot + + sys.exec.out.time + dyn.parachutist.cooefficientOfDrag + + + + diff --git a/trick_sims/SIM_parachute/Modified_data/parachutist.dr b/trick_sims/SIM_parachute/Modified_data/parachutist.dr new file mode 100644 index 00000000..e077b4ad --- /dev/null +++ b/trick_sims/SIM_parachute/Modified_data/parachutist.dr @@ -0,0 +1,20 @@ +global DR_GROUP_ID +global drg +try: + if DR_GROUP_ID >= 0: + DR_GROUP_ID += 1 +except NameError: + DR_GROUP_ID = 0 + drg = [] + +drg.append(trick.DRBinary("parachutist")) +drg[DR_GROUP_ID].set_freq(trick.DR_Always) +drg[DR_GROUP_ID].set_cycle(0.1) +drg[DR_GROUP_ID].set_single_prec_only(False) +drg[DR_GROUP_ID].add_variable("dyn.parachutist.position") +drg[DR_GROUP_ID].add_variable("dyn.parachutist.velocity") +drg[DR_GROUP_ID].add_variable("dyn.parachutist.acceleration") +drg[DR_GROUP_ID].add_variable("dyn.parachutist.crossSectionalArea") +drg[DR_GROUP_ID].add_variable("dyn.parachutist.cooefficientOfDrag") +trick.add_data_record_group(drg[DR_GROUP_ID], trick.DR_Buffer) +drg[DR_GROUP_ID].enable() diff --git a/trick_sims/SIM_parachute/RUN_Baumgartner_jump/input.py b/trick_sims/SIM_parachute/RUN_Baumgartner_jump/input.py new file mode 100644 index 00000000..41719761 --- /dev/null +++ b/trick_sims/SIM_parachute/RUN_Baumgartner_jump/input.py @@ -0,0 +1,7 @@ +#execfile("Modified_data/realtime.py") +execfile("Modified_data/parachutist.dr") + +trick.TMM_reduced_checkpoint(0) +dyn_integloop.getIntegrator(trick.Runge_Kutta_4, 4) + +trick.stop(800) diff --git a/trick_sims/SIM_parachute/S_define b/trick_sims/SIM_parachute/S_define new file mode 100644 index 00000000..0ae83bd1 --- /dev/null +++ b/trick_sims/SIM_parachute/S_define @@ -0,0 +1,30 @@ +/************************TRICK HEADER************************* +PURPOSE: + ( Simulate a skydiver jump from very high altitude. ) +LIBRARY DEPENDENCIES: + ((parachute/src/Parachutist.cpp)) +*************************************************************/ + +#include "sim_objects/default_trick_sys.sm" + +##include "parachute/include/Parachutist.hh" + +class ParachutistSimObject : public Trick::SimObject { + + public: + Parachutist parachutist; + + ParachutistSimObject() { + + ("default_data") parachutist.default_data() ; + ("initialization") parachutist.state_init() ; + ("derivative") parachutist.state_deriv() ; + ("integration") trick_ret = parachutist.state_integ() ; + ("dynamic_event") parachutist.touch_down() ; + (0.02, "scheduled") parachutist.parachute_control(); + } +} ; + +ParachutistSimObject dyn ; + +IntegLoop dyn_integloop(0.02) dyn; diff --git a/trick_sims/SIM_parachute/S_overrides.mk b/trick_sims/SIM_parachute/S_overrides.mk new file mode 100644 index 00000000..8fa02be5 --- /dev/null +++ b/trick_sims/SIM_parachute/S_overrides.mk @@ -0,0 +1,4 @@ + +TRICK_CFLAGS += -I${TRICK_HOME}/trick_models +TRICK_CXXFLAGS += -I${TRICK_HOME}/trick_models +