%   Script CARBRAKE.M
%
%   Entwurf eines ABS (Antiblockiersystems)
%
% J. Lunze
% 28.4.2003             1.11.2001
% für 2. Auflage: 29.12.2006
% für 3. Auflage: 1.12.2011
% für 5. Auflage: 12.11.2019
%
%
clear
close all
%%   Schlupfkennlinie
%
%
figure(1)
%  Formel und Parameter aus Kiencke/Nielson S. 241
c1Asphalt=1.2801;   % trockener Asphalt
c2Asphalt=23.99;
c3Asphalt=0.52;
c1Nass=0.857;       % nasser Asphalt
c2Nass=33.822;
c3Nass=0.347;
c1Eis=0.1946;       % Eis
c2Eis=94.129;
c3Eis=0.0646;

lambda=[0:0.005:1];
muAsphalt=c1Asphalt*(ones(size(lambda))-exp(-c2Asphalt*lambda))-c3Asphalt*lambda;
muHAsphalt=max(muAsphalt);
muNass=c1Nass*(ones(size(lambda))-exp(-c2Nass*lambda))-c3Nass*lambda;
muHNass=max(muNass);
muEis=c1Eis*(ones(size(lambda))-exp(-c2Eis*lambda))-c3Eis*lambda;
muHEis=max(muEis);
plot(lambda, muAsphalt, 'b', lambda, muNass, 'b',...
     lambda, muEis, 'b', [0 0.25], [max(muAsphalt), max(muAsphalt)], 'k--');
axis([0 1 0 1.2]);
yticks([0 0.2 0.4 0.6 0.8 1 ]);
xticks([0 0.2  0.4 0.6 0.8 1]);
latextitle('Beispiele f\"ur $$\mu(\lambda)$$-Kennlinien');
latextext(0.6, 1.05, 'trockener Asphalt');
latextext(0.6, 0.7, 'nasser Asphalt');
latextext(0.6, 0.2, 'Eis');
latextext(1.02, muAsphalt(length(lambda)), '$$\mu_{\rm G}$$');
latextext(-0.07, max(muAsphalt), '$$\mu_{\rm H}$$');
latexxlabel('$$\lambda$$');
latexylabel('$$\mu$$');
rotateY;

%% Simulation eines Abbremsmanövers: Schlupfverhalten
%
%
figure(2)
g=9.81;         % m/s^2
m=250;          % kg  (Masse von 1/4 eines Fahrzeugs)
r=0.406;         % m  (Radius eines Rades R16 - 16 Zoll-Felge)
ri=0.17;        % m  innerer Radius des Reifens
ra=r;           % m  äußerer Radius des Reifens
mr=25;          % kg  Reifenmasse
J=m*(ri*ri+ra*ra)/2;      % Massenträgheitsmoment eines Rades (berechnet für einen Hohlzylinder, [Dubbel, S. B32])
%
v0=50/3.6;      % m/s   Anfangsgeschwindigkeit 50 km/h
x0=0;           % m     Anfangsposition
omega0=v0/r;    % rad/s Anfangswinkelgeschwindigkeit des Rades
%
dt=0.01;        % Schrittweite für Speicherung der Daten
vinf=0.01;      % Abbruch der Berechnung von v
omegainf=0;     % Abbruch der Berechnung von omega
%               Schlupf bei konstanter Bremskraft auf trockenem Asphalt
c1=c1Asphalt;
c2=c2Asphalt;
c3=c3Asphalt;
Fb=m*v0/2;      % kg m/s^2 (N)   Bremskraft für Halt nach 2 Sekunden
Te=0.3;         % Simulationszeit
T=[0:dt:Te];
sim('carbrakeisol');
%
subplot(6,1,[1,2]);
plot(T,lambda, 'b');
latexylabel('$$\lambda \;\;$$');
rotateY;
xleer;
axis([0, Te, 0 0.06]);
yticks([0 0.02 0.04 0.06]);
latextitle('Schlupf beim Abbremsen auf Asphalt');
hold on
%
subplot(6,1,[3,4]);
plot(T,mu, 'b');
latexylabel('$$\mu \;\;$$');
rotateY;
xleer;
axis([0 Te 0 0.8]);
yticks([0 0.3 0.6]);
hold on
%
subplot(6,1,[5,6]);
plot(T,omega, 'b');
latexylabel('$$\omega$$ in $$\frac{\rm rad}{\rm s}$$');
rotateY;
latexxlabel('$$t$$ in s');
axis([0 Te 32 34.5]);
yticks([32  34]);
xticks([0 0.1 0.2 0.3]);
hold on
%              ... dasselbe auf nassem Asphalt
c1=c1Nass;
c2=c2Nass;
c3=c3Nass;
sim('carbrakeisol');
%
subplot(6,1,[1,2]);
plot(T,lambda,'b--');
hold off
%
subplot(6,1,[3,4]);
plot(T,mu,'b--',[0 Te],[Fb/m/g, Fb/m/g],'k:');
hold off
%
subplot(6,1,[5,6]);
plot(T,omega,'b--');
hold off


%%             ... dasselbe auf vereister Straße
%
figure(3)
c1=c1Eis;
c2=c2Eis;
c3=c3Eis;
Te=3;           % Simulation bis 3 Sekunden
T=[0:dt:Te];
sim('carbrakeisol');
%
subplot(6,1,[1,2]);
plot(T,lambda, 'b');
latexylabel('$$\lambda \;\;$$');
rotateY;
xleer;
latextitle('Schlupf beim Abbremsen auf vereister Strasse');
axis([0, Te, 0 1.1]);
yticks([0 0.5 1]);
%
subplot(6,1,[3,4]);
plot(T,mu, 'b');
latexylabel('$$\mu \;\;$$');
rotateY;
xleer;
axis([0 Te 0 0.25]);
yticks([0 0.1 0.2]);
%
subplot(6,1,[5,6]);
plot(T,omega, 'b');
latexylabel('$$\omega$$ in $$\frac{\rm rad}{\rm s}$$');
rotateY;
latexxlabel('$$t$$ in s');
axis([0 Te -5 55]);
yticks([0 20 40 60]);
xticks([0 1 2 3]);



%% Simulation eines Abbremsmanövers: Untersuchung der Geschwindigkeit
%
figure(4)
%               ... auf trockenem Asphalt
c1=c1Asphalt;
c2=c2Asphalt;
c3=c3Asphalt;
Te=3.2;         % Simulationszeit
T=[0:dt:Te];
sim('carbrakevel');
%
subplot(6,1,[1,2]);
plot(T,lambda, 'b');
latexylabel('$$\lambda \;\;$$');
rotateY;
xleer;
latextitle('Abbremsman\"over mit konstanter Bremskraft');
yticks([0 0.5 1]);
hold on
%
subplot(6,1,[3,4]);
plot(T,v, 'b');
latexylabel('$$v$$ in $$\frac{\rm m}{\rm s}$$');
rotateY;
xleer;
yticks([0 5 10 15]);
hold on
%
subplot(6,1,[5,6]);
plot(T,x, 'b');
latexylabel('$$s$$ in m');
rotateY;
latexxlabel('$$t$$ in s');
yticks([0 20 40]);
xticks([0 1 2 3 4]);
hold on

%                 ... auf nassem Asphalt
c1=c1Nass;
c2=c2Nass;
c3=c3Nass;
sim('carbrakevel');
%
subplot(6,1,[1,2]);
plot(T,lambda,'b--');
%
subplot(6,1,[3,4]);
plot(T,v,'b--');
%
subplot(6,1,[5,6]);
plot(T,x,'b--');

%                  ... auf vereister Straße
c1=c1Eis;
c2=c2Eis;
c3=c3Eis;
sim('carbrakevel');
%
subplot(6,1,[1,2]);
plot(T,lambda,'b-.');
axis([0, Te, 0 1.1]);
hold off
%
subplot(6,1,[3,4]);
plot(T,v,'b-.');
axis([0 Te -0.5 1.2*max(v)]);
hold off
%
subplot(6,1,[5,6]);
plot(T,x,'b-.');
axis([0 Te 0 1.2*max(x)]);
hold off



%%   Berechnung des stationären Wertes für lambda bei Vollbremsung
%   so dass m*r/J*aSoll/g-(c1*(1-exp(-c2*lambda))-c3*lambda)*(1-lambda)/r+r*m/J)=0
%aSoll=Fb/m;
%lambda=0.01;
%Fehler=10;
%while Fehler> 0.01
%      flambda=m*r/J*aSoll/g-(c1*(1-exp(-c2*lambda))-c3*lambda)*((1-lambda)/r+r*m/J);
%      flambdadot=-(c1*c2*exp(-c2*lambda)-c3)*((1-lambda)/r+r*m/J)+1/r*(c1*(1-exp(-c2*lambda))-c3*lambda);
%      lambda=lambda- flambda/flambdadot;
%      Fehler=m*r/J*aSoll/g-(c1*(1-exp(-c2*lambda))-c3*lambda)*((1-lambda)/r+r*m/J);
%end


%%   Vollbremsung auf Asphalt
%
figure(5)
c1=c1Asphalt;
c2=c2Asphalt;
c3=c3Asphalt;
%   Bremsung bei mu=1.1
%
mu=1.1;   % bisher 0.9
lambda=schlupf(mu,c1,c2,c3);
aSoll=g*J/m/r*mu*((1-lambda)/r+m*r/J);
Fb=aSoll*m;
Te=1.6;           % Simulationszeit
T=[0:dt:Te];
vinf=0.01;      % Abbruch der Integration für die Geschwindigkeit
omegainf=0.8*vinf/r*(1-lambda);
sim('carbrakevel');
%
subplot(6,1,[1,2]);
plot(T,lambda, 'b');
latexylabel('$$\lambda$$');
rotateY;
xleer;
latextitle('Vollbremsung auf trockener und nasser Asphaltstrasse');
axis([0, Te, 0 1.1*max(lambda)]);
yticks([0 0.5 1]);
hold on
%
subplot(6,1,[3,4]);
plot(T,v, 'b');
latexylabel('$$v$$ in $$\frac{\rm m}{\rm s}$$');
rotateY;
xleer;
axis([0 Te -0.5 1.1*max(v)]);
yticks([0 5 10 15]);
hold on
%
subplot(6,1,[5,6]);
plot(T,x, 'b');
latexylabel('$$s$$ in m');
rotateY;
latexxlabel('$$t$$ in s');
axis([0 Te 0 1.1*max(x)]);
yticks([0 5 10 15]);
xticks([0 0.5 1 1.5 2 2.5]);
hold on

%
%  dasselbe auf nassem Asphalt
c1=c1Nass;
c2=c2Nass;
c3=c3Nass;
omegainf=0;
sim('carbrakevel');
%
subplot(6,1,[1,2]);
plot(T,lambda,'b--');
axis([0, Te, 0 1.1*max(lambda)]);
hold off
%
subplot(6,1,[3,4]);
plot(T,v,'b--');
axis([0 Te -0.5 1.1*max(v)]);
hold off
%
subplot(6,1,[5,6]);
plot(T,x,'b--');
axis([0 Te 0 1.1*max(x)]);
hold off

%%    Vollbremsung mit ABS
%
figure(6)
c1=c1Asphalt;
c2=c2Asphalt;
c3=c3Asphalt;
vinf=0.01;      % Abbruch der Integration für die Geschwindigkeit
omegainf=0.8*vinf/r*(1-lambda);
sim('carbrakeabs');
%
subplot(6,1,[1,2]);
plot(T,lambda, 'b');
latexylabel('$$\lambda$$');
rotateY;
xleer;
latextitle('Vollbremsung auf trockener Strasse mit ABS');
axis([0, Te, 0 1.1*max(lambda)]);
yticks([0 0.5 1]);
hold on
%
subplot(6,1,[3,4]);
plot(T,v, 'b');
latexylabel('$$v$$ in $$\frac{\rm m}{\rm s}$$');
rotateY;
xleer;
axis([0 Te -0.5 1.1*max(v)]);
yticks([0  10 ]);
hold on
%
subplot(6,1,[5,6]);
plot(T,x, 'b');
latexylabel('$$s$$ in m');
rotateY;
latexxlabel('$$t$$ in s');
axis([0 Te 0 1.1*max(x)]);
yticks([0 5 10]);
xticks([0 0.5 1 1.5 2]);
hold on
%   zum Vergleich ohne ABS
omegainf=0;
sim('carbrakevel');
%
subplot(6,1,[1,2]);
plot(T,lambda,'b--');
axis([0, Te, 0 1.1*max(lambda)]);
hold off
%
subplot(6,1,[3,4]);
plot(T,v,'b--');
axis([0 Te -0.5 1.1*max(v)]);
hold off
%
subplot(6,1,[5,6]);
plot(T,x,'b--');
axis([0 Te 0 1.1*max(x)]);
yticks([0 10 20]);
xticks([0 0.5 1 1.5 2]);
hold off


%%  auf nassem Asphalt ohne ABS
%
figure(7)
Te=2.2;           % Simulationszeit
T=[0:dt:Te];
c1=c1Nass;
c2=c2Nass;
c3=c3Nass;
omegainf=0;
sim('carbrakevel');
%
subplot(6,1,[1,2]);
plot(T,lambda,'b--');
latexylabel('$$\lambda$$');
rotateY;
xleer;
latextitle('Vollbremsung auf nasser Strasse mit ABS');
axis([0, Te, 0 1.1*max(lambda)]);
%yticks([]);
hold on
%
subplot(6,1,[3,4]);
plot(T,v,'b--');
latexylabel('$$v$$ in $$\frac{\rm m}{\rm s}$$');
rotateY;
xleer;
axis([0 Te -0.5 1.1*max(v)]);
%yticks([]);
hold on
%
subplot(6,1,[5,6]);
plot(T,x,'b--');
latexylabel('$$s$$ in m');
rotateY;
latexxlabel('$$t$$ in s');
axis([0 Te 0 1.1*max(x)]);
%yticks([]);
%xticks([]);
hold on
%
%  dasselbe mit ABS
c1=c1Nass;
c2=c2Nass;
c3=c3Nass;
omegainf=0;
sim('carbrakeabs');
%
subplot(6,1,[1,2]);
plot(T,lambda, 'b');
axis([0, Te, 0 1.1]);
yticks([0 0.5 1]);
hold off
%
subplot(6,1,[3,4]);
plot(T,v, 'b');
axis([0 Te -0.5 1.1*max(v)]);
yticks([0 10]);
hold off
%
subplot(6,1,[5,6]);
plot(T,x, 'b');
axis([0 Te 0 1.1*max(x)]);
yticks([0 10 20]);
xticks([0 0.5 1 1.5 2]);
hold off



%%     Bilder in .EPS-Dateien
%
Epsbildc15('carbrk');
