Tilstandsmaskine: 2007-finale

Nedenfor findes den tilstandsmaskine, Willy brugte til at køre gennem RoboCup banen i 2007.

Hver state består af tre ting:

Tilstandsmaskinen består af 76 tilstande.
Start
Stille og roligt hen mod racerbanen
InitialSet speed=0.75 m/s acc=3 dacc=3
Reset encoders
ActionFollow line at center edge, offset 0
GotoRacerbane 1 if right encoder > 1009.8 cm
Racerbane 1
Hurtigt det første lige stykke
InitialSet speed=1.62 m/s acc=10 dacc=3
Reset encoders
ActionFollow line at center edge, offset 0
GotoRacerbane 2 if left encoder > 430.5 cm
Racerbane 2
Langsomt i svinget
InitialSet speed=0.75 m/s acc=1 dacc=20
Reset encoders
ActionFollow line at center edge, offset 2
GotoRacerbane 3 if left encoder > 360.0 cm
Racerbane 3
Hurtigere på langsiden
InitialSet speed=1.62 m/s acc=3 dacc=3
Reset encoders
ActionFollow line at center edge, offset 0
GotoRacerbane 4 if left encoder > 229.7 cm
Racerbane 4
Lidt langsommere det sidste stykke pga. knæk på kurven
InitialReset encoders
Set speed=1.38 m/s acc=3 dacc=20
ActionFollow line at center edge, offset 0
GotoEfter racerbane if left encoder > 99.8 cm
Efter racerbane
Stop og vent lidt - så der er styr på hvor vi er
InitialSet speed=0.00 m/s acc=20 dacc=20
ActionFollow line at center edge, offset 0
GotoKrydse flisen efter racerbanen if Time > 1.00 s
Krydse flisen efter racerbanen
InitialSet speed=0.25 m/s acc=1 dacc=1
Reset encoders
Camera Light = [1]
ActionFollow line at left edge, offset 0
GotoKrydse flisen før den blinkende port if left encoder > 200.0 cm
Krydse flisen før den blinkende port
Flisens kant bruges til at måle afstand til den blinkende port
InitialSet speed=0.25 m/s acc=1 dacc=1
Set servo 1 to position 100
ActionFollow line at center edge, offset 0
GotoFrem mod den blinkende port if background is dark
Frem mod den blinkende port
InitialSet speed=0.25 m/s acc=1 dacc=1
Reset encoders
ActionFollow line at center edge, offset 0
GotoDet sidste stykke til portbenet if left encoder > 149.7 cm
Det sidste stykke til portbenet
InitialReset encoders
ActionDrive straight distance 42.8 cm at maximum speed 10
GotoAfvent beslutning if At position
Afvent beslutning
Blinker porten eller ej? Det tager lige lidt tid at finde ud af
ActionDo nothing
GotoBeslutning if Time > 1.50 s
Beslutning
Så er vi klart til at vælge den ene eller anden vej
ActionDo nothing
GotoUden om første port i blinkende port forhindringen if Flashing gate
Gennem første port i blinkende port forhindringen if Not flashing gate
Uden om første port i blinkende port forhindringen
Første port blinker, så bak lidt tilbage
InitialReset encoders
ActionDrive straight distance -19.8 cm at maximum speed 20
GotoLidt frem drejende mod venstre if At position
Lidt frem drejende mod venstre
For at rette op, så robotten står vinkelret på stregen
InitialReset encoders
ActionDrive radius 28 cm -42 deg. at maximum speed 20
GotoHalvbue uden om porten if At position
Halvbue uden om porten
InitialReset encoders
ActionDrive radius 40 cm 135 deg. at maximum speed 20
GotoInd på streg igen if At position
Ind på streg igen
InitialReset encoders
ActionDrive radius 70 cm -45 deg. at maximum speed 20
GotoFølg streg gennem anden port if At position
Følg streg gennem anden port
InitialSet speed=0.25 m/s acc=1 dacc=1
Reset encoders
ActionFollow line at center edge, offset 0
GotoEfter blinkende port forhindringen if left encoder > 49.9 cm
Gennem første port i blinkende port forhindringen
Porten blinker ikke så vi skal igennem - men først tilbage på stregen
InitialReset encoders
ActionDrive straight distance -49.9 cm at maximum speed 10
GotoGennem ikke blinkende port if At position
Gennem ikke blinkende port
InitialReset encoders
Set speed=0.25 m/s acc=1 dacc=1
ActionFollow line at center edge, offset 0
GotoDrej væk fra linien før anden port if left encoder > 109.7 cm
Drej væk fra linien før anden port
ActionDrive radius 33 cm -90 deg. at maximum speed 20
GotoRundt om anden port if At position
Rundt om anden port
ActionDrive radius 30 cm 180 deg. at maximum speed 20
GotoInd på stregen igen if At position
Ind på stregen igen
ActionDrive radius 28 cm -90 deg. at maximum speed 20
GotoEfter blinkende port forhindringen if At position
Efter blinkende port forhindringen
Robotten ender i denne state efter den blinkende port lige gyldigt hvilken port den kørte igennem
InitialSet speed=0.50 m/s acc=1 dacc=1
Reset encoders
ActionFollow line at center edge, offset 0
GotoMod golfbold if left encoder > 80.0 cm
Mod golfbold
Frem langs linien indtil goldbolden findes
InitialSet speed=0.50 m/s acc=1 dacc=1
Set servo 1 to position 100
Camera Light = [1]
ActionFollow line at center edge, offset 0
GotoBold fundet if Analog input 0 > 2500
Bold fundet
Luk boldfanger og kør frem langs linjen
InitialSet servo 1 to position -100
Set speed=0.50 m/s acc=1 dacc=1
Reset encoders
ActionFollow line at center edge, offset 0
GotoOp ad rampen if left encoder > 200.0 cm
Op ad rampen
Der køres efter højre kant for at undgå forgreningerne til venstre
InitialReset encoders
ActionFollow line at right edge, offset 0
GotoLige frem mod hul if left encoder > 509.7 cm
Lige frem mod hul
InitialReset encoders
ActionDrive straight distance 59.8 cm at maximum speed 5
GotoDreje mod hul if At position
Dreje mod hul
Bolden burde komme i hul i denne state - men der er ikke noget tjek om det rent faktisk sker
InitialReset encoders
ActionDrive radius 60 cm 23 deg. at maximum speed 5
GotoTilbage mod linje if At position
Tilbage mod linje
InitialReset encoders
ActionDrive straight distance -59.8 cm at maximum speed 10
GotoFølge streg ned af rampe if At position
Følge streg ned af rampe
InitialSet speed=0.50 m/s acc=1 dacc=1
Set servo 1 to position 100
ActionFollow line at center edge, offset 0
GotoVende 1 if left encoder > 259.8 cm
Vende 1
For foden af rampen vendes
ActionDrive radius 28 cm -90 deg. at maximum speed 20
GotoVende 2 if At position
Vende 2
ActionDrive radius 28 cm 270 deg. at maximum speed 20
GotoOp ad rampen igen if At position
Op ad rampen igen
InitialReset encoders
Set speed=0.50 m/s acc=1 dacc=1
Set servo 1 to position 100
ActionFollow line at center edge, offset 0
GotoOp ad rampe 2 if left encoder > 120.0 cm
Op ad rampe 2
Hastighedsregulatorens I-led bruges til at finde toppen af rampen
InitialSet speed=0.25 m/s acc=1 dacc=1
ActionFollow line at center edge, offset 0
GotoCirkelbue mod bold if I-value < 2500
Cirkelbue mod bold
Næste state nås enten hvis robotten når en bestemt position eller hvis bolden er fundet
ActionDrive radius 52 cm 142 deg. at maximum speed 10
GotoBakke med bold if At position
Bakke med bold if Analog input 0 > 2500
Bakke med bold
InitialSet servo 0 to position -127
Set speed=-0.25 m/s acc=1 dacc=1
Reset encoders
Set servo 1 to position -100
ActionDo nothing
GotoFølge linje mod hul if right encoder < -69.7 cm
Følge linje mod hul
InitialSet speed=0.25 m/s acc=1 dacc=1
Reset encoders
ActionFollow line at center edge, offset 0
GotoMod hul (uden linje) if left encoder > 49.9 cm
Mod hul (uden linje)
ActionDrive radius 57 cm 45 deg. at maximum speed 10
GotoTilbage efter hul if At position
Tilbage efter hul
Kuglen falder i hullet i denne eller foregående state
InitialSet speed=-0.25 m/s acc=1 dacc=1
Set servo 0 to position -127
Reset encoders
ActionDo nothing
GotoNed af rampe if right encoder < -45.5 cm
Ned af rampe
InitialSet speed=0.25 m/s acc=1 dacc=1
Reset encoders
ActionFollow line at center edge, offset 0
GotoFinde streg til højre if right encoder > 249.9 cm
Finde streg til højre
Vippen står til højre
InitialSet speed=0.12 m/s acc=1 dacc=1
Reset encoders
Set servo 1 to position 100
ActionFollow line at center edge, offset 0
GotoDreje ud mod vippe if line to the right
Dreje ud mod vippe
InitialReset encoders
Set servo 1 to position 100
ActionDrive radius 28 cm 95 deg. at maximum speed 10
GotoLidt frem på vippe if At position
Lidt frem på vippe
Lidt frem for at sikre at stregen kan ses af kameraet
InitialReset encoders
ActionDrive straight distance 19.8 cm at maximum speed 10
GotoPå vippe if At position
På vippe
InitialSet speed=0.25 m/s acc=1 dacc=1
ActionFollow line at center edge, offset 0
GotoEfter vippe if No line
Efter vippe
Lidt frem
InitialReset encoders
ActionDrive straight distance 55.0 cm at maximum speed 10
GotoDreje mod tunnel if At position
Dreje mod tunnel
InitialReset encoders
ActionDrive radius 65 cm -90 deg. at maximum speed 15
GotoFrem mod tunnel if At position
Frem mod tunnel
InitialReset encoders
Set speed=0.50 m/s acc=1 dacc=1
ActionDrive straight
GotoVent if left encoder > 19.8 cm
Vent
Robotten kører ind i tunnelen for at rette op
InitialSet speed=0.00 m/s acc=10 dacc=10
ActionDo nothing
GotoVæk fra tunnel if Time > 1.50 s
Væk fra tunnel
InitialReset encoders
Set speed=-0.25 m/s acc=1 dacc=1
Set servo 0 to position 0
ActionDo nothing
GotoÅbne dør if left encoder < -44.7 cm
Åbne dør
ActionDrive radius 40 cm 115 deg. at maximum speed 25
GotoGennem åben dør if At position
Gennem åben dør
InitialReset encoders
ActionDrive radius 33 cm -197 deg. at maximum speed 20
GotoFrem gennem tunnel if At position
Frem gennem tunnel
InitialReset encoders
ActionDrive straight distance 120.0 cm at maximum speed 10
GotoEfter tunnel 1 if At position
Efter tunnel 1
Drej 180 grader rundt om tunnel
InitialReset encoders
ActionDrive radius 40 cm 180 deg. at maximum speed 20
GotoEfter tunnel 2 if At position
Efter tunnel 2
Lige frem så stregen krydses
InitialReset encoders
ActionDrive straight distance 169.9 cm at maximum speed 20
GotoEfter tunnel 3 if At position
Efter tunnel 3
Dreje tilbage mod linje
ActionDrive radius 35 cm -180 deg. at maximum speed 20
GotoFrem mod linje if At position
Frem mod linje
InitialSet speed=0.25 m/s acc=1 dacc=1
Reset encoders
ActionDrive straight
GotoFrem mod keglebane 1 if One line
Frem mod keglebane 1
InitialSet speed=0.75 m/s acc=1 dacc=1
Reset encoders
ActionFollow line at center edge, offset 0
GotoFrem mod keglebane 2 if right encoder > 400.0 cm
Frem mod keglebane 2
Finde flisen før rampen (bruges til at måle afstanden til foden af rampen)
InitialSet speed=0.25 m/s acc=1 dacc=1
ActionFollow line at center edge, offset 0
GotoFrem mod keglebane 3 if background is dark
Frem mod keglebane 3
Kør efter venstre kant for at undgå at roobtten følger flisekanten til højre
InitialSet speed=0.75 m/s acc=1 dacc=1
Reset encoders
ActionFollow line at left edge, offset 0
GotoFrem mod keglebane 4 if left encoder > 99.8 cm
Frem mod keglebane 4
Op og ned ad rampe
InitialSet speed=0.75 m/s acc=1 dacc=1
Reset encoders
ActionFollow line at right edge, offset 0
GotoFrem mod keglebane 5 if left encoder > 789.6 cm
Frem mod keglebane 5
InitialSet speed=0.25 m/s acc=1 dacc=1
Reset encoders
ActionFollow line at center edge, offset 0
GotoFrem mod keglebane 6 if left encoder > 99.8 cm
Frem mod keglebane 6
Ud fra steg. Formålet er at komme til at køre på stregen fra trappen
InitialReset encoders
ActionDrive radius 35 cm -90 deg. at maximum speed 20
GotoFrem mod keglebane 7 if At position
Frem mod keglebane 7
Ind på steg efter trappe. Denne streg går lige mod keglebanen
ActionDrive radius 33 cm 90 deg. at maximum speed 20
GotoFind tværstreg ved kegler if At position
Find tværstreg ved kegler
InitialSet speed=0.12 m/s acc=1 dacc=1
ActionFollow line at center edge, offset 0
GotoDreje ind til kegler if button front left is on
Dreje ind til kegler
ActionDrive radius 28 cm -85 deg. at maximum speed 10
GotoLinje ved kegler if At position
Linje ved kegler
InitialSet speed=0.12 m/s acc=1 dacc=1
ActionFollow line at center edge, offset 0
GotoUd fra streg if No line
Ud fra streg
ActionDrive radius 90 cm -48 deg. at maximum speed 20
GotoRundt om kegler if At position
Rundt om kegler
ActionDrive radius 102 cm 274 deg. at maximum speed 20
GotoInd mod streg if At position
Ind mod streg
ActionDrive radius 60 cm -47 deg. at maximum speed 20
GotoFind streg efter kegler if At position
Find streg efter kegler if One line
Find streg efter kegler
InitialSet speed=0.12 m/s acc=1 dacc=1
ActionFollow line at center edge, offset 0
GotoDrej mod mål if All line
Drej mod mål
ActionDrive radius 28 cm -85 deg. at maximum speed 10
GotoMod mål if At position
Mod mål
InitialSet speed=0.25 m/s acc=1 dacc=1
Reset encoders
Set servo 1 to position 100
ActionFollow line at center edge, offset 0
GotoDelay if left encoder > 259.8 cm
Delay
Robotten kan ikke altid trykke målpladen ind... Vi venter lige lidt hvis den ikke har trykket pladen ind, for at få lidt reaktion af publikum
ActionDo nothing
GotoVæk fra mål if Time > 5.00 s
Væk fra mål
Golfboldfanger køres ned
InitialSet servo 0 to position 0
Set speed=-0.25 m/s acc=1 dacc=1
Reset encoders
Set servo 1 to position -100
ActionDo nothing
GotoTilbage mod mål if left encoder < -9.9 cm
Tilbage mod mål
InitialReset encoders
ActionDrive straight distance 34.8 cm at maximum speed 10
GotoSlut if At position
Slut
Så skulle robotten være i mål og målpladen trykket ind
InitialSet speed=0.00 m/s acc=10 dacc=10
Set servo 1 to position -100
ActionDo nothing
GotoSlut if Never