PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Linienprogramm --> geht es besser als so:



strunz
30.03.2006, 19:00
Hallo Leute,

ich habe hier mal ein Leitlinienprogramm geschrieben.
Leider bin ich mit dem Ergebniss garnicht zufrieden.

Er foldt der Linie nicht zuverlässig oder garnicht.
Ich habe 5 x CNY70 Sensoren nebeneinander.

Meine frage:

was würdet ihr anders machen damit er stabiler der Linie folgt?
Ich weiss, dass der Code ziemlich trivial ist aber ich bin neuling auf dem Gebiet.

Bitte um Hilfe.


Hier mal mein der entscheidende Teil des Codes:
An PortA hängen die Sensoren,
an PortB die Motoransteuerung.





If Pina.5 = 0 And Pina.6 = 0 And Pina.7 = 0 Then
Waitms 100
Portb.4 = 0 'beide Motoren vor
Portb.5 = 1
Portb.6 = 0
Portb.7 = 1

Elseif Pina.5 = 0 And Pina.6 = 0 And Pina.7 = 1 Then
Waitms 100
Portb.4 = 1 'Motor links vor, rechts zurück
Portb.5 = 0
Portb.6 = 0
Portb.7 = 1

Elseif Pina.5 = 0 And Pina.6 = 1 And Pina.7 = 0 Then
Waitms 100
Portb.4 = 0 'beide Motoren zurück
Portb.5 = 1
Portb.6 = 0
Portb.7 = 1

Elseif Pina.5 = 0 And Pina.6 = 1 And Pina.7 = 1 Then
Waitms 100
Portb.4 = 1
Portb.5 = 0
Portb.6 = 0
Portb.7 = 1

Elseif Pina.5 = 1 And Pina.6 = 0 And Pina.7 = 0 Then
Waitms 100
Portb.4 = 0
Portb.5 = 1
Portb.6 = 1
Portb.7 = 0

Elseif Pina.5 = 1 And Pina.6 = 0 And Pina.7 = 1 Then
Waitms 100
Portb.4 = 0
Portb.5 = 1
Portb.6 = 1
Portb.7 = 0

Elseif Pina.5 = 1 And Pina.6 = 1 And Pina.7 = 0 Then
Waitms 100
Portb.4 = 0
Portb.5 = 1
Portb.6 = 1
Portb.7 = 0

Elseif Pina.5 = 1 And Pina.6 = 1 And Pina.7 = 1 Then
Waitms 100
Portb.4 = 1
Portb.5 = 0
Portb.6 = 1
Portb.7 = 0


Else

Portb.4 = 0
Portb.5 = 1
Portb.6 = 0
Portb.7 = 1
Waitms 100
End If

strunz
30.03.2006, 21:44
Hat wirklich keiner schon mal damit zu tun gehabt? Wie programiert ihr denn euere Lilienabtastung?

ähM_Key
30.03.2006, 22:44
Also ich würde das ganz anders machen. ;)

Erstmal sollten die Motoren über PWM geschwindigkeits-geregelt werden.
Weiterhin halte ich von Rückwärst fahren (oder auch ein Rad drehen) garnix; außer die Geometrie des Roboters/der Bahn lässt es nciht anders zu.
Dann würde ich aus den 5 Sensoren die mittlere Bahnposition ermitteln.
Also z.B. durchzählen wieviele nebeneinander liegende Sensoren 1 (true, wahr) sind. Dann noch den ersten mit 1 von irgend einer Seite ermitteln und die Hälfte der Anzahl der 1-er Sensoren dazurechnen. Jetzt noch - 2,5 Rechnen, und du hast schonmal nen Wert von -2,5 bis +2,5 in 0,5er Schritten. Jetzt kann man entweder nen linearen regler ansetzen, oder gleich nen PD-Regler. Ob letzterer mit den wenigen Sensordaten gut zurechtkommt, müsste man ausprobieren.

Hoffe mal du hast was verstanden und es geht so; viele Ansätze sind auch über die SuFo zu finden!

MfG; MK

pebisoft
31.03.2006, 17:19
nimm 3 sensoren. aus der mitte raus bis rechtsberührung oder aus der mitte raus bis linksberührung.

strunz
31.03.2006, 17:26
Danke für eure tips, ich habe das inzwischen so wie pebisoft vorgeschlagen hat gemacht jedoch mit 5 sensoren. das hat nun funktioniert.
Nur bei starken Kurven fährt er manchmal noch gerade aus. Aber das ist eine frage der Programierung, feinjustage...

Danke nochmal.