Monday, May 26, 2014

Skrivelab

Dato:
26 Maj 2014
Varighed:
8 timer

Status

0. Retning rapport baseret på feedback.
1. Opsæt test-miljø så det kan bruges i rapporten.
2. Skriv om eksperimentet.
3. Avoid-adfærden virker slet ikke.
4. Kontakt 'Henrik' ift. kode.
?. Gennemgå rapport for navngivning.
?. Snak med vejleder om rapporten, på mandag
?. Overbliksbillede over leJOS til EV3.
?. Test af opladning.
?. Skriv om Rugwarrior og om leJOS introduktionsvejledning til adfærd

Mål

Fortsæt rettearbejdet af rapporten

Skrivning

Kapitel 2 (kapitel 3+5) igang. Skal skrives sammen og udvides til at fortælle en historie.

Forberedelse

Dato:
25 Maj 2014
Varighed:
1 timer

Status

0. Retning rapport baseret på feedback.
1. Opsæt test-miljø så det kan bruges i rapporten.
2. Skriv om eksperimentet.
3. Avoid-adfærden virker slet ikke.
4. Kontakt 'Henrik' ift. kode.
?. Gennemgå rapport for navngivning.
?. Snak med vejleder om rapporten, på mandag
?. Overbliksbillede over leJOS til EV3.
?. Test af opladning.
?. Skriv om Rugwarrior og om leJOS introduktionsvejledning til adfærd

Mål

Få et overblik over arbejdet der mangler/det der er på plads og hvordan dagen i morgen bliver.

Gennemlæsning af rapport

Forberedelse gav et overbliksbillede, som vil blive skrevet ind på bloggen tirsdag. Mandag er dedikeret til retteopgaver, da alle de ting jeg kunne ønske mig at nå, ikke bliver klar. Heldigvis giver det heller ikke mening at få feedback på så stor en mundfuld, som der allerede er rettet (tror jeg), så der er stadig god grund til snakken på onsdag (og derfor deadline for indlevering af rettelser mandag aften).

Skrivelab

Dato:
24 Maj 2014
Varighed:
8 timer

Status

0. Retning rapport baseret på feedback.
1. Opsæt test-miljø så det kan bruges i rapporten.
2. Skriv om eksperimentet.
3. Avoid-adfærden virker slet ikke.
4. Kontakt 'Henrik' ift. kode.
?. Gennemgå rapport for navngivning.
?. Snak med vejleder om rapporten, på mandag
?. Overbliksbillede over leJOS til EV3.
?. Test af opladning.
?. Skriv om Rugwarrior og om leJOS introduktionsvejledning til adfærd

Mål

Fortsæt rettearbejdet af rapporten

Skrivning

Kapitel 2 (EV3) nogenlunde færdigt. Billed-feedback og hjælp fra ven modtaget og integreret i rapproten i EV3-afsnittet.
Påbegyndt kapitel 3+5.

Skrivelab

Dato:
23 Maj 2014
Varighed:
2 timer

Status

0. Retning rapport baseret på feedback.
1. Opsæt test-miljø så det kan bruges i rapporten.
2. Skriv om eksperimentet.
3. Avoid-adfærden virker slet ikke.
4. Kontakt 'Henrik' ift. kode.
?. Gennemgå rapport for navngivning.
?. Snak med vejleder om rapporten, på mandag
?. Overbliksbillede over leJOS til EV3.
?. Test af opladning.
?. Skriv om Rugwarrior og om leJOS introduktionsvejledning til adfærd

Mål

Fortsæt rettearbejdet af rapporten

Skrivning

Kapitel 2 (EV3) igang.

Skrivelab

Dato:
22 Maj 2014
Varighed:
8 timer

Status

0. Retning rapport baseret på feedback.
1. Opsæt test-miljø så det kan bruges i rapporten.
2. Skriv om eksperimentet.
3. Avoid-adfærden virker slet ikke.
4. Kontakt 'Henrik' ift. kode.
?. Gennemgå rapport for navngivning.
?. Snak med vejleder om rapporten, på mandag
?. Overbliksbillede over leJOS til EV3.
?. Test af opladning.
?. Skriv om Rugwarrior og om leJOS introduktionsvejledning til adfærd

Mål

Fortsæt rettearbejdet af rapporten

Skrivning

Kapitel 2 (EV3) igang.

Tuesday, May 20, 2014

Test-/skrivelab

Dato:
20 Maj 2014
Varighed:
7 timer

Status

1. Opsæt test-miljø så det kan bruges i rapporten.
2. Skriv om eksperimentet.
3. Avoid-adfærden virker slet ikke.
4. Kontakt 'Henrik' ift. kode.
?. Gennemgå rapport for navngivning.
?. Snak med vejleder om rapporten, på mandag
?. Overbliksbillede over leJOS til EV3.
?. Test af opladning.
?. Skriv om Rugwarrior og om leJOS introduktionsvejledning til adfærd

Mål

Gennemgang af rapport med Ole
Opstil eksperiment (IR-sensor + trådtest?)
Skriv om eksperiment (IR-sensor + Trådtest)

Eksperimentet (IR-sensor)

Dette er en opsummering af den samlede erfaring der er tilegnet over projektet, ift. IR-sensorene samt den problemstilling der er omkring dem. Grunden til at denne opsummering er nødvendig, er at arbejdet med at forstå problemet har været langvarrigt, besværligt og fyldt med manglende forståelse.

leJOS med IR-problem

Rugwarrior med IR-problem

Som det kan ses herover, så er der signifikant forskel på hvordan de to implementeringer får de samme beregninger til at undmynte sig i konkret opførsel. Dette var en større overraskelse end hvad godt var, og stemte slet ikke overens med forventningerne om en overordnet set ens udførsel.

leJOS med fejlen
Herover ses hvordan processor-kraften fordeles imellem de forskellige adfærd for video 1 med leJOS. Hver gang adfærd påbegyndes skrives der til loggen. Denne adfærd kører så videre så længe "NO_CHANGE" varer for arbiteren.
Her kan altså ses, at det tog lidt tid inden SeekBall kom ordenligt igang (opstart af EV3 er lidt langsom ift. sensore), men at den derefter kører uafbrudt indtil Attack overtager. Billedet er baseret på gemt data fra kørslen i videoen ovenfor (leJOS med fejl).


Rugwarrior med fejlen
 Her skrives til loggen, hver gang en given adfærd ønsker at påvirke motorene. Dribble og DriveRandom ønsker altid at skrive til motorene, hvilket giver en fin "baseline" for hvordan sådan et tilfælde ser ud.
Her er det desværre tydeligt at der er utrolig langt imellem hvornår SeekBall (den adfærd der har prioritet når robotten ikke har bolden, men kan se den) ønsker at opdatere motor-værdierne. Problemet er ikke at SeekBall ikke har prioritet jf. adfærdshierakiet, men derimod, at SeekBalls tråd 37 skrivninger til loggen på de 27½ sekund der er skrevet til loggen. Det betyder det at seekballs udregninger tager 743 ms om at blive gennemført!
Det interessante er at disse udregninger er identisk med de udregninger leJOS-implementeringen benytter! Forskellen er "blot" at disse udregninger nu er adskilt ud i deres egen tråd... Hvad forskel kan det mon gøre?

Den normale udgave af leJOS (frameworket) til EV3 har kun en klasse til benyttelse af IR-sensoren der er meget begrænset. Den kan kun levere intevaller af 30grader, ift hvor bolden er, relativt til "ligeud". Dette er en betydelig forringelse ift. leJOS (frameworket) til NXT. Af denne grund valgte jeg at kopiere den tidligere implementering over i mit projekt, og benytte den i stedet. Den relevante kode-del er her:

public int getSensorValue(final int id) {
   int register = 0x4A; // mode = AC
   if (id < 1 || id > 5)
      throw new IllegalArgumentException("The argument 'id' must be between 1 and 5");
   getData(register + id - 1, buf, 1);
   return 0xFF & buf[0];
}

Denne getSensorValue kaldes så 5 gange for hver af den indre sensor-retninger i IR-sensoren. Efter undersøgelse af dette besynderlige problem, kunne jeg afgrænse problemet til denne del af koden... Men hvorfor virker det så for leJOS-implementeringen?
Et bud er at tråden, der mappes til en posix-tråd, bliver markeret som en IO-tråd af operativsystemet...
Dette er dog noget ganske nyt! Det betyder også at problemet burde kunne løses ved at mindske mængden af gange der laves IO-operationer:

public void fetchSample(final float[] sample, final int offset) {
   int register = 0x4A;
   getData(register, valueBuffer, 5); // GOOD!
   for (int i = 0; i < 5; i++)
      sample[i] = 0xFF & valueBuffer[i];
   // for (int i = 0; i < 5; i++)
   //    sample[i + offset] = getSensorValue(i + 1);// BAD!
}

Denne implementering løste problemet (laver 1 læsning af længde 5, i stedet for 5 læsninger af længde 1). Det fik i hvert fald robotten til at køre ordenligt og gav et andet billede i log-filen. 53 opdateringer på 19 sekunder. Dvs. 358 ms pr opdatering.
Rugwarrior uden fejlen
Desværre betyder alt dette, at tråde er et emne der skal undersøges ret grundigt. Pludsligt kom implementeringsdetaljer i java, til at blive påvirket af hvilke beslutninger operativsystemet tog. Hvis Rugwarrior ordenligt skal kunne konkurrere med leJOS-implementeringen, så skal dette kunne skjules/forsimples for programmøren, da det er utrolig svært at gennemskue hvordan en tråd vil blive behandlet af operativsystemets scheduller - tilføj til kompleksiteten, at leJOS til EV3 kun benytter en skrabet udgave af et fuldt operativsystem, så mange af debug-redskaberne er ikke installeret!

En given adfærd får altså udover den prioritet jeg giver den, en processor-prioritet alt efter hvor mange og hvor besværlig sensor-information den skal bruge til sine udregninger.

Hele denne utilsigtede undersøgelse giver blot flere bekymringer og overvejelser der naturligt skal undersøges grundigt. Dette kan opsummeres til:
Hvad er tråde ift. leJOS til EV3 og hvilke egenskaber har de?

Trådtest (opsummering af tidligere eksperiment)

Denne test gik ud på at se om problemet kunne løses ved at ændre prioritet af tråde, således at en given tråd ikke blev lavere prioriteret pga. IO-forspøgelser (sensor-målinger). Testen er forholdvis simpel. Start et program, der starter 2 tråde. Hver tråd laver cpu-intensive beregninger, der har en side effect (dvs. resultaterne bruges til sidst i programmet, så de kan ikke ignoreres). Dernæst, se hvad der sker når en tråd har en anden prioritet end en anden.
Ens prioritet:
Det forventede resultat var at begge tråde ville "tælle op" lige hurtigt.
Dette resultat matchede eksperimentet.

Forskellig prioritet:
Det forventede resultat var en af 2 forskellige:
  1. Den lavest prioritede tråd talte aldrig op (fastholdelse af prioriteterne)
  2. Den laveste proriterede tråd talte langsommere op (aging -> tråden fik midligertidigt højere prioritet, når den blev starved længe nok)
Der der skete var dog følgende: Ingen målbar forskel på forskellig og ens prioritet.
En anden interessant problemstilling var dog at programmet heller ikke stoppede, som det skulle. Den boolske værdi som "main"-tåden satte for hver af de to "beregningstråde", der skulle sikre at de stoppede vha. cooperative threading, havde et problem. Problemet er at finde i Java's Memory Model (JMM) og er til dels en smule pinlig - men så tilstrækkeligt vigtig og kritisk at den skal trævles igennem.

public void stopWork() {
   doWork = false;
}

Denne metode blev brugt til at sætte den boolske værdi i trådene til falsk. Og værdien BLIVER faktisk sat til falsk. I main memory. Tråde har dog lov til at benytte caching til local memory og det er uforudsigeligt hvornår tråden vælger at opdatere fra main memory - dvs. den behøver aldrig at opdatere fra main memory, mm. dens interne logik gør det nødvendigt. Dette kommer fra JMM.

Grunden til at jeg benyttede denne fremgangsmåde, uden nærmere eftertanke eller overvejelse ift. concurrency-problemer, er at denne måde at stoppe tråde på bliver brugt et andet sted i mit lego-projekt: leJOS-implementeringen.

public void suppress() {
   suppressed = true;
}

Denne metode har præcis samme problem. Alle steder i programmet hvor dette har været brugt til at kontrollere flowet af kontrol i programmet, har denne kode været brugt. Og den har været forkert. Ikke nok med at den er forkert, så er den baseret på leJOS tutorial der siger at man skal benytte en boolsk værdi, til at angive hvornår tråden skal undertrykkes... Dette er dog ikke nok. Denne boolske værdi skal være volatile, før den virker efter hensigten.
Efter at have spurgt lidt rundt, fandt jeg frem til at ingen jeg har mødt har haft dette i tankerne. End ikke leJOS eksempel (bumper-car) har en volatile suppress (i deres implementation står der endda: "_suppressed = true;// standard practice for suppress methods").

Kort sagt, et komplekst problem, der er svært at opdage og som kan forårsage uventede og utilsigtede problemer.

Skrivning/feedback

Feedback modtaget og rettearbejdet påbegyndt. Feedback betyder også, at det ikke giver mening at påbegynde arbejdet med at få omsat denne blog til rapport, endnu.

Kode-/feedbacklab

Dato:
19 Maj 2014
Varighed:
6 timer

Status

2. Runwarrior-impelmentation mangler gennemtestning.
1. Test af robot der kører i modsat retning.
3. Opsæt test-miljø så det kan bruges i rapporten.
4. Avoid-adfærden virker slet ikke.
5. Kontakt 'Henrik' ift. kode.
?. Gennemgå rapport for navngivning.
?. Snak med vejleder om rapporten, på mandag
?. Overbliksbillede over leJOS til EV3.
?. Test af opladning.
?. Skriv om Rugwarrior og om leJOS introduktionsvejledning til adfærd

Mål

Gennemgang af rapport med Ole
Tilbagelevering af dødt batteri til Ole - evt. erstatning med nyt (virkende)?
Kør robot den anden vej
Test IO implementation
Opladnings-test (sideløbende)

Anden vej + Rugwarrior test

Rugwarrior & leJOS virker. I begge retninger. Variablerne for at de virker GODT er dog ikke specielt præcist kalibreret...
Lysegrøn bane virker stadig mærkbart bedre end mørkegrøn bane...

leJOS

lejos ses ovenfor, i en virkende udgave. Rugwarrior ses nedenfor, i samme virkede version. Der kommer mere om den fejl der er fikset i morgen...

Rugwarrior

Der ser en tydelig forskel på de to implementeringer. Dette er som forventet, da de er ret forskellige. Dog er alle udregninger for hvordan robotten skal løse hver opgave (adfærdens handling) identisk!

Test af batteri-levetid i semi-forbrug (IR-bold og EV3)

4 x AAA batterier fra IKEA (bold). Fuldt opladet inden brug.
EV3 10V (EV3)
Start: 9.42
Slut bold: 16.43
Slut EV3: 14.38

Periode bold: 7 timer 1 min
Periode EV3: 4 timer 56 min

Batteri-forbruget af EV3 svinger dog meget alt efter hvilken type brug robotten har: en faktor 10 ifølge http://www.dexterindustries.com/blog/2013/12/04/ev3-current-consumption-measurement/.

Tanker ift. rapport

Trådtest 

  1. Årsag til trådtest: IRSeeker til EV3 -> IRSeeker til NXT -> IRSeeker genimplementeret
  2. Trådes egenskaber i leJOS? ->
  3. Trådes egenskaber  på EV3!?
  4. Problem med leJOS "suppressed" jf. deres tutorial
Skriv om denne "rejse" igennem opdagelserne, så det virker til at der er en rød tråd i eksperimenterne.
Forberedelse af eksperimentet for trådtest... Done.

Sammenligning af de 2 implementeringer

  1. Gennemgang af konkret kørsel af robotterne. Løser de opgaven? Hvordan afviger de fra hinanden?
  2. Forsimpling af "løs opgaven" -> "concurrency problem" (pre-/post-conditions)
  3. Forslag til kode-ændringer der forbedrer "opgaveløsningen" af de 2.
Jeg forventer at pkt 3 naturligt vil fremstå, men det er stadig en uvished om det er tilfældet... Pkt 3 skal underbyggest/-støttes af eksperimentet!


Gennemgang af rapport + batteri

Ikke i dag - udskudt til i morgen... Fik dog lidt feedback, så det er muligt at komme igang med min del om eksperimenterne i rapporten.
Batteri tilbageleveret.

Thursday, May 15, 2014

Kodelab

Dato:
15 Maj 2014
Varighed:
4 timer

Status

2. IO Runwarrior-impelmentation mangler gennemtestning.
1. Test af robot der kører i modsat retning.
3. Opsæt test-miljø så det kan bruges i rapporten.
4. Avoid-adfærden virker slet ikke.
5. Kontakt 'Henrik' ift. kode.
?. Gennemgå rapport for navngivning.
?. Snak med vejleder om rapporten, på mandag
?. Overbliksbillede over leJOS til EV3.
?. Test af opladning.
?. Skriv om Rugwarrior og om leJOS introduktionsvejledning til adfærd

Mål

Kør robot den anden vej
Test IO implementation
Opladnings-test (sideløbende)

Tanke - eclipse plugin

Hvis eclipse-pluginet ikke kan få kontakt til bricken, kan eclipse enten genstartes, eller en manuel ssh kan oprettes til bricken (unix: fra terminal := "ssh -l root 192.168.1.143" => intet password => "exit").

Anden vej + Rugwarrior test + opladnings-test

Rugwarrior virker, MEN. Desværre er mit nye batteri dødt ved ankomst, så efter aktivt af aflade mit gamle (for at måle opladningstiden) står jeg med et tomt batteri og et dødt batteri; dvs. ikke flere tests for i dag :(

Jeg fik dog rettet problemet med at sigte - det var "blot" en værdi for præcision der skulle rettes til.

Gennemgang af rapport

Gennemlæsning og rettelser i rapporten giver ingen mening før jeg har fået feedback fra vejleder. Desværre betyder dette at jeg nu står tilbage uden mulighed for at arbejde videre for i dag - tidlig afslutning på dagen :(

Wednesday, May 14, 2014

Kodelab og vejledning

Dato:
14 Maj 2014
Varighed:
5 timer

Status

2. IO-impelmentation mangler gennemtestning.
3. Test af robot der kører i modsat retning.
4. Avoid-adfærden virker slet ikke.
5. Implementeringerne skal have nye navne.
6. Kontakt 'Henrik' ift. kode.
1. Snak med vejleder om rapporten.
?. Overbliksbillede over leJOS til EV3.

Mål

Find Ole og snak om rapport
Kør robot den anden vej
Test IO implementation

Anden vej

Ved test af kørsel i den modsatte retning var der en rækkesmåfejl ift. gradberegning der skulle rettes. Derudover var der et problem ift. hvordan robotten ser afstanden til mål - den kan ikke altid se vægen i den "anden ende" af banen, hvilket bevirker at robotten tror den har mistet bolden. Dette blev fikset ved at bygge ultra-lydssensoren lidt om.

Snak med Ole

Aftalt at snakke om rapport på mandag.
Efter lidt snakken frem og tilbage overtalte Ole mig til at ændre navnet for IO- og interrupt-implementationerne, til et andet navngivningsformat jeg tidligere havde overvejet: Rugwarrior- og leJOS-implementation.
Husk at inddrage lidt beskrivelse af Rugwarrior fra bogen, i rapporten. Tilsvarende skal der skrives en smule om leJOS ift. deres vejledning.
Fik endnu et batteri, så test kan forløbe længere. Skal holde øje med tiden før robotten dør samt opladningstid.


Lego siger at det burde tage 3-4 timer...
Start opladning: 15.21
Slut opladning: 







Friday, May 9, 2014

Kodelab

Dato:
9 Maj 2014
Varighed:
6 timer

Status

1. Aiming-adfærden virker ikke ordenligt.
2. Avoid-adfærden virker slet ikke.
3. Implementeringerne skal have nye navne.
4. Kontakt 'Henrik' ift. kode.
?. Overbliksbillede over leJOS til EV3.

Mål

Find ud af hvorfor aiming-adfærden ikke fungerer og orden problemet.
Tænk over en løsning til at få avoid til at fungere.

Aim

Robotten kører ofte hen til angrebs-positionen, sigter på målet og fryser. Problemet virker til at den ikke rent faktisk får sigtet sig ind på målet præcist nok ift. hvornår dens condition er tilfredsstilt.
Problemet ses herunder


Dette problem skulle naturligvis løses, da hele robottens formål ikke er opnåeligt som det ser ud nu.
Dette problem er nu mere eller mindre løst - der mangler stadig test af IO-implementation, bedre kalibrering samt test af kørsel i modsat retning.


Avoid

Hvis alle sensor-målinger bliver pooled, kunne jeg finde nogle gennemsnit over de 5-10 sidste målinger og hvis alle målinger ligger inden for en konstant, så vurdere at robotten står stille... Lidt besværligt. Evt. samme princip kun med ultralyd (men så virker det kun når robotten har bolden). Kombineret med ir-sensor og kompass-sensor kunne det måske fungere?
Besværligt...

Thursday, May 8, 2014

Kodelab (edited)

Dato:
8 Maj 2014
Varighed:
7 timer + 3 timer test

Status

1. Koden for IO skal skrives om så den passer 100% med bogen og interrupt-implementationen.
2. Implementeringerne skal have nye navne.
3. Kontakt 'Henrik' ift. kode.
?. Overbliksbillede over leJOS til EV3.

Mål

Få IO-implementationen til at fungere
Snak med ven om billeder i rapporten

Kode

IO-implementeringen driller en del; det er svært at finde frem til præcis hvor fejlen opstår - i adfærden eller i arbiteren. Det kombineret med, at een forkert adfærd nemt kan få konsekvenser for en helt anden (med lavere prioritering) har skabt lidt bøvl for mig.

Koden er kommet dertil, at den nu fungerer præcis ligesom leJOS fra robotten ser og fanger bolden, indtil den finder ud til en af "angrebs-banerne". Loggeren fungerer også, og med de nye ændringer burde det også kun være relevant data der bliver gemt.

Koden ser også ens ud, nu. Fordel! Har man læst implementationen for den ene, har man en god ide om hvordan den anden ser ud (=lighed i kode-stil gør det nemmere at argumentere for at forskelle i adfærd ikke skyldes kode-fejl!++)

Adfærdene benytte samme kode til alle beregninger, så det kun er selve adfærds-hierakiet der nu sammenlignes. Dette betyder dog at PID er en smule "misbrugt" ift. den oprindemige tankegang:

Hvert gennemløb af en PID giver baseret på en fejl-værdi en korrektionsVærdi. PID-kontrollerne er nu pakket således ind, at selve koden der beregner fejlVærdi er gemt væk, så blot korrektionsVærdien bliver returneret. Herunder et eksempel:
final int[] power = pid.getMotorPowers(0, SPEED);mc.setB(power[0]);mc.setC(power[1]);

Snak om billeder 

Gennemgang af rapport's indledning, samt snak om hvordan billederne kan forbedres (læs: udskiftes).

Wednesday, May 7, 2014

Kodelab

Dato:
7 Maj 2014
Varighed:
6 timer

Status

1. Koden for IO skal skrives om så den passer 100% med bogen og interrupt-implementationen.
2. Implementeringerne skal have nye navne.
3. Kontakt 'Henrik' ift. kode.
?. Overbliksbillede over leJOS til EV3.

Mål

Få leJOS-implementationen til at fungere

Kode

leJOS-delen fungerer nogenlunde nu - aim-adfærden går forholdsvis ofte i en deadlock, men dette burde være til at fikse.
Desværre er den mere effektive måde at skrive kode på (dvs. run direkte fra eclipse) kombineret med den lange opstart-tid for bricken skyld i at min robot løb tør for batteri (da jeg ikke slukkede den).
Løsning kunne være at huske at sætte den til opladning eller at få endnu et batteri?

IO-implementationen blev derfor nød til at vente til en anden dag...

Tuesday, May 6, 2014

Nyt leJOS (v 0.8.1 beta)

Dato:
6 Maj 2014
Varighed:
5 timer

Status

2. Koden for IO skal skrives om så den passer 100% med bogen og interrupt-implementationen.
3. Implementeringerne skal have nye navne.
4. Kontakt 'Henrik' ift. kode.
?. Overbliksbillede over leJOS til EV3.
?. Opdater leJOS til 0.8 pga. respons på blog
1. Se efter om alting fungerer som det skal på bricken

Mål

Få det nye leJOS op og køre på bricken.
Afprøv det nye leJOS-plugin til eclipse.
Ret ødelagt kode, hvis der er noget.
Fortsæt tilpasning af kode.

Plugin til leJOS

Plugin fungerer. Det var nemmere at bruge, opsætte og få til at fungere end NXT-udgaven. Super!
Wifi er stadig noget bøvl at opsætte - skrives adgangskoden til et netværk forkert 1 gang, skal man bruge root adgang for at kunne opsætte netværket korrekt...
Bricken nemmere at opsætte vha. microSD-kort - restore image + kopier 2 zip-filer er alt det nu kræver. Resten opsættes første gang bricken starter med kortet indsat.

Version 0.8.1

Jeg ved ikke hvordan jeg skal oprette motor-klasser. Den måde jeg benyttede er "ikke anbefalet", men jeg kan ikke finde kode-eksempler på hvordan ikke-regulerede motore skal instantieres...
På den positive side, så vises java-fejl nu rent faktisk i displayet (endeligt!). Uheldigvis fandt jeg frem til dette ved at have fejl ift. nedlæggelse af motor og sensor-klasser: Det er tilsyneladende ikke meningen at jeg manuelt skal nedlægge et Closeable objekt; det tog selvsagt noget tid at finde frem til...

Roboten kan nu "køre" igen, men hele iterationen af at teste hver adfærd grundigt, mangler. 

Endelig er leJOS gået fra alpha til beta!

Kontakt via bloggen

En udvikler fra leJOS har skrevet en kommentar på min "gamle" test-blog, for at gøre opmærksom på at den nye udgave af leJOS retter op på noget måleusikkerhed. Jeg har besluttet at gentage forsøget i den nye ugave af leJOS (og at opdate det omtalte indlæg), så snart jeg har min robot nogenlunde oppe at køre.

Monday, May 5, 2014

Hardwareproblemer

Dato:
5 Maj 2014
Varighed:
7 timer + 1 time weekend

Status

1. Koden for IO skal skrives om så den passer 100% med bogen og interrupt-implementationen.
2. Implementeringerne skal have nye navne.
3. Kontakt 'Henrik' ift. kode.
?. Overbliksbillede over leJOS til EV3.
?. Opdater leJOS til 0.8 pga. respons på blog
1. Laptop død

Mål

Eftersom min laptop ikke fungerer er første prioritet at fikse den...

Rapporten & Weekenden

I løbet af weekenden er der brugt lidt tid på at rette og få feedback på rapporten fra familien.
I løbet af i dag fik Ole en kopi, der forhåbenligt kan forståes nogenlunde.

Laptop

Harddisk død. Den er nu udskiftet og stort set alt er genskabt, så specialearbejde kan fortsætte hvor det slap. Fordelen har dog været at "opdatering" til leJOS 0.8.1 beta (ikke længere alpha?) ikke har været "svært", da det nu er en clean install...

Friday, May 2, 2014

Testlab

Dato:
2 Maj 2014
Varighed:
6 timer

Status

1. Koden for IO skal skrives om så den passer 100% med bogen og interrupt-implementationen.
2. Implementeringerne skal have nye navne.
3. Kontakt 'Henrik' ift. kode.
?. Review af rapport. Inkluderer bilag.
?. Overbliksbillede over leJOS til EV3.
?. Snak med anden speciale-gruppe om gensidig gennemlæsning/retning af rapport.

Mål

Find den anden gruppe og snak om rapport
Fortsæt arbejde med kode og påbegynd test af at den opfører sig korrekt.

Den anden gruppe

God dyb snak med anden gruppe om en række emner:

  • LaTex brug, makroer og layout
  • Tidspunkt for udveksling af rapport til peer review (start juni)
  • Snak om hinandens specialer (forståelse ift. fremtidig gennemlæsning)
Snakken var fin, kort og præcis.

Koden

Fodboldbanen er en "smule" beskidt...

Fik rettet problemet med IR-sensoren. Grundlæggende har leJOS til EV3 skjult alt rå data, hvilket betød at jeg var nød til at genbruge den gamle udgave af IR-sensoren, fra NXT-udgaven af leJOS. Fejlen opstod pga. sjusket implementeret fetch vha. I2C: I stedet for at forespørge om hele registerlængden (5) blev der lavet 5 foresprøgelser af længde 1 hver. Dvs. der blev lavet 5 x IO-ønsker, hvilket jeg tror har ændret trådens prioritet til at være lavere... Det var lidt besværligt at finde frem til hvad der sker i koden, men det er nu rettet til således at EV3-måden at benytte sensore på er vedligeholdt, samtidig med at den "gamle" mulighed for at få RAW data er genoprettet.
Det bliver sjovt at se om IR-sensorens fiks har ordnet timing-problemerne, hvilket leder videre til:

Log-funktionen er død på et tidspunkt. Den fejler uden at fejlen oplyses... Uvist hvor længe fejlen har eksisteret, så det er ikke muligt at "gå tilbage" til virkende udgave... *suk* Hvorfor skjule runtime-fejl?

Koden er som helhed skrevet en del om. Begge implementeringer er nu tvunget ind over at benytte samme objekter til at beregne deres motor-kraft. Dette skulle forhåbentligt sikre mig imod at jeg laver forskel på hvordan de opfører sig, uden at det er min intention.

Robotten løb tør for strøm, så var nød til at stoppe tidligere. TODO: Husk at oplade den i frokost-pausen!