... | ... | @@ -6,7 +6,7 @@ |
|
|
|
|
|
**Group members participating:** Mikkel Brun Jakobsen, Josephine Raun Thomsen, Daniel Vestergaard og Christoffer Skovgaard
|
|
|
|
|
|
**Activity duration:** 7 hours, 1 hour,
|
|
|
**Activity duration:** 7 hours, 1 hour, 3 hours
|
|
|
|
|
|
## Goal
|
|
|
Som præsenteret til Lecture 10 er navigation en fundamental evne for en autonom robot. De primære funktioner for navigation er: Localization (Hvor er jeg?), Map Making (Hvor har jeg været?), Mission Planning (Hvor skal jeg hen?) samt Path Planning (Hvad er den bedste rute?) [1]. I denne Lesson beskæftiger vi os udelukkende med Localization - altså hvorledes robotten kan lokalisere sig selv. Det overordnede mål med denne øvelsesgang er at undersøge hvorledes *odometry* og NXT motorens tacho counter kan benyttes til at holde styr på LEGO-bilens position. Vi benytter os af leJOS-klasserne DifferentialPilot samt OdometryPoseProvider til at implementere navigationen. I arbejdet hermed ønsker vi at bestemme nøjagtigheden, samt kalibrere de faktorer der medvirker højere nøjagtighed.
|
... | ... | @@ -36,7 +36,7 @@ Video 1 [9] nedenfor viser en afvikling af SquarePilot uden nogen form for kalib |
|
|
|
|
|
*Video 1: Afvikling af SquarePilot uden kalibrering.*
|
|
|
|
|
|
[![image alt text](https://img.youtube.com/vi/-gGn66aagvY /0.jpg)](https://www.youtube.com/watch?v=-gGn66aagvY)
|
|
|
[![image alt text](https://img.youtube.com/vi/-gGn66aagvY/0.jpg)](https://www.youtube.com/watch?v=-gGn66aagvY)
|
|
|
|
|
|
Som det ses af videoen afviger robotten med ca. 4 mm fra startpunktet. Videoen viser at bilen er meget præcis i sin udførsel af rotate, da den ender lige på stregen igen. Den afvigelse blev kun forøget ved at vi satte længden på ruten op. Vores indledende forsøg tydede derfor på at det især var travel, der var årsag til afvigelse.
|
|
|
|
... | ... | @@ -45,13 +45,13 @@ Som det ses af videoen afviger robotten med ca. 4 mm fra startpunktet. Videoen v |
|
|
|
|
|
Vores næste opgave er at kalibrere parametrene wheelDiameter og trackWidth for at give LEGO-bilen en højere præcision i udførslen af SquarePilot. Vores fremgangsmåde består i at afprøve hver enkelt ændring i konstanterne 3 gange førend vi ændre dem igen, for at minimere fejlkilder såsom en upræcis startposition. Desuden ændrer vi kun én konstant af gangen, for at kunne danne os et klart billede af hvorledes ændringer manifesterer sig.
|
|
|
|
|
|
Som vist i video 1 ovenfor stemmer programmet ikke nødvendigvis overens med de bevægelser bilen faktisk udfører, og dette resulterer i en afvigelse fra startpositionen på ca. 1 cm på både X- og Y-aksen. Videoen vidner således om fejl i bestemmelsen af bilens position. I undersøgelsen af disse fejlkilder, er det vigtigt at skelne mellem *systematiske fejl* og *ikke-systematiske fejl*. Systematiske fejl kan f.eks. opstå som resultat af forskellig hjuldiameter, afstand mellem hjulene, samt hjulenes tykkelse. Ikke-systematiske fejl kan f.eks. opstå som resultat af uregelmæssigheder i overfladen. Ifølge Borenstein og Feng [5] kan systematiske fejl reduceres væsentligt ved at justere på rutens længde, samt variablerne der fortæller hjulenes diameter og hjulenes indbyrdes afstand. I leJOS DifferentialPilot er det ligeledes muligt at reducere systematiske fejl ved at justere på to parametre: wheelDiameter (hjuldiameter) og trackWidth (indbyrdes afstand mellem hjulene).
|
|
|
Som vist i Video 1 ovenfor stemmer programmet ikke nødvendigvis overens med de bevægelser bilen faktisk udfører, og dette resulterer i en afvigelse fra startpositionen på ca. 1 cm på både X- og Y-aksen. Videoen vidner således om fejl i bestemmelsen af bilens position. I undersøgelsen af disse fejlkilder, er det vigtigt at skelne mellem *systematiske fejl* og *ikke-systematiske fejl*. Systematiske fejl kan f.eks. opstå som resultat af forskellig hjuldiameter, afstand mellem hjulene, samt hjulenes tykkelse. Ikke-systematiske fejl kan f.eks. opstå som resultat af uregelmæssigheder i overfladen. Ifølge Borenstein og Feng [5] kan systematiske fejl reduceres væsentligt ved at justere på rutens længde, samt variablerne der fortæller hjulenes diameter og hjulenes indbyrdes afstand. I leJOS DifferentialPilot er det ligeledes muligt at reducere systematiske fejl ved at justere på to parametre: wheelDiameter (hjuldiameter) og trackWidth (indbyrdes afstand mellem hjulene).
|
|
|
|
|
|
#### Justering af wheelDiameter ved rute på 50 cm.
|
|
|
|
|
|
*Video 2: Justering af wheelDiameter - værdi: 5.5*
|
|
|
|
|
|
[![image alt text](https://img.youtube.com/vi/HrLMg_VwLXQ /0.jpg)](https://www.youtube.com/watch?v=HrLMg_VwLXQ)
|
|
|
[![image alt text](https://img.youtube.com/vi/HrLMg_VwLXQ/0.jpg)](https://www.youtube.com/watch?v=HrLMg_VwLXQ)
|
|
|
|
|
|
I justeringen af parametret wheelDiameter, fik vi bilen til at køre på en rute på 50 cm, og justerede parameteren indtil bilen kørte så tæt på præcist 50 cm som muligt. Som tidligere nævnt gennemførte vi hvert forsøg 3 gange, for at korrigere for ikke-systematiske fejl, hvor Video 2 [10] ovenfor viser en demonstration af en kørsel med en wheelDiameter-værdi på 5.5. Foruden værdien på 5.5, gennemførte vi justeringen af wheelDiameter med følgende værdier: 5.55, 5.575 og 5.5765, hvor sidstnævnte værdi fik bilen meget tæt på de 50 cm.
|
|
|
|
... | ... | @@ -69,7 +69,7 @@ I [6] beskrives det, hvordan den rette justering af disse parametre kan holde af |
|
|
|
|
|
*Video 4: SquarePilot i 40 cm*40 cm firkant, før kalibrering*
|
|
|
|
|
|
[![image alt text](https://img.youtube.com/vi/IRzelG65Dkw /0.jpg)](https://www.youtube.com/watch?v=IRzelG65Dkw)
|
|
|
[![image alt text](https://img.youtube.com/vi/IRzelG65Dkw/0.jpg)](https://www.youtube.com/watch?v=IRzelG65Dkw)
|
|
|
|
|
|
I ovenstående Video 4 [12] ses det at bilens afvigelse holder sig under en afvigelse på 2 %, da den med sine 160 cm kørt, havde en endelig afvigelse på 2 cm afvigelse i X-aksen og 3 cm afvigelse i Y-aksen (dvs. en afvigelse på 1.57 %). Det observeres yderligere at afvigelsen skyldes at bilen ikke drejede tilstrækkeligt, hvilket vi forsøgte at kompensere for, ved at forøge trackWidth. Ved en justering af TrackWidth, med følgende parameterværdier: 16.1, 16.15, 16.175, 16.255, 16.275, 16.65, 16.625 og 16.6025, opnåede vi resultatet der ses i nedenstående Video 5 [13], med den sidstnævnte værdi.
|
|
|
|
... | ... | @@ -180,7 +180,7 @@ bør den ende op på position (150, 150). |
|
|
|
|
|
For at undersøge dette opstillede vi et koordinatsystem vha. 4 udleverede A0 ark med påtrykte mål. Vi kunne derfor opsætte en bane, der var 200 cm på y-aksen og 175 cm på x-aksen (se Billede 2 nedenfor).
|
|
|
|
|
|
*Billede 2: Opsætning af bilen i fysisk koordinatsystem
|
|
|
*Billede 2: Opsætning af bilen i fysisk koordinatsystem.*
|
|
|
|
|
|
![Skærmbillede 2015-05-25 kl. 14.47.33](http://gitlab.au.dk/uploads/group-5/group-5-lesson-10/dadf3a7bd9/Sk%C3%A6rmbillede_2015-05-25_kl._14.47.33.png)
|
|
|
|
... | ... | @@ -195,7 +195,7 @@ Denne afvikling producerede følgende mulige partikel positioner for bilen (10 p |
|
|
|
|
|
![Originale model](http://gitlab.au.dk/uploads/group-5/group-5-lesson-10/d6a845b7d5/Originale_model.png)
|
|
|
|
|
|
*Billede 4: Bilens endelige placering - afstand fra x-akse og y-akse referencer.
|
|
|
*Billede 4: Bilens endelige placering - afstand fra x-akse og y-akse referencer.*
|
|
|
|
|
|
![Skærmbillede 2015-05-25 kl. 13.41.43](http://gitlab.au.dk/uploads/group-5/group-5-lesson-10/97a4eabe9d/Sk%C3%A6rmbillede_2015-05-25_kl._13.41.43.png)
|
|
|
|
... | ... | @@ -232,7 +232,6 @@ Dette resultat stemmer meget mere overens med hvordan vi observerede at bilen be |
|
|
|
|
|
### Position tracking while avoiding objects
|
|
|
|
|
|
|
|
|
Som non-sensing vil LEGO-bilen ikke være i stand til at undvige forhindringer på dens rute. Hvis LEGO-bilen derfor skal være i stand til at bevæge sig på en fikseret rute bestående af afstande og roteringer og *samtidigt* være i stand til at undgå kollisioner med fremmede objekter, er vi nødt til at gøre LEGO-bilen sansende. Vi påmonterede derfor en afstandssensor, som er i stand til at detektere objekter foran bilen. Nedenstående Billede 6 viser den konstruktion vi benyttede til at den form for positionering.
|
|
|
|
|
|
*Billede 6: Påmonteret afstandssensor.*
|
... | ... | @@ -241,7 +240,7 @@ Som non-sensing vil LEGO-bilen ikke være i stand til at undvige forhindringer p |
|
|
|
|
|
Vi lavede en ny klasse “AvoidPilot” hvis ansvar er at følge en liste af waypoints mens den holder styr på hvor i verden den er, samtidig med at den kan undgå små objekter der bliver sat i vejen. Vi realiserede dette ved brug af DifferentialPilot klassens travel og rotate metoder (hvor immediateReturn er sat til true). Hvis ultralydssensoren midt under et travel mener at der er en forhindring i vejen forsøger bilen at bevæge sig uden om denne ved hjælp af en open-loop subprocedure (der ligeledes bruger DifferentialPilot). Idéen er illustreret vha. Figur 5 nedenfor:
|
|
|
|
|
|
Figur 5: Illustration af bilens faktiske rute i forhold til den tiltænkte rute ved forhindring.
|
|
|
*Figur 5: Illustration af bilens faktiske rute i forhold til den tiltænkte rute ved forhindring.*
|
|
|
|
|
|
![Skærmbillede 2015-05-25 kl. 14.56.31](http://gitlab.au.dk/uploads/group-5/group-5-lesson-10/8d4c5c0a00/Sk%C3%A6rmbillede_2015-05-25_kl._14.56.31.png)
|
|
|
|
... | ... | @@ -257,7 +256,6 @@ Hvis vores bil havde kendt til den eksakte position af diverse forhindringer på |
|
|
|
|
|
## Conclusion
|
|
|
|
|
|
|
|
|
Vi har i denne lesson arbejdet med anvendelse af odometry på en LEGO bil for at give bilen en bevidsthed om hvor den befinder sig: Localization. I forbindelse hermed justerede vi på to parametre: bilens hjuldiameter og den indbyrdes afstand mellem hjulene, for at reducere de systematiske fejl, og dermed opnå bedst mulig resultat med dead reckoning positionering. For at kunne ræsonnere omkring ikke-systematiske fejl har vi ligeledes eksperimenteret med partikelfiltre. Den udleverede partikel filter model, som benyttes i PilotMonitor, havde nogle mangler som vi har forsøgt at rette op på i vores egen motion model, som er inspireret af Wikipedia’s Monte Carlo Localization motion model.
|
|
|
Som sidste led i denne lesson arbejde vi med hvorledes vi kunne undgå forhindringer på bilens bane - her implementerede vi en funktionalitet baseret på en ultralydssensor som var i stand til køre udenomkring eventuelle forhindringer. Her erfarede vi at der i vores nuværende undvigelsefunktionalitet opstår begrænsninger i bilens evne til at navigere gennem en prædefineret rute, og at vi bør arbejde videre på at optimere dette.
|
|
|
|
... | ... | |