.. _program_listing_file_api_include_pntos_plugins_inertial.h: Program Listing for File inertial.h =================================== |exhale_lsh| :ref:`Return to documentation for file ` (``api/include/pntos/plugins/inertial.h``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp #pragma once #include #include #include #ifdef __cplusplus extern "C" { #endif PNTOS_ASSUME_NONNULL_BEGIN typedef enum PntosInertialFrame { PNTOS_INERTIAL_FRAME_NED } PntosInertialFrame; typedef struct PntosInertialForcesRates { PntosManagedMemory* memory; AspnMeasurementImu* forces_and_rates; PntosInertialFrame frame; } PntosInertialForcesRates; typedef struct PntosStandardInertialErrors { PntosManagedMemory* memory; double accel_biases[3]; double gyro_biases[3]; double accel_scale_factors[3]; double gyro_scale_factors[3]; /* TODO: more terms? Possibly sensor misalignment angles?*/ } PntosStandardInertialErrors; typedef enum PntosInertialSolutionRangeType { PNTOS_INERTIAL_BEST_KNOWN_SOLUTION, PNTOS_INERTIAL_NO_UPDATES_WITHIN_RANGE } PntosInertialSolutionRangeType; typedef enum PntosInertialType { PNTOS_STANDARD_INERTIAL_MECHANIZATION, PNTOS_EXTERNAL_INERTIAL, PNTOS_NON_ORTHOGONAL_INERTIAL_MECHANIZATION } PntosInertialType; typedef struct PntosCommonInertial { PntosManagedMemory* memory; PntosInertialType inertial_type; PntosMessageType (*request_solution_message_type)(struct PntosCommonInertial* self); PntosMessage* (*request_current_solution)(struct PntosCommonInertial* self); PntosMessage* PNTOS_NULLABLE (*request_solution)(struct PntosCommonInertial* self, AspnTypeTimestamp time); PntosMessageArray* PNTOS_NULLABLE (*request_solutions)(struct PntosCommonInertial* self, AspnTypeTimestamp* times, size_t num_times, PntosInertialSolutionRangeType type); bool (*is_time_in_range)(struct PntosCommonInertial* self, AspnTypeTimestamp time); AspnTypeTimestamp (*request_earliest_time)(struct PntosCommonInertial* self); AspnTypeTimestamp (*request_latest_time)(struct PntosCommonInertial* self); PntosMessageTypeArray* (*request_process_pntos_message_types)(struct PntosCommonInertial* self); void (*process_pntos_message)(struct PntosCommonInertial* self, PntosMessage* message); PntosInertialForcesRates* PNTOS_NULLABLE (*request_forces_and_rates)( struct PntosCommonInertial* self, AspnTypeTimestamp time); PntosInertialForcesRates* PNTOS_NULLABLE (*request_average_forces_and_rates)( struct PntosCommonInertial* self, AspnTypeTimestamp time1, AspnTypeTimestamp time2); } PntosCommonInertial; typedef PntosCommonInertial PntosExternalInertial; typedef struct PntosStandardInertialMechanization { PntosCommonInertial common; PntosMessageTypeArray* PNTOS_NULLABLE (*request_reset_message_types)( struct PntosStandardInertialMechanization* self); void (*reset_solution)(struct PntosStandardInertialMechanization* self, PntosMessage* message); void (*correct_sensor_errors)(struct PntosStandardInertialMechanization* self, AspnTypeTimestamp time, PntosStandardInertialErrors* errors); PntosStandardInertialErrors* PNTOS_NULLABLE (*request_sensor_errors)( struct PntosStandardInertialMechanization* self, AspnTypeTimestamp time); } PntosStandardInertialMechanization; typedef struct PntosInertialPlugin { PntosCommonPlugin common; bool (*is_inertial_type_supported)(struct PntosInertialPlugin* self, PntosInertialType type); PntosCommonInertial* PNTOS_NULLABLE (*new_inertial)(struct PntosInertialPlugin* self, PntosInertialType type, PntosMessage* solution, char* PNTOS_NULLABLE config_group); } PntosInertialPlugin; #ifdef __cplusplus } #endif PNTOS_ASSUME_NONNULL_END