EM planner 论文阅读

news2024/12/28 20:41:52

论文题目:Baidu Apollo EM Motion Planner

0 前言

在这里插入图片描述
EM和Lattice算法对比

EM plannerLattice Planner
参数较多(DP/QP,Path/Speed)参数少且统一化
流程复杂流程简单
单周期解空间受限简单场景解空间较大
能适应复杂场景适合简单场景

1 摘要

基于百度Apollo平台提出的一种实时运动规划系统,该规划系统包括顶层的多车道和其中的单车道自动驾驶:
(1)系统顶层是一种多车道策略,通过并行计算车道级别轨迹来处理车道变更场景
(2)在车道轨迹生成器内部,通过迭代的方法解决基于Frenet坐标的路径规划和速度规划
(3)针对路径和速度规划,提出了动态规划DP与基于样条的二次规划QP相结合的方法,构造了一个可扩展且易于调整的框架,同时处理交通、障碍物决策和平滑度问题
该规划器可扩展至高速公路和城市低速驾驶场景

2 Introduction

在这里插入图片描述
(1)高精地图提供了任何人都可以访问的高精地图
(2)感知和定位模块提供了动态环境中必要的信息
(3)运动规划模块考虑生成一条安全平滑的轨迹再交由汽车的控制模块去执行
(4)运动规划以安全第一为原则,遵循各种规则
(5)对于规划的覆盖范围:至少提供8秒或者200米的运动规划轨迹,算法的反应时间必须在100ms(人是300ms反应时间)内做出反应
(6)必须设有安全应急模块,人为操控作为最后一道保障
(7)除了安全以外,乘客的体验感也很重要,舒适度主要取决于轨迹的平滑性

EM planner是Apollo面向L4的实时运动规划算法,该算法通过顶层多车道策略,选择出一条参考线,再根据这条参考线,在Frenet坐标系下,进行车道级的路径和速度规划,规划主要通过DP和基于样条的QP实现。EM planner充分考虑了无人车安全性、舒适性、可扩展性的需求,通过考虑交通规则、障碍物决策、轨迹平滑性等要求,可适应高速公路、低速城区的规划需求。通过Apollo仿真和在环测试,EM Planner算法体现了高度的可靠性,和低耗时性。

2.1 多车道策略

对于L4级别的无人驾驶,变道策略是必须的。常见的办法就是开发一种搜索算法,可以计算所有可能的车道上的代价函数,然后选择代价最低的一条轨迹
该方法一些弊端:
(1)搜索空间因多车道而增大,导致计算量增大
(2)每个车道的交通规则不同,很难在同一框架下应用相同的算法的代价函数。
(3)应考虑避免突然变道的轨迹稳定性
遵循一致的道路驾驶规则是很重要的,以便其他驾驶员知道自动驾驶汽车的驾驶意图。

通常情况下,多车道策略应涵盖主动和被迫换道的情况。主动车道变换是routing模块因为要到达最终目的地而发出的换道请求。被动换道时因为当前车道被动态环境阻挡时汽车的自主行为。在主动和被动换道中,我们的目标是提供一个安全、平稳、成功率高的车道变换策略。因此提出了一个并行框架来处理主动和被动的环道对于候选车道,所有障碍物和环境信息都投影到Frenet框架上。然后,将交通规则与车道级别的策略绑定。然后在此框架下,每个候选车道基于规划器都生成一条最佳轨迹。最后,进行多车道轨迹决策确定一个最佳车道。

2.2 路径-速度(Path-Speed)迭代算法

在运动规划中,最优性和效率都是很重要的。因此许多自动驾驶运动规划算法是在Frenet框架下的SLT图,并且借助于参考线降低规划的维度。在Frenet下找到最优的轨迹本质上是三维空间约束优化问题。因此有两种类型方法:直接三维空间优化方法路径速度解耦法
(1)直接三维空间方法:尝试使用轨迹采样或Lattice(晶格)搜索在SLT中找到最佳轨迹。这种方法受到搜索复杂度的限制,搜索复杂度随着空间和时间搜索分辨率的增加而增加。为了满足时间消耗要求,必须在增加搜索网格大小或采样分辨率上做出折中。因此,所产生的轨迹是次优的
(2)路径-速度解耦法是分别将路径规划和速度规划分开。路径规划通常考虑静态障碍物,然后,基于生成的路径产生速度曲线。当出现动态障碍物时,路径-速度分解方法可能不是最优的,但是,因为路径规划和速度规划是分离的,因此该方法在路径和速度上都有很大的灵活性。

EM planner迭代优化路径和速度,在路径规划器中,上一周期的速度曲线被用来估计和迎面来的低速动态障碍物的影响。然后,将生成的路径送到速度规划器以评估最佳速度曲线。对于高速动态障碍物,EMPlanner出于安全考虑,更倾向于变道躲避而不是接近(nudge)。

EM planner 迭代策略可以帮助解决路径-速度分解框架下的动态障碍

2.3 决策和道路规则

在EM Planner中,决策和交通规则是两种不同的约束
交通规则是硬约束,不能被改变,一些障碍物属于软约束,可以协调。对于决策模块来说,一些决策方法考虑的是数值上的最优解,也有同时进行规划和决策。
在百度Apollo EM planner中,先做决策再做规划。决策过程意在于明确道路并缩小轨迹规划的搜索空间来寻找最优的轨迹。许多包含决策的规划器尝试让汽车自我决策生成相应的状态。这些方法进一步被分为手写决策基于模型的决策。手写方式有局限性,不够灵活。基于模型的方法将汽车状态离散,并使用数据驱动方式来调整模型。

针对L4级别的自动驾驶,决策模块应具有可扩展性和可行性。可扩展是场景表达能力。在多障碍时,很难通过有限的自车状态集准确的描述决策行为。出于可行性考虑,意思是所生成的决策应包括一个可行的区域,自车可以在该区域内进行动态限制。但是,手写决策和基于模型的决策都不会产生无障碍轨迹来验证可行性。

在EM Planner的决策步骤中,以不同的方式描述行为。
(1)通过一个粗略可行的轨迹来描述汽车的移动意图。这条轨迹也可以用来估计与障碍物之间的交互,即便情景变得更加复杂,这种基于可行的轨迹的决策也是可扩展的。
(2)规划器还将基于轨迹生成凸的可行空间,用来平滑样条曲线参数。基于二次规划QP平滑样条曲线求解器可用于生成遵循该决策的更平滑的路径和速度曲线。这保证了可行且平滑的解决方案。

3 多车道策略的EM Planner框架

Apollo EM Planner的整体架构
在这里插入图片描述
在顶层的数据中心,所有来源的信息都被收集和同步。
(1)采集数据后,参考线生成器会生成一系列携带交通规则信息和障碍物信息的参考线。这个过程要基于从Routing模块的导航信息和HD地图。
(2)在运动规划中,先构造Frenet框架,在框架中构建车辆与周围环境的关系。
(3)将构建的关系传递给规划器。规划器模块执行速度和路径规划。
(4)在路径规划过程中,周围环境的信息被投影到Frenet框架中(E-step)。然后基于投影的信息产生一条平滑的路径(M-step)。
(5)速度规划也是如此。速度优化过程中,一旦路径优化器生成了一条平滑的路径,障碍物就会投影到ST图中(E-step),随后,速度优化器将生成平滑的速度曲线(M-step)
(6)结合路径和速度曲线,我们将获得指定车道的平滑轨迹。所有车道级别的最佳轨迹都将发送到参考线轨迹决策器。根据当前的汽车状态,法规和成本,最后将路径和速度结合获得一条平滑的轨迹。最后一步将所有得到的轨迹发送到参考线决策器,根据当前汽车的状态、法规和每条轨迹的代价,轨迹决策器将选择最优的轨迹交给汽车执行

4 车道级别的EM Planner

车道级别优化,如图所示车道级别规划的路径-速度EM迭代。迭代过程包括两个E-step和两个M-step,轨迹信息将在规划周期之间迭代。
加粗样式在这里插入图片描述
(1)在第一个E-steps中,动态和静态障碍物都被投影到车道Frenet坐标系下。静态障碍物会直接从笛卡尔坐标系转换到Frenet坐标系,而动态障碍物的信息则以其运动轨迹来描述。在Apollo框架中,可以预测动态障碍物的移动轨迹。通过上一帧的预测信息,和自车的运动信息,可以估算自车和动态障碍物在每个时间点的交互情况,轨迹重叠的部分会被映射到Frenet坐标系中。另外,动态障碍物的出现会最终导致自车做出避让的决策。因此,出于安全考虑,SL投影只考虑低速和来向障碍物,而对于高速的动态障碍物,EM Planner的平行变道策略会考虑这种情景。
(2)在第二个E-steps中,基于生成的路径在ST坐标系下,所有障碍物(包括高速、低速和即将到来的障碍物)都将被估计,生成速度曲线。如果障碍物轨迹和已经规划的路径重叠,那么将在ST坐标系下对应区域将会再重新生成。
(3)在两个M-steps中,通过动态规划和二次规划生成路径和速度曲线。尽管我们将障碍物投影到SL和ST坐标系下,但是最优的路径和速度解仍在非凸空间中。因此,先使用动态规划获得一个粗略解,同时,这个解可以提供避让、减速、超车等障碍物决策。通过这个粗略的解,可以构建一个凸包,然后使用基于二次规划的样条优化器来求解。


(1) E-step SL和ST投影
SL投影

SL投影是基于类似于G2平滑参考线(曲率导数连续)。在笛卡尔空间中,将障碍物和车的状态以及曲率和曲率的导数转换到Frenet坐标系中。由于静态障碍物的位置不会随着时间改变,因此转换很简单。对于转换动态障碍物,我们需要借助上一个周期的轨迹来实现把上一个周期的运动轨迹被投影到Frenet坐标系上,以提取状态方向的速度曲线。给定确定的时间就会估计出汽车状态的坐标。估计的汽车状态坐标将会帮助估计动态障碍物的影响。一旦汽车状态坐标同时与障碍物轨迹发生交叉时,SL地图上的阴影区域将被标记。在此,交叉区域被定义为汽车与障碍物的重叠区域。
在这里插入图片描述

如图所示,从预测模块估计的迎面而来的动态障碍物和相应的轨迹被标记为红色,小车标记为蓝色。首先将迎面而来的动态障碍物的轨迹随时间离散成若干个轨迹点,然后将这些轨迹点投影到Frenet坐标上。一旦我们发现自车的位置坐标与投射的障碍点有交互作用,重叠区域(图中紫色部分)将在Frenet坐标中标记出来

ST投影

ST投影可以帮助我们评估自车的速度曲线。当路径优化器在Frenet坐标中生成光滑的路径曲线后,与自车有交互的静态障碍物及动态障碍物的轨迹都将被投影在路径上。同理,这种交互也定义为包围盒的重叠。

如图,红色区域表示在2s处距离自车40m远切入规划路径的动态障碍物ST信息,绿色表示在自车后的动态障碍物ST信息,M-step将会在剩下的区域找到可行光滑的最优解。
在这里插入图片描述

(2) M-Step DP Path

M-step求解Frenet坐标系下的最优路径规划,实际上在一个非凸的区间(从左和从右避让是两个局部最优情景)就是找到一个最优的 l = f ( s ) l=f(s) l=f(s)方程。主要包括两步:基于动态规划的路径决策基于样条的路径规划
基于动态规划的路径步骤提供一条粗略的路径信息,可以带来可行通道和避障决策。如下图所示,包括Lattice采样,代价函数,动态规划搜索
在这里插入图片描述
(1)Lattice采样
Lattice采样器基于Frenet坐标系,如下图,首先在车辆之前对多行Lattice采样。不同行之间的点通过五次多项式来平滑连接。行之间的间隔取决于速度,道路结构,变换车道等。该框架允许根据场景自定义采样策略。
在这里插入图片描述
比如,车道变换的采样间隔可能比当前车道行驶更长。此外,出于安全考虑,路径总长可以达到200m或者覆盖8s的行驶长度
(2)代价函数
构造完Lattice,通过代价函数的总和来评估每一条路径。使用SL投影得到的信息结合交通规则、汽车动力学模型去构建函数。总的代价是平滑度、避障和车道代价函数的线性组合。
每段 Lattice (晶格) 路径的代价通过光滑程度、障碍物避让、车道代价来评价:
在这里插入图片描述
光滑程度smooth用以下方程来衡量
在这里插入图片描述
一阶导表示朝向偏差,二阶导表示曲率,三阶导表示曲率导数
障碍物的代价由以下方程给出,方程中的d由自车bounding box到障碍物bounding box的距离表示。
在这里插入图片描述
C n u d g e C_{nudge} Cnudge定义为单调递减函数,处于安全考虑, d c d_c dc设置保留缓冲区,可根据情况微调 d n d_n dn范围, C c o l l i s i o n C_{collision} Ccollision是碰撞代价函数。
车道代价函数包括两个部分:参考线代价和车道代价参考线定义为周围没有障碍物时的理想路径,通常这条线提取的是道路中心线。车道代价函数通常被道路边界决定,道路外的路径点将受到很高代价的惩罚:
在这里插入图片描述
最终总的路径代价函数包含平滑度、障碍和车道代价。然后边缘代价会用于通过动态规划去选择最低成本的候选路径,候选路径也将确定障碍物决策。

(3) 样条QP路径(M-Step)

样条QP路径步骤是对动态规划路径的改进,在动态规划路径中,会根据所选的路径生成可行的走廊。然后基于样条QP在该走廊生成一条平滑路径,如下图所示:
在这里插入图片描述
通过QP求解器求解具有线性约束的目标函数生成最优的QP路径,如下图所示:
在这里插入图片描述
QP路径的目标代价函数是平滑度代价和引导线代价的线性组合。该步骤中的引导线是动态规划挑选出来的路径。引导线提供了避开障碍物的估计值。在数学上QP路径步骤优化以下函数:
在这里插入图片描述
g ( s ) g(s) g(s)是动态规划的结果。 f ′ ( s ) , f ′ ′ ( s ) , f ′ ‘ ′ ( s ) f^{'}(s),f^{''}(s),f^{'‘'}(s) f(s),f′′(s),f(s)分别表示朝向、曲率和曲率的导数。该目标函数描述了避开障碍物和平滑度之间的平衡

QP路径中的限制条件包含了边界约束条件动力学可行性。这些约束都会施加在每个s ss处。为了提取边界约束,提取各状态点的可行区间。在EM Planner中,车辆被看成自行车模型。因此仅仅提供 l = f ( s ) l=f(s) l=f(s)的范围是不够的,因为车的方向也很重要
如下图,为了保持边界约束的凸包性和线性,在汽车的前后两端分别添加两个半圆,其中前轮到后轮的中心距离为 l f l_f lf和车辆宽度为 w w w
在这里插入图片描述
车的左前角的横向位置表示:
在这里插入图片描述
θ \theta θ是汽车和道路状态方向之间的航向角,可用下面的不等式进一步近似的线性约束:
在这里插入图片描述
类似地,线性优化剩下的三个角度。线性约束足够好是因为 θ θ θ通常很小( θ < π / 12 θ < π / 12 θ<π/12)。

f ′′ ( s ) f ^{′′}(s) f′′(s) f ′ ′ ′ ( s ) f ^{′′'}(s) f(s)的区间限制可表示为动力学约束,因为曲率与曲率导数有关,除了边界约束外,生成的路径还可以匹配汽车的横向初始位置和导数 ( f ( s 0 ) , f ′ ( s 0 ) , f ′′ ( s 0 ) ) (f (s_0),f ^{′}(s_0),f ^{′′}(s_0)) (f(s0),f(s0),f′′(s0))。由于所有约束相对于样条曲线参数都是线性的,因此可以使用二次规划求解器来快速解决问题

(4) DP速度优化器(M-Step)

M-Step速度规划器在ST图里面生成一个速度曲线,该速度曲线表示为相对于时间 S ( t ) S(t) S(t)的状态函数。与路径规划器相似,在ST图上寻找最优速度曲线也是一个非凸问题,所以采用DP与QP相结合的方法在ST图上寻找一个光滑的速度曲线
如下图所示,在QP速度时采用DP生成的速度曲线作为引导线,利用可行走廊生成凸域。
在这里插入图片描述
如下图,DP速度规划步骤包括代价函数,离散ST图网格和DP搜索。生成分段线性速度曲线、可行走廊、障碍物速度决策。
在这里插入图片描述
具体步骤,障碍物信息首先在ST图上离散成网格。将 ( t 0 , t 1 , . . . , t n ) (t_0,t_1,...,t_n) (t0,t1,...,tn)表示为在时间轴上具有间隔 d t dt dt的等距评估点。分段线性速度曲线在网格上表示为 S = ( s 0 , s 1 , . . . , s n ) S=(s_0,s_1,...,s_n) S=(s0,s1,...,sn)。此外,利用有限差分法对导数进行逼近。
在这里插入图片描述
目标是在ST图中优化一个带有约束的代价函数。准确说,DP速度优化器的代价:
在这里插入图片描述
第一项是速度保持代价,表示当没有障碍物或者没有红绿灯时,车辆应按照指定的速度行驶。 V r e f V_{ref} Vref描述的是参考速度,参考速度由道路速度限制、曲率和其他交通规则来确定。g函数被用来对小于或者大于 V r e f V_{ref} Vref值施加不同的惩罚。最后一个 C o b s C_{obs} Cobs描述了总障碍物代价,对车辆到所有的障碍物距离进行评估,确定总障碍物代价。

动态规划搜索空间必须在动力学约束范围内,包括加速度、加加速度 j e r k jerk jerk和单调性约束。因为我们要求生成的轨迹在道路上不执行倒车的操作,只能在泊车或者其他指定情况下执行倒车。搜索算法是向前的,基于车辆动态约束的一些必要修剪也被应用以加速该过程

(5) QP速度优化器(M-Step)

由于分段线性速度曲线不能满足动力学要求,需要用QP来解决这个问题。如下图,样条QP速度优化器包括三个部分:代价函数线性约束条件样条QP求解器
在这里插入图片描述
代价函数这样表示:
在这里插入图片描述
第一项是DP速度参考线 S r e f S_{ref} Sref和最后需要生成 S S S之间的距离。加速度和 j e r k jerk jerk是速度曲线平滑度。因此,目标函数是为了平衡引导线和平滑度。

QP速度优化器的限制条件包括了边界限制、初始速度和加速度匹配的约束:
在这里插入图片描述
第一个约束是单调性,第二、第三和第四、第五个约束是来自交通规则和车辆动力学约束的要求。在完成代价函数和约束后,QP求解器将生成一条平滑可行的速度曲线,如下图所示结合路径曲线,EM规划器将给控制模块生成一条平滑的轨迹。
在这里插入图片描述

(6)求解二次规划问题笔记

出于安全的考虑,我们评估了大概100个不同位置或时间点的路径和速度。约束的数量超过600。对于选择所需的路径和速度优化器,发现五项多项式是比较合适的。样条曲线包括3到5个多项式,大约有30个参数。因此,二次规划问题有相对较小的目标函数,但约束条件较多。因此,主动设置QP求解器有助于解决该类问题。除了加速二次规划求解外,我们还将上一个循环的计算结果作为hot start(热启动)。QP问题平均可以在3ms内解决,满足了我们对时间消耗的需求。

(7)求解DP和QP非凸问题笔记

DP和QP在非凸领域都有各自的局限性。DP和QP的结合将充分利用两者的优点,以达到最理想的解决方案。

  1. DP:算法依赖于一个采样步骤来生成候选解。由于处理时间的限制,采样网格限制了候选样本的数量。有限网格内的优化会得到一个粗糙的DP解。换句话说,DP不一定能在所有的场景下都取得最优解。例如,DP求出从左侧避开障碍物的路径,但不能选择具有最佳距离的路径。
  2. QP:相反,QP是基于凸域生成解。如果没有DP步骤的帮助,它是不可用的。例如,如果一个障碍物在车辆前面,QP需要一个决策,例如从左变道,从右变道,跟随或者超车,来生成约束。随机或者基于规则的决策很容易使QP陷入失败或者局部极小值。
  3. DP+QP:DP+QP算法将两者的局限性降到最低:(1)EM规划器首先用DP在网格内搜索,以求得粗略的解(2)DP的结果被用于生成凸域并引导QP(3)QP被用于在凸域内寻找全局最优解。

5 Case Study

虽然大多数高级的规划算法都是基于重决策的,但EM planner是一个基于轻决策的规划器。虽然基于重决策的算法,或者依赖规则的算法容易被解释。但是缺点也很明显:可能被困在角落(陷入局部最优解的频率与限制条件的复杂性和数量密切关),并不总是最优的。如下的案例说明轻决策算法的优点。这些案例都是在百度很多的重决策规划模块中的日常测试中暴露出来的,并最后由轻决策解决。
在这里插入图片描述
如图所示,EM规划器如何在规划周期和迭代周期之间迭代以获得最佳轨迹。

当障碍物进入到规划的路径如何生成轨迹。假设车辆的速度为10m/s,并且有一个动态障碍物以10m/s的速度朝我们移动,EM规划器将按照以下步骤迭代生成路径和速度曲线。

(1)历史规划(图15a),在历史规划速度曲线中,在动态障碍物进入前,车辆以10m/s的恒定速度直线前进;
(2)路径曲线的迭代(b),这一步中,速度曲线以10m/s的速度从原始曲线巡航。根据该速度推算,车子和动态障碍物将在s=40m处相撞,因此,避免该障碍物的最佳方法是在s=40m处从右侧躲避。
(3)速度曲线迭代(c),从步骤1开始,根据从右侧避开的路径曲线,主车辆根据其与障碍物的相互作用来调整其速度。因此,如乘客可能期望的,当以较慢的速度通过障碍物时,主车辆将减速到5 m/s。
(4)路径曲线迭代2(d),在新的速度曲线下,车辆不会在s=40m处通过障碍物,而是在s=30m处通过。因此应躲避障碍物的路径更新为一个新的路径,以使躲避的距离最大化为s=30。
(5)速度曲线迭代2(e),在新的路径曲线下,在s=30m处执行而不再需要在s=40m处进行减速。新的速度曲线显示,车辆可以在s=40处加速,在s=30处仍然能平稳通过。

因此,基于这四个步骤生成的最终轨迹整体过程是:在s=30处缓慢躲避障碍物,然后车辆通过障碍物再加速,这才是人类驾驶员在这种情况下可能的操作。规划并不一定要始终执行四个步骤。它根据不同的场景可以采用更少或者更多的步骤。一般来说,环境越复杂,可能需要的步骤就越多。

6 计算性能

由于将三维状态横向速度问题分解为状态横向速度和状态速度两个二维问题,极大降低了EM Planner的计算复杂度。因而具有很高的规划效率。假设我们有n个障碍物、M条候选路径和N条候选速度曲线,则该算法的计算复杂度为O(n(M+N))。

7 结论

EM Planner是一个基于轻决策的规划算法。与其他基于重决策的算法相比,Em规划器的优势在于能够在复杂的多障碍场景下执行。当基于重决策的方法试图预先确定如何处理每个障碍物时,困难是显而易见的:
(1)很难理解和预测障碍物如何与主车相互作用,因此它们的跟随运动难以描述,因此很难被任何规则考虑
(2)当多个障碍物阻塞道路时,无法找到满足所有预定决策的轨迹概率大大降低,从而导致规划的失败

自动驾驶汽车的一个关键问题是对安全性和通过性的挑战。严格的规则增加了汽车的安全性,但降低了通过性,反之亦然。以换道为例,如果后面有车辆,只要有简单的规则,就可以很容易地暂停换道过程。这样可以保证安全,但大大降低了通过性。本文所描述的EM-planner,在解决潜在决策与规划不一致的同时,也提高了自主驾驶车辆的通过性。

EM planner通过将三维规划问题转换为两个二维规划问题,大大降低了计算复杂度。大大减少了处理时间,从而提升整个系统的交互能力。

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

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

相关文章

【分布式技术】rsync远程同步服务

目录 一、rsync&#xff08;远程同步&#xff09; 二、实操rsync远程文件同步 准备一个服务端192.168.20.18以及一个客户端192.168.20.30 1、服务端搭建&#xff1a;先完成服务端配置&#xff0c;启动服务 rsync拓展 1、关于rsyncd服务的端口号 2、rsync和scp的区别 2、测…

企业级进销存管理系统

框架&#xff1a; 进销存管理系统&#xff0c;采用SpringBootShiroMyBatisEasyUI 项目采用Maven构建&#xff0c;数据库文件存放在 sql/jxc.sql 截图 运行项目部分截图&#xff0c; 登录界面&#xff0c;用户名admin&#xff0c;密码admin123 当前库存查询&#xff0c; 进…

UI自动化测试工具对企业具有重要意义

随着软件行业的不断发展&#xff0c;企业对高质量、高效率的软件交付有着越来越高的要求。在这个背景下&#xff0c;UI自动化测试工具成为了企业不可或缺的一部分。以下是UI自动化测试工具对企业的重要作用&#xff1a; 1. 提高软件质量 UI自动化测试工具能够模拟用户的操作&am…

《堆排序》与《Top—k》

目录 ​编辑 前言&#xff1a; 关于《堆排序》&#xff1a; 第一步&#xff1a;建堆 第二步&#xff1a;排序 《Top—K问题》 关于Top—k问题&#xff1a; 前言&#xff1a; 我们在前面的blog中&#xff0c;对于《堆》已经有了初步的概念&#xff0c;那么接下来我们可以…

mapper向mapper.xml传参中文时的乱码问题

1.起因&#xff1a; 在idea中进行模糊查询传参时&#xff0c;发现在idea中查中文查不出记录&#xff0c;在navicate中可以查出来。 2.猜测&#xff1a; 1.idea中的编码问题导致的乱码。 2.idea和navicate的编码一致性导致的乱码。 3.mapper向mapper.xml传参后出现乱码。 3.解…

Transformer从菜鸟到新手(六)

引言 上篇文章介绍了如何在多GPU上分布式训练&#xff0c;本文介绍大模型常用的一种推理加速技术——KV缓存。 KV Cache KV缓存(KV Cache)是在大模型推理中常用的一种技巧。我们知道在推理阶段&#xff0c;Transformer也只能像RNN一样逐个进行预测&#xff0c;也称为自回归。…

IPv6路由协议---IS-ISv6

IS-ISv6概述 中间系统到中间系统IS-ISv6(Intermediate System to Intermediate System)属于内部网关协议IGP(Interior Gateway Protocol),用于自治系统内部。IS-IS也是一种链路状态协议,使用最短路径优先SPF(Shortest Path First)算法进行路由计算。 IS-ISv6产生 IS…

代码随想录刷题笔记(DAY 10)

今日总结&#xff1a;快要期末考试了&#xff0c;现在在疯狂速成&#xff0c;今天稍微缓和了一点&#xff0c;应该能保证继续每天刷题&#xff0c;欠下的那些寒假补上。 Day 10 01. 用栈实现队列&#xff08;No. 232&#xff09; 题目链接 代码随想录题解 1.1 题目 请你仅…

Deep Reinforment Learning Note 1

文章目录 Terminology Terminology st : stateot : observationat : action π θ ( a t ∣ o t ) \pi_\theta (a_t | o_t) πθ​(at​∣ot​) : policy π θ ( a t ∣ s t ) \pi_\theta (a_t | s_t) πθ​(at​∣st​) : policy (fully observed) Observation result from…

[软件工具]pdf多区域OCR识别导出excel工具使用教程

首先我们打开软件&#xff0c;界面如下&#xff1a; 如上图&#xff0c;使用非常简单&#xff0c;步骤如下&#xff1a; &#xff08;1&#xff09;选择工具-取模板选择一个pdf文件划定自己需要识别的区域&#xff0c;如果你选择第2页指定区域则软件统一识别所有pdf第2页指定区…

线性表入门

王有志&#xff0c;一个分享硬核Java技术的互金摸鱼侠加入Java人的提桶跑路群&#xff1a;共同富裕的Java人 从今天开始就进入到数据结构的部分了&#xff0c;整体分为3个部分&#xff1a;线性表&#xff0c;树和图&#xff0c;从认识每种数据结构到它们的高级应用。今天我们先…

如何从 Keras 中的深度学习目录加载大型数据集

一、说明 数据集读取&#xff0c;使用、在磁盘上存储和构建图像数据集有一些约定&#xff0c;以便在训练和评估深度学习模型时能够快速高效地加载。本文介绍Keras 深度学习库中的ImageDataGenerator类等工具自动加载训练、测试和验证数据集。 二、ImageDataGenerator加载数据集…

Bom 和 Dom 区别 ----- 真是DOM 和 虚拟Dom区别

DOM和BOM的区别 我们都指代&#xff0c;javascript由三个部分组成&#xff1a; ECMAScript&#xff1a;描述了JS的语法和基本对象 BOM(浏览器对象)&#xff1a;与浏览器交互的方法和对象 DOM(文档对象模型)&#xff1a;处理网页内容的方法和接 ps&#xff1a;根据宿主&#x…

数学经典教材有什么?

有本书叫做《自然哲学的数学原理》&#xff0c;是牛顿写的&#xff0c;读完之后你就会感叹牛顿的厉害之处! 原文完整版PDF&#xff1a;https://pan.quark.cn/s/5d5eac2e56af 那玩意真的是人写出来的么… 现代教材把牛顿力学简化成三定律&#xff0c;当然觉得很简单。只有读了原…

并发前置知识一:线程基础

一、通用的线程生命周期&#xff1a;“五态模型” 二、java线程有哪几种状态&#xff1f; New&#xff1a;创建完线程Runable&#xff1a;start(),这里的Runnable包含操作的系统的Running&#xff08;运行状态&#xff09;和Ready&#xff08;上面的可运行状态&#xff09;Blo…

单片机中的PWM(脉宽调制)的工作原理以及它在电机控制中的应用。

目录 工作原理 在电机控制中的应用 脉宽调制&#xff08;PWM&#xff09;是一种在单片机中常用的控制技术&#xff0c;它通过调整信号的脉冲宽度来控制输出信号的平均电平。PWM常用于模拟输出一个可调电平的数字信号&#xff0c;用于控制电机速度、亮度、电压等。 工作原理 …

2024,智能座舱不要再过度“装修”了!

文 | AUTO芯球 作者 | 雷慢 还记得2022年小鹏疲劳驾驶检测系统将小眼睛驾驶员识别为“开车睡觉”吗&#xff1f;驾驶员被扣了“智驾分”&#xff0c;你没听错&#xff0c;车主不光要焦虑驾照扣分的时候&#xff0c;还要焦虑被车子扣分。 雷慢还记得另一个奇葩事情是某问界车主…

S7-200SMART实例之冒泡法排序子程序

需求分析 编写程序实现冒泡法排序的算法。 冒泡法排序是一种简单的排序算法。因其过程如同水中气泡最终会上浮到水面一样&#xff0c;故被形象地称为“冒泡法排序”。 实现原理 根据以上需求分析可以按以下步骤实现算法&#xff1a; 1.比较相邻的元素。如果第一个比第二个…

linux 网络基础配置

将Linux主机接入到网络&#xff0c;需要配置网络相关设置一般包括如下内容&#xff1a; 主机名 iP/netmask (ip地址&#xff0c;网关) 路由&#xff1a;默认网关 网络连接状态 DNS服务器 &#xff08;主DNS服务器 次DNS服务器 第三个DNS服务器&#xff09; 一、…

多态、抽象类和接口(深拷贝和浅拷贝)

目录​​​​​​​ 前言&#xff1a; 多态&#xff1a; 多态的定义&#xff1a; 向上转型&#xff1a; 方法重写&#xff1a; 再看toString方法&#xff1a; 动态绑定&#xff1a; 向下转型&#xff1a; 小练习&#xff1a; 抽象类&#xff1a; 什么是抽象类&am…