首页 > 编程语言 >ROS_C++_涉及的代数以及C++代码库

ROS_C++_涉及的代数以及C++代码库

时间:2022-11-23 11:24:38浏览次数:36  
标签:代数 Eigen -- 李群 矩阵 C++ 线性代数 ROS

基本线性代数库

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

相关文章

  • C++虚拟新生信息管理系统
    C++虚拟新生信息管理系统实验七综合实验虚拟新生信息管理系统(4学时)一、实验目的1)巩固和加深学生对C++课程的基本知识的理解和掌握;2)掌握C++编程和程序调试的基本技......
  • 用汇编的眼光看C++(之class构造、析构)
       前面我们讨论基本上都是C语言的内容,还没有真正触及到C++的相关知识。从这篇博客之后,我们将会更多触及类的内容。类的属性很多,今天我们讨论主要就是构造函数、析构函......
  • 用汇编的眼光看C++(之算术符重载)
       算术符重载是类的有一个特性,但是每个人使用的方法不一样。用的好,则事半功倍;但是如果不正确的使用,则会后患无穷。   (1)简单算术符介绍   那什么是算术符重载......
  • 用汇编的眼光看C++(之虚函数)
       虚函数是面向对象设计中的一个重要内容。它的出现使得我们只需要相同的接口函数,并可以得到不同的生成结果。但是有些朋友却知其然,不知其所以然,为什么会出现这样的结......
  • 用汇编的眼光看C++(之类继承)
       继承是类的一个基本属性,可是在类的继承过程中,函数是怎么初始化?怎么析构的呢?我们不妨看看下面这样的一段代码?classemployee{public:employee(){printf("employee......
  • C/C++模拟校园卡
    C/C++模拟校园卡模拟校园卡出题人:俞琼面向专业:物联网工程难度等级:41问题描述同学们都在机房做实验或自由上机,请根据自己实际使用情况编写一份模拟校园卡消费记录查......
  • C++学校图书馆管理系统
    C++学校图书馆管理系统一、实验目的1.掌握结构体类型的声明方法;2.掌握结构体变量、结构体数组、结构体指针的定义和初始化的方法;3.掌握向函数传递结构体变量、结构体数......
  • c++ 调用 python 2.7
    本来想调用python3.10的,但一直安装不成功,先记录一下python2.7。先上代码:#include<iostream>usingnamespacestd;#include"Python.h"intmain(intargc,cha......
  • ROS的Fasttrack,可以极大的减少ROS的CPU使用率已经带宽!特别注意:如果开启了 fasttrack,si
    原文http://t.zoukankan.com/itfat-p-12936850.htmlhttps://wiki.mikrotik.com/wiki/Manual:IP/Fasttrack特别注意:如果开启了fasttrack,simplequeue将失效。需要两条......
  • P1644 跳马问题 C++ 搜索回溯+dfs
    题目背景在爱与愁的故事第一弹第三章出来前先练练四道基本的回溯/搜索题吧……题目描述中国象棋半张棋盘如图1所示。马自左下角(0,0)向右上角(m,n)跳。规定只能往......