En hobbyist har delt et åpent kildekode-prosjekt som viser hvordan en billig VL53L0X Time-of-Flight-sensor kan mates inn i Nav2 sitt costmap-system som en hinderkilde. Løsningen bruker en ESP32 som bro mellom sensoren og ROS 2, og kan være et nyttig utgangspunkt for alle som bygger små roboter med begrenset budsjett.
For mange som bygger små autonome roboter er kostnad en reell begrensning. LIDAR-sensorer gir presis avstandsdata, men prisen kan raskt bli en barriere for hobbyprosjekter og studentbygg. Et nylig delt prosjekt på ROS Discourse viser en alternativ vei: hvordan man kan bruke en VL53L0X Time-of-Flight-sensor til å levere hinderdata direkte inn i Nav2 sitt navigasjonsrammeverk. La oss se hva dette kan gjøre for prosjekter med trangere budsjett.
Fra I2C-sensor til ROS 2-melding
Kjernen i løsningen er en pipeline som flytter data gjennom flere lag før det ender opp som et hinder i costmap:
VL53L0X --I2C--> ESP32 --USB serial--> serial_bridge → sensor_msgs/Range → tof_to_scan → sensor_msgs/LaserScan → nav2_costmap_2d::ObstacleLayer
ESP32-en kjører firmware skrevet i Arduino-rammeverket, med Pololu sitt VL53L0X-bibliotek for å lese avstand over I2C. Firmwaren strømmer målingene over seriell forbindelse, og inkluderer også automatisk gjenoppretting dersom sensoren mister kontakten – noe som er praktisk viktig for roboter som opererer i lengre perioder uten tilsyn.
Fra Range til LaserScan
Siden VL53L0X kun leverer én enkelt avstandsmåling (en smal stråle), må denne konverteres til noe Nav2 sitt ObstacleLayer forstår seg på – nemlig sensor_msgs/LaserScan. Her kommer tof_to_scan-noden inn i bildet. Den syntetiserer en konfigurerbar, smal vifte av stråler fra det ene punktmålingen – standardverdien er ±0,15 radianer fordelt på 31 stråler.
Et viktig detalj er at målinger utenfor rekkevidde sendes som +inf. Dette er avgjørende fordi Nav2 sin costmap-logikk bruker denne verdien til å raytrace-klarere celler som tidligere var markert som opptatt. Uten dette ville roboten «husket» hindre som ikke lenger er der, noe som fort skaper problemer i dynamiske miljøer.
Praktisk oppsett og kompatibilitet
Prosjektet inkluderer en komplett Nav2-costmap-konfigurasjon som kobler skann-dataene inn i både lokal og global costmap, med både markering og klarering aktivert. Innstillingen inf_is_valid: true er satt eksplisitt for å sikre at uendelig-verdiene tolkes riktig av hinderlaget.
For de som vil komme raskt i gang, følger det med RViz-konfigurasjon for visualisering samt en feilsøkingsguide. Alt er bygget og testet på ROS 2 Humble, som gjør det relevant for et bredt spekter av dagens ROS 2-baserte robotprosjekter.
En rclpy-basert serial-bridge-node håndterer kommunikasjonen mot ESP32-en. Den bruker en tråd-basert leser for å unngå blokkering, samt automatisk gjenoppkobling ved seriell frakobling – en robust løsning for roboter som kjører lenge mellom omstarter.
Selv om VL53L0X har begrenset rekkevidde (typisk opp til rundt 2 meter under gode forhold) og kun leverer én stråle om gangen, gjør denne tilnærmingen den til et brukbart supplement eller til og med hovedsensor for hinderdeteksjon på små, budsjettvennlige roboter. Kombinert med flere sensorer montert i ulike vinkler kan man bygge opp et enkelt, men funksjonelt sensor-array til en brøkdel av kostnaden for en tradisjonell LIDAR.
Kilde: ROS Discourse


