Med Asbjørn, Christer og Jesper

fredag den 14. september 2007

NXT programmering, lesson 2

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

Målet for dagens session er, at:
  • Test of Ultrasonic Sensor
  • Obstacle Avoider
  • Wall Follower
Disse punkter gennemgår vi et for et nedenfor.

Test of Ultrasonic Sensor.
Tidsforbrug: 20 minutter.

Den første opgave var at montere den ultrasoniske sensor på LEGO™ bilen. Det var hurtigt gjort ud fra LEGO™ Mindstorms Education NXT Base Set 9797 byggeinstruktionshæftet. Herefter var det tid til at hente SonicSensorTest.java. Desværre var serveren nede, hvorfor vi var nødt til at finde en udprintning og indtaste programmet selv. Som beskrevet til forelæsningen kunne vi konstatere en stor forskel i evnen til at måle afstande i alt efter vinklen mellem ultralydens udbredelsesretning og normalen på den overflade den rammer.

Ved at sammenholde måleresultater med et målebånd vi havde udspændt på gulvet, har vi konstrueret en omregningstabel mellem udlæsning og afstand i centimeter.

Afstand i cmMåling
1015
2023
3031
4041
5051
6061
7072
8086
9092
100-

Som det ses, er der en ret god direkte sammenhæng mellem disse to tal.

Obstacle Avoider
Tidsforbrug: 1 time.

Her var vi igen nødt til at indtaste de to klasser Avoider.java og Locomotion.java der udgjorde programmet. Efter en del debugging virkede de endelig og vi kunne teste. Som udgangspunkt var det udleverede program temmelig forsigtigt. Det satte farten ned i god tid før bilen ramte væggen. Efter at have justeret distanceThreshold ned til 20 fik vi den til at køre væsentlig tættere på væggen. Ligeledes eksperimenterede vi også med at variere maxDistance. Ved at sætte denne ned til 50 (og bibeholde den ændrede distanceThreshold) kunne vi få den til at køre hurtigere og tættere til væggen, hvor den stoppede helt ca. en centimeter fra.
Bilens hastighed (the controlled variable) er beregnet direkte ud fra afstandsmålingen (the measured variable) og konstanterne. Derfor er der tale om en simpel feedback kontrol.

Wall Follower
Tidsforbrug: 1 time og 50 minutter.

Vi udvidede vores robot med ultralydssensoren. Herefter forsøgte vi uden held en direkte oversættelse af NQC-programmet. Det mislykkedes fordi programmet var lavet til et andet system (RCX) og dets kontrollogik var uoverskuelig pga dårlige variabelnavne. Efter et par mindre refaktoreringer fik vi programmet til at virke fornuftigt.

Så tweakede vi konstanter for at optimere ydelsen. Blandt andet skulle kørselshastigheden sættes ned og samp
lingfrekvensen op. Derved kunne robotten nemmere nå at reagere på sine omgivelser i tide. Et gennemgående problem er, at robotten, specielt omkring hjørner, taber væggen af "syne" og begynder at køre rundt om sig selv (med en konstant afstandsmåling på 255). Dette kan skyldes den effekt vi observerede i ugens første delopgave, hvor vi så at vinklen til objektet vi målte på betød en del.

Til sidst droppede vi vores første bud på at montere sensoren og monterede den nede forrest på robotten i stedet (se billede). Dette gav meget bedre resultater. Nu kunne den finde rundt om hjørner, da sensoren ser hjørnet før den kører forbi.

Ingen kommentarer: