kramann.info
© Guido Kramann

Login: Passwort:










kramann.info
© Guido Kramann

Login: Passwort:




Java / Reengineering

(EN google-translate)

(PL google-translate)

Als Zwischenschritt soll auf möglichst effiziente Weise das SUMO-Simulationsmodell von Scilab nach Java/Processing übertragen werden.

Verwenden Sie als Integrator die nachfolgende Implementierung eines Runge-Kutta-Integrators:

public class Integrator
{
    int anzahl;
  
    double[] k1,k2,k3,k4;
    
    double[] yhilf;
  
    Modell modell;
  
    public Integrator(Modell modell)
    {
        this.modell = modell;
        anzahl = modell.getGleichungsanzahl();
        k1 = new double[anzahl];      
        k2 = new double[anzahl];      
        k3 = new double[anzahl];      
        k4 = new double[anzahl];
  
        yhilf = new double[anzahl];            
    }  
    
    public void zeitschritt(double[] y,double[] y_alt, double t, double dt)
    {
        modell.steigung(k1,y_alt,t);
        for(int i=0;i<anzahl;i++)
            yhilf[i] = y_alt[i] + 0.5*dt*k1[i];
            
        modell.steigung(k2,yhilf,t+0.5*dt);            
        for(int i=0;i<anzahl;i++)
            yhilf[i] = y_alt[i] + 0.5*dt*k2[i];

        modell.steigung(k3,yhilf,t+0.5*dt);            
        for(int i=0;i<anzahl;i++)
            yhilf[i] = y_alt[i] + dt*k3[i];

        modell.steigung(k4,yhilf,t+dt);

        for(int i=0;i<anzahl;i++)
            y[i] = y_alt[i] + (dt/6.0)*(k1[i]+2.0*k2[i]+2.0*k3[i]+k4[i]);        
     }
}

Code 0-1: Integrator.pde / Integrator.java

Hinweise

  • Ein Fahrzeug sollte als Objekt einer Klasse "Sumo" implementiert werden.
  • "Sumo" soll die Methode void zeitschritt(y_neu,y_alt,pwm_li,pwm_re,Fext,Mext,sensor,dt) besitzen

Erläuterungen:

y_neu   neuer Systemzustand nach einem Integrationsschritt: x y phi vx vy omega
y_alt   alter Systemzustand
pwm_li  PWM-Wert linke Kette
pwm_re  PWM-Wert rechte Kette
Fext    externe Kraft (2D-Vektor / 2D-Array) resultierend aus Zusammenstoß mit anderem Fahrzeug
Mext    externes Moment (1D / double) resultierend aus Zusammenstoß mit anderem Fahrzeug
sensor  Entfernungssensorwert resultierend aus aktueller Situation
dt      Zeitschrittweite für Integration

Code 0-2: Erläuterungen

Beispiel-Projekte mit Processing
av_proc3.zip - Einfaches Fahrzeugmodell, das einen Zielpunkt anfährt
fahrzeug6.zip - Dreirad ohne Schlupf, das eine Linie verfolgt (Kreisbahn)

Musterlösung

SUMOSIM004.zip - Fahrzeug kann bereits über Pfeiltasten gesteuert werden.
SUMOSIM010.zip - Zwei Fahrzeuge, Sensor Rand und Gegner, Kollision (vereinfacht), Verhaltensmethoden vorbereitet: schlauA() und schlauB()
SUMOSIM011.zip - korrigiert
SUMOSIM012.zip - Sumo B ist ein einfacher Reflexagent
SUMOSIM012B.zip - Sumo B ist ein einfacher Reflexagent (studentische Variante)
SUMOSIM014.zip - Neuronales Netz lernt Antivalenz. Kann nun für Steuerung eines Sumos adaptiert werden.
SUMOSIM014b.zip - verbessert.
Neuromodul005.zip - Nur der Neuro-Teil isoliert. Lernen über "Gradientenverfahren".
Neuromodul008.zip - Nur der Neuro-Teil isoliert. Lernen über Backtracking.