参考资料
- matlab2019b 开源代码
- Matlab官网: matlab.
贝塞尔曲线
- 参考资料: 深入理解贝塞尔曲线.
一阶贝塞尔曲线
P0到P1之间是均匀的过度的。
%first order b-spline
clc
clear
p0=[0,0];
p1=[1,1];
p2=[3,0];
step=50;
pt=zeros(step,1);
tt=1;
tp=(1:step);
for t=0:1/step:1
pt(tt,1:2)=(1-t)*p0+t*p1;
tt=tt+1;
end
plot(pt(:,1),pt(:,2),'o')
输出pt可以看出pt是均匀增长的。
二阶贝塞尔曲线
%second order b-spline
clc
clear
p0=[0,0];
p1=[0,1];
p2=[3,0];
step=100;
pt=zeros(step,1);
tt=1;
tp=(1:step);
for t=0:1/step:1
pt(tt,1:2)=(1-t)^2*p0+2*t*(1-t)*t*p1+t^2*p2;
tt=tt+1;
end
plot(pt(:,1),pt(:,2),'o')
输出结果:
发现结果并不是连续的
三阶贝塞尔曲线
clc
clear
p0=[0,0];
p1=[1,1];
p2=[2,1];
p3=[10,0];
step=100;
pt=zeros(step,1);
tt=1;
tp=(1:step);
for t=0:1/step:1
pt(tt,1:2)=(1-t)^3*p0+3*t*(1-t)^2*p1+3*t^2*(1-t)*p2+t^3*p3;
tt=tt+1;
end
plot(pt(:,1),pt(:,2),'o')
结果仍然是不连续的。并不一定是连续的
- bsplinepolytraj 验证
clc
clear
cpts = [0 1 2 10; 0 1 1 0];
tpts = [0 1];
tvec = 0:0.01:1;
[q, qd, qdd, pp] = Mybsplinepolytraj(cpts,tpts,tvec);
figure
plot(cpts(1,:),cpts(2,:),'xb-')
hold all
plot(q(1,:), q(2,:),'o')
xlabel('X')
ylabel('Y')
hold off
输出结果
与matlab输出结果一致,所以仿真结果是对的。
输出qd和qdd发现,其均不连续。
问题
- 平滑
- 姿态
- 逆解