《视觉SLAM十四讲》ch13/第十三章 视觉里程计 实践章节学习详解

我是在参考这篇博文(重读《视觉SLAM十四讲》)的基础上进行了总结(原文总结的很好了,我是在其基础上自己又重新看了整理了),仅供学习交流,如有错漏欢迎交流呀。

1 整体流程图:

《视觉SLAM十四讲》ch13/第十三章 视觉里程计 实践章节学习详解_第1张图片

                                                                 图1.1 算法流程图

在这里插入图片描述

 

                                                                图1.2 算法框架图

                                                              图1.3 数据组织结构图 

后面这两个图,看完程序再看的话就明了了,我最开始看的时候属于是一脸懵的状态哈哈哈哈

 

2 涉及到的C++进阶知识点

主要整理了下面这些:更详细的可以看我上面提到的文章。

1. 多线程及线程锁问题

2. 设计模式(简单工厂模式/工厂模式等)

3. 智能指针std::shared_ptr 和 std::weak_ptr

ps:个人建议,要是主要是读这个工程的话,上面的知识了解一点就好,不用深究。

3 工程结构:

ps: 按照我这样整理一下,我觉得肯定能理解框架了。具体的实现需要更仔细的去看源码。

 

《视觉SLAM十四讲》ch13/第十三章 视觉里程计 实践章节学习详解_第2张图片

(该图引用自 重读《视觉SLAM十四讲》ch13实践设计SLAM系统 - 知乎)

两个图结合代码来看,对于我这样的新手或许要舒适一些,哈哈哈

4 总结

4.1 Cmake文件书写

4.1.1 合理建立工程文件夹

该工程的文件目录如下图所示:

《视觉SLAM十四讲》ch13/第十三章 视觉里程计 实践章节学习详解_第3张图片

各个文件夹的作用如下:

app:存放run_kitti_stereo.cpp文件,主函数在其中

bin:用于存放生成的可执行二进制文件

build: 是我自己添加的存放编译中间过程文件

cmake_modules: 存放编译需要用到的依赖库的Findxxxx.cmake文件

config: 用于存放配置文件,配置文件包含了相机内参及数据路径等

include/myslam: 用于存放头文件

lib: 用于存放编译生成的库文件

src:用于存放实现功能的cpp文件

test:用于存放测试文件(测试用的cpp及其cmake文件)

4.1.2 多文件夹工程的CMake书写

我们从根目录的CMakeLists.txt文件夹看起:

《视觉SLAM十四讲》ch13/第十三章 视觉里程计 实践章节学习详解_第4张图片《视觉SLAM十四讲》ch13/第十三章 视觉里程计 实践章节学习详解_第5张图片

中间的findpackage并添加头文件目录的过程这里省略了 

下面是src/CMakeLists.txt

《视觉SLAM十四讲》ch13/第十三章 视觉里程计 实践章节学习详解_第6张图片

app/CMakeLists.txt 

add_executable(run_kitti_stereo run_kitti_stereo.cpp)
target_link_libraries(run_kitti_stereo myslam ${THIRD_PARTY_LIBS}) 

直接生成可执行文件,并链接即可  

4.2 工程架构

    正如高博在书中所说的:

“实现时,尽量利用逻辑上的分拆,把复杂功能拆成一些短小的函数,直到底层才调用OpenCV或g2o实现特定功能。这样有利于提升程序可读性和复用性,比如初始化阶段的提取特征和关键帧的提特征就可以使用同一个函数。” 

你可能感兴趣的:(计算机视觉,人工智能,自动驾驶,slam,c++)