Til stede
Søren Bramer Schmidt, 20082602Peter 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:
- Bygge 2 basis robotter
- Introducere AI til vores robotter
- 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



Ingen kommentarer:
Send en kommentar