En student har laget en fullstendig mobil robot-stack for ROS 2 Humble helt fra bunnen av — uten Nav2, uten SLAM Toolbox, uten svartebokser. Prosjektet taorobot er nå åpen kildekode og gir et sjeldent innblikk i hvordan autonom navigasjon faktisk fungerer under panseret.
For de fleste som lærer seg ROS 2-basert robotikk, starter reisen med Nav2 og SLAM Toolbox. Disse verktøyene er kraftige og produksjonsklare, men de kan også være vanskelige å lære av — det er mange lag med abstraksjon og konfigurasjonsparametre mellom brukeren og den faktiske algoritmen. Prosjektet taorobot tar en helt annen tilnærming: hver eneste komponent i navigasjonsstacken er implementert fra scratch, som egne ROS 2-noder med minimalt med avhengigheter.
Hva inngår i stacken
Taorobot er bygget for ROS 2 Humble og Gazebo, og dekker hele kjeden fra sensorsimulering til bevegelseskontroll. Stacken inkluderer blant annet:
- Simulering med realistisk støyende odometri
- Occupancy grid-kartlegging (belegningskart)
- Partikkelfilter-basert lokalisering
- Graf-basert pose-SLAM med korrelativ skann-matching og loop closure via g2o
- A*-basert banepanlegging
- Pure pursuit for bevegelseskontroll
Hver algoritme er implementert som en egen, lesbar ROS 2-node. Dette gjør det mulig å følge datastrømmen fra sensorinput til styringskommandoer uten å måtte navigere gjennom hundrevis av konfigurasjonsparametre i ferdige rammeverk.
Hvorfor bygge alt fra bunnen av?
Motivasjonen bak prosjektet er pedagogisk. Utvikleren beskriver selv hvordan det å konfigurere eksisterende verktøy ga begrenset forståelse av hvordan algoritmene faktisk fungerer. Ved å skrive partikkelfilteret, scan-matcheren og A*-planleggeren selv, tvinges man til å forstå matematikken og implementasjonsdetaljene som ellers skjules bak API-er.
Jeg ville virkelig forstå robotikk, ikke bare konfigurere verktøy.
Denne tilnærmingen gjør taorobot spesielt egnet for studenter og hobbyister som ønsker å gå dypere enn standard Nav2-oppsett. Koden er strukturert slik at man kan lese én node om gangen — for eksempel lokaliseringsnoden isolert fra planleggingsnoden — og forstå akkurat hva som skjer matematisk.
Praktisk bruk og kompatibilitet
Prosjektet kjører på ROS 2 Humble med Gazebo som simuleringsmiljø, og krever ingen Nav2-avhengigheter. Dette betyr at man kan sette opp hele stacken uavhengig av det etablerte navigasjonsrammeverket, noe som er nyttig for undervisning, eksperimentering med egne algoritmevarianter, eller som utgangspunkt for å bygge en egen tilpasset navigasjonsløsning fra grunnen av.
For SLAM-delen brukes korrelativ skann-matching kombinert med g2o for grafoptimalisering ved loop closure — en kombinasjon som er godt dokumentert i litteraturen, men som sjelden vises i en komplett, lesbar implementasjon tilgjengelig for alle.
Et konkret kodeeksempel på hvordan en pure pursuit-kontroller typisk struktureres i et slikt oppsett:
def compute_steering(self, lookahead_point, current_pose):
dx = lookahead_point.x - current_pose.x
dy = lookahead_point.y - current_pose.y
angle_to_target = atan2(dy, dx) - current_pose.theta
curvature = 2 * sin(angle_to_target) / self.lookahead_distance
return curvature
La oss se hva dette kan gjøre for læringskurven til neste generasjon robotikere: ved å senke terskelen for å lese og forstå hele navigasjonskjeden, åpner taorobot for at flere kan eksperimentere med egne varianter av SLAM, lokalisering og planlegging — uten å måtte reversere et stort, modulært rammeverk først.
Kilde: ROS Discourse