张春成

V2

2022/11/09阅读:25主题:默认主题

漂移变道

漂移变道

最近常做梦,梦到买了辆车,车牌号很吉利,叫做 BJHJYD。

买了车咱就开,那么问题就来了,为啥超车变道的时候需要后车刹车呢?

为了回答这个问题,我写了个前端程序

Over taking[1]


场景模拟

超车变道的行车轨迹很复杂,我将它简单化为三阶 Bezier 曲线的拟合问题。

但是现成的工具不能用,因为现有工具只能保证分段参数均匀,却不能控制单位时间内车辆的行进距离,即车辆速度。因此要对它进行改造,改造的思路是对分段参数进行寻优,保证每段曲线的长度为恒定值。为了提高计算效率,我采用二分逼近的方式,能够在对数时间复杂度内,达到任意给定精度。另外,为了模拟“理想”的变道状态,即保持沿车道方向的速度不变,该方法允许将优化目标从实际速度转换到速度的轴向投影。

最终得到了如下图的 4 条曲线,曲线代表行车轨迹,颜色代表时间。

场景图
场景图

场景图

其中,最上方的直线代表目标车道的正常行驶车辆,下面三条曲线代表不同的超车线路,它们用较小的 offset 进行区分。这三条线本来应该是重叠的,但重叠后会导致分不清彼此,因此采用分离方式绘制。

从上到下,第一条是保持车速不变的变道方式,显然他在完成变道之前已经落后于原车道车辆,属于变道失败。

第二条是保持沿道路轴向的速度不变,从后车的视角看,他相当于“平移”到目标车道。这是比较理想的变道方式。

第三条较小的点构成的曲线代表不控制速度的“等参数间距”贝塞尔曲线轨迹,只用于参考。

数值分析

在数值模拟的基础上,我继续统计车辆的实时速度和位置关系,这些比较可以回答下列问题

  • 变道时,在保持速度表示数不变时,车辆沿道路轴向的速度如何变化?(来自后车的问候警告)trace2
  • 变道时,在保持沿道路轴向速度不变时,车辆速度表的示数如何变化?(完美变道)trace3
  • 如果沿理论上的 Bezier 曲线等间距参数行车,车辆的速度如何变化?(这个没有实际意义)trace4

最后,这些图定性地给出了一条有价值的建议,那就是可以在实行完美变道时,对车辆的理想动力进行估计,计算出这些动力需要支撑怎样剧烈的短时加速。本图的例子表明,在变道中段,你的车应该达到变道之前速度的约 1.5 倍。这属于百尺竿头更进一步的加速,比零百要难多了。这也解释了为什么说车的动力越强,变道超车就越安全。

车辆速度曲线
车辆速度曲线

车辆速度曲线

道路轴向速度曲线
道路轴向速度曲线

道路轴向速度曲线

道路轴向位置关系曲线
道路轴向位置关系曲线

道路轴向位置关系曲线

最后,以上曲线看上去并不平滑,这是因为模拟过程的量化误差设置的较大,允许误差设置为 0.001。而如果你的计算资源宽裕的话,它可以设置得很小,比如 0.0001,得到的模拟结果如下图所示,可以看到它们在趋势上是相同的,只有精度不同。

Untitled
Untitled

好了,梦醒了,也是我想多了,因为地铁从不超车。

参考资料

[1]

Over taking: https://observablehq.com/@listenzcc/over-taking

分类:

前端

标签:

前端

作者介绍

张春成
V2