torsdag den 14. juni 2012

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

Ingen kommentarer:

Send en kommentar