Bezier(贝塞尔)曲线的轨迹规划在自动驾驶中的应用(一)

本文主要根据Path Generation and Tracking Based on a Bézier Curve for a Steering Rate Controller of Autonomous Vehicles文章,给出使用贝塞尔曲线进行自动驾驶规划模块的轨迹规划。对应的车辆横向动力学和运动学的内容见博文:

自动驾驶横向运动学分析和非线性问题处理方法
https://blog.csdn.net/gophae/article/details/102499064
Pure Pursuit trajectory tracking and Stanley trajectory tracking总结与比较
https://blog.csdn.net/gophae/article/details/100012763

在一个笛卡尔坐标系下,设定控制点P后,对应的N次贝塞尔曲线公式:
在这里插入图片描述
这里对比一下两种常用的贝塞尔曲线,三次和五次,论文中说五次的比较好:
在这里插入图片描述
在这里插入图片描述
对比上图可以看出,三次曲线的首位点并不和x轴平行,而五次曲线由于在一条线上有三个控制点,因此首位点和x轴是平行的,所以对于直线上的变道轨迹规划是更加好的。

另外一个比较大的问题就是三次曲线的连续性问题,在真实实现这个曲线过程中,出现了曲率突变的情况,对此,转向角和转向角速度也发生了突变:
在这里插入图片描述
对比之下,可以看出,使用五次曲线的曲率则没有突变,对应的转向角和转角角速度变化都变得更加平缓。

在这里插入图片描述

  • 8
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
可以通过使用JavaScript来获取CSS动画沿着贝塞尔曲线运动的轨迹。首先,你需要获取CSS定义动画的贝塞尔曲线的值,然后使用JavaScript计算出沿着该曲线的轨迹。 以下是一个示例代码: ```javascript // 获取元素的动画样式 var element = document.getElementById('your-element'); // 替换为你要获取动画样式的元素 var styles = window.getComputedStyle(element); var animationTimingFunction = styles.getPropertyValue('animation-timing-function'); // 提取贝塞尔曲线值 var bezierValue = animationTimingFunction.match(/cubic-bezier\(([^)]+)\)/)[1]; var bezierPoints = bezierValue.split(',').map(parseFloat); // 计算轨迹点坐标 var trajectoryPoints = []; for (var t = 0; t <= 1; t += 0.01) { var x = cubicBezier(t, 0, bezierPoints[0], bezierPoints[2], 1); var y = cubicBezier(t, 0, bezierPoints[1], bezierPoints[3], 1); trajectoryPoints.push({ x: x, y: y }); } // 输出轨迹点坐标 console.log(trajectoryPoints); // 贝塞尔曲线计算函数 function cubicBezier(t, p0, p1, p2, p3) { var mt = 1 - t; return mt * mt * mt * p0 + 3 * mt * mt * t * p1 + 3 * mt * t * t * p2 + t * t * t * p3; } ``` 这段代码首先获取了要应用动画的元素的动画样式,然后从样式提取了贝塞尔曲线的值。接下来,使用贝塞尔曲线计算函数计算沿着曲线的轨迹,并将每个点的坐标存储在 `trajectoryPoints` 数组。 你可以将上述代码的 `your-element` 替换为你要获取动画轨迹的元素的ID。最终,`trajectoryPoints` 数组将包含沿着贝塞尔曲线的轨迹点坐标。你可以根据需要对这些坐标进行进一步处理或使用。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值