欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

机器人学:Matlab实现实时多次贝塞尔曲线(Bézier Polynomials)插值

程序员文章站 2022-07-14 22:12:36
...

0. 引言

有时候对于三次、五次实时插值并不满足我们的控制需求,而贝塞尔曲线插值越来越受到关注。

0.1 最终效果

机器人学:Matlab实现实时多次贝塞尔曲线(Bézier Polynomials)插值

1. 贝塞尔插值

对于一维M次贝塞尔曲线的公式为:
b(s)=k=0MαkM!k!(Mk)!sk(1s)Mkb(s) = \sum\limits_{k = 0}^M {{\alpha _k}} \frac{{M!}}{{k!(M - k)!}}{s^k}{(1 - s)^{M - k}}

1.1 Matlab代码实现

function [res] = bezierPolynomials(s,alpha)
% s在[0,1]之间 alpha决定着曲线的形状
    M = size(alpha,2)-1;
    M_factorial = factorial(M);
    res = 0;
    for k = 0:1:M
       res = res + M_factorial/(factorial(k)*factorial(M-k))*alpha(k+1)*s^k*(1-s)^(M-k);
    end
end

1.2 测试代码

clear
clc

alp = [0.1 0.3 0.2 0.5 0.1 0.1]*10;

s = [0:0.01:1];
dat = [];
for i = 1:size(s,2)
    dat = [dat;bezierPolynomials(s(i),alp)];
end
plot(dat);

效果就是上图所示,可以通过参数优化设计属于自己的曲线类型。