| 4489 | } |
| 4490 | |
| 4491 | int Optimizer::PoseInertialOptimizationLastKeyFrame(Frame *pFrame, bool bRecInit) |
| 4492 | { |
| 4493 | g2o::SparseOptimizer optimizer; |
| 4494 | g2o::BlockSolverX::LinearSolverType * linearSolver; |
| 4495 | |
| 4496 | linearSolver = new g2o::LinearSolverDense<g2o::BlockSolverX::PoseMatrixType>(); |
| 4497 | |
| 4498 | g2o::BlockSolverX * solver_ptr = new g2o::BlockSolverX(linearSolver); |
| 4499 | |
| 4500 | g2o::OptimizationAlgorithmGaussNewton* solver = new g2o::OptimizationAlgorithmGaussNewton(solver_ptr); |
| 4501 | optimizer.setVerbose(false); |
| 4502 | optimizer.setAlgorithm(solver); |
| 4503 | |
| 4504 | int nInitialMonoCorrespondences=0; |
| 4505 | int nInitialStereoCorrespondences=0; |
| 4506 | int nInitialCorrespondences=0; |
| 4507 | |
| 4508 | // Set Frame vertex |
| 4509 | VertexPose* VP = new VertexPose(pFrame); |
| 4510 | VP->setId(0); |
| 4511 | VP->setFixed(false); |
| 4512 | optimizer.addVertex(VP); |
| 4513 | VertexVelocity* VV = new VertexVelocity(pFrame); |
| 4514 | VV->setId(1); |
| 4515 | VV->setFixed(false); |
| 4516 | optimizer.addVertex(VV); |
| 4517 | VertexGyroBias* VG = new VertexGyroBias(pFrame); |
| 4518 | VG->setId(2); |
| 4519 | VG->setFixed(false); |
| 4520 | optimizer.addVertex(VG); |
| 4521 | VertexAccBias* VA = new VertexAccBias(pFrame); |
| 4522 | VA->setId(3); |
| 4523 | VA->setFixed(false); |
| 4524 | optimizer.addVertex(VA); |
| 4525 | |
| 4526 | // Set MapPoint vertices |
| 4527 | const int N = pFrame->N; |
| 4528 | const int Nleft = pFrame->Nleft; |
| 4529 | const bool bRight = (Nleft!=-1); |
| 4530 | |
| 4531 | vector<EdgeMonoOnlyPose*> vpEdgesMono; |
| 4532 | vector<EdgeStereoOnlyPose*> vpEdgesStereo; |
| 4533 | vector<size_t> vnIndexEdgeMono; |
| 4534 | vector<size_t> vnIndexEdgeStereo; |
| 4535 | vpEdgesMono.reserve(N); |
| 4536 | vpEdgesStereo.reserve(N); |
| 4537 | vnIndexEdgeMono.reserve(N); |
| 4538 | vnIndexEdgeStereo.reserve(N); |
| 4539 | |
| 4540 | const float thHuberMono = sqrt(5.991); |
| 4541 | const float thHuberStereo = sqrt(7.815); |
| 4542 | |
| 4543 | { |
| 4544 | unique_lock<mutex> lock(MapPoint::mGlobalMutex); |
| 4545 | |
| 4546 | for(int i=0; i<N; i++) |
| 4547 | { |
| 4548 | MapPoint* pMP = pFrame->mvpMapPoints[i]; |
nothing calls this directly
no test coverage detected