无人驾驶全局路径规划之路径平滑(贝塞尔曲线)

贝塞尔曲线公式如下(具体推导过程请参见网上),
在这里插入图片描述
我所编写的贝塞尔曲线路径平滑函数如下,

function [x, y] = bezir_n(points, M)
%points是控制点,为多行两列的矩阵
%M为你要生成的贝塞尔曲线上点的个数

    n = size(points,1) - 1;
    if n < 1
        x = []; y = [];
        return;
    elseif n == 1 %一阶贝塞尔曲线,即直线
        x = points(:,1);
        y = points(:,2);
        return;
    else
        % 使用向量卷积来计算 k值,k是二项式系数nchoosek(n,k)组合在一起的向量,
        %也为杨辉三角第n行的所有数。k对应着贝塞尔曲线公式里的二项式展开系数。
        k = [1 1];
        for i = 1 : (n - 1)
            k = conv(k, [1 1]);
        end
        
        tem1=n:-1:0;
        tem2=0:1:n;
        x=[];
        y=[];
        for t=0:1/(M-1):1
              x=[x,sum(k.*(points(:, 1)').*((1-t).^tem1).*(t.^tem2))];
              y=[y,sum(k.*(points(:, 2)').*((1-t).^tem1).*(t.^tem2))];
        end
    end
end

其中,代码中的向量k对应公式中的在这里插入图片描述
代码中的(points(:, 1)’)和(points(:, 2)’)对应公式中的
在这里插入图片描述
代码中的((1-t).^tem1)对应公式中的
在这里插入图片描述
代码中的(t.^tem2)对应公式中的
在这里插入图片描述
代码中的sum函数对应公式中的求和
在这里插入图片描述
代码中的for t=0:1/(M-1):1对应在这里插入图片描述
使用贝塞尔曲线路径平滑函数对RRT算法( RRT算法matlab程序)生成的路径进行平滑,结果如下图所示,其中红线为生成的路径,绿线为平滑后的路径,
无人驾驶全局路径规划之路径平滑(贝塞尔曲线)_第1张图片
使用贝塞尔曲线路径平滑函数对A星算法( A星算法matlab程序)生成的路径进行平滑,结果如下图所示,其中红线为生成的路径,绿线为平滑后的路径,
无人驾驶全局路径规划之路径平滑(贝塞尔曲线)_第2张图片
注:
(1)最好对生成的路径先用直线平滑处理,再使用贝塞尔曲线平滑;
(2)贝塞尔曲线平滑后,路径与障碍物有碰撞发生,这可以通过对障碍物添加膨胀层来解决。

你可能感兴趣的:(无人驾驶技术,matlab,无人驾驶,全局路径规划,路径平滑,贝塞尔曲线)