VR-Link API Documentation for HLA 1.3
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
deadReckoner.h
Go to the documentation of this file.
1 /****************************************************************************
2  * Copyright (c) 2014 VT MAK
3  * All rights reserved.
4  ****************************************************************************/
5 
9 
10 #pragma once
11 
12 #include <vlpi/approximator.h>
13 #include <vlpi/disEnums.h>
14 
15 #include <matrix/vlTaitBryan.h>
16 #include <matrix/vlVector.h>
17 #include <matrix/vlDcm.h>
18 
31 {
32 public:
33 
36 
38  DtDeadReckoner( const DtDeadReckoner& orig );
39 
41  virtual ~DtDeadReckoner();
42 
45 
47  bool operator == (const DtDeadReckoner& orig ) const;
48 
51  virtual DtApproximator* clone() const;
52 
55  virtual void setAll(
56  const DtVector& loc,
57  const DtVector32& vel,
58  const DtTaitBryan& ori,
59  const DtVector32& acc,
60  const DtVector32& rotVel,
61  DtTime t);
62 
64  virtual void setLocation( const DtVector& loc, DtTime curTime );
65 
68  virtual const DtVector& approxLocation( DtTime curTime ) const;
69 
71  virtual const DtVector& deadReckonedLocation( DtTime curTime ) const;
72 
74  virtual void setVelocity( const DtVector32& vel, DtTime curTime );
75 
78  virtual const DtVector32& approxVelocity( DtTime curTime ) const;
79 
81  virtual const DtVector32& deadReckonedVelocity( DtTime curTime ) const;
82 
84  virtual void setOrientation( const DtTaitBryan& ori, DtTime curTime );
85 
88  virtual const DtTaitBryan& approxEuler( DtTime curTime ) const;
89 
91  virtual const DtTaitBryan& deadReckonedEuler( DtTime curTime ) const;
92 
94  virtual const DtTime& locationUpdateTime() const;
95 
97  virtual const DtTime& velocityUpdateTime() const;
98 
100  virtual const DtTime& orientationUpdateTime() const;
101 
103  virtual void setAcceleration( const DtVector32& acc, DtTime curTime );
104  virtual const DtVector32& acceleration( DtTime curTime ) const;
105 
107  virtual void setRotationalVelocity( const DtVector32& vel, DtTime curTime );
108  virtual const DtVector32& rotationalVelocity( DtTime curTime ) const;
109 
112  virtual const DtDcm& approxBodyToGeoc( DtTime curTime ) const;
113 
115  virtual const DtDcm& deadReckonedBodyToGeoc( DtTime curTime ) const;
116 
119  virtual void setAlgorithm( DtDeadReckonTypes alg );
120  virtual DtDeadReckonTypes algorithm() const;
121 
124 
127  virtual int isRotational() const;
128 
133  virtual void deadReckonPosition( DtTime dt, const DtVector& oldPos,
134  const DtVector32& oldVel, const DtVector32& oldAccel,
135  DtVector32& newVel, DtVector& newPos ) const;
136 
141  virtual void deadReckonOrientation( DtTime dt, const DtDcm& old_b2w,
142  const DtDirectedRotRate& drr, DtDcm& new_b2w ) const;
143 
145 
148 
151  static int isRotational( DtDeadReckonTypes algorithm );
152 
154  static void deadReckonPosition( DtTime dt, DtDeadReckonTypes algorithm,
155  const DtVector& oldPos, const DtVector32& oldVel, const DtVector32& oldAccel,
156  DtVector32& newVel, DtVector& newPos );
157 
159  static void deadReckonOrientation( DtTime dt, DtDeadReckonTypes algorithm,
160  const DtDcm& old_b2w, const DtDirectedRotRate& drr, DtDcm& new_b2w );
162 
163 protected:
164 
168  virtual void deadReckonLoc( DtTime curTime ) const;
169 
173  virtual void deadReckonBodyToGeoc( DtTime curTime ) const;
174 
178  virtual void deadReckonEuler( DtTime curTime ) const;
179 
180 protected:
181 
187 
188  mutable DtVector myDRLoc;
195 
200 
201 };
202 
204 {
205  deadReckonLoc( curTime );
206  return myDRLoc;
207 }
208 
209 inline const DtVector& DtDeadReckoner::approxLocation( DtTime curTime ) const
210 {
211  return deadReckonedLocation( curTime );
212 }
213 
215 {
216  deadReckonLoc( curTime );
217  return myDRVel;
218 }
219 
220 inline const DtVector32& DtDeadReckoner::approxVelocity( DtTime curTime ) const
221 {
222  return deadReckonedVelocity( curTime );
223 }
224 
226 {
227  deadReckonBodyToGeoc( curTime );
228  return myDRBodyToGeoc;
229 }
230 
231 inline const DtDcm& DtDeadReckoner::approxBodyToGeoc( DtTime curTime ) const
232 {
233  return deadReckonedBodyToGeoc( curTime );
234 }
235 
237 {
238  deadReckonEuler( curTime );
239  return myDREuler;
240 }
241 
242 inline const DtTaitBryan& DtDeadReckoner::approxEuler( DtTime curTime ) const
243 {
244  return deadReckonedEuler( curTime );
245 }
246 
248 {
249  return mySimTimePosDataValid;
250 }
251 
253 {
254  // This is the same as Position, because velocity is recalculated
255  // jointly in this implementation of deadreckoning.
256  return mySimTimePosDataValid;
257 }
258 
260 {
262 }
263 
265 {
266  myAlgorithm = alg;
267 }
268 
270 {
271  return myAlgorithm;
272 }
273 
274 inline const DtVector32& DtDeadReckoner::acceleration( DtTime curTime ) const
275 {
276  return myAccel;
277 }
278 
280 {
281  return myRotVel;
282 }

Document ID: Generated on Mon Jun 22 21:18:40 EDT 2020 from SVN revision 213785
Copyright © 2005-2018 MAK Technologies. All Rights Reserved (www.mak.com)