基本线性代数库
Ceres、Eigen、Sophus、G2O
基本线性代数子程序,Basic Linear Algebra Subprograms,是一个API标淮,
用以规范发布基础线性代数操作的数值库
Netlib用Fortran实现了BLAS的这些API接口,得到的库也叫做BLAS
Netlib BLAS
LAPACK 线性代数库,也是Netlib用fortran语言编写的,其底层是BLAS。LAPACK提供了丰富的工具函
Blas、LAPACK
Fortran编写的线性代数运算库,lapack以blas为基础
suitesparse依赖lapack、blas
Ceres
含Eigen、gflags、glog、merit、suitesparse,解决优化问题
开源社区及商业公司针对API实现了
BLAS (ATLAS、OpenBLAS) ATLAS BSD许可证开源的BLAS实现
和LAPACK(MKL、ACML、CUBLAS)的针对性优化
Eigen内部的Quaterniond的数据存储顺序不一样,存储顺序x,y,z,w
李群李代数学习
李代数可以用来描述物体在某个参考系下的状态(姿态或者位姿),可以用一个多维(三维或者六维)矢量来表示。
说到李代数,就不得不提到李群,每个李群都有与之对应的李代数
群(Group),则是一种集合,加上一种运算组成的结构。李群是连续(光滑)的群。上面的特殊正交群、特殊欧式群,都是对时间连续的群,
都是李群的一种。
李代数是一个代数结构,主要用于研究象李群和微分流形之类的几何对象。李代数因研究无穷小变换的概念而引入。
每个李群都有与之对应的李代数,李代数描述了李群的局部性质
Lie algebra 一类重要的非结合代数
01. Sophus 模块
SE(3): rigid motion (rotation and translation) in 3D space
李群SE(3) 是旋转加上位移,也称欧式变换、刚体变换
Eigen库是一个开源的C++线性代数库,它提供了快速的有关矩阵的线性代数运算,还包括解方程等功能。
但是Eigen库提供了集合模块,但没有提供李代数的支持。
一个较好的李群和李代数的库是Sophus库,它很好的支持了SO(3),so(3),SE(3)和se(3)。
Sophus库是基于Eigen基础上开发的,继承了Eigen库中的定义的各个类。
因此在使用Eigen库中的类时,既可以使用Eigen命名空间,也可以使用Sophus命名空间
02.manif -- dependency on Eigen
artivis.github.io/manif
https://github.com/artivis/manif
Manif: A micro Lie theory library for state estimation in robotics applications
特殊正交群(special orthogonal group)
Get quickly started with manif following our 'quick start' guides for both C++ and Python
旋转矩阵 对应的 SO(3) 特殊正交群(Special Orthogonal Group)
它是一个行列式为1的正交矩阵。 它的逆就是它自身的转置
变换矩阵 对应的 SE(3) 特殊欧式群(Special Euclidean Group)
特殊正交群是李群的一种,因此我们可以将其映射为李代数,解决求解最小二乘优化时的问题。
用李代数解决求导问题思路分为两种:
1.用李代数表示姿态,然后根据李代数加法来对李代数求导。(李代数的求导模型)
2.对李群左乘或右乘微小扰动,然后对该扰动求导。(扰动模型)
Ceres库
G2O函数库相对较为复杂,但是适用面更加广,可以解决较为复杂的重定位问题。
Ceres库向通用的最小二乘问题的求解,定义优化问题,设置一些选项,可通过Ceres求解
卡尔曼滤波
状态估计(state estimation)
模型定下来之后5个公式里还有3个参数(P、Q、R)
R就是观测的方差(状态是1维的,协方差矩阵退化为方差),-- 观测噪声协方差矩阵
Q就是预测的方差,-- 过程噪声协方差矩阵
P就是融合后的高斯函数的方差--后验误差协方差矩阵
H--观测矩阵
K-- 卡尔曼增益系数
系统的状态方程--观测方程
卡尔曼滤波算法分为两步:预测和更新
模型的F、P、Q、H、R矩阵
滤波增益矩阵 状态转移矩阵 协方差矩阵 系统输入向量 测量矩阵
estimation就包含三种处理信号的方法:filtering(滤波),smoothing(平滑) 和 prediciton(预测)。
ApolloAuto
Apollo选择了四元数作为各个传感器安装位置和角度的存储介
传感器到车体坐标系的坐标转换原理及数学推导,
该原理不仅用在无人车领域,同时在机器人、无人机、三维建模等领域也得到了广泛使用
Apollo使用osqp进行二次规划问题的求解。第一行为代价函数,第二行为约束条件。
二次优化的目标就是在满足约束条件的基础上,找到优化变量使得代价函数的值最小
无人车领域,卡尔曼滤波器除了应用于障碍物跟踪外,
也在车道线跟踪、障碍物预测以及定位等领域大展身手
数据对齐
在进行关联操作之前,需要将信息统一到相同的坐标系以及时间节点,也就是时空间转换
时间:fusion与measure必须在同一时间下,如果差了一个△t,就是用卡尔曼滤波中的运动学外推即可
空间: 后融合是目标级别融合,输入以及输出都是点
数据关联模块
融合方法
融合应梳理不同场景传感器的性能基线,总结特性并在融合端更好的进行逻辑预埋
参考
https://github.com/ApolloAuto
https://zhuanlan.zhihu.com/p/435445206
标签:代数,Eigen,--,李群,矩阵,C++,线性代数,ROS
From: https://www.cnblogs.com/ytwang/p/16917662.html