LiDAR

nero76

Moderator
Hallo Werner,

wo keine Gegenstände sind, braucht m.E. die Position auch nicht genau sein - problematisch sind wie Du schreibst die Randstellen (dort wo er nicht mähen soll) oder Engstellen. Dort sollte es sehr genau werden. Möglichst so genau wie mit einer Schleife. Und natürlich sollte er wissen wo er ist.

Vielleicht wäre das "LIDAR Lite v2" (http://www.exp-tech.de/lidar-lite-v2) eine Möglichkeit die Umgebung zu scannen? Die Reichweite wäre wohl gegeben. https://www.youtube.com/watch?v=mf45_cYzoV4
Bei Bäumen, Büschen usw. sehe ich immer das Problem von nicht vorhandenen Kanten beim Messen mit einem LIDAR...

Gruss,
Alexander
 
Hallo Werner,

wo keine Gegenstände sind, braucht m.E. die Position auch nicht genau sein - problematisch sind wie Du schreibst die Randstellen (dort wo er nicht mähen soll) oder Engstellen. Dort sollte es sehr genau werden. Möglichst so genau wie mit einer Schleife. Und natürlich sollte er wissen wo er ist.

Vielleicht wäre das "LIDAR Lite v2" (http://www.exp-tech.de/lidar-lite-v2) eine Möglichkeit die Umgebung zu scannen? Die Reichweite wäre wohl gegeben. https://www.youtube.com/watch?v=mf45_cYzoV4
Bei Bäumen, Büschen usw. sehe ich immer das Problem von nicht vorhandenen Kanten beim Messen mit einem LIDAR...

Gruss,
Alexander
 
Ja, mit dem Lidar könnte man so einiges Anfangen das meine Kenntnisse sicher übersteigt ;)

Meine Vorstellung wäre ja so einen Sensor auf ein Servo zu setzen und alle 22.5° eine Messung zu machen. Für eine feinere Winkelauflösung benötigt man auch eine feinere Karte, wieder mehr Speicher etc.

Gute Frage ob Blätter an Büschen erkannt werden, oder einzelne Baumstämme. Wenn der Zaun und die Hausmauern erkannt werden, sollte doch alleine das schon genügen.
 
Nun, die Karte muss nur fein genug sein um alle Engstellen abbilden zu können. Und das Prinzip für die Auswertung hast Du bereits ähnlich programmiert : Particle Filter - Du ermittelst ständig rundherum die Entfernungen (z.B. 360 Grad / 6 Grad => 60 Messungen). Für diese 60 Messungen berechnest Du nun die Wahrscheinlichkeit für deine zufällig auf der Karte verteilten Partikel. Die Partikel welche eine hohe Wahrscheinlichkeit aufweisen überleben. Schlechte Partikel werden einfach mit Kopien von guten aufgefüllt.

Den Sensor sollte man mal draußen testen :)
 
Die Auswertung hatte ich damals anders, da auch nur 5m Reichweite möglich waren:
Kartenauflösung 50x50cm
Hilfskarte angelegt und darin gemessene Hindernisse eingetragen.
Hilskarte nach Norden gedreht und mit Karte verglichen, Startpunkt war errechnte neue Position, danach alle Rasterpunkte um diese Position herum.
Beste Übereinstimmung ist neue Position.

Ein einfacher Partikelfilter wird nicht funktionieren. Denn die Partikel sollen ja die reale Position abbilden.
Wie soll man da 3m parallel zu einer Mauer fahren wenn die Partikel sich mit der Zeit um den Roboter konzentrieren?


Mit meiner Methode war in so einer Situation zumindest eine Koordinate fixiert.
 
Ok, Du hast dann also im Nahbereich eine neue Karte für die Messungen. Gute Idee! Damit erreichst Du auf jeden Fall die Genauigkeit des Sensors.

Bei mir würden die Partikel mit dem Roboter fahren (alle ungefähr in dieselbe Richtung, alle ungefähr gleich schnell wie der Roboter - plus Fehler für Distanz+Winkel). Nur durch das grobe Kartenraster würden sie korrigiert. D.h. nur wenn ein Partikel einen Fehler größer als das Raster aufweist würde er wegfallen. Im Worst-Case wäre mein Fehler die Auflösung der Karte, im Schnitt aber immer besser.
 
Das was ich hatte war eher eine 1 Partikel Berechnung ;)
Denn im Prinzip muss man fast alle diese Schritte (alle Messungen mit Karte vergleichen) für jeden einzelnen Partikel machen, daraus erhält man die Wahrscheinlichkeit, und erst dann kann man aus den vorhandenen Partikel die Position berechnen.

Meine Berechnung war soweit vereinfacht das anstatt beliebiger Partikel nur in 1m Umkreis um die errechnte Position nach einer neuen besseren Position gesucht wurde. Sozusagen eine fixe 24 Partikel Berechnung. Wenn in diesem Bereich nichts passenden war, war weiter die Odometrie gültig.
Genauigkeit war also im schlechtesten Fall das Rastermaß, erst wenn die neue Position um diese 50cm abweichen würde, würde Odometrie auf diesen neuen Wert gesetzt

Wie vorher gesagt, ich glaube nicht das man mit einem Partikelfilter parallel zu einer Wand fahren kann, mit dieser Methode aber schon. Dafür ist sie schlecht geeignet eine komplett neue Position zu erkennen.

Im Prinzip ist das eine einfache Mustererkennung, habe das aus der Richtung maschinelles Sehen abgeleitet. Zu beachten ist das hier ein erkanntes Hinderniss im Vordergrund alles andere dahinter verdeckt.
 
Messungen die direkten sichtkontakt benötigen sind aufwändig... zur mustererkennung fällt mir ein-
Wie wäre es mit einer accellerometer-map? Z.b. die z-achse kein rasen ist wirklich glatt - das sollte doch auch ganz nette daten für die mustererkennung liefern.
Oder auch die daten des neigungssensors.
 
Hallo,

ich habe gerade draußen ein paar Messungen bei direkter Sonneneinstrahlung mit zwei Lidars gemacht (RoboPeak RPLidar und LidarLiteV2) - das LidarLiteV2 würde ich als brauchbar für Outdoor einschätzen. Reichweite von 25m waren für dieses Lidar kein Problem.


lidar_vergleich.jpg



Gruss,
Alexander
Attachment: https://forum.ardumower.de/data/media/kunena/attachments/905/lidar_vergleich.jpg/
 
Zuletzt bearbeitet von einem Moderator:
Wie hast denn das so schnell hinbekommen?

Ist das die normale Ardumower Karte oder eine genauere?

Sieht ja ganz gut aus, vielleicht kann man an ein paar Stellen im Garten noch Reflektoren anbringen, dann gibt es sicher immer eine Erkennung.

Bald kann man sich die Schleife sparen ;)


Ich sehe es schon kommen das der Winter für die geplanten Projekte viel zu kurz wird...

LG Werner
 
Nun, ich habe das LidarLite schon gestern bekommen, dann direkt auf einen Servo geschnallt und ein kleines Programm geschrieben welches die Werte zum PC schickt. Am PC habe ich dann eine C++ SLAM-Library (http://home.wlu.edu/~levys/software/breezyslam/) eingebaut welche mir die Karte erstellt und die Position auf der Karte ermittelt.

lidar_lite.jpg


Die SLAM-Library ist bestimmt noch ausbaufähig (hatte ja meine Ideen schon geäußert - kommt dann später dran).

Auch die Hardware ist noch ausbaufähig (Nur noch eine Richtung drehen, Schleifkontakte, ...) - die max. Frequenz des Lidars ist auch nicht allzu hoch, aber vielleicht reicht es für einen langsamen Rasenmäher :)
Attachment: https://forum.ardumower.de/data/media/kunena/attachments/905/lidar_lite.jpg/
 
Zuletzt bearbeitet von einem Moderator:
AlexanderG schrieb:
die max. Frequenz des Lidars ist auch nicht allzu hoch, aber vielleicht reicht es für einen langsamen Rasenmäher :)

Aus diesen Überlegungen kam ich damals auf die Kartenauflösung von 50x50cm. Den der Roboter fährt max 50cm in der Sekunde, wenn man 1x in der Sekunde die Position feststellt, macht es wenig Sinn die Auflösung genauer zu machen.
Hindernisse sind damit auch 1 Feld groß. Und in 1 Sekunde sollte ein Scan zu schaffen sein.
(wollte auf der Atmega Plattform bleiben, das war eben auch ein Kompromiss den man eingehen muss. Vektorkarten wollte ich mir nicht antun)



SLAM ist ja ein weiter Begriff.
Der erste Punkt ist mit zB GPS abgehakt.
Komplett selbstständig eine Karte zu erstellen, das hast Du beim Ardumower schon eingebaut, ich gebe meinem eine Karte mit den großen Hindernissen vor.
Weiters kann meiner selbstständig weitere Hindernisse eintragen, das ist alles in 1 Byte für 1 Feld reingequetscht:
Derzeit: 2 Bit für fixe Hindernisse, 3 Bit für selbst erkannte Hindernisse, 3 Bit für Status gemäht. Die letzten 2 sind einfach Zähler damit ab einem gewissem Wert das Feld als gemäht, bzw als Hinderniss, erkannt wird.

Damit sollte die Karte mit der Zeit immer genauer werden, und könnte mit dem Lidar dann auch genauere Positionen liefern. Denn die Arbeit zB Schaukel, Rutsche, Bäume, Büsche, usw zu vermessen und in die Karte einzutragen, das soll der Roboter machen.

LG Werner
 
Zuletzt bearbeitet von einem Moderator:
Gibt natürlich auch genügend Situationen wo der Roboter das ohne Karte nicht erkennen kann (Abgrund, Pool, Pflastersteine, Nachbargelände etc.) - da sollte er schon sehr genau arbeiten an diesen Stellen.

Im Anhang noch der Code für das LidarLiteV2 (passende IDE mit allen Libraries findet man hier ) . Ich habe mal beim Hersteller des Low Cost RPLidar angefragt ob sie evl. Ihr Lidar mit einem besseren Laser (z.B. dem des LidarLiteV2, nähere Technik unter https://cdn.sparkfun.com/datasheets/Sensors/Proximity/lidarlite2_overview.pdf) ausstatten können. Ist zwar unwahrscheinlich dass sie das für z.B. 1000 Einheiten machen, aber wer weiß - Verkaufen lassen würde sich das bestimmt :)
Attachment: https://forum.ardumower.de/data/media/kunena/attachments/905/lidar_slam.zip/
 
Zuletzt bearbeitet von einem Moderator:
Dieser "Low-Cost" Lidar wäre mir in der aktuellen Ausführung schon zu teuer :(
Würde ich dann gleich in den Automower investieren, mein Vater hat jetzt einen, der ist wirklich nicht zu hören, traumhaft.

Ich würde den Lidar Lite auf einen Servo montieren und fertig. Gar nicht die Servobeschränkung aufheben, sondern einfach von links nach rechts, und gleich wieder links auf Anschlag. Dann braucht man keine anfälligen Schleifringe und hat auch gleich den Winkel als Sollvorgabe. Die Stellzeiten fürs zurückdrehen sind im 1/10s Bereich, in der Zeit kann zB die Auswertung stattfinden.

Wie kann man so einen Mechanismus wetterfest ausführen?
Tief hängende Äste sollten mechanisch verkraftet werden.
 
Sicher braucht der Automower eine Schleife, es gibt auch intelligentere Fahrmanöver, aber die nicht vorhandene Lautstärke und das andocken sind beeindruckend.


Ad Lidar: es gibt Segelwinden Servo die 360° und mehr drehen können. Leider eher langsam. Muss noch genauer suchen, vielleicht findet sich was passenderes.
Oder ein normales Servo und die 180° auf 360° untersetzen.
 
Beim Servo hab ich das Gefühl dass diese nicht für den Dauereinsatz geeignet sind (meiner hier wird extrem warm). Die ständige Richtungsumkehr macht ihm wohl zu schaffen.

Hier ist es bereits gelöst und sieht schon fast brauchbar für SLAM aus (die hohe Geschwindigkeit braucht man damit alle Messungen zueinander konsistent sind): http://fpaynter.com/2015/06/lidar-lite-visible-laser-testing/ (unten weiter auf der Seite ein Video)

Um die Geschwindigkeit noch weiter zu erhohen würde ich dann nur alle 3,6 Grad eine Messung machen (das Lidar schafft 200 Hz) und damit auf eine 2 Hz Rate kommen.
 
Oder gleich einen Getriebemotor mit Encoder nehmen, die Nullstellung muss zusätzlich erkannt werden.
Für die Regelung der Drehung und Datensammeln wird fast ein eigener Kontroller notwendig sein.

Bei den Messungen könnte man vielleicht probieren bei jedem Durchgang die Winkel leicht versetzen:
1 Umdrehung alle 5°
Dann 1° Zwischenschritt und wieder alle 5°
Wieder 1° Zwischenschritt usw.

Dann hat man nach 4 Umdrehungen alles in 1° Abschnitte erfasst.


Die hier gezeigten Konstruktionen sind für Rasenmäher aber alle ungeeignet.
Staub und Regendicht muss es sein.
Es muss robust sein, es muss an Büschen und Ästen anstoßen können ohne das etwas passiert.

Wenn ich daran denke wie mein Mäher letztens unter dem Wohnwagen durchgefahren ist, die Spiegellösung hätte er zuerst runtergerissen und dann geschreddert.

Eine Art Plexiglaskuppel könnte die Lösung sein. Bzw ein Ring aus Plexiglas, hinter dem dreht sich das LIDAR, und einen Deckel drauf.
So knapp beim Laser sollte es ohne Störungen gehen.

LG Werner
 
Ja, die ganze Optik in ein rundes Gehäuse verpacken und lange Kanäle hineinmachen. Dort evtl. wechselbare Fenster (dünnes Plexiglas/Glas) einbauen. Dann das ganze mit Schleifekontakten und unten mit einem Gummiring antreiben. In die feststehende Basis macht man Aussparungen für den Encoder. Die Nullposition wird einfach durch eine längere Aussparung umgesetzt.

laser_2015-11-02.png


Wär vielleicht etwas für einen 3D Drucker... :)
Attachment: https://forum.ardumower.de/data/media/kunena/attachments/905/laser_2015-11-02.png/
 
Zuletzt bearbeitet von einem Moderator:
Oben