有了C++的腿,便有了SLAM的路

3D视觉工坊

共 1691字,需浏览 4分钟

 ·

2022-01-10 13:33


我等小白站在逐渐落成的SLAM大厦下,向上望去看到两朵乌云,一朵是算法数学,一朵是C++。用习大大的话讲这两方面就好比“车之双轮,鸟之双翼”,要学好SLAM并将来从事SLAM相关的工作,这两方面的能力缺一不可。

学习视觉SLAM相关的算法原理,相信大家都知道那就是去看高博的《视觉SLAM十四讲》,一步步公式推得明明白白,充分理解通过视觉方法解决定位和建图问题的原理。那么SLAM工程师的另一条腿——C++,要如何学好精通呢?

学习C++的书籍种类繁多并且每本书都内容充实,研究生期间几乎人手一本《C++ primer plus》,然鹅几乎都逃不过盖泡面垫显示器的下场。即使把这些厚实的书本都啃下来,却发现书中介绍的只是基础的语法,仅仅能够看懂示例代码。

而SLAM所需的C++水平,大抵要高于在书本上看到的那些示例代码。因为那些代码是作者用来向初学者介绍语法的,所以会尽量简单。而实际见到的代码往往结合了各种奇特的技巧,乍看起来会显得高深莫测。比方说你在书里看的是这样的:

int main ( int argc, char** argv ) {   vector<string> vec;  vec.push_back("abc");  for ( int i=0; i  {  // ...   }  return 0; }

然而实际的工程代码大概是这样的:

嵌套的模板类(g2o的块求解器)

g2o::BlockSolver< g2o::BlockSolverTraits<3,1> >::LinearSolverType* linearSolver = new g2o::LinearSolverDense3,1> >::PoseMatrixType>(); g2o::BlockSolver< g2o::BlockSolverTraits<3,1> >* solver_ptr = new g2o::BlockSolver< g2o::BlockSolverTraits<3,1> >( linearSolver );    g2o::OptimizationAlgorithmLevenberg* solver = new g2o::OptimizationAlgorithmLevenberg( solver_ptr );g2o::SparseOptimizer optimizer;   optimizer.setAlgorithm( solver );


C11新特性(来自SVO特征提取部分)

void Frame::setKeyPoints(){  for(size_t i = 0; i < 5; ++i)    if(key_pts_[i] != NULL)      if(key_pts_[i]->point == NULL)        key_pts_[i] = NULL;
std::for_each(fts_.begin(), fts_.end(), [&](Feature* ftr){ if(ftr->point != NULL) checkKeyPoints(ftr); });}


高博看了都觉得头大:

SLAM算法的工程实现之所以选择C++,在于其有很高的运行效率的优势。但我们学到的C++语法和工程中实际应用到的语句存在很明显的断层,那该如何消除这种断层呢?

基于此,为大家推荐美国微软高级工程师——李伟主讲的《C++基础与深度解析》课程,这门课程旨在讨论C++的基础知识,重点讲解C++的基本语法及语法背后的底层细节,比如同样是for循环,如何尽可能的提升其执行效率。同时课程内容也会适时融入工程经验,为后续进一步学习与使用C++打下牢固的基础。

深蓝学院课程导师还会学习C++课程,可见C++基础有多么重要。C++“这条腿”深蓝学院帮你接上

课程大纲

课程收获

1.跟大佬在同一“空间”学习。伙伴们大多来自985/211,及国内知名企业。

2.结合汇编语言理解C++底层细节,超高效应用。

3.优秀学员有机会获得企业内推。
咨询更多

备注工坊才会通过好友哦~

扫码咨询更多

↓↓↓


浏览 25
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报