激光slam学习笔记1--RTK组合惯导、激光雷达传感器一些经验知识分享

2023-05-16

前言:跟组合惯导和激光雷达打交道半年了,过程中查找学习了这两方面的资料,这里来个小结。如果有理解错误的,望大佬们不吝赐教。

一、RTK组合惯导

个人理解有两部分组成,一个提供gps信息的rtk,另外一个实时姿态信息的imu。

1、rtk

1)输出gps信号,可获取极高的定位精度(当然是在没有遮挡情况下)

2)rtk的双天线安装在车子上时,一定要进行杆臂值标定,否则不能使用的!!!至于标定方法和标定结果的验证,可以跟供应商的技术支持确认,一般有对应的用户手册

3)驱动输出的数据内容,一定弄清楚数据格式的坐标系!!!若xyz北东天输出,此时正北x为0,北朝东转(x->y)为正,角度范围为0到360度;若xyz东北天,此时正东x为0,东朝北正(x->y)为正,角度范围为(0,180),东朝南转为负,角度范围为(-180,0)。

若数据集结构含义不吃透,算法输入也就废了!!!

4)rtk数据一定要包含差分数据!!!搞个千寻帐号,接个DTU设备(里面放着一张类似手机卡东西,目的接收差分数据信号的),将差分信号接入rtk中,保证rtk数据,一定包含差分数据。

需要接入差分信息缘由:不接差分信号,rtk的精度也就米级或者分米级,接入差分信号,精度可达厘米级。对于自动驾驶而言,其重要性可想而知!

如果判断是否数据中是否包含差分信号?
一般根据厂商提供的用户手册里面有介绍对应的字段,注意不同厂商一般是不一样的,然后查看对应的topic的status的数值进行确认。使用经验来看,星网宇达的rtk,包含差分数据的数据topic的status为72;北云的rtk,包含差分数据的topic的status数值为56。

5)对于rtk驱动数据输出,可以通过如下方法验证输出的坐标系:

在导航地图中跑一段轨迹,在导航地图中,我们可以清楚车子的方位信息;根据采集到的rtk数据,对比其xyz值内容,进而确认其坐标系具体样式。

2、imu

1)组合惯导,数据输出一般标定到imu模块位置

2)imu种类可分为两类:六轴,xyz三个轴对应的角速度+线加速度;九轴,对六轴的多了三个轴的转角信息(简化理解,姿态信息,输出使用是四元数表示)

3)imu的偏置和白噪声是不固定的,受环境影响

4)imu的四元数信息,一般来自rtk双天线数据(这一点可能通过打印对比确认)

5)imu的xyz标定输出一定要搞清楚,或者一定要使用标定工具,把数据输出标到我们想要的位置上!

二、激光雷达

这里我主要参考:https://zhuanlan.zhihu.com/p/102621881这位大佬的和https://www.cxymm.net/article/weixin_41194129/112571437这位大佬的,这里会加入个人理解的内容。

1)水平视场角

激光雷达的水平视场角,激光雷达在水平旋转,旋转一周就是360°

2)垂直视场角

关键点有,一个是视场角的偏置,二是激光雷达光束的分布(个人理解为垂直分辨率)

如,激光雷达的垂直视场角是40°。
视场角的偏置为5°,也就是说激光雷达在水平方向向上的扫描角度为15°,而在水平方向往下扫描的角度为25°。
光束的分布。64线的激光雷达,40°的视场角,那么角度分辨率为40°/64=0.625°。但实际上,激光雷达的光束不是垂直均匀分布的,而是中间密,2边稀疏,还是为了达到既检测到障碍物,同时把激光束集中到中间感兴趣的部分,来更好的检测车辆。
在这里插入图片描述

3)周期采集点数

激光雷达采集的点数计算如下,首先看激光雷达的线数,比如32线,则垂直方向上会发出32个激光光束,采集32个点,而64线则是64个点,垂直方向上的点数和激光雷达的线数有关系。
因为激光雷达在旋转扫描,因此水平方向上扫描的点数和激光雷达的扫描频率有一定的关系,快的话点会较少,慢的话点会较多,这个参数也被称为水平分辨率。比如激光雷达的水平分辨率为0.2°,那么扫描的点数为360°/0.2°=1800。

根据下图,可看到扫描频率(转速)为10Hz(一秒转10圈)的时候水平角分辨率为0.2°,在扫描频率为20Hz的时候角分辨率为0.4°(扫描快了,分辨率变低了)。
在这里插入图片描述
(疑惑点,为啥频率高了,得到的点越少?由于激光雷达的采样率(可以理解为每秒能采集有效点的数量,也就是点频固定的,频率越高,每秒的帧数越多,那么一秒内的每帧获得的点个数越少。

4)有效检测距离

激光雷达的有效测量距离和最小垂直分辨率有关系,也就是说角度分辨率越小,则检测的效果越好。如图所示,2个激光光束直接的角度为0.4°,那么当探测距离为200m的时候,2个激光光束之间的距离为200m*tan0.4°≈1.4m。也就是说在200m之后,只能检测到高于1.4m的障碍物了。
在这里插入图片描述
如果需要知道障碍物的类型,那么需要采用的点数就需要更多,距离越远,激光雷达采样的点数就越少。分别是激光雷达50m和100m采样到的点数,可以看到100m的时候的点比50m稀疏不少,点数越少,就越难以识别准确的障碍物类型。

5)时间同步

激光雷达提供了时间同步硬件接口,通过GPS提供时钟源给激光雷达,可以保证激光雷达的时间和GPS的时间保持同步,也就是说激光雷达可以保证周期采样的时间非常精准。
在这里插入图片描述
通过1)-5)的分析,可知激光雷达的水平视场角为360°,垂直视场角有偏置,线束分布不均匀。激光雷达的有效采样点数和激光雷达的线数、采样频率有关系。最后激光雷达的分辨率和最小垂直分辨率有关系,并且距离越远,采样点数越稀疏。激光雷达还提供了时间同步硬件接口,来保证周期采样的时间非常精准。

6)额外补充理解

扫描频率是转速的意思,10Hz就是一秒转10圈。
激光雷达输出的图像也被称为“点云”图像,相邻两个点之间的夹角就是角分辨率。

一幅点云图像代表一帧,对应到激光雷达内部就是电机旋转一圈完成扫描。帧率即代表一秒钟内激光雷达电机旋转的圈数,也就是每秒钟完成一圈扫描的次数。
由于激光雷达的采样率是一定的,因此帧率越高,角分辨率越低;帧率越低,角分辨率越高。

采样率表示激光雷达每秒钟进行有效采集的次数,可直观理解为一秒内产生的点云数目。采样率可以通过角分辨率和帧率计算:

角分辨率0.08°时,每一帧的点云数目:360°/0.08°= 4500;

每秒10帧,则每秒的点云数目:4500×10=45000

三、小结

上面的,特别是组合惯导,都是基于工程实践得出的一些经验分享,供大家参考。这里还特别强调以下几点:

1)rtk数据一定需要包含差分信号!

2)任何传感器使用之前,一定要先标定,而且要经过验证准确!

3)数据输出的xyz坐标系的含义一定要搞清楚!

4)对应使用组合惯导+激光雷达套装,时间同步,一定要给激光雷达引线使用gps时间从而实现硬同步,尽量不使用软同步。时间同步做不好,对精度影响极大!

关于标定这一块,是十分重要的,个人感觉重要性不亚于slam框架的搭建优化

#####################
图片版权归原作者所有

不积硅步,无以至千里
好记性不如烂笔头

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

激光slam学习笔记1--RTK组合惯导、激光雷达传感器一些经验知识分享 的相关文章

  • Paxos算法

    Paxos算法 Paxos算法是一系列共识算法中的一个 其目的就是为了解决共识 一致性问题 这个Github连接中详细的列出了多种共识算法 还有一些工程实践的例子 腾讯 Zookeeper Handpoo下的一个分布式框架 Handoop是
  • Python中的推导式

    推导式 Compression 推导式 Compression 是Python语言的一大特色 相比于其他语言而言 推导式使得Python能够编辑的进行循环 创建出特定的字典 列表等可迭代对象 使用推导式可以避免代码的冗长 简化代码风格 使得
  • A* 算法 Python实现

    A 算法 Python实现 最近考试周 没时间封装的很好 代码分两部分 定义和调用部分 定义部分 span class token keyword import span numpy span class token keyword as
  • Pytorch中使用TensorBoard

    本文记录了如何在Pytorch中使用Tensorboard xff08 主要是为了备忘 xff09 Pytorch中使用TensorBoard 虽然我本身就会用TensorBoard xff0c 但是因为TensorBoard只有在写训练代
  • A*算法-Python实现

    好久没有在CSDN上发文章了 xff0c 快一年了吧 这两天重新登录了一下 xff0c 不看不知道 xff0c 一看吓一跳 xff0c 没想到访问量快13万了 之前写博客的时候 xff0c 想着把一些有用的东西写下来 xff0c 一方面是当
  • 哈夫曼压缩算法-Python实现

    前面上传了A 算法的实现 xff0c 就顺便把一起写的哈夫曼压缩也上传了吧 本文主要提供了Python版本的哈夫曼压缩算法实现 xff0c 并在此基础上提供了命令行和基于Qt的GUI用户界面 xff08 User Interface xff
  • 内存分段与内存分页:逻辑地址、物理地址、线性地址、虚拟地址

    这篇文章也是我自己的博客网站的里的文章 xff0c 我觉得这篇文章还是我觉得知识含量比较高的文章 xff0c 所以特地把它发出来看看 这篇文章写于我在写自己的操作系统JackOS的时候系统梳理了一下CPU访问内存的各种方式 xff0c 写完
  • VSCode调试C/C++项目

    最近写完了自己的操作系统 xff0c 深感有一个方便的调试环境是有多么重要 xff0c 能够提升不少开发效率 恰好最近在的技术交流群里群友在问如何搭建VSCode调试操作系统的环境 xff0c 刚考完试 xff0c 就先把这篇VSCode调
  • 误差与精度

    整理自 误差理论与数据处理 合肥工业大学 机械专业用于教授学生误差与精度概念的课程叫做 公差与测量 或者叫做 机械精度设计 xff0c 而公差或者精度的本质含义就是误差的大小 xff0c 公差越小 xff0c 误差越小 xff0c 精度越高
  • 两个类的头文件互相包含

    两个类的头文件互相包含 我做任务的时候遇到了两个类都互相包含对方的对象的问题 xff0c 本来是有错误的 xff0c 但经过我一番改动 xff0c 两个头文件互相包含同时 xff0c 每个头文件都含有令一个类的前置声明 虽然最后运行正确 x
  • 【C++ STL 容器】——vector

    概述 vector容器也被称作向量 xff0c 实现了动态的数组 xff0c 用于元素数量变化的对象数组 xff0c 算是比较常用的容器 常用函数 构造函数 vector 创建一个空vectorvector int size 创建一个vec
  • 2021-07-22

    MSP432在keil中通过CMSIS DAP下载程序出现cannot enter debug mode的解决办法 xff1a MSP432下载程序出现cannot enter debug mode 可以通过修改如下设置 Debug里面的两
  • 通信协议基础以及常用的串口通信协议

    通信协议 xff1a 串行通信和并行通信 在数据的通信方式中根据数据传输方式的不同可以分为 xff1a 串行通信和并行通信 串行通信 xff1a 串行通信是指使用一条数据线 xff0c 将数据一位一位地依次传输 xff0c 每一位数据占据一
  • Ubuntu安装ROS melodic,管理环境,创建工作空间

    一 安装ROS 1 设置源 xff1a sudo sh c 39 etc lsb release amp amp echo 34 deb http mirrors tuna tsinghua edu cn ros ubuntu 96 lsb
  • HTTP请求报文的结构组成及URL的结构组成

    HTTP请求报文 HTTP 超文本传输协议 Hypertext Transfer Protocol xff0c 简称HTTP 是应用层协议 HTTP 是一种请求 响应式的协议 xff0c 即一个客户端与服务器建立连接后 xff0c 向服务器
  • Qt之旅_001>>Qt常用窗口类之间的关系

    QApplication xff0c QGuiApplication QCoreApplication三者之间的关系 QCoreApplication处于core模块中 xff0c 为应用程序提供了一个非gui的时间循环 xff1b QGu
  • GPIO相关介绍

    文章目录 GPIO概念TXD与RXD GPIO的使用注意STM32IO口哪些兼容5V一定不要接超过5V的电压默认不能做输出的GPIO GPIO硬件原理图GPIO地址 GPIO的八种工作模式浮空输入带上拉输入带下拉输入模拟输入开漏输出推挽输出
  • STM32的常用C语言

    文章目录 一些被坑了的注意点 int16 define结构体与共用体指针 C语言发展史C语言概述C90 标准C99标准C11标准 C编译o代替c 条件语句else ifdo while 变量定义一个字符串字符串结尾 定义一个字符串数组sta
  • STM32应用霍尔转速传感器基于输入捕获

    这里我用通用定时器3的通道1来测量转速 霍尔转速传感器基本介绍霍尔传感器分类和原理关于为什么选用开关型常开PNP型霍尔传感器 STM32程序实现程序介绍程序源码TIM3 CAP HTIM3 CAP H解读TIM3 CAP CTIM3 CAP
  • Android so库开发——使用Studio生成自己的so库(一)

    一 创建Native项目 1 新建 Native 项目 1 xff09 新建项目 选择最下面的 Native C 43 43 下一步即可 2 xff09 填写项目信息 3 xff09 选择C 43 43 版本可以直接选择默认 2 下载并配置

随机推荐

  • C语言实现线性回归求斜率

    2020 11 22 修改 span class token comment 线性回归求斜率 注意数据类型 参数 count 数据个数 数组行 列 的个数 数组的行列数目相等 参数 dataCol X 数据的列数据 参数 dataRow Y
  • 【C语言】详解位域定义与使用

    位域的定义 span class token keyword struct span span class token class name bit span span class token punctuation span span c
  • C语言实现MQTT协议(一)协议讲解

    MQTT介绍 MQTT是一个客户端服务端架构的发布 订阅模式的消息传输协议 它的设计思想是轻巧 开放 简单 规范 xff0c 易于实现 这些特点使得它对很多场景来说都是很好的选择 xff0c 特别是对于受限的环境如机器与机器的通信 xff0
  • 【STM32】HAL库-外部中断

    外部中断框图 产生中断 硬件触发外部中断 配置中断屏蔽寄存器中的屏蔽位 xff0c 允许该外部中断请求 通过AFIO EXTICRx配置GPIO线上的外部中断 事件 xff0c 必须先使能AFIO时钟 选择外部中断的触发边沿 xff0c 上
  • 【STM32】HAL库-系统滴答定时器SysTick

    SysTick定时器被捆绑在NVIC中 xff0c 是一个简单的定时器 xff0c 对于CM3 CM4内核芯片 xff0c 都有Systick定时器 Systick定时器常用来做延时 xff0c 或者实时系统的心跳时钟 这样可以节省MCU资
  • 【STM32】HAL库-串口USART

    USART简介 通用同步异步收发器 USART 提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的外部设备之间进行全双工数据交换 USART利用分数波特率发生器提供宽范围的波特率选择 一个波特率寄存器 USART BRR xff0c
  • 【STM32】HAL库-通用定时器

    简介 通用定时器是一个通过可编程预分频器驱动的16位自动装载计数器构成 它适用于多种场合 xff0c 包括测量输入信号的脉冲长度 输入捕获 或者产生输出波形 输出比较和PWM 使用定时器预分频器和RCC时钟控制器预分频器 xff0c 脉冲长
  • 【STM32】HAL库-SPI

    3线全双工同步传输 带或不带第三根双向数据线的双线单工同步传输 8或16位传输帧格式选择 主或从操作 支持多主模式 8个主模式波特率预分频系数 最大为fPCLK 2 从模式频率 最大为fPCLK 2 主模式和从模式的快速通信 主模式和从模式
  • 【STM32】标准库-以太网外设-LAN8720A-LWIP-无操作系统

    TCP IP模型 TCP IP 只有四个分层 xff0c 分别为应用层 传输层 网络层以及网络访问层 xff08 物理层 xff09 实际上 xff0c 还有一个 TCP IP 混合模型 xff0c 分为五个层 它实际与 TCP IP四层模
  • 【STM32】标准库-LTDC-DMA2D

    LTDC STM32F429 系列芯片内部自带一个 LTDC 液晶控制器 xff0c 使用 SDRAM 的部分空间作为显存 xff0c 可直 接控制液晶面板 xff0c 无需额外增加液晶控制器芯片 STM32 的 LTDC 液晶控制器最高支
  • 【STM32】HAL库-以太网外设-LAN8720A-LWIP-无操作系统

    开发环境 KEIL MDK ARM 5 27MCU STM32F429IGT6PHY IC LAN8720ALWIP LWIP2 1 2STM32CUBEMX 6 6 1HAL V1 27 1 LAN8720A使用RMII接口与STM32的
  • git学习

    常用命令 查看当前文件夹下的文件与文件夹 xff1a ls ll 进入当前文件夹下的user文件夹 xff1a cd user 查看当前文件夹下的test txt文件 xff1a cat test txt 返回上一级目录 xff1a cd
  • 电赛专题---一.概述【电赛简介 /信号类需要准备什么?/怎么才能打好电赛?】

    1 电赛简介 全国大学生电子设计竞赛 xff08 National Undergraduate Electronics Design Contest xff09 是教育部和工业和信息化部共同发起的大学生学科竞赛之一 xff0c 是面向大学生
  • Postman安装

    1 官网下载 下载链接地址 xff1a https www postman com downloads 点击Download the App 根据自己的电脑以及需求选择对应的32位或者64位的版本 2 双击安装包 xff0c 不用任何操作
  • UART串口通信

    串口是 串行接口 的简称 xff0c 即采用串行通信方式的接口 串行通信将数据字节分成一位一位的形式在一条数据线上逐个传送 xff0c 其特点是通信线路简单 xff0c 但传输速度较慢 因此串口广泛应用于嵌入式 工业控制等领域中对数据传输速
  • Java第四课数据类型(二)

    一 变量类型 1 字节型 byte 2 整型 xff08 1 xff09 int 整型 4字节 xff08 2 xff09 show 短型 2字节 xff08 3 xff09 long 长型 8字节 3 浮点型 xff08 1 xff09
  • ESP32蓝牙配网

    注意 menuconfig 配置 xff08 必须打开蓝牙我这是C2所以使用NimBLE xff09 可以直接从demo的配置文件拷贝 Component config gt Bluetooth gt NimBLE BLE only Com
  • [C#] UDP协议 常用简单的代码(基于UdpClient类)(Thread实现)

    目录 说明1 消息发送端2 消息接收端 说明 在使用 C 开发Winform WPF等富客户端应用程序时 xff0c 有时会有 进程 之间 相互通信 的需求 下面是一种能够实现Udp 消息收发 常用且较为简单的 C 代码 使用注意 xff1
  • 掌控板OLED显示

    掌控板OLED显示 OLED显示文本内容 需要先将显示清空 xff0c 然后将想要显示的内容放在里面 xff0c 最后放入oled显示生效 源代码如下 xff1a span class token keyword from span mpy
  • 激光slam学习笔记1--RTK组合惯导、激光雷达传感器一些经验知识分享

    前言 xff1a 跟组合惯导和激光雷达打交道半年了 xff0c 过程中查找学习了这两方面的资料 xff0c 这里来个小结 如果有理解错误的 xff0c 望大佬们不吝赐教 一 RTK组合惯导 个人理解有两部分组成 xff0c 一个提供gps信