Maandag 22 juni:
Vandaag zijn we begonnen onze plannen uit te denken voor de komende week. De doelstelling van dit kleine onderzoek is om een Aibo leren een schaakstuk op te pakken en deze van een willekeurige punt op het schaakbord (deze zal hoogstwaarschijnlijk van papier worden ivm de hoogte van een schaakbord) naar een andere punt op het bord te verplaatsen. Met deze doelstelling kan het probleem in twee delen opgesplitst worden:
de Aibo zal een stuk moeten verplaatsen: dit kan dmv het stuk te verschuiven met een poot van de aibo, of door de Aibo het schaakstuk met zijn mond te grijpen en deze weer op locatie neer te zetten. De bewegingen om het stuk te verplaatsen zullen bedacht moeten worden.
het pad plannen die de Aibo moet afleggen: omdat we nog geen ervaring hebben met computer vision zal de afstand tot de locatie van het schaakstuk en de afstand tot het doel berekend moeten worden vanuit een vast punt (het beginpunt van de Aibo).
In de middag hebben we een introductie tot de software van de Aibo gekregen van Edwin. Hij heeft kort toegelicht hoe MEdit en AIBORemoteFramework werken. Om Lewy (onze Aibo) te leren kennen hebben we na de introductie de mogelijkheden van de Aibo verkent. Hiervoor moesten we eerst de orginele AIBOmind memorystick in de Aibo plaatsen. Op deze stick staat hoe de Aibo moet werken als entertainment hondje (zoals de Aibo bedoelt is dus). In deze modus kan de Aibo met kaartjes bediend worden die interne functies aan roepen. Zo zijn er functies voor het opzoeken van roze voorwerpen (misschien handig voor het laten herkennen van schaakstukken), het laten doen van een dansje, of de Aibo terug te laten keren naar z'n docking station (de oplader).
Thuis hebben we alle 3 met MEdit verschillende motions gemaakt, waaronder DuwLinks en salto (salto is alleen in de simulator uitvoerbaar, want daar gelden de zwaartekracht wetten nog niet! Hier moet je altijd rekening mee houden).
Hanne heeft vandaag meteen Wiki online gezet om zo snel mogelijk te kunnen documenteren met wat we aan het doen zijn.
Dinsdag 23 Juni:
Na een helleklus van 2 uur voor het implementeren van onze eerste motion in de Aibo wordt onze moeite dan toch beloond. Nu weten we hoe Lewy zijn motions kan uitvoeren en gaan we verder met het samenstellen van een motion om een schaakstuk op te makken en weer neer te zetten.
Met MEdit hebben we twee motions voor de Aibo uitgedacht: grab_piece en put_piece voor het pakken en wegzetten van een schaakstuk. Lewy pakt nu het schaakstuk succesvol op en zet deze ook weer goed weg (zie MovementFilmpjes). Het idee van het verschuiven van een schaakstuk hebben we laten vallen omdat de Aibo z'n pootjes zijn afgerond. De Aibo zou de stukken alleen kunnen verschuiven als hij er precies goed voor zou staan, maar door de afwijkingen die we hebben geconstateerd hebben we de moed opgegeven voor dit idee.
Voor het maken en implementeren van een motion moet er het een en ander met diverse programma's gedaan worden. - Voor het maken van een motion gebruik je MEdit en sla je deze op als .kfm bestand. - Ook exporteer je je motion als een .mtn bestand - Bovendien maak je met MEdit een tekstbestandje (mwc.cfg) waarin je de motion een zogenoemd MWCID nummer geeft als identificatie - Met RTool maak je vervolgens een MWC en ODA aan de hand van je .mtn en .cfg bestand.
Deze MWC en ODA kun je dan op de memorystick zetten en daarna is je motion aan te roepen met AIBORemoteFramework.
Vandaag zijn we tegen het probleem aangelopen dat Lewy niet bepaald naukeurig beweegt. Dit kan heel vervelend worden als we hem naar een schaakstuk toe willen bewegen. We zijn nu aan het proberen Lewy beter en nauwkeuriger te laten bewegen.
Woensdag 24 Juni:
Vanochtend zijn we aan de slag gegaan om een eigen, betere, strafe (zijwaards lopen) te maken. De strafe die er nu is loopt zijwaards, maar draait daarbij ook automatisch over een kleine hoek. Hierdoor kunnen we onmogelijk met genoeg precisie bij de schaakstukken komen. Wij hebben bedacht dat we gebruik kunnen maken van de mogelijkheid van Lewy om zijn benen naar binnen te bewegen (10 graden). Als we elk pootje, een voor een 20 graden laten verschuiven moet hij langzaam zijwaards bewegen. Dit was makkelijker bedacht dan uitgevoerd, want wat de simulator (MEdit) niet laat zien is dat de Aibo omvalt zodra hij zijn achterpoten wil optillen. We dachten dat we dit op konden lossen door zijn hoofd in tegenovergestelde richting te bewegen, maar het gewicht van zijn hoofd weegt niet op tegen de achterkant van zijn lichaam (daar zit o.a. de accu). Uiteindelijk was de oplossing om hem door zijn voorpoten te laten zakken als hij zijn achterpoten gaat verplaatsen. hierdoor is er enigzins een evenwicht.
Nu we weten hoe de bewegingen werken en nu we ook al zelf bewegingen hebben gemaakt die we nodig gaan hebben om Lewy schaakstukken te leren pakken gaan we aan de slag met het programma dat dit allemaal aan moet sturen. Dit programma kan gebasseerd worden op de source van AIBORemoteFramework. We hebben in de source gezocht naar bruikbare code voor het maken van een sequentie van motions, maar door een gebrek aan Visual C++ kennis zijn we hier nog niet ver mee gekomen.
Donderdag 25 Juni:
Vanochtend hebben we eerst de strafe_left aangepast zodat de draaing die de Aibo z'n achterpoten maken wat meer opgevangen worden. Uit de test met strafe_left kwam uit dat de draaing die de achterpoten maken tov de voorpoten verkleind is en dat de afstand die de Aibo aflegt per strafe rond de 8 cm ligt. Aan de hand van strafe_left hebben we de strafe_right aangemaakt.
Nu de strafe motions ook zijn aangemaakt (nog steeds met een kleine afwijking) kan de eerste test met het schaakbord uitgevoerd worden. De motions die gebruikt worden zijn: grab_piece, put_piece, strafe_left, strafe_right en de ingebouwde motion walk_forward. Deze motions zijn in feite genoeg om elke positie te bereiken op het bord. Als maatstaaf voor de lengte/breedte van 1 vlak nemen we 8 cm, zodat de Aibo in theorie na elke strafe de breedte van zo'n vlak heeft afgelegd. Het TestBord is 3x3. Ook is er nog sprake van remote control - elke beweging wordt aangestuurd vanaf de laptop. Tijdens het testen constateren we het volgende: - De Aibo strafed in 2 beweging naar rechts naar het schaakstuk en presteerde deze na enige bijsturing ook nog op te pakken vanuit de behaalde positie . - Na het oppaken van het stuk laten we de Aibo weer terug strafen (naar links dus), maar de afwijking is al te groot om het schaakstuk goed neer te zetten. - Conclusie: het probleem ligt dus bij de te grote afwijkingen na het maken van de motions. Een manier om dit te verhelpen is door de vlakken van het bord te verkleinen, of de motion zo aanpassen zodat de afwijking nog kleiner wordt, maar door tijdgebrek is dit hoogstwaarschijnlijk niet haalbaar.
Halverwege de middag hebben we ons weer aangezet om in de bestanden van Aibo_Framework te zoeken naar een manier om een sequentie van motions te genereren. In het bestand contentsDlg.cpp is het mogelijk om dit te doen, maar met de kennis die wij hebben is het ons alleen gelukt de motions in een sequentie af te laten spelen. Het probleem zit 'm in het feit dat we niet weten hoe we in contentDlg.cpp de ingebouwde functie walk_forward kunnen aanroepen. Gelukkig heeft Mathijs ons uit de brand kunnen helpen doordat hij dit wel kon verwezenlijken. Nu is het mogelijk om in onze gemodificeerde AIBORemoteFramework in de dialogue box van contents in te voeren hoeveel stappen de Aibo naar links/rechts en/of naar voren moet doen. Hierbij is het wel het geval dat de Aibo vanuit zijn beginpositie het schaakstuk pakt en vervolgens weer neer zet na de stappen.
De strafe motions zijn weer aangepast om de afwijkingen zo goed mogelijk op te vangen. De vlakken van het TestBord hebben we teruggebracht naar 6 bij 6 cm. De remote control is nog steeds aanwezig, maar nu hoeft de gebruiker alleen maar in te voeren hoeveel stappen de Aibo horizontaal en/of verticaal moet afleggen. Tijdens het testen constateren we het volgende: - de afwijking van het strafen is nog meer opgevangen door de aanpassingen in de motion. - de Aibo is in staat om het schaakstuk in het doel-vak van het bord te zetten, maar helaas staat het stuk zelden in het midden van het vak door de afwijkingen. - Conclusie: een bord met vlakken van 6 bij 6 is een stuk beter dan 8 bij 8, maar hoe dan ook blijft de onnauwkeurigheid van de manier waarop de Aibo beweegt, het grote probleem.
Conclusie:
We zijn deze week begonnen met ambitieuze plannen waarvan we hoopten, maar niet hadden verwacht, dat we ze zouden behalen. Dit vermoeden was niet geheel onterecht, want we hebben helaas niet alles voor elkaar gekregen zoals we het wilden. Doordat wij als 1e-jaars AI-studenten nog geen kennis hebben over computer-vision en bovendien te weinig kennis over C++ hebben, is het bijvoorbeeld niet gelukt om de Aibo zelf het schaakstuk te laten opzoeken. We hebben moeten constateren dat met de afwijkingen die de Aibo heeft in zijn bewegingen, het niet mogelijk is om puur door de goede bewegingen te kiezen, het beestje zo voor het schaakstuk te zetten dat hij hem op kan pakken. Een goede conclusie over het onderzoek wat we deze week hebben verricht is eigenlijk nog niet te trekken, omdat wij na de laatste dag pas goed het gevoel hebben gekregen wat we met de Aibo in het AIBORemoteFramework kunnen doen. Het sturen en bewegen zijn in deze laatste week goed aan bod gekomen, we hopen in het volgende jaar ook met zoeken (computer vision) bezig te zijn zodat we de plannen die we aan het begin van deze week hadden alsnog kunnen uitvoeren.
By Hanne Nijhuis, Jasper van Turnhout en Nimrod Raiman.