3D激光里程计其二:NDT

news2024/11/18 5:58:56

3D激光里程计其二:NDT

  • 1. 经典NDT
  • 2. 计算方式
    • 2.1 2D场景求解:
    • 2.2 3D场景求解:
  • 3. 其他 NDT

Reference:

  1. 深蓝学院-多传感器融合

1. 经典NDT

在这里插入图片描述
NDT 核心思想:基于概率的匹配。目标是将点集 Y 匹配到固定的点集 X 中。这里的联合概率说的是将 X 划分成栅格(如上图),每个栅格里面都有很多点,这些点可以计算一个 均值/协方差,这是一个概率的概念。而联合概率是:Y 往 X 上旋转的时候,它落在栅格中的哪个格子里知道的。根据落在格子里的点,本身 X 格子已经有了一个 均值/协方差,而 Y 的这些落在格子里的点可以形成一个联合概率。这个联合概率会作为有没匹配好的一个指标。
点集:
X = { x 1 , x 2 , ⋯   , x N x } Y = { y 1 , y 2 , ⋯   , y N y } \begin{aligned} & X=\left\{x_1, x_2, \cdots, x_{N_x}\right\} \\ & Y=\left\{y_1, y_2, \cdots, y_{N_y}\right\} \end{aligned} X={x1,x2,,xNx}Y={y1,y2,,yNy}

目标: max ⁡ Ψ = max ⁡ ∏ i = 1 N y f ( X , T ( p , y i ) ) \max \Psi=\max \prod_{i=1}^{N_y} f\left(X, T\left(p, y_i\right)\right) maxΨ=maxi=1Nyf(X,T(p,yi))(与ICP这里有些区别,ICP的是点到点的距离,这里变成了联合概率)
2D模型: p = p 3 = [ t x t y ϕ z ] T \quad p=p_3=\left[\begin{array}{lll}t_x & t_y & \phi_z\end{array}\right]^{\mathrm{T}} p=p3=[txtyϕz]T
3D模型: p = p 6 = [ t x t y t z ϕ x ϕ y ϕ z ] T \quad p=p_6=\left[\begin{array}{llllll}t_x & t_y & t_z & \phi_x & \phi_y & \phi_z\end{array}\right]^{\mathrm{T}} p=p6=[txtytzϕxϕyϕz]T

在这里插入图片描述

2. 计算方式

均值和协方差:
μ = 1 N x ∑ i = 1 N x x i , Σ = 1 N x − 1 ∑ i = 1 N x ( x i − μ ) ( x i − μ ) T \mu=\frac{1}{N_x} \sum_{i=1}^{N_x} x_i, \boldsymbol{\Sigma}=\frac{1}{N_x-1} \sum_{i=1}^{N_x}\left(x_i-\mu\right)\left(x_i-\mu\right)^{\mathrm{T}} μ=Nx1i=1NxxiΣ=Nx11i=1Nx(xiμ)(xiμ)T

根据预测的位姿,对点进行旋转和平移(这里的旋转和平移是一个初始预测值):
y i ′ = T ( p , y i ) = R y i + t y_i^{\prime}=T\left(p, y_i\right)=R y_i+t yi=T(p,yi)=Ryi+t

旋转和平移后的点与目标点集中的点在同一坐标系下,此时可计算各点的联合概率
f ( X , y i ′ ) = 1 2 π ∣ Σ ∣ exp ⁡ ( − ( y i ′ − μ ) T Σ − 1 ( y i ′ − μ ) 2 ) f\left(X, y_i^{\prime}\right)=\frac{1}{\sqrt{2 \pi} \sqrt{|\boldsymbol{\Sigma}|}} \exp \left(-\frac{\left(y_i^{\prime}-\mu\right)^{\mathrm{T}} \boldsymbol{\Sigma}^{-1}\left(y_i^{\prime}-\mu\right)}{2}\right) f(X,yi)=2π Σ 1exp(2(yiμ)TΣ1(yiμ))

所有点的联合概率(就是所有点的概率乘一起):
Ψ = ∏ i = 1 N y f ( X , T ( p , y i ) ) = ∏ i = 1 N y 1 2 π ∣ Σ ∣ exp ⁡ ( − ( y i ′ − μ ) T Σ − 1 ( y i ′ − μ ) 2 ) \begin{aligned} \Psi & =\prod_{i=1}^{N_y} f\left(X, T\left(p, y_i\right)\right) \\ & =\prod_{i=1}^{N_y} \frac{1}{\sqrt{2 \pi} \sqrt{|\mathbf{\Sigma}|}} \exp \left(-\frac{\left(y_i^{\prime}-\mu\right)^{\mathrm{T}} \boldsymbol{\Sigma}^{-1}\left(y_i^{\prime}-\mu\right)}{2}\right) \end{aligned} Ψ=i=1Nyf(X,T(p,yi))=i=1Ny2π Σ 1exp(2(yiμ)TΣ1(yiμ))
目标是让所有点的联合概率最大。但是上式中的 R 和 t 是在 y i ′ y'_i yi 内的。这里还有一个exp,这个指数项会让公式变得复杂,需要消掉指数项。这时去对数可以解决。
取对数,简化问题(目标是让所有点的联合概率最大):
ln ⁡ Ψ = ∑ i = 1 N y ( − ( y i ′ − μ ) T Σ − 1 ( y i ′ − μ ) 2 + ln ⁡ ( 1 2 π ∣ Σ ∣ ) ) \ln \Psi=\sum_{i=1}^{N_y}\left(-\frac{\left(y_i^{\prime}-\mu\right)^{\mathrm{T}} \boldsymbol{\Sigma}^{-1}\left(y_i^{\prime}-\mu\right)}{2}+\ln \left(\frac{1}{\sqrt{2 \pi} \sqrt{|\boldsymbol{\Sigma}|}}\right)\right) lnΨ=i=1Ny(2(yiμ)TΣ1(yiμ)+ln(2π Σ 1))

去除常数项 ln ⁡ ( 1 2 π ∣ Σ ∣ ) \ln \left(\frac{1}{\sqrt{2 \pi} \sqrt{|\boldsymbol{\Sigma}|}}\right) ln(2π Σ 1),得到:
max ⁡ Ψ = max ⁡ ln ⁡ Ψ = min ⁡ Ψ 1 = min ⁡ ∑ i = 1 N y ( y i ′ − μ ) T Σ − 1 ( y i ′ − μ ) \max \Psi=\max \ln \Psi=\min \Psi_1=\min \sum_{i=1}^{N_y}\left(y_i^{\prime}-\mu\right)^{\mathrm{T}} \boldsymbol{\Sigma}^{-1}\left(y_i^{\prime}-\mu\right) maxΨ=maxlnΨ=minΨ1=mini=1Ny(yiμ)TΣ1(yiμ)

因为之前是负数,我们上式只需要求最小值就行。

这时就变成了一个优化问题了:
目标函数 min ⁡ ∑ i = 1 N y ( y i ′ − μ ) T Σ − 1 ( y i ′ − μ ) \min \sum_{i=1}^{N_y}\left(y_i^{\prime}-\mu\right)^{\mathrm{T}} \boldsymbol{\Sigma}^{-1}\left(y_i^{\prime}-\mu\right) mini=1Ny(yiμ)TΣ1(yiμ) y i ′ = T ( p , y i ) = R y i + t y_i^{\prime}=T\left(p, y_i\right)=R y_i+t yi=T(p,yi)=Ryi+t
待求参数 R , t R, t R,t
定义残差函数: f i ( p ) = y i ′ − μ f_i(p)=y_i^{\prime}-\mu fi(p)=yiμ
按照高斯牛顿法的流程,只需计算残差函数关于待求参数的雅可比,便可迭代优化。
J i = d f i ( p ) d p J_i=\frac{d f_i(p)}{d p} Ji=dpdfi(p)

2.1 2D场景求解:

p = [ t x t y ϕ z ] T y i ′ = T ( p , y i ) = [ cos ⁡ ϕ z − sin ⁡ ϕ z sin ⁡ ϕ z cos ⁡ ϕ z ] y i + [ t x t y ] \begin{aligned} p & =\left[\begin{array}{lll} t_x & t_y & \phi_z \end{array}\right]^{\mathrm{T}} \\ \\ y_i^{\prime} & =T\left(p, y_i\right) \\ & =\left[\begin{array}{cc} \cos \phi_z & -\sin \phi_z \\ \sin \phi_z & \cos \phi_z \end{array}\right] y_i+\left[\begin{array}{l} t_x \\ t_y \end{array}\right] \end{aligned} pyi=[txtyϕz]T=T(p,yi)=[cosϕzsinϕzsinϕzcosϕz]yi+[txty]

雅可比:
J i = d f i ( p ) d p = [ 1 0 − y i 1 sin ⁡ ϕ z − y i 2 cos ⁡ ϕ z 0 1 y i 1 cos ⁡ ϕ z − y i 2 sin ⁡ ϕ z ] J_i=\frac{d f_i(p)}{d p}=\left[\begin{array}{ccc}1 & 0 & -y_{i 1} \sin \phi_z-y_{i 2} \cos \phi_z \\ 0 & 1 & y_{i 1} \cos \phi_z-y_{i 2} \sin \phi_z\end{array}\right] Ji=dpdfi(p)=[1001yi1sinϕzyi2cosϕzyi1cosϕzyi2sinϕz]

2.2 3D场景求解:

p = [ t x t y t z ϕ x ϕ y ϕ z ] T y i ′ = T ( p , y i ) = R x R y R z y i + t = [ c y c z − c y s z s y c x s z + s x s y c z c x c z − s x s y s z − s x c y s x s z − c x s y c z c x s y s z + s x c z c x c y ] y i + [ t x t y t z ] \begin{aligned} & p=\left[\begin{array}{llllll} t_x & t_y & t_z & \phi_x & \phi_y & \phi_z \end{array}\right]^{\mathrm{T}} \\ & y_i^{\prime}=T\left(p, y_i\right)=R_x R_y R_z y_i+t=\left[\begin{array}{ccc} c_y c_z & -c_y s_z & s_y \\ c_x s_z+s_x s_y c_z & c_x c_z-s_x s_y s_z & -s_x c_y \\ s_x s_z-c_x s_y c_z & c_x s_y s_z+s_x c_z & c_x c_y \end{array}\right] y_i+\left[\begin{array}{c} t_x \\ t_y \\ t_z \end{array}\right] \end{aligned} p=[txtytzϕxϕyϕz]Tyi=T(p,yi)=RxRyRzyi+t= cyczcxsz+sxsyczsxszcxsyczcyszcxczsxsyszcxsysz+sxczsysxcycxcy yi+ txtytz
雅可比:
 雅可比  J i = [ 1 0 0 0 c f 0 1 0 a d g 0 0 1 b e h ] \begin{aligned} & \text { 雅可比 } J_i=\left[\begin{array}{llllll} 1 & 0 & 0 & 0 & c & f \\ 0 & 1 & 0 & a & d & g \\ 0 & 0 & 1 & b & e & h \end{array}\right] \end{aligned}  雅可比 Ji= 1000100010abcdefgh

其中:
a = y i 1 ( − s x s z + c x s y c z ) + y i 2 ( − s x c z − c x s y s z ) + y i 3 ( − c x c y ) b = y i 1 ( c x s z + s x s y c z ) + y i 2 ( − s x s y s z + c x c z ) + y i 3 ( − s x c y ) c = y i 1 ( − s y c z ) + y i 2 ( s y s z ) + y i 3 ( c y ) d = y i 1 ( s x c y c z ) + y i 2 ( − s x c y s z ) + y i 3 ( s x s y ) e = y i 1 ( − c x c y c z ) + y i 2 ( c x c y s z ) + y i 3 ( − c x s y ) f = y i 1 ( − c y s z ) + y i 2 ( − c y c z ) g = y i 1 ( c x c z − s x s y s z ) + y i 2 ( − c x s z − s x s y c z ) h = y i 1 ( s x c z + c x s y s z ) + y i 2 ( c x s y c z − s x s z ) \begin{aligned} & a=y_{i 1}\left(-s_x s_z+c_x s_y c_z\right)+y_{i 2}\left(-s_x c_z-c_x s_y s_z\right)+y_{i 3}\left(-c_x c_y\right) \\ & b=y_{i 1}\left(c_x s_z+s_x s_y c_z\right)+y_{i 2}\left(-s_x s_y s_z+c_x c_z\right)+y_{i 3}\left(-s_x c_y\right) \\ & c=y_{i 1}\left(-s_y c_z\right)+y_{i 2}\left(s_y s_z\right)+y_{i 3}\left(c_y\right) \\ & d=y_{i 1}\left(s_x c_y c_z\right)+y_{i 2}\left(-s_x c_y s_z\right)+y_{i 3}\left(s_x s_y\right) \\ & e=y_{i 1}\left(-c_x c_y c_z\right)+y_{i 2}\left(c_x c_y s_z\right)+y_{i 3}\left(-c_x s_y\right) \\ & f=y_{i 1}\left(-c_y s_z\right)+y_{i 2}\left(-c_y c_z\right) \\ & g=y_{i 1}\left(c_x c_z-s_x s_y s_z\right)+y_{i 2}\left(-c_x s_z-s_x s_y c_z\right) \\ & h=y_{i 1}\left(s_x c_z+c_x s_y s_z\right)+y_{i 2}\left(c_x s_y c_z-s_x s_z\right) \end{aligned} a=yi1(sxsz+cxsycz)+yi2(sxczcxsysz)+yi3(cxcy)b=yi1(cxsz+sxsycz)+yi2(sxsysz+cxcz)+yi3(sxcy)c=yi1(sycz)+yi2(sysz)+yi3(cy)d=yi1(sxcycz)+yi2(sxcysz)+yi3(sxsy)e=yi1(cxcycz)+yi2(cxcysz)+yi3(cxsy)f=yi1(cysz)+yi2(cycz)g=yi1(cxczsxsysz)+yi2(cxszsxsycz)h=yi1(sxcz+cxsysz)+yi2(cxsyczsxsz)

上面是使用旋转矩阵求导,也可以使用李代数求解。

3. 其他 NDT

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/96254.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机毕业设计springboot+vue社区疫情防控系统

项目介绍 本系统运用最新的技术springboot框架,此框架是现在社会公司生产中所用的必需框架,非常实用,相比于以前的ssm框架,简单很多。前端框架运用vue框架,vue框架是最近几年非常流行的前端技术,适合很多开发语言。主要可以是系统的前端和后端进行解耦,分离,有利于开发者分别注…

设计模式——中介者模式

中介者模式一、基本思想二、应用场景三、结构图四、代码五、优缺点优点缺点一、基本思想 定义一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。中介者模式又叫调停模式,它是迪米特法则的…

Proteus8仿真:51单片机LCD1602显示

51单片机LCD1602显示元器件原理图部分代码main.c工程文件元器件 元器件名称排阻RESPACK-851单片机AT89C51LCD1602LM016L按键BUTTON 原理图部分 LCD1602驱动: HD44780显示主要有8位操作8位两行显示,4位操作8位一行显示,8位操作8位一行显示。 LCD1602主要…

【Python】循环语句

目录 1.while 循环 2. for 循环 3. continue 4. break 1.while 循环 基本语法格式 while 条件&#xff1a; 循环体 条件为真&#xff0c;则执行循环体代码 条件为假&#xff0c;则结束循环 例1&#xff1a;打印 1 - 10 的整数 num 1 while num < 10:print(num)num 1 …

【AI with ML】第 10 章 :创建 ML 模型以预测序列

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

MySQL底层索引

目录 一、什么是索引&#xff1f; 二、MySQL索引结构分析【MySQL底层采用的是BTree】 1、为什么不使用二叉树&#xff1f; 2、为什么不使用红黑树&#xff1f; 3、为什么不使用Hash&#xff1f; 4、BTree与B-Tree的区别&#xff1f; 三、MySQL数据库的表结构、索引、数据 1、M…

基于Sharfetter-Gummel和改进的Sharfetter-Gummel计算对流扩散方程的通量(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

1. Arthas的命令

万恶淫为首&#xff0c;百善孝为先 Arthas命令 可以查看相应的文档: https://arthas.aliyun.com/doc/命令.html 如: https://arthas.aliyun.com/doc/grep.html https://arthas.aliyun.com/doc/cat.html 基础命令 help 查看命令帮助信息 cat 查看当前arthas 系统中的任意文件…

【算法】八月算法打卡

2022-08-01 低配版 promise class MyPromise {constructor(executor) {// 成功回调队列this._resolveQueue [];// 失败回调队列this._rejectQueue [];let resolve (val) > {while (this._resolveQueue.length) {const callback this._resolveQueue.shift();callback(v…

【iOS】对象,消息,运行期

文章目录对象&#xff0c;消息&#xff0c;运行期属性属性特质原子性方法名在对象内部尽量直接访问实例变量对象等同性特定类所具有的等同性判断等同性判定的执行深度容器中可变类的等同性以“类族模式”隐藏实现细节创建类族Cocoa里的类族在既有类中使用关联对象存放自定义数据…

原型,原型链,原型的继承

原型的作用? 1.节省内存空间 2.实现数据共享(继承) 什么是原型? 任何一个函数都有propotype属性,它本身是一个对象,我们称之为原型 构造函数,实例化对象与原型之间的关系? 1.任何一个函数都有prototype属性,它本身是一个对象,我们称之为原型 2.构造函数也是函数,也都…

C语言中头文件(.h)编写,头文件的包含<>和““很大不同

头文件书写技巧 1、头文件主要作用&#xff0c;提前声明函数&#xff0c;因为在c语言中必须先声明或定义才能使用 2、在使用到.c文件中需要把这个.h文件进行包含格式是#include <h文件>或#include "h文件名"&#xff0c;但**强烈建议用引号**&#xff0c;尖括…

【码极客精讲】do while语句

上次讲了while语句&#xff0c;这次讲一下do while语句。 do...while 循环是 while 循环的变体。在检查while()条件是否为真之前&#xff0c;该循环首先会执行一次do{}之内的语句&#xff0c;然后在while()内检查条件是否为真&#xff0c;如果条件为真的话&#xff0c;就会重复…

binder调用流程分析

binder是一个非常好的跨进程通信工具&#xff0c;Android对其进行了各种封装&#xff0c;虽然我们用起来简单&#xff0c;但是理解起来却比较困难。 1.自己设计一个跨进程通信机制 在理解binder之前呢&#xff0c;首先我们想一下&#xff0c;如果我们自己设计一个跨进程通信的…

关于树形dp问题的解决

文章目录解决套路案例展示一、二叉树的最大深度二、判断是不是平衡二叉树三、判断是不是二叉搜索树四、判断是否是满二叉树五、二叉树节点间的最大距离六、派对的最大快乐值解决套路 实际上就是设计一个递归函数&#xff0c;该递归函数一定要包含 basecase&#xff0c;即让函数…

[附源码]Python计算机毕业设计高校选课系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等…

[附源码]Python计算机毕业设计共享自习室管理系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等…

【C++】STL-string的使用

文章目录1.为什么学习string类&#xff1f;1.1 C语言中的字符串OJ题目1&#xff1a;字符串相加2.标准库中的string类2.1 string类(了解)总结&#xff1a;2.2 string类的常用接口说明1. string类对象的常见构造2.string类对象的容量操作max_sizereserve和resize3. string类对象的…

Spirng 痛苦源码学习(三)——Spring中的几个核心老大

文章目录前言一、基础接口1.Resource2.ResourceLoader3.BeanFactory&#xff08;1&#xff09;总览&#xff08;2&#xff09;继承如下&#xff08;3&#xff09;重要的工厂4. ApplicationContext前言 一开始学习spring我们首先还是要搞清楚他的整体架构&#xff0c;就是他是干…

[附源码]Node.js计算机毕业设计互联网教学平台Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…