WarpTwin
Documentation for WarpTwin models and classes.
Loading...
Searching...
No Matches
InertialNavigationDefinition.hpp
Go to the documentation of this file.
1/******************************************************************************
2* Copyright (c) ATTX INC 2025. All Rights Reserved.
3*
4* This software and associated documentation (the "Software") are the
5* proprietary and confidential information of ATTX, INC. The Software is
6* furnished under a license agreement between ATTX and the user organization
7* and may be used or copied only in accordance with the terms of the agreement.
8* Refer to 'license/attx_license.adoc' for standard license terms.
9*
10* EXPORT CONTROL NOTICE: THIS SOFTWARE MAY INCLUDE CONTENT CONTROLLED UNDER THE
11* INTERNATIONAL TRAFFIC IN ARMS REGULATIONS (ITAR) OR THE EXPORT ADMINISTRATION
12* REGULATIONS (EAR99). No part of the Software may be used, reproduced, or
13* transmitted in any form or by any means, for any purpose, without the express
14* written permission of ATTX, INC.
15******************************************************************************/
16
17#ifndef APPS_GNC_INERTIAL_NAVIGATION_EKF_DEFINITION_HPP
18#define APPS_GNC_INERTIAL_NAVIGATION_EKF_DEFINITION_HPP
19
20#include <array>
21#include "core/Matrix.hpp"
22#include "types.h"
23
24namespace inertial_nav {
25
85
86
87
88// ------------------------------------------------------------------------------------
89// State Vector Indexing
90// ------------------------------------------------------------------------------------
91
92constexpr uint32 STATE_POS_IDX = 0; // Index 0–2: position -- _B_pI__pI [m]
93constexpr uint32 STATE_VEL_IDX = 3; // Index 3–5: velocity -- _B_pI__pI [m/s]
94constexpr uint32 STATE_QUAT_IDX = 6; // Index 6–9: quaternion -- _B_pI [unitless]
95constexpr uint32 STATE_GYRO_BIAS_IDX = 10; // Index 10–12: gyro bias -- _B_pI__B [rad/s]
96constexpr uint32 STATE_ACCEL_BIAS_IDX = 13; // Index 13–15: accel bias -- _B_pI__B [m/s^2]
97
98constexpr uint32 STATE_SIZE = 16; // Total state vector elements
99
100// Assert to ensure that state size does not change arbitrarily, as other elements
101// of the software depend on this size (telemetry, etc.)
102static_assert(STATE_SIZE == 16, "Changing state size must be associated with TLM size change.");
111
112
113
114// ------------------------------------------------------------------------------------
115// Covariance Indexing Notes
116// ------------------------------------------------------------------------------------
117// The covariance matrix P is STATE_SIZE x STATE_SIZE
118// Covariances follow the same element order as the state
119
120
121
122// ------------------------------------------------------------------------------------
123// Propagation Observer Vector Definitions
124// ------------------------------------------------------------------------------------
125
126constexpr uint32 PROPAGATE_GRAV_ACCEL_IDX = 0; // Index 0-2: acceleration -- _B_tI__pI [m/s^2]
127constexpr uint32 PROPAGATE_GYRO_MEAS_IDX = 3; // Index 3-5: gyro measurement -- _IMU_tI__IMU [rad/s]
128constexpr uint32 PROPAGATE_ACCEL_MEAS_IDX = 6; // Index 6-8: accel measurement -- _IMU_tI__IMU [m/s^2]
129constexpr uint32 PROPAGATE_PI_POS_IDX = 9; // Index 9-11: position -- _pI_tI__pI [m]
130
131constexpr uint32 PROPAGATE_OBSERVER_SIZE = 12; // Total propagation observer/param vector elements
139
140
141
142// ------------------------------------------------------------------------------------
143// Sun Sensor Measurement Update Observer Vector Definitions
144// ------------------------------------------------------------------------------------
145
146constexpr uint32 SUN_EXPECTED_SUN_VEC_IDX = 0; // Index 0-2: sun pointing vector -- _B_tI__pI [unitless]
147constexpr uint32 SUN_ALIGNMENT_QUAT_IDX = 3; // Index 3-6: quaternion -- _SUN_B [unitless]
148
149constexpr uint32 SUN_OBSERVER_SIZE = 7; // Total sun sensor update observer/param vector elements
155
156
157
158// ------------------------------------------------------------------------------------
159// Magnetometer Measurement Update Observer Vector Definitions
160// ------------------------------------------------------------------------------------
161
162constexpr uint32 MAG_EXPECTED_MAG_VEC_IDX = 0; // Index 0-2: mag field vector -- _B_tI__pI [nT]
163constexpr uint32 MAG_ALIGNMENT_QUAT_IDX = 3; // Index 3-6: quaternion -- _MAG_B [unitless]
164
165constexpr uint32 MAG_OBSERVER_SIZE = 3; // Total magnetometer update observer/param vector elements
171
172
173
174// ------------------------------------------------------------------------------------
175// GPS Measurement Update Observer Vector Definitions
176// ------------------------------------------------------------------------------------
177
178constexpr uint32 GPS_REFERENCE_FRAME_QUAT_IDX = 0; // Index 0-3: quaternion -- _pI_REF [unitless]
179
180constexpr uint32 GPS_OBSERVER_SIZE = 4; // Total GPS update observer/param vector elements
185
186
187
188// ------------------------------------------------------------------------------------
189// Process Noise Vector Definitions
190// ------------------------------------------------------------------------------------
191
192constexpr uint32 PROCESS_NOISE_POS_IDX = 0; // Index 0–2: position std -- _B_pI__pI [m*sqrt(Hz)]
193constexpr uint32 PROCESS_NOISE_VEL_IDX = 3; // Index 3–5: velocity std -- _B_pI__pI [m/s*sqrt(Hz)]
194constexpr uint32 PROCESS_NOISE_QUAT_IDX = 6; // Index 6–9: quaternion std -- _B_pI [sqrt(Hz)]
195constexpr uint32 PROCESS_NOISE_GYRO_BIAS_IDX = 10; // Index 10–12: gyro bias std -- _B_pI__B [rad/s*sqrt(Hz)]
196constexpr uint32 PROCESS_NOISE_ACCEL_BIAS_IDX = 13; // Index 13–15: accel bias std -- _B_pI__B [m/s^2*sqrt(Hz)]
197
198constexpr uint32 PROCESS_NOISE_SIZE = 16; // Total process noise vector elements
207
208
209
210// ------------------------------------------------------------------------------------
211// Sun Sensor Measurement Noise Vector Definitions
212// ------------------------------------------------------------------------------------
213
214constexpr uint32 SUN_NOISE_SUN_VEC_IDX = 0; // Index 0-2: sun pointing vector std -- _B_tI__SUN [unitless]
215
216constexpr uint32 SUN_NOISE_SIZE = 3; // Total sun sensor measurement noise vector elements
221
222
223
224// ------------------------------------------------------------------------------------
225// Magnetometer Measurement Noise Vector Definitions
226// ------------------------------------------------------------------------------------
227
228constexpr uint32 MAG_NOISE_MAG_VEC_IDX = 0; // Index 0-2: mag field vector std -- _B_tI__MAG [nT]
229
230constexpr uint32 MAG_NOISE_SIZE = 3; // Total magnetometer measurement noise vector elements
235
236
237
238// ------------------------------------------------------------------------------------
239// GPS Measurement Noise Vector Definitions
240// ------------------------------------------------------------------------------------
241
242constexpr uint32 GPS_NOISE_POS_IDX = 0; // Index 0-2: GPS position vector std -- _GPS_tI__REF [m]
243
244constexpr uint32 GPS_NOISE_SIZE = 3; // Total gps measurement noise vector elements
249
250
251
252// ------------------------------------------------------------------------------------
253// Sun Sensor Measurement Vector Definitions
254// ------------------------------------------------------------------------------------
255
256constexpr uint32 SUN_MEAS_SUN_VEC_IDX = 0; // Index 0-2: sun pointing vector -- _B_tI__B [unitless]
257
258constexpr uint32 SUN_MEAS_SIZE = 3; // Total sun sensor measurement vector elements
263
264
265
266// ------------------------------------------------------------------------------------
267// Magnetometer Measurement Vector Definitions
268// ------------------------------------------------------------------------------------
269
270constexpr uint32 MAG_MEAS_MAG_VEC_IDX = 0; // Index 0-2: mag field vector -- _B_tI__B [nT]
271
272constexpr uint32 MAG_MEAS_SIZE = 3; // Total magnetometer measurement vector elements
277
278
279
280// ------------------------------------------------------------------------------------
281// GPS Measurement Vector Definitions //todo
282// ------------------------------------------------------------------------------------
283
284constexpr uint32 GPS_MEAS_POS_IDX = 0; // Index 0-2: Position vector -- _B_pI__pI [m]
285
286constexpr uint32 GPS_MEAS_SIZE = 3; // Total GPS measurement vector elements
291
292
293
294// ------------------------------------------------------------------------------------
295// Typedefs
296// ------------------------------------------------------------------------------------
297
298using StateVector = std::array<floating_point, STATE_SIZE>;
300using PropagateObsVector = std::array<floating_point, PROPAGATE_OBSERVER_SIZE>;
301using SunObsVector = std::array<floating_point, SUN_OBSERVER_SIZE>;
302using SunMeasVector = std::array<floating_point, SUN_MEAS_SIZE>;
303using MagObsVector = std::array<floating_point, MAG_OBSERVER_SIZE>;
304using MagMeasVector = std::array<floating_point, MAG_MEAS_SIZE>;
305using GpsObsVector = std::array<floating_point, GPS_OBSERVER_SIZE>;
306using GpsMeasVector = std::array<floating_point, GPS_MEAS_SIZE>;
307
308} // namespace inertial_nav
309
310#endif
Matrix math implementation.
Definition Matrix.hpp:55
Definition InertialNavigationDefinition.hpp:24
constexpr uint32 PROPAGATE_ACCEL_MEAS_IDX
Definition InertialNavigationDefinition.hpp:128
std::array< floating_point, SUN_MEAS_SIZE > SunMeasVector
Definition InertialNavigationDefinition.hpp:302
constexpr uint32 PROCESS_NOISE_VEL_IDX
Definition InertialNavigationDefinition.hpp:193
constexpr uint32 MAG_NOISE_MAG_VEC_IDX
Definition InertialNavigationDefinition.hpp:228
std::array< floating_point, MAG_MEAS_SIZE > MagMeasVector
Definition InertialNavigationDefinition.hpp:304
constexpr uint32 SUN_MEAS_SUN_VEC_IDX
Definition InertialNavigationDefinition.hpp:256
std::array< floating_point, STATE_SIZE > StateVector
Definition InertialNavigationDefinition.hpp:298
constexpr uint32 PROPAGATE_PI_POS_IDX
Definition InertialNavigationDefinition.hpp:129
std::array< floating_point, MAG_OBSERVER_SIZE > MagObsVector
Definition InertialNavigationDefinition.hpp:303
std::array< floating_point, GPS_MEAS_SIZE > GpsMeasVector
Definition InertialNavigationDefinition.hpp:306
constexpr uint32 STATE_SIZE
Definition InertialNavigationDefinition.hpp:98
clockwerk::Matrix< STATE_SIZE, STATE_SIZE > CovarianceMatrix
Definition InertialNavigationDefinition.hpp:299
constexpr uint32 SUN_OBSERVER_SIZE
Definition InertialNavigationDefinition.hpp:149
constexpr uint32 STATE_ACCEL_BIAS_IDX
Definition InertialNavigationDefinition.hpp:96
constexpr uint32 MAG_MEAS_MAG_VEC_IDX
Definition InertialNavigationDefinition.hpp:270
constexpr uint32 STATE_QUAT_IDX
Definition InertialNavigationDefinition.hpp:94
constexpr uint32 PROCESS_NOISE_POS_IDX
Definition InertialNavigationDefinition.hpp:192
std::array< floating_point, SUN_OBSERVER_SIZE > SunObsVector
Definition InertialNavigationDefinition.hpp:301
std::array< floating_point, PROPAGATE_OBSERVER_SIZE > PropagateObsVector
Definition InertialNavigationDefinition.hpp:300
constexpr uint32 PROPAGATE_OBSERVER_SIZE
Definition InertialNavigationDefinition.hpp:131
constexpr uint32 MAG_OBSERVER_SIZE
Definition InertialNavigationDefinition.hpp:165
constexpr uint32 STATE_POS_IDX
Definition InertialNavigationDefinition.hpp:92
constexpr uint32 GPS_REFERENCE_FRAME_QUAT_IDX
Definition InertialNavigationDefinition.hpp:178
constexpr uint32 SUN_NOISE_SUN_VEC_IDX
Definition InertialNavigationDefinition.hpp:214
constexpr uint32 GPS_NOISE_POS_IDX
Definition InertialNavigationDefinition.hpp:242
constexpr uint32 STATE_VEL_IDX
Definition InertialNavigationDefinition.hpp:93
constexpr uint32 SUN_MEAS_SIZE
Definition InertialNavigationDefinition.hpp:258
constexpr uint32 SUN_EXPECTED_SUN_VEC_IDX
Definition InertialNavigationDefinition.hpp:146
constexpr uint32 STATE_GYRO_BIAS_IDX
Definition InertialNavigationDefinition.hpp:95
constexpr uint32 MAG_EXPECTED_MAG_VEC_IDX
Definition InertialNavigationDefinition.hpp:162
constexpr uint32 MAG_ALIGNMENT_QUAT_IDX
Definition InertialNavigationDefinition.hpp:163
constexpr uint32 GPS_NOISE_SIZE
Definition InertialNavigationDefinition.hpp:244
constexpr uint32 PROPAGATE_GYRO_MEAS_IDX
Definition InertialNavigationDefinition.hpp:127
constexpr uint32 GPS_MEAS_SIZE
Definition InertialNavigationDefinition.hpp:286
constexpr uint32 SUN_ALIGNMENT_QUAT_IDX
Definition InertialNavigationDefinition.hpp:147
constexpr uint32 PROPAGATE_GRAV_ACCEL_IDX
Definition InertialNavigationDefinition.hpp:126
constexpr uint32 PROCESS_NOISE_GYRO_BIAS_IDX
Definition InertialNavigationDefinition.hpp:195
constexpr uint32 PROCESS_NOISE_ACCEL_BIAS_IDX
Definition InertialNavigationDefinition.hpp:196
constexpr uint32 GPS_OBSERVER_SIZE
Definition InertialNavigationDefinition.hpp:180
constexpr uint32 PROCESS_NOISE_QUAT_IDX
Definition InertialNavigationDefinition.hpp:194
constexpr uint32 MAG_MEAS_SIZE
Definition InertialNavigationDefinition.hpp:272
constexpr uint32 GPS_MEAS_POS_IDX
Definition InertialNavigationDefinition.hpp:284
constexpr uint32 SUN_NOISE_SIZE
Definition InertialNavigationDefinition.hpp:216
std::array< floating_point, GPS_OBSERVER_SIZE > GpsObsVector
Definition InertialNavigationDefinition.hpp:305
constexpr uint32 MAG_NOISE_SIZE
Definition InertialNavigationDefinition.hpp:230
constexpr uint32 PROCESS_NOISE_SIZE
Definition InertialNavigationDefinition.hpp:198