AEP Gruppe B2

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Vorderansicht

Im SoSe14 wurde im Rahmen des Informatikpraktikums II die Aufgabe gestellt, ein autonom einparkendes Fahrzeug zu entwickeln. Als Grundlage diente ein Lego_Mindstorms_NXT. Entwickelt wurde dieses Fahrzeug von Dominik Bräker, Nina Gorski und Sebastian Henneböhl.

Aufbau

Seitenansicht

Das Fahrzeug wurde zunächst mit einer 1:1 Übersetzung über eine Kette zu einem Differential angetrieben, allerdings erwies sich diese Art von Antrieb als zu störanfällig und wurde durch einen 1:1 Zahnradantrieb zu einem Differential ersetzt. Die Lenkung wurde zunächst von Zahnräder übersetzt, welches allerdings Aufgrund der Genauigkeit durch eine Direktlenkung ersetzt wurde.

Es wurden neben dem NXT-Baustein an sich ein Antriebs- und ein Lenkungsmotor, ein Gyrosensor, ein Abstandssensor und ein Differential verbaut.


Die Abmessungen betragen:


Fahrzeuglänge: 31mm

Fahrzeugbreite: 15,5mm

Spurweite vorn: 12mm

Spurweite hinten: 12mm

Achsabstand: 22mm

Max. Radeinschlagswinkel Linkseinschlag: 20°

Max. Radeinschlagswinkel Rechtseinschlag: 20°

Bauplan

Hier ist der Bauplan für den LEGO Digital Designer zu finden. Datei:AEP Gruppe B2.lxf.zip

Software

Programmiert wurde der NXT mithilfe von Matlab 2014a 32-Bit und RWTH_Aachen_Toolbox_meets_NXT.

Konzept

Quellcode (Auszug)

 
Parameter eingeben
  power = 50;
  durchmesser = 0.056; %im Meter
  radumfang = durchmesser * pi;
  fahrzeuglaenge = 0.32; %in m
  luecke = fahrzeuglaenge * 1.3; %1,5 fache größe des fahrzeugs
  lueckegrad = round(luecke/radumfang * 360); 
  strecke = 1; %in m
  StreckeVorfahren = 0.1; % 10 cm vorfahren
  grad  = round(strecke/radumfang * 360);       %2046 ;    % 2046,28 Grad(errechnet durch den Radumfang) entspricht 1m
Motorfunktionen 
  motorA = NXTMotor(MOTOR_A, 'Power',  power, 'TachoLimit', 0,'SmoothStart', true); %% Unendlich lange fahren
  motorC = NXTMotor(MOTOR_C,'HoldBrake'); 
  motorA.SendToNXT();
  motorC.SendToNXT();
Motor vorbereiten
  bParklueckeGefunden = false;
  XStart =0;
Parlücke suchen
  while(bParklueckeGefunden == false)
Messwerte holen
    if (distance < 15) % Parklücke besetzt
    else
        % Parklücke frei
        if LueckenLaenge > luecke
            bParklueckeGefunden = true;          
        end
    end
  end
10 cm vorfahren
  motorA = NXTMotor(MOTOR_A, 'Power',  power, 'TachoLimit', round(StreckeVorfahren/radumfang * 360)); %% Unendlich lange fahren
  motorA.SendToNXT();
  motorA.WaitFor(); 
Einparken State Machine
Gyro reset -> Winkel = 0
  CalibrateGyro(nGyroPort, 'AUTO');
  pause(1) % NICHT BEWEGEN

Erst jetzt wieder Motor an!!!!
  nState = 1;
  bEinparkenErfolgreich = false;
  while(bEinparkenErfolgreich==false)
    switch nState
        case 1
                nState = 2;
        case 2
                nState = 3;
        case 3
                nState = 4;
        case 4
            NXT_PlayTone(440, 100); % Fanfare
            bEinparkenErfolgreich = true;% Parkvorgang abgeschlossen       
    end
  end;


--Ulrich Schneider (Diskussion) 08:31, 19. Jun. 2014 (CEST)

Tipps:

  • Quellcode absetzen (s.o.)
  • Inhalt ist übnersichtlich
  • Teammitglieder auf USER-Seite verlinken
  • Veröffentlichen Sie nicht den Quelltext, sondern das Konzept und die PAP. Sonst kopieren in einem Jahr alle Studierenden Ihren Quelltext.



→ zurück zum Hauptartikel: Informatikpraktikum 2 - SoSe14