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. |
|