AEP Gruppe B2: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
Keine Bearbeitungszusammenfassung |
|||
Zeile 7: | Zeile 7: | ||
== Software == | == Software == | ||
Programmiert wurde der NXT mithilfe von Matlab 2014a 32-Bit und [[RWTH_Aachen_Toolbox_meets_NXT]]. | Programmiert wurde der NXT mithilfe von Matlab 2014a 32-Bit und [[RWTH_Aachen_Toolbox_meets_NXT]]. | ||
== Konzept == | |||
== Quellcode == | [[Datei:AEP Gruppe B2 UML.jpg|750px]] | ||
== Quellcode (Auszug)== | |||
<syntaxhighlight lang="matlab" style="background-color: #EFF1C1; font-size:larger"> | <syntaxhighlight lang="matlab" style="background-color: #EFF1C1; font-size:larger"> | ||
Parameter eingeben | |||
power = 50; | power = 50; | ||
durchmesser = 0.056; %im Meter | durchmesser = 0.056; %im Meter | ||
Zeile 32: | Zeile 21: | ||
StreckeVorfahren = 0.1; % 10 cm vorfahren | StreckeVorfahren = 0.1; % 10 cm vorfahren | ||
grad = round(strecke/radumfang * 360); %2046 ; % 2046,28 Grad(errechnet durch den Radumfang) entspricht 1m | 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 | motorA = NXTMotor(MOTOR_A, 'Power', power, 'TachoLimit', 0,'SmoothStart', true); %% Unendlich lange fahren | ||
motorC = NXTMotor(MOTOR_C,'HoldBrake'); | motorC = NXTMotor(MOTOR_C,'HoldBrake'); | ||
motorA.SendToNXT(); | motorA.SendToNXT(); | ||
motorC.SendToNXT(); | motorC.SendToNXT(); | ||
Motor vorbereiten | |||
bParklueckeGefunden = false; | bParklueckeGefunden = false; | ||
XStart =0; | XStart =0; | ||
Parlücke suchen | |||
while(bParklueckeGefunden == false) | while(bParklueckeGefunden == false) | ||
Messwerte holen | |||
if (distance < 15) % Parklücke besetzt | if (distance < 15) % Parklücke besetzt | ||
else | else | ||
% Parklücke frei | % Parklücke frei | ||
if LueckenLaenge > luecke | if LueckenLaenge > luecke | ||
bParklueckeGefunden = true; | bParklueckeGefunden = true; | ||
end | end | ||
end | end | ||
end | end | ||
10 cm vorfahren | |||
motorA = NXTMotor(MOTOR_A, 'Power', power, 'TachoLimit', round(StreckeVorfahren/radumfang * 360)); %% Unendlich lange fahren | motorA = NXTMotor(MOTOR_A, 'Power', power, 'TachoLimit', round(StreckeVorfahren/radumfang * 360)); %% Unendlich lange fahren | ||
motorA.SendToNXT(); | motorA.SendToNXT(); | ||
motorA.WaitFor(); | motorA.WaitFor(); | ||
Einparken State Machine | |||
Gyro reset -> Winkel = 0 | |||
CalibrateGyro(nGyroPort, 'AUTO'); | CalibrateGyro(nGyroPort, 'AUTO'); | ||
pause(1) % NICHT BEWEGEN | pause(1) % NICHT BEWEGEN | ||
Erst jetzt wieder Motor an!!!! | |||
nState = 1; | nState = 1; | ||
bEinparkenErfolgreich = false; | bEinparkenErfolgreich = false; | ||
while(bEinparkenErfolgreich==false) | while(bEinparkenErfolgreich==false) | ||
switch nState | switch nState | ||
case 1 | case 1 | ||
nState = 2; | nState = 2; | ||
case 2 | case 2 | ||
nState = 3; | nState = 3; | ||
case 3 | case 3 | ||
nState = 4; | |||
case 4 | case 4 | ||
NXT_PlayTone(440, 100); % Fanfare | NXT_PlayTone(440, 100); % Fanfare | ||
bEinparkenErfolgreich = true;% Parkvorgang abgeschlossen | bEinparkenErfolgreich = true;% Parkvorgang abgeschlossen | ||
end | end | ||
end; | end; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Version vom 19. Juni 2014, 11:02 Uhr
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
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