Coursera自动驾驶课程第7讲:Vehicle Lateral Control

在上一讲《Coursera自动驾驶课程第6讲:Vehicle Longitudinal Control》中我们了解了如何使用PID算法进行汽车纵向控制

本讲我们继续学习新的模块:汽车横向控制。具体地,我们将学习三种控制算法:Pure pursuitStanleyMPC

B站视频链接:https://www.bilibili.com/video/BV1WE411D74g?p=1


文章目录

      • 1. Introduction to Lateral Control
        • 1.1 Overview
        • 1.2 Two Types of Control Design
        • 1.3 Driving Controller
      • 2. Geometric Steering Control - Pure Pursuit
        • 2.1 Geometric path tracking
        • 2.2 Pure pursuit
      • 3. Geometric Steering Control - Stanley Controller
        • 3.1 Stanley Controller Approach
        • 3.2 Heading control & Combined steering law
        • 3.3 Case Study
      • 4. Advanced Vehicle Control Methods (难点)
        • 4.1 Overview
        • 4.2 Receding Horizon Control
        • 4.3 MPC Structure
        • 4.4 Vehicle Lateral Control

1. Introduction to Lateral Control

1.1 Overview

在设计汽车横向控制器时,通常需要进行以下三步:

定义车辆所处位置和预期路径之间的偏差。
选择一种控制设计策略,将偏差降至零,同时仍满足输入限制(如输入转向角限制等)。
考虑车辆本身的动态限制和所需的行驶特性。

下面介绍三种参考路径定义:

  • 直线段序列
  • 一系列紧密间隔的航点
  • 一系列连续的参数化曲线来定义路径。

在上述三种路径跟踪情况下,控制器都试图消除车辆与预期路径之间的偏差,并使车辆航向与路径方向对齐

在这里插入图片描述在这里插入图片描述

1.2 Two Types of Control Design

下面介绍两种类型控制器:

  • 第一类控制器是几何控制器(Geometric Controllers),常见的有:Pure pursuitStanley
  • 另一类控制器称为动态控制器(Dynamic Controllers),常见的有:MPC 控制

后面我们以自行车模型为基础来讨论汽车横向控制。

如下图所示,我们将使用线段作为参考路径,在图中以实心黑线显示。还可以看到一条平行于路径但穿过前轴中心的黑色虚线。为了进行横向控制,我们重新定义了相对于当前路径线段的航向δ\deltaδψ\psiψ

请注意,根据我们的控制器设计,我们可以在后轴中心,前轴中心或重心处放置车辆参考系。
在这里插入图片描述


1.3 Driving Controller

如上一节所述,我们将介绍两种类型误差:航向误差轨迹偏移误差

航向误差为沿路径参考点的路径方向与车辆实际航向之差。 航向误差变化率有助于我们了解航向误差如何随时间变化,并且可以从自行车模型方程中进行计算。

这里,我们介绍相对于前轴的航向误差率。对于直线段,所需的航向变化率为零,可以将其删除。 这是因为参考航向对于一条直线不是随时间变化的,并且实际上等于零。最终我们得到航向误差变化率为:
ψ˙(t)=−vf(t)sin⁡δ(t)L\dot{\psi}(t)=\frac{-v_{f}(t) \sin \delta(t)}{L}ψ˙(t)=Lvf(t)sinδ(t)

另一种类型的误差是轨迹偏移误差。定义为车辆上的参考点与所需路径上的最接近点之间的距离。其公式为:
e˙(t)=vf(t)sin⁡(ψ(t)−δ(t))\dot{e}(t)=v_{f}(t) \sin (\psi(t)-\delta(t))e˙(t)=vf(t)sin(ψ(t)δ(t))

从该方程中,我们可以看到,随着速度的增加,误差变化更快。

在这里插入图片描述在这里插入图片描述

2. Geometric Steering Control - Pure Pursuit

2.1 Geometric path tracking

几何路径跟踪控制器使用车辆运动学的几何形状和参考路径来跟踪参考路径。

几何路径跟踪控制器依赖于沿所需路径的参考点,该参考点可以是用于计算航向和轨迹偏移误差的参考点,也可以是沿路径在车辆前方一定距离处的超前点,一此处以红色显示。

在这里插入图片描述


2.2 Pure pursuit

下面我们介绍Pure pursuit。其核心思想是可以将参考点放置在路径上距车辆前方固定距离的位置,并且可以使用恒定的转向角计算与该点相交所需的转向命令。

在这种方法中,后轴的中心为车辆参考点,我们将后轴中心与目标参考点之间距离定义为ldl_dld。 车辆的车身方向与连接线之间的角度为α\alphaα
在这里插入图片描述
为了构造Pure pursuit控制器,我们再次引入瞬时旋转中心的概念。 轨迹上的目标点,后轴中心和瞬时旋转中心形成一个三角形,其半径长度为RRR,目标点和后轴中心长度为ldl_dld从几何关系以及正弦定律我们可以得出路径曲率
κ=1R=2sin⁡αld\\\kappa=\frac{1}{R}=\frac{2 \sin \alpha}{l_{d}}κ=R1=ld2sinα

现在,让我们看一下自行车模型,以计算跟踪此弧线所需的转向角
δ=tan⁡−1(2Lsin⁡αld)\delta=\tan ^{-1}\left(\frac{2 L \sin \alpha}{l_{d}}\right)δ=tan1(ld2Lsinα)

轨迹偏移误差eee在这里定义为航向矢量和目标点之间的横向距离,因此我们可以得出曲率与误差之间关系:
κ=2ld2e\kappa=\frac{2}{l_{d}^{2}} eκ=ld22e

随着误差的增加,曲率也随之增加,使车辆更快速地返回至参考路径。

该式也表明,Pure pursuit控制器以类似于比例控制的方式工作,以使用路径曲率作为控制器的输出来校正轨迹偏移误差。比例增益为2ld2\frac{2}{l_{d}^{2}}ld22。因此,随着ldl_dld的增加,比例增益减小。

我们也可以对Pure pursuit制器进行修改。 我们可以根据车辆的速度改变距离ldl_dld。 使其与车辆前进速度成正比:
ld=Kddvfl_{d}=K_{d d} v_{f}ld=Kddvf

综合以上式子,我们得到转向角和车速之间的关系:
δ=tan⁡−1(2Lsin⁡αKddvf)\delta=\tan ^{-1}\left(\frac{2 L \sin \alpha}{K_{d d} v_{f}}\right)δ=tan1(Kddvf2Lsinα)

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

3. Geometric Steering Control - Stanley Controller

3.1 Stanley Controller Approach

Stanley Controller 是一种几何路径跟踪控制器。最初是由斯坦福大学的Gabe Hoffman开发的,并以斯坦利车名字命名。其主要特点有:

  • 将车辆参考点切换到前轴中心
  • 同时考虑航向对齐和轨迹偏移误差。
  • Stanley控制器为其输出设置了上限,使输出落在最大转向角范围内。

3.2 Heading control & Combined steering law

我们先介绍下如何进行航向控制的。

在左图中可以看到轨迹偏移误差是相对于前轴测量的。 Stanley控制器通常会有以下三个需求:

  • 为了消除相对于路径的航向误差,转向角直接等于航向角δ(t)=ψ(t)\delta(t) = \psi(t)δ(t)=ψ(t)
  • 为了消除轨迹偏移误差,使用了比例控制,其增益kkk满足以下公式:δ(t)=tan−1(ke(t)vf(t))\delta(t) = tan^{-1}(\frac{ke(t)}{v_f(t)})δ(t)=tan1(vf(t)ke(t))。与误差基本成正比,与速度成反比,控制函数为反正切函数。
  • 最后,转向角会限制在一个取值范围内:δ(t)∈[δmin,δmax]\delta(t)\in[\delta_{min},\delta_{max}]δ(t)[δmin,δmax]

为了消除航向误差和轨迹偏移误差,最终得到的汽车转向角为:
δ(t)=ψ(t)+tan−1(ke(t)vf(t)),δ(t)∈[δmin,δmax]\delta(t) = \psi(t) + tan^{-1}(\frac{ke(t)}{v_f(t)}), \delta(t)\in[\delta_{min},\delta_{max}]δ(t)=ψ(t)+tan1(vf(t)ke(t)),δ(t)[δmin,δmax]

现在让我们看一下对于不同的误差系统要求的汽车转向角是多少。

对于航向误差,转向命令指向与航向误差相反的方向,从而使车辆转弯以纠正与路径未对准的情况。 例如,对于较大的航向误差,如果航向误差超过最大转向角,则控制器将会发出最大转向指令。

对于较大的轨迹偏移误差,此时反正切角将会接近π2\frac{\pi}22π。因此,我们可以将Stanley控制器输出为航向误差加上π2\frac{\pi}22π
tan⁡−1(ke(t)vf(t))≈π2→δ(t)≈ψ(t)+π2\tan ^{-1}\left(\frac{k e(t)}{v_{f}(t)}\right) \approx \frac{\pi}{2} \rightarrow \delta(t) \approx \psi(t)+\frac{\pi}{2}tan1(vf(t)ke(t))2πδ(t)ψ(t)+2π

我们讨论以下误差的变化情况。=我们代入上式,可以得到误差变化率为:
e˙(t)=−vf(t)sin⁡(ψ(t)−δ(t))=−vf(t)sin⁡(tan⁡−1(ke(t)vf(t)))=−ke(t)1+(ke(t)vf)2\begin{aligned} \dot{e}(t)=-v_{f}(t) \sin (\psi(t)-\delta(t)) &=-v_{f}(t) \sin \left(\tan ^{-1}\left(\frac{k e(t)}{v_{f}(t)}\right)\right) \\ &=\frac{-k e(t)}{\sqrt{1+\left(\frac{k e(t)}{v_{f}}\right)^{2}}} \end{aligned}e˙(t)=vf(t)sin(ψ(t)δ(t))=vf(t)sin(tan1(vf(t)ke(t)))=1+(vfke(t))2ke(t)

当跨轨偏移误差较小时,上式可以简化为:

e˙(t)≈−ke(t)\dot{e}(t)\approx-ke(t)e˙(t)ke(t)

上式最有趣的是误差变化率与速度完全无关

在这里插入图片描述在这里插入图片描述在这里插入图片描述

3.3 Case Study

下面我们来看两个仿真例子。

第一个例子,对于较大的初始轨迹偏移误差,让我们假设初始误差为5米,最大允许转向角为25度,前进速度为5m/s。
仿真结果显示了Stanley控制器如何纠正较大的轨迹偏移误差并收敛到所需路径。较大的初始误差会导致较大的转向指令,从而使车辆迅速转向行驶路径。然后,航向误差和跨轨误差项达到平衡,车辆沿直线继续朝向路径行驶。

我们还可以在不同的速度下运行相同的模拟。因此,让我们尝试2m/s,5m/s和10m/s的速度。结果显示了Stanley控制器的主要特征。在所有情况下,都可以看到朝向路径的转弯,直线前进以及路径的指数衰减。速度越高,汽车在到达路径之前行驶的距离就越远。

现在让我们看看第二个仿真例子,初始时车辆的航向误差很大
仿真结果表明航向误差已由Stanley控制器校正。首先,在纠正航向误差时,转向指令已超过其极限。然后,随着轨迹偏移误差开始增加,转向命令将继续校正汽车的行驶方向,使其与路径对齐。最后,汽车像进入指数收敛段。实际上,它具有全局稳定性功能,这意味着无论初始条件如何,控制器都将引导汽车返回原路。

然而在实际情况中,需要对Stanley控制器进行一些调整。

  • 由于速度项位于反正切内的分数的分母中,因此低速往往会导致转向命令放大。这导致方向盘剧烈晃动,这对于驾驶员的舒适性而言是不希望的。因此,为了消除此问题并提高解决方案在低速下的稳定性,可以添加了一个常数,该常数可以在现场进行调整。
  • 较高的速度下,我们存在一个问题,即转向命令需要缓慢变化以确保横向力不会过大。即使在速度上如此缩放,斯坦利在高速下的反应仍然过于激进,因此还增加了航向阻尼项。这实质上将航向误差控制部分转换为PD控制器。
  • 最后,对于具有高曲率的弯曲路径,控制器无法很好地跟踪它们,因为在几何控制器的推导中未考虑动力学。正如我们在纵向控制中看到的,通过向控制器添加前馈项,可以提高系统性能并将误差更快收敛为0。
在这里插入图片描述在这里插入图片描述在这里插入图片描述

4. Advanced Vehicle Control Methods (难点)

4.1 Overview

MPC指的是一种控制设计方法,可以在每个时间步长上以数值方式优化和解决问题

用于自动驾驶汽车的纵向和横向控制是MPC的一个常见应用。模型预测控制通常也可以称为Receding horizon approach,因为控制器会在每个时间步长基于固定的有限长度生成一个执行器信号。MPC的主要优势有:

  • MPC控制器的公式简单,只需定义目标函数和相关约束,然后使用已知的求解器对其进行优化。

  • 由于许多汽车子系统具有严格的执行器约束和多样化的性能目标,因此MPC已成为车辆控制的主要工具。 **控制器可以明确地应用于车辆及其子系统的线性或非线性模型,这意味着即使模型随时间变化或改进,也可以使用相同的方法。

当然MPC与其它控制方法相比,其缺点则是需要更多的计算资源。

在这里插入图片描述


4.2 Receding Horizon Control

在开始设计MPC控制器之前,让我们仔细研究一下Receding Horizo​​n的概念。Receding Horizon Control解决了每个时间步长上的固定大小优化问题,该问题根据目标约束和车辆的当前状态确定从当前时间到horizon结束要应用的最佳控制输入。然而,在实现中出现的一个问题是,由于优化可能需要花费一段时间,因此开始优化时的车辆状态将不同于优化完成时的车辆状态。

因此,我们必须在优化中使用预测状态来做为实际控制输入。现在我们定义一些术语符号:

  • 首先,我们定义receding horizon长度TTT
  • 然后,我们将优化初始状态设置为在ttt时刻的xxx优化结束时的预测状态。
  • 接下来,我们使用上次优化中确定的控制输入ut−1u_{t-1}ut1,在车辆从时间ttt的当前状态xt−1x_{t-1}xt1移动到ttt时刻。
  • 最后,我们应用receding horizon优化的第一时间步骤中的控制信号,并为下一个时间步骤重复该过程。
    在这里插入图片描述

4.3 MPC Structure

我们可以使用下方左图来可视化MPC结构。

我们有两个主要模块,一个是优化器模块,它是核心MPC组件,另一个是动态模型。 该模型从时间ttt减去一开始获取过去的输入和状态,并获取优化器的输出,该输出是地平线上每个时间步长的输入UUU的当前序列。 然后,该模型在下一个时间步输出预测状态,将其与参考轨迹进行比较,并作为预测误差传递到优化器中。

优化器还接收更新的约束和要使用的成本函数,这些约束可以预先确定,也可以根据运行模式的变化而变化。 优化器解决其优化问题,然后重复该过程。

现在,让我们看一下线性MPC

  • 我们使用状态空间来表示离散形式的运动模型。 未来状态xt+1x_{t+1}xt+1与当前状态xtx_txt和执行器信号utu_tut线性相关。 注意,AAABBB是系数矩阵,并且被假定为是不变的。
    xt+1=Axt+Butx_{t+1} = Ax_t + Bu_txt+1=Axt+But
  • MPC试图找到输入的控制策略UUU
    U={ut∣t,ut+1∣t,ut+2∣t,⋅⋅⋅}U = \{u_{t|t},u_{t+1|t},u_{t+2|t},···\}U={utt,ut+1t,ut+2t,}
  • 目标函数可以定义为:
    J(x(t),U)=∑j=tt+T−1xj∣tTQxj∣t+uj∣tTRuj∣tJ(x(t),U) = \sum_{j=t}^{t+T-1}x^{T}_{j|t}Qx_{j|t}+u^T_{j|t}Ru_{j|t}J(x(t),U)=j=tt+T1xjtTQxjt+ujtTRujt

在从零到非零的控制输入的状态偏差上具有二次误差,类似于最优控制理论的优化问题,并在控制性能和输入积极性之间进行权衡。 注意,矩阵Q和R称为权重矩阵,可以进行适当选择以实现特定类型的响应。

相反,如果我们需要跟踪参考信号(例如所需轨迹),则可以修改公式以包括相对于所需状态的误差增量xxx
δxj∣t=xj∣t,des−xj∣tJ(x(t),U)=∑j=tt+T−1xj∣tTQxj∣t+uj∣tTRuj∣t\delta x_{j|t}=x_{j|t,des}-x_{j|t} \\ J(x(t),U) = \sum_{j=t}^{t+T-1}x^{T}_{j|t}Qx_{j|t}+u^T_{j|t}Ru_{j|t}δxjt=xjt,desxjtJ(x(t),U)=j=tt+T1xjtTQxjt+ujtTRujt

下面我们给出其对应的优化公式,是一个具有封闭形式的解决方案,即线性二次调节器或LQR。 封闭式解决方案使用完整状态反馈,这意味着在控制响应中使用了所有状态。 LQR解决方案定义了一个控制增益矩阵KKK,该矩阵可以根据状态空间模型的AAABBB矩阵以及成本函数的QQQRRR矩阵进行计算。
min⁡U≜{ut∣tut+1∣t,…}J(x(t),U)=xt+T∣tTQfxt+T∣t+∑j=tt+T−1xj∣tTQxj∣t+uj∣tTRuj∣ts.t.xj+1∣t=Axt∣t+But∣t,t≤j≤t+T−1\min _{U \triangleq\left\{u_{t \mid t} u_{t+1 \mid t, \ldots\}}\right.} J(x(t), U)=x_{t+T \mid t}^{\mathrm{T}} Q_{f} x_{t+T \mid t}+\sum_{j=t}^{t+T-1} x_{j \mid t}^{\mathrm{T}} Q x_{j \mid t}+u_{j \mid t}^{\mathrm{T}} R u_{j \mid t}\\\quad s.t. \quad x_{j+1 \mid t}=A x_{t \mid t}+B u_{t \mid t}, \quad t \leq j \leq t+T-1U{uttut+1t,}minJ(x(t),U)=xt+TtTQfxt+Tt+j=tt+T1xjtTQxjt+ujtTRujts.t.xj+1t=Axtt+Butt,tjt+T1

在这里插入图片描述在这里插入图片描述在这里插入图片描述

现在让我们看一下非线性MPC

在更一般的情况下,其目标函数是状态和receding horizon输入的任何可微的非线性函数。 对于这样的一般优化问题,不存在封闭形式的解决方案。 因此,我们必须依靠数值优化来找到解决方案。
在这里插入图片描述


4.4 Vehicle Lateral Control

现在,让我们看一下MPC控制器在自动驾驶汽车上进行轨迹跟踪的效果。

MPC与之前介绍的反馈结构相同,但我们将油门,制动和转向命令作为回路中的低级控制器输出MPC控制器的输入,包括参考路径和速度以及每个时间步的车辆状态MPC控制器的输出是遵循所需轨迹所需的横向和纵向力。 之后低级控制器转换为相应的油门,断开和转向命令,最后,在每个时间步长上将操纵信号施加到车辆上,并通过反馈回路获得新的车辆状态。

在这里我们定义了跟踪所需轨迹的成本函数,包括最小化与所需轨迹的偏差和控制命令幅度。接下来,我们根据先前视频中开发的横向和纵向模型定义车辆的运动约束。我们还对轮胎力施加最大限制,以将其限制在线性轮胎区域内。

现在让我们看一下控制效果。

对双车道变更场景进行仿真,右图显示了带有MPC控制的模拟操纵结果,参考轨迹为蓝色,实际车辆轨迹为红色。我们可以看到,MPC控制器的跟踪性能非常好,略有滞后,但没有超调或振荡。可以看到模型预测控制器的输出(横向和纵向力)平滑变化。

同样,绘制了在双车道变更操纵期间的车辆偏航率。

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

总结,在本讲我们学习了:

  • 如何定义横向路径跟踪问题;
  • 如何将pure pursuit跟踪和Stanley控制方法;
  • MPC控制方法。

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

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

相关文章

Coursera自动驾驶课程第8讲:Basics of 3D Computer Vision

在上一讲《Coursera自动驾驶课程第7讲:Vehicle Lateral Control》中我们了解了如何对汽车进行横向控制。 本课程第一个篇章就暂时告一段落了,接下来我们开始学习新的篇章。 课程第二个篇章是状态估计和定位模块。不过在这里我做了一下调整,我…

Coursera自动驾驶课程第9讲:Visual Features Detection Description and Matching

在上一讲《Coursera自动驾驶课程第8讲:Basics of 3D Computer Vision》中我们学习了计算机视觉基本知识。 本讲我们将学习计算机视觉中的视觉特征模块。 B站视频链接:https://www.bilibili.com/video/BV1PE411D72p 文章目录1. Introduction to Image f…

Coursera自动驾驶课程第10讲:Feedforward Neural Networks

在上一讲《Coursera自动驾驶课程第9讲:Visual Features Detection Description and Matching》中我们学习了如何进行图像特征检测,特征匹配以及如何构建视觉里程计来估计相机的运动。 本讲我们将学习神经网络模块,关于神经网络或深度学习网上…

守护进程和守护线程

对于JAVA而言,一般一个应用程序只有一个进程——JVM。除非在代码里面另外派生或者开启了新进程。 而线程,当然是由进程开启的。当开启该线程的进程离开时,线程也就不复存在了。 所以,对于JAVA而言,线程是完全可以由自…

Coursera自动驾驶课程第11讲:2D Object Detection

在上一讲《Coursera自动驾驶课程第10讲:Feedforward Neural Networks》中我们学习了神经网络的基础知识,包括损失函数,梯度下降,正则化,卷积网络等。 本讲我们将学习深度学习的一个重要应用:图像目标检测。…

Coursera自动驾驶课程第12讲:Semantic Segmentation

在上一讲《Coursera自动驾驶课程第11讲:2D Object Detection》我们学习了深度学习的一个重要应用:目标检测。 本讲我们将学习深度学习的另一个重要应用:语义分割。这是图片像素级的一个重要应用。 B站视频链接:https://www.bili…

多线程知识梳理(2) - 并发编程的艺术笔记

layout: post title: 《Java并发编程的艺术》笔记 categories: Java excerpt: The Art of Java Concurrency Programming. <img src"http://upload-images.jianshu.io/upload_images/658453-a94405da52987372.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240…

Coursera自动驾驶课程第13讲:Least Squares

在上一讲《Coursera自动驾驶课程第12讲&#xff1a;Semantic Segmentation》我们学习了深度学习的另一个重要应用&#xff1a;语义分割。至此&#xff0c;本课程的视觉感知模块就介绍完了。 从本讲开始&#xff0c;我们将学习一个新的模块&#xff0c;也是本课程的第三个模块&…

Coursera自动驾驶课程第14讲:Linear and Nonlinear Kalman Filters

在上一讲《Coursera自动驾驶课程第13讲&#xff1a;Least Squares》我们学习了最小二乘法相关知识。 本讲我们将学习20世纪最著名的一个算法&#xff1a;卡尔曼滤波。具体包括线性卡尔曼滤波&#xff08;KF&#xff09;&#xff0c;扩展卡尔曼滤波(EKF)&#xff0c;误差状态卡…

详解两阶段3D目标检测网络 Voxel R-CNN:Towards High Performance Voxel-based 3D Object Detection

本文介绍一篇两阶段的3D目标检测网络&#xff1a;Voxel R-CNN&#xff0c;论文已收录于AAAI 2021。 这里重点是理解本文提出的 Voxel RoI pooling。 论文链接为&#xff1a;https://arxiv.org/pdf/2012.15712.pdf 项目链接为&#xff1a;https://github.com/djiajunustc/Voxe…

java容器类1:Collection,List,ArrayList,LinkedList深入解读

1、 Iterable 与 Iterator Iterable 是个接口&#xff0c;实现此接口使集合对象可以通过迭代器遍历自身元素. public interface Iterable<T> 修饰符和返回值方法名描述Iterator<T>iterator()返回一个内部元素为T类型的迭代器default voidforEach(Consumer<?…

无限场景开放式仿真器 PGDrive:Improving the Generalization of End-to-End Driving through Procedural Generation

本文介绍一个拥有无限场景开放式驾驶仿真器&#xff1a;PGDrive&#xff0c;通过 Procedural Generation 技术可以生成无限多的驾驶场景&#xff0c;由香港中文大学周博磊团队开发。 论文地址&#xff1a;https://arxiv.org/pdf/2012.13681.pdf 项目地址&#xff1a;https://…

java容器类2:Map及HashMap深入解读

Java的编程过程中经常会和Map打交道&#xff0c;现在我们来一起了解一下Map的底层实现&#xff0c;其中的思想结构对我们平时接口设计和编程也有一定借鉴作用。(以下接口分析都是以jdk1.8源码为参考依据) 1. Map An object that maps keys to values. A map cannot contain du…

两阶段3D目标检测网络 SIENet: Spatial Information Enhancement Network for 3D Object Detection from Point Cloud

本文介绍一篇两阶段的3D目标检测网络&#xff1a;SIENet。 这里重点是理解本文提出的 Hybrid-Paradigm Region Proposal Network 和 Spatial Information Enhancement module。 论文链接为&#xff1a;https://arxiv.org/abs/2103.15396 项目链接为&#xff1a;https://githu…

java容器类3:set/HastSet/MapSet深入解读

介绍 Set&#xff1a;集合&#xff0c;是一个不包含重复数据的集合。&#xff08;A collection that contains no duplicate elements. &#xff09; set中最多包含一个null元素&#xff0c;否者包含了两个相同的元素&#xff0c;不符合定义。 上一篇学习了Java中的容器类的一…

Bandit算法原理及Python实战

目录 1&#xff09;什么是Bandit算法 为选择而生。 Bandit算法与推荐系统 怎么选择Bandit算法&#xff1f; 2)常用Bandit算法 Thompson sampling算法 UCB算法 Epsilon-Greedy算法 Greedy算法 3&#xff09;Bandit算法Python实战 参考资料&#xff1a; 推荐系统里面有…

ava容器类4:Queue深入解读

Collection的其它两大分支&#xff1a;List和Set在前面已近分析过&#xff0c;这篇来分析一下Queue的底层实现。 前三篇关于Java容器类的文章&#xff1a; java容器类1&#xff1a;Collection,List,ArrayList,LinkedList深入解读 java容器类2&#xff1a;Map及HashMap深入解…

Waymo离线点云序列3D物体检测网络 (3D Auto Labeling): Offboard 3D Object Detection from Point Cloud Sequences

本文介绍一篇Waymo基于点云序列的3D物体检测网络&#xff1a;3D Auto Labeling&#xff0c;论文已收录于CVPR 2021。 这里重点是理解本文提出的 Object-centric Auto Labeling。 论文链接为&#xff1a;https://arxiv.org/abs/2103.05073 2021-09-02补充&#xff1a;本文作者…

Waymo自动驾驶数据集介绍与使用教程

本文将对Waymo自动驾驶数据集&#xff08;Waymo Open Dataset&#xff09;进行介绍。 论文链接为&#xff1a;https://arxiv.org/abs/1912.04838v7 项目链接为&#xff1a;https://github.com/waymo-research/waymo-open-dataset 数据集链接为&#xff1a;https://waymo.com…

Java 并发基础——线程安全性

线程安全&#xff1a;多个线程访问某个类时&#xff0c;不管运行时环境采用何种调度方式或者这些线程将如何交替执行&#xff0c;并且在主调代码中不需要任何额外的同步或协调&#xff0c;这个类都能表现出正确的行为&#xff0c;那么久称这个类是线程安全的。 在线程安全类中封…