![]() |
WarpTwin
Documentation for WarpTwin models and classes.
|
#include <InertialNavigationDynamics.h>

Public Member Functions | |
| int16 | calculateRates (floating_point time, const std::array< floating_point, INERTIAL_NAV_RATES_VECTOR_SIZE > &state, std::array< floating_point, INERTIAL_NAV_RATES_VECTOR_SIZE > &out_rates) override |
| Public Member Functions inherited from warpos::Rates< INERTIAL_NAV_RATES_VECTOR_SIZE > | |
| virtual int16 | calculateRates (floating_point time, const std::array< floating_point, N > &state, std::array< floating_point, N > &out_rates) |
| Function to calculate rates from current state of system. | |
Public Attributes | |
| clockwerk::CartesianVector< 3 > | imu_meas_accel__body |
| IMU Input States. These intput states should already be rotated into body/CG. | |
| clockwerk::CartesianVector< 3 > | imu_meas_ang_vel__body |
| clockwerk::CartesianVector< 3 > | gravity__pI |
| Gravity State. This is the average gravitational acceleration over the integrated time window. | |
The inertial navigation dynamics class is a specific implementation of the Rates.hpp class that is to be used in the propagation step of an EKF when an IMU is available to report the angular velocity and acceleration (without gravity). This class is an implementation if a strapdown IMU based dead-reckoning integration of an objects position, velocity, and attitude relative to some inertial frame (this frame can be pseudoinertial, use your best judgement). This form of propagation step is best used if there are significant external/internal forces other than gravity acting on the system, also forces that cannot be modeled easily as functions of the state vector. For the functions implemented in this class, the following format is expected of the required inputs:
time: floating_point -> Value does not matter and is not used tar_state: std::array of size INERTIAL_NAVIGATION_STATE_VECTOR_ELEMENTS = 16 -> Elements 0:2 - Position of the body frame with respect to the inertial frame resolved in the inertial frame -> Elements 3:5 - Velocity of the body frame with respect to the inertial frame resolved in the inertial frame -> Elements 6:9 - Orientation quaternion of the body frame with respect to the inertial frame (rotation from inertial to body) -> Elements 10:12 - Gyroscope bias of the body frame angular velocity with respect to the inertial frame angular velocity resolved in the body frame -> Elements 13:15 - Accelerometer bias of the body frame acceleration (minus gravity) with respect to the inertial frame acceleration (minus gravity) resolved in the body frame obs_state: std::array of size INERTIAL_NAVIGATION_OBSERVER_VECTOR_ELEMENTS = 12 -> Elements 0:2 - Acceleration of the body frame due to gravity resolved in the inertial frame -> Elements 3:5 - Biased angular velocity measurement transformed to be the angular velocity of the body frame relative to the inertial frame resolved in the body frame -> Elements 6:8 - Biased acceleration measurement transformed to be the acceleration of the body frame relative to the inertial frame resolved in the body frame -> Elements 9:11 - Position of the inertial frame with respect to the true inertial frame (primary bodies inertial frame used for gravitational potential) resolved in the inertial frame (not true inertial)
NOTE: The vector parts can be arranged in any order, this is decided in the constructor. The above format is described by the class default constructor
NOTE: The inertial frame does not need to be true inertial (e.g. J2000 or SCI), a psuodoinertial frame can be used but the quality of result will diminish. An example of this would be using a fixed NED frame or the ECEF frame as your "inertial" frame. If the propagation is short in total duration and there isn't great deviation from a starting position, then these assumptions may be valid enough for the required use of the EKF. NOTE: When inertial frame is stated, the pseudo-inertial frame is implied
Author: James Tabony james.nosp@m..tab.nosp@m.ony@a.nosp@m.ttx..nosp@m.tech
|
override |
| clockwerk::CartesianVector<3> warpos::InertialNavigationDynamics::gravity__pI |
Gravity State. This is the average gravitational acceleration over the integrated time window.
| clockwerk::CartesianVector<3> warpos::InertialNavigationDynamics::imu_meas_accel__body |
IMU Input States. These intput states should already be rotated into body/CG.
| clockwerk::CartesianVector<3> warpos::InertialNavigationDynamics::imu_meas_ang_vel__body |