lsd:optimizationThreadLoop线程
来源:互联网 发布:mac系统重装 编辑:程序博客网 时间:2024/06/05 00:54
while(keepRunning) { boost::unique_lock<boost::mutex> lock(newConstraintMutex); if(!newConstraintAdded) //等待新的一致性newConstraintCreatedSignal.timed_wait(lock,boost::posix_time::milliseconds(2000));// slight chance of deadlock otherwise newConstraintAdded = false; lock.unlock(); //跑数据集跑完后,做个最终优化 if(doFinalOptimization) { printf("doing final optimization iteration!\n"); optimizationIteration(50, 0.001); doFinalOptimization = false; } //循环优化 while(optimizationIteration(5, 0.02)); }
进入optimizationIteration函数:
// 添加节点和边 keyFrameGraph->addElementsFromBuffer(); newConstraintMutex.unlock(); // Do the optimization. This can take quite some time!优化5次 int its = keyFrameGraph->optimize(itsPerTry); // save the optimization result. poseConsistencyMutex.lock_shared(); keyFrameGraph->keyframesAllMutex.lock_shared(); float maxChange = 0; float sumChange = 0; float sum = 0; for(size_t i=0;i<keyFrameGraph->keyframesAll.size(); i++) { // set edge error sum to zero keyFrameGraph->keyframesAll[i]->edgeErrorSum = 0; keyFrameGraph->keyframesAll[i]->edgesNum = 0; if(!keyFrameGraph->keyframesAll[i]->pose->isInGraph) continue; // get change from last optimization Sim3 a = keyFrameGraph->keyframesAll[i]->pose->graphVertex->estimate(); Sim3 b = keyFrameGraph->keyframesAll[i]->getScaledCamToWorld(); Sophus::Vector7f diff = (a*b.inverse()).log().cast<float>(); for(int j=0;j<7;j++) { float d = fabsf((float)(diff[j])); if(d > maxChange) maxChange = d; sumChange += d; } sum +=7; // set change keyFrameGraph->keyframesAll[i]->pose->setPoseGraphOptResult( keyFrameGraph->keyframesAll[i]->pose->graphVertex->estimate()); // add error for(auto edge : keyFrameGraph->keyframesAll[i]->pose->graphVertex->edges()) { keyFrameGraph->keyframesAll[i]->edgeErrorSum += ((EdgeSim3*)(edge))->chi2(); keyFrameGraph->keyframesAll[i]->edgesNum++; } } haveUnmergedOptimizationOffset = true;
0 0
- lsd:optimizationThreadLoop线程
- lsd:constraintSearchThreadLoop线程
- lsd:tracking
- LSD algoritm
- LSD-SLAM(2)关于tracking线程的目标函数的推导
- 算法:低位优先(LSD)
- 基数排序 radixsort(LSD)
- 基数排序之LSD
- 基数排序(LSD)
- LSD直线检测
- LSD-SLAM使用教程
- LSD-SLAM使用教程
- LSD-SLAM使用方法
- 基数排序之LSD
- LSD-FET430UIF仿真器问题
- LSD-SLAM 安装运行
- LSD 快速线检测
- lsd面试题
- javascript 中的 || 和 &&
- 按照左右半区的方式重新组合单链表----BAT实习内推笔试卷(第二场)
- 【swing】UIManager样式的处理(参数详解)
- Objective-C加密算法
- Implicit conversion of an Objective-C pointer to '__autoreleasing instancetype *' (aka '__autoreleas
- lsd:optimizationThreadLoop线程
- 高通mipi dsi代码理解
- Java 时间格式化,时间解析和时间计算的记录
- Educational Codeforces Round 16 E. Generate a String (dp)
- Android NDK编程
- 对ssh中struts、spring、hibernate分工的理解
- <1>黑电平
- 设计模式学习之路-策略模式
- 61. Rotate List