--- voor de duidelijkheid / disclaimer: met 'AI' bedoel ik in dit verhaaltje de combinatie van een aantal algorithmes om een volgende actie te bepalen ---
Goed, allereerst wat achtergrondinformatie. Ik ben met een medeleerling bezig met mijn profielwerkstuk dat volgend jaar ergens af moet zijn. We willen 2 voetbalrobotjes (1vs1) gaan bouwen die vervolgens via RF te besturen zijn met de PC. Dit is allemaal redelijk praktisch en goed te realiseren. Een groter probleem wordt echter de AI software om de computer zelf te kunnen laten voetballen. Voor de duidelijkheid: ik ben van plan de AI software redelijk 'slim' te laten worden, maar het is allemaal als 'extra', omdat ons pws zelf over het maken van de robotjes gaat. Ik hoop dat dit dus niet om als een huiswerkvraag geldt
Omdat de robotjes zelf nog niet af zijn ben ik maar begonnen met het maken van een simpel simulatie programmaatje, waardoor ik op de monitor de robotjes kan zien. Het laten werken van de AI is in deze situatie dus een stukje eenvoudiger omdat de balbaan ed 100% goed te voorspellen is
.
Ik heb bedacht dat er 2 mogelijke manieren zijn om de robot zijn acties te laten bepalen.
1) Aan de hand van een plan. Op een gegeven moment wordt een plan bepaald, waarna de robot dit gaat uitvoeren. Dit kan redelijk ingewikkeld gemaakt worden door bijvoorbeeld om de zoveel tijd te controleren of alles nog wel 'volgens plan' verloopt en al dan niet doorzetten met het plan.
2) Elke cycle opnieuw bepalen wat de beste move is.
Hoewel beide manieren interessant zijn, heb ik vooralsnog besloten om me aan de 2e manier te houden.
Om het allemaal niet te moeilijk te maken heb ik de mogelijke acties van de AI engine gelimiteerd tot deze 4:
- Linksom draaien
- Rechtsom draaien
- Vooruit bewegen
- Stilstaan
Bij linksom en rechtsom draaien blijft de robot op dezelfde plek staan.
Allereerst heb ik een plaatje gemaakt van de mogelijke "arrivaltimes" voor de robot in de posities om hem heen (robot_angle = 0, hij staat met zijn voorkant naar boven gericht):

(wit geeft aan dat de robot de plek snel kan bereiken, zwart geeft aan dat de robot er lang over doet)
In de AI functie wordt daarnaast de baan van de bal geextrapoleerd (in de simulatie klopt deze dus altijd
, omdat de 'wetten' van de simulatie hetzelfde zijn als die van de extrapoleer functie).
Met bovenstaande methodes bepaal ik tenslotte de actie van de robot - er wordt gekeken naar de baan van de bal, en voor elke plek waar de bal in de toekomst zal zijn, wordt gekeken naar de tijd waarin de robot deze plek kan bereiken. Enfin, als deze tijd dus gelijk is, wordt de robot ingesteld op rotateRight, rotateLeft, moveForward of fullStop.
Tot dit punt kon ik, zonder al te veel kennis van dit soort dingen, alles zelf nog redelijk redeneren. Het punt is dat ik mijn robot wat meer wil laten doen dan naar de bal toe te racen, om vervolgens niet te kijken waar de bal naartoe gaat (eigen goal
ofzo). Welnu, ik kan ook nog wel bedenken in wat voor hoek mijn robotje de bal moet gaan raken om deze in het goal van de tegenstander te stoten. Het probleem is echter dat het robotje met een mooie boog precies goed naar de bal toe moet gaan rijden. Als het robotje bijvoorbeeld terug komt vanaf het middenveld naar de verdediging, zal het robotje helemaal om de bal heen moeten rijden. Om het niet echt eenvoudiger te maken, deze hele beweging zal ook gebruikt moeten om te voorspellen waar de bal geraakt moet worden, omdat in een boog rijden natuurlijk langer duurt dan in een rechte lijn.
Enfin, mijn vraag dus: bestaat er een mooi algorithme die de goede boog om de bal heen beschrijft?
Oja, als iemand nog andere tips heeft voor dit AI projectje, ik hoor het graag
Goed, allereerst wat achtergrondinformatie. Ik ben met een medeleerling bezig met mijn profielwerkstuk dat volgend jaar ergens af moet zijn. We willen 2 voetbalrobotjes (1vs1) gaan bouwen die vervolgens via RF te besturen zijn met de PC. Dit is allemaal redelijk praktisch en goed te realiseren. Een groter probleem wordt echter de AI software om de computer zelf te kunnen laten voetballen. Voor de duidelijkheid: ik ben van plan de AI software redelijk 'slim' te laten worden, maar het is allemaal als 'extra', omdat ons pws zelf over het maken van de robotjes gaat. Ik hoop dat dit dus niet om als een huiswerkvraag geldt
Omdat de robotjes zelf nog niet af zijn ben ik maar begonnen met het maken van een simpel simulatie programmaatje, waardoor ik op de monitor de robotjes kan zien. Het laten werken van de AI is in deze situatie dus een stukje eenvoudiger omdat de balbaan ed 100% goed te voorspellen is
Ik heb bedacht dat er 2 mogelijke manieren zijn om de robot zijn acties te laten bepalen.
1) Aan de hand van een plan. Op een gegeven moment wordt een plan bepaald, waarna de robot dit gaat uitvoeren. Dit kan redelijk ingewikkeld gemaakt worden door bijvoorbeeld om de zoveel tijd te controleren of alles nog wel 'volgens plan' verloopt en al dan niet doorzetten met het plan.
2) Elke cycle opnieuw bepalen wat de beste move is.
Hoewel beide manieren interessant zijn, heb ik vooralsnog besloten om me aan de 2e manier te houden.
Om het allemaal niet te moeilijk te maken heb ik de mogelijke acties van de AI engine gelimiteerd tot deze 4:
- Linksom draaien
- Rechtsom draaien
- Vooruit bewegen
- Stilstaan
Bij linksom en rechtsom draaien blijft de robot op dezelfde plek staan.
Allereerst heb ik een plaatje gemaakt van de mogelijke "arrivaltimes" voor de robot in de posities om hem heen (robot_angle = 0, hij staat met zijn voorkant naar boven gericht):

(wit geeft aan dat de robot de plek snel kan bereiken, zwart geeft aan dat de robot er lang over doet)
In de AI functie wordt daarnaast de baan van de bal geextrapoleerd (in de simulatie klopt deze dus altijd
Met bovenstaande methodes bepaal ik tenslotte de actie van de robot - er wordt gekeken naar de baan van de bal, en voor elke plek waar de bal in de toekomst zal zijn, wordt gekeken naar de tijd waarin de robot deze plek kan bereiken. Enfin, als deze tijd dus gelijk is, wordt de robot ingesteld op rotateRight, rotateLeft, moveForward of fullStop.
Tot dit punt kon ik, zonder al te veel kennis van dit soort dingen, alles zelf nog redelijk redeneren. Het punt is dat ik mijn robot wat meer wil laten doen dan naar de bal toe te racen, om vervolgens niet te kijken waar de bal naartoe gaat (eigen goal
Enfin, mijn vraag dus: bestaat er een mooi algorithme die de goede boog om de bal heen beschrijft?
Oja, als iemand nog andere tips heeft voor dit AI projectje, ik hoor het graag
[ Voor 4% gewijzigd door Verwijderd op 24-07-2004 00:36 ]




