Tutorial · Gevorderd · 21 min lezen

SLAM, kartering, lokalisatie en odometriedrift

Begrijp hoe mobiele robots odometrie en afstandsgegevens combineren voor SLAM, hoe lokalisatie van kartering verschilt en hoe je drift en lussluiting aanpakt.

Een mobiele robot heeft twee samenhangende antwoorden nodig: hoe ziet de omgeving eruit, en waar bevindt de robot zich daarin? Simultaneous localization and mapping (SLAM) schat beide terwijl de robot verkent. Zodra er een stabiele kaart bestaat, kan een lokalisatiesysteem de pose schatten tegen die vaste kaart zonder hem opnieuw op te bouwen.

SLAM vervangt odometrie niet. Het gebruikt lokale bewegingsschattingen om sensorwaarnemingen aan elkaar te knopen en corrigeert daarna hun opgebouwde drift wanneer de omgeving genoeg bewijs levert.

Scheid de vier taken

De begrippen zijn duidelijker als elk een eigen uitvoer heeft:

  • Odometrie: soepele lokale beweging uit wielencoders, inertiaalmeting, visuele beweging of een fusie daarvan. Ze drifft in de tijd.
  • Kartering: bouw een weergave zoals een bezettingsraster uit sensorwaarnemingen en poses.
  • Lokalisatie: schat de robotpose in een bestaande kaart.
  • SLAM: bouw de kaart terwijl je poses schat en eerdere schattingen herziet.

Navigatie voegt planning en besturing daar bovenop. Een goede kaart levert zelf geen veilig snelheidscommando op.

Twee gesloten routes over elkaar heen getekend. Een gestreepte grijze ellips toont de lus die de robot werkelijk reed en die terugkeerde naar zijn startpunt. Een rode doorlopende kromme toont dezelfde lus zoals die alleen uit odometrie wordt gereconstrueerd, door ophopende gierfout progressief gedraaid en vergroot, zodat hij ver eindigt van waar hij begon. Een dubbelpijdige pijl overspant het gat tussen het werkelijke startpunt en waar odometrie denkt dat de robot eindigde, gelabeld als lussluiting die dezelfde plek twee keer herkent.
Elke stap voegt een beetje fout toe en niets haalt het er weer uit. Een plek herkennen waar je al bent geweest is de meting die de hele kaart weer in vorm trekt. SVG downloaden

Volg de informatie door het systeem

Voor SLAM in twee dimens binnen is een gebruikelijke gegevensstroom:

  1. Wielencoders en een traagheidsmeeteenheid schatten de lokale beweging.
  2. Een lidar publiceert afstandscans met tijdstempels en een sensorframe.
  3. TF2 relateert de sensor aan base_link en de lokale pose aan odom.
  4. Scanmatching legt nieuwe waarnemingen over recente scans of de groeiende kaart.
  5. De backend optimaliseert een graaf van poses en beperkingen.
  6. Een bezettingsraster wordt bijgewerkt vanuit de gecorrigeerde poses en afstandsgegevens.

Odometrie levert een bruikbare beginschatting. Zonder haar zoekt scanmatching in een veel grotere ruimte of legt het uit op een verkeerde herhaalde structuur. Zonder externe waarnemingen blijven odometriefouten onbegrensd. Die grens bepaalt of een robot een vloer in evenwijdige banen kan bestrijken: na ongeveer tien banen zijn ze niet meer evenwijdig, en daarom voert een machine die haar dekking plant ook een gyroscope, een plafondcamera of een baken mee. Buiten valt dezelfde taak toe aan GPS, gefuseerd in plaats van gevolgd.

Begrijp scanmatching en lussluiting

Scanmatching zoekt een relatieve pose waarmee de huidige afstandsmetingen het beste op bestaande structuur aansluiten. Het kan kleine wielslip en schaalfout corrigeren, maar het heeft geometrische kenmerken nodig. Een lange gang zonder herkenning, een glazen muur, een bewegende menigte of sterk repetitieve shelving kan meerdere poses op elkaar laten lijken.

Een lussluiting treedt op wanneer het systeem een eerder bezochte plek herkent en een beperking toevoegt tussen de huidige pose en een oudere pose. Het optimaliseren van die beperking kan de opgebouwde fout over de trajectlijn verdelen en muren weer op één lijn brengen.

Een lussluiting is niet automatisch juist. Een valse overeenkomst in twee gelijkende gangen kan de kaart opvouwen of scheuren. Robuuste systemen gebruiken geometrische controles, scores en instelbare acceptatiedrempels. Bekijk verdacht grote correcties in plaats van elke gesloten lus te vieren.

Bereid de robot voor voordat je SLAM afstelt

SLAM kan een kapotte invoerafsprak niet compenseren. Verifieer eerst deze punten:

  • coderichting, schaal en tijdstempels;
  • redelijke lokale odometrie tijdens rechte lijn- en draaitests;
  • juiste odom → base_link → sensor-transformaties;
  • afstandsgegevens in de juiste eenheden met ongeldige metingen gemarkeerd;
  • klokovereenkomst tussen nodes;
  • een starre sensormontage;
  • voldoende bereik en gezichtsveld voor de omgeving.

Rij langzaam terwijl je de basislijn vaststelt. Bewegingsvervorming en schaarse scans worden lastiger naarmate de draaisnelheid toeneemt. Ondersteunt de sensor of driver tijdcompensatie, configureer die dan op basis van gemeten gedrag in plaats van aan te nemen dat hij niet nodig is.

Bouw de kaart met opzet

Begin op een plek met veel kenmerken en beweeg in lussen in plaats van alleen lange heen-en-weerbanen. Draai soepel zodat de scanner dezelfde structuren van overlappende kijkhoeken ziet. Vermijd het meenemen of verplaatsen van grote objecten naast de robot tijdens het karteren.

Houd de levende kaart in de gaten op dubbele muren, uitgesmeerde hoeken, sprongen en losstaande kamers. Dat zijn bewijs, geen cosmetische problemen:

  • dubbele evenwijdige muren wijzen op een pose- of timingfout;
  • gebogen muren tijdens het draaien wijzen op slechte transformaties of bewegingsvervorming;
  • geleidelijke schaaldrift wijst op wielkalibratie of zwakke scanbeperkingen;
  • plotselinge globale herordening wijst op lussluiting, juist of vals.

Sla de kaart pas op nadat je hebt gecontroleerd dat belangrijke gangen op de gekozen resolutie begaanbaar blijven. Een fijner raster kost geheugen en kan sensorruis bewaren; een grof raster kan smalle doorgangen sluiten.

Lokaliseer in de opgeslagen kaart

Schakel na het karteren over naar lokalisatiemodus tegen de opgeslagen kaart. Een deeltjesfilterlocalisator zoals Adaptive Monte Carlo Localization (AMCL) schat de pose uit afstandswaarnemingen en beweging. Hij heeft nog steeds een redelijk sensormodel, transformaties en odometrie nodig.

Geef een beginpose die dicht genoeg bij de juiste plek ligt dat het systeem die kan identificeren, vooral in symmetrische omgevingen. Test het herstel door met kleine posefouten te beginnen en daarna met grotere. Herstel van een “ontvoerde robot” is een aparte eis, geen iets dat je aanneemt omdat normaal volgen werkt.

In het standaard framemodel publiceert lokale odometrie odom → base_link, terwijl SLAM of lokalisatie map → odom publiceert. De globale transformatie corrigeert drift zonder het lokaal soepele regelframe te laten springen.

Meet nauwkeurigheid en herhaalbaarheid

Gebruik fysieke herkenningspunten met ingemeten of zorgvuldig gemeten posities. Leg de geschatte pose vast wanneer de robot bij elk herkenningspunt stopt, vanaf verschillende naderingsrichtingen. Scheid:

  • herhaalbaarheid op dezelfde plek;
  • lokale drift op korte termijn;
  • globale kaartconsistentie na een lus;
  • hersteltijd na tijdelijk sensorverlies.

Vergelijk de kaart met bekende afstanden, maar beoordeel niet alleen op een visueel aardig beeld. Navigatie heeft correcte vrije ruimte, obstakelgrenzen en stabiele poses nodig, mooie muurdikte niet.

Log scans, odometrie, transformaties en SLAM-uitvoer zodat een fout kan worden herhaald. Een probleem dat alleen live optreedt is veel lastiger te diagnosticeren.

Diagnoseer veelvoorkomende SLAM-storingen

  • Muren verdubbelen tijdens rechtdoor rijden: odometrieschaal, sensortijd of scanmatching is inconsististent.
  • De kaart buigt tijdens het draaien: sensortransformatie, hoekodometrie of bewegingsvervorming klopt niet.
  • Pose springt in herhaalde gangen: scanmatching of lussluiting accepteerde een dubbelzinnige uitlijning.
  • Er sluit geen enkele lus: de route mist overlap, de waarnemingen zijn te schaars of de acceptatiedrempels zijn te streng.
  • Lokalisatie werkt alleen nabij de beginpose: de omgeving is symmetrisch of globaal herstel is niet geconfigureerd.
  • De kaart klopt maar navigatie snijdt in muren: footprint, opblazen of costmapconfiguratie klopt niet.
  • Alle SLAM-parameters afstellen verandert niets: de upstream odometrie/TF/sensor-afspraak is nog steeds kapot.

Begin met kalibratie van kwadratuurencoders en odometrie voor differentiële aandrijving, gebruik dan ROS 2 TF2-coördinatenframes om de geometrische keten te verifiëren. De Sensor Simulator laat zien waarom bias en drift niet met eenvoudige gladstelling alleen verdwijnen.

Verken de graaf

Onderdeel van deze bouwprojecten

Projecten en leerroutes waarin deze tutorial voorkomt.

Verder lezen

Bronnen