kramann.info
© Guido Kramann

Login: Passwort:










Robuste Systemintegration
1 Grundlagen
..1.1 Newton
....1.1.1 LinearSchwinger
....1.1.2 Daempfung
....1.1.4 ODE
....1.1.5 Saaluebung
..1.2 NewtonEuler
....1.2.1 Traegheitsmomente
....1.2.2 Modellgleichungen
....1.2.3 Einfachpendel
..1.3 Scilab
....1.3.1 Erste_Schritte
....1.3.2 Skripte
....1.3.3 Funktionen
..1.4 Laplace
....1.4.1 Eigenwerte
....1.4.2 PT1
..1.5 Regleroptimierung
....1.5.1 Guetefunktion
....1.5.2 Heuristiken
....1.5.3 Scilab
..1.6 Einstellregeln
....1.6.1 Totzeit
....1.6.2 Methode1
....1.6.3 Methode2
....1.6.4 Scilab
..1.7 Zustandsregler
..1.8 Polvorgabe
..1.8 Polvorgabe_alt
..1.9 Beobachter
....1.9.1 Haengependel
..1.10 Daempfungsgrad
..1.11 Processing
....1.11.1 Installation
....1.11.2 Erste_Schritte
....1.11.3 Mechatronik
....1.11.4 Bibliotheken
....1.11.5 Uebung
....1.11.6 Snippets
......1.11.6.1 Dateioperationen
......1.11.6.2 Bilder
......1.11.6.3 GUI
......1.11.6.4 Text
......1.11.6.5 PDF
......1.11.6.8 Maus
......1.11.6.10 Zeit
......1.11.6.13 Animation
......1.11.6.15 Simulation
....1.11.7 Referenzen
..1.12 Breakout
2 Beispiel
3 Beispielloesung
4 Praxis
5 javasci
6 Fehlertoleranz1
7 Reglerentwurf
..7.1 Sprungantwort
..7.2 Messdaten
..7.3 Systemidentifikation
..7.4 Polvorgabe
..7.5 Beobachter
..7.6 Robuster_Entwurf
..7.7 SIL
8 Systementwicklung
9 Arduino
..9.1 Lauflicht
..9.2 Taster
..9.3 Sensor
..9.12 Motor_PWM1
..9.13 Motor_PWM2_seriell
..9.14 Motor_PWM3_analogWrite
..9.15 Scheduler
..9.20 AV
..9.21 Mikrofon
..9.22 Universal
....9.22.1 Laborplatine
....9.22.2 LED_Leiste
....9.22.3 Motortreiber
....9.22.4 Sensoreingaenge
....9.22.5 Taster
....9.22.6 Tests
....9.22.7 Mikrofon
....9.22.8 Lautsprecher
....9.22.9 Fahrgestell
..9.23 Zauberkiste
..9.24 OOP
....9.24.1 Uebungen
..9.25 AVneu
....9.25.1 Tests
..9.26 DA_Wandler
..9.27 CompBoard
....9.27.1 Tastenmatrix
....9.27.2 ASCIIDisplay
..9.28 CTC
..9.29 Tonerzeugung
10 EvoFuzzy
..10.1 Fuzzy
....10.1.1 Fuzzylogik
....10.1.2 FuzzyRegler
....10.1.3 Uebung9
....10.1.5 Softwareentwicklung
......10.1.5.1 AgileSoftwareentwicklung
......10.1.5.2 FuzzyRegler
......10.1.5.3 Uebung
....10.1.6 Umsetzung
......10.1.6.1 FuzzyRegler
......10.1.6.2 Simulation
......10.1.6.3 Optimierung
......10.1.6.4 Uebung
....10.1.7 Haengependel
......10.1.7.1 Haengependel
......10.1.7.2 Simulation
......10.1.7.3 FuzzyRegler
......10.1.7.4 Optimierer
......10.1.7.5 Genetisch
....10.1.8 Information
....10.1.9 Energie
..10.2 Optimierung
....10.2.1 Gradientenverfahren
....10.2.2 Heuristiken
....10.2.3 ModifizierteG
....10.2.4 optim
..10.3 Genalgorithmus
..10.4 NeuronaleNetze
....10.4.1 Neuron
....10.4.2 Backpropagation
....10.4.3 Umsetzung
....10.4.4 Winkelerkennung
..10.5 RiccatiRegler
11 Agentensysteme
12 Simulation
20 Massnahmen
21 Kalmanfilter
..21.1 Vorarbeit
..21.2 Minimalversion
..21.3 Beispiel
30 Dreirad
31 Gleiter
..31.1 Fehlertoleranz

31 Gleiter

  • Wesentliche Vereinfachung gegenüber "Gleiter".
  • Ein Körper gleitet über eine Ebene und kann über eine Kraft Fx in X- bzw. Fy in Y-Richtung beschleunigt werden.
  • Er besitzt einen Sensor, der ein 7x7 Rasterbild des Bodens liefert.
  • Am Boden ist eine Bahn eingezeichnet, der entlang das Vehikel sich bewegen soll.
  • Für die Regelung und Steuerung können die Sensordaten benutzt werden.
gleiter.zip - Ausgangspunkt für die nachfolgende Übung.
clear();
clf();

XMAX=500;
YMAX=500;

figur=gcf(); // Handler der Grafik holen
figur.figure_size= [500,500];
achsen = gca();
achsen.data_bounds = [0,0;YMAX,XMAX];//Achsen-Definitionsbereich

SENSORBREITE=7;
SENSORRADIUS = round(    (SENSORBREITE-1)/2   );

plot([0,500],[0,0]);
plot([0,500],[500,500]);
plot([0,0.01],[0,0]);

plot([100,400],[100,100]);
plot([100,400],[400,400]);
plot([100,100.01],[100,400]);
plot([400,400.01],[100,400]);

plot([150,350],[150,150]);
plot([150,350],[350,350]);
plot([150,150.01],[150,350]);
plot([350,350.01],[150,350]);


bodenmatrix = zeros(YMAX,XMAX);
sensormatrix = zeros(SENSORBREITE,SENSORBREITE);

for xx=100:400
    for yy=100:400
        bodenmatrix(yy,xx)=4;
    end
end
for xx=150:350
    for yy=150:350
        bodenmatrix(yy,xx)=0;
    end
end


Matplot1(sensormatrix,[0,0,SENSORBREITE,SENSORBREITE]); //Matrix füllt ganzen Bereich aus, Default-Colormap.
grafik = gce();
grafik.rect = [0,0,SENSORBREITE*8,SENSORBREITE*8];

x=120;
y=100;
t=0;
dt=0.03;
m=1.0;
D=0.1;
vx=0.0;
vy=0.0;
Fx=0.0;
Fy=0.0;
ZX=0;
ZY=0;
for i=1:1000

    xalt = x;
    yalt = y;

    ax = (Fx - D*vx)/m;
    ay = (Fy - D*vy)/m;
    vx = vx + dt*ax;
    vy = vy + dt*ay;
     x =  x + dt*vx;
     y =  y + dt*vy;

    //Sensormatrix aktualisieren:
    ix=round(x);
    iy=YMAX - round(y);  //Umgekehrt, da Koord. von bodenmatrix umgekehrt gegenüber plot.
    for xx=1:SENSORBREITE
        for yy=1:SENSORBREITE
            xb = xx+ix-SENSORRADIUS;
            yb = yy+iy-SENSORRADIUS;
            if (xb>0 & xb<=XMAX & yb>0 & yb<=YMAX) then 
                sensormatrix(yy,xx) = bodenmatrix(yy+iy-SENSORRADIUS,xx+ix-SENSORRADIUS);
            else
                sensormatrix(yy,xx) = 0;
            end 
        end
    end

    //Konzept für die Regelung -------------------------

    gewichte = [30,20,10,0,-10,-20,-30];
    wx = gewichte*sensormatrix(4,1:7)';
    wy = -gewichte*sensormatrix(1:7,4);

    Fx =  -30*wx + ZX;
    Fy =  -30*wy + ZY;

    if (wy>0 & wx==0) then
        ZX=20;
    elseif (wy<0 & wx==0) then
        ZX=-20;
    end

    if (wy==0 & wx>0) then
        ZY=20;
    elseif (wy==0 & wx<0) then
        ZY=-20;
    end

    //ENDE Konzept für die Regelung -------------------------

    sleep(10);
    plot([xalt,x],[yalt,y],'re');
    grafik.data = sensormatrix;    
    t=t+dt;
end

Code 31-1: gleiter.sce (vergl. oben).

Gleiterfahrt, Momentaufnahme.

Bild 31-1: Gleiterfahrt, Momentaufnahme.

Übung

Entwickeln und implementieren Sie ein rubustes, transparentes Konzept, mit dessen Hilfe das Fahrzeug gegen Uhrzeigersinn seine Bahn entlangfährt.

Machen Sie dabei gebrauch von den "Mustern für fehlertoleranten Softwareentwurf".