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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 把ocx打包成CAB,并签名

    把ocx打包成CAB,并签名准备好工具包,微软的IESDK里包含这些工具, 但是那个开发包太过庞大,而且操作起来也稍微得繁琐了一些你只需要下载这么几个文件就可以了 文中提到的数字签名工具包,请在此处下载&#

    2022年6月30日
    21
  • Java中Boolean是什么?

    Java中Boolean是什么?Java中的boolean其实就是c中的bool型(逻辑型)数据类型。在java中,boolean值只能是true和false,而不能用0和1代替,并且一定要小写。要注意到的是,数值的0、-0、特殊值的null、NaN、undefined以及空字符(””)都会被解释为false,其他值则会被解释为true。…

    2022年7月7日
    16
  • android 设备usb调试模式,如何打开Android设备的USB调试模式「建议收藏」

    android 设备usb调试模式,如何打开Android设备的USB调试模式「建议收藏」目前大部分刷机等工具都是采用Adb方式连接,所以需要您在设备上打开USB调试模式Android设备打开USB调试模式总共有三种不同方法,根据系统版本而不同,以下为Android所有系统版本对应的打开方法壹2.1~2.3.7系统打开方法:点击手机Menu键(菜单键),在弹出的菜单中选择设置(Setting),或在应用程序中找到设置程序点击进入进入设置界面的应用程序即可打开…

    2022年9月13日
    0
  • 翻转ListNode「建议收藏」

    翻转链表复制代码链表定义publicclassListNode{publicvarval:Intpublicvarnext:ListNode?publicinit(_val:Int){self.val=valself.next=nil}}复制代码extension方便测试观察e…

    2022年4月7日
    90
  • sql镶嵌查询_SQL数据查询之——嵌套查询「建议收藏」

    sql镶嵌查询_SQL数据查询之——嵌套查询「建议收藏」一、概念描述在SQL语言中,一个SELECT-FROM-WHERE语句称为一个查询块。将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询。例如:SELECTSname/*外层查询或父查询*/FROMStudentWHERESnoIN(SELECTSno/*内层查询或子查询*/FROMSCWHERECno=’2′);SQL语言允…

    2022年8月10日
    4
  • ldap统一用户认证php,Docker搭建OpenLDAP+phpLDAPadmin统一用户认证的方法「建议收藏」

    一、背景使用LDAP对运维相关用户名密码做统一管理。可以实现一个帐号登录多个不同系统。手动部署都是各种问题,后来采用Docker部署,参考了好多教程文档总结如以下内容亲测可用二、部署Docker搭建LDAP#拉取镜像dockerpullosixia/openldap:1.3.0#创建并进入映射目录mkdir-p/usr/local/ldap&&cd/usr/…

    2022年4月11日
    45

发表回复

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

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