You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
78 lines
1.2 KiB
78 lines
1.2 KiB
5 years ago
|
#include "ekf_logger.h"
|
||
|
|
||
|
EkfLogger::EkfLogger(std::shared_ptr<Ekf> 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<float, 24> state = _ekf_wrapper.getState();
|
||
|
for(int i = 0; i < 24; i++)
|
||
|
{
|
||
|
_file << "," << state(i);
|
||
|
}
|
||
|
}
|
||
|
if(_variance_logging_enabled)
|
||
|
{
|
||
|
matrix::Vector<float, 24> variance = _ekf->covariances_diagonal();
|
||
|
for(int i = 0; i < 24; i++)
|
||
|
{
|
||
|
_file << "," << variance(i);
|
||
|
}
|
||
|
}
|
||
|
_file << std::endl;
|
||
|
}
|
||
|
}
|