wie en wat?
ZSB
wat doen wij?
hoe pakken wij het aan?
materialen en methode
labjournaal
waarnemingen
resultaat
broncode
lab-journaal

L a b - J o u r n a a l :

MAANDAG 26 JUNI 2006
Onze eerste gedachten - op zoek naar een beter idee
10.45u
- We hadden in week 3 twee ideeën ontwikkeld: Het ontwerpen van een nieuwe moveToGarbage methode voor de UMI-rtx, waarbij de robotarm na afloop van het schaakspel de stukken weer opstelde voor een nieuwe partij. Het andere idee was om de robotarm een toetsenbord te laten gebruiken, en via een chat-interface met de arm te communiceren. Dit laatste idee viel af, omdat de bewegingen van de robotarm niet exact genoeg zou zijn voor de bediening van een normaal 101-key toetsenbord. We zagen niet erg veel uitdaging in communicatie via een eenvoudig toetsenbord met slechts enkele grote knoppen erop; we achtten de robotarm volwaardiger dan dat..;-)
11.00u - Wellicht moesten we het in een ander spel zoeken; domino-stenen leggen misschien? We besloten dat we niet per see afhankelijk wilde zijn van het gebruik van de enige robotarm ter beschikking.. Dit bracht ons indirect tot het besluit om zelf een virtuele robotarm te programmeren. Dit idee werd in het opvolgende half uur uitgedacht tot het programmeren van een applicatie voor het gebruik van elke gewenste robotarm.
Weergave in 3D, maar hoe?
13.15u
- We hebben overwogen om de weergave in een 3D perspectief af te beelden. Het gebruik van bestaande software voor weergave in perspectief is gewenst. 3D-Studio Max misschien? Of zullen we gebruik maken van de UNREAL engine, of iets gelijkends? Echter vrezen we hier vooral dat we al enkele dagen kwijt zullen zijn om deze software te kunnen laten integreren met bijvoorbeeld Java of een andere taal waarin we eigen modules kunnen schrijven. We zien niets in het onder de knie proberen te krijgen van de code achter beide mogelijkheden.
We zouden bekijken of we de software van de UMI-rtx robotarm zelve zouden gebruiken als uitgangspunt voor een applicatie; maar we wilden het graag bij Java houden. We krijgen in ieder geval via Arnoud Visser het achterliggende software pakket bij de UMI-rtx.
DH-conventie en assenstelsels als weergave
14.50u - We verkozen een weergave van de virtuele robot in een 3D omgeving die overeen zou komen met de tekeningen uit de literatuur-klapper van Leo Dorst, eenvoudig doch doeltreffend; waarbij elk gewricht via een assen-stelsel zal worden afgebeeld.
Brainstorm over meerdere robotarmen ineen: parallele gewrichten
15.00u - Terwijl we buiten stonden, bedachten we dat de aaneenschakeling van gewrichten niet puur serieel hoeft te verlopen. Er kunnen immers (net als dat er meerdere vingers aan een hand zitten) meerdere gewrichten parallel ontspringen vanuit een punt in de robot. In het begin vermoedden we dat dergelijke ontwerpen gebonden zijn aan andere, voor ons nog onbekende, constraints, maar al gauw beseffen we dat het ook via het ons wel bekende DH-model kan worden beschreven. We besluiten dat de klasse die elk gewricht gaat representeren de mogelijkheid moet krijgen om meerdere child-gewrichten te krijgen.

3D engine van tweedejaars student AI blijkt ongeschikt
15.30u - Een 3D engine van een student uit jaar twee van de studie bekeken, maar na overleg met de student zelf zal deze package niet krachtiggenoeg zijn. http://student.science.uva.nl/~fhuizing/3dengine/

Revisie benodigde kinematica
15.50u
- Terwijl Lennard zich reviserend richt op de aspecten van de kinematica die zal komen kijken bij het afbeelden van alle gewrichten van een robotarm in een 3D ruimte, gaat Jules op internet op zoek naar Java packages die kunnen dienen als basis voor de weergave in 3D; we hebben dan nog altijd geen aandacht besteed aan hoe we een virtuele robot zelf gaan beschrijven.
Het lijkt een probleem te gaan worden of we onze 3D weergave ook kunnen roteren, zodat via verschillende aanzichten de robotarm kan worden aanschouwt.
Om 17.15u besluiten we dat Jules thuis nog probeert door te speuren naar mogelijk gewenste Java packages voor 3D weergave.

DINSDAG 27 JUNI 2006
Wegens omstandigheden is deze dag komen te vervallen. Omdat de onderlinge wisselwerking groot was bij de voortgang op dinsdag, besloten we dat we vanaf woensdag samen verder zouden gaan om een en ander in te halen.

WOENSDAG 28 JUNI 2006
Vervolg zoektocht naar geschikte package voor 3D
10.15u
- We liggen achter op schema. Jules vervolgt zijn zoektocht naar de beste package. Hij heeft al enkele packages gevonden en getest die in aanmerking kunnen komen. Packages zijn vaak enorm groot, en vergen veel tijd om te doorgronden of ze bruikbaar zijn voor het rekenen met matrices en vectoren.
Implementatie van labboek als website
10.30u
- Arnoud Visser vraagt naar een mid-term analyse, en wil het logboek bekijken. Echter is door de verloren dag het logboek niet ver gevorderd, en is er geen draaiende website van gemaakt. Lennard gaat hiermee aan de slag.
We besluiten om in ieder geval een tekst-bestand aan te vullen met enkele regels tekst voor iedere belangrijke stap in het proces, zolang het online labboek niet geheel functioneel is.

Keuze voor 3D engine, problemen met installeren en instellen
12.00u - Enkele engines worden samen bekeken en onderling vergeleken:
- de Java 3d Graphics Community: http://www.j3d.org/
- 3d Graphics Information Center: http://www.garybeene.com/3d/3d-pure.htm
- 3dlite: http://home.comcast.net/~danmeany (deze valt al snel af, omdat er geen API bij zit; bovendien oogt de omgeving minimalistisch

- idx3diii: http://www.idx3d.ch/
12.20u - Jules komt nog wat problemen tegen bij het installeren van uiteindelijk gekozen package java3d op de UNIX machine.
Keuze voor: https://java3d.dev.java.net/binary-builds.html - er is een uitgebreide API documentatie aanwezig

Joint structuur in Java
13.15u
- Lennard start met de implementatie van de eerste klassen voor de Joint structuur van de robot. We kiezen ervoor een Robot-klasse te maken, waarbinnen steeds een Joint kan worden toegevoegd als child van de voorgaande Joint. De Joints krijgen constraints en waarden volgens de DH-conventie.
Omgeving op basis van applet
14.50u
- De applet structuur wordt deels omgebouw door gebruik te maken van de Swing klassen van Java, zoals beschreven in het boek "Java by Dissection", zodat we meer greep hebben op het implementeren van acties (actionListeners). Op deze manier verwachten we een interactieve interface te bouwen voor het instellen en bedienen van de gewenste robotarm volgens de DH-conventie.
Met knoppen zullen de waarden van de constraints kunnen worden ingesteld.
Revisie van de dag
16.30u - We zijn vooral veel tijd kwijt geweest aan het kiezen en installeren van de juiste package die moet dienen als basis voor onze 3D omgeving voor weergave. We vinden dit toch wel erg belangrijk, want zonder weergave is er minder ondersteuning voor het combineren van DH-data met de bijbehorende visuele robot in de ruimte.
Plannen
We hopen morgen toch echt wel een weergave van de robot-gewrichten te kunnen bewerkstelligen. Uiteraard moeten de gewrichten dan ook bewogen kunnen worden.

DONDERDAG 29 JUNI 2006
Aanpassingen klassen voor gebruik van Joint-structuur binnen 3D engine
10.45u
- We spelen en schuiven veel met de inmiddels aangemaakte klassen; zo verdwijnt een Robot klasse, en wordt de overerving binnen de reeds bestaande Joint klassen vereenvoudigd; constraints worden uit een eigen kasse gehaald, en toegevoegd aan de eigenlijk Joint klasse om de communicatie met het universum (de 3D weergave) te vergemakkelijken.

Functionaliteit verkiezen boven interface kwaliteit
12.45u - We overleggen grondig over welke functionaliteiten we nog verwachten te implementeren. We besluiten om de interface minder ingenieus te maken, maar werking voorop te stellen.
Zo schappen we de mogelijkheid om via knoppen alle constraints van de DH-conventie in te kunnen stellen, en willen we gebruik maken van een tekst-interface, waaruit alle waarden in een keer gelezen worden.

We varieren bovendien veel met de Layout; we plaatsen JPanels in JPanels, en combineren FlowLayouts met GridLayouts of BorderLayouts (allemaal weergave instellingen van Swing uit Java om knoppen en tekstuele input te kunnen plaatsen).

Functionaliteit van de applicatie voldoet; nu de vormgeving nog
14.00u -
Inmiddels is er een eenvoudige doch werkende functionaliteit van de applicatie op basis van een tekst-input interface. Alle constraints voor elke joint kunnen worden ingevoerd in een tekst-component van de Swing klasse. Aangezien de java3d omgeving allerlei geometrische vormen tot haar beschikking heeft, speuren we om te beginnen naar een kant en klare weergave om een Joint mee te representeren.
We gebruiken cones, cubes, points, maar komen uiteindelijk uit bij een ColoredCube welke aan elke zijde anders gekleurd is; hiermee kunnen we in het visuele veld controleren of de rotaties en translatie van de robot-constraints en -transformaties correct worden uitgevoerd.

Verbetering van de branching
14.40u -
We stappen over op een ietswat ingewikkeldere nesting van de Joint-structuur van de robot, om de weergave van de transformaties van de gewrichten te kunnen doen volgens reeds aanwezige methoden van het java3d pakket. Dit vergt enig puzzel- en probeer-werk; maar we weten uiteindelijk elk nieuw toegevoegde gewricht te laten ontspringen uit de getransformeerde ruimte van het vorige gewricht; op deze manier besparen wij onszelf het expliciet moeten terugrekenen van de positie en stand van elk gewricht tot de initiële orthonormale ruimtelijke dimensies voor weergave. - We besluiten wel elke robotarm vooralsnog een seriële aaneenschakeling van gewrichten te laten, en zien vooralsnog af van de mogelijkheid voor parallel geschakelde gewrichten.

Help! Incorrecte transformaties...
15.15u - We zitten al een tijdje aan te hikken tegen ongewenste weergave van de combinatie van een rotatie (theta volgens het DH-model) en een translatie (d volgens het DH-model). Het lijkt erop dat de combinatie met rotaties over 90 graden altijd goed gaan:

...maar dat andere rotaties uiteindelijk leiden tot vervorming binnen de ruimtelijke omgeving:

De laatst toegevoegde assen-stelsels lijken te lijden onder steeds groter wordende vervormingen. De kubussen worden langzaam maar zeker balken ('ruimte-tijd-kromming'...?)

Verkeerde getallen gebruikt
16.30u - Verkeerde getallen gebruikt: omdat we handmatig getallen hadden ingevoerd voor een test-rotatie van 60 graden, bleek de afwijkende afrondingssignificantie te leiden tot transformaties met vervorming in plaats van pure rotaties; ons begrip van de lineaire algebra was hiermee weer gesterkt.
Refreshen lukt niet
17.20u - We hebben problemen met het verversen van de weergave bij het variëren van de gewrichtswaarden van de robotarm. Het blijkt dat het opnieuw weergeven steeds leidt tot een toevoeging van dezelfde robotarm in het universum. - We controleren tevens of het aanpassen van de gewrichtswaarden van de robotarm leidt tot verandering in weergave: ja!
Diner op de UvA
17.30u - We dineren op de universiteit om vervolgens nog samen verder te werken.
Beperkingen variabiliteit constraints, en interactie
18.20u - We stellen nog perk en paal aan de variabiliteit van de transformatie mogelijkheden van elk gewricht. Deze mag niet groter of kleiner dan gewenst zijn.
Afronding en verfijning van de visualisatie
22.00u - Over het internet ronden verfijnen we de applicatie nog kwa vormgeving en bediening. Alles lijkt te werken, hoewel we ons uiteindelijk ernstig hebben moeten beperken in de interface en in de weergave. Toch hebben we voldoening dat we, hoewel we een dag hebben gemist, veel van onze doelstellingen hebben weten te voltooien.