Mobile Robotter. En praktisk undersøgelse af tilgængelighed af robotudvikling for entusiaster.

Størrelse: px
Starte visningen fra side:

Download "Mobile Robotter. En praktisk undersøgelse af tilgængelighed af robotudvikling for entusiaster."

Transkript

1 Mobile Robotter En praktisk undersøgelse af tilgængelighed af robotudvikling for entusiaster. Toke Faurby Bachelor Studies in Humanities and technology Roskilde University. Computer Science Allan Laursen Bachelor Studies in Natural Science, Roskilde University Computer Science Morten Brandrup supervised the project.

2 Abstract Robotics is a quickly growing field and the ability to build and program robots are increasingly relevant skills to possess. In order to learn about robots we created a wheeled robot with several sensors. The construction took place at FabLab RUC, a workshop that provides expertise and tools to the public free of charge. For the project, we limited ourselves to resources available to a regular Danish citizen. Through an integrated hardware and software development process, we examined robot programming. We used an iterative development process, building several prototypes along the way. There are complications associated with working with sensor data and actuators and several precautions need to be taken in order to ensure a robust performance. Through the development process, we gained practical experience and skills, which we can now apply to future robotics projects. We found that despite the technical difficulty associated with creating a robust robotic system, anyone with the time and drive can acquire these skills through tools and resources that are easily accessible to most Danish citizens. Acknowledgements This paper and the associated robot were made possible by the help and guidance of our supervisor Morten Brandrup as well as FabLab RUC employees Nicolas Møbius and Mads Hobye. 2

3 Indholdsfortegnelse Abstract... 2 Acknowledgements... 2 Indledning... 4 Motivation... 4 Problemformulering... 5 Semesterbinding... 5 Metode... 6 Beskrivelse af projekt... 6 Beskrivelse af arbejdsproces... 6 Baggrundsviden... 7 Robot-programmering... 7 Kontrol-modeller... 7 PID controller...10 Designvalg...13 Arbejdstilrettelæggelse...13 Hardware overvejelser...14 Software overvejelser...16 Erfaringer...17 Processtyring...17 Hardware...18 Software...19 Dokumentation...24 Karosseri...24 Elektronik...24 Software...25 Refleksion...25 Konklusion...26 Videre arbejde...26 Bibliography

4 Indledning I dette projekt har vi bygget en mobil robot med to motordrevne og et frit roterende hjul, en såkaldt differential drive robot, som er udstyret med sensorer. Ved hjælp af sensorerne kan robotten følge en streg og måle afstand til objekter. Den udviklede robot kan ses på opgavens forside og den tilhørende software kan findes i bilag Vi har begge erfaring med software-projekter, men ingen af os har erfaring med at udvikle hardware og software som integreret projekt eller robot-programmering. Projektet fungerer som en introduktion til det tværfaglige arbejde med hardware- og softwareudvikling, da det er første gang vi stifter bekendtskab med den kombinerede arbejdsproces. Derfor har vi designet robotten til at inkorporere udvalgte generelle elementer, der er nemt tilgængelige, kan anvendes til mange projekter og som niveaumæssigt er passende at arbejde med som et første hardware-projekt. Arbejdet på robotten har været iterativt og undervejs har vi lavet flere prototyper. Vi har specificeret overordnede mål, og ud fra disse har vi planlagt hvilken software og hardware der skal udvikles. Løbende har vi udviklet små dele af hardware og software som derefter er blevet evalueret. På baggrund af disse evalueringer har vi tilpasset målet for robotten og det videre arbejde. Motivation At skrive programmer til robotter, der agerer i den virkelige verden, er ikke det samme som at skrive programmer, der udelukkende skal køre på en computer. Når en robot udvikles og programmeres er man nødt til at tage højde for fysiske begrænsninger, sensor-støj og aktuator-upræcision. Dette tilføjer flere potentielle faldgruber, hvilket gør det vanskeligt at konstruere robuste systemer. Professor i kybernetik Kevin Warwick har sagt at: An actual robot walking machine which takes one step and then falls over is worth far more than a computer simulation of 29,000 robots running the London Marathon in record time (Warwick, 2014) Dette viser Warwicks holdning til den øgede kompleksitet, der opstår når en robot skal interagere med den virkelige verden, og understøtter vores opfattelse af, at hvis man vil programmere en funktionel robot, så bliver man også nødt til at bygge den. Simulationer er ikke nok. Robotprogrammering er ikke kun et interessant forskningsfelt i forhold til, hvordan software og hardware interagerer med omgivelserne, men også en voksende industri. Robotter er i stigende grad begyndt at blive markedsført til det private marked. For eksempel er robotstøvsugeren Roomba, legetøjs-robotten Sphero og sikkerheds-robotten Avatar III alle robotter som er markedsført til privatpersoner (Robotguide, 2013). Man behøver dog ikke kun være forbruger og købe færdigfremstillede robotter. Efterhånden som motorer, sensorer og processorkraft er blevet billigere, er det blevet nemmere for privatpersoner selv at bygge robotter. 1 Video af robotten der følger en linje: 2 Video af robotten der demonstrere afstandsmålinger: 4

5 Med moderne computerstyrede produktionsfaciliteter som laserskærere, CNC maskiner og 3D printere, kombineret med billige motorer, sensorer og mikroprocessorer, er det muligt at give ideer fysisk form igennem funktionelle protyper på måder som var umulige indtil for nylig. (Padfield, 2014) Sådanne faciliteter er offentligt tilgængelige i FabLab RUC, et værksted som stiller redskaber og ekspertise til rådighed for studerende såvel som privatpersoner (RUC.dk, 2014) På internettet er det let at finde resurser, der gør det nemmere at begynde at udvikle robotter. For eksempel findes der på den populære maker-hjemmeside Instructables.com, over 1200 guides til robotprojekter (Instructables, 2014). Ud over guides findes der også decideret undervisningsmateriale. Et eksempel på dette er Coursera.org, som er en online uddannelsesplatform, som via partnerskaber med topuniversiteter verden over kan tilbyde gratis online-kurser, såkaldte MOOCs (Massive Open Online Courses), inden for mange fagområder (Coursera, 2014). Man kan blandt andet tilegne sig tekniske kompetencer og færdigheder, der er relevante for robotudvikling. Problemformulering I dette projekt vil vi undersøge hvordan de muligheder der er tilgængelige for en normal dansker kan bruges til at lære om robotudvikling. I løbet af projektet undersøges robotprogrammering igennem et udviklingsforløb, hvor en mobil robotplatform udvikles med dertil hørende software. Til dette forløb vil de faciliteter der er offentligt tilgængelige i FabLab RUC, og vejledning fundet på internettet, blive benyttet. I forbindelse med forløbet vil de kompetencer og den viden der er nødvendige for at gennemføre et robot-projekt blive behandlet. Semesterbinding Denne opgave skrives i forbindelse med et fagmodulprojekt i datalogi på Roskilde Universitet. I fagmodulbeskrivelsen fremgår det at: Fagmodulprojektet skal opøve den studerendes evne til at beskrive og reflektere over et selvstændigt udført arbejde, hvor en middelstor programmeringsopgave er planlagt, implementeret, afprøvet og dokumenteret, og hvortil der er anvendt et højere, generelt programmeringssprog. (Studienævnet for Datalogi og Informatik, 2014) I det udviklingsforløb vi har været igennem har vi tilegnet os viden om, hvordan software og hardware udvikles sideløbende, hvilke algoritmer der kan bruges til at kontrollere en robot, og hvordan sensor-data behandles. I løbet af planlægning-, gennemførsels- og afprøvnings-processen har vi lært at programmere i Arduino-sproget, som er baseret på C++, og hvordan forskellige design fungerer i praksis. Ved refleksion over vores arbejdsproces og de vanskeligheder vi er stødt på, har vi opnået viden om hvordan et fremtidigt forløb kan tilrettelægges, og hvordan et udviklingsforløb bør styres. 5

6 Metode Beskrivelse af projekt I løbet af dette projekt blev en robot, som kan køre rundt autonomt, udviklet. Forløbet blev gennemført ved brug af elektroniske komponenter og produktionsfaciliteter som er tilgængelige i Fablab RUC og læringmateriale på internettet. I forbindelse med sådan et projektet er det nødvendigt at træffe flere design- og implementeringsvalg. Da dette projekt, som nævnt, er første gang vi samlet udvikler hardware og software i et forløb, tjener det også som introduktion til denne type arbejde. Vi har valgt at tage udgangspunkt i udbredte og generiske materialer og komponenter, således at viden der tilegnes igennem dette projekt kan anvendes i forskellige sammenhænge. I arbejdet med mobile robotter opnås indsigt om generelle principper i kontrolsystemer og robotprogrammering, idet robotten er afhængig af sensorer og dynamisk kontrol for at kunne navigere gennem et ukendt og foranderligt miljø. En differential drive robot, altså en robot med to individuelt drevne hjul, er en simpel robotplatform som ofte benyttes som introduktionsplatform til mobile robotter. Dette skyldes, at den er forholdsvis nem at kontrollere, og styringen er en kendt størrelse inden for robotprogrammering. Derfor er der meget materiale om emnet online. Algoritmen for styring af robotten behandles i [PID controller, side 10] Vi har udstyret vores robot med seks sensorer, hvilket er forholdsvis mange i forhold til andre begynderrobotter. Dette har vi gjort for at stifte bekendtskab med forskellige sensor-typer og for at indsamle rigeligt data at programmere funktionalitet ud fra. Til dette projekt er det nødvendigt at træffe valg i forhold til hardware såvel som software samt, hvordan disse skal kombineres. De valg vi har truffet behandles i [ Designvalg, side 13] Beskrivelse af arbejdsproces Inden vi begyndte at arbejde på projektet tilrettelagde vi nogle principper for, hvordan vi havde tænkt os at arbejde, hvad vi ønskede vores endelige produkt skulle være, og hvad vi gerne ville have ud af dette projekt rent fagligt. Følgende afsnit vil beskrive vores planer og mål. I løbet af dette projekt ønskede vi at opnå generelt anvendelig viden om udvikling af robotter. Vi ønskede praktisk erfaring med hardware- og softwareudvikling, planlægning af et samlet robot-system, og erfaring med kontrolsystemer. Vi besluttede at arbejde iterativt og lave en tidlig prototype, som vi efterfølgende itererede på. Da dette er vores første robot-projekt undlod vi at sætte for snævre rammer for projektet, så vi kunne tilpasse målet for robotten efterhånden som vi fik mere erfaring med bearbejdelse af hardwaren. Derudover fokuserede vi på at opdele projektet i mindre dele, som kunne udvikles en ad gangen. Vi definerede vores produktmål ud fra funktionelle beskrivelser af hvad vi ønskede robotten skulle kunne. Vi definerede disse mål så de kunne op- og nedjusteres, alt efter hvordan projektet forløb. Det viste sig dog, at vores ambitionsniveau oversteg vores faktiske kompetencer i en sådan grad, at en simpel nedskalering ikke var tilstrækkelig. Dette vil blive redegjort for i [Erfaringer, side 17] 6

7 Baggrundsviden Vi bruger Joseph L. Jones definition af en robot, der lyder som følger: A device that connects sensing to actuation in an intelligent way. (Jones, 2004) Hvis man ønsker at bygge en robot, som skal kunne agere i den virkelige verden, skal man tage højde for at omgivelserne er ukendte og foranderlige, modsat digitale simuleringer eller kontrollerede miljøer som fabrikker. Dette er særligt gældende for mobile robotter, som bevæger sig rundt i disse omgivelser. Det er nødvendigt at en mobil robot kan tilpasse sig de forskellige omgivelser og forskellige situationer. For at kunne navigere i dynamiske miljøer er man nødt til at operere på baggrund af signaler, der modtages fra sensorer. Robot-programmering Når en robot programmeres er man nødt til at tage højde for sensorstøj og aktuator-upræcision. I et computerprogram bestemmer man i høj grad selv, hvordan verden hænger sammen, men med robotter er man nødt til at underordne sig den virkelige verdens fysiske begrænsninger. Hvilke materialer og elektroniske komponenter der er tilgængelig, bliver en faktor. Til forskel fra et program der kører på en computer, hvor præcise værdier kan gemmes og læses, er man nødt til at tage forbehold for upræcision, uventede situationer og et dynamisk miljø, der kan forandre sig. Med robotter er det svært at planlægge for langt fremad, og man bliver nødt til at tage hensyn til omgivelserne. Robotten bliver nødt til konstant at opdatere sin information om omgivelserne, og justere sin adfærd derefter. Kontrol-modeller Hvordan dynamiske systemer udvikler sig over tid, og hvordan denne udvikling kan påvirkes hører inden for det generelle område af kontrolteori. Kontrolteori er relevant inden for mange fagområder ud over robot- og maskinkontrol, men her er det et af de centrale områder. For at planlægge kontrol af en robot er det nødvendigt at have en model for hvordan robotten agerer. Robotten kontrolleres ved hjælp af to hjul der kan styres uafhængigt så man er nødt til at tage udgangspunkt i disse, da det er disse parametre som de fysiske aktuatorer påvirker. Denne model kaldes differential drive model. Vores algoritmer tager udgangspunkt i kontrolteori, hvilket vil blive gennemgået i følgende afsnit. 7

8 Figur 1a: Kinematik for en differential drive robot. Figuren viser sammenhængen imellem forskellige hjulhastigheder (blå pile) og robottens overordnede bevægelse (røde pile) for en differential drive robot. (National Mission on Education Through ICT, 2014) Det er dog ikke særlig intuitivt at arbejde med hjulhastigheder direkte, så vi vil bruge en design-model kaldet unicycle modellen. En unicycle model er en abstraktion hvor robotten ses som havende ét hjul hvor den lineære og angulære hastighed kan kontrolleres direkte i stedet for hjulhastighederne, til at beskrive udvikling i systemet. Unicycle modellen gør det nemmere at designe controllere. Figur 1b: Kinematik for en unicycle Figuren viser en unicycle, hvor robottens bevægelser beskrives ud fra den linære og anglulære hastighed i stedet for hjulhastigheder. Billedet er modificeret ud fra (National Mission on Education Through ICT, 2014) Ved at udregne kontrol signaler til unicycle modellen, og så omregne disse til differential drive modellen, forenkles kontrolsignalerne til en hastighed og en vinkel, hvilket er langt mere intuitivt. I følgende vil den matematiske baggrundsviden for en differential drive og en unicycle robot blive gennemgået, sammen med den kontrol-algoritme vi har benyttet. Den baggrundsviden der vil blive gennemgået, er baseret på et online kursus som blev afholdt af Magnus Egerstedt (Egerstedt, 2014) fra Georgia Institute of Technology på Coursera.org. Kurset dækker kontrol af mobile robotter generelt fra et teoretisk perspektiv. Kurset indeholder også en valgfri software og hardware del. Kurset tager udgangspunkt i PID-controllere og gennemgår både den matematiske 8

9 baggrund og hvordan forskellige typer mobile robotter kan kontrolleres. Kurset er et eksempel på de lærings-ressourcer der er tilgængelige online, hvor et læringsforløb stilles til rådighed gratis. Et såkaldt MOOC. Differential drive På en differential drive robot kontrolleres to hjuls omdrejningshastigheder individuelt og et tredje hjul er passivt og bidrager til stabilitet. Det antages at robotten har omdrejningspunkt midt imellem de to aktive hjul. Som nævnt ovenfor bør en model ikke afhænge af at kende parametre for robotten, men dette er ikke altid muligt. Hvilke parametre der er nødvendige afhænger af sensor-aktuator kombinationen og hvad man ønsker at kontrollere. Nogle parametre er bedre end andre at afhænge af, da de er mere stabile. For eksempel er vægt og friktion imellem hjul og underlag dårlige parametre da de nemt kan ændre sig når robotten videreudvikles eller den kører over på et andet underlag. Denne model er afhængig af at afstanden mellem hjulene og hjulenes radius kendes. Disse parametre er nemme at måle og ændrer sig ikke pludseligt, typisk heller ikke når robotten videreudvikles. Hvert hjul kan kontrolleres individuelt: Systemets tilstand er givet ved L: afstand mellem hjulene R: hjul radius V L : venstre hjul hastighed V R : Højre hjul hastighed (x, y): position φ: vinkel (relativ til en base vinkel) Tilstandsændringen for en differential drive robot er givet ved x = R (Vr + Vl) cosφ 2 y = R (Vr + Vl) sinφ 2 φ = R (Vr Vl) L Disse ligninger benyttes til omregningen fra unicycle modellen til differential drive modellen. Hvis man havde de to hjuls hastigheder kunne man også udregne robottens position og orientering. Men da vores robot ikke har hardware der kan måle hjulhastighederne er dette ikke muligt. Unicycle I unicycle modellen kontrolleres den lineære og angulære hastighed direkte. For at kunne anvende denne abstraktion skal den lineære og angulære hastighed omregnes til de faktiske kontrol-signaler robotten benytter. 9

10 Systemets tilstand er det samme som for en differential drive robot, men input parametrene er nu: v: lineær hastighed w: angulær hastighed Med de nye forsimplede input parametre bliver tilstandsændringen: x : v cosφ y : v sinφ φ : w Som sagt er denne model blot en abstraktion der gør det nemmere at designe kontrol-signaler. Omregningen fra unicycle modellen til differential drive modellen kan udregnes ved at sammenfatte ligningerne fra unicycle modellen og differential drive modellen: v = R 2 (V R + V L ) 2v R = V R + V L ω = R L (V R V L ) ωl R = V R V L Ved at løse de to ligninger med to ubekendte for V L og V R får man ligningen for de to hjulhastigheder: V L = V R = 2v ωl 2R 2v + ωl 2R Omregningen fra unicycle modellen og differential drive modellen er nu udregnet. Denne sammenhæng er udregnet således, at hastighederne er normaliseret ud fra den målestok afstanden imellem hjulene og deres radius er angivet i. Her er det dog også nødvendigt at kende hjulhastighederne. Da vi ikke har nogle sensorer der kan måle de faktiske hjulhastigheder kender vi dem ikke, og vores kontrol-signal er derfor ikke normaliseret. På grund af den implementering vi har lavet vil det dog være nemt at implementere og denne del af programmet behøver ikke blive ændret. Vores implementering af omregning fra unicycle kinematikken til differential drive kinematikken kan findes i uni_2_diff funktionen i methods.ino. PID controller Den mest udbredte algoritme til lavniveau kontrol er en proportional-integral-differential controller (PID controller) (Egerstedt, 2014). Med en PID controller er stabilitet ikke garanteret, og den er ikke tilstrækkelig til komplekse systemer, men den indgår i mange forskellige kontrol situationer, som for eksempel fartpiloter, strømningsregulering i rør, eller som i vores tilfælde at følge en linje. En af styrkerne ved en PID controller er at den er baseret på et feedback system, hvilket betyder at det er muligt at anvende den, selv når mange parameteren er ukendte, eller hvis de ændrer sig. (Egerstedt, 2014) I følgende afsnit vil baggrundsviden omkring design og implementering af en PID controller til differential drive robotter blive gennemgået. 10

11 I kurset forklarede Egerstedt at et dynamisk kontrol system kan beskrives som: At have en tilstand, som beskriver et øjebliksbillede af systemet, en dynamik som beskriver hvordan tilstanden ændrer sig over tid, og en reference, som er den tilstand som man ønsker at systemet skal have. PID controllerens opgave er at sende et kontrol signal input således at forskellen imellem robottens tilstand og reference formindskes. PID controllers er et feedback system, som er baseret på kortlægningen fra sensor måling til kontrol signal. Forskellen imellem reference og tilstand bliver estimeret på baggrund af sensor-målingerne, som er en tilnærmelse af robottens tilstand. Denne forskel kaldes error. På baggrund af denne error udregnes kontrol signalet, som benyttes til at påvirke systemet igennem de tilgængelige aktuatorer. Figur 2: Blokdiagram over en PID controller Denne figur viser feedback-systemet som ligger til baggrund for en PID controller. Ud fra et error signal, e(t), bliver en proportional-, P, integral-, I, og differentialforstærkning, D, udregnet. Disse tre signaler summeres og bruges som kontrol signal, u(t). Ud fra kontrol signalet ændrer systemets tilstand sig. Målingen af systemets nye tilstand, y(t), og den ønskede tilstand, referencen r(t), lægger til grund for et nyt error signal, og processen starter forfra. (Wikipedia, 2014) Designmålet er først og fremmest at systemet er stabilt, det vil sige at systemets error ikke forværres, for eksempel ved at systemet overkorrigerer, og derved oscillerer ud af kontrol. Stabilitet er altid det vigtigste designmål. Efter stabilitet kommer sekundære designmål, som for eksempel, optimering, robusthed og præcision. For at kunne designe et kontrolsystem på en systematisk måde benyttes modeller til at estimere hvordan systemet udvikler sig. For at modellere den virkelige verden, som er i kontinuert tid, anvendes den afledte funktion af systemets tilstand i forhold til tid. Da computere kører på diskret tid kan modellerne ikke benyttes direkte. Ved at benytte tidsintervaller kan dette dog overkommes, jo mindre tidsintervaller der benyttes jo mere præcise bliver modellerne. (Egerstedt, 2014) En nem metode er at anvende det tidsinterval der naturligt forekommer imellem hver cyklus (loop) i koden. For at opnå et succesfuldt kontrol system kan nogle generelle principper stilles op. For det første skal en lille error give et lille kontrol signal (input), input et skal ikke variere hurtigt, og kontrolsystemet kan ikke afhænge af komplet viden om verden eller robotten. Systemet bør også være resistent over for 11

12 ændringer i dynamikken, for eksempel hvis en motors effektivitet reduceres på grund af snavs, eller hvis robottens vægt ændres, ved at noget tilføjes eller tages af. En PID controller kan håndtere disse problemer. Kontrol signalet fra en PID controller bliver udregnet ved at tage summen af tre forskellige faktorer der afhænger af error signalet: en proportional, integral og differentiale faktor. I kurset forklarer Egerstedt at: Proportionalforstærkningen er proportional med størrelsen af error. Den har en middel responsrate. Integralforstærkningen er proportional med størrelsen af den akkumulerede error over tid. Det betyder at integralforstærkningen er god til at opnå præcise resultater og er robust over for store udsving over kort tid, som kan opstå på grund af signal-støj. Den har en langsom responsrate og kan medføre oscillation. Integralet af error kan estimeres ved at tage summen af error værdien for hver udregning (hver cyklus). Differentialeforstærkningen er proportional med størrelsen af den momentære ændring i error og har en hurtig responsrate. Den er sensitiv over for signal støj og kan give meget kraftige signaler. Den afledte funktion til error kan estimeres ved at trække error i sidste cyklus fra error i den nuværende cyklus. De konstanter der ganges på de tre error værdier kan udregnes matematisk, eller findes ved at prøve sig frem. Ved at forstå hvordan de forskellige konstanter påvirker robottens respons, og ved at skrive deres individuelle indflydelser ud til en konsol kan man komme med kvalificerede bud på passende værdier. Vores implementering af PID controllere kan ses i calc_angle funktionen i methods.ino. I følgende tabel er forskellige værdier for henholdsvis proportional, integral og differentiale-forstærkning demonstreret grafisk. Figur 3a: Graf over forskellige proportionalforstærkninger. Figuren er en graf med et referencesignal og den resulterende værdi for tre forskellige proportionalitetsforstærkninger. (Wikipedia, 2014) 12

13 Figur 3b: Graf over forskellige integralforstærkninger. Figuren er en graf med et referencesignal og den resulterende værdi for tre forskellige integralforstærkninger. (Wikipedia, 2014) Figur 3c: Graf over forskellige differentialeforstærkning. Figuren er en graf med et referencesignal og den resulterende værdi for tre forskellige differentialforstærkninger. (Wikipedia, 2014) Designvalg I dette afsnit beskrives de beslutninger vi har truffet i forhold til valg af hardware og software samt processtyring. Inden for hardware skal materialet, mekanikken (sensorer, aktuatorer osv.) og processoren vælges, og inden for software skal man beslutte hvilket programmeringssprog og software arkitektur man ønsker at benytte. I forhold til processtyring skal man beslutte hvad man vil arbejde hen imod samt hvordan man vil opnå det. I det følgende vil vores overvejelser for processtyring samt valg af hardware og software blive gennemgået, men generelt kan det siges, at der i så vid udstrækning som muligt arbejdes for at viden, tilegnet gennem dette projekt, er generelt anvendeligt til andre projekter, hvor hardware og software udvikles sammen. Arbejdstilrettelæggelse Denne opgave tager udgangspunkt i udviklingen af en robot-platform og dertilhørende software. Arbejdet er blevet tilrettelagt ud fra funktionelle specifikationer. Vi valgte at arbejde iterativt, hvor projektet udvikles i en række faser, og hvor hver fase påvirker tilrettelæggelsen af den næste. Da det er første gang vi arbejder med robotter, ville det ikke give mening at bruge energi på at lave en detaljeret plan for hele processen, da vi med stor sandsynlighed ville blive nødt til at afvige fra denne plan alligevel. 13

14 Indledningsvis besluttede vi at konstruere en tohjulet balance-robot. Vi definerede nogle funktionaliteter som vi ønskede at konstruere. Disse funktionaliteter var specificeret således at de både kunne op- og ned-skaleres, alt efter hvordan projektet forløb. At få robotten til at holde balancen er centralt for balance-robotten, og var derfor den første funktionalitet vi ønskede at udvikle. Det viste sig at kræve for meget at få den til at holde balancen i forhold til vores kompetencer. Vi valgte derfor at sænke vores ambitionsniveau og bygge en simplere differential drive robot i stedet. Til denne platform ønskede vi at konstruere en robot der kan følge en linje, registrere et objekt på linjen, køre rundt om objektet og finde linjen igen på den anden side. Dette overordnede mål delte vi op i to delmål som vi startede med: at følge en linje og registrere objekter. Hardware overvejelser Materiale Til robottens karosseri har vi brugt 4mm plader af forarbejdet træ af typen high density fiber, som er skåret ud med laserskærer. Vi valgte dette materiale da det er tilgængeligt og tit benyttes i FabLab RUC. Materialet er stærkt, billigt og forholdsvis simpelt at arbejde med og vores indledende prototyper viste at det var tilstrækkeligt til vores behov. Ved hjælp af vektorgrafik-programmet CorelDRAW 3 kan skræddersyede designs skæres på en laserskærer. CorelDRAW gør det nemt at videreudvikle på tidligere iterationer og bruge materiale fra andre eller tidligere projekter. Vores første prototype (som vi sidenhen videreudviklede på) tog udgangspunkt i en robot platform som vi fik af Nicolas Møbius, medarbejder i FabLab RUC (original fil findes i bilag 5). Møbius robot er udviklet til en robot workshop som han har holdt og er en differential drive robot med en robot-arm, som kan følge en linje. Til at holde komponenterne på vores robot sammen blev der benyttet lim-pistol og skruer. De to drivende hjul er belagt med et lag sandpapir for at øge friktionen med underlaget da hjulene på vores tidlige prototyper nemt skred. Figur 4a: Billede af karosseri i vektorgrafik Robottens komponenter blev udviklet i vektor-grafikprogrammet CorelDRAW. Figur 4b: Billede af det udskårne karosseri Ud fra en vektorgrafik fil er robottens karosseri skåret med en laserskærer. Figur 4c: Billede af det samlede karosseri Karosseriet er her i pap og uden elektroniske komponenter

15 Elektronik Til robotten har vi arbejdet med tre forskellige sensor-typer: lysfølsomme resistorer, infrarøde afstandsmålere og ultralyds afstandsmålere, og to forskellige typer aktuatorer: continuous drive motorer, motorer hvor hastighed og retning kan kontrolleres, og servoer, som kan rotere 180 grader og hvis position er kendt. Vi har valgt at arbejde med disse typer elektroniske komponenter fordi de indgår i mange slags robotter og installationer. For eksempel kan man konstruere en robot arm ved hjælp af servoer, infrarøde sensorer kan bruges til at skabe 3D kort af verden og continuous drive motorerne til alle selvkørende robotter. Derudover er alle disse dele nemt tilgængelige I hobbyforretninger på internettet og forholdsvist billige. For eksempel kostede vores robot samlet set omkring 700 kr, en prisoversigt ses i Pris, side 19. Da vi har arbejdet iterativt har vi samlet, skilt ad og ændret robotten mange gange. Vi har derfor forbundet størstedelen af de elektroniske komponenter igennem et breadboard. Breadboards bruges tit til prototyper da de gør det nemt og hurtigt at ændre forbindelser uden at behøve at lodde. Micro Controller Til at styre robotten har vi valgt at bruge en Arduino mikroprocessor fordi det er en alsidig, open-source platform som kan bruges til at styre motorer og modtage data fra sensorer ved hjælp af digitale såvel som analoge signaler. Arduino er en populær platform som benyttes i mange projekter til at løse et bredt spektrum af opgaver. Dette skyldes blandt andet at både udviklingsmiljøet og driverne fungerer på både Windows, Mac og Linux, der er mange offentligt tilgængelige libraries og læringsmateriale, hardwaren såvel som softwaren er open source og sidst men ikke mindst er det en billig platform i forhold til meget af konkurrencen (Torrone, 2011). Der findes flere forskellige Arduino modeller. Arduinos standard- og referencemodel, Arduino UNO, er den mest udbredte, og den som vi benytter i dette projekt. UNO hverken fylder eller vejer særlig meget og nem at montere. Figur 5: Billede af en Arduino Uno 15

16 En Arduino mikroprocessor er en alsidig, open-source platform som kan bruges til at styre motorer og modtage signaler fra sensorer ved hjælp af digitale såvel som analoge signaler. (Arduino.cc, 2014) En svaghed ved Arduino-hardwaren er at den er relativt gammel, og derfor har mindre hukommelse og processorkraft end nogle af de andre mikroprocessorer på markedet. For eksempel har Arduino UNO kun 32 KB hukommelse (Arduino.cc, 2014). Der findes mange standard libraries til Arduino, og det er nemt at lave flere, hvilket Arduino-fælleskabet har gjort. Dette gør det nemt og hurtigt at løse mange problemstillinger. På grund af den store mængde software som er tilgængelig er Arduino stadig meget populær, og et godt reference punkt. (Torrone, 2011) Arduino fungerer godt til mindre projekter, som vores robot, som skal bevæge sig rundt med et par motorer, baseret på input fra nogle sensorer og nogle beregningsmæssigt lette beregninger. Software overvejelser Arduino mikroprocessorer programmeres typisk med Arduinos IDE (integrated development environment). Denne software er gratis og open source (Arduino.cc, 2014). Arduino IDE-platformen kommer med en del kode der kan bruges til at læse sensordata og styre motorer. Derudover er der megen kode som er tilgængelig online. Noget af denne kode er skrevet af firmaer, som for eksempel producenten eller distributøren for et komponent, eller en tredjepart, som for eksempel privatpersoner, som har offentliggjort deres kode. Størstedelen af koden i dette projekt har vi selv skrevet, men det bygger på den kode der kommer med Arduino. Vi har også benyttet noget kode som vi har fundet på internettet, for eksempel er koden til ultralydssensoren tilpasset fra kode som vi fandt på sælgerens hjemmeside. (crcibernetica.com, 2014) Vores endelige kode er baseret på principperne for objekt-orienteret kodning og er blevet opdelt i mindre dele, der gør det nemmere at overskue, fejlfinde og genbruge koden. Arduino IDEen er understøttet af Windows, Mac og Linux og kommer med et library kaldet Wiring 4, som gør det nemmere at sende og modtage fra Arduino boardet. Programmeringssproget Arduino er baseret på C/C++. Selve det grafiske interface er baseret på Processing 5 IDEen. Selvom Processing er implementeret i Java er Arduino IDEen tilrettelagt således at de minder meget om hinanden. IDEen er designet med kunstnere og hobbyister i tankerne, og er derfor designet så den er nem at bruge (Torrone, 2011). For eksempel består et normalt Arduino program af to funktioner, void setup () og void loop (), som bliver kørt henholdsvis én og uendelig mange gange, i stedet for at brugeren selv skal skrive en main () funktion med et loop. Arduino programmer kan fungere selvstendigt, og være begrænset til selve Arduino boardet og dets sensorer og motorer, eller det kan forbindes med en computer eller radio sender og derved sende data frem og tilbage imellem de to systemer (Arduino.cc, Software, 2014). Det er dog ikke muligt at køre et Arduino program uden et Arduino board. I denne opgave ligger vores fokus på at lære robot-programmering at kende. Vores fokus er på at forstå hvordan robotter programmeres, og interaktionen imellem hardware og software. For at få denne forståelse har vi fravalgt robot-byggesæt som Lego Mindstorms som både er dyre (2500 kr. og op) (Lego

17 Mindstorms, 2014) og fordi der er mange erfaringer at gøre sig ved at lave det selv. Når det er sagt, har vi ikke nødvendigvis tænkt os at skrive al koden selv. Så længe vi kan forstå koden, og hvordan den fungerer. Erfaringer Processtyring Da vi startede dette projekt ønskede vi at bygge en tohjulet balance robot. Til dette konstruerede vi to protoyper. Den anden prototype bestod af en ArduIMU V3 (tredjeparts Arduino-board med indbygget gyroskop) og to motorer som vist i følgende figur: Figur 6a: Balancerobotten set fra en vinkel Billede af den balancerobot vi konstruerede i starten af projektet, her set fra en vinkel der viser batteripakken. Figur 6b: Balancerobotten set oppefra Billede af den balancerobot vi konstruerede i starten af projektet, her ses ArduIMUen og tænd sluk kontakten. Vi testede denne hardware platform med et stykke software som var blevet udviklet af Nicolai Møbius, ansat i FabLab RUC, til en anden balance robot. Denne test viste at hardware platformen var tilstrækkelig til at få robotten til at holde balancen. 6 Da vi begyndte at arbejde med softwaren viste det sig dog at det var meget besværligt at modtage sensor data fra ArduIMU en og vi ville være nødt til at benytte store mængder kode som vi ikke ville forstå. Da projektet i høj grad handlede om at lære robot-programmering at kende, var det utilfredsstillende at være afhængig af så meget kode som vi ikke forstod. Derudover var balance-aspektet sværere end forventet. Vi ville være nødt til at bruge megen tid på at finjustere balance-aspektet så koden kunne reagere hurtigt nok til at holde balancen. Vi vurderede at dette ville tage for lang tid i forhold til hvor lidt generel indsigt det ville give os i robot programmering. Vi valgte derfor at konstruere en mere traditionel differential drive robot i stedet. En differential drive robot er ikke nær så krævende da den ikke kræver at koden reagerer inden for et bestem tidsrum. Denne platform gav os også mulighed for at arbejde med flere forskellige sensorer, og ikke blot et gyroskop. Vi kunne anvende flere af de erfaringer vi havde gjort os med balancerobotten, da vi valgte at genbruge motorer, materiale, viden om PID controllere og Arduino platformen (selvom vi skiftede board, programmeres de på samme måde). 6 En demonstration kan ses på: 17

18 At arbejde iterativt var det rette valg for os, da det betød at vi opdagede problemer tidligt i forløbet og kunne justere vores ambitionsniveau derefter. Hardware Robottens karosseri er skåret med en laserskærer i 4mm high density fiber-plader, måler 25x16,5x15 cm og vejer 760 g. Robotten styres af en Arduino Uno mikroprocessor og robot basen er udstyret med to aktive hjul som kan kontrolleres individuelt, samt et passivt hjul der kan rotere frit. Robotten er udstyret med tre infrarøde afstandsmålere, som peger ligeud og 45 til hver side, en ultralyds afstandsmåler som er placeret på en roterbar plade, så den kan foretage målinger i 180 grader. På robottens underside sidder to lysresistorer og en LED, som benyttes til at måle hvor meget lys der bliver reflekteret af underlaget. Ud over disse sensorer har vi monteret en LED til fejlfinding, som blinker så længe Arduinoen kører. Den færdige robot består af to etager som er forbundet med bærende elementer. FIGUR 7: Billede af vores robot På billedet ses vores endelige robot forfra. På den nederste plade sidder de to lysfølsomme resistorer, som peger nedad og gør det muligt for robotten følge en sort linje på gulvet. Bag lysresistorerne sidder motorerne til de to hjul og bag motorerne er Arduino-boardet skruet fast. Bagerst er et roterende hjul. På undersiden af denne plade sidder en batteripakke med fire AA-batterier. Foran lysresistorerne sidder de tre infrarøde sensorer. Sensorerne peger ligeud, og 45 til hver side. De infrarøde sensorer som vi har brugt har en effektiv afstand fra 20 til 150 cm (Datasheet for de infrarøde sensorer: Bilag 1b). For at kunne måle afstanden til objekter som er tættere på end 20 cm, eller som ikke befinder sig lige foran eller 45 grader til en af siderne har vi monteret en ultralydssensor (som kan måle helt ned til 1 cm (Datasheet for ultralydssensoren: Bilag 1c)) på en roterende plade. Pladen er monteret 18

19 således at ultralyds-sensoren måler ud fra robottens omdrejningspunkt; midt imellem de to hjul og roteres af en servo som kan roterer 180 grader. Bagved ultralyds-sensoren sidder breadboardet, som gør det nemt at overskue og ændre forbindelsen mellem Arduino-boardet og dets eksterne komponenter. Bagerst på den øverste plade sidder et 9-volt batteri. Pris En af grundende til at robotter er blevet mere udbredte er at prisen på komponenter er faldet. I følgende har vi udregnet en ca. pris for vores robot. Smådele som HDF-plade, ledninger og skruer er ikke medregnet. Produkt Pris pr. enhed Antal Pris total Pris fundet på $US Arduino UNO Revision 3. 24, ,95 sparkfun.com Infrared sensor SHARP 2Y0A02 F 33 14, ,85 sparkfun.com Ultrasonic Range Finder SDM-IO crcibernetica.com SG-5010 Tower Pro (Servo) Adafruit.com Breadboard 4,95 1 4,95 sparkfun.com Total pris $125,75 Total pris DKK ~700 DKK Til sammenligning kan det siges at for 20 år siden, i 1994, ville en Intel 486SX2 mikroprocessor der er lige så kraftig som den på et Arduino board alene kostede 249$ (Poulson, 2014), hvilket er dobbelt så meget som vores robot. Software Den hardware platform som vi har udviklet har et stort potentiale. Vi har fokuseret på at få robotten til at kunne følge en linje og registrere afstanden til objekter foran den. I følgende afsnit vil dele af koden og udviklingsprocessen blive fremhævet for at illustrere implementering, struktur og erfaringer som vi har gjort os i løbet af projektet. Se [bilag 4] for komplet API og oversigt over hvad de forskellige funktioner og klasser indeholder. Programmets overordnede struktur Softwaredelen af projektet er opbygget efter principperne for objektorienteret programmering og det endelige produkt består af syv filer; en fil til hoved-programmet, en fil til funktioner og fem klasser, en for hver type motor og sensor. RobProg.ino-filen er hoved-programmet, og det program der kalder de øvrige funktioner og hvor de forskellige objekter bliver skabt. Programmet starter med at importere de fem klasser vi har skrevet samt det inkluderede servo bibliotek. Servo biblioteket er et bibliotek der kommer med Arduino IDEen og som benyttes ofte til at kontrollere motorer ved hjælp af digitale signaler. 19

20 Derefter bliver de variabler som ændres ofte initialiseret, det defineres hvilke pins der er forbundet til hvilke komponenter, variabler til PID controlleren defineres, og andre hardware specifikke variabler. Derefter anvendes disse variabler og variabler med standard værdier (værdier man typisk ikke har behov for at ændre) til at initialisere resten af variablerne, blandt andet de objekter der bruges til at holde styr på sensorer og motorer. Kernedelen af programmet finder sted i void loop (). Det er her sensormålingerne bliver taget, og kontrol-signalerne bliver udregnet og sendt til motorerne. De fem klasser vi har skrevet ligger i.h filer, såkaldte header filer. Vi har valgt at skrive hver af klasserne i en header fil, frem for at separere funktionerne til en.cpp fil (C++). Der er ikke nogen praktisk forskel imellem at have sine klasser i en header fil, eller have en header og en C++ fil, ud over hvordan filerne vises. Da vores klasser er relativt korte, mente vi at det var mest overskueligt at holde dem samlet i én fil. Constructors i Arduino Da vi skrev klasserne til sensorerne og motorerne, stødte vi på nogle problemer når vi ønskede at initialisere vores objekter. Til at skrive klasserne brugte vi en guide, Writing a Library for Arduino (Arduino.cc, LibraryTutorial, 2014). I denne guide gennemgås hvordan et bibliotek skrives ved hjælp af et eksempel på et bibliotek. I biblioteket er der lavet to funktioner der kan få en LED til at blinke, som kan bruges til at morse. I denne guide vises et kort eksempel: Figur 8: Eksempel fra guiden Writing a Library for Arduino Eksemplet viser en mulig implementering af det library som blev skrevet i guiden Writing a Library for Arduino. I dette eksempel initieres et Morse objekt med navnet morse og skriver SOS med morsekode. Selvom vi ikke skrev biblioteker søgte vi inspiration i denne guide, da det at skrive klasser minder meget om. Eksemplet viser en mulig implementering af det library som blev skrevet i guiden Writing a Library for Arduino. I dette eksempel initieres et Morse objekt med navnet morse og skriver SOS med morsekode. På linje 3, hvor morse objektet initialiseres gives tallet 13 som argument. Denne værdi benyttes i constructoren og referer hvilken pin LEDen der skal blinke sidder på. Vi testede koden og tallet 13 blev benyttet i constructoren, som man ville forvente. Efter at have set dette eksempel skrev vi vores egne constructors ud fra samme princip. Vores kode fungerede ikke som forventet. Efter at have undersøgt problemet på internettet fandt vi en diskussion på Arduino.cc s forum der diskuterede dette problem. Det viste sig at i Arduino kan man ikke kontrollerer hvornår constructoren bliver kaldt, hvilket betyder at den ikke kan tage imod argumenter fra andre 20

21 klasser. For at omgå dette problem bruger man i Arduino ofte en begin funktion, som overtager constructorens rolle, og som initialiserer variablerne i runtime. Der skal stadig være en constructor, men i vores tilfælde er de alle tomme. Test og verificering Når man skriver kode er det vigtigt at sikre at koden gør som forventet. Sådanne test afslører ofte problemer med koden, som så skal fejlfindes. Selvom målet med fejlfindingen for projekter hvor hardware og software udvikles sammen er det samme som for rene software projekter er det vores erfaring at processen bliver mere kompliceret af interaktionen mellem software og hardware. I løbet af dette projekt gjorde vi os flere erfaringer omkring disse forskelle som vil blive gennemgået i følgende afsnit. Da vi har skrevet vores kode objekt orienteret, er koden naturligt delt op i mindre dele, som kan testes hver for sig. Denne praksis fulgte vi også under test af hardwaren. Til at teste de analoge signaler fra lysresistorerne og de infrarøde sensorer brugte vi et program, kaldet Guino, til at visualisere sensor målingerne. Programmet er udviklet af Mads Hobye, ansat i FabLab RUC, og offentliggjort på instructables.com (Hobye, 2014) Figur 9: Billede af Guino interfacen Billedet viser Guino s interface, med knapper til venstre, to sliders i midten of en sinuskurve til højre. Sinuskurven er sensor-input. (Hobye, 2014) Vi brugte programmet til at sikre at signalerne, som modtages fra sensorerne, opfører sig som forventet, for eksempel at signalstyrken fra de infrarøde sensorer afhænger af afstanden til nærmeste objekt. Vi brugte også Guino programmet til at visualisere signalet, for at se effekten af sensorstøj. Signal behandling Guino-programmet viste at særligt de infrarøde sensorer havde meget signal støj, så meget at det var tydeligt at vi blev nødt til at lave en form for signal behandling. Signal behandling er et stort område i sig selv, og vil ikke blive behandlet i dybden i denne opgave. Da signalstøjen var forholdsvis jævn vurderede vi, at det at tage gennemsnittet af de sidste X antal målinger, ville være tilstrækkeligt til at gøre signalet brugbart. Indledningsvis skrev vi en sensor signal klasse. Klassen indeholdt et array af sensormålinger, hvor den ældste sensor måling blev overskrevet når der blev tilføjet en ny måling. Vi havde en funktion der kunne udregne og returnere gennemsnittet af værdierne. På denne måde havde vi et gennemsnit som løbende blev opdateret. Denne løsning fungerede som forventet og udregnede korrekt et gennemsnit. Da vi talte 21

22 med en ansat i FabLab RUC påpegede han at der findes en anden, og mere elegant løsning til at udregne et løbende gennemsnit: Figur 10: Kode udsnit fra methods.ino funktion til udregning af løbende gennemsnit running_average funktionen udregner et løbende gennemsnit ved at reducere det gamle gennemsnit med en procentdel, og vægte den nye måling derefter. Jo større multiplier værdien er, jo mindre vægt har hver enkelt måling. Ved at reducere det gamle gennemsnit med en procentdel, og vægte den nye måling derefter kan man udregne et løbende gennemsnit, uden at behøve at gemme værdierne individuelt. Denne metode er mere effektiv og nemmere at overskue, end vores oprindelige løsning, selvom resultaterne er ens. Selvom vi ikke kunne se nogen forskel i ydeevne imellem de to metoder er det altid en god ide at skrive koden så effektiv og simpel som muligt, særligt når man har så begrænset processor kraft og hukommelse som man har på en Arduino, og når systemet afhænger af at sensormålinger og behandling bliver udført i real time, som man er med mobile robotter. Hardware eller software løsning En komplikation der kan dukke op når man udvikler hardware og software sammen, er at finde ud af hvorvidt et problem er et hardware eller et software problem. Da vi havde verificeret at lysresistorerne og PID controlleren overordnet fungerede som de skulle, var vi nødt til at kalibrere PID-forstærkningerne, så robotten faktisk kunne følge en linje. På trods af megen arbejde med kalibrering, og grundige test af både lys resistorerne og PID controlleren forblev robottens præstation utilfredsstillende. Tilsyneladende vekslede robotten imellem at reagere for svagt og for kraftigt til linjens hældning, typiske problemer ved forkerte PID forstærkninger. Efter lang tid opdagede vi at robottens aktive hjul ofte lavede små hjulspind, ikke noget man ville forvente som resultat af forkerte PID forstærkninger. Ved nærmere inspektion lagde vi mærke til, at det frit roterende hjul nogen gange stødte imod kanten af stregen, som var lavet af tape, med siden til, i stedet for lige på. Dette medførte at robotten til tider blev bremset, i stedet for blot at køre efter PID controllerens kontrol signaler. Problemet skyldes at integrale-gainet voksede uhensigtsmæssigt mens robotten stod stille. Ved at forskyde det frit roterende hjul, så det ikke længere var placeret lige under omdrejningspunktet, kunne vi eliminere problemet, og vi fik nu endelig mulighed for at kalibrere PID forstærkningerne. I samspillet mellem hardware og software kan det være svært at lokalisere årsagen til et problem. Små fejl kan have store konsekvenser, og når man introducerer et hardware-komponent, er der flere komponenter og flere interaktioner hvor sådanne fejl kan opstå, og det er ikke altid tydeligt hvad et problem skyldes. 22

23 Fejlfinding I rene software projekter ændrer et stykke kodes funktionalitet sig ikke med mindre man ændrer i koden, eller i noget kode som den afhænger af. Det vil sige at, når man har verificeret at et stykke kode virker, kan man med en vis sikkerhed regne med at det vil fortsætte med at virke, hvis det ikke bliver ændret i, og derfor ikke behøver verificeres igen. I starten af processen arbejdede vi ud fra denne antagelse. Vi havde implementeret og verificeret de afstandsmålinger vi fik fra de infrarøde sensorer og skulle nu anvende disse målinger til at dreje ultralydssensoren. Systemet opførte sig ikke helt som forventet og vi kunne ikke finde noget sted i den nye kode der kunne forklare denne opførsel. Efter nogen tid besluttede vi at teste de infrarøde sensorer, som vi egentlig var overbevist virkede da vi havde verificeret dem. Det viste sig at en af de infrarøde sensorers lodning på printpladen var gået op, således at der til tider var løs forbindelse, hvilket resulterede i et fejlsignal. Dette resulterede i en vigtig erfaring som påvirkede vores videre arbejde: Hardware kan ændre sig uden man bevidst har gjort noget ved det. Når hardware, tilsyneladende spontant, kan gå i stykker eller ændre funktionalitet er man nødt til at have en endnu mere stringent test- og fejlfindings-procedure, hvor selv elementer der virkede for nylig kan være årsag til komplikationer. Segmenteret vs samlet test Vi havde struktureret vores arbejde ud fra objekt-orienterede principper om at opdele projektet i mindre dele, som er nemmere at overskue og udvikle, som så samles til sidst. Da vi testede afstandsmålingerne og linjefølgningen sammen, opførte robotten sig igen på uforudset vis. Robotten havde store vanskeligheder med at følge linjen og kørte mere ujævnt end før. Vi mistænkte at den samlede byrde på mikroprocessoren var blevet for stort, da det lignede at robotten ikke kunne følge med de signaler som den modtog. For at teste denne hypotese installerede vi en LED som på skift tændte og slukkede hver gang en cyklus i loop funktionen blev gennemført. Det viste sig at der ikke var markant forskel imellem tiden hver cyklus tog, men at nogle gange når alle sensorer og motorer var aktive på én gang var strømforbruget for højt, og Arduino-boardet gik ud. Selvom både afstandsmålingerne og linjefølgningsdelene fungerede hver for sig var det ikke muligt at køre dem på samme tid. Vi havde valgt at anvende to strømforsyninger for at undgå dette problem, men det viste sig, ikke at være tilstrækkeligt. Dette problem kunne modvirkes, enten i softwaren, ved at begrænse signalerne man sender til motorerne, så de ikke pludseligt trækker megen strøm, eller ved at organisere strømforsyningerne anderledes, så strømforsyningen aldrig blev overbelastet. Odometri Odometri er at bruge data fra bevægelses-sensorer til at finde ændringer i position over tid. I den endelige version af robotten blev odometri-komponentet valgt fra. Dette skyldes både tidsbegrænsninger og selve Arduino-boardet. De sensorer som vi havde tænkt os at benytte til at måle hjulenes rotation kræver to analoge pins pr. hjul. Arduino-boardet har 6 analoge pins, hvor af 5 af dem allerede er i brug til de øvrige sensorer. Vi valgte i stedet at fokusere på afstandsbedømmelse og mobilitet. Som konsekvens af dette fravalg er der ikke nogen god måde at finde hjulenes hastighed. Der er derfor ikke nogen måde at udregne en error værdi som kan bruges til at justere hjulenes hastighed, eller nogen måde at estimerer robottens position eller orientering. Odometrien var en del af den oprindelige plan, og størstedelen af koden til den er allerede skrevet. 23

24 Fravalget af odometri medførte flere forskellige problematikker. Den mekanisk modstand i vores to motorer er forskellig. Det betyder, at selvom det samme signal sendes til begge motorer, er det ikke muligt at få robotten til at køre ligeud (bortset fra at lade den følge en lige linje på gulvet). Hvis odometrien havde været implementeret, kunne man bruge den til at kalibrere motorerne ud fra hjulenes omdrejningshastighed. En anden konsekvens af den manglende odometri er, at vores kontrol-signaler bliver arbitrære. I følgende figur, figur 11 ses koden der omregner unicycle hastighederne, den lineære og angulære hastighed, til hjulhastighederne: Figur 11: Kode-udklip uni_2_diff-funktionen fra methods.ino filen Denne funktion benyttes til at omregne unicycle hastigheder, den lineære og angulære hastighed, til hjulhastigheder, som sendes som kontrol signal til hjulene. Udregningerne i denne kode afhænger af hjulenes radius (R) og afstanden mellem hjulene (L). Omregningen fra unicycle-hastighederne til hjulhastighederne relaterer sig til robottens konstruktion. Men da kontrol-signalerne, som sendes til hjulene, er baseret på motorernes elektromekaniske modstand, og ikke er i meter per sekund (eller noget tilsvarende) er unicycle-hastighederne nødt til at være arbitrære, for at robotten opfører sig korrekt. I følgende afsnit vil vi beskrive dokumentationen for vores arbejde og software. Dokumentation Der er rig mulighed for at genbruge eller arbejde videre på det arbejde vi har udført i forbindelse med dette projekt. Det materiale vi har udviklet er frigivet til det offentlige rum og kan frit genanvendes såfremt de rette ophavsmænd akkrediteres. Når projektet er gennemført vil hardwaren og software overgå til FabLab RUC som tak for hjælpen. Karosseri Tegningerne som blev brugt til at skære robottens karosseri er inkluderet som henholdsvis bilag 2a og 2b, både i CorelDRAWs fil format (.cdr) og som en HPGL Plotter fil (.plt). At kunne drage nytte af disse filer kræver et program der kan anvende mindst en af disse fil formater, og en laserskærer. Begge dele er tilgængelige i FabLab RUC. Elektronik De elektriske komponenter vi har anvendt og deres konfiguration er blevet gennemgået tidligere i rapporten. De tekniske specifikationer kan findes i bilag 1a-d. 24

Programmering C Eksamensprojekt. Lavet af Suayb Köse & Nikolaj Egholk Jakobsen

Programmering C Eksamensprojekt. Lavet af Suayb Köse & Nikolaj Egholk Jakobsen Programmering C Eksamensprojekt Lavet af Suayb Köse & Nikolaj Egholk Jakobsen Indledning Analyse Læring er en svær størrelse. Der er hele tiden fokus fra politikerne på, hvordan de danske skoleelever kan

Læs mere

Arduino Programmering

Arduino Programmering Microcontroller, Arduino I teknologi skal vi lære at lave programmer til uc for at have muligheden til eksamen at kunne lave intelligente el-produkter. I hvert fald skal vi have set mulighederne, og forstået

Læs mere

Arduinostyret klimaanlæg Afsluttende projekt informationsteknologi B

Arduinostyret klimaanlæg Afsluttende projekt informationsteknologi B Arduinostyret klimaanlæg Afsluttende projekt informationsteknologi B Udarbejdet af: Mathias R W Sørensen, klasse 3.4 Udleveringsdato: 02-03-2012 Afleveringsdato: 11-05-2012 IT-vejleder: Karl G. Bjarnason

Læs mere

Indholdsfortegnelse Indledning... 2 Projektbeskrivelse... 2 Dette bruger vi i projektet... 2 Komponenter... 2 Software... 2 Kalibrering...

Indholdsfortegnelse Indledning... 2 Projektbeskrivelse... 2 Dette bruger vi i projektet... 2 Komponenter... 2 Software... 2 Kalibrering... Indholdsfortegnelse Indledning... 2 Projektbeskrivelse... 2 Dette bruger vi i projektet... 2 Komponenter... 2 Software... 2 Kalibrering... 3 Kildekoden... 4 Variabler... 4 Setup... 4 Loop... 4 Indledning

Læs mere

Microcontroller, Arduino

Microcontroller, Arduino Microcontroller, Arduino Programmerbar elektronik. uc Vi skal lære at lave programmer til uc for at kunne lave el-produkter. Forstå princippet i programmering af en uc og se mulighederne. Programmeringen

Læs mere

Automatisering Af Hverdagen

Automatisering Af Hverdagen Automatisering Af Hverdagen Programmering - Eksamensopgave 10-05-2011 Roskilde Tekniske Gymnasium (Kl. 3,3m) Mads Christiansen & Tobias Hjelholt Svendsen 2 Automatisering Af Hverdagen Indhold Introduktion:...

Læs mere

Demonstration af transitmetoden

Demonstration af transitmetoden Demonstration af transitmetoden Introduktion: Det kan være svært at observere exoplaneter direkte, derfor benytter man sig i langt højere grad af transitmetoden: Her udnyttes at exoplaneter der bevæger

Læs mere

Spil Rapport. Spil lavet i GameMaker. Kevin, Mads og Thor 03-02-2011

Spil Rapport. Spil lavet i GameMaker. Kevin, Mads og Thor 03-02-2011 Spil Rapport Spil lavet i GameMaker Kevin, Mads og Thor 03-02-2011 Indholdsfortegnelse Indledning... 2 HCI... 2 Planlægning / Elementær systemudvikling... 2 Kravspecifikationer... 4 Spil beskrivelse...

Læs mere

ALGORITMER OG DATA SOM BAGGRUND FOR FORUDSIGELSER 8. KLASSE. Udfordring

ALGORITMER OG DATA SOM BAGGRUND FOR FORUDSIGELSER 8. KLASSE. Udfordring ALGORITMER OG DATA SOM BAGGRUND FOR FORUDSIGELSER 8. KLASSE Udfordring INDHOLDSFORTEGNELSE 1. Forløbsbeskrivelse... 3 1.1 Overordnet beskrivelse tre sammenhængende forløb... 3 1.2 Resume... 5 1.3 Rammer

Læs mere

Michael Jokil 11-05-2012

Michael Jokil 11-05-2012 HTX, RTG Det skrå kast Informationsteknologi B Michael Jokil 11-05-2012 Indholdsfortegnelse Indledning... 3 Teori... 3 Kravspecifikationer... 4 Design... 4 Funktionalitet... 4 Brugerflade... 4 Implementering...

Læs mere

Arduinostyret klimaanlæg Afsluttende projekt programmering C

Arduinostyret klimaanlæg Afsluttende projekt programmering C Arduinostyret klimaanlæg Afsluttende projekt programmering C Udarbejdet af: Mathias R W Sørensen, klasse 3.4 Udleverings-dato: 02-03-2012 Afleverings-dato: 11-05-2012 Programmeringvejleder: Karl G. Bjarnason

Læs mere

Fra Computer til Virkelighed. TPE-kursus Elektroniske Systemer P1

Fra Computer til Virkelighed. TPE-kursus Elektroniske Systemer P1 Fra Computer til Virkelighed TPE-kursus Elektroniske Systemer P1 Fra Computer til Virkelighed En kort introduktion til kurset Systems Engineering Projektfaser Opsamling og opgave Om kurset Mål: at I lærer

Læs mere

Microcontroller, Arduino

Microcontroller, Arduino Microcontroller, Arduino Kompendium til Arduino-programmering i Teknologi. Vi skal lære at lave programmer til uc for at kunne lave el-produkter. Vi skal forstå princippet i programmering af en uc og se

Læs mere

CANSAT & ARDUINO step by step

CANSAT & ARDUINO step by step CANSAT & ARDUINO step by step Jens Dalsgaard Nielsen SATLAB Aalborg Universitet Danmark jdn@space.aau.dk 1/45 Arduino CANSAT - MÅL At måle ved hjælp af sensor temperatur, tryk, acceleration, CO2, lys,...

Læs mere

Andreas Lauge V. Hansen klasse 3.3t Roskilde HTX

Andreas Lauge V. Hansen klasse 3.3t Roskilde HTX IT -Eksamen Andreas Lauge V. Hansen klasse 3.3t Roskilde HTX [Vælg en dato] Indhold Indledning... 2 Teori... 3 Hvorfor dette design... 4 Produktet... 4 Test og afprøvning... 9 Konklusion... 10 Indledning

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2018 Projekt, del II Institut for matematik og datalogi Syddansk Universitet 20. marts, 2019 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

I det kommende afsnit vil vi løbende komme ind på de enkelte resultater og samtidig komme med bud på, hvordan disse kunne løses i fremtiden.

I det kommende afsnit vil vi løbende komme ind på de enkelte resultater og samtidig komme med bud på, hvordan disse kunne løses i fremtiden. Opsummeret Feedback Introduktion I dette dokument vil vi opsummere de mest relevante resultater, der kom fra begge de afholdte workshops. De mest relevante resultater var dem, der igennem begge workshops

Læs mere

Kom godt i gang med Mini Bots fra

Kom godt i gang med Mini Bots fra Kom godt i gang med Mini Bots fra Indholdsfortegnelse Generel Information... 3 Elektricitet... 3 Robotter, kunstige mennesker?...3 Forklaring af komponenter... 4 Robot-byggesættet inderholder følgende:...4

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2018 Projekt, del II Institut for matematik og datalogi Syddansk Universitet 13. marts, 2018 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

LEGO MINDSTORMS Education EV3

LEGO MINDSTORMS Education EV3 LEGO MINDSTORMS Education EV3 Fremtiden tilhører de kreative πr ROBOTTER OG IT PROBLEMLØSNING KREATIVITET SAMARBEJDE EV3 en evolution af MINDSTORMS Education! LEGO MINDSTORMS Education har bevist, at det

Læs mere

Klasse 1.4 Michael Jokil 03-05-2010

Klasse 1.4 Michael Jokil 03-05-2010 HTX I ROSKILDE Afsluttende opgave Kommunikation og IT Klasse 1.4 Michael Jokil 03-05-2010 Indholdsfortegnelse Indledning... 3 Formål... 3 Planlægning... 4 Kommunikationsplan... 4 Kanylemodellen... 4 Teknisk

Læs mere

Undervisningsbeskrivelse

Undervisningsbeskrivelse Undervisningsbeskrivelse Programmering C ved mst Termin Juni 117 Institution Uddannelse Fag og niveau Lærer Hold Erhvervsskolerne Aars hhx Programmering C Michael Stenner (mst) 2-3g16 pro Forløbsoversigt

Læs mere

Informatik C robotter

Informatik C robotter Informatik C robotter Robotter 1. Præsentation af Fable-robotten og indledende øvelser. Robotter 2. Brainstorm på anvendelser af robotter. Udarbejdelse af cases+userstories i grp. Robotter 3. Udarbejdelse

Læs mere

Fremtidens kassesystem

Fremtidens kassesystem Fremtidens kassesystem Gør hverdagen nemmere, og giver et smil på læben. Fremtidens kassesystem Dette projekt er lavet af Emil Toft, Thomas Gandrup Sørensen & Omran El-Habet (9. klasse, Antvorskovskole).

Læs mere

IT opgave. Informationsteknologi B. Vejleder: Karl. Navn: Devran Kücükyildiz. Klasse: 2,4

IT opgave. Informationsteknologi B. Vejleder: Karl. Navn: Devran Kücükyildiz. Klasse: 2,4 IT opgave Informationsteknologi B Vejleder: Karl Navn: Devran Kücükyildiz Klasse: 2,4 Dato:03-03-2009 1 Indholdsfortegnelse 1. Indledning... 3 2. Planlægning... 3 Kommunikationsplanlægning... 3 Problemstillingen...

Læs mere

Fable Kom godt i gang

Fable Kom godt i gang Fable Kom godt i gang Vers. 1.3.1 Opdateret: 29-08-2018 Indholdsfortegnelse 1. Installer programmet 3 2. Pak robotten ud 5 3. I gang med at programmere 6 4. Programmér Fable til at køre fra 90 til -90

Læs mere

ANALOG vs DIGITAL. figur 1: fotografi af en blyantsstreg. figur 2: en linje beskrevet som formel er omsat til pixels

ANALOG vs DIGITAL. figur 1: fotografi af en blyantsstreg. figur 2: en linje beskrevet som formel er omsat til pixels ANALOG vs DIGITAL Ordet digitalt bliver brugt ofte indenfor skitsering. Definitionen af digitalt er en elektronisk teknologi der genererer, gemmer, og processerer data ved at benytte to tilstande: positiv

Læs mere

Apparatur: 1 EV3 startkasse, målebånd, sort bred lærredstape, oplader, kan benyttes som passer, kridt, plader til at lave bakker med, niveauborde.

Apparatur: 1 EV3 startkasse, målebånd, sort bred lærredstape, oplader, kan benyttes som passer, kridt, plader til at lave bakker med, niveauborde. Lego Mindstorms Education EV3 Projektarbejde med Lego Mindstorms version EV3. til Windows 7og 8 og Mac Apparatur: 1 EV3 startkasse, målebånd, sort bred lærredstape, oplader, kan benyttes som passer, kridt,

Læs mere

AGV Kursus August 1999

AGV Kursus August 1999 AGV Kursus August 1999 Dato: 26.08.99 Morten Nielsen Daniel Grolin Michael Krag Indledning: Princippet bag en AGV (Autonomous Guided Vehicle) er at få et køretøj til at bevæge sig rundt i nogle omgivelser,

Læs mere

Lærevejledning. - en introduktion til maskinarkitektur. faraz@butt.dk Faraz Butt mads@danquah.dk Mads Danquah doktor@dyregod.dk Ulf Holm Nielsen

Lærevejledning. - en introduktion til maskinarkitektur. faraz@butt.dk Faraz Butt mads@danquah.dk Mads Danquah doktor@dyregod.dk Ulf Holm Nielsen Lærevejledning - en introduktion til maskinarkitektur faraz@butt.dk Faraz Butt mads@danquah.dk Mads Danquah doktor@dyregod.dk Ulf Holm Nielsen Roskilde Universitetscenter Naturvidenskabelig Basisuddannelse

Læs mere

Hukommelsesspil. Introduktion. Scratch

Hukommelsesspil. Introduktion. Scratch Scratch 2 Hukommelsesspil All Code Clubs must be registered. By registering your club we can measure our impact, and we can continue to provide free resources that help children learn to code. You can

Læs mere

Fable Kom godt i gang

Fable Kom godt i gang Fable Kom godt i gang Opdateret: 26-03-2018 Indholdsfortegnelse 1. Først skal du installere programmet på din computer 3 2. Når programmet er installeret er du klar til at pakke robotten ud 4 3. Nu er

Læs mere

Kom godt i gang med Fable-robotten

Kom godt i gang med Fable-robotten Kom godt i gang med Fable-robotten 1. Først skal du installere programmet på din computer. Gå ind på shaperobotics.com og under support vælger du download: Her vælger du, under PC App om du kører Windows

Læs mere

Undervisningsbeskrivelse

Undervisningsbeskrivelse Undervisningsbeskrivelse Stamoplysninger til brug ved prøver til gymnasiale uddannelser Termin Institution Uddannelse Fag og niveau Lærer(e) Hold Termin hvori undervisningen afsluttes: maj-juni 2014 HTX

Læs mere

Overvågningskamera. ~Af Svend, Valdemar og Frederik~

Overvågningskamera. ~Af Svend, Valdemar og Frederik~ Lavet af Svend, Valdemar og Frederik 2.3 HTX - Roskilde Overvågningskamera ~Af Svend, Valdemar og Frederik~ I dette forløb har vi arbejdet med overvågningskameraer. Det handlede om at lære, hvordan et

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2019 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 27. februar, 2019 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

Så har jeg boret huller i aluminiumsprofilen, og boret den fast i den nederste MDF-plade.

Så har jeg boret huller i aluminiumsprofilen, og boret den fast i den nederste MDF-plade. Jeg har altid bøjet en del i akryl, og altid brugt en varmluftblæser til formålet. Det var hvad jeg havde til rådighed og fungerede fint når man først har fået lidt erfaring med det. Man kan så købe en

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2016 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 29. februar, 2016 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

Pædagogisk vejledning til. Materialesæt. Sphero. http://via.mitcfu.dk/99872760

Pædagogisk vejledning til. Materialesæt. Sphero. http://via.mitcfu.dk/99872760 Pædagogisk vejledning til Materialesæt Sphero http://via.mitcfu.dk/99872760 Pædagogisk vejledning til materialesættet Sphero Materialesættet kan lånes hos VIA Center for Undervisningsmidler og evt. hos

Læs mere

Hassansalem.dk/delpin User: admin Pass: admin BACKEND

Hassansalem.dk/delpin User: admin Pass: admin BACKEND Hassansalem.dk/delpin User: admin Pass: admin BACKEND 1/10 Indledning Dette projekt er den afsluttende del af web udvikling studiet på Erhvervs Lillebælt 1. semester. Projektet er udarbejdet med Del-pin

Læs mere

MAS Trappe Robot. Programmering af Robotter og andre Fysiske Enheder University of Southern Denmark

MAS Trappe Robot. Programmering af Robotter og andre Fysiske Enheder University of Southern Denmark MAS Trappe Robot Programmering af Robotter og andre Fysiske Enheder Anders Jensen (Andej12@student.sdu.dk) Rasmus Jensen (Raje212@student.sdu.dk) Jacob Lohse Hansen (Jacoh12@student.sdu.dk) Julia Højgaard

Læs mere

Svendeprøve Projekt Tyveri alarm

Svendeprøve Projekt Tyveri alarm Svendeprøve Projekt Tyveri alarm Påbegyndt.: 8/2-1999 Afleveret.: 4/3-1999 Projektet er lavet af.: Kasper Kirkeby Brian Andersen Thomas Bojer Nielsen Søren Vang Jørgensen Indholds fortegnelse 1. INDLEDNING...3

Læs mere

J. Christian Andersen DTU Electrical Engineering Automation and Control 326/008. DTU Electrical Engineering, Technical University of Denmark

J. Christian Andersen DTU Electrical Engineering Automation and Control 326/008. DTU Electrical Engineering, Technical University of Denmark J. Christian Andersen DTU Electrical Engineering Automation and Control 326/008 1 31/10/17 Reguleringsmiraklet Hvad er en regulator?? 31/10/17 Hvad er en regulator? Noget der styrer eller sikrer at en

Læs mere

Det skrå kast, en simulation

Det skrå kast, en simulation Det skrå kast, en simulation Oplæg skrevet af Bartlomiej Rohard Warszawski den 5.november 29 Formål Eleven skal lave et program i Python, der udfører en simpel simulation af acceleration, hastighed, position,

Læs mere

Software Dokumentation

Software Dokumentation Software Dokumentation Jan Boddum Larsen Teknologi B og A på HTX Dokumentation af software i Teknologi I samfundet sker der en bevægelse mod mere digitale løsninger i teknologi. Det betyder at software

Læs mere

AFSLUTTENDE PROJEKT KOM/IT

AFSLUTTENDE PROJEKT KOM/IT 5/5-2017 AFSLUTTENDE PROJEKT KOM/IT Daniel & Frederik Klasse 1.1 Indledning Vi startede med at få valget stillet om vi ville lave noget med e-learning, databehandling og præsentation eller vi kunne lave

Læs mere

Høvdingebold. Introduktion. Scratch

Høvdingebold. Introduktion. Scratch Scratch 2 Høvdingebold All Code Clubs must be registered. By registering your club we can measure our impact, and we can continue to provide free resources that help children learn to code. You can register

Læs mere

Guide til din computer

Guide til din computer Guide til din computer Computerens anatomi forklaret på et nemt niveau Produkt fremstillet af Nicolas Corydon Petersen, & fra Roskilde Tekniske Gymnasium, kommunikation & IT, år 2014 klasse 1.2 12-03-2014.

Læs mere

Byg EN HULE LAMPE VARIGHED: LANGT FORLØB

Byg EN HULE LAMPE VARIGHED: LANGT FORLØB VARIGHED: LANGT FORLØB Byg EN HULE LAMPE Byg EN HULE LAMPE Til læreren Varighed: Langt forløb Tidsestimat: Syv dobbeltlektioner Dine elever i 5., 6. og 7. klasse kan i et langt forløb designe og bygge

Læs mere

Test af It-komponent

Test af It-komponent Test af It-komponent I programmeringssproget Java Programmet Login service Elev: Mads Funch Klasse 2.4 Mat, It, Programmering Skole: Roskilde Tekniske Gymnasium HTX Underviser: Karl Dato: 31-08-2016 Side

Læs mere

CANSAT & ARDUINO step by step

CANSAT & ARDUINO step by step CANSAT & ARDUINO step by step Jens Dalsgaard Nielsen SATLAB Aalborg Universitet Danmark jdn@space.aau.dk 1/51 Arduino CANSAT - MÅL At måle ved hjælp af sensor temperatur, tryk, acceleration, CO2, lys,...

Læs mere

The Incredible Code Machine med Swift Playgrounds

The Incredible Code Machine med Swift Playgrounds The Incredible Code Machine med Swift Playgrounds Guide for vejledere The Incredible Code Machine med Swift Playgrounds Guide for vejledere 1 Velkommen Du skal bruge Afhold dit eget EU Code Week-arrangement

Læs mere

Læringsprogram. Christian Hjortshøj, Bjarke Sørensen og Asger Hansen Vejleder: Karl G Bjarnason Fag: Programmering Klasse 3.4

Læringsprogram. Christian Hjortshøj, Bjarke Sørensen og Asger Hansen Vejleder: Karl G Bjarnason Fag: Programmering Klasse 3.4 Læringsprogram Christian Hjortshøj, Bjarke Sørensen og Asger Hansen Vejleder: Karl G Bjarnason Fag: Programmering Klasse 3.4 R o s k i l d e T e k n i s k e G y m n a s i u m Indholdsfortegnelse FORMÅL...

Læs mere

Computerspil. Hangman. Stefan Harding, Thomas Bork, Bertram Olsen, Nicklas Thyssen og Ulrik Larsen Roskilde Tekniske Gymnasium.

Computerspil. Hangman. Stefan Harding, Thomas Bork, Bertram Olsen, Nicklas Thyssen og Ulrik Larsen Roskilde Tekniske Gymnasium. 10-02-2015 Computerspil Hangman Stefan Harding, Thomas Bork, Bertram Olsen, Nicklas Thyssen og Ulrik Larsen Roskilde Tekniske Gymnasium. Kom/it c Indhold Intro... 2 Indledende aktivitet... 2 Kommunikations

Læs mere

Computerens - Anatomi

Computerens - Anatomi 2014 Computerens - Anatomi Rapporten er udarbejdet af Andreas og Ali Vejleder Karl G Bjarnason Indholdsfortegnelse Formål... 2 Indledning... 2 Case... 3 Design... 3 Skitser... 4 Planlægning... 5 Kravsspecifikation...

Læs mere

Målet for disse slides er at diskutere nogle metoder til at gemme og hente data effektivt.

Målet for disse slides er at diskutere nogle metoder til at gemme og hente data effektivt. Merging og hashing Mål Målet for disse slides er at diskutere nogle metoder til at gemme og hente data effektivt. Dette emne er et uddrag af kurset DM507 Algoritmer og datastrukturer (2. semester). Mål

Læs mere

Åbenhed i online uddannelser

Åbenhed i online uddannelser Åbenhed i online uddannelser Christian Dalsgaard (cdalsgaard@tdm.au.dk) Center for Undervisningsudvikling og Digitale Medier Aarhus Universitet Formål Hvad er de pædagogiske og uddannelsesmæssige muligheder

Læs mere

HTX, RTG. Rumlige Figurer. Matematik og programmering

HTX, RTG. Rumlige Figurer. Matematik og programmering HTX, RTG Rumlige Figurer Matematik og programmering Vejledere: Jørn Christian Bendtsen og Karl G. Bjarnason Morten Bo Kofoed Nielsen & Michael Jokil 10-10-2011 In this assignment we have been working with

Læs mere

El kredsløb Undervisningsforløb til Natur/Teknik

El kredsløb Undervisningsforløb til Natur/Teknik El kredsløb Undervisningsforløb til Natur/Teknik Side 1 af 25 Første lektion ca. 90 min. Undervisningsrummet Træningsrummet Studierummet Som indledning tales der med eleverne om el/strøm Se punkt 1 i vejledning

Læs mere

Design og funktionel prototype

Design og funktionel prototype Design og funktionel prototype 2.1) Minus scenarie Der bliver sendt nye billeder til rammen og Hans ønsker at se billederne, men billederne rotere for langsomt så Hans går op og bruger touch funktionen

Læs mere

Datatekniker med programmering som speciale H5

Datatekniker med programmering som speciale H5 Datatekniker med programmering som speciale H5 H5 består af et selvstændigt projekt som du definerer. Styringen af projektet er i centrum her, og ikke selve softwaren. H5 varer ti uger bestående af ni

Læs mere

Studieretningsprojekter i machine learning

Studieretningsprojekter i machine learning i machine learning 1 Introduktion Machine learning (ml) er et område indenfor kunstig intelligens, der beskæftiger sig med at konstruere programmer, der kan kan lære fra data. Tanken er at give en computer

Læs mere

Hvad skal du vide for at bygge din egen computer?

Hvad skal du vide for at bygge din egen computer? Hvad skal du vide for at bygge din egen computer? Kender du alle de her dele og hvad de gør godt for? Er du mellem 11 og 16 år, og tænker på at sammensætte din egen computer? Så er denne her guide lige

Læs mere

Udvikling af hardware prototyper Introduktion øvelser Region Midtjylland, Aarhus,

Udvikling af hardware prototyper Introduktion øvelser Region Midtjylland, Aarhus, Udvikling af hardware prototyper Introduktion øvelser Region Midtjylland, Aarhus, 15.08.2019 Physical.io, 2019 1 Udvikling af hardware prototyper Intro Physical.io, 2019 2 Videoer, øvelser m.m. på http://physical.io/rm

Læs mere

Undervisningsbeskrivelse

Undervisningsbeskrivelse Undervisningsbeskrivelse Termin Juni 119 Institution Uddannelse Fag og niveau Lærer Hold Erhvervsskolerne Aars hhx Programmering B Patrick Bøgsted Sørensen (pbs) 2k18 Forløbsoversigt (4) Forløb 1 Forløb

Læs mere

Design dit eget computerspil med Kodu

Design dit eget computerspil med Kodu Design dit eget computerspil med Kodu I sensommeren var vi to CFU-konsulenter ude i SFO en på Borup Ris Skolens Grønbro-afdeling. Her var vi sammen med børnene for at få erfaringer i arbejdet med platformen

Læs mere

Skråplan. Esben Bork Hansen Amanda Larssen Martin Sven Qvistgaard Christensen. 2. december 2008

Skråplan. Esben Bork Hansen Amanda Larssen Martin Sven Qvistgaard Christensen. 2. december 2008 Skråplan Esben Bork Hansen Amanda Larssen Martin Sven Qvistgaard Christensen 2. december 2008 1 Indhold 1 Formål 3 2 Forsøg 3 2.1 materialer............................... 3 2.2 Opstilling...............................

Læs mere

Lineære sammenhænge, residualplot og regression

Lineære sammenhænge, residualplot og regression Lineære sammenhænge, residualplot og regression Opgave 1: Er der en bagvedliggende lineær sammenhæng? I mange sammenhænge indsamler man data som man ønsker at undersøge og afdække eventuelle sammenhænge

Læs mere

LAVET AF HANS-CHRISTIAN KELLER 1

LAVET AF HANS-CHRISTIAN KELLER 1 ELEVENS Indhold Lektion nr. 1 Lær Edison at kende... 2 Arbejdsark 1.1 Batterier, knapper og sensorer... 2 Arbejdsark 1.2 - Programmer Edison ved at bruge stregkoder... 4 Arbejdsark 1.3 Prøv Edisons sensorer...

Læs mere

ROSKILDE TEKNISKE GYMNASIUM. Læringsprogram. Lommeregner

ROSKILDE TEKNISKE GYMNASIUM. Læringsprogram. Lommeregner ROSKILDE TEKNISKE GYMNASIUM Læringsprogram Lommeregner Programmering Malte Fibiger, Rasmus Ketelsen, Nicojal Jensen og Leon Bøgelund, Klasse 3.36 04-12-2012 Indholdsfortegnelse Indledende afsnit... 3 Problemformulering...

Læs mere

Enes Kücükavci Roskilde Tekniske Gymnasium 20 05 2010 Mathias Turac Informationsteknolog B Vejleder: Karl Bjranasson Programmering C

Enes Kücükavci Roskilde Tekniske Gymnasium 20 05 2010 Mathias Turac Informationsteknolog B Vejleder: Karl Bjranasson Programmering C Indhold Indledning(Enes)... 2 Problemstilling (Enes)... 2 Teori (Enes)... 2 Løsningsforslag (Enes)... 4 RFID relæet (Mathias)... 6 Krav (Enes og Mathias)... 8 Målgruppen (Mathias)... 8 Rekvirent... 8 Implementering(Mathias)...

Læs mere

Indholdsfortegnelse:

Indholdsfortegnelse: Dataopsamling Klaus Jørgensen Gruppe. Klaus Jørgensen, Jacob Clausen Og Ole Rud Erhvervs Akademi Fyn Allegade 79 Odense C 5000 fra d 2/12-02 til d 20/12-02 Vejleder: SKH. Forord: Denne rapport omhandler

Læs mere

Greenfoot En kort introduktion til Programmering og Objekt-Orientering

Greenfoot En kort introduktion til Programmering og Objekt-Orientering Greenfoot En kort introduktion til Programmering og Objekt-Orientering Greenfoot er et computer-program, som kan benyttes til at skrive andre computer-programmer, i et programmeringssprog kaldet Java.

Læs mere

Indledning. Målgruppe. Læringsmål. Pakkens indhold. Indledning

Indledning. Målgruppe. Læringsmål. Pakkens indhold. Indledning Indledning LEGO Education teamet er stolte af at præsentere LEGO MINDSTORMS Education EV3 fysikaktivitetspakken til folkeskolens ældste klasser samt gymnasiet. Disse innovative undervisnings- og læringsmaterialer

Læs mere

Online billede filtrering

Online billede filtrering Online billede filtrering Eksamensprojekt 2014 Andreas Lorentzen, klasse 3.4 Roskilde Tekniske Gymnasium Programmering C 09-05-2014 I dette projekt vil jeg demonstrerer en af de mange ting moderne browsere

Læs mere

Arduino Programmering

Arduino Programmering Microcontroller-programmering med Arduino I teknologi skal vi lære at lave programmer til en microcontroller for at have muligheden til eksamen at kunne lave intelligente el-produkter. I hvert fald skal

Læs mere

Elektronikken bag medicinsk måleudstyr

Elektronikken bag medicinsk måleudstyr Elektronikken bag medicinsk måleudstyr Måling af svage elektriske signaler Indholdsfortegnelse Indholdsfortegnelse... 1 Introduktion... 1 Grundlæggende kredsløbteknik... 2 Ohms lov... 2 Strøm- og spændingsdeling...

Læs mere

Accelerace og Green Tech Center kommer nu med et unikt tilbud om udvikling af din virksomhed Green Scale Up

Accelerace og Green Tech Center kommer nu med et unikt tilbud om udvikling af din virksomhed Green Scale Up Accelerace og Green Tech Center kommer nu med et unikt tilbud om udvikling af din virksomhed Green Scale Up Accelerace har gennem de seneste 7 år arbejdet tæt sammen med mere end 250 af de mest lovende

Læs mere

Undervisningsbeskrivelse

Undervisningsbeskrivelse Undervisningsbeskrivelse Stamoplysninger til brug ved prøver til gymnasiale uddannelser Termin Institution Uddannelse Fag og niveau Lærer(e) Termin hvori undervisningen afsluttes: Juni 2019 VID Gymnasier

Læs mere

02101 Indledende Programmering Introduktion til Eclipse

02101 Indledende Programmering Introduktion til Eclipse 02101 Indledende Programmering Introduktion til Eclipse Version 2018 1 Introduktion I dette kursus lægger vi op til at man bruger det integrerede udviklingsmiljø Eclipse. Basalt set er et integreret udviklingsmiljø

Læs mere

Matematikken i kunstig intelligens Opgaver om koordinerende robotter

Matematikken i kunstig intelligens Opgaver om koordinerende robotter Matematikken i kunstig intelligens Opgaver om koordinerende robotter Thomas Bolander 2. juni 2018 Vejledning til opgaver Opgave 1 kan eventuelt springes over, hvis man har mindre tid. De resterende opgaver

Læs mere

Førerløse skolebusser

Førerløse skolebusser World Robot Olympiad 2019 Indskoling/WeDo Open Kategorien (op til10 år) Beskrivelse af opgaver, regler og vurderingskriterier SMARTE BYER Førerløse skolebusser Version: 15. januar 2019 WRO International

Læs mere

DANMARKS TEKNISKE UNIVERSITET

DANMARKS TEKNISKE UNIVERSITET DANMARKS TEKNISKE UNIVERSITET Skriftlig prøve, 14. december 2018, 4 timer Side 1 af 18 Kursus navn: 02101 Indledende Programmering Kursus : 02101 Tilladte hjælpemidler: Ikke-digitale skriftlige hjælpemidler

Læs mere

Vækst og Forretningsudvikling

Vækst og Forretningsudvikling Vækst og Forretningsudvikling Uddrag af artikel trykt i Vækst og Forretningsudvikling. Gengivelse af denne artikel eller dele heraf er ikke tilladt ifølge dansk lov om ophavsret. Børsen Ledelseshåndbøger

Læs mere

Matematikken i kunstig intelligens Opgaver om koordinerende robotter LØSNINGER

Matematikken i kunstig intelligens Opgaver om koordinerende robotter LØSNINGER Matematikken i kunstig intelligens Opgaver om koordinerende robotter LØSNINGER Thomas Bolander 25. april 2018 Vejledning til opgaver Opgave 1 kan eventuelt springes over, hvis man har mindre tid. De resterende

Læs mere

Komunikation/It C Helena, Katrine og Rikke

Komunikation/It C Helena, Katrine og Rikke HTX Afsluttende projekt E-learning Komunikation/It C Helena, Katrine og Rikke 1.1 01-05-2013 Systemudvikling Indledende aktiviteter Kommunikationsplanlægning for projektet, Laswells fem spørgsmål. o Hvem

Læs mere

Trafikmodellering* Claus Michelsen & Jan Alexis Nielsen. Syddansk Universitet

Trafikmodellering* Claus Michelsen & Jan Alexis Nielsen. Syddansk Universitet * Trafikmodellering* Claus Michelsen & Jan Alexis Nielsen Syddansk Universitet * Inspireret af Swetz, F. & Hartzler, J. S. (eds) 1991, Yellow Traffic Lights, in Mathematical Modeling in the Secondary School

Læs mere

Kursuskatalog 2012 TwinCAT Basic og Extended

Kursuskatalog 2012 TwinCAT Basic og Extended Kursuskatalog 2012 TwinCAT Basic og Extended Basic Modul 1 Software Kursus K120101 K120102 K120103 K120104 K120105 K120106 Dato 31.1-1.2.12 6.-7.3.12 8.-9.5.12 21.-22.8.12 2.-3.10.12 20.-21.11.12 Modul

Læs mere

A Profile for Safety Critical Java

A Profile for Safety Critical Java A Profile for Safety Critical Java Martin Schoeberl Hans Søndergaard Bent Thomsen Anders P. Ravn Præsenteret af: Henrik Kragh-Hansen November 8, 2007 Forfatterne Martin Schoeberl Udvikler af JOP processoren

Læs mere

TinkerCad - Arduino simulator

TinkerCad - Arduino simulator TinkerCad - Arduino simulator Dokument fra H.C.Ørsted Gymnasiet, delt i HTX-Strømspassergruppen. ( Lidt modificeret / Valle ) På tinkercad.com kan man både arbejde med 3D emner, men også elektroniske kredsløb.

Læs mere

BRUGER VEJLEDNING DK 8MP wildview ir / KAMERA JK 020 / Åtelkamera 801/Albecom Justerbar 3 / 5 eller 8 mp.

BRUGER VEJLEDNING DK 8MP wildview ir / KAMERA JK 020 / Åtelkamera 801/Albecom Justerbar 3 / 5 eller 8 mp. BRUGER VEJLEDNING DK 8MP wildview ir / KAMERA JK 020 / Åtelkamera 801/Albecom Justerbar 3 / 5 eller 8 mp. Funktioner: 1. 5 cm TFT LCD-skærm med angivelse af optage tilstand, hukommelse på kort og batteri

Læs mere

EA3 eller EA Cube rammeværktøjet fremstilles visuelt som en 3-dimensionel terning:

EA3 eller EA Cube rammeværktøjet fremstilles visuelt som en 3-dimensionel terning: Introduktion til EA3 Mit navn er Marc de Oliveira. Jeg er systemanalytiker og datalog fra Københavns Universitet og denne artikel hører til min artikelserie, Forsimpling (som også er et podcast), hvor

Læs mere

Notat om underleverandører af software til medicinsk udstyr Specielt med fokus på fortolkere, hvor nyt udstyr let kan genereres

Notat om underleverandører af software til medicinsk udstyr Specielt med fokus på fortolkere, hvor nyt udstyr let kan genereres December 2018 Notat om underleverandører af software til medicinsk udstyr Specielt med fokus på fortolkere, hvor nyt udstyr let kan genereres Af Carsten Jørgensen FORCE Technology Venlighedsvej 4 2970

Læs mere

Kom/IT rapport Grafisk design Anders H og Mikael

Kom/IT rapport Grafisk design Anders H og Mikael Kom/IT rapport Grafisk design Anders H og Mikael Denne rapport i grafisk design, vil tage udgangspunkt i den PowerPoint præsentation vi lavede i forbindelse med en opgave i samfundsfag. Rapporten er inddelt

Læs mere

Wavelet Analyse. Arne Jensen Institut for Matematiske Fag Aalborg Universitet

Wavelet Analyse. Arne Jensen Institut for Matematiske Fag Aalborg Universitet Wavelet Analyse Arne Jensen Institut for Matematiske Fag Aalborg Universitet 1 Introduktion Numb3rs episoden on pengeforfalskning brugte wavelet analyse. Wavelet analyse er en relativt ny opdagelse, som

Læs mere

Arduino kursus lektion 3:

Arduino kursus lektion 3: Arduino kursus lektion 3: I denne lektion skal vi lave få en diode til at fade op og ned! Herefter skal denne diode bruges sammen med en lysføler til at lave en smart lysfølsom diode som selv justere lyset

Læs mere