Kapittel 1. Innledning - Institutt for teknisk kybernetikk - NTNU
Kapittel 1. Innledning - Institutt for teknisk kybernetikk - NTNU
Kapittel 1. Innledning - Institutt for teknisk kybernetikk - NTNU
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Forslag til Ut<strong>for</strong>ming <strong>for</strong> Eurobot 2002<br />
nivå. Det finnes kommandoer som får roboten til å gå til et bestemt punkt. Funksjoner<br />
med suffiks_block returnerer ikke før roboten fysisk har utført en kommando. For<br />
eksempel vil funksjonen command_drive_block(dist, time) ikke returnere før roboten har<br />
kjørt dist millimeter eller etter time millisekunder, dersom ikke roboten har stoppet til da.<br />
6.2.3 debug.c<br />
Som navnet tilsier er denne fila ment <strong>for</strong> debugging. Den har en loggefunksjon som<br />
fungerer på samme måte som printf. Men som skriver en linje til fil <strong>for</strong> hvert kall. Fila<br />
blir lukket etter hvert kall, slik at ingen data skal gå tapt ved kræsj.<br />
6.2.4 geometry.c<br />
Inneholder geometri-funksjoner til bruk blant annet ved vei-finning og bildegjenkjenning.<br />
Disse funksjonene er svært generelle og vil kunne brukes i andre sammenhenger. En del<br />
er enkle vektorfunksjoner som lengde og skalarprodukt. Men det er også enkelte mer<br />
spesialiserte funksjoner som <strong>for</strong> eksempel geom_point_line_distance(Point a, Point b,<br />
Point c) som er svært nyttig <strong>for</strong> å finne ut om roboten kolliderer med noe (en annen robot,<br />
en kant) som står i punkt c dersom roboten skal gå fra a til b.<br />
6.2.5 table.c<br />
Kode som er direkte knyttet til spillebrettet ligger i denne fila. Algoritme <strong>for</strong> veifinning er<br />
også implementert her. Algoritmen som den eksisterer prøver å finne en brukbar vei<br />
mellom to vilkårlige punkter. Steg én i algoritmen er å <strong>for</strong>søke den rette veien mellom de<br />
to punktene Dersom dette ikke er mulig, finner algoritmen ett brukbart passeringspunkt<br />
som ligger på midtnormalen på linja mellom start- og sluttpunktet. Algoritmen kjøres så<br />
rekursivt på de to halvdelene av veien inntil en maksimumsgrense <strong>for</strong> rekursjonen. Veien<br />
blir tilslutt <strong>for</strong>bedret ved å fjerne unødvendige svinger.<br />
6.2.6 tasking.c<br />
Funksjoner i denne fila skal være med å avgjøre hvilken oppgave som til enhver tid skal<br />
prioriteres. Task_control() kalles jevnlig fra hoved-AI-tråden og denne funksjonen sørger<br />
<strong>for</strong> å velge rett task.<br />
Hver task har implementert to funksjoner i denne fila. Den ene funksjonen er en<br />
prioritetssjekk som beregner poengsum ut i fra avstand fra robot til et mål, tid anvendt <strong>for</strong><br />
å finne målet og parametre som kan settes fra brukergrensesnittet. Den andre funksjonen<br />
er funksjonen som kjøres når en oppgave har blitt valgt. Denne funksjonen skal sende<br />
riktige kommandoer <strong>for</strong> å styre roboten fram til målet. Funksjonen skal returnere<br />
umiddelbart <strong>for</strong> ikke å henge AI-tråden.<br />
Frode Vik Bredesen, <strong>Institutt</strong> <strong>for</strong> Teknisk Kybernetikk<br />
Norges Teknisk-Naturvitenskaplige Universitet<br />
24