Tillbaka till projekt
Självkörande radiostyrd bil med monterad Hokuyo LiDAR-sensor och NVIDIA Jetson Orin Nano sedd framifrån.

Robotics

Jag försökte bygga en självkörande RC-bil med LiDAR och ROS 2 - det gick inte som planerat

B

Björn Bergström

ML Developer (Junior)

10 min |

Intro för att bygga en självkörande radiostyrd bil

Inspirationen till det här projektet väcktes av berättelserna i boken Genius Makers, där pionjärprojektet ALVINN från 1988 visade hur en bil kunde lära sig styra via ett neuralt nätverk. Jag ville bygga något som var tillräckligt utmanande för att jag skulle hamna utanför min komfortzon, där jag tvingades att lära mig massor av nya saker i raketfart. Det var ett sätt att utmana mig själv och se vad jag var kapabel till. Det skulle inte duga med att bara skriva kod och jag ville absolut inte kopiera ett färdigt projekt. Jag ville ha ett projekt där hårdvara, sensorer och mjukvara behövde samverka för att fungera som en helhet. Då föddes idén om en självkörande radiostyrd bil.

Med bara fem veckor kvar av utbildningen var det dags att dra i gång examensarbetet. Valet av kändes viktigt eftersom jag hellre ville maximera mitt lärande än att bara ta mig igenom ett enklare projekt. Jag bestämde mig för att bygga en självkörande radiostyrd bil utrustad med en mini-superdator och avancerad elektronik. Även om uppgiften var komplex kände jag mig ganska trygg från start. Min vana av att skruva och reparera motorcyklar fick mig att tro att jag satt på ett rejält tekniskt försprång. Min praktiska erfarenhet hjälpte mig absolut en bit på vägen men i mötet med avancerad robotik rann det försprånget ut i sanden väldigt fort och byttes ut mot en oerhört brant inlärningskurva.

image

Robotikens dolda utmaningar

Självkörande fordon är ett område där många tekniska fält möts, som robotik, inbyggda system, realtidskommunikation, sensordata, perception och styrning. På papperet ser ett robotiksystem ofta rent och prydligt ut där en sensor mäter omgivningen, en dator tolkar informationen och en styrenhet skickar kommandon till motor och servo. I praktiken handlar det om att synkronisera fem olika system som alla kräver sin uppmärksamhet. En feljordad krets kan skicka in obegripligt brus i hela systemet och en LiDAR kan kräva flera nätverkskonfigurationer innan den äntligen levererar stabil data. Det är i dessa stunder man lär sig att robotik är lika mycket felsökning som det är programmering.

Utvecklingen av allt mindre och kraftfullare chip har gjort det möjligt att bygga avancerade prototyper med hårdvara som numera är lättillgänglig även för hobbyprojekt. Genom att använda en mini-superdator som systemets beräkningsenhet och låta komponenterna kommunicera i nära realtid, kan vi ge bilen en detaljerad uppfattning om sin omgivning. Det betyder inte att arbetet blir enkelt, men den tillgängliga tekniken gör det möjligt för en enskild utvecklare att bygga system som tidigare krävde stora forskarlag. Målet med mitt projekt var att bygga en plattform som kunde fjärrstyras, samla in sensordata, skapa en karta av miljön och utföra enklare autonom körning

Tusentals laserpulser

LiDAR fungerar som robotens enda sensor genom att skicka ut tusentals laserpulser per sekund. Eftersom ljuset färdas med en konstant hastighet kan systemet beräkna avståndet till ett objekt genom att mäta tiden det tar för en puls att studsa tillbaka. För att få fram rätt distans delas den totala tiden för tur-och-retur-resan med två, vilket motsvarar sträckan ljuset färdats i en riktning. Genom att utföra denna beräkning tusentals gånger per sekund skapas en exakt karta över miljön, vilket gör det möjligt för bilen att navigera och upptäcka hinder i realtid, oavsett ljusförhållanden.

Hjärtat i systemet

För att få bilen att navigera krävdes ett samspel mellan fysisk hårdvara och mjukvara som kunde hantera data i närmast realtid med minimal latens. Som hjärna i systemet valde jag en NVIDIA Jetson Orin Nano 8GB. Det är en kraftfull enhet som utnyttjar unified memory, vilket innebär att CPU och GPU delar på samma minnesadressrymd. Detta eliminerar behovet av att kopiera data mellan processor och grafikdel och gör det möjligt för mig att köra AI-modeller samt hantera stora mängder LiDAR-data med hög hastighet direkt ombord på bilen. Att välja en plattform med denna typ av minnesarkitektur var avgörande eftersom all beräkning behövde ske lokalt för att kunna säkerställa systemets responsivitet.

För att hantera bilens rörelser använde jag en ESP32 som en styrenhet för hårdvaran. Tanken bakom detta är att Jetson-datorn sköter de tunga beräkningarna för perception och kartläggning, medan ESP32 fungerar som en direktbrygga till de fysiska komponenterna. Den tar emot kommandon från Jetson-datorn och översätter dem till precisa PWM-signaler för styrning av motor och servo. PWM står för Pulse Width Modulation och är ett sätt att kontrollera elektriska komponenter genom att snabbt slå av och på strömmen i olika intervaller vilket gör att man kan styra exakt hur mycket kraft en motor ska ha eller exakt vilken vinkel ett styrservo ska inta.

Genom att låta ESP32 sköta den fysiska körningen får jag en kontrollpunkt för säkerhet. Jag implementerade en funktion där ESP32 stänger av all kraft till motorer och servo om inga kommandon tas emot från huvuddatorn under en sekund. Det blir som en inbyggd säkerhetsspärr som skyddar både hårdvara och omgivning vid eventuella systemfel. Denna uppdelning är en viktig lärdom inom robotik eftersom den separerar komplex intelligens från livsviktig styrlogik vilket skapar ett mer stabilt och säkert system.

Perception och steget före hel autonomi

Att låta bilen förstå sin omgivning var projektets största tekniska utmaning. För att lösa detta implementerade jag SLAM, en teknik som gör att en robot samtidigt kan kartlägga en okänd miljö och hålla koll på sin egen position i den. Genom att montera en Hokuyo 2D LiDAR på radiostyrda bilen kunde jag publicera sensordata direkt in i ROS 2.

När jag väl startade SLAM-processen hände ingenting. Det visade sig att SLAM Toolbox var konfigurerat för att vänta tills bilen flyttat sig en viss sträcka innan en ny karta genererades, men eftersom systemet saknade hjulenkodrar fanns ingen källa för att mäta rörelsen. Utan denna information förblev bilen "stationär" i mjukvarans ögon och eftersom tröskelvärdet för förflyttning inte uppnåddes påbörjades ingen kartläggning.

För att lösa detta implementerade jag RF2O laser odometry, en metod som uppskattar robotens rörelse genom att analysera hur laserscanningarna förändras mellan varje mätning. Genom att låta mjukvaran beräkna bilens förflyttning direkt från sensordatan fick jag äntligen den precision som krävdes för att överträffa tröskelvärdet för rörelse. Det blev startskottet som gjorde att SLAM Toolbox kunde börja bygga pålitliga och sammanhängande kartor i realtid.

Att visualisera kartan i Foxglove Studio gjorde felsökningen betydligt enklare. Genom att se i realtid vad bilen faktiskt uppfattade kunde jag snabbt identifiera när sensordata var felaktig eller när odometrin svajade. Denna visuella feedback blev ett effektivt verktyg för att förstå hur mina justeringar i koden direkt påverkade bilens förmåga att tolka omgivningen.

Resultat och den tekniska grunden

Projektet nådde inte målet om full autonomi efter de fem veckorna men resultatet blev en stabil grund för framtida utveckling. Jag lyckades bygga en plattform där hårdvara och mjukvara samarbetar effektivt, vilket var min största utmaning. Bilen kan fjärrstyras, sensordata publiceras korrekt och jag har genom praktiska tester bekräftat att LiDAR-datan är tillräckligt precis för att generera kartor i realtid.

Det viktigaste resultatet är att jag har skapat en fungerande grund och bevisat att de valda tekniska lösningarna fungerar i praktiken.För att uppnå detta använde jag ROS 2, robotikens motsvarighet till ett nervsystem. Det är ett modulärt ramverk där fristående delar, så kallade noder, skickar information mellan varandra på ett organiserat sätt. Detta gör det enkelt att isolera och felsöka komplexa funktioner som sensorer eller motorstyrning.

Det är en teknik som är så robust att även NASA använder ROS 2 för att utveckla nästa generations rovers och autonoma rymdsystem. Att lära sig hantera detta middleware har gett mig en djup förståelse för hur man skalar upp komplexa system, från små hobbyprojekt till avancerad rymdteknik.Den praktiska erfarenheten av att integrera dessa system är den verkliga vinsten och väger tyngre än en färdig produkt någonsin hade kunnat göra.

Den kunskap jag nu besitter, om hur man får disparata system att tala samma språk, är en grundsten som jag kommer att bygga vidare på. Nästa steg handlar inte längre om att förstå hur man bygger grunden, utan om att använda den för att implementera mer avancerad AI och autonom logik, trygg i vetskapen om att systemets fundament klarar av uppgiften.

Lärdomar från vägen mot autonomi

Det här projektet blev ett av de mest intensiva sätten jag har lärt mig teknik på. Att arbeta med elektronik, mikrokontroller, lödning, Linux, ROS 2, LiDAR och simulation i ett och samma projekt tvingade mig att hantera verklighetens begränsningar. Min största utmaning var inte hårdvaran i sig, utan min egen kunskapströskel i hur ROS2 systemet fungerar.

Jag lärde mig snabbt att robotik inte handlar om att enbart fokusera på olika algoritmer. Om bilen inte styrde rätt behövde jag förstå PWM. Om kartan blev brusig behövde jag förstå vikten av odometri. Varje problem blev konkret och tvingade mig att felsöka hela kedjan.

Den viktigaste lärdomen jag bär med mig är respekten för hur svårt det faktiskt är att integrera ett helt system. Jag fick lära mig den hårda vägen att det är en enorm skillnad mellan att skriva kod som borde fungera och att få en sensor att faktiskt leverera data i realtid. Här fanns det inga genvägar att ta. Min största ingenjörsmässiga läxa har blivit att acceptera att mitt bygge aldrig blir helt färdigt. Prototypen blev i slutändan min bästa läromästare och en ständig påminnelse om att riktig utveckling handlar om att testa och ständigt iterera.

Nästa steg och framtidens iteration

Prototypen har fungerat som ett nödvändigt experiment för att förstå hur systemets olika delar samverkar i praktiken. Under arbetets gång har jag testat flera olika verktyg och metoder, vilket gett mig en djupare insikt i att verklig innovation handlar om att göra strategiska val. Att bygga egna simuleringsmiljöer från noll för att nå full autonomi blir i slutändan ett ineffektivt slöseri med tid, precis som att försöka bygga en egen ugn när det enda målet är att baka bröd.

När jag sent i processen upptäckte AutoDRIVE Simulator blev det en tydlig påminnelse om hur avgörande det är att välja rätt hävstänger från start. Det handlar inte bara om att arbeta hårt, utan om att arbeta smart. Genom att fokusera på etablerade ramverk kan man lägga all kraft på systemutvärdering och träning av modeller istället för att fastna i infrastruktur. Att lösa svåra problem handlar inte om att bygga allt från noll, utan om att förstå helheten och välja de verktyg som gör att man snabbare når nästa nivå.

Jetson Orin Nano | LiDAR | RC car | ROS 2 | Robotics | SLAM | Self-driving