8. 《自动驾驶与机器人中的SLAM技术》基于保存的自定义NDT地图文件进行自动驾驶车辆的激光定位

news2024/11/18 6:33:17

目录

1. 为 NDT 设计一个匹配度评估指标,利用该指标可以判断 NDT 匹配的好坏。

2. 利用第 1 题的指标,修改程序,实现 mapping 部分的回环检测。

3. 将建图结果导出为 NDT map,即将 NDT 体素内的均值和协方差都存储成文件。

4. 实现基于 NDT map 的激光定位。根据车辆实时位姿,加载所需的 NDT 体素并完成定位。

5. 给出上述结果相比于 PCL NDT 的性能、存储空间等关键指标

1. 为 NDT 设计一个匹配度评估指标,利用该指标可以判断 NDT 匹配的好坏。

2. 利用第 1 题的指标,修改程序,实现 mapping 部分的回环检测。

下图是 PCL 版本 NDT 匹配,在阈值设置( ndt_score_th )为 4.5 时的匹配结果( 其中加载
的关键帧数目我删掉了一些,因为实在是耗时有点久。。。)
根据上面 PCL 版本的 NDT 检测结果来确定适配自定义指标的阈值( ndt_score_th )。
使用原来的阈值明显不对,观察,得分在 0.2 附近,于是试着在这个范围寻找合适的阈值。
可见,阈值设置为 0.15 pcl 版本的阈值为 4.5 时的结果差不多。

3. 将建图结果导出为 NDT map,即将 NDT 体素内的均值和协方差都存储成文件。

这里参考 split_map.cc 代码的内容:加载关键帧对应的点云,对其进行滤波,然后计算点
云中的每个点对应的地图区块 id ,最后将区块索引和对应点云分别存储起来。
我们要导出 NDT map ,需要构建 NDT 体素并计算均值和协方差,这些在第七章的 ndt_3d.h
SetTarge 函数中已经实现。
保存的结果:

4. 实现基于 NDT map 的激光定位。根据车辆实时位姿,加载所需的 NDT 体素并完成定位。

原先基于点云地图的激光定位使用的是 PCL 版本 NDT RTK 角度搜索中用到了 10 米, 5 米, 4 米, 2 米的多分辨率 NDT 匹配来确定 RTK 的朝向,所以实现基于 NDT map 的激光定位,也需要加载多分辨率 的体素,所以参照第 3 题重新修改为保存多分辨率的 NDT map 。代码如下:
存储 NDT 体素中的均值和协方差矩阵信息。
①首先,在 fusion 初始化时配置要加载的 NDT map 路径,并参考原来的 loadMapIdex()
数,将多分辨率的 NDT 地图数据加载进来。
②接下来就是定位流程 ProcessMeasurements(m) 。首先要确定 RTK 朝向,加载多分辨率
NDT map ,使用多分辨率来进行寻找。
当然,同样也要准备卸载超出范围的 NDT 地图。
以上过程包含在 loadNdtMap 函数中。
RTK 初始化成功后后续定位流程在 LidarLocalization() 中进行。
至此,实现了基于 NDT map 进行激光定位的功能。
③实现效果:
两者定位效果差不多。

5. 给出上述结果相比于 PCL NDT 的性能、存储空间等关键指标。

①统计比较两者在加载地图和配准过程两方面的耗时情况。
可以发现,基于 NDT map 的方法,加载地图数据耗时要比加载点云要慢很多;而配准方面
会快很多。
比较一下跑完一个 bag ,总的耗时情况。
经过对比发现,基于 NDT map 的激光雷达定位效率是基于 PCL NDT 的接近六倍。
②统计比较两者需要加载的地图数据占存储大小。
原先加载的是以 100x100 大小地图区块索引命名的 pcd 格式点云数据,而现在需要加载 4
种不同分辨率的 NDT 体素地图数据中,仅存储了均值和信息矩阵。因此存储空间应该要小得多,果然,对比如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1377123.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uniapp中按钮点击跳转页面失效,纠正错误(亲测可用)

不知道伙伴你的错误和我是否一致? 我当时为了点击跳转按钮发现跳转不了,如下错误提示: worker.js?libNameWAAccelerateWorker.js:1 [Deprecation] SharedArrayBuffer will require cross-origin isolation as of M92, around July 2021. S…

Flink会话集群docker-compose一键安装

1、安装docker 参考,本人这篇博客:https://blog.csdn.net/taotao_guiwang/article/details/135508643?spm1001.2014.3001.5501 2、flink-conf.yaml flink-conf.yaml放在/home/flink/conf/job、/home/flink/conf/task下面,flink-conf.yaml…

先爬、再行、最后跑,“流程挖掘之父”Wil教授谈流程挖掘的突破之路

商界有句俗话:“先爬,再行,最后跑”。这正是实现有价值突破的过程。 作者 | Wil van der Aalst教授 海明威在他的某部作品中描绘了这样一幕:有人询问如何走向破产,得到的答案是“开始时循序渐进,之后突然…

社科院与杜兰大学金融管理硕士——深耕自己的领域,才能在竞争中脱颖而出

在全球化的浪潮中,金融行业作为经济的核心,面临着前所未有的挑战与机遇。金融人员如同航行在大海上的巨轮,既需要应对汹涌波涛,又需要把握远大前程。在这个领域里,知识就是不断更新的航线,引导着金融人员破…

申请ZeroSSL泛域名域名证书 并部署阿里云测试

安装acme.sh 安装过程中可能会失败 多试几次就会成功 wget -O - https://raw.githubusercontent.com/acmesh-official/acme.sh/master/acme.sh | sh -s -- --install-online -m 你的邮箱gmail.com安装完成后重新加载 Bash: source ~/.bashrc然后也可以开启自动更…

通过Vscode 简单创建一个vue3+element的项目

首先确保安装的nodejs是18版本以上 确保你安装了最新版本的 Node.js,并且你的当前工作目录正是打算创建项目的目录。在命令行中运行以下命令 VSCode打开终端 输入构建项目命令,个人推荐如果有cnpm使用cnpm npm create vuelatest cnpm create vuelate…

Flink异步IO

本文讲解 Flink 用于访问外部数据存储的异步 I/O API。对于不熟悉异步或者事件驱动编程的用户,建议先储备一些关于 Future 和事件驱动编程的知识。 本文代码gitee地址: https://gitee.com/ddxygq/BigDataTechnical/blob/main/Flink/src/main/java/operator/AsyncIODemo.java …

GPT Store上线,普通人需要了解什么?

当地时间1月10日,OpenAI 的 GPT Store 正式上线! 过去两个月,用户已经创建了超 300 万个 GPTs。这次的发布主要面向 ChatGPT Plus、团队和企业用户推出。 GPT Store是什么? 通俗来说,GPT Store 类似于苹果的 App St…

实录分享 | 央企大数据平台架构发展趋势与应用场景的介绍

分享嘉宾: 孟子涵-中国华能集团信息中心平台架构师 2021年华能就与Alluxio建立了合作,共同写了整个华能统一纳管的架构方案。这个方案我认为是现在我们在央企里边比较核心的一套体系,能让全集团所有我们认为重要的数字化资源实现真正的统一集…

第 379 场 LeetCode 周赛题解

A 对角线最长的矩形的面积 模拟 class Solution { public:int areaOfMaxDiagonal(vector<vector<int>> &dimensions) {int res 0, len2 0;for (auto &x: dimensions)if (x[0] * x[0] x[1] * x[1] > len2 || x[0] * x[0] x[1] * x[1] len2 &&am…

花式反沙箱

编者注&#xff1a;本文仅供学习研究&#xff0c;严禁从事非法活动&#xff0c;任何后果由使用者本人负责。 前言 目前沙箱正成为判断恶意威胁的一种最快速和最简单的方式&#xff0c;因此反沙箱检测在实战中发挥越来越重要的作用&#xff0c;无论是从反溯源还是延长加载器寿…

Camunda Asynchronous continuations

示例一 Service public class ExceptionService implements JavaDelegate {Overridepublic void execute(DelegateExecution execution) {System.out.println(1/0);} }ACT_RU_TASK &#xff1a;明明是UserTask2完成任务了&#xff0c;ServiceTask内部出错了&#xff0c;按说事务…

什么是云服务器?云服务器的工作原理是介绍

阿里云服务器ECS英文全程Elastic Compute Service&#xff0c;云服务器ECS是一种安全可靠、弹性可伸缩的云计算服务&#xff0c;阿里云提供多种云服务器ECS实例规格&#xff0c;如经济型e实例、通用算力型u1、ECS计算型c7、通用型g7、GPU实例等&#xff0c;阿里云百科aliyunbai…

CSS 选择器全攻略:从入门到精通(上)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

Kali Linux —— 漏洞分析工具

Cisco-torch与Global Exploiter专攻Cisco漏洞 一、Cisco 工具 Kali 有许多工具&#xff0c;比如信息收集工具、密码爆破工具等等&#xff0c;还有一些可用于攻击 Cisco 路由器的工具。Cisco-torch就是这样&#xff0c;用于大规模扫描、指纹识别和利用的工具之一。 打开终端控…

10 款适用于 Mac 的最佳 OCR 软件:高质量图片识别文字OCR

我们正处在无纸化办公渗透到我们工作中的时代&#xff0c;我们经常使用数字化文件。但是&#xff0c;我们很有可能需要进一步编辑这些不可编辑或不可搜索的文件以用于不同的目的。并应用 OCR 使这些扫描文件可编辑。对于 Mac 用户&#xff0c;使用适用于 Mac 的最佳 OCR 软件通…

WXUI 基于uni-app x开发的高性能混合UI库

uni-app x 是什么&#xff1f; uni-app x&#xff0c;是下一代 uni-app&#xff0c;是一个跨平台应用开发引擎。 uni-app x 没有使用js和webview&#xff0c;它基于 uts 语言。在App端&#xff0c;uts在iOS编译为swift、在Android编译为kotlin&#xff0c;完全达到了原生应用…

DrGraph原理示教 - OpenCV 4 功能 - 边界填充

今天简单来看一下OpenCV中的边界填充 param src Source image. param dst Destination image of the same type as src and the size Size(src.colsleftright, src.rowstopbottom) . param top the top pixels param bottom the bottom pixels param left the left pixels par…

Echarts的常用API,以及常用的写法

ECharts是一款基于JavaScript的开源可视化库&#xff0c;用于构建交互式的图表和可视化数据。它提供了丰富的API用于定制图表和处理数据。下面是一些常用的ECharts API和写法的简介&#xff1a; 初始化图表容器&#xff1a; var myChart echarts.init(document.getElementBy…

基于opencv的指针式仪表的识别与读数

对于指针式仪表的识别与读数&#xff0c;可以通过以下步骤使用OpenCV实现&#xff1a; 读取图像&#xff1a;使用cv2.imread()函数读取要处理的仪表图像。 灰度转换&#xff1a;使用cv2.cvtColor()函数将彩色图像转换为灰度图像。这是因为灰度图像只有一个通道&#xff0c;便…