Tilstandsmaskine: 2006-finale

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

Hver state består af tre ting:

Tilstandsmaskinen består af 65 tilstande.
Start
Stille og roligt mod guillotinen
InitialSet speed=0.88 m/s acc=5 dacc=1
Reset encoders
Set linesensor threshold=160, background=127, line color=black
ActionFollow line at center edge, offset 0
GotoFlise 1 if All line
Flise 1
Willy ser dårligt på fliserne - kør over dem med lukkede øjne
InitialSet servo 0 to position -40
Reset encoders
ActionDo nothing
GotoMellem to første fliser if left encoder > 44.7 cm
Mellem to første fliser
InitialSet speed=0.50 m/s acc=1 dacc=1
ActionFollow line at left edge, offset 0
GotoFlise 2 if All line
Flise 2
Willy ser dårligt på fliserne - kør over dem med lukkede øjne
InitialSet servo 0 to position -47
Reset encoders
ActionDo nothing
GotoRacerbane 1 if left encoder > 44.0 cm
Racerbane 1
Hurtigt indtil svinget
InitialSet speed=1.50 m/s acc=5 dacc=1
Set linesensor threshold=160, background=127, line color=black
Reset encoders
ActionFollow line at center edge, offset 3
GotoRacerbane 2 if left encoder > 409.9 cm
Racerbane 2
Lidt langsommere i svinget
InitialSet speed=1.12 m/s acc=1 dacc=1
Reset encoders
ActionFollow line at center edge, offset 5
GotoRacerbane 3 if left encoder > 264.9 cm
Racerbane 3
Hurtigt på langsiden
InitialSet speed=1.62 m/s acc=8 dacc=1
Reset encoders
ActionFollow line at center edge, offset 3
GotoRacerbane 4 if left encoder > 329.9 cm
Racerbane 4
Sænk hastigheden før flisen
InitialSet speed=0.50 m/s acc=1 dacc=3
Set linesensor threshold=160, background=127, line color=black
ActionFollow line at center edge, offset 0
GotoFlise efter racerbane if All line
Flise efter racerbane
Willy ser dårligt på fliserne - kør over dem med lukkede øjne
InitialSet servo 0 to position -35
Reset encoders
Set speed=0.50 m/s acc=1 dacc=5
ActionDo nothing
GotoMellem 3. og 4. flise if right encoder > 49.9 cm
Mellem 3. og 4. flise
ActionFollow line at center edge, offset 0
GotoFlise 4 if All line
Flise 4
Willy ser dårligt på fliserne - kør over dem med lukkede øjne
InitialSet servo 0 to position -35
Reset encoders
ActionDo nothing
GotoTil første blinkende port if left encoder > 44.7 cm
Til første blinkende port
Kør hen mod den blinkende port. Afstanden til porten måles fra flisekanten
InitialSet speed=0.25 m/s acc=1 dacc=1
Set linesensor threshold=160, background=127, line color=black
Reset encoders
ActionFollow line at center edge, offset 0
GotoBak væk fra port 1 if left encoder > 175.8 cm
Bak væk fra port 1
Robotten skal holde vinkelret ind mod porten, for at kunne se de blinkende dioder, så der skal lige navigeres lidt
InitialSet speed=-0.25 m/s acc=3 dacc=3
Set servo 0 to position -127
Reset encoders
ActionDo nothing
GotoBak væk fra port 2 if right encoder < -99.8 cm
Bak væk fra port 2
InitialSet servo 0 to position 127
Reset encoders
ActionDo nothing
GotoFrem mod streg if right encoder < -24.9 cm
Frem mod streg
InitialSet speed=0.18 m/s acc=1 dacc=1
Set servo 0 to position 0
ActionDo nothing
GotoLidt længere frem if All line
Lidt længere frem
Sådan. Med linjesensoren 1.6 cm inde over stregen er lyssensoren placeret ud for porten.
InitialReset encoders
ActionDo nothing
GotoVent på værdi fra blink sensor if left encoder > 1.6 cm
Vent på værdi fra blink sensor
Der skal lige ventes lidt, så softwaren kan finde ud af om der er noget der binker med 1 Hz
InitialSet speed=0.00 m/s acc=100 dacc=100
ActionDo nothing
GotoVælg hvilken port der skal køres gennem if Time > 1.50 s
Vælg hvilken port der skal køres gennem
Analog 4 er et filtreret signal. Robotten sampler en fotodiode 50 gange i sekundet. Løbende beregnes middelværdien af disse 50 samples. Hvis ca. halvdelen af samples ligger et stykke over middelværdien, og den anden halvdel ligger under middelværdien, sættes analog 4 = 800 - ellers sættes den til 0
ActionDo nothing
GotoGennem første blinkende port 1 if Analog input 4 < 150
Uden om første blinkende port 1 if Analog input 4 > 650
Gennem første blinkende port 1
Navigiation gennem første port
InitialSet speed=-0.25 m/s acc=3 dacc=3
Set servo 0 to position 0
Reset encoders
ActionDo nothing
GotoGennem første blinkende port 2 if left encoder < -4.8 cm
Gennem første blinkende port 2
InitialSet servo 0 to position -127
Set speed=0.50 m/s acc=1 dacc=1
Reset encoders
ActionDo nothing
GotoUden om anden blinkende port 1 if right encoder > 69.7 cm
Uden om anden blinkende port 1
Navigaiton uden om anden port
InitialSet servo 0 to position 0
Reset encoders
ActionDo nothing
GotoUden om anden blinkende port 2 if left encoder > 80.0 cm
Uden om anden blinkende port 2
InitialSet servo 0 to position 60
Reset encoders
ActionDo nothing
GotoUden om anden blinkende port 3 if right encoder > 59.8 cm
Uden om anden blinkende port 3
InitialSet servo 0 to position -20
ActionDo nothing
GotoFølg linie mod tunnel if One line
Uden om første blinkende port 1
Navigation uden om første port
InitialReset encoders
Set speed=-0.50 m/s acc=1 dacc=1
Set servo 0 to position -60
ActionDo nothing
GotoUden om første blinkende port 2 if right encoder < -49.9 cm
Uden om første blinkende port 2
InitialSet servo 0 to position 0
Reset encoders
ActionDo nothing
GotoUden om første blinkende port 3 if left encoder < -49.9 cm
Uden om første blinkende port 3
InitialSet servo 0 to position -70
Reset encoders
Set speed=0.50 m/s acc=4 dacc=1
ActionDo nothing
GotoGennem anden blinkende port if right encoder > 89.9 cm
Gennem anden blinkende port
Navigation gennem anden port
InitialSet servo 0 to position -25
Reset encoders
ActionDo nothing
GotoFølg linie mod tunnel if right encoder > 30.5 cm
Følg linie mod tunnel
InitialSet speed=0.25 m/s acc=1 dacc=1
Set linesensor threshold=160, background=127, line color=black
ActionFollow line at left edge, offset 0
GotoBak tilbage ved tunnel if button front left, or front right is on
Bak tilbage ved tunnel
InitialSet servo 0 to position -100
Set speed=-0.55 m/s acc=1 dacc=10
Reset encoders
ActionDo nothing
GotoFortsæt bagud forbi låge if right encoder < -155.6 cm
Fortsæt bagud forbi låge
InitialSet servo 0 to position 0
Reset encoders
ActionDo nothing
GotoRet op if left encoder < -59.8 cm
Ret op
Så robotten er parallel med tunnel side
InitialSet servo 0 to position 52
Reset encoders
ActionDo nothing
GotoFremad for at åbne tunnel dør if left encoder < -24.9 cm
Fremad for at åbne tunnel dør
InitialSet speed=0.75 m/s acc=10 dacc=1
Set servo 0 to position 0
Reset encoders
ActionDo nothing
GotoLidt væk fra tunnel if right encoder > 29.7 cm
Lidt væk fra tunnel
Robotten kan ikke dreje helt skarpt nok ind til linien, så den skal lige lidt væk først
InitialSet speed=0.50 m/s acc=40 dacc=40
Reset encoders
Set servo 0 to position 60
ActionDo nothing
GotoGennem åben dør if right encoder > 24.9 cm
Gennem åben dør
InitialSet servo 0 to position -127
Reset encoders
Set speed=0.50 m/s acc=1 dacc=1
ActionDo nothing
GotoLinie gennem tunnel if right encoder > 104.9 cm
Linie gennem tunnel
InitialSet speed=0.38 m/s acc=1 dacc=1
Reset encoders
Set linesensor threshold=160, background=127, line color=black
ActionFollow line at center edge, offset 0
GotoForbi flise efter tunnel if All line
Forbi flise efter tunnel
Robotten har problemer med fliserne, så der køres med fast vinkel på forhjulene, når fliserne nås.Denne state kan også være nået, hvis robotten ikke ramte lågen, som derfor ikke er åbnet. I så fald vil robotten nu være kørt ind i lågen, hvorfor den nu skal forsøge at åbne den igen
InitialSet servo 0 to position -7
Reset encoders
Set servo 1 to position 127
Set servo 2 to position -40
ActionDo nothing
GotoHen mod opsamling af første bold if left encoder > 44.4 cm
Bak tilbage ved tunnel if button front left, or front right is on
Hen mod opsamling af første bold
ActionFollow line at left edge, offset 0
GotoTag første bold if Analog input 0 > 3800
Tag første bold
Robottens næb lukkes
InitialSet servo 2 to position 127
Set speed=0.50 m/s acc=1 dacc=1
Set linesensor threshold=160, background=127, line color=black
ActionFollow line at center edge, offset 0
GotoFlise før rampe if All line
Flise før rampe
InitialReset encoders
Set servo 0 to position -70
ActionDo nothing
GotoOp ad rampe if right encoder > 49.9 cm
Op ad rampe
InitialSet speed=0.50 m/s acc=5 dacc=1
Reset encoders
Set linesensor threshold=140, background=127, line color=black
ActionFollow line at right edge, offset 0
GotoPå rampe if left encoder > 599.9 cm
På rampe
InitialSet speed=0.12 m/s acc=1 dacc=1
Reset encoders
ActionFollow line at right edge, offset 0
GotoHen mod hullet med bolden if left encoder > 40.0 cm
Hen mod hullet med bolden
Bolden kommer i hul i denne eller den næste state
InitialSet speed=0.12 m/s acc=1 dacc=1
Set servo 0 to position 33
Reset encoders
ActionDo nothing
GotoBak tilbage mod steg if left encoder > 50.3 cm
Bak tilbage mod steg
InitialSet servo 0 to position 0
Set speed=-0.25 m/s acc=1 dacc=1
Reset encoders
ActionDo nothing
GotoNed af rampe if left encoder < -49.9 cm
Ned af rampe
Golfarmen hæves igen
InitialSet speed=0.25 m/s acc=1 dacc=1
Set linesensor threshold=100, background=127, line color=black
Reset encoders
Set servo 1 to position -127
ActionFollow line at center edge, offset 0
GotoBakke op ad rampe if right encoder > 200.0 cm
Bakke op ad rampe
Langsomt, da hjulene skrider på rampen.
InitialSet servo 0 to position 0
Set speed=-0.25 m/s acc=50 dacc=50
Reset encoders
ActionDo nothing
GotoBakke op ad rampe 2 if left encoder < -29.7 cm
Bakke op ad rampe 2
Det bakkes indtil motorregulerings I-værdi begynder at stige (fra meget negativ mod 0), hvilket er ensbetydende med, at robotten nu står på podiet. (forige state hvor der bakkes 30 cm tilbage er indsat, for at I-værdien kan nå at blive meget negativ)
InitialReset encoders
ActionDo nothing
GotoPå podie 1 if I-value > -1700
På podie 1
Bak tilbage
InitialSet servo 0 to position -90
Reset encoders
ActionDo nothing
GotoPå podie 2 if left encoder < -24.9 cm
På podie 2
Bak tilbage
InitialSet servo 0 to position 90
Reset encoders
ActionDo nothing
GotoPå podie 3 if right encoder < -27.7 cm
På podie 3
Frem mod trappe
InitialSet servo 0 to position -100
Set speed=0.25 m/s acc=10 dacc=10
Reset encoders
ActionDo nothing
GotoPå podie 4 if left encoder > 17.8 cm
På podie 4
Mod steg ved trappe
InitialSet servo 0 to position 80
Reset encoders
ActionDo nothing
GotoNed ad trappe if One line
Ned ad trappe
InitialSet speed=0.50 m/s acc=2 dacc=2
Set linesensor threshold=160, background=127, line color=black
Reset encoders
ActionFollow line at center edge, offset 0
GotoTil flise efter væg if left encoder > 259.8 cm
Til flise efter væg
Willy har ikke umiddelbart mulighed for at se den stump streg, der er ved vægen. Derfor køres hen til flisen efter vægen
InitialSet speed=0.50 m/s acc=1 dacc=1
Set linesensor threshold=160, background=127, line color=black
ActionFollow line at right edge, offset 0
GotoTilbage til væg if All line
Tilbage til væg
Og herfra bakkes der så tilbage til vægen
InitialSet servo 0 to position 0
Set speed=-0.25 m/s acc=5 dacc=5
Reset encoders
ActionDo nothing
GotoDrej ind mod væg if right encoder < -94.6 cm
Drej ind mod væg
InitialSet servo 0 to position -127
Reset encoders
Set speed=0.25 m/s acc=5 dacc=5
ActionDo nothing
GotoFølge væg 1 if right encoder > 45.5 cm
Følge væg 1
InitialSet speed=0.38 m/s acc=1 dacc=1
ActionFollow wall at distance 30.0 cm
GotoDreje rundt om væg if distance sensor 1 > 50.0 cm
Dreje rundt om væg
InitialSet servo 0 to position -120
Reset encoders
Set speed=0.50 m/s acc=2 dacc=1
ActionDo nothing
GotoFølge væg 2 if right encoder > 120.0 cm
Følge væg 2
InitialSet speed=0.38 m/s acc=1 dacc=1
ActionFollow wall at distance 30.0 cm
GotoDrej ind på streg if One line
Drej ind på streg
InitialSet servo 0 to position -127
Set speed=0.38 m/s acc=5 dacc=5
Reset encoders
ActionDo nothing
GotoTilbage for at undgå portben if right encoder > 21.8 cm
Tilbage for at undgå portben
InitialSet speed=-0.25 m/s acc=1 dacc=10
Reset encoders
Set servo 0 to position 60
ActionDo nothing
GotoEfter væg if One line
Efter væg
InitialSet speed=0.50 m/s acc=2 dacc=1
Reset encoders
Set linesensor threshold=160, background=127, line color=black
ActionFollow line at center edge, offset 0
GotoTil flise efter væg if left encoder > 19.8 cm
Til flise efter væg
InitialSet speed=0.88 m/s acc=1 dacc=1
Set linesensor threshold=160, background=127, line color=black
ActionFollow line at right edge, offset 0
GotoFlise efter væg if All line
Flise efter væg
I blinde som sædvanligt
InitialSet servo 0 to position 0
Reset encoders
ActionDo nothing
GotoTil mål flise if left encoder > 59.8 cm
Til mål flise
InitialSet speed=0.50 m/s acc=1 dacc=1
ActionFollow line at center edge, offset 0
GotoTil mål if All line
Til mål
De sidste 30 cm køres også i blinde
InitialSet servo 0 to position 0
ActionDo nothing
GotoStop if button front left, or front right is on
Stop
Juhuu.... så er vi i mål
InitialSet speed=0.00 m/s acc=10 dacc=10
ActionDo nothing
GotoFølge væg 1 if Never