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 
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 DtVector& vel, DtTime curTime );
65 
68  virtual const DtVector& approxVelocity( DtTime curTime ) const;
69 
71  virtual const DtVector& 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 DtVector& acc, DtTime curTime );
94  virtual const DtVector& acceleration( DtTime curTime ) const;
95 
97  virtual void setRotationalVelocity( const DtVector& vel, DtTime curTime );
98  virtual const DtVector& 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 DtVector& oldVel, const DtVector& oldAccel,
125  DtVector& 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 DtVector& oldVel, const DtVector& oldAccel,
146  DtVector& newVel, DtVector& newPos );
147 
149  static void deadReckonOrientation( DtTime dt, DtDeadReckonTypes algorithm,
150  const DtDcm& old_b2w, const DtDirectedRotRate& drr, DtDcm& new_b2w );
151 
153 
154 protected:
155 
159  virtual void deadReckonLoc( DtTime curTime ) const;
160 
164  virtual void deadReckonBodyToGeoc( DtTime curTime ) const;
165 
169  virtual void deadReckonEuler( DtTime curTime ) const;
170 
171 protected:
172 
178 
179  mutable DtVector myDRLoc;
180  mutable DtVector myDRVel;
186 
191 
192 };
193 
195 {
196  deadReckonLoc( curTime );
197  return myDRLoc;
198 }
199 
200 inline const DtVector& DtDeadReckoner::approxLocation( DtTime curTime ) const
201 {
202  return deadReckonedLocation( curTime );
203 }
204 
206 {
207  deadReckonLoc( curTime );
208  return myDRVel;
209 }
210 
211 inline const DtVector& DtDeadReckoner::approxVelocity( DtTime curTime ) const
212 {
213  return deadReckonedVelocity( curTime );
214 }
215 
217 {
218  deadReckonBodyToGeoc( curTime );
219  return myDRBodyToGeoc;
220 }
221 
222 inline const DtDcm& DtDeadReckoner::approxBodyToGeoc( DtTime curTime ) const
223 {
224  return deadReckonedBodyToGeoc( curTime );
225 }
226 
228 {
229  deadReckonEuler( curTime );
230  return myDREuler;
231 }
232 
233 inline const DtTaitBryan& DtDeadReckoner::approxEuler( DtTime curTime ) const
234 {
235  return deadReckonedEuler( curTime );
236 }
237 
239 {
240  return mySimTimePosDataValid;
241 }
242 
244 {
245  // This is the same as Position, because velocity is recalculated
246  // jointly in this implementation of deadreckoning.
247  return mySimTimePosDataValid;
248 }
249 
251 {
253 }
254 
256 {
257  myAlgorithm = alg;
258 }
259 
261 {
262  return myAlgorithm;
263 }
264 
265 inline const DtVector& DtDeadReckoner::acceleration( DtTime curTime ) const
266 {
267  return myAccel;
268 }
269 
270 inline const DtVector& DtDeadReckoner::rotationalVelocity( DtTime curTime ) const
271 {
272  return myRotVel;
273 }

Document ID: Generated on Fri May 15 06:36:13 EDT 2015 from SVN revision 153263
Copyright © 2005-2014 VT MÄK. All Rights Reserved (www.mak.com)