Skip to content
Snippets Groups Projects
Commit daf3060a authored by Idril-Tadzio Geer Cousté's avatar Idril-Tadzio Geer Cousté
Browse files

more work on the test

parent 81e8e728
No related branches found
No related tags found
4 merge requests!39release after RAL,!38After 2nd RAL submission,!33Imu2d static initialization,!31Imu2d static initialization
......@@ -7,6 +7,6 @@ keyframe_vote:
voting_active: true
voting_aux_active: false
max_time_span: 1.0 # seconds
max_buff_length: 20000 # motion deltas
dist_traveled: 2.0 # meters
angle_turned: 0.2 # radians (1 rad approx 57 deg, approx 60 deg)
max_buff_length: 20000 # motion deltas
dist_traveled: 999 # meters
angle_turned: 999 # radians (1 rad approx 57 deg, approx 60 deg)
......@@ -16,8 +16,8 @@ class ProcessorImu2dStaticInitTest : public testing::Test
public: //These can be accessed in fixtures
wolf::ProblemPtr _problem_ptr;
wolf::SensorBasePtr sensor_ptr;
wolf::ProcessorMotionPtr processor_motion;
wolf::SensorBasePtr _sensor_ptr;
wolf::ProcessorMotionPtr _processor_motion;
wolf::TimeStamp t;
wolf::TimeStamp t0;
double mti_clock, tmp;
......@@ -28,7 +28,8 @@ class ProcessorImu2dStaticInitTest : public testing::Test
VectorComposite x0c; // initial state composite
VectorComposite s0c; // initial sigmas composite
std::shared_ptr<wolf::CaptureImu> C;
FrameBasePtr last_frame_;
FrameBasePtr _first_frame;
FrameBasePtr _last_frame;
SolverCeresPtr _solver;
//a new of this will be created for each new test
......@@ -45,9 +46,9 @@ class ProcessorImu2dStaticInitTest : public testing::Test
// Wolf problem
_problem_ptr = Problem::create("POV", 2);
Vector3d extrinsics = (Vector3d() << 0,0, 0).finished();
sensor_ptr = _problem_ptr->installSensor("SensorImu2d", "Main Imu", extrinsics, wolf_root + "/demos/sensor_imu2d.yaml");
_sensor_ptr = _problem_ptr->installSensor("SensorImu2d", "Main Imu", extrinsics, wolf_root + "/demos/sensor_imu2d.yaml");
ProcessorBasePtr processor_ptr = _problem_ptr->installProcessor("ProcessorImu2d", "Imu pre-integrator", "Main Imu", wolf_root + "/demos/imu2d_static_init.yaml");
processor_motion = std::static_pointer_cast<ProcessorMotion>(processor_ptr);
_processor_motion = std::static_pointer_cast<ProcessorMotion>(processor_ptr);
// Time and data variables
second_frame = false;
......@@ -56,10 +57,10 @@ class ProcessorImu2dStaticInitTest : public testing::Test
t = t0;
data = Vector6d::Random();
data_cov = Matrix6d::Identity();
last_frame_ = nullptr;
_last_frame = nullptr;
// Create one capture to store the Imu data arriving from (sensor / callback / file / etc.)
C = make_shared<CaptureImu>(t, sensor_ptr, data, data_cov, Vector3d::Zero());
C = make_shared<CaptureImu>(t, _sensor_ptr, data, data_cov, Vector3d::Zero());
// Create the solver
_solver = make_shared<SolverCeres>(_problem_ptr);
......@@ -189,66 +190,69 @@ TEST_F(ProcessorImu2dStaticInitTest, static)
x0c['V'] = Vector2d(0, 0);
data_cov *= 1e-3;
//dt = 0.3;
data << 1, 2, 3, 4, 5, 6;
//dt = 0.0001;
auto KF0 = _problem_ptr->setPriorFix(x0c, t0, dt/2);
processor_motion->setOrigin(KF0);
KF0->fix();
_processor_motion->setOrigin(KF0);
data = Vector6d::Random();
WOLF_INFO("Data is: \n", data);
int size = 3;
second_frame = false;
FrameBasePtr first_frame = nullptr;
_first_frame = nullptr;
int i = 1;
for(t = t0+dt; t <= t0 + 2 + dt/2; t+=dt){
for(t = t0+dt; t <= t0 + 5 + dt/2; t+=dt){
WOLF_INFO("Starting iteration ", i, " with timestamp ", t);
++i;
C = std::make_shared<CaptureImu>(t, sensor_ptr, data, data_cov, Vector3d::Zero());
C = std::make_shared<CaptureImu>(t, _sensor_ptr, data, data_cov, Vector3d::Zero());
WOLF_INFO("Created new Capture");
if(second_frame){
//ASSERT_MATRIX_APPROX(processor_motion->getState().vector("POV"), Vector5d::Zero(), 1e-9);
//ASSERT_MATRIX_APPROX(_processor_motion->getState().vector("POV"), Vector5d::Zero(), 1e-9);
}
WOLF_INFO("Processing capture");
C->process();
WOLF_INFO("Doing the static initialization stuff");
if (not last_frame_)
if (not _last_frame)
{
last_frame_ = processor_motion->getOrigin()->getFrame();
first_frame = last_frame_;
_last_frame = _processor_motion->getOrigin()->getFrame();
_first_frame = _last_frame;
// impose zero velocity
last_frame_->getV()->setZero();
last_frame_->getV()->fix();
_last_frame->getV()->setZero();
_last_frame->getV()->fix();
// impose zero odometry
//processor_motion_->setOdometry(sensor_ptr->getProblem()->stateZero(processor_motion_->getStateStructure()));
_processor_motion->setOdometry(_sensor_ptr->getProblem()->stateZero(_processor_motion->getStateStructure()));
}
else
{
assert(processor_motion->getOrigin() && "SubscriberImuEnableable::callback: nullptr origin");
assert(processor_motion->getOrigin()->getFrame() && "SubscriberImuEnableable::callback: nullptr origin frame");
assert(_processor_motion->getOrigin() && "SubscriberImuEnableable::callback: nullptr origin");
assert(_processor_motion->getOrigin()->getFrame() && "SubscriberImuEnableable::callback: nullptr origin frame");
// new frame
if (last_frame_ != processor_motion->getOrigin()->getFrame())
if (_last_frame != _processor_motion->getOrigin()->getFrame())
{
second_frame = true;
last_frame_ = processor_motion->getOrigin()->getFrame();
_last_frame = _processor_motion->getOrigin()->getFrame();
// impose zero velocity
last_frame_->getV()->setZero();
last_frame_->getV()->fix();
_last_frame->getV()->setZero();
_last_frame->getV()->fix();
// impose zero odometry
//processor_motion_->setOdometry(sensor_ptr->getProblem()->stateZero(processor_motion_->getStateStructure()));
_processor_motion->setOdometry(_sensor_ptr->getProblem()->stateZero(_processor_motion->getStateStructure()));
// add zero displacement and rotation capture & feature & factor with all previous frames
assert(sensor_ptr->getProblem());
assert(_sensor_ptr->getProblem());
Eigen::VectorXd zero_motion = Eigen::VectorXd::Zero(size);
for (auto frm_pair = sensor_ptr->getProblem()->getTrajectory()->begin();
frm_pair != sensor_ptr->getProblem()->getTrajectory()->end();
for (auto frm_pair = _sensor_ptr->getProblem()->getTrajectory()->begin();
frm_pair != _sensor_ptr->getProblem()->getTrajectory()->end();
frm_pair++)
{
if (frm_pair->second == last_frame_)
if (frm_pair->second == _last_frame)
break;
auto capture_zero = CaptureBase::emplace<CaptureVoid>(last_frame_, last_frame_->getTimeStamp(), nullptr);
auto capture_zero = CaptureBase::emplace<CaptureVoid>(_last_frame, _last_frame->getTimeStamp(), nullptr);
auto feature_zero = FeatureBase::emplace<FeatureBase>(capture_zero,
"FeatureZeroOdom",
zero_motion,
......@@ -265,20 +269,30 @@ TEST_F(ProcessorImu2dStaticInitTest, static)
}
}
WOLF_INFO("Static initialization done");
if(first_frame)
if(_first_frame)
{
WOLF_INFO("0 - The first frame is ", first_frame->id(), " and it's currently estimated bias is: \n", first_frame->getCaptureOf(sensor_ptr)->getStateBlock('I')->getState());
WOLF_INFO("its state vector is: \n", last_frame_->getStateVector());
WOLF_INFO("0 - The first frame is ", _first_frame->id(), " and it's currently estimated bias is: \n", _first_frame->getCaptureOf(_sensor_ptr)->getStateBlock('I')->getState());
WOLF_INFO("its state vector is: \n", _first_frame->getStateVector());
WOLF_INFO_COND(second_frame, "The second frame has been created");
WOLF_INFO("1 - The last (current) frame is: ", last_frame_->id(), " and it's state vector is: \n", last_frame_->getStateVector());
WOLF_INFO("2 - The current frame's estimated bias is: \n", last_frame_->getCaptureOf(sensor_ptr)->getStateBlock('I')->getState());
WOLF_INFO("3 - The current state is (from processor_motion): \n", processor_motion->getState().vector("POV"));
WOLF_INFO("1 - The last (current) frame is: ", _last_frame->id(), " and it's state vector is: \n", _last_frame->getStateVector());
WOLF_INFO("2 - The current frame's estimated bias is: \n", _last_frame->getCaptureOf(_sensor_ptr)->getStateBlock('I')->getState());
WOLF_INFO("3 - The current state is (from _processor_motion): \n", _processor_motion->getState().vector("POV"));
}
//WOLF_INFO("The current problem is:");
//_problem_ptr->print(4);
WOLF_INFO("Processing capture and solving... \n -----------------------------------------------------------------------------------");
C->process();
WOLF_INFO("The current problem is:");
_problem_ptr->print(4);
WOLF_INFO("Solving...");
std::string report = _solver->solve(SolverManager::ReportVerbosity::BRIEF);
WOLF_INFO("Solved");
if(_first_frame)
{
WOLF_INFO("4 - The first frame is ", _first_frame->id(), " and it's currently estimated bias is: \n", _first_frame->getCaptureOf(_sensor_ptr)->getStateBlock('I')->getState());
WOLF_INFO("its state vector is: \n", _first_frame->getStateVector());
WOLF_INFO_COND(second_frame, "The second frame has been created");
WOLF_INFO("5 - The last (current) frame is: ", _last_frame->id(), " and it's state vector is: \n", _last_frame->getStateVector());
WOLF_INFO("6 - The current frame's estimated bias is: \n", _last_frame->getCaptureOf(_sensor_ptr)->getStateBlock('I')->getState());
WOLF_INFO("7 - The current state is (from _processor_motion): \n", _processor_motion->getState().vector("POV"));
}
WOLF_INFO("------------------------------------------------------------------------\n");
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment