Um diesen Fehler zu vermeiden würde ich gerne die Punktwolken in kontinuierliche Kurven interpolieren, (am besten so, dass dabei massiv RAM frei wird...)
Und dann diese Kurven miteinander vergleichen. (Bild 4, erklaer4.png)
Nun sind die Ursprünge übereinander gelegt, man kann schon das Messergebnis erahnen. Blöd ist nur dass hier Äpfel mit Birnen verglichen werden. Denn wenn die Entfernungen so verglichen werden, wären die Punkte der zweiten Messung so wie in Bild 2 (erklaer2.png) angeordnet.
Um diesen Fehler zu vermeiden würde ich gerne die Punktwolken in kontinuierliche Kurven interpolieren, (am besten so, dass dabei massiv RAM frei wird...)
Und dann diese Kurven miteinander vergleichen. (Bild 4, erklaer4.png)
Sorry, das ich so viele Posts hintereinander reingehauen hab, aber ich wollte, dass die Grafiken an die richtigen Stellen kommen... UNd man kann wohl nur 3 Anhänge an einen Post hängen?
Egal - jedenfalls Suche ich jetzt eine sinnvolle Interpolations-gedingse die bei 200 Punkten nicht ewig braucht, am besten "relevante" Punkte stärker bewertet (Punkte mit nahen Nachbarn oder Punkte die mit ihren Nachbarn in einer Linie liegen) und die sich obendrein nachher leicht miteinander vergleichen lässt...
Leider fällt mir dazu spontan nur "Spline-Interpolation", und die ist nicht sehr RAM-Schonend...
Vielelicht lass ichs auch einfach und lebe mit dem Fehler...
Mir ginbg es nicht um die genauere Messung von Einzelpunkten eher um die Mittelung einer Reihe von Punkten die gleiche Werte Liefern und Verzicht auf Start Stop pro Punkt.hab aber nicht verstanden, wie du dann diese wartezeit bis das signal stabil ist bzw. bis ein neues angefragtes kommt verkürzen willst? oder geht es dir nur um eine minimale noch rauszubekommende verbesserung durch wegfallen des servo anfahren?
am besten "relevante" Punkte stärker bewertet (Punkte mit nahen Nachbarn oder Punkte die mit ihren Nachbarn in einer Linie liegen) und die sich obendrein nachher leicht miteinander vergleichen lässt...
(wie gesagt nur als Anregung)
Manfred
@Manf Ah okay, da lässt sich wirklich vllt noch was rausholen! Werde das Morgen mal ausprobieren, für Heute ist die Zeit leider aus =(. Im angehängten Bild mein aktueller Status beim scannen (wohlgemerkt hat sich der Ort des Scans geändert). Habe also nun durch den Bresenham-Algorithmus auch die freien Felder mit ermittelt. Einziges wichtiges, das ich noch hab ist, das ich bisher einen ganz freien Scan nicht beachte also wenn meine Messung > 60cm ist (hab z.Zt. 60cm als Obergrenze eingestellt), werden z.Zt. keine freien Felder gesetzt.
@sep dein Ansatz die Position anhand der Umgebung zu bestimmen bzw. die Bewegung finde ich auch sehr interessant, das könnte als weitere Komponente in meine Odometrie einfliessen. Hab jetzt nicht mehr die Zeit leider, werde mir das am we mal genau anschauen. Wenn du da eine Lösung hast nur her damit, vllt ist die auch mit solchen Rasterfeldern wie ich sie nutze möglich.
Naja, wie ich versucht habe bildlich zu machen, kann man auch einelne Punkte nur bedingt miteinander vergleichen. Deswegen würde ich gerne Kurven hineinlegen.
Du meinst Du willst eigentlich nur eine Rastergrafik erzeugen, und die dann vergleichen. Ich würde gerne auf so eine Rastergrafik verzichten, denn soviel RAM hab ich nicht. Daher die Idee mit der interpolierten Kurve.
Jedenfalls bin ich dahintergekommen, dass nur Punkte, die vom selben Hindernis stammen (und daher meist eng beieinanderliegen) wirklich aussagekräftig sind. Wenn ein Hindernis nur von ein, zwei Punkten abgedeckt wird, kann es sein, dass es beim zweiten Scan gar nicht gesehen wird, weil es zwischen den Punkten liegt.
Aus Sicht der Hinderniserkennung ist das natürlich anders. Aber zunächst würde ich erst gerne meine Position exakt in einer Karte bestimmen können.
Hallo
@Manf: meinst Du sowas in der Art: http://zuff.info/SharpGP2D12_E.html
Sonst wärs ein weiterer Ansatz.
mfg
Fritzli
Das ist auch ein interessanter Link.
Ich finde alles richtig was gesagt wurde und lese sehr interessiert mit. Ich wollte nur betonen, dass man die Präzision in einer natürlichen Umgebung nicht überschätzen sollte, aber das wude ja auch schon geschieben:
ManfredWenn ein Hindernis nur von ein, zwei Punkten abgedeckt wird, kann es sein, dass es beim zweiten Scan gar nicht gesehen wird, weil es zwischen den Punkten liegt.
Ich sehe dieses Problem auch, daher wird bei mir im Moment 2 addiert wenn eins erkannt wird und nur 1 subtrahiert wenn nicht. So in der weise wollte ich arbeiten, lässt sich vllt. noch optimieren. Bei meinem Ansatz sind Objekte kleiner als die Rastergröße/2 nicht immer zu erkennen. Da mein Raster aber aktuell 5cm sind (scheint berechenbar, wohlgemerkt von einem Notebook) ist das für mich okay.Wenn ein Hindernis nur von ein, zwei Punkten abgedeckt wird, kann es sein, dass es beim zweiten Scan gar nicht gesehen wird, weil es zwischen den Punkten liegt.
Auf dem mega ist das natürlich nicht berechenbar
![]()
Und du wirst sehr schmale Hindernisse übersehen. Aber das macht vermutlich nix, denn manche anderen Hindernisse (Glasscheiben) kannst du ja auch nicht erkennen. Also brauchst du eh Ultraschall o.ä.
Lesezeichen