Program Listing for File fusion.h
↰ Return to documentation for file (api/include/pntos/plugins/fusion.h)
#pragma once
#include <pntos/plugins/common.h>
#include <pntos/plugins/fusion_strategy.h>
#ifdef __cplusplus
extern "C" {
#endif
PNTOS_ASSUME_NONNULL_BEGIN
typedef struct PntosCommonFusionEngine {
PntosManagedMemory* memory;
PntosFusionType engine_type;
} PntosCommonFusionEngine;
typedef struct PntosCrossCovariances {
PntosManagedMemory* memory;
size_t num_covariances;
char** block_labels;
PntosMatrix** cross_covariances;
} PntosCrossCovariances;
typedef struct PntosStandardFusionEngine {
PntosCommonFusionEngine common;
void (*set_time)(struct PntosStandardFusionEngine* self, AspnTypeTimestamp time);
AspnTypeTimestamp (*get_time)(struct PntosStandardFusionEngine* self);
void (*set_strategy)(struct PntosStandardFusionEngine* self,
PntosStandardFusionStrategy* strategy);
PntosStandardFusionStrategy* PNTOS_NULLABLE (*get_strategy)(
struct PntosStandardFusionEngine* self);
size_t (*get_num_states)(struct PntosStandardFusionEngine* self);
PntosStringArray* PNTOS_NULLABLE (*get_state_block_labels)(
struct PntosStandardFusionEngine* self);
bool (*has_block)(struct PntosStandardFusionEngine* self, char* block_label);
void (*add_state_block)(struct PntosStandardFusionEngine* self,
PntosStandardStateBlock* block,
PntosEstimateWithCovariance* initial_estimate_covariance,
PntosCrossCovariances* PNTOS_NULLABLE cross_covariances);
PntosMatrix* PNTOS_NULLABLE (*get_state_block_estimate)(struct PntosStandardFusionEngine* self,
char* block_label);
PntosMatrix* PNTOS_NULLABLE (*get_state_block_covariance)(
struct PntosStandardFusionEngine* self, char* block_label);
PntosMatrix* PNTOS_NULLABLE (*get_state_block_cross_covariance)(
struct PntosStandardFusionEngine* self, char* block_label1, char* block_label2);
void (*set_state_block_estimate)(struct PntosStandardFusionEngine* self,
char* block_label,
PntosMatrix* estimate);
void (*set_state_block_covariance)(struct PntosStandardFusionEngine* self,
char* block_label,
PntosMatrix* covariance);
void (*set_state_block_cross_covariance)(struct PntosStandardFusionEngine* self,
char* block_label1,
char* block_label2,
PntosMatrix* covariance);
void (*remove_state_block)(struct PntosStandardFusionEngine* self, char* block_label);
PntosStringArray* PNTOS_NULLABLE (*get_virtual_state_block_target_labels)(
struct PntosStandardFusionEngine* self);
bool (*has_virtual_state_block)(struct PntosStandardFusionEngine* self, char* vsb_target_label);
void (*add_virtual_state_block)(struct PntosStandardFusionEngine* self,
PntosVirtualStateBlock* virtual_state_block);
void (*remove_virtual_state_block)(struct PntosStandardFusionEngine* self,
char* vsb_target_label);
PntosStringArray* PNTOS_NULLABLE (*get_measurement_processor_labels)(
struct PntosStandardFusionEngine* self);
bool (*has_processor)(struct PntosStandardFusionEngine* self, char* processor_label);
void (*add_measurement_processor)(struct PntosStandardFusionEngine* self,
PntosStandardMeasurementProcessor* processor);
void (*remove_measurement_processor)(struct PntosStandardFusionEngine* self,
char* processor_label);
void (*propagate)(struct PntosStandardFusionEngine* self, AspnTypeTimestamp time);
void (*update)(struct PntosStandardFusionEngine* self,
char* processor_label,
PntosMessage* message);
PntosEstimateWithCovariance* PNTOS_NULLABLE (*peek_ahead)(
struct PntosStandardFusionEngine* self,
AspnTypeTimestamp time,
char** block_labels,
size_t num_block_labels);
PntosEstimateWithCovariance* PNTOS_NULLABLE (*generate_x_and_p)(
struct PntosStandardFusionEngine* self, char** block_labels, size_t num_block_labels);
void (*give_state_block_aux_data)(struct PntosStandardFusionEngine* self,
char* block_label,
PntosMessageArray* aux);
void (*give_measurement_processor_aux_data)(struct PntosStandardFusionEngine* self,
char* processor_label,
PntosMessageArray* aux);
void (*give_virtual_state_block_aux_data)(struct PntosStandardFusionEngine* self,
char* target_label,
PntosMessageArray* aux);
struct PntosStandardFusionEngine* (*clone)(struct PntosStandardFusionEngine* self);
} PntosStandardFusionEngine;
typedef struct PntosFusionPlugin {
PntosCommonPlugin common;
bool (*is_fusion_type_supported)(struct PntosFusionPlugin* self, PntosFusionType type);
PntosCommonFusionEngine* PNTOS_NULLABLE (*new_fusion_engine)(struct PntosFusionPlugin* self,
PntosFusionType type);
} PntosFusionPlugin;
PNTOS_ASSUME_NONNULL_END
#ifdef __cplusplus
}
#endif