热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

激光slam入门知识总结

目录说明一.开篇二.数据集三.软件框架四.前端里程计初试五.前端里程计代码优化六.传感器时间同步七.里程计精度评价八.点云畸变补偿九.建图系统结构优化十.说明学习知乎上任乾写的从

目录

  • 说明
  • 一. 开篇
  • 二. 数据集
  • 三. 软件框架
  • 四. 前端里程计初试
  • 五. 前端里程计代码优化
  • 六. 传感器时间同步
  • 七. 里程计精度评价
  • 八. 点云畸变补偿
  • 九. 建图系统结构优化
  • 十.


说明

学习知乎上任乾写的从零开始做激光slam系列,在这里总结一下收获

一. 开篇
  1. 作者给出了本系列的简单介绍,包括用的传感器,平台,写作思路等等。

二. 数据集
  1. 作者使用了KITTI数据集,在下载的过程中发现,直接翻墙从国外网站下载速度非常快。
  2. 主要是利用激光雷达数据和RTK数据做融合。
    RTK,GNSS,IMU等定位方式的精度要详细了解一下
  3. 将数据集转换成ROSBAG,然后利用rviz就能进行原始数据效果查看了。

三. 软件框架
  1. 将订阅和发布写成分开的类,同时,再按照传感器数据类型进行进一步分类
  2. 功能流程:
    (1) 接收数据放到队列中
    (2) 选出时间基本一致的数据组
    (3) 发布数据

四. 前端里程计初试
  1. 功能流程:
    (1)接收数据放到队列里
    (2)选出时间基本一致的数据
    (3)点云预处理
    清洗NAN数据
    点云稀疏化
    (4)第一帧单独处理,直接更新局部和全局地图
    (5)利用ndt匹配点云,获得单步的运动变换关系
    (6)当运动距离达到一定程度,就更新局部地图和全局地图

  2. 局部和全局地图更新流程:
    “地图”:是一个一个的点云数据帧序列
    地图:是一个大的点云数据帧,包含了20个小关键帧帧的点
    (1)更新局部地图关键帧队列,保证只有20个
    (2)把所有的点加到一个地图点云帧里
    (3)更新ndt的目标点云
    (4)更新全局地图关键帧队列,每100个关键帧,进行一次全局地图点云帧更新


五. 前端里程计代码优化
  1. 这里功能流程基本没有什么变化
  2. 除了将订阅和发布分开,不同类型的数据分开之外,也将处理方法单独列出了一些类和函数,运用了继承的方式,便于以后扩展
  3. 地图关键帧存储在了硬盘上,可以节约内存空间

六. 传感器时间同步
  1. 时间同步处理包含两个方面:
    (1)各个传感器用的时间源是一致的,kitti数据集已经处理好
    (2)通过插值的方式获得同一个时刻的数据值,这里主要是与雷达数据对齐

  2. 功能流程
    (1)接收数据放到队列里
    a. 索引:找到和激光雷达数据时间戳对齐的前后两针imu或gnss数据
    b. 插值:线性插值获得和激光雷达数据时间一致的imu/gnss数据
    c. 注意:这里处理完后deque里实际上只有一个数据!!,这里是不是损失了一些可积分位置信息
    (2)选出时间基本一致的数据
    (3)点云预处理
    a. 清洗NAN数据
    b. 点云稀疏化
    (4)第一帧单独处理,直接更新局部和全局地图
    (5)利用ndt匹配点云,获得单步的运动变换关系
    (6)当运动距离达到一定程度,就更新局部地图和全局地图

  3. 这里车辆航向角四元数插值用的是线性插值,不是球面插值


七. 里程计精度评价
  1. 只要把数据存储下来,然后调用evo命令就能对结果进行评价,有两种评价
    (1)每100米误差
    (2)累计误差

八. 点云畸变补偿
  1. 功能流程,只变化了标黄部分
    (1)接收数据放到队列里
    a. 索引:找到和激光雷达数据时间戳对齐的前后两针imu或gnss数据
    b. 插值:线性插值获得和激光雷达数据时间一致的imu/gnss数据
    c. 注意:这里处理完后deque里实际上只有一个数据!!
    (2)选出时间基本一致的数据
    (3)点云预处理
    a. 利用车辆运动信息,消除点云运动畸变,
    a. 清洗NAN数据
    b. 点云稀疏化
    (4)第一帧单独处理,直接更新局部和全局地图
    (5)利用ndt匹配点云,获得单步的运动变换关系
    (6)当运动距离达到一定程度,就更新局部地图和全局地图

  2. 这里有很多坐标系变换,速度变换的东西,可以仔细整理一下


九. 建图系统结构优化
  1. 由于模块比较多,作者重新梳理了结构:
    目前有:数据预处理,里程计,后端优化,闭环检测,显示五大模块
  2. 在之前的基础上,增加了不同的功能节点,将五大功能模块划分清楚,变成了不同的rosnode。
  3. 每一个node都有一个flow,在flow中调用核心的一些算法

十.

推荐阅读
  • 广度优先遍历(BFS)算法的概述、代码实现和应用
    本文介绍了广度优先遍历(BFS)算法的概述、邻接矩阵和邻接表的代码实现,并讨论了BFS在求解最短路径或最短步数问题上的应用。以LeetCode中的934.最短的桥为例,详细阐述了BFS的具体思路和代码实现。最后,推荐了一些相关的BFS算法题目供大家练习。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 企业数据应用挑战及元数据管理的重要性
    本文主要介绍了企业在日常经营管理过程中面临的数据应用挑战,包括数据找不到、数据读不懂、数据不可信等问题。针对这些挑战,通过元数据管理可以实现数据的可见、可懂、可用,帮助业务快速获取所需数据。文章提出了“灵魂”三问——元数据是什么、有什么用、又该怎么管,强调了元数据管理在企业数据治理中的基础和前提作用。 ... [详细]
  • 在2022年,随着信息化时代的发展,手机市场上出现了越来越多的机型选择。如何挑选一部适合自己的手机成为了许多人的困扰。本文提供了一些配置及性价比较高的手机推荐,并总结了选择手机时需要考虑的因素,如性能、屏幕素质、拍照水平、充电续航、颜值质感等。不同人的需求不同,因此在预算范围内找到适合自己的手机才是最重要的。通过本文的指南和技巧,希望能够帮助读者节省选购手机的时间。 ... [详细]
  • macOS Big Sur全新设计大版本更新,10+个值得关注的新功能
    本文介绍了Apple发布的新一代操作系统macOS Big Sur,该系统采用全新的界面设计,包括图标、应用界面、程序坞和菜单栏等方面的变化。新系统还增加了通知中心、桌面小组件、强化的Safari浏览器以及隐私保护等多项功能。文章指出,macOS Big Sur的设计与iPadOS越来越接近,结合了去年iPadOS对鼠标的完善等功能。 ... [详细]
  • OpenMap教程4 – 图层概述
    本文介绍了OpenMap教程4中关于地图图层的内容,包括将ShapeLayer添加到MapBean中的方法,OpenMap支持的图层类型以及使用BufferedLayer创建图像的MapBean。此外,还介绍了Layer背景标志的作用和OMGraphicHandlerLayer的基础层类。 ... [详细]
  • 数据结构与算法的重要性及基本概念、存储结构和算法分析
    数据结构与算法在编程领域中的重要性不可忽视,无论从事何种岗位,都需要掌握数据结构和算法。本文介绍了数据结构与算法的基本概念、存储结构和算法分析。其中包括线性结构、树结构、图结构、栈、队列、串、查找、排序等内容。此外,还介绍了图论算法、贪婪算法、分治算法、动态规划、随机化算法和回溯算法等高级数据结构和算法。掌握这些知识对于提高编程能力、解决问题具有重要意义。 ... [详细]
  • 云原生应用最佳开发实践之十二原则(12factor)
    目录简介一、基准代码二、依赖三、配置四、后端配置五、构建、发布、运行六、进程七、端口绑定八、并发九、易处理十、开发与线上环境等价十一、日志十二、进程管理当 ... [详细]
author-avatar
mobiledu2402852413
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有