Liste der Anhänge anzeigen (Anzahl: 3)
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.
Liste der Anhänge anzeigen (Anzahl: 1)
und hier noch das Bild zur Korrelation
Liste der Anhänge anzeigen (Anzahl: 1)
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.
Liste der Anhänge anzeigen (Anzahl: 1)
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...