Hallo,
zurück zum Algorithmus: durch die Optimierung hat der eine Fähigkeit erhalten, die gar nicht geplant war: Jetzt kann er um die Ecke Fahren.
Bild hier
Hier sieht man 2 Kurvenscharen. Das sind die Spuren von 2 verschiedenen Fahrzeugen.
1. hoher Einschlagwinkel möglich (60°) und Liniensuche knapp vor der Vorderachse: Die Bahn schmiegt sich richtig in die Ecken der Leitlinie hinein.
2. mässiger Einschlagwinkel (bis 40°) und Liniensuche weiter voraus: Die Spur folgt etwas lockerer der Leitlinie, aber die Abweichung nach innen und nach aussen ist gut ausgeglichen. Es treten keine überschiessenden Relungen auf.
Der Algo scheint mir jetzt einmal gut geeignet als Verbesserung für mein bestehendes Fahrzeug.
Damit die Bahnregelung auch wirklich komfortabel in andere Programme einzufügen geht, schreibe ich gerade die Regelungsprozeduren in ein Regelungsobjekt um. Das ist aber recht wenig Aufwand vor Allem, wenn man den Nutzen in Rechnung stellt.
EDIT:
Die Hauptschleife im Programm, wo ursprünglich alles dringestanden ist, ist aufgeräumt. Hier der Teil mit Simulation, Linienerkennung und Steuerung:
Code:
uses unit2;
// ...
steer1:=tsteer.Create;
steer1.init(log,image1,imagemap,l,realedit(editmax),realedit(editvoraus),realedit(editview));
// ...
Code:
// ...
getnewposition(newx,newy,neworient); // Simulate Movement
// ...
steer1.getlinepoint(newx,newy,neworient,xfound,yfound,foundline);
if foundline then
begin
steer1.CalcAngle(xfound,yfound,newx,newy,neworient,sa);
editsteering.text:=inttostr(round(sa));
end
else
editv.text:='0' // emergency stop
;
// ...
So einfach gestalten sich dann der Einbau und der Aufruf im Hauptprojekt: https://www.roboternetz.de/phpBB2/viewtopic.php?t=36497
Grüsse,
Hannes
Lesezeichen