slam java_SLAM——hector-slam算法原理解析

本文详细解读了基于Java的hector-slam算法,重点介绍了核心函数update中的位姿估计和栅格图更新过程。算法采用高斯牛顿法解决非线性优化问题,构建占用栅格地图,并通过激光扫描数据更新地图。文章还简述了占用栅格地图的原理和非线性优化的高斯牛顿法。
摘要由CSDN通过智能技术生成

1、hector-slam代码框架概述

下载源码:git clone https://github.com/tu-darmstadt-ros-pkg/hector_slam.git

原理解读参照:https://blog.csdn.net/weixin_40047925/article/details/80679496

其中包含了许多用于仿真的文件,hector slam算法主要集中在hector mapping包中,同时核心的位姿估计和点云建立栅格图操作主要在文件HectorSlamProcessor.h的函数update中。如下:

函数newPoseEstimateWorld = (mapRep->matchData(poseHintWorld, dataContainer, lastScanMatchCov))根据输入的激光点云数据和现有的栅格图进行对齐,这部分是整个代码的核心,主要思想是使用高斯牛顿优化代价函数,求取让代价函数达到最优的位姿偏量,从而求出当前机器人的位姿态。

当然,如果已经知道机器人的准确位姿不需要进行上面的位姿解算,直接用函数mapRep->updateByScan(dataContainer, newPoseEstimateWorld)更新栅格地图。这部分算法原理比较简单,主要两个方面:一是,用对数表达每一个子栅格的概率值;二是,用Bresenham 画线算法来更新子栅格的概率值。

为了说明上述算法原理,先介绍一部分的预备知识,然后再切入正题。

2、hector-slam预备知识

2-1 占用栅格地图

这里直接使用上述参考文章进行说明,假设机器人的位姿已知,那么经过每一次激光数据扫描,真实障碍物在栅格地

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值