und hier noch das Bild zur Korrelation
Aktueller Stand:
Ich versuche die Scan-Punkte durch Linien zu verbinden und die Linien zu "optimieren", Punkte die praktisch zwischen ihren Nachbarn liegen fliegen raus.
Dann vergleiche ich die Punkte der 2. Messung mit den Linien.
Das geht schnell wenn keine Drehung berücksichtigt wird, leider sind die Ergebnisse dann eher unbrauchbar, wenn trotzdem ein wenig gedreht wurde...
Umgekehrt ist die Dreh-Erkennung allein ebenso ungenau...
Zusammen dauert das ganze auf dem Notenbook über 2 Minuten, obwohl nur Verschiebungen von maximal +-10 cm erlaubt sind (Drehungen von +-10 Schritten = +-18°)
Und wirklich gut ist das Ergebnis auch nicht
Die Messwerte stimmen zwar mit den von Hand ermittelten überein, aber wenn man nachher die Punktwolken ansieht, könnte es doch noch etwas besser passen...
Immerhin ist der RAM-Bedarf nicht so hoch. (bzw könnte gut optimiert werden)
Und mit etwas Glück könnte ein Teil der DV noch währen des Scannens stattfinden, während sowieso auf den Sensor gewartet wird.
und hier noch das Bild zur Korrelation
Kann man das auch umkehren?Ich versuche die Scan-Punkte durch Linien zu verbinden und die Linien zu "optimieren", Punkte die praktisch zwischen ihren Nachbarn liegen fliegen raus.
Punkte die nicht in der nähe ihrer Nacharn liegen sind vieleicht Meßfehler, Störungen, haben vielleicht speziell auch Kantenfehler bei der Sharp Messung, die ja darauf aufbaut dass der ganze Leuchtfleck reflektiert wird.
Wenn man nur Punkte drin läßt dernen rechter und linker Nachbar in der Nähe liegen, dann hat man vielleicht eher ein störungsarmes Bild mit einigermaßen gesicherten Konturen, und ein bisschen weniger zu berechnen.
Im nächsten Durchgang kann man dann einige von dicht beieinander liegenden Punkten auch noch weglassen.
Manfred
Naja, das Problem sind halt relativ schmale Hindernisse. Eine Sprudelflasche in 1m Entfernung bekommt hat gerade mal ein, maximal zwei Punkte ab - und wenn die dann noch schlecht erkannt werden (Glas=durchsichtig) wars das halt.
Ich denke ich mache in (ferner) Zukunft dreierlei:
1.) Bewegungserkennung (aus den Scan-Daten Eigenbewegung ermitteln)
2.) Hinderniserkennung (hier ist jeder (!!) Punkt wichtig, auch vielleicht fehlerhafte)
3.) Kartennavigation (Orientierung anhand einer Landkarte...)
Alle drei Aufgaben verlangen nach unterschiedlichen, gegensätzlichen Ansätzen.
Die Kartennavigation z.B. ist nie wirklich genau, daher kann aus ihr nur bedingt auf die Bewegung geschlossen werden.
Ich habe jetzt eine funktionierende Lösung. Zwar keine wirklich gute, dafür aber eine recht fixe...
Ich vergleiche einfach die Punkte, so als ob sich nichts geändert hätte, also ich rechne einfach die X-Differenz aller Punkte zu den Punkten der vorrigen Messung aus - wobei Punkte in X-Richtung (und -X - Richtung) stärker gewichtet werden, dasselbe für die Y-Richtung.
Die Drehung kann ich ja mit einem ähnlichen Verfahren recht sauber erkennen.
In der Grafik sieht man mal das Ergebnis. (Blau sind die Punkte der 1. Messung, Rot die der 2. Messung, Grün sind die um die erkannte Verschiebung / Drehung korrigierten roten Punkte)
Für geringere Verschiebungen sind die Ergebnisse deutlich besser, aber ich wollte damit zeigen, dass auch größere Verschiebungen noch aktzeptabel erkannt werden.
Und immerhin geht die Berechnung (jedenfalls bislang auf dem PC) mit "lichtgeschwindigkeit" und skaliert linear zur Anzahl der Punkte.
Somit ist der begrenzende Faktor nur noch der SHARP-Sensor...
Nächste Woche werde ich, wenn ich dazukomme, versuchen präzisere Messungen zu machen.
Leider hat sich dieses Verfahren als zu ungenau erwiesen - es ist zwar "unglaublich" schnell, dafür aber schnell verwirrt, wenn nicht alle Wände rechtwinklig sind...
Da ich früher oder später sowieso eine kleine Kartenavigation einbauen wollte, hab ich beschlossen diesen Ansatz weiter zu verfolgen. Um neuerkannte Punkte in der Karte hinzuzufügen, muss ja deren Position aus Referenzpunkten möglichst genau ermittelt werden.
Also erzeuge ich direkt aus meinen Scan-Daten ein Linienmuster und vergleiche die Punkte der zweiten Messung dann mit den Linien.
Das lässt sich ganz gut optimieren.
- Da Wände meistens gerade sind, können sie durch wenige Stützpunkte ersetzt werden.
- Punkte die nicht in der Nähe einer Geraden sind brauchen nicht verglichen werden.
Bis jetzt läuft das ganze ersteinmal nur auf dem PC. Aber die Ergebnisse sind gut. Mit ein bisschen Arbeit dürfte sich das ganze auch deutlich optimieren lassen. Die nächsten Tage werde ich mal ein paar Versuchsmessungen machen.
Wenn das alles klappt werde ich das ganze auf den AVR "portieren".
Im Anhang ein Bild, das den aktuellen Stand wiederspiegelt.
Blau sind die Punkte der ersten Messung, man sieht die eingezeichneten genäherten Geraden.
Rot sind die Punkte der zweiten Messung, dabei die blassroten die, die für die Korrelation berücksichtigt werden.
Und grün letztendlich die roten, verschobenen Punkte...
Lesezeichen