VR-Link API Documentation for HLA Evolved
deadReckoner.h
Go to the documentation of this file.
00001 /*********************************************************************
00002 ** Copyright (c) 1992-2010 VT MAK
00003 ** All rights reserved.
00004 *********************************************************************/
00005 
00006 
00009 
00010 #ifndef DtDeadReckoner_H_
00011 #define DtDeadReckoner_H_
00012 
00013 #include "approximator.h"
00014 #include <matrix/vlTaitBryan.h>
00015 #include <matrix/vlDcm.h>
00016 #include <matrix/vlVector.h>
00017 #include "disEnums.h"
00018 
00030 class DT_DLL_VLPROTIND DtDeadReckoner : public DtApproximator
00031 {
00032 public:
00033 
00035    DtDeadReckoner();
00036 
00038    virtual ~DtDeadReckoner();
00039 
00041    DtDeadReckoner(const DtDeadReckoner& orig);
00042 
00044    DtDeadReckoner& operator=(const DtDeadReckoner& orig);
00045 
00048    virtual DtApproximator* clone() const;
00049 
00051    virtual void setLocation(const DtVector& loc, DtTime curTime);
00052 
00055    virtual const DtVector& approxLocation(DtTime curTime) const;
00056 
00058    virtual const DtVector& deadReckonedLocation(DtTime curTime) const;
00059 
00061    virtual void setVelocity(const DtVector& vel, DtTime curTime);
00062 
00065    virtual const DtVector& approxVelocity(DtTime curTime) const;
00066 
00068    virtual const DtVector& deadReckonedVelocity(DtTime curTime) const;
00069 
00071    virtual void setOrientation(const DtTaitBryan& ori, DtTime curTime);
00072 
00075    virtual const DtTaitBryan& approxEuler(DtTime curTime) const;
00076 
00078    virtual const DtTaitBryan& deadReckonedEuler(DtTime curTime) const;
00079 
00081    virtual void setAcceleration(const DtVector& acc, DtTime curTime);
00082    virtual const DtVector& acceleration(DtTime curTime) const;
00083 
00085    virtual void setRotationalVelocity(const DtVector& vel, DtTime curTime);
00086    virtual const DtVector& rotationalVelocity(DtTime curTime) const;
00087 
00090    virtual const DtDcm& approxBodyToGeoc(DtTime curTime) const;
00091 
00093    virtual const DtDcm& deadReckonedBodyToGeoc(DtTime curTime) const;
00094 
00097    virtual void setAlgorithm(DtDeadReckonTypes alg);
00098    virtual DtDeadReckonTypes algorithm() const;
00099 
00104    virtual void deadReckonPosition(DtTime dt, 
00105       const DtVector& oldPos, const DtVector& oldVel,
00106       const DtVector& oldAccel,
00107       DtVector& newVel, DtVector& newPos);
00108 
00113    virtual void deadReckonOrientation(DtTime dt, 
00114       const DtDcm& old_b2w,
00115       const DtDirectedRotRate& drr,
00116       DtDcm& new_b2w);
00117 
00118 public:
00119 
00121    static void deadReckonPosition(
00122       DtTime dt, DtDeadReckonTypes algorithm,
00123       const DtVector& oldPos, const DtVector& oldVel,
00124       const DtVector& oldAccel,
00125       DtVector& newVel, DtVector& newPos);
00126 
00128    static void deadReckonOrientation(
00129       DtTime dt, DtDeadReckonTypes algorithm,
00130       const DtDcm& old_b2w,
00131       const DtDirectedRotRate& drr,
00132       DtDcm& new_b2w);
00133 
00134 protected:
00135 
00139    virtual void deadReckonLoc(DtTime curTime) const;
00140 
00144    virtual void deadReckonBodyToGeoc(DtTime curTime) const;
00145 
00149    virtual void deadReckonEuler(DtTime curTime) const;
00150 
00153    virtual int isRotational();
00154 
00162    DtDeadReckoner* self() const;
00163 
00164 protected:
00165 
00168    static int isRotational(DtDeadReckonTypes algorithm);
00169 
00170 protected:
00171 
00172    DtVector myLocAtTimeOfValidity;
00173    DtVector myVelAtTimeOfValidity;
00174    DtTime mySimTimePosDataValid;
00175    DtDcm myBodyToGeocAtTimeOfValidity;
00176    DtTime mySimTimeOrientDataValid;
00177 
00178    DtVector myDRLoc;
00179    DtVector myDRVel;
00180    DtTime myDRPosTime;
00181    DtDcm myDRBodyToGeoc;
00182    DtTime myDRBodyToGeocTime;
00183    DtTaitBryan myDREuler;
00184    DtTime myDREulerTime;
00185    DtDirectedRotRate myDirectedRotRate;
00186    DtDeadReckonTypes myAlgorithm;
00187    DtVector myAccel;
00188    DtBodyRates myRotVel;
00189 };
00190 
00191 inline DtDeadReckoner* DtDeadReckoner::self() const
00192 {
00193    return (DtDeadReckoner*)this;
00194 }
00195 
00196 inline const DtVector& DtDeadReckoner::deadReckonedLocation(DtTime curTime) const
00197 {
00198    deadReckonLoc(curTime);
00199    return myDRLoc;
00200 }
00201 
00202 inline const DtVector& DtDeadReckoner::approxLocation(DtTime curTime) const
00203 {
00204    return deadReckonedLocation(curTime);
00205 }
00206 
00207 inline const DtVector& DtDeadReckoner::deadReckonedVelocity(DtTime curTime) const
00208 {
00209    deadReckonLoc(curTime);
00210    return myDRVel;
00211 }
00212 
00213 inline const DtVector& DtDeadReckoner::approxVelocity(DtTime curTime) const
00214 {
00215    return deadReckonedVelocity(curTime);
00216 }
00217 
00218 inline const DtDcm& DtDeadReckoner::deadReckonedBodyToGeoc(DtTime curTime) const
00219 {
00220    deadReckonBodyToGeoc(curTime);
00221    return myDRBodyToGeoc;
00222 }
00223 
00224 inline const DtDcm& DtDeadReckoner::approxBodyToGeoc(DtTime curTime) const
00225 {
00226    return deadReckonedBodyToGeoc(curTime);
00227 }
00228 
00229 inline const DtTaitBryan& DtDeadReckoner::deadReckonedEuler(
00230    DtTime curTime) const
00231 {
00232    deadReckonEuler(curTime);
00233    return myDREuler;
00234 }
00235 
00236 inline const DtTaitBryan& DtDeadReckoner::approxEuler(DtTime curTime) const
00237 {
00238    return deadReckonedEuler(curTime);
00239 }
00240 
00241 inline void DtDeadReckoner::setAlgorithm(DtDeadReckonTypes alg)
00242 {
00243    myAlgorithm = alg;
00244 }
00245 
00246 inline DtDeadReckonTypes DtDeadReckoner::algorithm() const
00247 {
00248    return myAlgorithm;
00249 }
00250 
00251 inline const DtVector& DtDeadReckoner::acceleration(DtTime curTime) const
00252 {
00253    return myAccel;
00254 }
00255 
00256 inline const DtVector& DtDeadReckoner::rotationalVelocity(DtTime curTime) const
00257 {
00258    return myRotVel;
00259 }
00260 
00261 #endif
00262 

Document ID: Generated on Mon May 14 08:06:18 EDT 2012 from SVN revision 114750
Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (www.mak.com)