NDT算法原理

NDT算法原理NDT 算法原理算法提出原文 TheNormalDis ANewApproach FromIEEE 参考 https www cnblogs com 21207 iHome p 8039741 htmlNDT 是基于栅格化地图的算法 主要算法思路 基于 2D 场景将参考帧点云地图分为一个个小块 c

NDT算法原理

算法提出原文:The Normal Distributions Transform: A New Approach to Laser Scan Matching(From IEEE)

参考:https://www.cnblogs.com/21207-iHome/p/8039741.html

NDT是基于栅格化地图的算法,主要算法思路:基于2D场景

将参考帧点云地图分为一个个小块(cell),计算下一时刻的目标帧得到的点云,变换到参考坐标,落到对应参考帧的cell中的概率。就是同一个环境点,不同时刻检测结果,变换到同一坐标,落在同一个cell。通过这种关系得到评分指标,最优化得到R,t。

详细步骤:

  1. 将参考点云(reference scan)所占的空间划分成指定大小(CellSize)的网格或体素(Voxel);并计算每个网格的多维正态分布参数:
  2. 计算网格的概率分布模型:
  1. 变换要配准的点云(second/Target scan)到参考(reference)坐标系下(参考点云的坐标系,通常是前一帧)。
    在这里插入图片描述
  2. 根据正态分布参数计算每个转换点落在对应cell中的概率
    在这里插入图片描述
  3. NDT配准得分(score):计算对应点落在对应网格cell中的概率之和
    在这里插入图片描述
  4. 根据牛顿优化算法对目标函数 − s c o r e −score score进行优化,即寻找变换参数 p p p使得 s c o r e score score的值最大。优化的关键步骤是要计算目标函数的梯度和Hessian矩阵:
    q = x ′ i − q i q=x′_i−q_i q=xiqi,则:
    在这里插入图片描述
    根据链式求导法则以及向量、矩阵求导的公式,s梯度方向为:
    在这里插入图片描述
    其中q对变换参数 p i p_i pi的偏导数 ∂ q ∂ p i \frac{\partial q}{
    {\partial p}_i}
    piq
    即为变换T的雅克比矩阵:
    在这里插入图片描述
    根据上面梯度的计算结果,继续求 s s s关于变量 p i p_i pi p j p_j pj的二阶偏导:
    在这里插入图片描述
    根据变换方程,向量 q q q对变换参数 p p p的二阶导数的向量为:
    在这里插入图片描述









  5. 跳转到第3步继续执行,直到达到收敛条件为止
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/233924.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • oracle分页基本语法[通俗易懂]

    oracle分页基本语法[通俗易懂]–分页:–mysql:limit–oracle:rownum伪列–伪列:在表结构中不存在的列–rowid伪列:用于唯一标识一行记录–rownum伪列:行号select*fromemp;–看不到行号–select*,rownumfromemp;–报错selecte.*,rownumfromempe;–正确的–rownum:行号是从1开始的,也…

    2022年5月28日
    46
  • 啦啦外卖商家端APP打包

    经过多日终于打包啦啦外卖商家端打包好,语音播报,扫一扫,订单推送,下面是打包好的演示图片,不懂的小伙伴可以叫我讨论一下。

    2022年4月7日
    41
  • Ubuntu修改用户名和密码后无法登录_ubuntu默认用户名

    Ubuntu修改用户名和密码后无法登录_ubuntu默认用户名ubuntu修改用户名和密码项目场景:克隆别人的虚拟机后,想修改用户名和密码。问题描述:修改密码后,root和用户身份验证正常,但是继续修改用户名后,提示认证失败。原因分析:原因是修改用户名后,用户名和密码不匹配解决方案:若要修改用户名和密码,需要切换到root后修改。修改完成后需要确认用户身份验证是否通过,通过后才证明完成了修改,否则重启后会导致无法登陆。下面是修改用户名和密码的步骤。1.修改密码最好先修改密码,重启后再修改用户名。1)修改root密码:$sudopasswdr

    2022年9月29日
    0
  • 飞机订票系统(C语言)

    飞机订票系统(C语言)用C语言解决飞机订票系统***一、问题描述:根据以下功能说明,设计航班信息、客户信息、订票信息的存储结构,设计程序完成相应功能。*录入:*可以录入航班情况(数据可以存储在一个数据文件中,数据个数不能少于8个、自行设计数据构成);客户信息(姓名,证件号,电话等);订票信息(订单要有编号,其余数据自行设计)。****查询:****可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况;****订票:**

    2022年6月29日
    22
  • Git创建远程分支并提交代码到远程分支

    Git创建远程分支并提交代码到远程分支1、可以通过gitbranch-r命令查看远端库的分支情况如图所示,远程仓库只有一个master分支2、从已有的分支创建新的分支(如从master分支),创建一个dev分支但此时并没有在远程仓库上创建分支如图所示还是只有一个master分支3、建立本地到远端仓库的链接–这样代码才能提交上去使用命令行gitpush–set-…

    2022年6月30日
    23
  • 面试被问selenium自动化模型,你了解多少?

    面试被问selenium自动化模型,你了解多少?

    2021年5月24日
    141

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号