- Akku Tests und Balkonkraftwerk Speicher         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 20 von 46

Thema: SLAM für autonomen Roboter nötig?

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    07.04.2015
    Beiträge
    908
    morob:
    Mit dem Stromverbrauch gebe ich Dir recht.
    Die Echtzeitfähigkeit ist im Verbund mit einem kleineren Controller (ich mache Interruptgeschichten, Regelung, Reflexe … auf einem ATXMega) nicht mehr entscheidend.
    Was mich allerdings abschreckt: 1MB RAM ist eine begrenzte Ressource. Bezüglich des Slams kann ich große Umgebungen zwar zwischen RAM und Flash rollen (die Sicht ist ja auf die Sensorreichweite begrenzt). Beim Pathfinder (der braucht ja im Zweifelsfall die gesamte Map, um den Weg von A nach B zu generieren) wird das allerdings kompliziert.

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    24.06.2004
    Ort
    Berlin
    Alter
    60
    Beiträge
    540
    Zitat Zitat von Holomino Beitrag anzeigen
    morob:
    Mit dem Stromverbrauch gebe ich Dir recht.
    Die Echtzeitfähigkeit ist im Verbund mit einem kleineren Controller (ich mache Interruptgeschichten, Regelung, Reflexe … auf einem ATXMega) nicht mehr entscheidend.
    Was mich allerdings abschreckt: 1MB RAM ist eine begrenzte Ressource. Bezüglich des Slams kann ich große Umgebungen zwar zwischen RAM und Flash rollen (die Sicht ist ja auf die Sensorreichweite begrenzt). Beim Pathfinder (der braucht ja im Zweifelsfall die gesamte Map, um den Weg von A nach B zu generieren) wird das allerdings kompliziert.
    du kannst den ram speicher aufrüsten bei teensy 4.1
    das leben ist hart, aber wir müssen da durch.

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    07.04.2015
    Beiträge
    908
    Frei nach https://www.heise.de/ct/artikel/An-d...ks-290662.html ein ganz einfacher SLAM (ohne Lösung für Closed loop oder kidnapped robot-Problem) für Lidaranwendungen

    Eingangsseitig emmitiert die Hardware bei einer Sensormessung Abstandswert, Messwinkel und die aus den Odometriedaten ermittelte Pose des Roboters (X/Y/Orientation). Messungen werden auf dem Rechner bis zur vollständigen Umdrehung der Sensorplattform gesammelt und als ScanPackage an den SLAM-Algorithmus versendet (Es kommen also "viele" Messungen als Rundumblick gleichzeitig an).

    Aufgabe 1: Der erste Scan wird anhand der subjektiven Roboterpose eingetragen (siehe obiger Artikel). Die Pose der letzten Messung im ScanPackage wird gepuffert. Eine zweite Pose (AlgPose) wird auf die Werte der subjektiven Pose initialisiert.

    Aufgabe 2: Neues ScanPackage, neue letzte subjektive Pose. Bilde ein PoseChange (dx/dy, Blickwinkeländerung)

    Aufgabe 3: Nimm einen Zufallsgenerator und variiere die drei Bestandteile von PoseChange um z.B. +/-20%. Bei 100 Variationen bekommst Du 100 leicht unterschiedliche PoseChanges zurück.

    Aufgabe 4: Schlage jede generierte Variation von PoseChange einmal auf AlgPose auf und teste, wie die Sensorwerte in die bisherige Map passen (Test gibt einen Gewichtungswert (Anzahl der passenden Punkte frei-frei und besetzt-besetzt/Anzahl aller Punkte des Scans) für die Variation zurück)

    Aufgabe 5: Trage die Sensorwerte der Variation mit dem größten Gewicht in Deine Map ein und schlage den dazugehörigen PoseChange auf die AlgPose auf.

    That's it
    Ohne Studium machbar, vielleicht etwas unbequem die Transformationen der Posen und Linien, aber auch nur Mittelstufenmathe.

    Neben dem Raster und der Anzahl der Variationen darf man sicher noch den Test/Update verfeinern (z.B. messdistanzabhängige Fehler in der Gewichtung berücksichtigen und so eine Varianz um den gemessenen Punkt einführen). Auch kann man vielleicht mal am Zufallsgenerator spielen.

    Sicher eine Menge Holz: Das testen von beispielsweise 100 Linien mit sagen wir durchschnittlich 30 Rasterpunkten in vielleicht 100 Variationen durch den Bresenham sind halt 300000 Rasterpunkte und Vergleiche zur Bearbeitung eines Scan-Paketes. Bei einem RPLidar mit 5 U/s und 360 Messungen/U wird das noch enger. Aber man muss ja nicht alle Messwerte im SLAM berücksichtigen. Für einen schneckigen Staubsauger erst recht nicht.


    Code:
            public double Test(Pose pose, LidarScanData scan)
            {
                int mulSum = 0;
                int pointSum = 0;
                //Create absolute points from pose and scan data
                List<Line> transformed = TransformScanToPoints(scan, pose);
    
                //for each scan line 
                foreach (Line ln in transformed)
                {
                    if (ln != null)
                    {
                        int x0 = (int)Math.Round(ln.P1.X / Raster);
                        int y0 = (int)Math.Round(ln.P1.Y / Raster);
    
                        int x1 = (int)Math.Round(ln.P2.X / Raster);
                        int y1 = (int)Math.Round(ln.P2.Y / Raster);
    
                        int dx = Math.Abs(x1 - x0), sx = x0 < x1 ? 1 : -1;
                        int dy = Math.Abs(y1 - y0), sy = y0 < y1 ? 1 : -1;
                        int err = (dx > dy ? dx : -dy) / 2, e2;
    
                        //rastering (Bresenham's line algorithm)
                        for (; ; )
                        {
                            int mul = (x0 == x1 && y0 == y1) ? this[x0, y0] : -this[x0, y0];
                            if (mul > 0)
                                mulSum++;
                            pointSum++;
                            if (x0 == x1 && y0 == y1)
                                break;
    
                            e2 = err;
                            if (e2 > -dx) { err -= dy; x0 += sx; }
                            if (e2 < dy) { err += dx; y0 += sy; }
                        }
    
                    }
                }
                return (double)mulSum / (double)pointSum;
    
            }
    
    
    
    
    
            public List<Line> Add(Pose pose, LidarScanData scan)
            {
                //Create absolute points from pose and scan data
                List<Line> transformed = TransformScanToPoints(scan, pose);
    
                //for each scan line 
                foreach (Line ln in transformed)
                {
                    if (ln != null)
                    {
                        int x0 = (int)Math.Round(ln.P1.X / Raster);
                        int y0 = (int)Math.Round(ln.P1.Y / Raster);
    
                        int x1 = (int)Math.Round(ln.P2.X / Raster);
                        int y1 = (int)Math.Round(ln.P2.Y / Raster);
    
    
    
    
                        int dx = Math.Abs(x1 - x0), sx = x0 < x1 ? 1 : -1;
                        int dy = Math.Abs(y1 - y0), sy = y0 < y1 ? 1 : -1;
                        int err = (dx > dy ? dx : -dy) / 2, e2;
    
                        for (; ; )
                        {
                            //setPixel(x0, y0);
                            this[x0, y0] = (SByte)Math.Max((int)this[x0, y0] - 1, -128);
    
                            if (x0 == x1 && y0 == y1)
                            {
                                this[x0, y0] = (SByte)Math.Min((int)this[x0, y0] + 5, 127);
                                break;
                            }
    
    
                            e2 = err;
                            if (e2 > -dx) { err -= dy; x0 += sx; }
                            if (e2 < dy) { err += dx; y0 += sy; }
                        }
                    }
                }
                return transformed;
            
            }
    Geändert von Holomino (25.06.2020 um 23:53 Uhr) Grund: A1 Korrektur Init der ALgPose

  4. #4
    HaWe
    Gast
    Grundsätzlich ist aber auch die Frage, was man von seinem "Modell" erwartet, und worauf man bereit ist zu verzichten.
    Wenn man bereit ist, dauerhafte Schmutzecken zu akzeptieren, die ständig "vergessen" werden, kann man sicher auch mit sehr einfachen Konsruktionen leben.

  5. #5
    HaWe
    Gast
    Zitat Zitat von morob Beitrag anzeigen
    meint ihr nicht ein microcontroller wie tennsy 4.1 kann die daten nicht verarbeiten vom slam?
    denke ich auch, "irgendwie", ich habe es ja (ansatzweise) auch schon mit einem Arduino Due geschafft.

    - - - Aktualisiert - - -

    Zitat Zitat von Holomino Beitrag anzeigen
    Das gängig in Staubsaugern verbaute RPLidar ist prinzipiell nichts anderes als ein drehbarer Sharp-IR-Sensor (Triangulation - gleiches Messprinzip).

    Bezüglich Stabilität: Ich habe mal einen Langzeittest in der Simulation ein paar Tage laufen lassen (Roboter mit Lidar fährt über Zielpunkte durch ein kleines Labyrinth). Das hat meine Befürchtungen bezüglich des "Zulaufens der Map" (Die Karte verschwimmt so weit oder verschiebt sich, dass die Zielpunkte nicht mehr erreicht werden können) zerstreut.
    Der Punkt ist:
    wenn man keine sehr exakte Positionsbestimmungs-Methode hat, dann kann man den Teil mit der Karte vergessen.
    Denn der Robot muss ja erst mit seiner genau bestimmbaren Position eine genaue Karte ermitteln, die hinterher, wenn er sich frei im Raum zum Saubermachen bewegt, auch noch als Referenz stimmen muss.
    Mit Odometrie, Gyro, Kompass und GPS wird das nichts indoors, da laufen spätestens nach 15 Minuten alle Werte komplett aus dem Ruder.
    Daher braucht man exakte externe Navigations-Referenzen (Baken), die per Peilung eine zuverlässige und reproduzierbare Positionsberechnung erlauben.
    Ob man dann 1 IR-Sensor drehbar anbringt oder ein halbes Dutzend fest montiert rundrum als Hindernissensoren, ist fast schon reine Geschmackssache.
    Allerdings plus Bumper-Stoßstange zusätzlich.

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    07.04.2015
    Beiträge
    908
    Zitat Zitat von HaWe Beitrag anzeigen
    Daher braucht man exakte externe Navigations-Referenzen (Baken), die per Peilung eine zuverlässige und reproduzierbare Positionsberechnung erlauben.
    Diesen Satz verstehe ich nicht.
    Insbesondere unter dem Gesichtspunkt, dass ein käuflicher Staubsauger keine externen Referenzen zur Navigation verwendet und trotzdem funktioniert, verstehe ich ihn nicht!

    Neinneinneinnein, ich versteh ihn nicht!

  7. #7
    HaWe
    Gast
    Zitat Zitat von Holomino Beitrag anzeigen
    Diesen Satz verstehe ich nicht.
    Insbesondere unter dem Gesichtspunkt, dass ein käuflicher Staubsauger keine externen Referenzen zur Navigation verwendet und trotzdem funktioniert, verstehe ich ihn nicht!
    Neinneinneinnein, ich versteh ihn nicht!
    ich denke, (gute) käufliche Geräte arbeiten ganz anders, mit viel komplizierterer Hard- und v.a. Software, als was wir ohne weiteres zur Verfügung haben mit "unseren" Kenntnissen und Methoden.
    ich habe z.B. einmal ein pdf gefunden, bei dem die Positions- und Navigations-Berechnungen über 2 komplett unabhängige extended Kalman Filters aus Odometrie mit 2xRotationssensoren und 9DOF IMU mit völlig unterschiedlichen Filtereinstellungen funktionieren, deren Zustandsraum-Modellierungen abhängig sind vom detektierten Untergrund. (Schon bei 1 Standard-Kalman für 2 Sensoren = 2DOF komme ich an meine Grenzen.)
    Auf diese Weise konnte mit erheblichem mathematischen Aufwand auch ohne externe Referenzen eine gute Positionierung und Navigation ermöglicht werden.
    zu Extended Kalman Filters s. z.B. https://www.cbcity.de/das-kalman-fil...rklaert-teil-1,
    https://www.cbcity.de/das-kalman-fil...rklaert-teil-2;
    https://en.wikipedia.org/wiki/Extended_Kalman_filter .
    Wer aber jemals für seinen Roboter so einen Kalman selber errichten und optimieren wollte, wird schnell gemerkt haben, dass man dann irgendwann scheitert, wenn man kein Mathematiker ist und auch nicht die exakten kompletten Sensor-Messstatistiken zu allen Einzelsensoren für die mathematisch-statistischen Modelle hat - oder mit großen Messfehlern leben muss.
    Im obigen pdf von dir https://kaeni.de/hack-des-xiaomi-mi-...nte-einblicke/ läuft ja auch die lokale Software zusammen mit der Software auf einem Hersteller-Server über HTTPS, da kann man sich vorstellen, was da wohl mathematisch dahintersteckt.
    Zum Selbermachen halte ich diesen Weg für aussichtslos, ich zumindest habe es versucht und musste aufgeben.

    Der einzig praktikable Weg für Hobby-Bastler ohne Mathematikstudium ist daher IMO eine Navigation über externe Baken.
    Geändert von HaWe (25.06.2020 um 18:25 Uhr) Grund: typo

  8. #8
    HaWe
    Gast
    @Holomino
    Ich bezog mich auf die "Karten", bis wohin ich eben selber gekommen bin, die also MEINE Versuche ergeben haben.
    Deine Grafiken kannte ich nicht, sie waren hier auch nirgends verlinkt, sie sehen aber vergleichsweise -zig mal besser aus: Ich habe per Odometrie niemals auch nur annähernd rechte Winkel in den Karten an den Wandecken erhalten. Schon beim schräg überfahren einer Teppichkante kam es zu etlichen Grad Kursabweichung, die die Odometrie überhaupt nicht bemerkt hat, auch kam es zu Schlupf unter den Reifen beim Anfahren und Wenden, und das war dann absolut nicht praxistauglich - spätestens beim mehrmaligen Überfahren und Manövrieren nach 15 oder 30 Minuten.
    Da ich andere zuverlässigere Odometrie- oder Navigationsverfahren (deine?) nicht kenne, und auch "mein" Kalman bei dem driftenden Gyro und abgelenktem Kompass zusammen mit der Odometrie nicht zu stabilisieren war, habe ich für mich entschieden: nie mehr ohne dm-Wellen-Baken, falls ich nochmal damit anfangen sollte.

Seite 2 von 2 ErsteErste 12

Ähnliche Themen

  1. Roboter mit Neato Lidar und SLAM
    Von teamohnename im Forum Vorstellungen+Bilder von fertigen Projekten/Bots
    Antworten: 4
    Letzter Beitrag: 20.04.2015, 12:41
  2. Visuelle Odometrie/SLAM für Outdoor-Roboter
    Von Seppl Meyer im Forum Sensoren / Sensorik
    Antworten: 2
    Letzter Beitrag: 04.07.2013, 14:36
  3. Softwarekonzept für autonomen Roboter
    Von pemiso im Forum Software, Algorithmen und KI
    Antworten: 10
    Letzter Beitrag: 11.02.2013, 16:58
  4. Autonomer Roboter, SLAM, dynamische Routenplanung -> Mindestanfordung an die Hardware
    Von AlexJ im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 1
    Letzter Beitrag: 13.05.2012, 09:12
  5. ASM Programm für autonomen Roboter
    Von mav0r im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 1
    Letzter Beitrag: 09.02.2006, 00:05

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

fchao-Sinus-Wechselrichter AliExpress