无人叉车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

相关文章

SpringBoot基于注解实现数据库字段回填的完整方案

《SpringBoot基于注解实现数据库字段回填的完整方案》这篇文章主要为大家详细介绍了SpringBoot如何基于注解实现数据库字段回填的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解... 目录数据库表pom.XMLRelationFieldRelationFieldMapping基础的一些代

前端缓存策略的自解方案全解析

《前端缓存策略的自解方案全解析》缓存从来都是前端的一个痛点,很多前端搞不清楚缓存到底是何物,:本文主要介绍前端缓存的自解方案,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、为什么“清缓存”成了技术圈的梗二、先给缓存“把个脉”:浏览器到底缓存了谁?三、设计思路:把“发版”做成“自愈”四、代码

解决docker目录内存不足扩容处理方案

《解决docker目录内存不足扩容处理方案》文章介绍了Docker存储目录迁移方法:因系统盘空间不足,需将Docker数据迁移到更大磁盘(如/home/docker),通过修改daemon.json配... 目录1、查看服务器所有磁盘的使用情况2、查看docker镜像和容器存储目录的空间大小3、停止dock

Spring Gateway动态路由实现方案

《SpringGateway动态路由实现方案》本文主要介绍了SpringGateway动态路由实现方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随... 目录前沿何为路由RouteDefinitionRouteLocator工作流程动态路由实现尾巴前沿S

5 种使用Python自动化处理PDF的实用方法介绍

《5种使用Python自动化处理PDF的实用方法介绍》自动化处理PDF文件已成为减少重复工作、提升工作效率的重要手段,本文将介绍五种实用方法,从内置工具到专业库,帮助你在Python中实现PDF任务... 目录使用内置库(os、subprocess)调用外部工具使用 PyPDF2 进行基本 PDF 操作使用

分析 Java Stream 的 peek使用实践与副作用处理方案

《分析JavaStream的peek使用实践与副作用处理方案》StreamAPI的peek操作是中间操作,用于观察元素但不终止流,其副作用风险包括线程安全、顺序混乱及性能问题,合理使用场景有限... 目录一、peek 操作的本质:有状态的中间操作二、副作用的定义与风险场景1. 并行流下的线程安全问题2. 顺

Python异常处理之避免try-except滥用的3个核心原则

《Python异常处理之避免try-except滥用的3个核心原则》在Python开发中,异常处理是保证程序健壮性的关键机制,本文结合真实案例与Python核心机制,提炼出避免异常滥用的三大原则,有需... 目录一、精准打击:只捕获可预见的异常类型1.1 通用异常捕获的陷阱1.2 精准捕获的实践方案1.3

Pandas处理缺失数据的方式汇总

《Pandas处理缺失数据的方式汇总》许多教程中的数据与现实世界中的数据有很大不同,现实世界中的数据很少是干净且同质的,本文我们将讨论处理缺失数据的一些常规注意事项,了解Pandas如何表示缺失数据,... 目录缺失数据约定的权衡Pandas 中的缺失数据None 作为哨兵值NaN:缺失的数值数据Panda

C++中处理文本数据char与string的终极对比指南

《C++中处理文本数据char与string的终极对比指南》在C++编程中char和string是两种用于处理字符数据的类型,但它们在使用方式和功能上有显著的不同,:本文主要介绍C++中处理文本数... 目录1. 基本定义与本质2. 内存管理3. 操作与功能4. 性能特点5. 使用场景6. 相互转换核心区别

C#实现高性能拍照与水印添加功能完整方案

《C#实现高性能拍照与水印添加功能完整方案》在工业检测、质量追溯等应用场景中,经常需要对产品进行拍照并添加相关信息水印,本文将详细介绍如何使用C#实现一个高性能的拍照和水印添加功能,包含完整的代码实现... 目录1. 概述2. 功能架构设计3. 核心代码实现python3.1 主拍照方法3.2 安全HBIT