Tilstandsmaskine: 2005-finale

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

Hver state består af tre ting:

Tilstandsmaskinen består af 62 tilstande.
Start
InitialSet speed=1.25 m/s acc=5 dacc=1
Set linesensor threshold=160, background=100, line color=black
Reset encoders
Set servo 1 to position 127
ActionFollow line at center edge
GotoMod væg port if left encoder > 349.7 cm
Mod væg port
InitialSet speed=1.00 m/s acc=1 dacc=1
Reset encoders
Set servo 0 to position -61
Reset encoders
ActionDo nothing
GotoLige mod væg if right encoder > 49.9 cm
Lige mod væg
InitialReset encoders
Set speed=0.62 m/s acc=1 dacc=1
ActionDrive straight
GotoFinde streg ved væg if left encoder > 175.8 cm
Finde streg ved væg
InitialSet servo 0 to position -80
ActionDo nothing
GotoStreg ved væg if left encoder > 34.8 cm
Streg ved væg
InitialSet speed=0.25 m/s acc=2 dacc=2
ActionFollow line at center edge
GotoDrej tæt på væg if All line
Drej tæt på væg
InitialSet speed=0.50 m/s acc=1 dacc=1
Set servo 0 to position -127
Reset encoders
ActionDo nothing
GotoDrej ud fra væg if right encoder > 80.4 cm
Drej ud fra væg
InitialSet servo 0 to position 90
Reset encoders
ActionDo nothing
GotoFølge væg 1 if left encoder > 30.5 cm
Følge væg 1
InitialSet speed=0.50 m/s acc=1 dacc=1
ActionFollow wall at distance 20.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
GotoVenstre kant mod fri port if left encoder > 59.8 cm
Venstre kant mod fri port
Følger flisekant
InitialReset encoders
Set speed=0.50 m/s acc=1 dacc=1
ActionFollow line at left edge
GotoDrej ud til fri if left encoder > 135.4 cm
Drej ud til fri
InitialSet servo 0 to position -80
Reset encoders
ActionDo nothing
GotoRet op mod tunnel if right encoder > 33.7 cm
Ret op mod tunnel
InitialSet servo 0 to position 60
Reset encoders
ActionDo nothing
GotoForbi fliser if left encoder > 53.9 cm
Forbi fliser
InitialReset encoders
Set servo 0 to position 0
ActionDrive straight
GotoFind linie ved tunnel if left encoder > 160.0 cm
Find linie ved tunnel
InitialReset encoders
ActionDrive straight
GotoDrej ind på linie ved tunnel if left encoder > 69.7 cm
Drej ind på linie ved tunnel if One line
Drej ind på linie ved tunnel
InitialSet servo 0 to position -40
Reset encoders
ActionDo nothing
GotoFølg linie mod tunnel if right encoder > 14.7 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 center edge
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
ActionFollow line at center edge
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 75
Reset encoders
ActionDo nothing
GotoLinje før racerbane if left encoder > 50.7 cm
Bak tilbage ved tunnel if button front left, or front right is on
Linje før racerbane
InitialSet speed=0.75 m/s acc=2 dacc=1
Set linesensor threshold=160, background=100, line color=black
ActionFollow line at left edge
GotoFlise før racerbane if All line
Flise før racerbane
Robot har problemer med fliserne, så der køres med fast vinkel på forhjulene, når fliserne nås.
InitialSet servo 0 to position -17
Set speed=1.50 m/s acc=3 dacc=1
Reset encoders
ActionDo nothing
GotoRacerbane 1 if left encoder > 49.9 cm
Racerbane 1
InitialReset encoders
ActionFollow line at center edge
GotoRacerbane 2 if left encoder > 269.3 cm
Racerbane 2
Sving tages med lavere hastighed
InitialSet speed=1.12 m/s acc=5 dacc=1
Reset encoders
ActionFollow line at center edge
GotoRacerbane 3 if left encoder > 219.4 cm
Racerbane 3
Sving tages med lavere hastighed
InitialSet speed=1.12 m/s acc=2 dacc=1
Reset encoders
ActionDo nothing
GotoRacerbane 4 if left encoder > 59.8 cm
Racerbane 4
Lige ud, så sæt farten op (lav acceleration)
InitialSet speed=1.50 m/s acc=1 dacc=5
Reset encoders
ActionFollow line at center edge
GotoFlise efter racerbane if All line
Flise efter racerbane
InitialSet servo 0 to position -10
Reset encoders
Set speed=0.75 m/s acc=5 dacc=5
ActionDo nothing
GotoLinje efter racerbane if left encoder > 49.9 cm
Linje efter racerbane
InitialSet speed=0.50 m/s acc=5 dacc=5
Set linesensor threshold=160, background=127, line color=black
ActionFollow line at center edge
GotoFlise før rampe if All line
Flise før rampe
InitialSet servo 0 to position -43
Reset encoders
ActionDo nothing
GotoOp ad rampe if right encoder > 40.0 cm
Op ad rampe
InitialReset encoders
Set linesensor threshold=160, background=127, line color=black
Set speed=1.25 m/s acc=2 dacc=5
ActionFollow line at center edge
GotoForbi forgrening mod trappe if left encoder > 480.0 cm
Forbi forgrening mod trappe
InitialReset encoders
Set linesensor threshold=80, background=127, line color=black
Reset encoders
Set speed=1.00 m/s acc=3 dacc=3
ActionFollow line at right edge
GotoNed af rampe if left encoder > 109.7 cm
Ned af rampe
InitialSet speed=0.25 m/s acc=1 dacc=1
Set linesensor threshold=100, background=127, line color=black
Reset encoders
ActionFollow line at center edge
GotoBakke op ad rampe if right encoder > 209.9 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 116
Reset encoders
ActionDo nothing
GotoFør trappe if One line
Før 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
GotoEfter trappe if left encoder > 259.8 cm
Efter trappe
Bak tilbage for at rette op
InitialSet servo 0 to position 0
Reset encoders
Set speed=-0.50 m/s acc=3 dacc=3
Set servo 1 to position 100
ActionDo nothing
GotoFrem mod bold if right encoder < -49.9 cm
Frem mod bold
Sænk boldfanger halvt ned
InitialReset encoders
Set speed=0.62 m/s acc=1 dacc=1
Set servo 0 to position 13
Set servo 1 to position -90
ActionDo nothing
GotoDreje mod bold if left encoder > 109.7 cm
Dreje mod bold
InitialSet servo 0 to position -127
Reset encoders
ActionDo nothing
GotoHen til bold if right encoder > 54.6 cm
Hen til bold
Bolden ender under boldfanger i denne state
InitialSet speed=0.38 m/s acc=1 dacc=1
Reset encoders
ActionFollow line at center edge
GotoMed bold if left encoder > 69.7 cm
Med bold
Boldfanger sænkes yderligere
InitialSet speed=0.75 m/s acc=1 dacc=1
Set servo 1 to position -120
ActionFollow line at center edge
GotoEfter bold-port, søg efter flisekant if left encoder > 329.9 cm
Efter bold-port, søg efter flisekant
InitialSet speed=0.25 m/s acc=1 dacc=1
Set linesensor threshold=160, background=127, line color=black
ActionFollow line at center edge
GotoFlise før rød port if All line
Flise før rød port
Boldfanger hæves, så bold kan trille væk samtidig med at der drejes
InitialSet servo 0 to position -52
Set speed=0.50 m/s acc=1 dacc=1
Reset encoders
Set servo 1 to position 127
ActionDo nothing
GotoLige ud før rød port if right encoder > 114.8 cm
Lige ud før rød port
For at komme forbi kabelbrønden, så flisernes kant kan følges
InitialReset encoders
ActionDrive straight
GotoFølg flisekant if left encoder > 40.0 cm
Følg flisekant
InitialReset encoders
Set speed=0.75 m/s acc=1 dacc=1
ActionFollow line at right edge
GotoEfter rød port if left encoder > 94.6 cm
Efter rød port
Drej væk fra flisekant
InitialSet servo 0 to position 110
Reset encoders
ActionDo nothing
GotoEfter rød port if left encoder > 44.7 cm
Efter rød port
Drej mod streg
InitialSet servo 0 to position -90
ActionDo nothing
GotoLinje efter rød port if One line
Linje efter rød port
InitialSet speed=0.75 m/s acc=1 dacc=1
ActionFollow line at center edge
GotoSidste flise if All line
Sidste flise
InitialSet servo 0 to position -35
Reset encoders
ActionDo nothing
GotoTil mål if right encoder > 40.0 cm
Til mål
ActionFollow line at center edge
GotoSlut if button front left, or front right is on
Slut
Stop robotten
InitialSet speed=0.00 m/s acc=5 dacc=5
ActionDo nothing
GotoSlut if Never