CH6
CH6-C++
if-break(for情况下)
break是直接跳出最近的循环,执行循环外的语句。
return是直接结束程序
continue是跳出本次循环,进行下一次循环。
ceres库
根据不同的求导方式(自动求导、手动求导以及解析求导),对应不同种类的模板,构建不同的仿函数,再构造求解器对所构造的代价函数(在仿函数中)进行求解:
ceres solver之三种求导方式_ceres数值求导_复古蓝的博客-CSDN博客
CH6-cmake
LIST
在编译G2O过程中,指通过find_package去寻找似乎并不能奏效,需要通过调用LIST命令设置路径
list(APPEND <list><element> [<element> ...])表示将新的元素添加到LIST中,与调用OpenCV时的set有点类似
在调用G2O时,需要通过LIST指定路径:
LIST(APPEND CMAKE_MODULE_PATH /home/jetson/slambook2/3rdparty/g2o/cmake_modules)
cmake命令之list_cmakelist_物随心转的博客-CSDN博客
CH7
CH7-C++
值传递和引用传递&
在函数定义中,存在值传递调用和引用传递调用两种方式,引用传递调用是指用&对变量名称进行定义:
什么是值传递,什么是引用传递?_lc的空间站的博客-CSDN博客
类的继承和派生
C++(11)——继承和派生_c++11 struct 继承_青布衫白少年的博客-CSDN博客
在程序中,使用了派生类Ptr,对智能指针std::Ptr进行派生。
inline
inline是C++关键字,在函数声明或定义中,函数返回类型前加上关键字inline,即可以把函数指定为内联函数。这样可以解决一些频繁调用的函数大量消耗栈空间(栈内存)的问题。关键字inline必须与函数定义放在一起才能使函数成为内联函数,仅仅将inline放在函数声明前面不起任何作用。inline是一种“用于实现”的关键字,而不是一种“用于声明”的关键字。一般情况下当某个函数被用于循环中,可以通过将inline与函数定义放在一起来提升内部运行效率。
C++ inline用法详解_&Mr.Gong的博客-CSDN博客
奇异值分解SVD
奇异值分解(SVD)原理总结_小白学视觉的博客-CSDN博客
在使用SVD分解求解最小二乘问题Ax=0时,求得的解应该是x为的最小特征值对应的单位特征向量
此时,
void函数构建和别的函数构建
void函数一般是没有返回值的。如果想要构建有返回值的函数,需要按照返回值的类型来定义函数的类型,例如:
int test1() {
int a = 1;
return a;
}
CH7-cmake
add_definitions
为当前以下层路径的所有源文件和target
增加编译定义
在本章中主要指为orb_self增加SSE指令集的支持,参考官网解释:
add_definitions — CMake 3.2.3 Documentation
CMAKE语法:add_definitions、add_compile_options_cmake add_compile_options_持续学习,不断沉淀的博客-CSDN博客
${PROJECT_SOURCE_DIR}
PROJECT_SOURCE_DIR
是CMake内置变量之一,它代表当前项目根目录的路径。当使用project
命令指定项目名称时,CMake会自动设置PROJECT_SOURCE_DIR
的默认值为项目根目录的路径(CMakeLists.txt所在的路径)
CH8
CH8-C++
inline
内联函数,本身时可以提升函数的运行效率的。再C++调用编译的过程中,可以在含有内联函数的地方展开,减少了函数调栈压缩栈等时间,极大的提升了运行效率。在函数有很多行的时候,调栈的时间可以忽略不计。但是当函数只有一两行时,调栈的时间占比就会增多。通过使用内联函数来提升程序的运行效率。
内联函数(inline)详解_Massachusetts_11的博客-CSDN博客
public、protected、private
对于基类内部元素来说,public元素可以被类内外访问。protected元素只能被基类和派生类所访问。而private元素只能被基类所访问。
1) 公有继承(public)
公有继承的特点是基类的公有成员和保护成员作为派生类的成员时,它们都保持原有的状态,而基类的私有成员仍然是私有的,不能被这个派生类的子类所访问。
(2)私有继承(private)
私有继承的特点是基类的公有成员和保护成员都作为派生类的私有成员,并且不能被这个派生类的子类所访问。
(3)保护继承(protected)
保护继承的特点是基类的所有公有成员和保护成员都成为派生类的保护成员,并且只能被它的派生类成员函数或友元访问,基类的私有成员仍然是私有的。
继承 public protect private_继承public pro pri_one_soft_stone的博客-CSDN博客
std::bind函数
锁进程问题
参考第八章光流法和直接法中的注释
CH8-cmake
暂无
CH9
CH9-C++
.h头文件中关于""和<>的区别
C++中include头文件使用""与<>的区别_一般情况下,自定义的头文件能否用<>_图形跟班的博客-CSDN博客
类内构造函数,与类名称相同
C++构造函数的各种用法全面解析(C++初学面向对象编程)_c++ 构造函数_Chung丶无际鹰的博客-CSDN博客
CH9-cmake
暂无
CH13
CH13-C++
CH13-cmake
附录
g2o线性求解器类型:
G2O:线性求解器_linearsolverdense_繁星水水的博客-CSDN博客
g2o边问题
g2o的边并不是无向的,一定是由pose指向landmark,如果设置反了会导致优化、内存溢出等一系列的问题产生。typedef g2o::BlockSolver<g2o::BlockSolverTraits<PoseDim, LandMarkDim>> BlockSolverType;