1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
|
clc,
clear all,
close all,
%declaration des constantes
g=9.8;
Tsup=0.8;%temps de support
z=0.8;%hauteur du centre de masse considérée constante pour un modele LIP
a=10;
b=1;
Tc=sqrt(z/g);
X0=0;
Y0=0;
pas=0.02;
sx=[0.0 0.3 0.3 0.3 0];%longueur des pas
sy=[0.2 0.2 0.2 0.2 0.2];%largeur des pas
sx(6)=0;
sy(6)=0;
%Initialisation
%Etape2:
CI1=[-0.151,0.467];
pxm0=0;
pym0=0;
pxmp=0;
pymp=0;
pxprevious=0;
pyprevious=0;
n=length(sx);
px=zeros(1,n);
py=zeros(1,n);
xi=zeros(1,n);
yi=zeros(1,n);
vxi=zeros(1,n);
vyi=zeros(1,n);
pxm=zeros(1,n);%la position modifiée du pied selon x
pym=zeros(1,n);%la position modifiée du pied selon y
xd=zeros(1,n);
yd=zeros(1,n);
vxd=zeros(1,n);
vyd=zeros(1,n);
x1=zeros(1,n);
vx1=zeros(1,n);
y1=zeros(1,n);
vy1=zeros(1,n);
%à verifier les deux equation prochaines.
xbar=zeros(1,n);
ybar=zeros(1,n);
vxbar=zeros(1,n);
vybar=zeros(1,n);
v=Tsup;
n=5;
%etape3:conditions initiales
%integration de l'equation de la dynamique
%selon x:
x10=(CI1(1)-pxm0)*cosh(0/Tc)+Tc*CI1(2)*sinh(0/Tc)+pxm0;
vx10=((CI1(1)-pxm0)/Tc)*sinh(0/Tc)+CI1(2)*cosh(0/Tc);
%selon y:
y10=(CI1(1)-pym0)*cosh(0/Tc)+Tc*CI1(2)*sinh(0/Tc)+pym0;
vy10=((CI1(1)-pym0)/Tc)*sinh(0/Tc)+CI1(2)*cosh(0/Tc);
xip=x10;
yip=y10;
vxip=vx10;
vyip=vy10;
v=Tsup;
for r=1:5
for t=v:pas:v+Tsup
if 1<r<=n
%selon x:
x1=(xip-pxmp)*cosh(t/Tc)+Tc*vxip*sinh(t/Tc)+pxmp;%la valeure finale de la position x du pied (ou la solution selon x)
vx1=((xip-pxmp)/Tc)*sinh(t/Tc)+vxip*cosh(t/Tc);%la valeure finale de la vitesse selon x du pied
xip=x1;
vxip=vx1;
%selon y:
y1=(yip-pymp)*cosh(t/Tc)+Tc*vyip*sinh(t/Tc)+pymp;
vy1=((yip-pymp)/Tc)*sinh(t/Tc)+vyip*cosh(t/Tc);
yip=y1;
vyip=vy1;
end
end
v=t;
%Etape5:
px(r)=pxprevious+sx(r);
py(r)=pyprevious-((-1)^r)*sy(r);%si on choisit le pied gauche comme point de départ de la marche on remplace -(-1)^n par +(-1)^n
pxprevious=px(r);
pyprevious=py(r);
%Etape6:les caracteristiques de la primitive de marche suivante
%Ajouter une condition
xbar(r)=sx(r+1)/2;
ybar(r)=(-1)^(r)*sy(r+1)/2;
vxbar(r)=(cosh(Tsup/Tc)+1)/((Tc*sinh(Tsup/Tc))*xbar(r));
vybar(r)=(cosh(Tsup/Tc)-1)/((Tc*sinh(Tsup/Tc))*ybar(r));
%Etape7:calcul de l'etat cible
xd(r)=px(r)+xbar(r);
vxd(r)=vxbar(r);
yd(r)=py(r)+ybar(r);
vyd(r)=vybar(r);
C=cosh(Tsup/Tc);
S=sinh(Tsup/Tc);
D=a*((C-1)^2)+b*(S/Tc)^2;
%Etape8:calcul de la position modifiée du pied
pxm(r)=-((a*C-1)/D)*(xd(r)-C*xip-Tc*S*vxip)-(b*S/Tc*D)*(vxd(r)-(S/Tc)*xip-C*vxd(r));
pym(r)=-((a*C-1)/D)*(yd(r)-C*yip-Tc*S*vyip)-(b*S/Tc*D)*(vyd(r)-(S/Tc)*yip-C*vyd(r));
pxmp=pxm(r);
pymp=pym(r);
%dessiner la figure
figure(1),
hold on,
plot(pxm,pym,'r+'), grid on;
hold off,
end |
Partager