Robotteknologi selvstudie

Her er der en gennemgang af mit robotteknologi selvstudie på datamatiker uddannelsen. Jeg er pt selvstændig programmør i mit eget firma TB Coding, hvor jeg arbejder med freelance programmering på diverse kundeprojekter.

University College Nordjylland – Teknologi og Business

Datamatiker uddannelsen

Dmab0913 – Specialisering 4. semester

Projektdeltager:

Thomas Winther Bonderup

Vejleder:

Mogens Holm Iversen

Abstract:

This paper deals with my 10 weeks robotics specialization, which is a part of my computer science degree. I have chosen to study self driving cars and artificial intelligence. I will follow 3 online course and I will build my own line follower robot in the specialization period. I see it as a good opportunity to combine theory and practice. The achieved results of the period is that I have learned a lot of self driving cars and artificial intelligence. I have for example worked a lot with localization, tracking and search which is a big part of self driving cars. I have also worked with a lot of probability, because its play an important role in self driving cars and artificial intelligence. I have worked a lot with all 3 courses and online courses seems much better than I expected. I have also built and worked with my line follower robot, which I will talk more about the exam.

Afleveringsdato: 21/4/2015

Indholdsfortegnelse

Indledning

Specialisering beskrivelse

Logbog

Beskrivelse af aktuelle udfordringer i specialiseringen

Diskussion af arbejde og læringsprocesser

Diskussion af læringsudbytte

Konklusion

Kildefortegnelse

Indledning

Jeg har i forbindelse med min specialiseringsperiode på 4. semester datamatikeruddannelsen specialiseret mig i emnet robotics, hvor jeg er gået dybden med selvkørende robotter og artificial intelligence. Måden jeg har tilegnet mig viden på i specialiseringsperioden, er gennem selvstudie, hvor jeg fulgt 3 online kurser, og så har jeg bygget og kodet en line follower robot. De 2 første online kurser har jeg taget igennem Udacity, som er en forholdsvis ny online læringsplatform, hvor der er indbygget programmeringsopgaver og en masse quiz spørgsmål. Det tredje kurser er taget igennem MIT’s opencourseware, hvor det er muligt at følge tidligere kurser online fra universitetet MIT. Ved siden af de 3 online kurser har jeg som sagt bygget og kodet en line follower robot. Robotten gav mig muligheden for at få noget praktisk erfaring, som passer godt sammen med det teoretiske fra online kurserne. Jeg vil i denne rapport gå i dybden med min læringsprocess og de tekniske aspekter i min 10 ugers specialiseringsperiode.

Problemformulering

Hvad er selvkørende robotter, og hvordan opbygges og kodes de, så de selv kan finde vej igennem en labyrint uden at de er til fare for sine omgivelser.

Læringsmål

Jeg kan forklare teknologien bag selvkørende robotter

Jeg kan programmere microcontrollere til selvkørende robotter

Jeg kan anvende relevante sensorer til selvkørende robotter

Jeg kan anvende artificial intelligence til selvkørende robotter

Jeg kan anvende algoritmer specifikt til robotter

Jeg kan kortlægge robottens omgivelser, når robotten rundt.

Aktiviteter

Kursus 1:

Artificial Intelligence for Robotics – Programming a Robotic Car på udacity.com

Kursus 2:

Intro to Artificial Intelligence – Learn the Fundamentals of AI på udacity.com

Kursus 3:

Artificial Intelligence kursus på MIT open courseware

Line follower robot

Bygning og kodning af line follower robot

Dokumentation af perioden
Jeg har i forbindelse med min specialiseringsperiode brugt min egen blog thomasbonderup.dk, hvor jeg har skrevet om min specialiseringsperiode. Jeg har ikke kunne få alt med i rapporten, så du er velkommen til at læse med på bloggen, hvis du vil læse mere om emnet.

Tidsplan

Uge 1

I den første uge vil jeg starte på kursus 1, og så vil jeg læse om robotter, så jeg kan komme godt i gang med emnet. Et mål for ugen er at svare på følgende spørgsmål: Hvad er en robot? Hvad består robotter af? Hvordan har udviklingen været inden for robotteknologi? Hvordan ser fremtiden ud for robotter? Hvordan programmeres robotter?

Sidst på ugen vil jeg skrive om robotter generelt, og hvad jeg har lært efter den første uge.

Uge 2

I uge 2 vil jeg afslutte kursus 1, som giver mig en masse grundlæggende viden omkring selvkørende biler. Sidst på ugen vil jeg skrive om hvad jeg har lært på kurset, hvor jeg fx viser kodeeksempler.

Uge 3

I uge 3 vil jeg starte på kursus 2. Det er et længere kursus om Artificial Intelligence, som indeholder mange af de grundlæggende koncepter omkring Artificial Intelligence.

Sidst på ugen vil jeg skrive om hvad kursus 2 har lært mig indtil videre.

Uge 4

I uge 4 vil jeg fortsætte med kursus 2. Her vil jeg være godt i gang med kurset, og jeg har lært en masse nye ting. Da det er en læringsprocess, kan der forekomme ændringer undervejs, men som udgangspunkt er det planen indtil videre. Sidst på ugen vil jeg skrive om, hvad kursus 2 har lært mig indtil videre.

Uge 5

Mit mål for uge 5 er, at jeg vil forsøge at afslutte kurset 2. Det omfatter arbejde med resten af problemet sæt, midterm eksamen og afsluttende eksamen.  Sidst på ugen ugen vil jeg skrive om, hvad kursus 2 har lært mig, og hvad jeg synes om kurset.

Uge 6

I uge 6 vil jeg starte på kursus 3, og så vil jeg arbejde med quiz og problemsæt som medfølger kurset. Det er meget teoretisk og passer godt i forlængelse af nogle af de ting vi har lært på 3. semester.

Uge 7

I uge 7 vil jeg fortsætte mit arbejde med quiz og problemsæt i kursus 3. Sidst på ugen vil jeg skrive om hvad jeg har lært på kurset indtil videre.

Uge 8

Mit mål for uge 8 er at lave en masse praktisk arbejde med min line follower robot, og jeg vil forsøge at implementere nogle af de ting, som jeg har lært fra de 3 online kurser, som jeg har fulgt i de seneste uger.

Uge 9

Mit mål for uge 9 er at bygge videre på mit praktiske arbejde fra sidste uge med min line follower robot. Et andet mål er at arbejde en masse på mit specialiseringsrapport.

Uge 10

I uge 10 vil jeg arbejde videre med min robot og gøre mig klar til mundtlig eksamen. Jeg vil også afsætte noget tid til gennemgang af andre rapporter, da jeg også skal være opponent til eksamen.

Logbog

Logbog uge 1

Dette er en gennemgang af min første uge i mit robotics selvstudie. Mit selvstudie startede officielt på en fredag, og det betød at uge 1, var en kort uge. Jeg er begyndt på det første kursus Artificial Intelligence for Robotics – Programming a Robotic Car, og det har indtil videre været meget interessant. Jeg er næsten færdig med den første lektion i kurset, som handler om lokalisering af robotter. Jeg har i forbindelse med den første lektion lært en masse om lokalisering og sandsynlighedsregning. I lektion 1 er der rigtig mange python programmering opgaver, som er en del af kurset. Det er super fedt. I løbet af ugen har jeg også læst en masse om robotter for at få en bedre forståelse af emnet. Jeg har forsøgt at besvare de spørgsmål, som var en del af mit mål for uge 1.

Hvad er en robot?

En robot er en automatiseret maskine, som er bygget til at gøre en masse forskellige ting. En robot kan for eksempel være en erstatning for et menneske i farlige miljøer, hvor robotten så kan udføre nogle specielle opgave. Et andet eksempel på dette kunne være en robot, som anvendes i krig. Det kan fx være i forbindelse med søgning af bomber, spionage af fjenden, kamp, drone bombning. Robotter bruges også meget i industrien på grund af deres hastighed og præcision.

Hvordan er en robot bygget?

Arbejde med robotter indeholder en masse matematik, og robotics kan opdeles i tre arbejdsområder.

Maskinteknik: Opbygning af robottens krop, hvordan overføres energi mellem robottens dele, hvor tyngdepunktet ligger, materialeegenskaber osv.

Elektrisk engineering: Opbygning af den elektriske del af robotten, elektroniske kredsløb, modstande, kondensatorer, transistorer, microcontrollere, skematiske diagrammer.

Datalogi: Programmering af hjernen på robotten, Artificial intelligence, ruteplanlægning, køre uden om forhindringer, machine learning, control structures, data types, algoritmer, hardware kontrol, microcontroller programmering osv.

Hvordan er historien om robotteknologi?

Robotter går langt tilbage i tiden, og de har udviklet sig meget i takt med computeren. Robotter blev for verdenskendt, da de første science fiction film og bøger begyndte at dukke op. I takt med at computerkraften udvikler sig hurtigere og hurtigere, har udviklingen i robot industrien også udviklet sig hurtigt.

Hvad er fremtiden for robotter?

Der er en stor udvikling i robotten industrien, og den vil blive endnu større i fremtiden. Mange tror at der vil komme en enorm udvikling i robotteknologi, som på mange punkter vil minde om den industrielle revolution.

Logbog uge 2

Dette er en gennemgang af uge 2 i min robotteknologi selvstudie. Det har været en meget spændende og udfordrende uge, hvor jeg har lært en masse om selvkørende biler. Jeg har arbejdet videre med kursus 1. Kurset består af 6 lektioner, og jeg har arbejdet med cirka en lektion om dagen. Det har fungeret rigtig godt, når jeg har gjort det på denne måde. Jeg har dog ikke kunne gå helt i dybden med alle lektioner, da teorien er meget tung. Sådan tror jeg også det kommer til at blive i de andre kurser. Robotteknologi og artificial intelligence er noget som tager mange år at lære, hvis man virkelig skal forstå det i dybden. Jeg synes dog stadigvæk at jeg lærer en hel masse hverdag, og det er det vigtigste. Her er en oversigt af hvad jeg gjorde hver dag i løbet af ugen.

Mandag Lokalisering
Tirsdag Kalman Filters
Onsdag Particle Filters
Torsdag Review af ugens 3 lektioner
Fredag Search
Lørdag PID-Control + byggede line follower robotten
Søndag SLAM + skrivning på bloggen

Selvkørende biler er som sagt et langt mere komplekst emne, end jeg havde forventet, og kurset indeholder en masse matematik og nogle af programmeringsopgaver er meget komplekse. Jeg kan derfor bruge mange flere timer på kurset. Jeg har været igennem alle seks lektioner, men jeg kan nemt gå mere i dybden med hver lektion. Det er også noget, jeg har tænkt mig at gøre i de kommende uger i en mindre målestok. Jeg regner med at bruge 1 time hver dag til at fortsætte med at arbejde på kurset. Det er et vildt spændende kursus, og super fedt at få indblik i selvkørende biler.

En anden ting jeg godt kan lide ved kurset, er at det bliver undervist af Sebastian Thrun. Han er administrerende direktør og medstifter af Udacity. Han har også vundet DARPA Grand Challenge i 2005, og han har ledet udviklingen af Googles selvkørende bil. Han ved virkelig hvad emnet handler om, og han er virkelig god til at forklare tingene, og det gør det hele meget lettere.

Jeg begyndte også og bygge på min line follower robot i denne uge. Den var temmelig let at bygge, og det tog kun mig et par timer. Robotten er baseret på SparkFun RedBot Kit og jeg fulgte en RedBot Assembly Guide Rev 02 i byggeprocessen. Slutresultatet var rigtig godt, og det er en sjov lille robot. Jeg testede robotten, da jeg var færdig med at bygge den, og det kører fint. Jeg brugte Arduino IDE og et RedBot bibliotek til at teste robotten med.

Logbog uge 3

I denne uge begyndte jeg på kursus 2: Intro to Artificial Intelligence – Learn the Fundamentals of AI. Kurset består af 22 lektioner og 8 problem sæt, Midtvejs eksamen, Afsluttende eksamen og officehours. Det er et stort kursus, så der er en masse arbejde, som jeg kan gå i gang med. Her er en oversigt over hvad jeg gjorde hver dag i løbet af ugen.

Mandag Kursus 2 – Lektion 1-6 og Problem sæt 1-3
Tirsdag Lektion 7-8 + skrive et nyt indlæg om “Introduktion til kunstig intelligens kursus” på min blog
Onsdag Kursus 2 – Lektion 9-14
Torsdag Læse op på Kalman Filters og Particle Filters + skrive på blog. Jeg skrev om nogle af de ting, som jeg har lært fra Lektion 2-6 i kursus 1
Fredag Gennemgang af nogle af de ting jeg har lært i løbet 2 indtil videre.
Lørdag Fridag
Søndag Arbejde på line follower robot + skrive på blog

Kursus 2 har været en lærerig oplevelse indtil videre, da kurset har lært mig en masse om de grundlæggende begreber i Artificial Intelligence. En af de ting som er rigtig fedt ved dette kursus, er at det viser mange konkrete eksempler på, hvor og hvordan AI anvendes. Jeg har fx hørt om AI i finans, robotteknologi, AI i medicin, AI i spil, AI på internettet og mere konkret, AI og poker, AI og maskinoversættelse, AI og spamfiltre, AI og partikelfilters og en masse mere. Kursus 2 går også i dybden med gaussians, partikelfilters, sandsynlighedsregning og en masse andre ting fra kursus 1, og det er virkelig rart. Kursus 1 og kursus 2 passer derfor meget godt sammen. Men det ville have givet mere mening at starte med kurset 2, da kurset giver en mere detaljeret og generel redegørelse for AI. I næste uge vil jeg fortsætte med at arbejde på kursus 2, og her begynder jeg at lære om Computer vision, robotteknologi og natural language processing.

Logbog uge 4

Mandag Kursus 2 – Lektion 15-22
Tirsdag Kursus 3 – Lektion 1-8
Onsdag Arduino programmering og arbejde med robot
Torsdag Arduino programmering og praktisk arbejde med elektronik
Fredag Fridag
Lørdag Fridag
Søndag Arbejde med robot + logbog.

Onsdag: Jeg arbejdede med IR sensorer på min linje efter robot. Sensorerne fungerer fint, og jeg har fået robotten til at køre efter en linje. Jeg overvejer at bestille nye dele hjem til robotten, og det vil muligvis være en slags fjernbetjening og et kamera til computer vision. Computer vision lektionerne i kurset 2 er meget spændende, og det er helt sikkert et emne, som jeg vil fortsætte med at arbejde på i fremtiden.

Torsdag: Jeg bruge lidt tid lodning for første gang, og det var meget sjovt. Jeg startede med at lodde ledninger sammen for at få noget praktisk erfaring. Derefter fik jeg loddet male pin headers på et 12-knap tastatur fra SparkFun. Lodningen var ikke den bedste, men det fungerede, da jeg koblede det til min Arduino og fik lavet lidt programmering. Det var en god og lærerig oplevelse, og det er helt sikkert noget, som jeg vil gøre mere af i fremtiden. Jeg tror mit næste robot projekt efter min line follower robot, skal være en robothånd.

Uge 4 har været en sjov uge med meget praktisk og teoretisk læring. Mit mål for denne uge var at lære mere om computer vision, robotteknologi og natural language processing og lave noget arbejde med problemsættene i kursus 2. Jeg har arbejdet meget med computer vision, robotteknologi og natural language processing, men jeg fik ikke arbejdet på problemsættene i løbet ugen. Jeg brugte en del tid i denne uge på kursus 3, og jeg fik lavet noget praktisk arbejde med elektronik i stedet. Så jeg fik ikke udført alle mål for denne uge, og det betyder, at jeg skal arbejde lidt ekstra på problemsættene i næste uge. Jeg føler dog stadig, at jeg er rimelig godt med i forhold til den oprindelige plan. Jeg er allerede godt i gang med kursus 3, og jeg har bygget min line follower robot. Så det betyder, at jeg kan bruge min tid på noget andet senere hen i forløbet. Jeg skal dog være bedre til at nå mine mål, som jeg har sat for ugen i fremtiden. Det betyder at jeg skal blive bedre til at holde mere fokus på min plan, så jeg når de mål, som jeg sætter mig. Mit mål for uge 5 er, at jeg vil forsøge at afslutte kurset 2. Det omfatter arbejde med resten af problemsættene, midterm eksamen og afsluttende eksamen. I slutningen af ugen vil jeg skrive om, hvad kursus 2 har lært mig indtil videre og hvad jeg synes om kurset.

Logbog uge 5

Mandag Kursus 2 – Problem sæt 4-8
Tirsdag Office hours 1-11 med Sebastian Thrun og Peter Norvig + midtvejs eksamen
Onsdag Midtvejs eksamen
Torsdag Afsluttende eksamen
Fredag Arbejde på min line follower robot + skrivning min blog.
Lørdag Fridag
Søndag Fridag

Uge 5 er nu overstået, og jeg færdig kursus 2 Introduktion til kunstig intelligens. Jeg har derfor nået mit mål for uge 5, som var at afslutte kurset 2. Jeg er nu klar til at fortsætte på kursus 3 i den kommende uge. Kursus 2 har været et godt kursus generelt, og jeg er super glad for at jeg tog kurset, fordi det har givet mig en meget bedre forståelse af, hvad AI er, og hvordan det bruges. Kurset har lært mig en masse om det grundlæggende i AI, og jeg har arbejdet med sandsynlighedsregning, Machine Learning, planlægning, Spilteori, Computer Vision, Robotics, Natural Language Processing og en masse andre ting i løbet 2. De to lærer Sebastian Thrun og Peter Norvig er virkelig gode til at forklare tingene, og det gør det så meget lettere at tage kurset.

Logbog uge 6

Mandag Kursus 3 – Lektion 9-12
Tirsdag Kursus 3 – Lektion 13-16
Onsdag Kursus 3 – Lektion 17-19
Torsdag Kursus 3 – Lektion 21-23
Fredag Kursus 3 – Arbejdede med problemet sæt 0 og quiz 1.
Lørdag Fridag
Søndag Fridag

Mit mål for uge 6 er at arbejde videre kursus 3, og det indbærer også arbejde med problemsæt og quiz. Jeg gennemførte mine mål for uge 6. Jeg brugte de 4 første dage på forelæsningerne, og så brugte jeg fredag på arbejde med problemet sæt 0 og quiz 1. I uge 7 vil jeg fortsætte mit arbejde med quiz og problemsæt i kursus 3. Sidst på ugen vil jeg skrive om hvad jeg har lært på kurset indtil videre.

Logbog uge 7

Mandag Kursus 3 – Arbejdede med problemet sæt 0 og quiz 1
Tirsdag Kursus 3 – Arbejdede med problemet sæt 1 og quiz 2
Onsdag Kursus 3 – Arbejdede med problemet sæt 1 og quiz 2
Torsdag Påskeferie
Fredag Påskeferie
Lørdag Påskeferie
Søndag Påskeferie

Uge 7 var en kort uge på grund af påskeferien. Mit mål for uge 7: I uge 7 vil jeg fortsætte mit arbejde med quiz og problemsæt i kursus 3. Sidst på ugen vil jeg skrive om hvad jeg har lært på kurset indtil videre.. Jeg brugte de første 3 dage af uge 7 på problemsæt og quiz opgaver, som var mit mål for ugen. Problemetsættene og quiz opgaverne var temmelig svære, men jeg gjorde mit bedste. Jeg brugte også lidt tid på at skrive om kursus 3. Jeg føler at jeg har opnået mine mål for uge 7. Jeg er nu klar til de sidste par uger, hvor jeg arbejder videre på min follower robot.

Kursus 3 har helt klart været det sværeste kursus på mit selvstudie. Selv om det har været svært, har det været en god og lærerig oplevelse. Teorien er meget kompleks til tider og matematik er på et højt niveau. Det er et kursus, som tager sin tid og det kræver mere end 14 dages arbejde. Jeg kunne derfor godt bruge flere uger på kurset til at gå mere i dybden med hvert emne. Selvom jeg godt kunne bruge mere tid, føler jeg stadig, at jeg har nået det jeg skulle med kursus 3. Jeg har fået en masse god læring og så har jeg fået erfaring med at studere på et lidt højere niveau end hvad jeg er vant til. Så jeg er super glad for at jeg har arbejdet med dette kursus. En ting jeg virkelig godt kan lide ved kursus 3, er at læreren laver en demonstration af hvad AI kan i forhold til emnet i hver forelæsning. Jeg synes det er en god måde at undervise på, og det har givet mig mulighed for at se, hvordan AI virker i teorien og i praksis på et højt niveau. Efter at have taget dette kursus har jeg fået en masse inspiration om, hvad der kan gøres med AI.

Mit mål for uge 8 er at lave en masse praktisk arbejde med min line follower robot, og jeg vil forsøge at implementere nogle af de ting, som jeg har lært fra de 3 online kurser, som jeg har fulgt i de seneste uger.

Logbog uge 8

Mandag Påskeferie
Tirsdag Arbejde på min line follower robot – Se note for tirsdag
Onsdag Arbejde på min line follower robot – Se note for onsdag
Torsdag Skrive specialisering rapport
Fredag Skrive specialisering rapport – Arbejde på min line follower robot
Lørdag Fridag
Søndag Fridag

Tirsdag: Jeg bruge lidt tid på at bygge en oval bane til min line follower robot. Jeg brugte sort tape og min line follower robot kan fint følge tapen. Jeg også bruge lidt tid på at læse om hver robot del på min robot, og jeg brugte også lidt tid på at læse Arduino programmering dokumentation. Det har nemlig været et stykke tid siden, at jeg har arbejdet på robotten, og det hjalp mig lige med at komme i gang med robotten igen.

Onsdag: Jeg startede dagen med at bygge en ny bane til robotten med blindgyder og veje som splitter op. Jeg lavede en masse test for at se hvordan robotten ville reagere under disse nye omstændigheder. Jeg også bruge lidt tid på at gennemgå nogle af emnerne fra kursus 1, og så brugte jeg lidt tid på at tænke over, hvordan jeg kunne implementere dem på min follower robot.

Mit mål for uge 8 er at lave en masse praktisk arbejde med min line follower robot, og jeg vil forsøge at implementere nogle af de ting, som jeg har lært fra de 3 online kurser, som jeg har fulgt i de seneste uger. Jeg fik lavet en masse praktisk arbejde i denne uge. Jeg byggede to baner til min robot, og jeg lavede en masse test med robotten på banerne, så jeg kunne se, hvordan robotten ville reagere under forskellige omstændigheder. Jeg brugte også lidt tid på at forsøge at overføre nogle af begreberne fra kursus 1 over til min robot. Jeg føler har opnået mine mål for uge 8. Mit mål for uge 9 er at bygge videre på mit praktiske arbejde fra sidste uge med min line follower robot. Et andet mål er at arbejde en masse på mit specialiseringsrapport.

Logbog uge 9

Mandag Arbejde med lokalisering af robot
Tirsdag Arbejde med lokalisering af robot og så har jeg brugt lidt tid på at kigge på de 3 online kurser.
Onsdag Arbejde med specialiseringsrapport
Torsdag Arbejde med specialiseringsrapport
Fredag Arbejde med specialiseringsrapport
Lørdag Arbejde med specialiseringsrapport
Søndag Arbejde med specialiseringsrapport

Jeg har arbejdet rigtig meget med min specialiseringsrapport i denne uge, så den kunne blive færdig og klar til aflevering. Så fik jeg arbejdet lidt videre på min robot, som jeg vil fortælle om til eksamen. Jeg har arbejdet med lokalisering af robot, som jeg lærte en masse om i kursus 1. Det handler om hvordan robotten finder frem til hvor den er. Jeg har denne gang kodet lidt i C#, da det sidder lidt bedre på rygraden end python. Rapport og arbejde med robot var mine mål for ugen, og dem fik jeg nået i denne uge. I uge 10 vil jeg arbejde videre med min robot og gøre mig klar til mundtlig eksamen. Jeg vil også afsætte noget tid til gennemgang af andre rapporter, da jeg også skal være opponent til eksamen.

Beskrivelse af aktuelle udfordringer i specialiseringen

De tre online kurser som jeg har deltaget i, indeholder alle matematik på et højt niveau, og det har været en af de store udfordringer i min specialiseringsperiode. Der bliver brugt rigtig meget sandsynlighedsregning i Robotics og artificial intelligence, og det er fordi, at der i mange problemstillinger bliver arbejdet med ufuldstændige og usikre oplysninger. Sensorer kan måle forkert. Der kan være sten på vejen osv. For at kunne at løse sådanne problemstillinger, er der så udviklet nogle værktøjer/metoder, som er baseret på sandsynlighedsregning. Det er fx Bayesian, kalman filters, particle filters, som er nogle af de værktøjer, som jeg er blevet undervist i gennem kurserne.

Jeg har også haft udfordringen i at skulle lære og arbejde med to nye programmeringssprog. Jeg har brugt programmeringssproget python i forbindelse med opgaver på online kurserne. Så har jeg brugt programmeringssproget Arduino til min line follower robot, som har en C++ og C lignende syntaks. Begge programmeringssprog har massere af dokumentation på nettet, og det har været en stor hjælp, når jeg har kodet i de to sprog. Arduino er på baseret open source, og der er derfor et stort fællesskab på nettet, hvor folk deler deres erfaring med det de nu har bygget. Python bliver brugt af rigtig mange uddannelsesinstitutioner i hele verden, og der er derfor også meget dokumentation på nettet. Så har python også en simpel syntaks i forhold til java og C#, som gjorde det nemt at komme i gang med.

Diskussion af arbejde og læringsprocesser

Kursus 1 Artificial Intelligence for Robotics og kursus 2 Intro to Artificial Intelligence har jeg fulgt gennem Udacity, som er en online platform, hvor det er muligt at tage tage online kurser. Kurserne er opbygget på den måde, at de har tilkoblet en lærer, som så har hjulpet mig igennem kurset fra start til slut. Undervisningen sker gennem video, hvor læreren lærer fra sig, og så er der efterfølgende opgaver og spørgsmål, som skal svares på, og så får jeg af vide om det er rigtig eller forkert. Kursus 1 havde blandt andet rigtig mange indbygget programmeringsopgaver, hvilket jeg synes var rigtig fedt og meget lærerigt. Der var mange hands on opgaver, som jeg kender fra undervisningen på UCN. Derudover er der office hours i kurserne, hvor lærerne svarer på spørgsmål, og så er der tilbygget et diskussionsforum, hvor der er muligt at få hjælp af andre elever.

Jeg havde fornøjelsen, i at have Sebastian Thrun som lærer i begge kurser, og så havde jeg også Peter Norvig som lærer i kursus 2. Sebastian Thrun har en Ph.D i Computer Science, og er forskning professor på Stanford, og så han har været med til at lede udviklingen af google self driving car. Peter Norvig er forskningschef hos Google, og så har han en Ph.D i Computer Science. Det er to rigtig dygtige lærere, som uddannelses og erhvervsmæssigt har store erfaringer. Hvis jeg skal lære noget, så synes jeg at det giver god mening at lære fra de bedste af de bedste. Det har helt klart været med til at gøre min læring i forbindelse med kurserne meget mere spændende og motiverende. Det gør undervisningen meget sjovere, og det synes jeg er meget vigtigt.

Diskussion af læringsudbytte

Vi mennesker er efterhånden nået så langt i vores teknologiske udvikling, at vi kan lave biler, som kan køre på vejene helt af sig selv, uden at vi mennesker skal sidde bag rattet. De kaldes selvkørende biler og de går også under betegnelsen selvkørende robotter. Jeg har i forbindelse med min specialiseringsperiode arbejdet med nogle af de teknologier, som ligger bag Googles selvkørende bil.

Lokalisering

Lokalisering er blandt andet en af problemstillingerne ved selvkørende biler. Selvkørende biler har brug for at vide, hvor de er i forhold til sine omgivelser, så de kan køre sikkert uden skade sig selv og sine omgivelser. Vi kan tage en bil, som kører på motorvejen som et eksempel. Her vil bilen gerne vide, hvor den er på vejen. Er bilen i sin egen vejbane, eller er den på vej til at køre i grøften eller i over modsatte vejbane? En standard måde at løse dette problem er ved hjælp af satellitter, som udsender signaler til bilen. Det er kendt som GPS (global positioning system). Problemet med GPS er, at det ikke er så nøjagtigt. I GPS kan der være 2-10 meters fejl i lokalisering, og det kan forårsage store problemer for bilen, hvis den fx var styret alene med GPS. Så ville bilen på et tidspunkt køre af vejbanen og så køre ind i noget. Det ville være meget bedre, hvis bilen har noget med 2-10 centimeter fejl. Så ville bilen have en langt bedre chance opholde sig på motorvejen. Googles selvkørende bil løser lokalisering problemet med brug af flere sensorer på en gang. Det er typisk følgende sensorer, som bliver brugt i selvkørende biler: sonar, kamera, laser, radar og GPS. Disse sensorer giver nogle billeder af vejbanen og omgivelser, som den selvkørende bils computer kan bruge sammen med nogle teknikker, der indeholder tung matematik, som så kan forudsige, hvor den selvkørende bil er på vej hen. På den måde kan en selvkørende bil blive på vejen med få centimeters fejl, og det er selv når linje markører mangler på vejbanen.

Sandsynlighed

En anden stor del af selvkørende biler er sandsynlighedsregning, og det handler om at måle sandsynligheden for at en hændelse vil forekomme. Der er rigtig mange parametre i spil, når en selvkørende bil kører på vejen, og her er det vigtigt at bilen følger det mest pålidelige data, når den skal lokalisere sig selv. Der kan fx være sten på vejen og dårligt vejr, som giver støj i sensor målingerne. Hvis bilen fx følger en sensor måling, som ikke er helt rigtig, og så efterfølgende følger en forkert sensor igen, kan fejlene hurtigt blive rigtig store. Det er kan i værste fald gøre at den selvkørende bil kører galt. Sandsynlighedsregning spiller en stor rolle i selvkørende biler og i artificial intelligence.

probability

I forbindelse med ovenstående billede vil jeg give et eksempel på, hvor total sandsynlig bruges til at lokalisere en robot. Eksemplet starter med at der er en robot, som ikke har nogen anelse om, hvor den er i verdenen. I toppen billedet er der 3 grønne døre. Robotten er den blå halvcirkel i toppen med 3 små hjul. Under robotten er der 4 funktioner, som er tegnet som grafer. y-aksen i graferne viser sandsynligheden for ethvert sted i verdenen og x-aksen viser alle lokationerne i verdenen. Den røde streg i graferne viser den nuværende tro på, hvor robotten er i verdenen, hvor der så er givet lige stor vægt på hver placering. Det kaldes også Maximum confusion. Den første funktion med den røde vandrette streg viser som sagt, at robotten kan være alle steder i verdenen, da der er lige stor vægt, og robotten ikke har foretaget nogen måling af hvor den er.

Robotten foretager så en måling af en dør, og denne måling forvandler den første tro funktion defineret på mulige placeringer til en ny funktion. Det er så funktion nummer to, hvor der står posterior. Posterior betyder efter en måling er taget. De 3 røde bump du ser, er den aktuelle bedste overbevisning om, hvor robotten er verdenen. De 3 røde bump er lige store, så robotten er ikke helt sikker på, hvor den er. Robotten bevæger sig derfor en gang til højre i en vis afstand. Det er den tredje funktion på billedet. Posterior troen har flyttet sig i forhold til bevægelsen. Det kaldes convolution. Så registrerer robotten en dør igen, og det er her det magien sker. Troen bliver ganget med den forudgående funktion og derefter troen bliver højere. Det er den sidste funktion, du ser på billedet med en høj tro højdepunkt. På dette tidspunkt robotten har lokaliseret sig selv.

I forlængelse af ovenstående eksempel har jeg lavet noget C# kode, som skal forestille der hvor robotten registrerer døren. Der er først en liste med lige sandsynlighed for hvert sted i verdenen. Så er det en liste world, som skal forestille røde og grønne døre. Z bruges i når der måles efter farven rød. Så er der pHit og pMiss, som bruges når, robotten måler rigtigt og forkert. Metoden senseNormalized har et for loop, som kører igennem p, hvor den tjekker om farven rød passer med farven i world. Hvis elementet i listen passer bliver det ganget med pHit og tilføjet til listen q. Hvis det ikke passer bliver elementet i listen ganget med pMiss og tilføjet til listen q. Derefter er der er for loop, som normalisere elementerne i listen q. Så printer metoden til sidst elementerne i listen q ud. Her kan vi så se at sandsynligheden er højere ved de røde døre frem for de grønne.

Sandsynlighed robot programmering

Kalman Filters

Radar og laser sensorer er fx rigtig gode til sporing af ting, og de derfor bruges på selvkørende biler til at registrere distance og hastighed af andre biler på vejen. Disse to sensorer giver en masse data til den selvkørende bil om miljøet, og her bruges der Kalman filters til at få denne data til at give mening i forhold til tracking af andre biler. Det er igen meget matematisk og gør brug af noget som hedder Gaussians, som er en stor del af Kalman filters, men det er ikke jeg vil gå dybere ind i rapporten.

Line follower robot

Jeg i forbindelse med min specialiseringsperiode bygget og kodet min egen line follower robot. Robotten er baseret på et samlesæt, som hedder Redbot Kit. Samlesættet gjorde at jeg hurtigt kunne bygge og samle robotten, og det gav mig mere tid til at kigge nærmere på programmeringsdelen af robotten. Robotten består kort sagt af et plastikskelet, et mainboard, et accelerometer, 3 stk infrarød line follower sensor, 2 stk dc motor, 2 stk hjul, 1 stk kuglehjul og en masse ledninger. Jeg tager robotten med til eksamen, så i har mulighed for at se nærmere på robotten.

Søge algoritme til selvkørende bil

Bevægelsesplanlægning er også en stor problemstilling inden for selvkørende biler. Det handler om, hvordan selvkørende biler planlægger det at komme fra A til B på den mest optimale måde. Et eksempel kunne være en selvkørende bil, som skal køre fra San Francisco til Los Angeles. Her er der en masse forskellige veje til at tage, og her er det bevægelsesplanlægning, som hjælper selvstændige køre bil for at finde en optimal rute. A* søgealgoritmen bruges typisk til planlægning af ruter for selvkørende biler. A *søge algoritme beregner den korteste vej og bruger en heuristisk funktion, som er lidt ekstra information, som hjælper søge algoritmen i den rigtige retning.

Konklusion

Inden jeg begyndte på min specialiseringsperiode fik jeg lavet nogle læringsmål og aktiviteter, som jeg så lavede en tidsplan ud fra. Det har hjulpet mig rigtig meget i min specialiseringsperiode, da det har givet struktur på arbejdet, så jeg har holdt mig på det rette spor i de 10 uger. Overordnet har det været en meget udfordrende specialiseringsperiode, da robotteknologi og artificial intelligence er meget tungt teoretisk og matematisk. Selvom det har været udfordrende, har det stadig været en lærerig oplevelse. Jeg har fået lov til at lære en helt masse med selvkørende biler, og så har jeg fået godt billede af, hvordan det er at studerer robotteknologi artificial intelligence på et højt teoretisk og matematisk niveau. Jeg har for eksempel fundet ud af, at jeg synes computer vision, er meget mere spændende end et emne som natural language processing. Det er sådanne nogle erfaringer, som har givet med et godt fundament til at bygge videre på i fremtiden.

Det har også været en meget lærerig oplevelse at bygge og programmere min første robot nogensinde. Det blev til en line follower robot, og jeg er meget spændt på at vise resultatet af robotten til den mundtlige eksamen. Jeg er også blevet meget klogere på mig selv i specialiseringsperioden. Jeg har arbejdet meget selvstændigt, og jeg har virkelig prøvet, hvordan det er at tage læringen i helt egen hånd. I takt med at den teknologiske udviklingen går hurtigere og hurtigere, er det også vigtigt kunne omstille sig til nye teknologier og programmeringssprog. På det punkt har specialiseringsperioden givet mig gode erfaringer.

I forhold til min problemformulering har jeg kigget meget på selvkørende biler generelt og hvordan de virker, og ikke så meget hvordan de specifikt finder vej gennem en labyrint. Til labyrint delen har jeg brugt min line follower robot til at køre gennem en bane, og det er også noget jeg vil snakke mere om til eksamen. I forhold til mine læringsmål synes jeg at jeg kom godt omkring det hele. Det med at kortlægge omgivelserne på robotten kom jeg aldrig helt i dybden med, da det er en forholdsvis kompleks process. Mit helt store fokus til eksamen bliver gennemgang af kode, og så vil jeg vise min line follower robot frem.

Kildefortegnelse

Redbot Kit som jeg har brugt til min robot

https://www.sparkfun.com/products/retired/11988

Kom i gang med redbot

https://learn.sparkfun.com/tutorials/getting-started-with-the-redbot

RedBot Assembly Guide Rev 02 https://learn.sparkfun.com/tutorials/redbot-assembly-guide-rev-02

Brugt i forbindelse med læring om robotter

http://en.wikipedia.org/wiki/Robot

Kalman filter

http://en.wikipedia.org/wiki/Kalman_filter

Particle filter

http://en.wikipedia.org/wiki/Particle_filter

Artificial intelligence

http://en.wikipedia.org/wiki/Artificial_intelligence

Peter Norvigs hjemmeside

http://norvig.com/

Sebastian Thruns

http://robots.stanford.edu/

Jeg har brugt Khan Academy til lære om mere om sandsynlighedsregning og statistik

https://da.khanacademy.org/

Kursus 1

https://www.udacity.com/course/cs373

Kursus 2

https://www.udacity.com/course/cs271

Kursus 3

http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-034-artificial-intelligence-fall-2010/index.htm


Skriv et svar