Ich hab mir das nochmal durch den Kopf gehen lassen...

nehmen wir an du baust einen Laserscanner, dann erhältst du Messdaten in Form einer 3D-Punktwolke in irgendeinem für uns nutzlosen Koordinatensystem.

Im ersten Schritt sollte man daher diese Punktwolke mal in ein kartesisches Koordinatensystem transformieren, idealerweise mit dem Bot im Ursprung (z.B. Y = vor/zurück, X = rechts/links, Z = hoch/runter).

Als nächstes gilt es, die Daten so weit wie möglich zu reduzieren, damit die Weiterverarbeitung nicht so viel Zeit benötigt.

Dabei würde ich folgendermaßen vorgehen:

1. Alle Voxel löschen, deren Z-Koordinate unterhalb einer bestimmten Schwelle liegt, denn es interessieren ja nur Hindernisse die der Bot nicht überfahren kann (und der Boden selbst ist eh uninteressant)

2. Alle verbleibenden Voxel deren Z-Koordinate kleiner ist als eine zweite Schwelle (Höhe des Bots + ein bischen Luft nach oben), gehören zu einem Hindernis

3. Voxel, deren Z-Koordinate über der zweiten Schwelle liegt, unter denen sich aber keine Hindernis-Voxel befinden, können gelöscht werden (denn das sind Hindernisse unter denen der Bot hindurch fahren kann)

4. die Z-Koordinaten aller Hindernis-Voxel können entfernt (bzw. im weiteren Verlauf ignoriert) werden, denn die genaue Höhe eines Hindernisses interessiert den Bot nicht, da er sich nur zweidimensional fortbewegen kann.

5. die X/Y-Koordinaten der Hindernis-Voxel werden in eine 2D Rasterkarte eingetragen, also z.B. ein weißes Bild mit schwarzen Hindernis-Pixeln.

6. etwas Bildverarbeitung dürfte jetzt angebracht sein, konkret z.B. eine Schließungsoperation um einzelne fehlerhafte Pixel zu entfernen.

7. Ausgehend vom Ursprung (also dem Bot) werden jetzt die durch die Hindernisse abgeschatteten (also nicht gescannten) Bereiche ermittelt und als unbekanntes Terrain markiert. Alle Pixel die jetzt noch übrig sind (also weder Hindernis noch unbekannt), müssen passierbar sein.