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

GNC App for performing the propagation step of an EKF when an IMU is available to report the angular velocity and acceleration (without gravity). This app 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. More...

#include <DeadReckon.h>

Inheritance diagram for warpos::DeadReckon:

Classes

struct  Params
struct  Inputs
struct  Outputs

Public Member Functions

 DeadReckon (FlightExecutive &executive)
virtual ~DeadReckon ()
int16 activate () override
 Activate the app. The app will step when active.
int16 deactivate () override
 Deactivate the app. The app will not step when deactivated.
int16 command (uint16 apid, uint8 *buffer, uint16 size) override
 Process commands issued to the app.
int16 getLastValidMeasurement (clockwerk::CartesianVector< 3 > &gyroMeas_IMU_tI__IMU, clockwerk::CartesianVector< 3 > &accelMeas_IMU_tI__IMU, floating_point &time_stamp)
 Getter function to see the internally stored last valid measurement.
Public Member Functions inherited from warpos::App
 App (FlightExecutive &executive, const char *name, uint16 apid, uint8 instance=0)
 Executive-based constructor for the task.
virtual ~App ()
 Destructor. Doesn't really do anything.
int16 startup ()
 Initialize the app. Should be called once before step.
int16 step ()
 Step the app by a single step. Maps params, inputs, etc. to outputs.
log_level_e logLevel ()
 Get the log level set for the executive.
void logLevel (log_level_e log_level)
 Set the executive log level.
bool isStarted ()
 Return whether task startup has been run.
uint16 apid ()
 Get the apid for this app.
uint8 & instance ()
 Get the instance of this app (used to differentiate between multiple instances of the same app).
Public Member Functions inherited from clockwerk::GraphTreeObject
 GraphTreeObject (const char *gt_nme="", GraphTreeObject **storage_array=nullptr, uint32 storage_size=0)
 Name-based constructor for GraphTreeObject which will have no children by default.
virtual ~GraphTreeObject ()
 Destructor.
GraphTreeObjectparent ()
 Functions to get object's parent/children.
GraphTreeObject ** children ()
GraphTreeObjectchildAtIndex (uint8 i) const
int16 parent (GraphTreeObject *new_parent)
 Function to assign the node's parent via pointer.
int16 parent (GraphTreeObject &new_parent)
 Function to assign the node's parent via reference.
uint8 nChildren () const
 Getters for number of children and descendants.
uint16 nDescendants () const
uint8 capacity () const
const char * name () const
 Getter and setter for object name.
int16 name (const char *new_name)
uint8 rank ()
 Getter for the object rank.
int8 type ()
 Function to indicate type – -1 by default unless implemented downstream.
bool loggable ()
 Getter for object logability flag – note no setter because should only be set by this or a derived class in its definition.
GraphTreeObjectgetRootDataPointer ()
 Get the pointer to the highest object in the graph tree.
virtual int16 str (char *output, size_t size) const
 Get object represented as string.
virtual int16 fromStr (const char *val)
 Set value of graphtreeobject from string.

Public Attributes

Params params = Params(this, "params")
Inputs inputs = Inputs(this, "inputs")
Outputs outputs = Outputs(this, "outputs")
Public Attributes inherited from warpos::App
clockwerk::DataIO< bool > active = clockwerk::DataIO<bool>(this, "active", true)
 The active flag for the task – set to true by default.

Protected Member Functions

int16 start () override
int16 execute () override
Protected Member Functions inherited from clockwerk::GraphTreeObject
int16 _setStorage (GraphTreeObject **storage_array, uint8 storage_size)
 Getter for object's string address.
void _recalculateDescendants ()
 Function to recursively re-calculate the number of descendants of a given node on the tree.
void _recalculateRank ()
 Function to recursively re-calculate the rank of a given node on the tree.
int16 _addChild (GraphTreeObject *child)
 Function to decompose a string into a series of substrings via indexing.
int16 _removeChild (GraphTreeObject *child)
 Function to remove a child from the graph node's children.

Protected Attributes

InertialNavigationDynamics _dynamics
 Reference variable to the internal Dynamics.
ForwardEulerIntegrator< INERTIAL_NAVIGATION_STATE_VECTOR_ELEMENTS+INERTIAL_NAVIGATION_STATE_VECTOR_ELEMENTS *INERTIAL_NAVIGATION_STATE_VECTOR_ELEMENTS_integrator
 Reference variable to the internal Integrator.
EkfTimeUpdate< INERTIAL_NAVIGATION_STATE_VECTOR_ELEMENTS_time_update
 Reference variable to the internal EkfTimeUpdate.
std::array< floating_point, 3 > _dummy3
 Dummy temporary array for swapping between std::array and clockwerk::CartesianVector.
std::array< floating_point, 4 > _dummy4
inertial_nav::PropagateObsVector _dummyObs
clockwerk::CartesianVector< 3 > _last_valid_gyro_meas
 Internally stored last valid measurement.
clockwerk::CartesianVector< 3 > _last_valid_accel_meas
floating_point _last_valid_meas_time_stamp
bool _valid_measurement_saved = false
 Boolean value to track if a valid measurement has been internally saved yet.
inertial_nav::StateVector _state_input_array
 Temporary variables for the array input/outputs passed into the EkfTimeUpdate object.
inertial_nav::StateVector _state_output_array
inertial_nav::PropagateObsVector _state_observer_array
clockwerk::CartesianVector< 3 > _gyroMeas_B_pI__B
 Internal variables for the transformed measurements.
clockwerk::CartesianVector< 3 > _accelMeas_B_pI__B
clockwerk::CartesianVector< 3 > _approximate_ang_accel = clockwerk::CartesianVector<3>({0.0, 0.0, 0.0})
 Internally saved approximated angular acceleration.
clockwerk::Quaternion _unit_quat
 Temporary variable for unitizing a quaternion.
tlm_gnc_inert_prop_state _tlm_a_priori_state
 Packet to hold state after propagation.
Protected Attributes inherited from warpos::App
FlightExecutiveexc
 Override our executive to include the FlightExecutive instead.
int16 _error = 0
 Internal variable to track and return error on app step through.
uint16 _apid = 0
 Internal variable to hold the APID for this app.
bool _is_started = false
 Flag indicating whether app has been started or not.
log_level_e _local_log_level = log_level_e::LOG_WARNING
 The log level for this particular app.
GraphTreeObject_app_children [MAXIMUM_APP_CHILDREN]
 Local storage for App children so it can live on the graph tree.
uint8 _instance
 Instance number of this app. Used to differentiate between multiple instances of the same app.
Protected Attributes inherited from clockwerk::GraphTreeObject
GraphTreeObject_parent = nullptr
GraphTreeObject ** _children_ptr = nullptr
uint32 _max_num_children = 0
uint16 _num_descendants = 0
char _name [MAXIMUM_NAME_CHARS] = ""
 String name for object.
uint8 _num_children = 0
 Number of direct children of the tree (not including the tree itself).
uint8 _rank = 0
int8 _graph_tree_type = BASE_GRAPH_TREE
 Variable to store graph tree object type.
bool _loggable = false
 Variable to indicate whether the selected object is loggable. Set to false by default.
uint32 _index = 0
 Index pointing to the next write location for the graph tree children.

Detailed Description

GNC App for performing the propagation step of an EKF when an IMU is available to report the angular velocity and acceleration (without gravity). This app 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.

Author: James Tabony james.nosp@m..tab.nosp@m.ony@a.nosp@m.ttx..nosp@m.tech

Constructor & Destructor Documentation

◆ DeadReckon()

warpos::DeadReckon::DeadReckon ( FlightExecutive & executive)

◆ ~DeadReckon()

virtual warpos::DeadReckon::~DeadReckon ( )
inlinevirtual

Member Function Documentation

◆ activate()

int16 warpos::DeadReckon::activate ( )
overridevirtual

Activate the app. The app will step when active.

Returns
Flag indicating success/failure

Reimplemented from warpos::App.

◆ command()

int16 warpos::DeadReckon::command ( uint16 apid,
uint8 * buffer,
uint16 size )
overridevirtual

Process commands issued to the app.

Parameters
apidThe APID of the command sent
bufferPointer to the location of the buffer holding the command
sizeThe size of the command being sent
Returns
Flag indicating success/failure

Reimplemented from warpos::App.

◆ deactivate()

int16 warpos::DeadReckon::deactivate ( )
overridevirtual

Deactivate the app. The app will not step when deactivated.

Returns
Flag indicating success/failure

Reimplemented from warpos::App.

◆ execute()

int16 warpos::DeadReckon::execute ( )
overrideprotectedvirtual

Reimplemented from warpos::App.

◆ getLastValidMeasurement()

int16 warpos::DeadReckon::getLastValidMeasurement ( clockwerk::CartesianVector< 3 > & gyroMeas_IMU_tI__IMU,
clockwerk::CartesianVector< 3 > & accelMeas_IMU_tI__IMU,
floating_point & time_stamp )

Getter function to see the internally stored last valid measurement.

Parameters
[out]gyroMeas_IMU_tI__IMUGyroscope measurement
[out]accelMeas_IMU_tI__IMUAccelerometer measurement
[out]time_stampTime stamp of the measurement
Returns
Flag indicating success/failure

◆ start()

int16 warpos::DeadReckon::start ( )
overrideprotectedvirtual

Reimplemented from warpos::App.

Member Data Documentation

◆ _accelMeas_B_pI__B

clockwerk::CartesianVector<3> warpos::DeadReckon::_accelMeas_B_pI__B
protected

◆ _approximate_ang_accel

clockwerk::CartesianVector<3> warpos::DeadReckon::_approximate_ang_accel = clockwerk::CartesianVector<3>({0.0, 0.0, 0.0})
protected

Internally saved approximated angular acceleration.

◆ _dummy3

std::array<floating_point, 3> warpos::DeadReckon::_dummy3
protected

Dummy temporary array for swapping between std::array and clockwerk::CartesianVector.

◆ _dummy4

std::array<floating_point, 4> warpos::DeadReckon::_dummy4
protected

◆ _dummyObs

inertial_nav::PropagateObsVector warpos::DeadReckon::_dummyObs
protected

◆ _dynamics

InertialNavigationDynamics warpos::DeadReckon::_dynamics
protected

Reference variable to the internal Dynamics.

◆ _gyroMeas_B_pI__B

clockwerk::CartesianVector<3> warpos::DeadReckon::_gyroMeas_B_pI__B
protected

Internal variables for the transformed measurements.

◆ _integrator

◆ _last_valid_accel_meas

clockwerk::CartesianVector<3> warpos::DeadReckon::_last_valid_accel_meas
protected

◆ _last_valid_gyro_meas

clockwerk::CartesianVector<3> warpos::DeadReckon::_last_valid_gyro_meas
protected

Internally stored last valid measurement.

◆ _last_valid_meas_time_stamp

floating_point warpos::DeadReckon::_last_valid_meas_time_stamp
protected

◆ _state_input_array

inertial_nav::StateVector warpos::DeadReckon::_state_input_array
protected

Temporary variables for the array input/outputs passed into the EkfTimeUpdate object.

◆ _state_observer_array

inertial_nav::PropagateObsVector warpos::DeadReckon::_state_observer_array
protected

◆ _state_output_array

inertial_nav::StateVector warpos::DeadReckon::_state_output_array
protected

◆ _time_update

EkfTimeUpdate<INERTIAL_NAVIGATION_STATE_VECTOR_ELEMENTS> warpos::DeadReckon::_time_update
protected

Reference variable to the internal EkfTimeUpdate.

◆ _tlm_a_priori_state

tlm_gnc_inert_prop_state warpos::DeadReckon::_tlm_a_priori_state
protected

Packet to hold state after propagation.

◆ _unit_quat

clockwerk::Quaternion warpos::DeadReckon::_unit_quat
protected

Temporary variable for unitizing a quaternion.

◆ _valid_measurement_saved

bool warpos::DeadReckon::_valid_measurement_saved = false
protected

Boolean value to track if a valid measurement has been internally saved yet.

◆ inputs

Inputs warpos::DeadReckon::inputs = Inputs(this, "inputs")

◆ outputs

Outputs warpos::DeadReckon::outputs = Outputs(this, "outputs")

◆ params

Params warpos::DeadReckon::params = Params(this, "params")

The documentation for this class was generated from the following files:
  • /Users/mickey/Documents/Projects/warptwin/warpos/src/apps/gnc/InertialNavigationEKF/DeadReckon.h
  • /Users/mickey/Documents/Projects/warptwin/warpos/src/apps/gnc/InertialNavigationEKF/DeadReckon.cpp