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

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

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


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

从传感器的角度,激光雷达的主要指标包括线束、出点数、精度、测量距离、垂直视场角、垂直角分辨率、水平视场角、水平角分辨率、出点数、通信接口等。
点云是激光雷达获取的三维场景信息的数据存储形式,不同于图像数据,点云由空间中一系列离散的点组成,并记录了这些点相对于激光雷达自身坐标系的三维坐标与反射率。
L. Fan等人 [ 1 ] ^{[1]} [1]对这方面的介绍比较详细。PS:文末参考链接无法查看论文的话,可以选择这个链接

❖摄像头
★ 优点:丰富的纹理和颜色信息,适用于目标的分类
★ 缺点:3D信息的感知能力较弱,受光照条件影响较大
❖激光雷达
★ 优点:精确感知目标的3D信息,不受光照影响
★ 缺点:成本较高,量产难度大,受天气影响较大
❖ L2级:自适应巡航 + 车道保持
★ 可以采用纯视觉系统来进行目标检测和距离估记
❖ L3级:拥堵辅助,领航辅助
★ 至少配备前向的激光雷达
❖ L4级:RoboTaxi
★ 多个激光雷达提供360度视场,以及系统冗余
激光雷达在自动驾驶中可以进行物体检测、3D场景语义分割以及定位与建图。
内参
内部激光发射器坐标系与雷达自身坐标系的转换关系,厂家提供。
外参
激光雷达坐标系与车体坐标系的转换关系,需要标定。
车体坐标系以车辆后轴中心作为原点,
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
γ的角度偏差,所以需要标定。
γ
\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
γ侧偏角。

;首先不考虑侧偏角
γ
\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=B1D1−B2D2
B
1
D
1
=
B
1
C
1
−
C
1
D
1
B_1D_1=B_1C_1-C_1D_1
B1D1=B1C1−C1D1
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
α俯仰角
如图所示:
车体坐标系:
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
X′Y′Z′
+T
R
R
R为激光雷达坐标系到车体坐标系的旋转矩阵,
T
T
T为激光雷达坐标系到车体坐标系的平移向量


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


对于单线激光雷达,选择标定箱上的两个端点
对于多线激光雷达,选择标定箱上下边沿的左右端点。
获取像素雷达点对之后,结合相机内参,求解关于旋转矩阵和平移向量的线性方程,即可标定。
本人所有文章仅作为自己的学习记录,若有侵权,联系立删。本系列文章主要参考了清华大学、北京理工大学、哈尔滨工业大学、深蓝学院、百度Apollo等相关课程。
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("
?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------
我们目前正在为ROR3.2开发自定义cms引擎。在这个过程中,我们希望成为我们的rails应用程序中的一等公民的几个类类型起源,这意味着它们应该驻留在应用程序的app文件夹下,它是插件。目前我们有以下类型:数据源数据类型查看我在app文件夹下创建了多个目录来保存这些:应用/数据源应用/数据类型应用/View更多类型将随之而来,我有点担心应用程序文件夹被这么多目录污染。因此,我想将它们移动到一个子目录/模块中,该子目录/模块包含cms定义的所有类型。所有类都应位于MyCms命名空间内,目录布局应如下所示:应用程序/my_cms/data_source应用程序/my_cms/data_ty
项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU
Rails相对较新。我正在尝试调用一个API,它应该向我返回一个唯一的URL。我的应用程序中捆绑了HTTParty。我已经创建了一个UniqueNumberController,并且我已经阅读了几个HTTParty指南,直到我想要什么,但也许我只是有点迷路,真的不知道该怎么做。基本上,我需要做的就是调用API,获取它返回的URL,然后将该URL插入到用户的数据库中。谁能给我指出正确的方向或与我分享一些代码? 最佳答案 假设API为JSON格式并返回如下数据:{"url":"http://example.com/unique-url"
我最喜欢的Google文档功能之一是它会在我工作时不断自动保存我的文档版本。这意味着即使我在进行关键更改之前忘记在某个点进行保存,也很有可能会自动创建一个保存点。至少,我可以将文档恢复到错误更改之前的状态,并从该点继续工作。对于在MacOS(或UNIX)上运行的Ruby编码器,是否有具有等效功能的工具?例如,一个工具会每隔几分钟自动将Gitcheckin我的本地存储库以获取我正在处理的文件。也许我有点偏执,但这点小保险可以让我在日常工作中安心。 最佳答案 虚拟机有些人可能讨厌我对此的回应,但我在编码时经常使用VIM,它具有自动保存功
我想知道是否可以通过自动创建数组来插入数组,如果数组不存在的话,就像在PHP中一样:$toto[]='titi';如果尚未定义$toto,它将创建数组并将“titi”压入。如果已经存在,它只会推送。在Ruby中我必须这样做:toto||=[]toto.push('titi')可以一行完成吗?因为如果我有一个循环,它会测试“||=”,除了第一次:Person.all.eachdo|person|toto||=[]#with1billionofperson,thislineisuseless999999999times...toto.push(person.name)你有更好的解决方案吗?
我正在尝试复制此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
文章目录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