torsdag den 12. november 2009

Lego lab lesson 10: Navigation

Plan for idag:
  1. Test af Blightbot (benytter TachoNavigator). Findes i noterne [1]
  2. Diskussion af, hvorledes man evt. kan navigere samtidig med at undgå objekter
  3. Navigation ved hjælp af kompas sensor.
Test af Blightbot:
Vi fandt ud af, at denne version af lejos ikke understøttede TachoNavigator og dermed goTo() metoden. Vi benytte derfor et TachoPilot(...) objekt og metoden travel(int distance). Koden ses herunder:

import lejos.nxt.*;
import lejos.robotics.navigation.*;

public class Blighbot {

public static void main(String[] args) {

TachoPilot robot = new TachoPilot(5.8f, 11.5f, Motor.C, Motor.B, false);

robot.travel(200);
robot.rotate(180);
robot.travel(100);
robot.rotate(-90);
robot.travel(100);
robot.rotate(90);
robot.travel(150);
robot.rotate(180);
robot.travel(50);
robot.rotate(90);
robot.travel(100);
}
}


Planen var, at robotten skulle vandre rundt i rummet (på Zuse's blå gulv) for til sidst at ende ved udgangspunktet. I koden ses det, at robotten efter første vandring skal rotere 180 grader, men som nedenstående video viser er dette ikke tilfældet (10 sekunder inde i filmen):



Denne række af små fejl leder til drift (større fejl) og robotten vender derfor ikke tilbage til udgangspunktet. Disse fejl kan skyldes underlaget (dårligt fæste) eller unøjagtige målinger af hjulstørrelse eller afstand mellem disse. Vi testede også robotten på et gulvtæppe, men her var drift endnu mere tydeligt.

Diskussion af, hvorledes man evt. kan navigere samtidig med at undgå objekter
En overordnet strategi for hvordan dette kan opnås; Vi kunne benytte CompassBlighBot[1] og lave compass navigationen om til et behaviour. Derudover skal der være et "obstacle avoidance" behaviour, som vha. subsumption kan undertrykke navigations behaviouret. Ideen er at robotten vil kører den rute der er defineret i navigationen samtidig med at "obstacle avoidance" parallelt med tjekker for om robotten er ved at køre ind i noget (vha. en ultrasonic sensor). Hvis robotten er på kollisionskurs skal "obstacle avoidance" behaviouret overtage styringen og guide robotten uden om forhindingen. Herefter skal navigations niveauet tage over igen. Som sagt er dette en overordnet strategi og der vil være problemer, som skal håndteres. F.eks. vi "obstacle avoidance" opførselen også flytte robotten, så robotten vil være et andet sted end hvor navigationen forventer.

Navigation ved hjælp af kompas sensor
Under denne test, havde vi en forventning om at robotten ikke ville lade sig påvirke af underlaget. Denne video viser, at robotten roterer (eller korrigerer i små hak) som ønsket og at denne løsning er mere præcis til navigation uden forhindringer:



Det ses dog i nedenstående video, at robotten påvirkes af visse objekter som kommer for tæt på. I videoen er dette illustreret ved, at robotten vandrer mod en computer:



For at give et lidt bedre billede af hvordan robotten kørte, monterede vi en tusch og kørte oven på et whiteboard. Som vi kan se fra videon påvirkes kompassen meget af omgivelserne. Den kan ikke engang køre lige ud, men trækker enten den ene eller den anden vej. Vi satte afstandene ned så robottens bane kunne være indenfor whiteboardet.



[1], Brian Bagnall, Maximum Lego NXTBuilding Robots with Java Brains, Chapter 12, Localization, p.285 - p.302.

Brugt tid: ca 3 timer.

Ingen kommentarer:

Send en kommentar