VR-Link API Documentation for DIS
 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 
54  virtual void setLocation( const DtVector& loc, DtTime curTime );
55 
58  virtual const DtVector& approxLocation( DtTime curTime ) const;
59 
61  virtual const DtVector& deadReckonedLocation( DtTime curTime ) const;
62 
64  virtual void setVelocity( const DtVector32& vel, DtTime curTime );
65 
68  virtual const DtVector32& approxVelocity( DtTime curTime ) const;
69 
71  virtual const DtVector32& deadReckonedVelocity( DtTime curTime ) const;
72 
74  virtual void setOrientation( const DtTaitBryan& ori, DtTime curTime );
75 
78  virtual const DtTaitBryan& approxEuler( DtTime curTime ) const;
79 
81  virtual const DtTaitBryan& deadReckonedEuler( DtTime curTime ) const;
82 
84  virtual const DtTime& locationUpdateTime() const;
85 
87  virtual const DtTime& velocityUpdateTime() const;
88 
90  virtual const DtTime& orientationUpdateTime() const;
91 
93  virtual void setAcceleration( const DtVector32& acc, DtTime curTime );
94  virtual const DtVector32& acceleration( DtTime curTime ) const;
95 
97  virtual void setRotationalVelocity( const DtVector32& vel, DtTime curTime );
98  virtual const DtVector32& rotationalVelocity( DtTime curTime ) const;
99 
102  virtual const DtDcm& approxBodyToGeoc( DtTime curTime ) const;
103 
105  virtual const DtDcm& deadReckonedBodyToGeoc( DtTime curTime ) const;
106 
109  virtual void setAlgorithm( DtDeadReckonTypes alg );
110  virtual DtDeadReckonTypes algorithm() const;
111 
114 
117  virtual int isRotational() const;
118 
123  virtual void deadReckonPosition(DtTime dt, const DtVector& oldPos,
124  const DtVector32& oldVel, const DtVector32& oldAccel,
125  DtVector32& newVel, DtVector& newPos) const;
126 
131  virtual void deadReckonOrientation( DtTime dt, const DtDcm& old_b2w,
132  const DtDirectedRotRate& drr, DtDcm& new_b2w ) const;
133 
135 
138 
141  static int isRotational( DtDeadReckonTypes algorithm );
142 
144  static void deadReckonPosition(DtTime dt, DtDeadReckonTypes algorithm,
145  const DtVector& oldPos, const DtVector32& oldVel, const DtVector32& oldAccel,
146  DtVector32& newVel, DtVector& newPos);
147 
149  static void deadReckonOrientation( DtTime dt, DtDeadReckonTypes algorithm,
150  const DtDcm& old_b2w, const DtDirectedRotRate& drr, DtDcm& new_b2w );
152 
153 protected:
154 
158  virtual void deadReckonLoc( DtTime curTime ) const;
159 
163  virtual void deadReckonBodyToGeoc( DtTime curTime ) const;
164 
168  virtual void deadReckonEuler( DtTime curTime ) const;
169 
170 protected:
171 
177 
178  mutable DtVector myDRLoc;
185 
190 
191 };
192 
194 {
195  deadReckonLoc( curTime );
196  return myDRLoc;
197 }
198 
199 inline const DtVector& DtDeadReckoner::approxLocation( DtTime curTime ) const
200 {
201  return deadReckonedLocation( curTime );
202 }
203 
205 {
206  deadReckonLoc( curTime );
207  return myDRVel;
208 }
209 
210 inline const DtVector32& DtDeadReckoner::approxVelocity( DtTime curTime ) const
211 {
212  return deadReckonedVelocity( curTime );
213 }
214 
216 {
217  deadReckonBodyToGeoc( curTime );
218  return myDRBodyToGeoc;
219 }
220 
221 inline const DtDcm& DtDeadReckoner::approxBodyToGeoc( DtTime curTime ) const
222 {
223  return deadReckonedBodyToGeoc( curTime );
224 }
225 
227 {
228  deadReckonEuler( curTime );
229  return myDREuler;
230 }
231 
232 inline const DtTaitBryan& DtDeadReckoner::approxEuler( DtTime curTime ) const
233 {
234  return deadReckonedEuler( curTime );
235 }
236 
238 {
239  return mySimTimePosDataValid;
240 }
241 
243 {
244  // This is the same as Position, because velocity is recalculated
245  // jointly in this implementation of deadreckoning.
246  return mySimTimePosDataValid;
247 }
248 
250 {
252 }
253 
255 {
256  myAlgorithm = alg;
257 }
258 
260 {
261  return myAlgorithm;
262 }
263 
264 inline const DtVector32& DtDeadReckoner::acceleration(DtTime curTime) const
265 {
266  return myAccel;
267 }
268 
270 {
271  return myRotVel;
272 }

Document ID: Generated on Mon Apr 8 04:49:21 EDT 2019 from SVN revision 197403
Copyright © 2005-2016 VT MÄK. All Rights Reserved (www.mak.com)