无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

本文主要是介绍无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

墙体画线地图切分方案

针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等

·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位

方案思路

切分原理:切分地图基于关键帧位置,而非点云

理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关键帧之间距离足够大,对于切分的画线精度要求不高。

实现思路

这实际上是一种子地图模式,建议基于已有的大地图软件框架来做,把墙画线切分当作一种子图分割策略现有地图切分

第一步:MPE(地图离线编辑软件)沿墙体中心画线,共K条直线;

第二步:遍历关键帧,按关键帧的时间顺序逐个遍历,针对第i个关键帧,遍历K条直线,对每条直线执行LineSideTest(该函数返回—1/0/1,表示点在直线左侧、直线上、直线右侧),得到一个size为K的向量,该向量就可以表征这个关键帧属于哪个子地图,若该子地图已存在,则将i和该子地图关联;若该子地图不存在,先新建子地图对象,再将ⅰ和该子地图关联

说明:此方案有缺陷,考虑横竖两条直线,会分成4个子地图,按照第1—第4象限来区分,有可能第3、第4象限其实是一个房间,不该分成两个子图。所以应该还需要一个额外的指定子地图合并的功能。理论上如果直线改成线段(有起点和终点)去做切分,就不需要额外指定合并了,但是LineSideTest会很难算,不如额外指定合并。

实时定位

判断当前位于哪个子图(按LineSideTest),就用那个子图的关键帧地图进行定位建图不准问题

问题:地图切分预期能解决实时定位问题,前提条件是地图是准的;如果建图就因为墙两侧误匹配导致不准,怎么办?

一种解决思路:针对跨墙区域,使用切分方案拓展建图

.确保已有地图虽然有偏差,但在可控范围内(脑测,墙点云分层总宽<20cm)

ii.基于现有地图,墙中心画线段(需要有起点和终点吗?),将关键帧地图切分为两侧两个子地图,并确认哪个子地图将保留,哪个子地图将抛弃,同时墙中心线两侧+—40cm的区域设为墙体特征区.从保留子地图里开始拓展建图,判断当前帧的位置属于保留子地图时,仅使用保留子地图进行定位,新关键帧也属于保留子地图;判断当前帧进入抛弃子地图区域时,使用「保留子地图中墙体特征区之外的点云」+抛弃子地图区域内新建的关键帧地图进行定位

备注:

·拓展建图进入抛弃子地图区域时,不使用原有的抛弃子地图是因为原有的抛弃子地图已经不准了;

拓展建图进入抛弃子地图区域时,还需要使用墙体特征区之外的保留子地图点云,是因为在保留子地图的关键帧会扫到抛弃子地图区域内的有效特征,这些特征对于从保留子地图到抛弃子地图区域的建图一致性可能起到关键作用

其他细节:

拓展建图时,墙体特征区内不要新建关键帧

这篇关于无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1151882

相关文章

Python实现html转png的完美方案介绍

《Python实现html转png的完美方案介绍》这篇文章主要为大家详细介绍了如何使用Python实现html转png功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 1.增强稳定性与错误处理建议使用三层异常捕获结构:try: with sync_playwright(

Java使用多线程处理未知任务数的方案介绍

《Java使用多线程处理未知任务数的方案介绍》这篇文章主要为大家详细介绍了Java如何使用多线程实现处理未知任务数,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 知道任务个数,你可以定义好线程数规则,生成线程数去跑代码说明:1.虚拟线程池:使用 Executors.newVir

一文带你深入了解Python中的GeneratorExit异常处理

《一文带你深入了解Python中的GeneratorExit异常处理》GeneratorExit是Python内置的异常,当生成器或协程被强制关闭时,Python解释器会向其发送这个异常,下面我们来看... 目录GeneratorExit:协程世界的死亡通知书什么是GeneratorExit实际中的问题案例

MySQL中闪回功能的方案讨论及实现

《MySQL中闪回功能的方案讨论及实现》Oracle有一个闪回(flashback)功能,能够用户恢复误操作的数据,这篇文章主要来和大家讨论一下MySQL中支持闪回功能的方案,有需要的可以了解下... 目录1、 闪回的目标2、 无米无炊一3、 无米无炊二4、 演示5、小结oracle有一个闪回(flashb

Android App安装列表获取方法(实践方案)

《AndroidApp安装列表获取方法(实践方案)》文章介绍了Android11及以上版本获取应用列表的方案调整,包括权限配置、白名单配置和action配置三种方式,并提供了相应的Java和Kotl... 目录前言实现方案         方案概述一、 androidManifest 三种配置方式

最新Spring Security实战教程之表单登录定制到处理逻辑的深度改造(最新推荐)

《最新SpringSecurity实战教程之表单登录定制到处理逻辑的深度改造(最新推荐)》本章节介绍了如何通过SpringSecurity实现从配置自定义登录页面、表单登录处理逻辑的配置,并简单模拟... 目录前言改造准备开始登录页改造自定义用户名密码登陆成功失败跳转问题自定义登出前后端分离适配方案结语前言

使用Folium在Python中进行地图可视化的操作指南

《使用Folium在Python中进行地图可视化的操作指南》在数据分析和可视化领域,地图可视化是一项非常重要的技能,它能够帮助我们更直观地理解和展示地理空间数据,Folium是一个基于Python的地... 目录引言一、Folium简介与安装1. Folium简介2. 安装Folium二、基础使用1. 创建

Java捕获ThreadPoolExecutor内部线程异常的四种方法

《Java捕获ThreadPoolExecutor内部线程异常的四种方法》这篇文章主要为大家详细介绍了Java捕获ThreadPoolExecutor内部线程异常的四种方法,文中的示例代码讲解详细,感... 目录方案 1方案 2方案 3方案 4结论方案 1使用 execute + try-catch 记录

python中列表list切分的实现

《python中列表list切分的实现》列表是Python中最常用的数据结构之一,经常需要对列表进行切分操作,本文主要介绍了python中列表list切分的实现,文中通过示例代码介绍的非常详细,对大家... 目录一、列表切片的基本用法1.1 基本切片操作1.2 切片的负索引1.3 切片的省略二、列表切分的高

Java嵌套for循环优化方案分享

《Java嵌套for循环优化方案分享》介绍了Java中嵌套for循环的优化方法,包括减少循环次数、合并循环、使用更高效的数据结构、并行处理、预处理和缓存、算法优化、尽量减少对象创建以及本地变量优化,通... 目录Java 嵌套 for 循环优化方案1. 减少循环次数2. 合并循环3. 使用更高效的数据结构4