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

相关文章

Java堆转储文件之1.6G大文件处理完整指南

《Java堆转储文件之1.6G大文件处理完整指南》堆转储文件是优化、分析内存消耗的重要工具,:本文主要介绍Java堆转储文件之1.6G大文件处理的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言文件为什么这么大?如何处理这个文件?分析文件内容(推荐)删除文件(如果不需要)查看错误来源如何避

使用Python构建一个高效的日志处理系统

《使用Python构建一个高效的日志处理系统》这篇文章主要为大家详细讲解了如何使用Python开发一个专业的日志分析工具,能够自动化处理、分析和可视化各类日志文件,大幅提升运维效率,需要的可以了解下... 目录环境准备工具功能概述完整代码实现代码深度解析1. 类设计与初始化2. 日志解析核心逻辑3. 文件处

Java docx4j高效处理Word文档的实战指南

《Javadocx4j高效处理Word文档的实战指南》对于需要在Java应用程序中生成、修改或处理Word文档的开发者来说,docx4j是一个强大而专业的选择,下面我们就来看看docx4j的具体使用... 目录引言一、环境准备与基础配置1.1 Maven依赖配置1.2 初始化测试类二、增强版文档操作示例2.

MyBatis-Plus通用中等、大量数据分批查询和处理方法

《MyBatis-Plus通用中等、大量数据分批查询和处理方法》文章介绍MyBatis-Plus分页查询处理,通过函数式接口与Lambda表达式实现通用逻辑,方法抽象但功能强大,建议扩展分批处理及流式... 目录函数式接口获取分页数据接口数据处理接口通用逻辑工具类使用方法简单查询自定义查询方法总结函数式接口

MySQL 迁移至 Doris 最佳实践方案(最新整理)

《MySQL迁移至Doris最佳实践方案(最新整理)》本文将深入剖析三种经过实践验证的MySQL迁移至Doris的最佳方案,涵盖全量迁移、增量同步、混合迁移以及基于CDC(ChangeData... 目录一、China编程JDBC Catalog 联邦查询方案(适合跨库实时查询)1. 方案概述2. 环境要求3.

SpringBoot3.X 整合 MinIO 存储原生方案

《SpringBoot3.X整合MinIO存储原生方案》本文详细介绍了SpringBoot3.X整合MinIO的原生方案,从环境搭建到核心功能实现,涵盖了文件上传、下载、删除等常用操作,并补充了... 目录SpringBoot3.X整合MinIO存储原生方案:从环境搭建到实战开发一、前言:为什么选择MinI

SpringBoot结合Docker进行容器化处理指南

《SpringBoot结合Docker进行容器化处理指南》在当今快速发展的软件工程领域,SpringBoot和Docker已经成为现代Java开发者的必备工具,本文将深入讲解如何将一个SpringBo... 目录前言一、为什么选择 Spring Bootjavascript + docker1. 快速部署与

Python使用vllm处理多模态数据的预处理技巧

《Python使用vllm处理多模态数据的预处理技巧》本文深入探讨了在Python环境下使用vLLM处理多模态数据的预处理技巧,我们将从基础概念出发,详细讲解文本、图像、音频等多模态数据的预处理方法,... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

Knife4j+Axios+Redis前后端分离架构下的 API 管理与会话方案(最新推荐)

《Knife4j+Axios+Redis前后端分离架构下的API管理与会话方案(最新推荐)》本文主要介绍了Swagger与Knife4j的配置要点、前后端对接方法以及分布式Session实现原理,... 目录一、Swagger 与 Knife4j 的深度理解及配置要点Knife4j 配置关键要点1.Spri

Spring Boot @RestControllerAdvice全局异常处理最佳实践

《SpringBoot@RestControllerAdvice全局异常处理最佳实践》本文详解SpringBoot中通过@RestControllerAdvice实现全局异常处理,强调代码复用、统... 目录前言一、为什么要使用全局异常处理?二、核心注解解析1. @RestControllerAdvice2