九易建网站的建站流程,免费的网站推广方法,自助建设手机网站,做seo的公司规划控制如何兼顾安全与舒适性 附赠自动驾驶学习资料和量产经验#xff1a;链接
**导读#xff1a;**自动驾驶技术研发对于“安全第一”的追求是毋庸置疑的#xff0c;但是这中间可能就忽视了舒适性。
因此#xff0c;今天我想给大家分享的是#xff0c;自动驾驶研发如何…规划控制如何兼顾安全与舒适性 附赠自动驾驶学习资料和量产经验链接
**导读**自动驾驶技术研发对于“安全第一”的追求是毋庸置疑的但是这中间可能就忽视了舒适性。
因此今天我想给大家分享的是自动驾驶研发如何在兼顾安全性的同时保证乘客体验的舒适。往细一点说就是如何通过优化算法在规划和控制模块中找到安全性和舒适性的平衡点。 安全性和舒适性的定义 安全性的定义其实比较好理解一般包括不发生碰撞和遵守交通规则交通灯、停车标志、限速。
而舒适性则受下面两个指标影响 Jerk即加速度的变化率。当加速度的变化越小乘客体感越舒适。 Curvature rate即曲率变化率。当曲率的变化率越小乘客体感越舒适。
在二者的定义基础上“安全舒适两不误”也就意味着在遵守交规且不发生碰撞的基础上控制好行驶时的加加速度和行进路线的曲率变化率。 规划和控制的定义
规划Planning和控制Control是自动驾驶最底层的部分决定了车在路上如何行使。
一般来说规划所需要的输入Input信息包括地图信息起点终点障碍物预判交通标志以及感知信息即周围的物体位置、大小、速度、方向等。
借助这些输入信息规划模块可以输出Output一段时间的行驶轨迹Trajectory即某一个时间无人车行驶到到某个位置的函数Xt~Yt。
而规划输出的轨迹正好是控制Control模块的两项输入之一另一项输入是车辆自身的状态包括车的位置、heading行驶朝向、速度、加速度、角速度等信息。
而控制模块会输出以下两类信息 Brake/throttle pedal刹车和油门 Steering angle转向角
简单来说控制的目的是让自动驾驶车能够精准实现规划模块给出的行驶指令。 上面就是规划和控制的简单定义。当然这里我也留下一个思考上图标灰的地方对于规划模块而言是否必须知道车辆的实时位置信息
答案是有无都是可以。规划和控制模块都能有相对应的做法和方案。 规划上如何实现安全性和舒适性
安全性
前面已经说到规划Planning为的是输出一个trajectory时间到位置的函数X(t)x(t)y(t)T而这个行驶路径需要同时保证安全性和舒适性。
实际上规划Planning是一个优化问题。对于一个优化问题来说我们需要通过设计 constraints 约束条件 来保证行驶安全。 上图里列举了一些最基本的约束条件。
首先规划模块不能忽略车的物理特性比如方向盘的最大角度对应的就是曲率的最大值、最小值等。
其次明确车辆刹车和油门的极限这对应的就是加速度的极限。
第三当自动驾驶车在道路上行驶时为了不出现压线的情况车到左右boundary车道线的距离也需要纳入规划中。
第四自动驾驶肯定不希望车辆发生任何碰撞。我们可以通过取车轴上一系列等半径的圆来覆盖车身并采用若干个凸的多边形表示车身周围的物体那么当车轴上所有的圆心到凸多边形的距离大于半径时自动驾驶车就不会与凸多边形障碍物发生碰撞。
舒适性
介绍完安全性下面介绍规划模块是如何实现驾驶的舒适性。前面提到过舒适性越高意味着加速度变化率越小以及曲率的变化率越小。那么对应的cost function代价函数就比较好设定了即加速度加速度变化率曲率曲率的变化率。 虽然整个模型设计起来比较简单但是constraints约束条件和cost function代价函数的求解却比较复杂如上图尤其是系统实时求解kt和kt’的耗时会比较长解起来也比较难。这时候我们可以换个思路把问题转换下。
前面也提过规划问题其实是为了解出一个时间到位置的函数而L4级自动驾驶车一般会行驶在结构化的道路上这也意味着规划模块具备地图的信息那么问题就可以进行转化——把xy坐标系转化为下图的ls坐标系。 s沿着道路中线reference line的方向l则是垂直于道路中线的方向。于是问题就转化成了求解st和ls的问题我们希望得出自动驾驶车在t时刻应该走到s上的哪个位置以及走在这个位置时该车距离s的左右偏离是多大。
最终一个复杂问题就转化成三个子优化问题一个横向优化、纵向优化以及中线问题s方向是车辆的纵向规划l方向为横向规划。
接下来我想仔细说一说这三个子问题。
子问题一横向优化 上图中右侧展示了一条路中间的线是reference line参考线其中“0”点就是车当前所在的位置“-1”“-2”是车之前的坐标位置接下来的“1234”……就是规划模块的输出结果也就是车未来的位置。
这条路的左右两边是boundary道路边界/车道线图中的半圆对应着路面上的障碍物。横向规划求解的是正是每一点的l坐标也就是到中心线的偏离量。
对于横向优化问题我们同样可以从安全性和舒适性两方面考虑。
安全性方面取决于横向优化问题的constraints约束条件一般要求l不能太小也不能太大即不能压左边线也不能压右边线同时不能碰到左右两边的障碍物。
舒适性方面我们则设计成cost function代价函数一般要求路线的曲率越小越好曲率变化率越小越好。如果我们的参考线是一条完美的参考线那么曲率就可以用一个相对曲率来表示。
对于一个优化问题来说cost function代价函数变成了标准的二次函数同时所有的constraints约束条件都是一次的。
那么这就成了一个标准的QPQuadratic programming二次规划问题不仅如此这还是一个box constraint闭箱约束的QP问题我们就能够非常快速求出优化的结果。
子问题二纵向优化
纵向优化求解的则是t到s的函数。 对于纵向规划的来说安全性要求我们保证车辆不能发生前后方向上的碰撞。以上图右侧为例此时有个行人正在过马路规划模块会将行人的行为可以转换成ts坐标展示在坐标图里上图是一个平行四边形。
此时面对这个行人如果自动驾驶车选择让路纵向规划解出来的曲线就应该在平行四边形的下方如果选择超过这个行人那么这条曲线应该从上面绕过去。
在纵向规划上舒适性体现在加速度越小越好以及加速度的导数越小越好。可见纵向和横向规划涉及的constraints约束条件和 cost function代价函数都非常相似。
子问题三中线生成
同样中线的生成也是一个优化问题自然也会涉及到constraints约束条件和cost function代价函数。 中线设定的约束条件首先是不能压边界车道线同时要符合曲率的限制。对于cost function代价函数来说希望达到的目标是中线的曲率越小越好曲率的变化率越小越好。这样来看中线问题也是求解kt和kt’的函数问题。
问题似乎又绕回去了为了舒适性我们还是需要求解非常复杂的方程吗
并不是。由于中线是可以离线生成的所以不需要在线计算这些问题能放在服务器中进行并行的计算。
这里我想增加一个值得思考的问题。前面提到生成中线的前提是具备道路的信息即道路左右的boundary车道线边界。然而当自动驾驶车处在一个路口内路面并没有车道线这种环境下应该如何处理参考线呢欢迎大家留言探讨。 控制上如何实现安全性和舒适性
毕竟自动驾驶控制的是一辆车而不是一个点所以在详细介绍自动驾驶控制模块之前我想先介绍一个模型。
Bicycle model 自行车模型
控制的模型有很多而且非常复杂需要考虑车辆的很多因素包括引擎变速箱轮胎悬架等等。为了讲好这个问题我先给大家介绍一个最简单的模型Bicycle model自行车模型。 首先假设自动驾驶车辆的车宽为0可以想象成是两个前轮靠在一起两个后轮靠在一起上图。
这个假设就意味着前轮的转角和转速都是一致的当然现实中车辆的四个轮子的转角和转速都是不一样的所以这个模型只是在做一个最简单的假设。基于这个假设当得知前轮转角转了δ时我们也可以通过几何关系算出后轴的转弯半径是多大。
前面把车假设成了“自行车”下图展示了它的行驶轨迹那么哪一条是前轮的哪一条是后轮的车是往左边行驶还是右边行驶 首先基于自行车模型的假设后轮的侧向速度为0所以后轮永远都是朝向前轮行驶的在红线上画一条切线会发现它没有穿过蓝线所以它不是后轮。在蓝线画一条切线它穿越了红线因此蓝线是后轮的轨迹。
车往那边走呢我们继续在蓝线上画一条切线这条切线和这条红线还是有两个交点。实际上交点和切点的距离就是车的轴距并且由于轴距是固定的所以这辆行驶的车就如图中黑线所示。这个问题的答案是红线代表前轮蓝线代表后轮以及它是向右行驶的。 总结来说对于只有两个轴并且通过前轮转向的车辆一般可以转换成Bicycle model自行车模型。但在真实路上行驶的往往不只是小汽车比如还有货车而货车可以分为两个部分车头与后挂。
对于货车的控制如果还是采用自行车模型进行假设上图则A1是车头A2是挂车F1为车头的前轴R2认为是挂车的后轴。在这个模型中我们认为挂车的前轴和车头的后轴是同一个点R1F2车头的轴距是L1挂车的轴距是L2当得知车头的前轴转了ϕ角度时控制模块可以得到车头后轴的转弯半径。
那么挂车的后轴轨迹会呈现出一条什么样的曲线这个问题也欢迎大家留言讨论毕竟现实生活中路面上不止有一种车自动驾驶从业者可以多思考下各类车型的运动行为应该是什么样的。
横向控制Lateral Control 上图中紫色曲线是Planning规划模块输出的目标轨迹图中的蓝点是自动驾驶车此刻的位置蓝色的箭头是车现在的行驶方向。
可以看到自动驾驶车辆与规划轨迹存在一个侧向的偏差因此横向控制的目标就是使车辆实际轨迹和目标轨迹的侧向偏差越小越好同时车在某个时刻的heading朝向与规划轨迹曲线对应点朝向的误差越小越好。
预瞄算法就是横向规划中常用的一种首先会选定一个预瞄点横向控制的目标就是到预瞄点时侧向误差和heading朝向的与目标轨迹的误差越小越好。这里的控制变量就是刚才说的曲率所以横向控制又转化为了一个优化问题。
纵向控制Longitudinal Control
同样的在纵向控制上我们也可以选一个预瞄点希望达到的目标是自动驾驶车速v与规划轨迹的误差越小越好位移s与规划轨迹的误差越小越好于是纵向控制也可转为优化问题。
总结来看不管是对于Planning规划还是Control控制最终都可以转化为优化问题。
自动驾驶规划模块对舒适性和安全性的探索重点就在于设计优化问题中的constraints约束条件和cost function代价函数。
而控制模块则在于预瞄点的选择控制模块最终的目标就是自动驾驶车更精准地跟随规划轨迹当预瞄距离越近控制就越精准当预瞄距离越远控制量更加smooth平滑体感可能更加舒适但误差可能越大。
最终我们都能坐上既安全又舒适的自动驾驶车。今天的分享就到这里谢谢大家。