18/06/2023
I en verden, hvor robotteknologi udvikler sig med stormskridt, fra industrielle automationsløsninger til autonome køretøjer, er behovet for en standardiseret og effektiv softwareplatform mere kritisk end nogensinde før. Her kommer Robot Operating System, bedre kendt som ROS, ind i billedet. Selvom navnet indeholder "Operating System", er det vigtigt at forstå, at ROS ikke er et traditionelt operativsystem som Windows eller Linux. I stedet fungerer det som et fleksibelt framework eller mellemlag (middleware), der kører oven på et eksisterende operativsystem og i høj grad forenkler processen med at udvikle kompleks robotsoftware. Denne artikel vil dykke ned i, hvad ROS er, udforske dets kernekomponenter og koncepter, og belyse udviklingen fra den oprindelige version til den moderne ROS 2.

Hvad er Robot Operating System (ROS)?
Robot Operating System er en open source-softwareplatform designet specifikt til udvikling af robotapplikationer. Dets primære formål er at tilbyde et sæt værktøjer, biblioteker og konventioner, der sigter mod at simplificere opgaven med at skabe kompleks og robust robotadfærd på tværs af en bred vifte af robotplatforme. Ved at levere funktionaliteter som genbrug af kode, et struktureret kommunikationsmiljø og kraftfulde visualiserings- og fejlfindingsværktøjer, giver ROS udviklere mulighed for at fokusere mere på den specifikke logik for deres applikation i stedet for at skulle genopfinde den grundlæggende infrastruktur for hver ny robot. Det fungerer som et fælles sprog, der lader forskellige dele af et robotsystem – fra sensorer til motorer og algoritmer – tale sammen problemfrit.
De Vigtigste Komponenter i ROS
Et ROS-system er bygget op omkring tre fundamentale søjler, der tilsammen skaber et robust udviklingsmiljø:
- Middleware: Dette er hjertet i ROS' kommunikationssystem. Det fungerer som en bro mellem robottens hardware og software samt mellem de forskellige softwaremoduler. Middlewaren håndterer, hvordan data sendes og modtages i systemet, hvilket gør det muligt for separate programmer at udveksle information på en standardiseret måde. Denne komponent er afgørende for at opnå den modularitet, som ROS er kendt for.
- Biblioteker: ROS leveres med et omfattende sæt af forudbyggede biblioteker, der indeholder funktionalitet til at udføre en lang række almindelige robotopgaver. Disse kan omfatte alt fra navigation og bevægelsesplanlægning til billedgenkendelse og 3D-perception. Ved at bruge disse biblioteker kan udviklere spare utallige timer, da de ikke behøver at skrive kompleks kode fra bunden.
- Værktøjer: For at understøtte udviklingsprocessen tilbyder ROS en række kraftfulde værktøjer. Disse inkluderer værktøjer til visualisering, som lader udvikleren se en 3D-repræsentation af robotten og dens sensordata i realtid. Der findes også værktøjer til simulering, som gør det muligt at teste robotadfærd i et virtuelt miljø, før den implementeres på fysisk hardware, samt fejlfindingsværktøjer til at identificere og løse problemer i koden.
Grundlæggende Koncepter i ROS
For at arbejde effektivt med ROS er det nødvendigt at forstå nogle centrale koncepter, der definerer, hvordan systemet er struktureret og fungerer.
ROS Noder
I ROS er en node (node) et eksekverbart program, der udfører en specifik, afgrænset funktion. Et komplekst robotsystem opdeles i mange små, uafhængige noder. For eksempel kan én node være ansvarlig for at indsamle data fra en laserscanner, en anden for at styre robottens hjulmotorer, og en tredje for at planlægge en rute. Disse noder kommunikerer med hinanden ved hjælp af de mekanismer, ROS stiller til rådighed. Denne modulære tilgang gør systemet lettere at udvikle, teste og vedligeholde. Noder skrives typisk i programmeringssprog som Python eller C++.
ROS Master
ROS Master er den centrale komponent, der muliggør kommunikation mellem noder. Man kan tænke på Master som en slags telefonbog eller navneserver for hele ROS-systemet. Når en node starter, registrerer den sig hos Master og informerer om, hvilke data den publicerer, og hvilke tjenester den tilbyder. Når en anden node ønsker at kommunikere med den første, spørger den Master om, hvordan den kan finde og oprette forbindelse til den. Uden Master ville noderne ikke kunne finde hinanden.
Topics
Et Topic er en navngiven kommunikationskanal, der fungerer efter en publish-subscribe-model. En node kan "publicere" meddelelser (data) til et bestemt topic, og enhver anden node, der er interesseret i disse data, kan "abonnere" på det samme topic. Dette er en asynkron og en-til-mange kommunikationsform. For eksempel kan en kameranode publicere billeddata til et `/camera/image`-topic, og både en billedgenkendelsesnode og en logningsnode kan abonnere på dette topic for at modtage de samme data samtidigt.
Services
En Service er en anden kommunikationsmetode, der fungerer efter en request-response-model. Dette er en synkron og en-til-en kommunikation, hvor en node (klienten) sender en anmodning (request) til en anden node (serveren) og venter på et svar (response). Dette er nyttigt for opgaver, der skal udføres og bekræftes, før programmet fortsætter. Et eksempel kunne være en service, der anmodes om at beregne en rute til et givent punkt, hvor klientnoden venter, indtil den modtager den færdigberegnede rute som svar.
En Sammenligning af ROS-versioner: ROS 1 vs. ROS 2
ROS har gennemgået en betydelig udvikling siden sin første udgivelse. De to hovedversioner, ROS 1 og ROS 2, har forskellige styrker og er designet med forskellige formål for øje.
ROS 1
Den første version af ROS, også kendt som Boxturtle, blev udgivet i 2010. Den lagde grundlaget for ROS-udvikling og blev hurtigt populær, især inden for forsknings- og akademiske miljøer. ROS 1 var banebrydende for sin tid, men den blev designet med visse begrænsninger:
- Mangel på realtidskapacitet: ROS 1 havde ikke indbyggede garantier for rettidig levering af meddelelser, hvilket gjorde den uegnet til systemer, hvor timing er kritisk.
- Ingen sikkerhedsfunktioner: Systemet blev udviklet uden indbygget sikkerhed, hvilket er en stor ulempe for robotter, der er forbundet til internettet eller opererer i følsomme miljøer.
- Begrænset skalerbarhed: Arkitekturen var primært designet til en enkelt robot og understøttede ikke effektivt systemer med flere robotter.
ROS 2
ROS 2 blev officielt udgivet i 2022 for at imødekomme begrænsningerne i ROS 1 og udvide platformens kapabiliteter til mere sofistikerede applikationer, især inden for kommercielle og industrielle domæner. De vigtigste forbedringer inkluderer:
- Realtidskapacitet: ROS 2 bruger Data Distribution Service (DDS) som sin underliggende kommunikationsprotokol. DDS er en industristandard, der er designet til højtydende og pålidelige realtidssystemer. Dette gør ROS 2 velegnet til applikationer som autonome køretøjer og industrielle robotter, hvor præcis timing er afgørende.
- Forbedret sikkerhed: ROS 2 inkluderer indbyggede sikkerhedsfunktioner som kryptering, godkendelse og adgangskontrol, hvilket gør det muligt at bygge sikre og robuste robotapplikationer.
- Udvidet platformsupport og skalerbarhed: ROS 2 er designet til at understøtte komplekse systemer med flere robotter og fungerer på tværs af flere platforme, herunder mindre indlejrede systemer.
Her er en tabel, der sammenligner de to versioner:
| Funktion | ROS 1 | ROS 2 |
|---|---|---|
| Primært Fokus | Forskning og eksperimentering | Kommercielle og industrielle applikationer |
| Kommunikation | Egenudviklet (TCPROS/UDPROS) | DDS (Data Distribution Service) |
| Realtid-kapacitet | Nej, ikke garanteret | Ja, understøttet via DDS |
| Sikkerhed | Ingen indbygget | Indbyggede funktioner (kryptering, godkendelse) |
| Skalerbarhed | Begrænset til enkelte robotter | Designet til systemer med flere robotter |
Ofte Stillede Spørgsmål (FAQ)
Er ROS et rigtigt operativsystem?
Nej. På trods af navnet er ROS ikke et selvstændigt operativsystem. Det er et middleware-framework, der installeres og kører oven på et eksisterende operativsystem, oftest en Linux-distribution som Ubuntu.
Hvilke programmeringssprog kan jeg bruge med ROS?
De primære og bedst understøttede sprog er C++ og Python. C++ foretrækkes ofte til performance-kritiske noder, mens Python er populært til hurtig prototyping og mindre intensive opgaver. Der findes dog også klientbiblioteker for andre sprog.
Hvorfor blev ROS 2 udviklet?
ROS 2 blev udviklet for at adressere de grundlæggende begrænsninger i ROS 1, især med henblik på kommerciel og industriel anvendelse. Behovet for realtidsydelse, forbedret sikkerhed og bedre understøttelse af systemer med flere robotter var de primære drivkræfter bag udviklingen af ROS 2.
Er det nødvendigt at lære ROS 1 før ROS 2?
Selvom de grundlæggende koncepter (noder, topics, services) er de samme, er der betydelige forskelle i implementeringen. For nye projekter anbefales det generelt at starte direkte med ROS 2, da det er fremtiden for platformen. Kendskab til ROS 1 kan dog være nyttigt, da mange eksisterende projekter og ressourcer stadig bruger det.
Konklusion
Robot Operating System har transformeret landskabet for robotsoftwareudvikling. Ved at tilbyde en standardiseret, modulær og værktøjsrig platform har det accelereret innovation og gjort det muligt for udviklere at bygge stadig mere komplekse og kapable robotter. Fra sin oprindelse som et forskningsværktøj i ROS 1 til den industrielle og kommercielt levedygtige ROS 2, fortsætter platformen med at udvikle sig. At forstå ROS er i dag en fundamental færdighed for enhver, der arbejder seriøst med robotteknologi, og det vil uden tvivl forblive en central teknologi i fremtidens robotrevolution.
Hvis du vil læse andre artikler, der ligner Forstå Robot Operating System (ROS), kan du besøge kategorien Teknologi.
