cmake
CMakeCMakeLists.txt
指定语言版本
1set(CMAKE_CXX_STANDARD 11)
CMAKE_开头的变量都是CMAKE内置变量,CMAKE保留变量
配置编译选项
123add_compile_options(-Wall -Wextra -pedantic -Werror)#或者set(CMAKE_CXX_FLAGS ""${CMAKE_CXX_FLAGS} -pipe -std=c++11"")
配置编译类型类型可设置为:Debug, Release, RelWithDebInfo, MinSizeRel。可以针对不同的编译类型设置不同的编译选项
123set(CMAKE_BUILD_TYPE Debug)#-g开启调试信息 -o0不进行代码优化set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g -O0")
全局宏定义通过判断不同的宏定义在命令行cmake -DDEBUG=1 -DREAL_COOL ...
g2o
g2o:c++图优化库
g2o提供鲁棒核函数抑制误差特别大的点,g2o::RobustKernelHuber
数学知识
概率论先验、后验、似然根据原因的可能性、结果的可能性、它们的先后顺序和条件关系判断后验概率由果溯因,由结果概率分布估计原因概率分布,记作$p(原因|结果)$条件概率先验概率人为假设原因的概率分布,与结果概率分布无关,记作$p(原因)$条件概率似然概率由因溯果,由原因概率分布估计结果概率分布,记作$p(结果|原因)$条件概率evidence实际经验给出结果的概率分布,不考虑原因的概率分布,记作$p(结果)$贝叶斯公式
p(\theta|x)=\frac{p(x|\theta)p(\theta)}{p(x)}$x$:观察测量(结果)$\theta$:状态量(原因)$p(\theta|x)$:后验几率$p(\theta)$:先验几率$L(\theta|x)或p(x|\theta)$:似然几率$p(x)$:经验几率
MLE-最大似然估计: 频率学派求模型参数$\Theta$
\begin{aligned}
\hat{\Theta}_{\mathrm{MLE}}&=\arg\max P(X|\Theta) \\
&=\arg\max P(x_1|\Theta)P(x_2|\T ...
slam
后端状态估计概率解释视觉里程计只有短暂记忆,而我们希望整个运动轨迹在较长时间内都能保持最优的状态。用最新的知识更新较久远的状态。这是个状态估计问题。
状态估计方式\left\{\begin{align*}
&批量式(\mathrm{Batch}): 过去信息+当前信息+未来信息更新状态 \\
&渐进式(\mathrm{Incremental}): 只由过去信息更新状态
\end{align*}\right.假设$t=0$到$t=N$时间内,有位姿$x_0$到$x_N$,并有路标$y_0$,…,$y_M$,运动方程和观测方程为
\begin{equation}
\left\{\begin{aligned}
&\vec{x}_k=f(\vec{x}_{k-1},\vec{u}_k)+\vec{w}_k \\
&\vec{z}_{k,j}=h(\vec{y}_j,\vec{x}_k)+\vec{v}_{k,j}
\end{aligned}\right.\quad\quad k=1,\cdots,N,\quad j=1,\cdots,M.
\end{equa ...
c++知识汇总
数据对齐字节对齐字节对齐是指变量存储首地址是其类型长度的整数倍,例如4字节对齐是存储首地址是4的整数倍0x0000,0x0004,0x0008,0x000C,0x0010等
字节对齐目的提高cpu访问效率以及内存管理,在字节对齐时cpu只需读取一次可以将数据全部提取出来,若字节不对齐要读区数次
字节对齐实现方法在c++定义语句中添加_attribute_((aligned(n)))代码,添加位置可以在原定义语句之前或之后,$n=2^i$, 例如123456789101112131415161718//2字节对齐typedef __attribute__((aligned(2))) struct A{ char a; char b; int c;};//char a占1字节,char b占1字节,int c占4字节且起始地址必须是4的整数倍所以char b和int c之间补2字节,整个结构体的尾后地址也必须是2字节对齐(即2的整数倍地址)//1byte(a) + 1byte(b) + 2byte(变量间补) + 4byte(c) + 0byte(结构体补)//4字节对 ...