有的時候,我們在規劃機械人的參考軌跡過程中,沒有考慮機械人的速度,而機械人實際運動過程中一般啟動和停止過程中有乙個加減速過程,為了實現這一效果,我們可以採用緩動函式來對曲線進行離散化。
(1)緩動函式1
其對應的位置曲線和速度曲線如下
title('位置曲線')
hold on
subplot(2,1,2)
plot(j,v,'k.');
title('速度曲線')
hold on
end(2)緩動函式2
其對應的位置曲線和速度曲線如下
title('位置曲線')
hold on
subplot(2,1,2)
plot(j,v,'k.');
title('速度曲線')
hold on
end具體應用
有了上述緩動函式的公式後,我們可以利用引數t來對規劃的軌跡曲線進行離散化,這裡以貝塞爾曲線的離散進行舉例。我們取上述表示式中的引數j為勻速遞增(取值在[0,1]),通過將j代入上述公式可求得相應的t。這裡通過改造t來實現最終的加減速效果。下圖為緩動函式2的具體效果
% 貝塞爾曲線(參考曲線)
start_x=0;
start_y=0;
end_x=1.5;
end_y=2.25;
cx=[start_x,start_x+(end_x-start_x)*0.1,start_x+(end_x-start_x)*0.6,end_x];
cy=[start_y,start_y+(end_y-start_y)*0.5,start_y+(end_y-start_y)*0.9,end_y];
last_px1=cx(1);
last_py1=cy(1);
last_px2=cx(1);
last_py2=cy(1);
for j=0:0.01:1
% 不帶緩動函式
t=j;
pt1=pow(1-t,3);
pt2=3*t*pow(1-t,2);
pt3=3*pow(t,2)*(1-t);
pt4=pow(t,3);
px1=pt1*cx(1)+pt2*cx(2)+pt3*cx(3)+pt4*cx(4);
py1=pt1*cy(1)+pt2*cy(2)+pt3*cy(3)+pt4*cy(4);
v1=sqrt(pow(px1-last_px1,2)+pow(py1-last_py1,2))/0.01;
last_px1=px1;
last_py1=py1;
% 帶緩動函式
% t=0.5*(sin(pi*j-pi/2)+1);
if j<0.5
t=(1-sin((1-pow(2*j,2))*pi/2))/2;
else
t=0.5+0.5*sin((1-pow(1-2*(j-0.5),2))*pi/2);
endpt1=pow(1-t,3);
pt2=3*t*pow(1-t,2);
pt3=3*pow(t,2)*(1-t);
pt4=pow(t,3);
px2=pt1*cx(1)+pt2*cx(2)+pt3*cx(3)+pt4*cx(4);
py2=pt1*cy(1)+pt2*cy(2)+pt3*cy(3)+pt4*cy(4);
v2=sqrt(pow(px2-last_px2,2)+pow(py2-last_py2,2))/0.01;
last_px2=px2;
last_py2=py2;
subplot(2,1,1)
plot(px2,py2,'k.',px1,py1,'r.');
title('位置曲線')
legend('加緩動函式','未加緩動函式');
hold on
subplot(2,1,2)
plot(t,v2,'k.',j,v1,'r.');
title('速度曲線')
legend('加緩動函式','未加緩動函式');
hold on
end
c 實現 機械人的運動範圍
題目 地上有乙個m行和n列的方格。乙個機械人從座標0,0的格仔開始移動,每一次只能向左,右,上,下四個方向移動一格,但是不能進入行座標和列座標的數字之和大於k的格仔。例如,當k為18時,機械人能夠進入方格 35,37 因為3 5 3 7 18。但是,它不能進入方格 35,38 因為3 5 3 8 1...
Go語言實現 劍指offer 機械人的運動範圍
該題目 於牛客網 劍指offer 專題。地上有乙個m行和n列的方格。乙個機械人從座標0,0的格仔開始移動,每一次只能向左,右,上,下四個方向移動一格,但是不能進入行座標和列座標的數字之和大於k的格仔。例如,當k為18時,機械人能夠進入方格 35,37 因為3 5 3 7 18。但是,它不能進入方格 ...
Go語言實現 劍指offer 機械人的運動範圍
該題目 於牛客網 劍指offer 專題。地上有乙個m行和n列的方格。乙個機械人從座標0,0的格仔開始移動,每一次只能向左,右,上,下四個方向移動一格,但是不能進入行座標和列座標的數字之和大於k的格仔。例如,當k為18時,機械人能夠進入方格 35,37 因為3 5 3 7 18。但是,它不能進入方格 ...