diff --git a/src/examples/test_imu_constraintAHP.cpp b/src/examples/test_imu_constraintAHP.cpp index 127b096b398f4f1642845755b6991c5b1ed721e5..1b44ec96636e14b79da50e277a5fcf5461333e8f 100644 --- a/src/examples/test_imu_constraintAHP.cpp +++ b/src/examples/test_imu_constraintAHP.cpp @@ -44,7 +44,7 @@ int main(int argc, char** argv) data_file.open(filename); std::cout << "file: " << filename << std::endl; - //std::string dummy; //this is needed only first line is headers + //std::string dummy; //this is needed only if first line is headers //getline(data_file, dummy); } @@ -72,15 +72,35 @@ int main(int argc, char** argv) x0 << 0,0,0, 0,0,0, 0,0,0,1, 0,0,.001, 0,0,.002; // Try some non-zero biases wolf_problem_ptr_->getProcessorMotionPtr()->setOrigin(x0, t); + //create a keyframe at origin + TimeStamp ts = wolf_problem_ptr_->getProcessorMotionPtr()->getBuffer().get().back().ts_; + Eigen::VectorXs state_vec = x0; + FrameBasePtr last_frame = std::make_shared<FrameIMU>(KEY_FRAME, ts, state_vec); + wolf_problem_ptr_->getTrajectoryPtr()->addFrame(last_frame); + // Create one capture to store the IMU data arriving from (sensor / callback / file / etc.) CaptureIMU::Ptr imu_ptr( std::make_shared<CaptureIMU>(t, sensor_ptr, data_) ); // main loop using namespace std; clock_t begin = clock(); - std::cout << "\n\t\t\t\tENTERING MAIN LOOP - Please press ENTER to exit loop\n" << std::endl; + const int keyframe_spacing = 10; + int last_keyframe_dt = 0; while(!data_file.eof()){ + if(last_keyframe_dt >= keyframe_spacing){ + ts = wolf_problem_ptr_->getProcessorMotionPtr()->getBuffer().get().back().ts_; + state_vec = wolf_problem_ptr_->getProcessorMotionPtr()->getCurrentState(); + + last_frame = std::make_shared<FrameIMU>(KEY_FRAME, ts, state_vec); + //FrameBasePtr last_frame = std::make_shared<FrameIMU>(KEY_FRAME, ts_.get(),std::make_shared<StateBlock>(frame_val.head(3)), std::make_shared<StateQuaternion>(frame_val.tail(4))); + wolf_problem_ptr_->getTrajectoryPtr()->addFrame(last_frame); + + last_keyframe_dt = 0; + } + else + last_keyframe_dt++; + // read new data data_file >> mpu_clock >> data_[0] >> data_[1] >> data_[2] >> data_[3] >> data_[4] >> data_[5]; t.set(mpu_clock); // @@ -93,6 +113,13 @@ int main(int argc, char** argv) sensor_ptr->process(imu_ptr); } + //make final a keyframe + ts = wolf_problem_ptr_->getProcessorMotionPtr()->getBuffer().get().back().ts_; + state_vec = wolf_problem_ptr_->getProcessorMotionPtr()->getCurrentState(); + FrameBasePtr last_frame = std::make_shared<FrameIMU>(KEY_FRAME, ts, state_vec); + wolf_problem_ptr_->getTrajectoryPtr()->addFrame(last_frame); + + clock_t end = clock(); double elapsed_secs = double(end - begin) / CLOCKS_PER_SEC;