Deltagere: Bjarke, Jesper, Mikkel
Plan
Vi følger vejledningen [1]
1. Vi skal implementerer en robot lig den beskrevet i [2].
2. Som følge af erfaringerne fra første punkt, skal vi diskutere hvorledes en sådan robot kan undgå forhindringer på en bane.
3. Basert på [3] og [4] skal vi undersøge hvorledes positions bestemmelse fungerer og om dette kan forbedres.
Resultater
1.
Vi har anvendt differentialPilot-klassen til at styre robotton. Vi instansierer denne med hjulenes diameter og afstanden mellem hjulene, i samme måleenhed. Vores kode er inspireret af koden fra [1].
Som udgangspunkt bør robotten, hvis den er blevet instansieret med de korrekte værdier, være i stand til at styre ved hjælp af parametre.
public void rotate(double angle)
Rotates the NXT robot through a specific angle. Returns when angle is reached. Wheels turn in opposite directions producing a zero radius turn.
Note: Requires correct values for wheel diameter and track width. calls rotate(angle,false)
Som det fremgår af ovenstående uddrag kan robotten drejes et antal grader. Ligeledes kan den køre et stykke frem.
Robotten kører frem og tilbage som forventet når robot.travel(distance) kaldes. Dvs. den kører ret præcist den forventede distance. Derimod er ovenstående metode, robot.rotate(angle) betydeligt mere problematisk. Problemet består i at den ikke drejer 90 grader, selvom den instrueres til det. Den drejer enten for lidt eller for meget.
Hvor robot.travel(distance) er afhængig udelukkende af hjulenes diameter (hvilket står på hjulene), så er rotate(angle) også afhængig af afstanden mellem hjulene, hvilket vi selv har måtte måle. Indledningsvist var denne afstand ikke korrekt og vi har løbene justeret den.
For at justere robotten har vi monteret en tuch på den og anbragt den på et whiteboard, således at vi kan se robttons bevægelser. (Se billedet)
Ved at lade den køre fremad, efterfulgt af en 90 graders rotation i samme retning, fire gange, burde robotten køre i en perfekt firkant, forudsat at den er givet de korrekte værdier. Efter mange tests og små ændringer i vores værdier konkluderede vi at afstanden mellem hjulene på vores robot er 16,7cm. Dette er næppe den korrekte afstand (vi målte den til 15cm, hvorfor 1,7cm er en stor difference). Antageligt har tuchen en indflydelse, da den giver modstand og skubber lidt til robotten når den kører. Se video af den bedste version nedenfor.
2.
Baseret på vores resultater fra første punkt, kan vi se, at vi med stor præcision kan dreje et ønsket antal grader og kører en bestemt distance frem. Når vi har denne præcision, burde vi kunne køre udenom forhindringer, hvis robotten har ultralyds sensorer der kan opdage disse forhindringer. Vi har forsøgt at illustrere vores overvejelser på følgende tegning:
Ved at anvende tre sensorer kan vi konstant kontrollere om robotten blokeres både forfra og fra siden, hvorfor vi efter at have undveget forhindringen kan overvåge hvornår vi har passeret den. Robotten skal naturligvis huske hvor langt den kørte for at undvige forhindringen, således at den kan nå tilbage på sporet bagefter.
En anden mulighed, istedet for at dreje 90 grader ved mødet med en forhindring, er at lade robotton dreje langsomt, indtil den er fri af forhindringen. Denne løsning vil kræve at robottens interne software holder styr på hvor mange grader den er drejet og hvor langt den er kørt indtil den var fri af forhindringen.
3.
Dette punkt nåede vi desværre ikke.
Konklussion
Vi nåede desværre kun igennem to af dagens opgaver. Disse gav os dog et indtryk af de udfordringer man møder, når man ønsker at styre sin robot via en tachocounter. Også selvom vi anvendte differentialPilot-klassen som er en abstraktion.
Referencer
[1]: http://www.legolab.daimi.au.dk/DigitalControl.dir/NXT/Lesson9.dir/Lesson.html
[2]: Brian Bagnall, Maximum Lego NXTBuilding Robots with Java Brains, Chapter 12, Localization, p.297 - p.298.
[3]: http://www.ridgesoft.com/tutorials.htm
[4]: http://www.cs.umu.se/kurser/TDBD17/VT07/utdelat/kinematics.pdf

Ingen kommentarer:
Send en kommentar