Modellerweiterung des autonomen Hackenporsche mit Radeigenschaften
(EN google-translate)
(PL google-translate)
|
clear;
clc;
clearglobal;
//Parameter festlegen
b=0.3; //[m]
m=10.0; //[kg]
J=(2.0/3.0)*m*b*b; //[kg*m^2]
D=0.1; //[Nm*s/rad]
ak=[1;2];
bk=[1;2];
ck=[0;0];
function ck = kreuz(ak,bk)
ck = ak(1,1)*bk(2,1)-ak(2,1)*bk(1,1);
endfunction
global b,m,J,D,kreuz;
y = [0,0,0,0,0,0]';
//function f = rechteSeite(t,y)
xx = y(1,1);
vx = y(2,1);
yy = y(3,1);
vy = y(4,1);
phi = y(5,1);
omega = y(6,1);
beta = 0.1; //beliebig gewählt hier.
bomega = 0; //Winkelgeschw. von beta.
FAskal = 4; //[N], später unsere Stellgröße
//Hilfsfunktionen
TT = [cos(phi),-sin(phi);sin(phi),cos(phi)];
TTR = [cos(beta),-sin(beta);sin(beta),cos(beta)];
//Besondere Behandlung von beta für betragsm. kleine Werte:
BETAHILF = beta;
KLEIN = 0.000001;
VORZEICHEN = 1;
if beta<0 then VORZEICHEN=-1,end
if abs(beta)<KLEIN then BETAHILF=VORZEICHEN*KLEIN,end
//Ausgezeichnete Punkte vorausberechnen:
oS_ = [0;0];
oH_ = [-b;0];
oP_ = [b;0];
oS = [xx;yy];
oH = oS + TT*[-b;0];
oP = oS + TT*[b;0];
//Momentanpol oQ
oQ_ = [-b;2*b*cos(beta)/sin(BETAHILF)];
oQ = oS + TT*oQ_;
//berechenbare Kraefte bestimmen:
//Antriebskraft:
FA_ = TTR*[FAskal;0];
FA = TT*FA_;
//Reibkräfte
FRH_ = -D*[2*b*omega*cos(beta)/sin(BETAHILF);0];
FRP_ = -D*[2*b*omega*cos(beta)/sin(BETAHILF);2*b*omega];
//...im Inertialk.:
FRH = TT*FRH_;
FRP = TT*FRP_;
//Zwangsbedingungen herleiten:
CBH = cos(beta)/sin(BETAHILF);
OMS = omega*sin(phi);
OMC = omega*cos(phi);
DCBH = -bomega/(sin(BETAHILF)*sin(BETAHILF));
//[ddot x;ddot y] = ddot phi * AAA + BBB
AAA = b*[-sin(phi)+2*cos(phi)*CBH;cos(phi)+2*sin(phi)*CBH];
BBB = b*omega*[-OMC-2*OMS*CBH + 2*cos(phi)*DCBH;-OMS+2*OMC*CBH + 2*sin(phi)*DCBH];
//alfa==ddot phi
//Bestimmung der Zwangskräfte:
// [I] [ddot x;ddot y] = FH + FP + FA + FRH + FRP
//=>[II] alfa * AAA + BBB = FH + FP + FA + FRH + FRP
//
//Euler:
// J*alfa= rSH'xFH' + rSP'x FP' + rSP'x (FA' + FRP' )
//<=> alfa= (rSH'xFH')/J + (rSP'x FP')/J + (rSP'x (FA' + FRP' ))/J
//<=> alfa= (rSH'xFH')/J + (rSP'x FP')/J + CCC
//<=> [III] alfa= ( FHskal*(-b) )/J + ( FPskal*(b*cos(beta)) )/J + CCC
//eingesetzt in [II] die schon ersetzte Gl. der Newton-Gl. =>
// [IV] ( ( FHskal*(-b) )/J + ( FPskal*(b*cos(beta)) )/J + CCC ) * AAA + BBB = FH + FP + FA + FRH + FRP
// <=> FHskal*AAA*(-b/J) + FPskal*AAA*(b*cos(beta)/J) + CCC*AAA + BBB = FH + FP + FA + FRH + FRP
//<=> FHskal*AAA*(-b/J) + FPskal*AAA*(b*cos(beta)/J) -FH -FP = -CCC*AAA - BBB + FA + FRH + FRP
//FH = TT*[0;FHskal] = [cos(phi),-sin(phi);sin(phi),cos(phi)]*[0;FHskal]
//FP = TT*[-FPskal*sin(beta);FPskal*cos(beta)]
AAAAA = [0,0;0,0];
AAAAA(1,1) = AAA(1,1)*(-b/J) + sin(phi);
AAAAA(1,2) = AAA(1,1)*(b*cos(beta)/J) + sin(beta)*cos(phi) +cos(beta)*sin(phi);
AAAAA(2,1) = AAA(2,1)*(-b/J) - cos(phi);
AAAAA(2,2) = AAA(2,1)*(b*cos(beta)/J) + sin(beta)*sin(phi) - cos(beta)*cos(phi);
CCC = ( kreuz([b;0],(FA_ + FRP_)) )/J;
bbbbb = -CCC*AAA - BBB + FA + FRH + FRP;
//Zangskraft bestimmen:
Fzwang = inv(AAAAA)*bbbbb;
FHskal = Fzwang(1,1);
FPskal = Fzwang(2,1);
FH_ = [0;FHskal];
FP_ = FPskal*[-sin(beta);cos(beta)];
FH = TT*FH_;
FP = TT*FP_;
f(1,1) = vx;
f(2,1) = (FA(1,1)+FH(1,1)+FP(1,1)+FRH(1,1)+FRP(1,1))/m;
f(3,1) = vy;
f(4,1) = (FA(2,1)+FH(2,1)+FP(2,1)+FRH(2,1)+FRP(2,1))/m;
f(5,1) = omega;
f(6,1) = ( kreuz([-b;0],FH_) + kreuz([b;0],(FA_+FP_+FRP_)) )/J;
//endfunction
Code 0-1: Aktueller Stand zum erweiterten Simulationsmodell.