torsdag den 14. juni 2012

SumoWrestler - Konklusion

SumoWrestler endelig kode


Fremlæggelsen
Efter fremlæggelsen fik vi muligheden for at vise vores robotter frem for en besøgende folkeskolelærer og hans søn. Her gav vi sønnen mulighed for at konkurrere imod vores robotter ved at sætte den ene af vores robotter op til fjernstyring. På denne måde kunne han med stor glæde, spille imod vores AI. Vi har selv brugt fjernstyring af robotterne når vi skulle teste en bestemt feature på vores robot.
Dette åbner op for en helt ny mulighed for konkurrencen. Her går det ud på at lave en autonom robot, som kan slå en spiller-styret robot. Vores robotter havde f.eks. meget svært ved at vinde over spiller-styrede robotter. Dette er desuden en god mulighed for at inddrage publikum i sporten.  

Fremtidsperspektiver for projektet
Som beskrevet lige før, er det svært at lave en AI styret robot, som kan vinde over en fjernstyret robot. Dette skyldes især at personen der styrer robotten kan se hvor på banen robotterne er hele tiden. Dette kan vores programmerede robotter ikke. De kan kun se om de er nær en kant, eller om modstanderen er foran dem. Det vil derfor være oplagt, skulle man vælge at gå videre med projektet, at give robotterne større ‘overblik’. Dette kan f.eks. lade sig gøre ved at sætte et kamera i loftet, som så kan rapportere til robotterne om hvor de selv er, og hvor modstanderen er, samt i hvilken retning de vender. Med denne information kan robotterne bedre programmeres til at lave taktikker for at vinde over modstanderen. Dette kan f.eks. være at lokke modstanderen i en fælde, eller at lave komplicerede undvigelsesmanøvre. Dette ville især minimere fordelen som en spiller styret robot har.
 
En anden mulighed er at lade robotten køre rundt autonomt, men at lade våbenstyringen være spillerstyret. Dette gør våben mere praktiske, da de ville blive brugt på de rigtige tidspunkter.  

Generelt er der meget man kan gøre for at forbedre robotterne hvis der er meget tid til det. Konkurrencen skal dog helst kunne afholdes på en enkelt dag, så det er vigtigt, at det ikke bliver alt for kompliceret. Det vigtigste i konkurrencen er stadig underholdningsværdien. Det skal være sjovt og spændende for både publikum og deltagere.

Konklusion
Vi har fået testet en masse aspekter af sumobryder konkurrencen. Vi har ikke fokuseret på at bygge en super-robot, men i stedet holdt fokus på at undersøge konkurrencens elementer. Vi har undersøgt effekten af at skifte design på robotten, og testet disse ved utallige kampe. Resultatet af vores undersøgelser er følgende:

  • Vi er kommet frem til 3 potentielle regelændringer, som vi mener vil forbedre konkurrencen.
  • Vi har testet og konkluderet at en ultrasonic sensor er en klar fordel for en robot.
  • Vi har undersøgt betydningen af robottens hastighed og vægt for kampens udfald.
  • Vi har testet effekten af forskellige konstruktionsmuligheder på robottens trækevne.
  • Vi har undersøgt brugen af aktive våben på robotten, og konkluderet, at de er underholdende, selvom de ikke altid er praktiske.  
  • Vi har fået afholdt en masse kampe, og haft det sjovt med det.

Alt i alt har det været et sjovt, spændende og lærerigt projekt, hvor vi har nået de mål vi satte os for, og hvor vi er godt tilfredse med resultaterne.

SumoWrestler - Session 5

Til stede
Søren Bramer Schmidt, 20082602
Mikkel Nielsen, 20082285
Peter Jessen, 20082519

Tid brugt
3 timer

Mål
Målet med dagens lab session er at vurdere regel-ændringer til sumobryder konkurrencen.

Plan
Planen for idag er at vurdere to udleverede robotter bygget af gymnasieelever. Herudover vil vi se på, om reglerne for sumobryder robotterne skal ændres på baggrund af de undersøgelser vi har foretaget indtil videre.

Resultater
Test af udleverede robotter
Vi fik udleveret to fungerende robotter fra en lignende konkurrence holdt for gymnasieelever. Robotterne er vist på billedet her:






Den første robot er bygget med et højt tyngdepunkt og nogle lodrette sider. Forrest er der monteret en ‘sneplov’ der kan bruges til at skubbe modstanderen til siden ved en konfrontation. Denne robot har en svaghed overfor vores robotter med deres ramper. Det høje tyngdepunkt gør den nem at vælte, hvilket også blev vist med brug af krogen som det kan ses på videoen herunder. Robotter har modsat vores, ikke monteret en ultrasonic sensor. Dette gør robotten ‘dum’ i sammenligning med vores. Som vi allerede fandt ud af i pilot-projektet, er en ultrasonic sensor meget vigtig for succes. Evnen til at ‘se’ modstanderen gør, at man flere gange kan ramme ham ind fra siden.

 

Den anden udleverede robot er bygget med larvefødder. Disse larvefødder er så yderligere gearet ned for at opnå større momentum. Forrest har den monteret en rampe, for at komme under modstanderen.
Vores observation af denne robot er først og fremmest at den er kedelig at se på. De nedgearede larvefødder gør den meget langsom på banen, hvilket sænker hastigheden på hele spillet. Vi observerede også at det er vigtigt at rampen på robotten går helt ned til gulvet. Den udleverede robots rampe havde et lille mellemrum i mellem rampen og gulvet, hvilket netop var nok for vores robot til at kile sig ind. Derfor tabte denne robot ved direkte konfrontation med vores robotter. Vores robotter havde dog ikke kraften til at skubbe robotten fra siden, da larvefødderne gav den for meget vejgreb.

Generelt for de udleverede robotter var deres mangel på udsyn. Da de ikke er i stand til at observere modstanderen, er de tvunget til at køre forvildet omkring. Dette gør mange indbyrdes kampe kedelige da de ofte kører rundt uden at se hinanden. En måde hvorpå man kan ‘se’ modstanderen giver derfor ikke blot en taktisk fordel, men giver også nogle mere spændende kampe.  

Regelændringer
På baggrund af vores undersøgelser foreslår vi følgende regelændringer:

1. Forbud mod larvefødder
Vores kampe mod robotter med larvefødder har ført os til den konklusion at vi foreslår at der ikke må bruges. Larvefødderne giver så meget vejgreb, at en robot på under ét kilo ikke har kræfter nok til at skubbe til en robot der har larvefødder monteret. Dette selvom larvefødder-robotten står helt stille. Det giver derfor en uretfærdig fordel til larvefødder. Et andet, og nærmest mere vigtigt argument er, at larvefødderne gør en robot meget langsom. Dette har den effekt at en sumobryder kamp med larvefødder-robotter bliver kedelige at se på, da det nedsænker spillets hastighed. Det er en essentiel del af sporten, at det er underholdende at se på. Derfor vil vi, for at bevare underholdningsværdien, forbyde brugen af larvefødder.  

2. Give mulighed for vægt-tilførsel til den letteste robot.
Vi observerede i session 3, at vægt er meget vigtigt for kampens udfald. Reglerne siger allerede at en robot maksimalt må veje ét kilo, men som vores test viste, så kan selv en lille vægtforskel give fordel. En mulighed for at gøre konkurrencen mere lige, er at veje robotterne før kampen, og så tilføje bly-lod til den letteste robot, således at de opnår den samme kampvægt. På denne måde bliver vægt ikke en afgørende faktor, og konkurrencen kan derfor bestemmes ud fra taktik og konstruktion i stedet.   

3. Ændring af tildeling af point i konkurrencen
Reglerne for konkurrence er nu sådan, at vinderen modtager 2 point, og taberen 0 point. Ved uafgjort, dvs. ved at begge robotter kører af banen, eller 2 minutter er gået, tildeles hvert hold 1 point hver.
Vi foreslår at lave dette om. Vores mange testkampe har vist, at selv velbyggede robotter til tider laver fejl og kører af banen uprovokeret, enten på grund af lysforhold, eller baneforhold, eller noget helt tredje. Samtidig har vores undersøgelser vist, at robotten har svært ved at skubbe til en anden robot som står stille på banens ru overflade. Det er derfor en sikker strategi at lade sin robot kører til midten af banen og stoppe, da modstanderen derved næppe kan skubbe til den. På denne måde kan man enten håbe på at modstanderen kører af banen af sig selv, og dermed opnå 2 point, eller vente på at tiden går og dermed høste et point. I en liga opbygget konkurrence, hvor hvert point tæller er denne strategi desværre lidt for indbringende.

For at opfordre robotterne til at være offensive, og ikke benytte sig af for kedelige defensive strategier, foreslår vi at ændre reglerne. Ved at give 0 point til hvert hold ved uafgjort, tvinger man holdene til at offensivt gå efter modstanderen, da uafgjort er ligestillet med at tabe.

En anden tilføjelse til reglerne er at tildele point efter stil. Som vi undersøgte i session 4, er våben interessante for tilskuere, selvom de måske ikke altid er praktiske i brug. For at tilføje til spillets publikums-værdi, foreslår vi derfor at kampens dommer kan tildele et hold 1-2 ekstra point pr. kamp, for god stil ved brug af våben der virker. Disse point kan så både tildeles vinderen og taberen. God stil kan f.eks. være at bruge en krog til at vælte en modstander om på ryggen, eller en svingarm der slår modstanderen af banen. Dette er en opfordring til holdene om at lave sjove og spændende våben på deres robotter, da de dermed kan opnå ekstra point, og samtidig gøre konkurrencen mere spændende for publikum.  

Status
Vi fik afprøvet de 2 udleverede robotter og beskrevet deres styrker og svagheder. På baggrund af vores undersøgelser kom vi frem til 3 regelændringer, som vi mener vil gøre konkurrencen mere sjov og retfærdig. Det næste på programmet er præsentationen, som vi derfor vil bruge tid på at forberede.

SumoWrestler - Session 4

Til stede
Søren Bramer Schmidt, 20082602
Peter Jessen, 20082519
Mikkel Nielsen, 20082285

Tid brugt
4 timer

Mål
Målet med dagens lab session er at overveje og evt. afprøve forskellige aktive våben til robotten.

Plan
Vi vil brainstorme forskellige idéer til våben og overveje hvordan de ville kunne gøre sig gældende i en sumobrydningskamp. Derefter vil vi udvælge det våben, som vi synes er mest realistisk og effektivt.

Resultater
Efter vi fik brainstormet i gruppen kom vi frem til følgende idéer:

1. Sluk modstanderen
En meget besnærende ide er at udvikle en arm der kan trykke på modstanderen fra oven i håbet om at ramme sluk-knappen. Det ville være frydefuldt i ro og mag at kunne skubbe en forsvarsløs robot ud over kanten.
Det taler imod denne ide, at det vil være meget svært at ramme den lille knap. Desuden kræver den et ret hårdt tryk for at blive aktiveret.
Det vil være meget nemt at udvikle et forsvar mod dette angreb ved at beskytte knappen fysisk, eller simpelt hen deaktivere den i software.
I samme kategori er et angreb mod modstanderens ledninger. Enten ved at pille dem ud, eller klippe dem over.

2. Boksehandske
Vi ser ofte, at to robotter skubber hinanden front mod front uden, at de rigtig bevæger sig. Ideen er, at robotten skal kunne registrere, at modstanderen er umiddelbart foran den og aktivere en boksehandske, der skubber fremad mod modstanderen. Resultatet vil være at begge robotter bliver skubbet baglæns, så det vil være bedst hvis robotten først undersøger om den risikerer selv at ryge ud over kanten.
Selv hvis dette våben ikke er effektivt i forhold til at vinde, vil det gøre kampen mere interessant at se på fordi de situationer hvor robotterne står næsten stille og skubber på hinanden kan undgås.

3. Svingarm
Ligner boksehandsken, men i stedet for et fremadrettet stød rammer svingarmen modstanderen med en roterende bevægelse fra siden.

4. Løftehjul
Ved at placere et lille roterende hjul foran robotten, der lige akkurat ikke rører jorden er det muligt at “grave” sig ind under modstanderen og derved mindske deres fremdrift. På den måde bliver det nemmere at skubbe modstanderen.

5. Hacker angreb
Et rigtigt sjovt men måske også urealistisk angreb kunne være at sende malicious kode til fjendens robot, for f.eks. at få den til at køre ud over kanten selv. Eller måske for at gøre det endnu mere sjovt, få den til at gøre det modsatte af hvad den egentlig er programmeret til. Vi kom dog frem til, at det umiddelbart ikke kan lade sig gøre, da det kræver, at fjenden aktivt lytter på Bluetooth, da de jo har deres egen AI kørende.

6. Stealth
Ved et tidligere eksperiment med at udsmykke robotten fandt vi ud af, at hvis man placerer et stort plysdyr oven på robotten giver modstanderens ultralydssensor meget upålidelige resultater. Ofte rapporterer den en meget længere afstand end den faktiske, eller detekterer slet ikke robotten. Dette stemmer helt overens med vores erfaringer fra uge 2 [1], men vi havde ikke tænkt over, at det kunne bruges i denne sammenhæng.
Det er temmelig upraktisk at pakke sin robot ind i plysdyr, specielt hvis man ønsker at bruge aktive våben. Det er nok mere realistisk at bruge noget stof med en passende overflade til at beklæde enkelte sider eller dele på robotten.

7. Klo / Gaffeltruck
I sidste uge så vi at vejgreb er en af de vigtigste parametre for at vinde i sumo brydning. Ideen er derfor at bygge en klo foran på robotten som skal tage fat i modstanderen og forsøge at løfte den. På den måde mister modstanderen vejgreb, da den bliver lettere, og der måske ligefrem er nogle af dens hjul der mister kontakt til jorden. Samtidig øges vores eget vejgreb, da noget af modstanderens vægt overføres til vores robot. Det vil være en fordel hvis robotten er bygget på en måde så mest mulig vægt overføres til hjul med træk på, i stedet for støttehjul der ikke er koblet til en motor.
Det bedste vil selvfølgeligt være hvis kloen kan løfte robotten så meget at den vælter om på ryggen, da det udløser en direkte sejr, men det er ikke sikkert at kloen har kraft nok til det. Vi har forsøgt os med denne våbentype på vores robot. I vores forsøg er det kun lykkedes at vælte en enkelt robot som er bygget med et meget højt tyngdepunkt. Dette er demonstreret i følgende video:



Det er muligt at man ved at geare motoren kan vælte tungere robotter. Dette testede vi dog ikke.
Vi testede to metoder til at aktivere kloen: En med en touch sensor og en med en ultralydssensor. Med touch sensoren observerede vi at der var mange situationer hvor det havde været fordelagtigt at aktivere kloen, men hvor touch sensoren ikke blev aktiveret. Vi forsøgte at omgå dette problem ved at montere en form for støddæmper på sensoren som ville blive ramt af modstanderen i flere tilfælde. Vi fandt to problemer med denne løsning. For det første er det svært at aktivere sensoren når der kommer et skævt tryk, hvilket ofte er tilfældet når støddæmperen bliver ramt i en af siderne. For det andet gjorde støddæmperen at modstanderen blev holdt på længere afstand af vores robot end før, hvilket gjorde det sværere for kloen at holde fat.
Vi gik over til at bruge målinger fra ultralydssensoren til at aktivere kloen ved en fast afstand. Dette viste sig at virke meget bedre i praksis.



I forhold til de software ændringer som introduceringen af kloen medfører, så henviser vi lige til behavior-hierakiet fra session 2 igen:



For som man kan se, så ligger Attack under Detect Edge i hierakiet, hvilket betyder, at Attack skal kunne suppresses. Måden vi dog har valgt at implementere kloen på i vores Attack behavior gør, at vi ikke kan blive suppressed, når vi er ved at køre kloen op. Dette kan medføre, at vi kører ud over kanten, men da vi jo netop ikke ønsker at give op når vi har en fjende på kloen, så vil vi hellere end gerne køre ud over kanten, hvis vi samtidig har en fjende foran os.

Konkret har vi i Attack behavioren implementeret kloen således, at den bliver aktiveret, hvis man er under et angreb (altså er ved at køre mod en fjende) og fjenden samtidig er mindre end 15 cm fra en [2].

if (distance < 15) {

// Kør kloen op
// Sov i 500 ms
       // Start GoDown tråden, som kører kloen ned
}


class GoDown extends Thread {

public void run() {


                // Kør kloen ned


                // Sov i 500 ms


                // Stop kloen
}
}


Og da vi har sat det at køre kloen ned i en anden tråd sørger vi altså for, at vi godt kan blive suppresed af Detect Edge når vi kører kloen ned, og derfor ikke får de samme problemer som beskrevet før.

Status
Vi har beskrevet en række våbensystemer og afprøvet to i praksis. Stealth teknologi viste sig at være meget effektivt da det gør modstanderen ude af stand til at finde vores robot. Hvis en robot ikke er programmeret til at tage højde for denne situation kan den vise sig at klare sig dårligere end en robot der slet ikke benytter ultralydssensoren, da den tager nogle antagelser som ikke længere er korrekte.
En interessant observation er at brugen af våben gør kampene meget sjovere at se på. Det er derfor værd at overveje om de skal være obligatoriske, eller om de giver så stor fordel i kamp at deltagere frivilligt vil prioritere at bygge dem.

På nuværende tidspunkt er vi færdige med test delen af vores projekt, og derfor vil vi næste gang forsøge at konkludere på alle vores observationer undervejs.

Referencer
[1] LegoLAB Uge 2
[2] SumoWrestler AI

SumoWrestler - Session 3

Til stede
Søren Bramer Schmidt, 20082602
Mikkel Nielsen, 20082285
Peter Jessen, 20082519

Tid brugt
4 timer

Mål
I dag vil vi undersøge hvordan forskellige ændringer på robotten påvirker dens egenskaber i en sumo kamp. Målet er at få en større indsigt i disciplinen robot sumobrydning ved at finde ud af hvilke parametre de deltagende hold kan få mest ud af at optimere på.
 
Plan
Vores plan er at teste følgende hardware:

  1. Ændre hastighed via gearing

  1. Forskellige hjul og underlag

  1. Vægt

  1. 4-hjulstræk

  1. Tyngdepunkt


Resultater
1. Test af hastighed
Med gearing har vi mulighed for at øge hastigheden eller øge momentet. Selv uden gearing kan vi se, at robotten ikke kan bevare vejgrebet, når den kører og skubber en modstander. Hvis det skal give mening at øge momentet bliver man nødt til først at sikre bedre vejgreb, for eksempel ved at bruge larvefødder eller flere trækkende hjul.
Ved at øge farten kan man opnå større kraftoverførsel ved kollision med modstander-robotten og dermed teoretisk skubbe den ud over kanten udelukkende som følge af kollisionen. I praksis viste det sig, at det kun var muligt at skubbe modstanderen få centimeter i kollisionen, hvilket ikke er nok til at være afgørende. Samtidig betød den mere komplicerede konstruktion som gearingen resulterede i, samt den øgede rotationshastighed på hjulene, at de stod og hoppede. Dette betød, at der kun meget kortvarigt var vejgreb, hvorfor robotten blev meget nemmere at skubbe.
I sidste ende viste vores simple robot uden gearing sig at være bedst da den var mest stabil.





2. Test af forskellige hjul og underlag
Vi testede to typer hjul med samme omkreds men med forskelligt dækmønster:

Rough: Rundede dæk med et meget groft dækmønster 


Plain: Flade dæk med meget fint dækmønster




Vi testede vejgreb ved at fastgøre en elastik til banen og robotten, og se hvor langt den kunne strækkes.
Der var ikke den store forskel på de to dæktyper, men typen rough var en lille smule bedre end plain. Det skyldes formentligt, at banen vi kører på har et meget ru underlag. For at eftervise den hypotese testede vi også de to dæktyper på en glat overflade (en tavle). Her viste typen plain sig at være en lille smule bedre, men begge dæk havde markant dårligere vejgreb.

3. Test af vægt
Vi testede vægts indflydelse på vejgreb ved at montere en halv liter vand oven på robotten. Vores elastik test viste, at vægt gør en kæmpe forskel. Et halvt kilo ekstra betyder meget mere end dæktypen. Opmuntret af denne opdagelse gik vi igang med at køre en række testkampe mellem to ens robotter, hvor den ene havde monteret en halv liter vand. Når de to robotter var head on skubbede den tunge den anden ud af banen hver gang. Der lader ikke til at være nogen relevante ulemper ved at være et halvt kilo tungere. Vi kørte også nogle kampe mod en anden gruppes robot med larvefødder som vi ellers hidtil ikke har kunnet skubbe nogle vegne. Med vandet monteret kunne vi skubbe robotten. Larvefodsrobotten kunne stadig skubbe os når vi blev ramt fra siden.





4.Test af 4-hjulstræk
Vi monterede to hjul ved siden af hinanden på hver af de to motorer. Ligesom med gearingen resulterede vores mere ustabile konstruktion i en resonans i konstruktionen der gjorde at vi mistede vejgreb. Det ville være et interessant eksperiment at forsøge at bygge et tracktion control system, der bruger tacho counteren som input til at regulere hastigheden på hjulet når det mister vejgreb, men det er langt uden for scope.



5. Test af tyngdepunkt
Vi kiggede på forskellige robotter og nåede frem til følgende:
Lavt tyngdepunkt gør det sværere at vælte robotten.
Vores robot er baghjulstrukket, så det giver bedre vejgreb at flytte tyngdepunktet bagud. Til gengæld gør det det nemmere at at løfte robotten forfra.
Vores robot har en rampe foran med en hældning på cirka 45 grader, designet til at løfte modstander-robotten så den mister vejgreb. Det viste sig at den robot der havde tyngdepunktet længst fremme var mere tilbøjelig til at løfte den anden.

Status
Vi fik testet de ting vi gerne ville. Vi opdagede at vægt er enormt vigtigt man bør derfor overveje om vægt skal være mere reguleret end det er i de eksisterende regler.

Næste gang vil vi afholde en våben-dag, for at diskutere og afprøve forskellige våben, der kan gøre sig gældende i en sumobrydnings kamp.

SumoWrestler - Session 2

Til stede
Søren Bramer Schmidt, 20082602
Peter Jessen, 20082519
Mikkel Nielsen, 20082285

Tid brugt
5 timer

Mål
Målet med dagens session er at få bygget to standard-robotter, som vi kan bruge til gradvist at udvikle vores software og hardware på. Derefter vil vi begynde at lægge AI’er ned på vores robotter således, at vi allerede nu kan begynde at gøre iagttagelser, når robotterne kæmper mod hinanden. Sidst men ikke mindst vil vi også undersøge hvad en rampe foran og anti-stejle bøjler bagpå gør for vinderchancerne for en sumobryder robot.

Plan
Planen er som følgende, vi vil:

  1. Bygge 2 basis robotter

  1. Introducere AI til vores robotter

  1. Teste rampe foran, anti-stejle bøjler bagpå og begge dele samtidig.

Resultater
1. Bygge basis robotter
Som udgangspunkt for vores basis-robot benytter vi os af en gammel kending, nemlig 5 Minute Bot [1], som vi har erfaring med fra tidligere. Grunden til, at vi vælger 5 Minute Bot som basis for vores robot er, at den har en meget simpel struktur. Dette gør, at vi med gradvise ændringer til hardwaren og softwaren forhåbentlig vil kunne se forbedringer eller forringelser, som vi så vil tage til eftertragtning og derved enten implementere eller ej. Det eneste helt essentielle vi allerede nu tilføjer til 5 Minute Bot er en lyssensor og en afstandssensor. Den første del, altså lyssensoren er meget vigtigt forsvar, da vi således kan tjekke, at vi ikke selv kører ud over kanten af banen. Den anden del, afstandssensoren, er vigtig i forhold til et mulig angreb på modstander-robotten, da vi via via den kan se, om der er en fjende på banen.







2. Introducere AI til vores robotter
Efter lidt diskussion i gruppen blev vi hurtige enige om, at vi ønskede vores robotter skulle styres ved hjælp af behavior-based styring [2], som vi har haft erfaring med fra tidligere. Grunden til det lige blev behavior-based er, at vi kommer til at introducere behaviors med forskellig prioritet på vores robotter, og derfor virkede det helt oplagt netop at benytte sig af denne form for styring, hvor den aktive behavior altid er den med den højeste prioritet, som ønsker kontrol. Grunden til, at vi f.eks. ikke valgte subsumption, er fordi, at vi bedre kan lide idéen med, at man har en arbitrator som den centrale styring af de forskellige behaviors, modsat subsumption hvor styringen ligger i selve hierarkiet af de forskellige behaviors.

Derefter satte vi os for at finde ud af, hvilke behaviors vi ønskede vores sumobryder skulle have, og det gav os følgende fire behaviors sorteret efter faldende prioritet:





Sluk robotten
Det er selvfølgelig helt oplagt, at den vigtigste prioritet af vores fire behaviors, skal være muligheden for at slukke for vores autonome robot, hvilket vi uundgåeligt kommer til mange gange under test af forskellige ting. Dette er selvfølgelig fordi, at vi ikke ønsker at andre behaviors skal kunne tage kontrol, når vi ønsker at slukke for robotten. Så det vi helt enkelt gør i denne behavior er at spørge om den fysiske sluk-knap på vores robot er blevet trykket på, og hvis dette er sket, tager vores sluk robotten behavior kontrol og kører kommandoen System.exit(0) for at dræbe alle de tråde, som kører pga. de andre behaviors.

Opdag kanten
Den næstvigtigste behavior for vores autonome sumobrydere er muligheden for at se, om vi er ved at køre ud over kanten af banen. Dette er selvfølgelig oplagt, fordi det er en forudsætning for at vinde, at man ikke selv kører ud over kanten. Så det vi gør i denne behavior er, at vi konstant tjekker input fra vores lyssensor for at se, om vi er ved at køre ud over kanten. Måden vi gør dette på er, at vi sætter en værdi for “sort”, som jo er farven på pladen (ud over kanten), når vi starter vores robot. Og da vi samtidig ved, at sort giver en lavere værdi end hvid, lægger vi en passende mængde til den målte for sort, så vi har et threshold for hvornår vi ikke længere ser sort, men ser hvid, og derved skal tage kontrol og undgå at køre ud over kanten. Det vi helt konkret gør når vi ser kanten er, at vi bakker i 1 sekund, hvorefter vores drej rundt behavior automatisk tager over.

Angrib fjenden
Når vi nu forhåbentlig ikke selv kører ud over kanten, skal vi selvfølgelig have et angreb på vores sumobrydere. Derfor er den tredje mest vigtige behavior at opdage fjenden og angribe ham. Konkret har vi en tråd, der konstant tjekker om vores afstandssensor måler noget inden for 75 cm, hvorefter den vil tage kontrol og sætte angrebet i gang. Vores angreb består egentlig bare af, at vi “charger” fjenden, dvs. når vi har opdaget fjenden, sætter vi fuld skrald ind på at køre ind i ham og derved forhåbentlig skubbe ham ud over kanten, hvis han ikke har formået at flytte sig alt for meget.

Drej rundt
Den mindst vigtige behavior, og derfor den der altid er aktiv medmindre en anden behavior tager kontrol, er at dreje rundt på stedet. Grunden til vi gør dette er, at vi håber på, at der er en fjende inden for 75 cm, som vil sætte i et angreb i gang, da angrebs-behavior’en så vil tage kontrol over styringen af robotten.

Forbedringer i AI’en
Allerede under testen af de forskellige behaviors for første gang fandt vi hurtig ud af, at hastighed betød rigtig meget for muligheden for at skubbe en fjende ud over kanten. Så derfor ændrede vi lynhurtig vores kørsel på banen fra en standard funktion til en mere direkte styring af motorerne, hvor vi selv kunne specificere hastigheden.

En video der viser vores to basis robotter i kamp, kan ses her:


 

3. Teste rampe og anti-stejle bøjler
Efter vi havde introduceret software og derved AI til vores sumobrydere, kunne vi begynde at gøre iagttagelser i forbindelse med kampe. Derfor satte vi os for at undersøge hvad en rampe foran, anti-stejle bøjler bagpå og begge dele samtidig gør for vinderchancerne for vores robot.

Rampe foran - angreb & forsvar
Det første vi prøvede var at sætte en rampe foran på robotten. Tanken med dette er, hvis man har en stejl nok rampe, at vi skal kunne trænge ind under modstanderen således, at deres bagende eller forende løfter sig fra banen, og derved giver modstanderen meget lidt mulighed for at navigere, hvis ellers vi kan holde os inde under modstander-robotten. Dette viste sig at være en stor succes, både som et aktivt angreb men også som et passivt forsvar.

Det aktive angreb viste sig i form af vores hypotese, da det nemlig var rigtig effektivt at kile sig ind under modstander-robotten, hvorved man nemmere kan skubbe modstanderen ud over banen. En anden ting vi dog også fik ud af at have en rampe foran var, at det i sig selv er et fremragende forsvar. For når en modstander forsøger at skubbe til os via vores forende, så kørte den af sig selv op ad rampen, hvorved modstanderen mister kontrol over sig selv. Dette skal selvfølgelig ses i lyset af, at netop modstanderen ingen rampe havde. For selvsagt ville det være et mindre sigende forsvar hvis modstanderen selv havde en rampe, og måske endda en ‘skarpere’ rampe, så det er os selv som bliver ramt.

En sidegevinst ved at introducere en rampe foran er, at vi faktisk får afskærmet vores lyssensor. Dette er en stor hjælp, da vi nogle gange får noget lys fra omgivelserne som gør, at vores robot kan blive lidt forvirret i forhold til hvad der er reel bane og hvad der er kanten af banen.

Anti-stejle bøjler bagpå - forsvar
Dernæst forsøgte vi os med anti-stejle bøjler bag på robotten. Tanken med dette er egentlig udelukkende en forsvarsmekanisme, da vi vil sørge for, at det bliver svære for vores robot at begynde at stejle. Grunden til, at vi ønsker netop dette er, at man hurtigt kunne se tendenser til, at når to robotter forsøger at skubbe til hinanden, så vil det oftest ende i, at de på den ene eller anden måde begynder at stejle. Så ved at introducere disse bøjler bagpå mindsker vi altså chancen for, at vores robot begynder at stejle, ved netop at placere “anti-stejle”-bøjler bagpå vores robot. Det viste sig at være en stor succes, da vi nemmere kunne udnytte alt vores kraft og vejgreb til at skubbe fremad, fordi vi er understøttet af vores anti-stejle bøjler, så alt vores kraft ikke forsvinder i at stejle i stedet.

Både rampe og anti-stejle bøjler
Efter vi havde testet de to ting hver for sig var det tid til at prøve dem samtidig som en forhåbentlig dødelig kombination. Det viste sig, måske lidt forventeligt, også at være en god idé at have begge ting på samtidig. For kombinationen af, at vi kan kile os ind under vores modstandere med vores rampe foran, og at vi samtidig selv har svært ved at stejle pga. vores anti-stejle bøjler bagpå gjorde, at vi kunne udnytte alt vores kraft og vejgreb til effektivt at skubbe modstanderen ud af banen.





Og i følgende video kan man se de to basis robotter, hvor den ene har rampen foran og den anden har anti-stejle bøjlerne bag på.



Som man kan se i videoen, stejler robotterne ikke mere som i den forrige video, hvilket gør det noget mere forudsigeligt.

Status
Vi fik nået alt det vi havde planlagt med følgende konklusioner:

  • 5 Minute Bot et godt udgangspunkt som basis-robot pga. dens enkelthed i designet.

  • Behavior-based AI er perfekt til vores autonome sumobrydere, som netop besidder forskellige behaviors.

  • Rampe og anti-stejle bøjler viste sig effektive som forbedringer til både forsvar og angreb på vores basis-robot

Næste gang vil vi undersøge effekten af forskellige hardware ændringer på robotten.

Referencer
[1] Five Minute Bot
[2] Behavior-based styring

SumoWrestler - Session 1

Til stede
Søren Bramer Schmidt, 20082602
Mikkel Nielsen, 20082285
Peter Jessen, 20082519

Tid brugt
3 timer

Mål
Målet med dagens session er at undersøge omgivelserne og mulighederne for LEGO sumobryder robotkonkurrencen. Herudover vil vi planlægge forløbet for projektet over de næste par uger.
  
Plan
Planen er som følger, vi vil:

  1. Gennemgå reglerne for sumobrydere som beskrevet på [1].

  1. Se og vurdere sumobryder ringene, som udgør banen for konkurrencen.

  1. Bygge en foreløbig robot som pilot-projekt for resten af forløbet.

  1. Vurdere muligheder og problemer ud fra pilot-projektet.

  1. Planlægge projektet på basis af disse indledende undersøgelser.  

Resultater
1. Reglerne
Vi læste reglerne igennem som de står beskrevet i [1]. Reglerne for robotter er bl.a.:

  • Der må kun bruges 1 NXT sæt.
  • Robotten må maksimalt fylde 30x30 cm i grundplan og veje højst 1 kilo.

Vi vil som udgangspunkt følge disse regler, da de udelukker, at der laves super-robotter, der kan slå andre, alene på deres vægt eller størrelse. Det gør også konkurrencen mere praktisk, da alle hold kan tildeles 1 sæt lego, og dermed konkurrere på lige fod med hinanden.

Reglerne for selve konkurrencen er de følgende:

  1. De to sumo robotter placeres i ringen med fronten væk fra hinanden.

  1. På dommerens signal aktiveres sumo robottens program. Robotten skal nu vente 3 sekunder inden den begynder at være aktiv.

  1. Kampen varer højst 2 minutter.

  1. En sumo robot vinder hvis den vælter den anden sumo robot eller skubber den anden ud af ringen. En sumo robot er ude af ringen hvis den rører fladen som understøtter ringen. Hvis en sumo robot selv kører ud af ringen har den tabt.

  1. Hvis ingen af sumo robotterne forlader ringen eller vælter indenfor 2 minutter ender kampen uafgjort. Hvis begge sumo robotter på samme tid forlader ringen ender kampen også uafgjort.

  1. Der gives 2 point for en vunden kamp, 1 for uafgjort og 0 for en tabt kamp.

  1. En sumo turnering kan afvikles med puljer, mellemrunder, semifinaler, flere runder per kamp osv afhængig af antallet af deltagende robotter.

Disse regler vil vi efter vores projektforløb evaluere. Specielt er det reglerne om at kampen maksimalt vare 2 minutter og reglerne for point vi vil kigge efter i sømmene.

2. Banen





Banen som der konkurreres på, ser ud som vist på billedet. Det er en rund flad sort plade, 120 cm i diameter, hvor de yderste 5 cm er malet hvid, for at markere kanten.

Banen er stor nok til at robotterne nemt kan navigere rundt på den. Der er dog ikke plads til at gemme sig, da det ikke tager mange sekunder for en robot at krydse banen.


Overfladen er ru, da der ligger sand under malingen. Denne ru overflade giver robotterne ekstra vejgreb. Det har dog den ulempe, at det også giver ekstra vejgreb til det som robotterne skubber imod. Vi vil derfor senere hen undersøge om en glat bane er et bedre alternativ.

3. Pilot-projekt
For at få et overblik over hvad der virker og hvad der ikke virker har vi valgt at lave et pilot-projekt. Det består i, at vi har lavet en robot som vi kan afprøve vores idéer på.


Robotten kan ses på videoen her:



 


Robotten er udstyret med lyssensor både foran og bagved til at opdage om robotten er på vej ud over kanten. Herudover sidder der en krog på robotten, styret af den tredje motor. Denne krog aktiveres af en tryksensor der sidder forrest på robotten. Robotten har også en ultrasonic sensor, så den kan kigge efter modstander-robotten.

Robotten er programmeret til at køre efter ting den ser, og hvis den kommer ud over en kant, skal den bakke tilbage og lede forfra. Som det kan ses på videoen fungerer denne robot ikke optimalt. Det gør dog ikke så meget på nuværende tidspunkt, da vi fik de resultater vi ville have.

4. Muligheder og problemer
Vi fandt ud af, at det er meget vigtigt at have et stabilt design. Robotten vi fik bygget var noget ustabil, og det gjorde den meget sårbar i kamp med andre robotter. Dette skyldtes især, at robotten havde motorerne sat på ydersiden, så de let blev revet af. Vi vil derfor tænke på stabilitet i vores robotdesign.

Vi opdagede også, at det ikke var vigtigt at have en lyssensor bagved. Det sker sjældent at robotten bakker ud over kanten af sig selv, og når det sker, er det som regel fordi den bliver skubbet ud over. Vi kan derfor ‘spare’ en sensor ved at tage denne sensor af. Vi fandt også ud af, at lyssensorerne udgøre et potentielt problem, da de til tider læser forkert. Dette sker enten fordi lysforholdene ændre sig, eller fordi robotten bliver løftet, og lyssensoren derfor læser forkert.

En ultrasonic sensor som sonar, har vist sig at være en god idé. I stedet for at køre tilfældigt omkring, lader vi robotten spinne omkring sig selv indtil den ‘ser’ en modstander. Så snart den ser modstanderen, kører robotten imod den. Som det fremgår af videoen fungerede dette dårligt i første forsøg, da sensoren opfanger alt muligt andet end det den skulle.

Et stort problem vi opdagede ved pilot-projektet var, at robotten ikke havde den nødvendige kraft til at skubbe en modstander ud af ringen, hvis modstanderen stod på tværs. I så fald var der for meget vejgreb for modstanderen, og robotten havde ikke fremdrift og trækkraft nok til at skubbe til modstanderen. Vi vil derfor senere hen overvejer hvordan vi kan give robotten mere kraft.

En positiv ting vi fik ud af pilot-projektet var, at det var sjovt at se våbnet på robotten blive brugt. En stor del af sumobryder konkurrencen er underholdningsværdien for publikum. Det er så at sige en ‘publikums-sport’. Vi vil derfor undersøge hvordan man kan lave våben på robotten, og hvordan dette bedst kan indgå i konkurrencen.

5. Planlægning
Efter de indledende undersøgelser har vi lagt denne plan for resten af projektet:

  1. Vi vil bygge en basis robot som kan være platform for udvidelser. Denne robot skal være stabil og kunne køre rundt på banen uden fejl. Den skal have en lyssensor foran for at opdage den hvide kant, og den skal have en ultrasonic sensor til at opdage modstanderen.

  1. Undersøge effekten af at ændre hardwaren på robotten. Det kan f.eks. være at afprøve andre hjul, afprøve op- eller nedgearing eller at afprøve 4-hjulstræk. Det kan også være støtte, der skal stoppe robotten fra at vælte rundt, eller ramper der skal løfte modstanderen. Herudover vil vi teste effekten af vægt og hastighed i konkurrencen.

  1. Vi vil undersøge mulighederne for at bruge aktive, motorstyrede våben på robotten. Det kan f.eks. være en krog der løfter modstanderen, eller en svingarm der slår modstanderen til siden.

  1. På baggrund af disse undersøgelser vil vi så vurdere om reglerne og omgivelserne for konkurrencen skal ændres og hvad de i så fald skal ændres til.  
 
Status
Vi nåede det vi havde planlagt og vi har fået lagt en plan for hvad vi vil nå. Næste gang vi mødes vil vi bygge 2 ens basis robotter og programmere dem til sumobryder-robotter. Vi vil så få afholdt de første rigtige kampe. Hvis der bliver tid til det, vil vi også prøve at udstyre den ene med ramper for at se om det giver en mærkbar forskel.

Referencer
[1] Regler for sumobrydere