Med Asbjørn, Christer og Jesper

Viser opslag med etiketten lyssensor. Vis alle opslag
Viser opslag med etiketten lyssensor. Vis alle opslag

torsdag den 20. december 2007

Projekt, møde 4

Deltagere: Asbjørn og Jesper
Tidsforbrug: 7 timer (kl 9 - 16)

Denne gang satte vi os for at rette de fejl der var ved vores hardwares håndtering af kuben:
  • Vores tilter kunne ikke altid tilte kuben.
  • Vores twister kunne ikke holde sig på multipla af 90 grader.
Disse tre problemer angreb vi i rækkefølgen beskrevet her. Det første var at fikse tilteren. Dette problem løste vi ved at ombygge forbindelsen mellem motoren og tilter-armen. Det viste sig at vi ikke behøvede nedgearing her. Resultatet er en mere voldsom tiltning af kuben, men til gengæld virker den hver gang.

Det andet problem var en større hindring. Da rubikskuber ikke er designet med LEGO-kompatibilitet for øje, er der rimelig meget slør mellem kuben og twisterarmen. Løsningen har her primært været i softwaren, der nu kompenserer for slør-effekten. I stedet for at dreje f.eks. 90 grader, drejer den i stedet lidt for langt og lidt tilbage. Ved at prøve forskellige værdier for denne overkompensering, lykkedes det os at finde en løsning der virkede. I hardwaren har vi gjort grebet om kuben lidt tættere.

Efter vi havde opnået en rimelig pålidelig mekanisk manipulation af kuben, fik vi udleveret en NXT Color Sensor. Projektet kræver godt nok to, men det er da en start. Vi lavede nogle indledende tests og konstaterede følgende:
  • Farvemålingen er generelt god og følsom overfor små ændringer i farve, men:
    • Afstanden man kan måle præcist i er kort og skarpt afgrænset. Det observerede vi tydeligst med kubens blå og grønne felter. Ved ca 1 cm var målingen god, men ved 1.5 cm var der problemer.
    • Selv om den indbyggede RGB -> farveindex konvertering virker det meste af tiden, har den meget svært ved at genkende kubens hvide sider (farve index 17). Også selv om RGB værdierne er ca lige store og i den høje ende (dvs i intervallet lysegrå..hvid).
Efter disse indledende målinger var det tid at finde en måde at montere sensoren på, så den pålideligt kunne måle farverne på kubens sider. I vores mockup har vi indtil nu anvendt to andre sensorer med samme ydre dimensioner som farvesensoren. Men vi havde ikke taget højde for sensorens begrænsede rækkevidde. Derfor har vi været nødt til at ændre twister-armen, så sensorerne kan komme tættere på kubens sider.

Vi brugte resten af tiden på at forbedre monteringen af farvesensorerne, samt at påbegynde programmeringen af softwaren. Vi har valgt at adskille logikken fra styringen af motorerne. Derved kan vi udvikle løsningsalgoritmen uden at inddrage den fysiske robot hver gang koden skal testes. Hvis en almindelig PC kan løse en virtuel kube i Java, vil det da være en smal sag at flytte koden over på NXT'en og løse kuben ved mekanisk manipulation.

Desuden optog vi en video af maskinen mens den kørte. Den laver ikke noget "fornuftigt" på denne video. Det er udelukkende en test af de forskellige mekaniske dele.


Billeder
Her ses et nærbillede af styringsmekanismen til rotation af slæden. I vores oprindelige design var slæden monteret direkte på en motor. Dette viste sig dog at være en vakkelvorn og ikke særlig præcis løsning. Dette design er meget bedre med hensyn til stabilitet og præcision.
Her ses en måling af et grønt felt på kuben. På NXT'ens skærm udskriver vi farveindex og RGB værdier.
Det kan være lidt svært at se værdierne på billedet, men der står:









På de næste billeder ses hele konstruktionen oppefra, sidefra og i perspektiv som den ser ud på dette tidspunkt.














fredag den 28. september 2007

NXT programmering, lesson 4

Tidsforbrug: 3 timer
Deltagere: Asbjørn, Christer og Jesper

Målet for dagens session er, at:
  • Black White Detection
    • Montering og test af lyssensor
  • Line Follower with Calibration
    • Brug af lyssensor til at følge en sort streg
  • ColorSensor with Calibration
    • Udvidelse af kode til at genkende grøn
  • Line Follower that stops in a Goal Zone
    • Forberedelse til næste uges løb
Programmerne vi lavede under denne session kan findes på adressen:
http://www.daimi.au.dk/~jn/lego/uge5/

Disse punkter gennemgår vi et for et nedenfor.

Black White Detection
Tidsforbrug: 15 minutter.

Dagens første opgave var at montere lyssensoren på LEGO™ bilen. Det var hurtigt gjort ud fra LEGO™ Mindstorms Education NXT Base Set 9797 byggeinstruktionshæftet. Derefter hentede vi BlackWhiteSensor.java og skrev et program omkring den. Igennem eksperimenter kunne vi se, at den var meget god til at skelne mellem mørke og lyse farver. Mørke farver gav høje værdier og lyse farver gav lave værdier.


Line Follower with Calibration
Tidsforbrug: 45 minutter

Vi hentede LineFollowerCal.java fra nettet og forsøgte at overføre det til NXT'en. Det lykkedes dog ikke først. Hver gang vi prøvede, skrev den "Data abort", dumpede registre til skærmen og frøs. Vi lånte da en NXT af en anden gruppe og forsøgte at overføre programmet til den i stedet. Det virkede fint, hvorfor vi konstaterede, at det var vores NXT den var gal med. Herefter hentede vores instruktor en ny NXT til os, hvilket løste problemet. Vi kunne nu køre programmet og følge en sort streg på gulvet.

ColorSensor with Calibration
Tidsforbrug: 30 minutter

Nu skulle vi udvide BlackWhiteSensor til ColorSensor, så den kunne skelne mellem sort, hvid og grøn. Så i stedet for at opdele intervallet af mulige målinger i to klasser, skal den nu opdeles i tre, da grøn måles som en gråtone et sted mellem de to andre. Det viste sig eksperimentelt at den anvendte nuance af grøn gav en måling ca midt mellem målingerne for sort og hvid.

Line Follower that stops in a Goal Zone
Tidsforbrug: 90 minutter (resten af tiden)

Nu var det tid til at arbejde på bilens egenskaber for at følge linjen på jorden hurtigst muligt. For at forbedre bilens evne for at holde sig på stregen, udvidede vi den med to RCX lyssensorer som vist på billedet til højre.
Vi opdagede at de tilgængelige RCX sensorer ikke havde samme følsomhed som NXT sensoren. Der var simpelthen ikke så stor forskel på en hvid-måling og en sort-måling. Farvemåling viste sig at være upraktisk, hvis ikke umulig. Dette er dog ikke at være et problem, da vi kun har brug for at genkende farve til aller sidst, og der er NXT sensoren nok. For at kunne bruge både RCX og NXT sensorer med vores BlackWhiteSensor og ColorSensor lavede vi et software interface fælles for de to og wrapper klasser til at pakke LightSensor og RCXLightSensor klasserne ind.

Efter gentagne eksperimenter med den viste robot besluttede vi os for at ændre den igen. Sensorerne sad for tæt på hinanden og for tæt på robotten. Dette bevirkede, at den reagerede for sent når underlaget ændrede sig. Desuden har vi udviddet softwaren så den ikke bare reagerer i forhold til hvad den ser lige nu, men husker til hvilken side den sidst har set stregen, så hvis den kører helt uden for stregen kan den finde den igen. Denne opdatering gjorde en meget stor forbedring. Det lykkedes altså at finde en konfiguration der virkede ret godt, men vi aftalte at mødes igen den følgende uge til en gang tweaking inden konkurrencen.