#include "ekf_logger.h" EkfLogger::EkfLogger(std::shared_ptr ekf): _ekf{ekf}, _ekf_wrapper(ekf) { } EkfLogger::~EkfLogger() {} void EkfLogger::setFilePath(std::string file_path) { _file_path = file_path; } void EkfLogger::writeStateToFile() { if(!_file_opened) { _file.open(_file_path); _file_opened = true; _file << "Timestamp"; if(_state_logging_enabled) { for(int i = 0; i < 24; i++) { _file << ",state[" << i << "]"; } } if(_variance_logging_enabled) { for(int i = 0; i < 24; i++) { _file << ",variance[" << i << "]"; } } _file << std::endl; } if (_file) { writeState(); } else { std::cerr << "Can not write to output file" << std::endl; std::exit(-1); } } void EkfLogger::writeState() { if(_state_logging_enabled) { uint64_t time = _ekf->get_imu_sample_delayed().time_us; _file << time; if(_state_logging_enabled) { matrix::Vector state = _ekf->getStateAtFusionHorizonAsVector(); for(int i = 0; i < 24; i++) { _file << "," << state(i); } } if(_variance_logging_enabled) { matrix::Vector variance = _ekf->covariances_diagonal(); for(int i = 0; i < 24; i++) { _file << "," << variance(i); } } _file << std::endl; } }