对于车辆系统,规划的轨迹应满足以下准则:轨迹连续;轨迹曲率连续;轨迹容易被车辆跟随,且容易生成;
先看几张图直观感受一下:
一次贝塞尔曲线:
二次贝塞尔曲线:
三次贝塞尔曲线:
贝塞尔曲线也是用数学公式生成曲线得方式。
在我的理解下:
n阶贝塞尔曲线就是:对于P0到Pn这n+1个点,先求每两个相邻点的一阶贝塞尔曲线,可以生成n个点;在对这n个点求一阶贝塞尔曲线,可以生成n-1个点,此时这几个点算是二阶的了;然后递归迭代。
def bezier(Ps,n,t):
"""递归的方式实现贝塞尔曲线
Args:
Ps (_type_): 控制点,格式为numpy数组:array([[x1,y1],[x2,y2],...,[xn,yn]])
n (_type_): n个控制点,即Ps的第一维度
t (_type_): 步长t
Returns:
_type_: 当前t时刻的贝塞尔点
"""
if n==1:
return Ps[0]
return (1-t)*bezier(Ps[0:n-1],n-1,t)+t*bezier(Ps[1:n],n-1,t)
缺陷:
1.贝塞尔曲线的阶次是根据点的个数确定的,如果是N+1个点那么就是N次
2.生成贝塞尔曲线过程,如果点的个数过多,那么会出现很多峰谷值,也计算量也会爆炸。
3.贝塞尔曲线生成中局部不能更改
本文图片来自: