草庐IT

自动驾驶感知——激光雷达基本概念|激光雷达点云|激光雷达的标定

yuan〇 2024-04-07 原文

文章目录

1. 激光雷达基本概念

1.1 激光雷达特点

激光探测及测距系统(Light Detection and Ranging,LiDAR)

  • 激光雷达是一种通过发射激光束探测目标的位置、速度等特征量 的雷达系统
  • 激光波段位于0.5μm-10μm,以光电探测器为接收器件,以光学望远镜为天线。

特点
• 角分辨率、距离分辨率高
• 抗干扰能力强
• 三维坐标、反射率
• 车体积小、质量轻

1.2 激光雷达测距原理

1.2.1 系统组成

1.2.2 激光雷达测距原理

TOF飞行时间法

  • 脉冲测距:通过测量激光脉冲在雷达和目标之间来回飞行时间获取目标距离的信息。 d = c ⋅ Δ t 2 d = \frac{{c \cdot \Delta t}}{2} d=2cΔt

  • 相位测距:通过测量被强度调制的连续波激光信号在雷达与目标之间来回飞行产生的相位差获得距离信息。 d = c ⋅ Δ φ 4 π f d = \frac{{c \cdot \Delta \varphi }}{{4\pi f}} d=4πfcΔφ

1.3 常见的激光雷达

1.3.1 机械旋转式激光雷达

    机械式激光雷达是指发射系统和接收系统存在宏观转动,通过不断旋转发射头,将速度更快、发射更准的激光从线变成面,并在竖直方向上排布多束激光,形成多个面,达到动态扫描并动态接收信息的目的。

1.3.2 Velodyne HDL-64E

1.3.3 固态激光雷达

  • 严格意义上是指自身不存在任何移动部件的激光雷达,如Flash型激光雷达、相控阵激光雷达。
  • 近年来,一些非完全旋转的激光雷达也被统称为“固态激光雷达”,它们具备了固态激光雷达的一般性能特点,如分辨率高、有限水平FOV(前向而不是360°)等,但这些技术方案会有一些微小的移动部件,如MEMS型激光雷达。

1.3.4 Flash型固态激光雷达

  • 激光直接向各个方向漫射,一次记录整个场景。
  • 分辨率越高,激光之间干扰越强,精度降低。

1.3.5 相控阵固态激光雷达

  • 通过控制光源阵列中各光源发光时间差,合成具有特定方向的 主光束,实现对不同方向的扫描。
  • 精度高、体积小、生产成本低,但研发成本高。

1.3.6 MEMS型固态激光雷达

  • MEMS(Micro-Electro-Mechanical System)激光雷达是指在机械旋转式激光雷达的基础上,采用MEMS微镜替代机械 式扫描单元进行扫描模式动态调整的激光雷达。
  • MEMS微镜指采用光学MEMS技术制造的,把微光反射镜与MEMS驱动器集成在一起的光学MEMS器件。

1.3.7 总览

激光雷达是当前高级别自动驾驶最主要的传感器之一,感知能力强。

1.4 激光雷达性能指标

    从传感器的角度,激光雷达的主要指标包括线束、出点数、精度、测量距离、垂直视场角、垂直角分辨率、水平视场角、水平角分辨率、出点数、通信接口等。

2. 激光雷达点云(Point Cloud)

2.1 激光雷达点云定义

    点云是激光雷达获取的三维场景信息的数据存储形式,不同于图像数据,点云由空间中一系列离散的点组成,并记录了这些点相对于激光雷达自身坐标系的三维坐标与反射率

  • 一帧点云数据(包含N个点)可表示为 { x i , y i , z i , r i } i = 1 N \{ {x_i},{y_i},{z_i},{r_i}\} _{i = 1}^N {xi,yi,zi,ri}i=1N
  • 其中 ( 𝑥 𝑖 , 𝑦 𝑖 , 𝑧 𝑖 ) (𝑥_𝑖, 𝑦_𝑖, 𝑧_𝑖) (xi,yi,zi)第个点在激光雷达坐标系下的坐标, 𝑟 𝑖 𝑟_𝑖 ri
    该点的反射率。

2.2 激光雷达点云表示方法

  • 点视图 (Point View, PV)
    原始的点云集合
  • 俯视图 (Bird’sEyeView,BEV)
    将点云量化为2D/3D网格
  • 前视图 (Range View, RV)
    将点云投影到图像平面
  • 多种视图融合
    俯视图+点视图
    俯视图+前视图

     L. Fan等人 [ 1 ] ^{[1]} [1]对这方面的介绍比较详细。PS:文末参考链接无法查看论文的话,可以选择这个链接

3. 为什么要选择激光雷达?

3.1 传感器之间的互补性

❖摄像头
★ 优点:丰富的纹理和颜色信息,适用于目标的分类
★ 缺点:3D信息的感知能力较弱,受光照条件影响较大
❖激光雷达
★ 优点:精确感知目标的3D信息,不受光照影响
★ 缺点:成本较高,量产难度大,受天气影响较大

3.2 不同级别自动驾驶系统的需求

❖ L2级:自适应巡航 + 车道保持
★ 可以采用纯视觉系统来进行目标检测和距离估记
❖ L3级:拥堵辅助,领航辅助
★ 至少配备前向的激光雷达
❖ L4级:RoboTaxi
★ 多个激光雷达提供360度视场,以及系统冗余

激光雷达在自动驾驶中可以进行物体检测、3D场景语义分割以及定位与建图。

4. 激光雷达的标定

4.1 激光雷达参数

内参
内部激光发射器坐标系与雷达自身坐标系的转换关系,厂家提供。

外参
激光雷达坐标系与车体坐标系的转换关系,需要标定。

4.2 单线激光雷达

    车体坐标系以车辆后轴中心作为原点, X v X_v Xv指向车辆的前方, Y v Y_v Yv指向车辆的左侧, Z v Z_v Zv指向车辆的上方。由于激光雷达的坐标系与车体坐标系存在一定的夹角, X l X_l Xl X v X_v Xv存在 α \alpha α的角度偏差, Y l Y_l Yl Y v Y_v Yv存在 γ \gamma γ的角度偏差,所以需要标定。

4.2.1 γ \gamma γ侧偏角的标定

     γ \gamma γ侧偏角的标定需要用到矩形板ABCD。如图所示,矩形板ABCD平行于Z轴,且位于激光雷达的前方。激光束扫描的点构成了EF直线段,EG直线段为AB的平行线。
    想要求得 γ \gamma γ侧偏角,可以利用 γ = arccos ⁡ ( l E G l E F ) = arccos ⁡ ( l A B l E F ) \gamma = \arccos (\frac{{{l_{EG}}}}{{{l_{EF}}}}) = \arccos (\frac{{{l_{AB}}}}{{{l_{EF}}}}) γ=arccos(lEFlEG)=arccos(lEFlAB)得到。 L A B L_{AB} LAB可以由矩形板的边长大小得知, L O F L_{OF} LOF已知, L O E L_{OE} LOE也可以通过激光雷达的数据得到,因此可以求得 L E F L_{EF} LEF,最后求得 γ \gamma γ侧偏角。

4.2.2 α \alpha α俯仰角的标定


    ;首先不考虑侧偏角 γ \gamma γ。激光雷达的Y轴垂直纸面向外,X轴呈如图所示方向,Z轴竖直向上。首先在1处放置一块标定板,激光雷达在标定板上扫描的位置为A,接着移动标定板置B处,过B作平行于地面的平行线,得到BC,即可求得 α \alpha α俯仰角。
    在实际过程中,需要考虑侧偏角。如图所示,在1处放置一块等腰三角形的标定板,同之前的步骤,将标定板移至2处,由图可知, ∠ F 1 E 1 D 1 \angle {F_1}{E_1}{D_1} F1E1D1 ∠ F 2 E 2 D 2 \angle {F_2}{E_2}{D_2} F2E2D2为侧倾角。
    过 D 2 D_2 D2作地面的平行线交于G点,可知 ∠ G D 2 D 1 \angle GD_2D_1 GD2D1即为要求的 α \alpha α俯仰角。易知 α = arctan ⁡ ( D 1 G D 2 G ) = arctan ⁡ ( D 1 G B 1 B 2 ) \alpha = \arctan \left( {\frac{{{D_1}G}}{{{D_2}G}}} \right) = \arctan \left( {\frac{{{D_1}G}}{{{B_1}{B_2}}}} \right) α=arctan(D2GD1G)=arctan(B1B2D1G) D 1 G = B 1 D 1 − B 2 D 2 D_1G=B_1D_1-B_2D_2 D1G=B1D1B2D2 B 1 D 1 = B 1 C 1 − C 1 D 1 B_1D_1=B_1C_1-C_1D_1 B1D1=B1C1C1D1 C 1 D 1 = E 1 D 1 C_1D_1=E_1D_1 C1D1=E1D1 E 1 D 1 = E 1 F 1 c o s ( γ ) E_1D_1=E_1F_1cos(\gamma) E1D1=E1F1cos(γ)    从而可以求得 α \alpha α俯仰角

4.3 多线激光雷达

    如图所示:
车体坐标系:
O v , X v , Y v , Z v O_v,X_v,Y_v,Z_v Ov,Xv,Yv,Zv
激光雷达坐标系:
O l , X l , Y l , Z l O_l,X_l,Y_l,Z_l Ol,Xl,Yl,Zl
    假设车体坐标系一点 P = ( X , Y , Z ) P=(X,Y,Z) P=(X,Y,Z),其在激光雷达坐标系中为 P ′ = ( X ′ , Y ′ , Z ′ ) P'=(X',Y',Z') P=(X,Y,Z),于是有以下关系: [ X Y Z ] = R [ X ′ Y ′ Z ′ ] + T \left[ {\begin{array}{ccccccccccccccc}X\\Y\\Z\end{array}} \right] = R\left[ {\begin{array}{ccccccccccccccc}{X'}\\{Y'}\\{Z'}\end{array}} \right] + T XYZ =R XYZ +T     R R R为激光雷达坐标系到车体坐标系的旋转矩阵, T T T为激光雷达坐标系到车体坐标系的平移向量

4.3.1 纸箱法

  1. 在水平地面上摆放正方体纸箱,采集激光雷达数据
  2. 获得纸箱顶点的激光雷达坐标系坐标
  3. 通过测量得到纸箱顶点的车体坐标系坐标
  4. 用纸箱顶点的坐标代入坐标变换方程,求出旋转矩阵和平移向量

4.4 相机与激光雷达联合标定

将雷达点云向图像融合
将图像像素向雷达点云融合

    通过融合的方式,可以弥补单个传感器的不足,可以更好地环境感知。因此,就需要对相机和激光雷达进行联合标定。

标定内容:标定从激光雷达坐标系到相机坐标系的空间变换关系。

    对于单线激光雷达,选择标定箱上的两个端点
    对于多线激光雷达,选择标定箱上下边沿的左右端点。    获取像素雷达点对之后,结合相机内参,求解关于旋转矩阵和平移向量的线性方程,即可标定。

参考文献

[1] L. Fan, X. Xiong, F. Wang, N. Wang and Z. Zha
ng, “RangeDet: In Defense of Range View for LiDAR-based 3D Object Detection,” 2021 IEEE/CVF International Conference on Computer Vision (ICCV), Montreal, QC, Canada, 2021, pp. 2898-2907, doi: 10.1109/ICCV48922.2021.00291.

声明

本人所有文章仅作为自己的学习记录,若有侵权,联系立删。本系列文章主要参考了清华大学、北京理工大学、哈尔滨工业大学、深蓝学院、百度Apollo等相关课程。

有关自动驾驶感知——激光雷达基本概念|激光雷达点云|激光雷达的标定的更多相关文章

  1. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  2. ruby - RuntimeError(自动加载常量 Apps 多线程时检测到循环依赖 - 2

    我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("

  3. Unity 热更新技术 | (三) Lua语言基本介绍及下载安装 - 2

    ?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------

  4. ruby-on-rails - 从应用程序中自定义文件夹内的命名空间自动加载 - 2

    我们目前正在为ROR3.2开发自定义cms引擎。在这个过程中,我们希望成为我们的rails应用程序中的一等公民的几个类类型起源,这意味着它们应该驻留在应用程序的app文件夹下,它是插件。目前我们有以下类型:数据源数据类型查看我在app文件夹下创建了多个目录来保存这些:应用/数据源应用/数据类型应用/View更多类型将随之而来,我有点担心应用程序文件夹被这么多目录污染。因此,我想将它们移动到一个子目录/模块中,该子目录/模块包含cms定义的所有类型。所有类都应位于MyCms命名空间内,目录布局应如下所示:应用程序/my_cms/data_source应用程序/my_cms/data_ty

  5. 计算机毕业设计ssm+vue基本微信小程序的小学生兴趣延时班预约小程序 - 2

    项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU

  6. ruby-on-rails - 使用 HTTParty 的非常基本的 Rails 4.1 API 调用 - 2

    Rails相对较新。我正在尝试调用一个API,它应该向我返回一个唯一的URL。我的应用程序中捆绑了HTTParty。我已经创建了一个UniqueNumberController,并且我已经阅读了几个HTTParty指南,直到我想要什么,但也许我只是有点迷路,真的不知道该怎么做。基本上,我需要做的就是调用API,获取它返回的URL,然后将该URL插入到用户的数据库中。谁能给我指出正确的方向或与我分享一些代码? 最佳答案 假设API为JSON格式并返回如下数据:{"url":"http://example.com/unique-url"

  7. ruby-on-rails - 有没有一种工具可以在编码时自动保存对文件的增量更改? - 2

    我最喜欢的Google文档功能之一是它会在我工作时不断自动保存我的文档版本。这意味着即使我在进行关键更改之前忘记在某个点进行保存,也很有可能会自动创建一个保存点。至少,我可以将文档恢复到错误更改之前的状态,并从该点继续工作。对于在MacOS(或UNIX)上运行的Ruby编码器,是否有具有等效功能的工具?例如,一个工具会每隔几分钟自动将Gitcheckin我的本地存储库以获取我正在处理的文件。也许我有点偏执,但这点小保险可以让我在日常工作中安心。 最佳答案 虚拟机有些人可能讨厌我对此的回应,但我在编码时经常使用VIM,它具有自动保存功

  8. ruby - 在 ruby​​ 中使用自动创建插入数组 - 2

    我想知道是否可以通过自动创建数组来插入数组,如果数组不存在的话,就像在PHP中一样:$toto[]='titi';如果尚未定义$toto,它将创建数组并将“titi”压入。如果已经存在,它只会推送。在Ruby中我必须这样做:toto||=[]toto.push('titi')可以一行完成吗?因为如果我有一个循环,它会测试“||=”,除了第一次:Person.all.eachdo|person|toto||=[]#with1billionofperson,thislineisuseless999999999times...toto.push(person.name)你有更好的解决方案吗?

  9. ruby-on-rails - Rails 基本 Base64 身份验证 - 2

    我正在尝试复制此GETcurl请求:curl-D--XGET-H"Authorization:BasicdGVzdEB0YXByZXNlYXJjaC5jb206NGMzMTg2Mjg4YWUyM2ZkOTY2MWNiNWRmY2NlMTkzMGU="-H"Content-Type:application/json"http://staging.example.com/api/v1/campaigns在Ruby中,通过电子邮件+apikey生成身份验证:auth="Basic"+Base64::encode64("test@example.com:4c3186288ae23fd9661c

  10. 【自动驾驶环境感知项目】——基于Paddle3D的点云障碍物检测 - 2

    文章目录1.自动驾驶实战:基于Paddle3D的点云障碍物检测1.1环境信息1.2准备点云数据1.3安装Paddle3D1.4模型训练1.5模型评估1.6模型导出1.7模型部署效果附录show_lidar_pred_on_image.py1.自动驾驶实战:基于Paddle3D的点云障碍物检测项目地址——自动驾驶实战:基于Paddle3D的点云障碍物检测课程地址——自动驾驶感知系统揭秘1.1环境信息硬件信息CPU:2核AI加速卡:v100总显存:16GB总内存:16GB总硬盘:100GB环境配置Python:3.7.4框架信息框架版本:PaddlePaddle2.4.0(项目默认框架版本为2.3

随机推荐