WarpTwin
Documentation for WarpTwin models and classes.
Loading...
Searching...
No Matches
warpos::InertialNavigationDynamics Class Reference

#include <InertialNavigationDynamics.h>

Inheritance diagram for warpos::InertialNavigationDynamics:

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.

Detailed Description

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

Member Function Documentation

◆ calculateRates()

int16 warpos::InertialNavigationDynamics::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

Member Data Documentation

◆ gravity__pI

clockwerk::CartesianVector<3> warpos::InertialNavigationDynamics::gravity__pI

Gravity State. This is the average gravitational acceleration over the integrated time window.

◆ imu_meas_accel__body

clockwerk::CartesianVector<3> warpos::InertialNavigationDynamics::imu_meas_accel__body

IMU Input States. These intput states should already be rotated into body/CG.

◆ imu_meas_ang_vel__body

clockwerk::CartesianVector<3> warpos::InertialNavigationDynamics::imu_meas_ang_vel__body

The documentation for this class was generated from the following files: