torsdag den 6. januar 2011

2011/01/06

6. Januar

Dato: Torsdag d. 6 januar
Tilstedeværende: Line og Lars Christian
Varighed: 7 timer
Mål: Færdig med fase 2, dvs. bane + enderobot færdig
Plan: Lars Christian arbejder på bluetooth kommunikation mellem robot og computer, Line arbejder på programmering af enderobot.

Vi startede med at lave en plan for hvordan enderobotterne skulle programmeres. Vi har diskuteret forskellige designforslag her iblandt behavior-based som er den vi har valgt at bruge.
Vi har overvejet følgende designforslag:

Vi valgte at bruge behavior-based design fordi dette virkede som det mest simple og logiske valg. Vores robot skal kunne nogle meget simple ting som at køre frem og tilbage indtil den ser en bold eller enden af banen. Dette er meget simpel opførsel, der burde være meget overskuelig at implementere i forskellige behaviors. Det er desuden også nemmere at debugge med flere behaviors da det er nemmere at se i hvilken behavior det går galt.
Skulle det implementeres sekventielt ville det kræve mange while-løkker / if - statements bl.a. fordi at det vigtigste robotten skal gøre er at skifte retning så den ikke kører ud over kanten. Hvordan man skulle implementere dette har vi ikke gjort os flere tanker om da det virkede meget kompliceret, og unødvendigt.
Vi overvejede muligheden for at bruge PID-kontrol til at styre sensorene så vi f.eks. kunne køre tættere på bolden.

Vi besluttede os for at starte med et behavior-based design, og hvis tiden tillader det vil vi senere udvidde det med PID-kontrol til at køre tættere på bolden.

Behaviors

Vi valgte at bruge den udleverede Behavior-klasse (fra lab 8) og udvide den med funktioner til vores robot. Ligeledes tog vi (den meget benyttede) Car klasse og skrev den om til kun at håndtere en enkelt motor.

Vi skal have tre behaviors:
  1. Drivebehavior: Nederst i hierakiet som får robotten til at køre (retningen sættes StopBehavior).
  2. Search-behavior: Leder efter en bold, stopper robotten og sparker hvis den finder en.
  3. Stopbehavior er øverst i hierakiet leder efter sort underlag og ændrer retningen.


Dette gik Line i gang med at programmere. Undervejs stødte vi på nogle mindre problemer, bl.a. gjorde manglende kendskab til LeJos API at Line længe bøvlede med at få en af de gamle lyssensorer til at virke.

Da alle tre behaviors var implementeret gik vi i gang med at teste dem. Robotten stoppede i de sorte felter da den konstant skiftede retning. Derfor implementeredes i StopBehavior en while-løkke der sørger for at StopBehaviour ikke skifter retning før der var målt hvidt underlag.
For at nå til denne erkendelse prøvede vi at logge data i en datalogger (koden er her) og så at det ikke var fordi sensoren ikke målte de data der skulle til for at aktivere StopBehavior. Desuden skrev vi en masse data på displayet hvilket også forstyrrede robottens kørsel ved at bruge en masse ressourcer på at opdatere displayet hver eneste gennemgang af løkken. Dette gjorde at robotten ikke nåede at reagere på sensorerne før det var for sent (og en enkelt gang kørte ud over kanten af banen).
Da vi fik ændret disse ting kørte robotten som forventet.

Lars Christian startede dagen med at have en masse problemer med kommunikation over bluetooth - ikke specielt med robotterne bare helt generelt (upload af data samt discovery til NXT). Målet var at få kommunikation til virke begge veje, vi fandt nogle eksempler (Lejos’ egen eksempler) på hvordan dette kunne lade sig og gøre, og da bluetooth først virkede var dette ikke et problem at få til at køre. Dette gav os grundlaget for at arbejde med bluetooth både som debugging, kontrol og informations værktøj.

Line arbejde samtidigt på at få banen gjort færdig, hvilket har involveret en del savning, boren og legobygning. Vi endte med at få gjort plads til både lyssensorer og de to lyskastere i to bjælker som vi har monteret på banen.


Konklusion
Vi har i dag nået vores mål. Vi har bygget banen færdig (stort tømmerarbejde) samt fået enderobotten til at køre med 3 behaviors der skifter som forventet. Alt i alt betyder dette at vi nu er færdig med 2. fase af projektet.
Da lyset på banen skifter i løbet af dagen kan vi ikke fastsætte værdier for bolde og sort på banen, så næste skridt er at implementere en kalibreringsfunktion.
Desuden skal vi have arbejdet mere på midterrobotten, som vi syntes det kunne være sjovt at montere omnihjul på. Midterrobotten skal kontrolleres fra en PC via bluetooth.
Bluetooth kommunikation mellem PC og NXT skal viderudvikles så vi kan få kommunikationen til at virke imellem de forskellige robotter.

torsdag den 16. december 2010

2010/12/16

Torsdag 16. Dec:
Til stede: Daniel
Varighed: 1 time
Mål: At få PCen til at sende andet en strings, debugge kommunikationen og prøve at etablere kommunikation fra NXT til PC.
Plan: Vil prøve at få string kommunikation til at virke, derefter kommunikation fra NXTtil PC.

Jeg kunne ikke få NXT’en til at sende strings til PC'en. Sluttede af med at droppe det til fordel for at begynde at debugge den anden kommunikationsvej. Nåede ikke længere.

Konklusion:
I dag nåede jeg ikke andet en at genskrive koden og finde flere ressourcer som ikke kunne hjælpe mig med buggen.

onsdag den 15. december 2010

2010/12/15 - Daniel

Onsdag 15. Dec:
Til stede: Daniel
Varighed: 10:00-18:00
Mål: Programmere robotten og teste den fysiske opbygning.
Plan: Først vil jeg teste den fysiske del af robotten (gribe evne og modstand i systemet), derefter implementere kommunikation mellem NXT og PC.

Starter i dag med at lave et simpelt program der får robotten til at køre lidt rundt, lave nogle sving og lignende. Dette gør jeg for at teste modstanden i systemet og grebet. Begge ting viste sig ikke at være noget problem. Den har fuldt greb på alle slags overflader og jeg kunne ikke registrere nogen modstand fra støttebjælkerne.

Dernæst ville jeg prøve at etablere kommunikation fra PC til NXT’en. For god ordens skyld lavede jeg en Swing GUI, da jeg havde erfaring med det tog det mig ikke lang tid.

Lejos stiller nogle biblioteker til rådighed for at kunne etablere bluetooth kommunikation mellem PC og NXT, som jeg fandt efter en times tids søgning i dokumentationen.
Man skal implementere pcomm bilioteket (lejos/pccomm/lib/pccomm.jar) for at kunne lave et NXTConnector object, som har mange muligheder for at kommunikere over USB og bluetooth, både ved MAC adresser, NXT navn og regulære udtryk. Den kan lave lister og oprette forbindelse til et object.

Efter en times tid til fandt jeg ud af at den havde brug for bluecove.jar (bluecove) for kunne etablere kommunicationen. Til sidst efter en times tid mere fandt jeg så ud af at man var nødt til at slette java.class fra biblioteket for at man kunne undgå tråd fejl.

Derefter kunne man etablere kommunikation mellem NXT og PC. Relativt hurtigt (i forhold til hvor meget tid de andre ting i løbet af dagen havde taget) lykkes det mig at sende int fra PC'en til NXT’en og på den måde få NXT’en til at tage imod kommandoer.

Der var dog en bug med at hver anden kommando bliver læst som en error (et tal som ikke er en af de valgte ints) og dermed får robotten til at stoppe.

Så nu mangler jeg kun at få ordnet den bug og etablere kommunikation fra NXT til PC'en.

Konklusion:
Det lykkedes at oprette kommunikation over bluetooth i dag. Der er dog flere bugs i systemet der skal arbejdes på, men man kan sende integers fra PC’en til NXT’en.

tirsdag den 14. december 2010

2010/12/14 - Lab 13

Lab 13

Dato: 14/12 2010
Tilstedeværende: Lars Christian, Line og Daniel
Varighed: 6 timer (Daniel blev et par ekstra timer)
Mål: At få bygget alle tre robotter samt bane. Begynde at programmere enderobotterne. Dvs. afslutte 1. fase og begynd på 2. fase.
Plan: Lars Christian bygger enderobot færdig + ændrer android-softwaren, Line begynder at bygge enderobot nummer to. Samtidig vil Daniel (og Line) bygge banen, og bygge enderobotterne så de kan køre på banen.

Planlægning
I forhold til planen vi lavede i sidste uge har vi valgt at lave lidt om så vi får bygget både enderobotter, smørklat og bane parallelt. Enderobotterne skal tilpasses banen, som også skal tilpasses til bolden, så den stopper i enderne. Smørklatten skal bygges så den kan køre fra side til side imens der tages hensyn til at bolden ikke må kunne sidde fast i robotten.

Konstruktion af enderobot og bane
Vi byggede videre på udkastet til robotten fra sidste uge, men efter at have bygget skydearmen og hjul sammen til en stabil konstruktion havde vi svært ved at få selve NXT’en placeret så den ikke sad i vejen og heller ikke fik fordelt vægten alt for skævt.
Samtidig gik vi i gang med at bygge banen. Vi byggede nogle forskellige konstruktioner af mure og bakker for at stoppe bolden. Herefter lavede vi nogle eksperimenter med den (næsten) færdige robot for at finde ud af ca. hvor hårdt den skød og dermed hvilken mur der var bedst til at stoppe bolden. Vi endte med at finde en mur som kunne stoppe de fleste bolde så længe de ikke bevægede sig for hurtigt eller langsomt, men stadig gjorde det muligt at skyde til boldende.
Herefter monterede vi lyssensoren på enderobotten så den kunne finde bolden.
Vi ændrede softwaren til mobilen (link til koden under videoen, fra lab 11) så robotten kun kan køre frem og tilbage, og der på telefonen var en action knap der aktiverer slå-armen. Vi lavede forsøg med robotten for at teste om den slog tilstrækkelig hårdt, og tilpassede motor hastighed så bolden røg over bakken men ikke over muren, det foreløbige resultat ses her:




og koden kan ses her

Vi prøvede at gøre armen lidt længere og stramme elastikken for at få den til at skyde med den rette kraft hver gang så bolden røg op i randen hver gang. Dog har vi problemer med at et skud hvor bolden ikke rammes lige på resulterer i at bolden ikke får nok fart på til at nå over barrieren i den anden ende.
Samtidig gik vi i gang med at bygge en lille kompakt midter-robot.
Banen er ikke helt færdig da vi ikke har sat lys sensorer op. Dette skyldes at vi i gruppen på nuværende tidspunkt ikke er enige om udformningen af spillet. Diskussionen går på hvorvidt det er bedre at lade midterroboten have sensorer monteret så den selv kan mærke når den bliver ramt.

Vi fik udleveret tre nye NXT’er som vi re-flashede alt imens der blev bygget på smørklat robotten.

Daniel blev længere end os andre og byggede videre på midterrobotten.

Midterrobotten

Vi prioriterer basis funktionaliteten først (transport), når den fungerer kan vi lave iterationer med mere funktionalitet.

1. Iteration er med larveføder, man kan få den samme mobilitet med 2 hjul og 1 støttehjul, men vi vil gerne se hvordan larvefødderne opfører sig.

Lego-bygning
Problemet med lego larveføderne er at de er meget følsomme overfor hvordan de bliver strammet op. Men hvis man vender vrangen ud på dem får de meget støre greb på drivhjulende. Dog skal det testes om de stadig kan gribe fat i overfalden, det forventer vi da fødderne ikke er blanke på "indersiden" (som nu er ud af).

Et nyt problem er at når man vender vrangen ud af kan hjulene ikke holde fødderne lige på hjulene. Så jeg byggede støttebjælker på siden der skulle holde hjulende på plads. Muligt problem er at støttebjælkerne danner for meget modstand på fødderne, men det tjekker jeg når robotten kan køre.

Da jeg havde placeret fødderne på motorene skulle jeg bygge det hele sammen med NXT’en. Der erfarede jeg hvor klogt det ville være at bygge alting omkring NXT’en først, i stedet for at smide den ind i konstruktionen bagefter. Men efter noget tid, og nogle gode råd, fik jeg bygget en solid, smal konstruktion

Man kunne måske have en smallere konstruktion, men det vil gå ud over balancen, da NXT’en så skal hæves længere op i konstruktionen


Konklusion
Vi har i dag fået bygget robotter og bane, samt testet af disse fungerer sammen. Herefter skal vi til at programmere robotterne.
Vi mødes ikke i gruppen igen før efter jul. Derfor har vi aftalt at Daniel arbejder videre på at bygge midterrobot samt at programmere denne. Line overvejer hvordan vi skal bruge lyssensorer både dem på banen og på robotten, og hvordan dette kan programmeres. LC arbejder på hvordan enderobotten skal programmeres.

Daniel har fået bygget en solid midterrobot som bruger larvefødder, den testes i morgen.

torsdag den 2. december 2010

2010/12/02 - Lab 12

Lab 12

Dato: 2/12 2010
Tilstedeværende: Lars Christian og Line (Daniel er syg)
Varighed: 5 timer
Mål: Vælge slut projekt, sørge for at alle dele til projektet er her og begynde planlægning af projektet, gå i gang med første fase.
Plan: Kontakte Daniel for at høre hans tanker om de forskellige projektidéer, få fat i manglende dele (bestille/få af Ole), finde ud af hvordan projektet skal planlægges, dele det i faser, starte på den første fase hvis der er tid.

1. Valg af projekt
Vi ringede til Daniel for at høre hans tanker om de 3 end-course projekter vi beskrev i den forrige blog. Han svarede desværre ikke, derfor bliver vi nødt til at beslutte et projekt uden ham. Vi har herefter en-stemmigt besluttet at lave vores idé nummer 1: pingpong/smørklat.

2. Bestilling af dele
Vi skal have bestilt 4 omnihjul til "smørklat" robotten og have fat i to NXT'er mere samt flere motorer.
Efter en snak med Ole omkring vores ide har vi ændret konceptet i vores spil. Ole kommer med flere NXT'er og motorer + sensorer.

Beskrivelse af det nye projekt.

På billedet ovenfor ses grundideen i det "nye" spil. Her har vi to robotter (en i hver ende) der hver har ansvaret for at skyde til bolden når den er i deres ende (nedenfor ses beskrivelse af hvordan). I midten har vi smørklatten der har to bumpers monteret så bolden ryger tilbage hvis smørklatten rammes. På banen er der to lysstriber disse skal registrere hvorvidt bolden har været forbi dem.
Når den ene robot i enden skyder til bolden sender den et signal til computeren om at der er skudt, så begynder lyssensoren at lytte for at finde ud af hvor langt bolden kommer, kommer den kun forbi den ene lyssensor har smørklatten blokeret bolden og skal derfor have point. Der gives point ved at begge lyssensorer skal have set bolden inden for x tid efter der er blevet skudt, og hvis kun den ene har sendt signal til computeren om at den har set bolden inden for x tid, bliver der givet point. Det er computerens ansvar at holde styr på hvor mange point der er givet.
Ende-robotterne skal skyde til bolden ved hjælp af en slags arm der skal om bag bolden.

Vi prøver at simplicifere vores oprindelige ide og derfor vil vi gerne finde en måde at finde bolden på uden brug af kamera + software. For at gøre dette har vi tænkt os at montere en lyssensor på de to enderobotter så de kan genkende lysintesiteten fra bolden, i forhold til omgivelserne.
På banen skal der monteres en barriere som sørger for at bolden ikke flyver ud af banen, men samtidig også sørger for at bolden bliver liggende i enden så enderobotterne kan nå den. Vores ide er at bygge to barrierer (se skitse nedenfor), hvor den lille skal sørge for at bolden bliver i enden og den store for at bolden ikke flyver ud af enden.



3. Planlægning
Vi vil gerne dele projektet i flere dele så vi har en fornemmelse af hvor langt vi er og hvor meget vi mangler undervejs. Nedenfor ses den foreløbige plan for hver fase
1. Fase
  • Test af lyssensor og lamper til lysstriberne (rækkevidde)
  • Bygning af enderobotter
  • Bygning af smørklat


2. Fase
  • Bygning af bane (med bump og lys + sensorer)
  • Programmering af enderobot
    • Køre fra side til side
    • Undgå bander
    • Finde bolden og stoppe (via. lyssensor)
    • Skyde til bolden


Efter 2. fase skulle vi gerne have to robotter der skyder bolde imellem hinanden.

3. Fase
  • Programmering af lysstribe
    • Sende signal til pc om afbrydelse
  • Programmering af smørklat
    • Køre fra side til side
    • Fjernstyring, men kun fra side til side
  • Koordinering med PC
    • Point (lyssensor)

Vi skulle nu gerne have et færdigt spil smørklat

4. Fase (udvidelsesmuligheder)
  • Smørklat på omnihjul der kan køre rundt, men stadig blokerer bolden.
  • Smørklat med egen vilje - f.eks. bakker når du bliver for ivrig / kører for tæt på kanten.
  • Styring af sigte med enderobotterne så de ikke bare skyder ligeud - men i en tilfældig retning.
  • Spille med flere bolde.



4. I gang med 1.fase
1. Test af lyssensorer
Vi byggede fire af de små lamper sammen, og satte sølvcones på for at fokusere lysstrålen. Vi testede med et af de programmer vi tidligere har brugt for at måle hvad lysintensiteten var. Vi målte den til at være hhv. 48 og 54 med ca. 80 cm i mellem lampe og måler, hvilket er tilstrækkeligt til at bolden kan registreres.

2. Bygning af robot
Vi startede med at lave en prototype til en skydearm og besluttede os for at lave den lodrette model, fremfor den vandrette (se billedet nedenfor). Dette valgte vi fordi at vi gerne vil have muligheden for senere at spille med flere bolde, og i det tilfælde vil vi kun skyde til en bold af gangen, hvilket vi ikke er sikre på vi ville kunne kontrollere med den vandrette udgave af skydearmen.

Desuden besluttede vi at forsøge at bygge robotten så det var nemt at montere/afmontere NXT'en hvis dette skulle blive nødvendigt (så det var nemt at genstarte NXT'en efter en software error).


Konklusion
Vi har i dag valgt et projekt, overvejet hvordan projektet kan laves og forsimplet den originale ide. Vi er begyndt på startfaserne af projektet, testet lyssensorer og overvejet designet af vores robot. Vi er kommet frem til at vores robot skal bygges med en lodret slå arm og så NXT’en let kan afmonteres. Ud fra vores test af lyssensorer har vi konkluderet at vi kan registrere når bolden kommer forbi, og derfor kan bruge dem som forventet.
Vi skal nu til at bygge robotter og bane, hvorefter vi skal til at programmere.

torsdag den 25. november 2010

2010/11/25 - Lab 11

Lab 11

Dato: 25/11 2010
Tilstedeværende: Lars Christian og Line
Varighed: 3 timer
Mål: At finde slut projekt
Plan: Brainstorme projekt ideer, vælge de 3 bedste ud, beskrive dem og ud fra disse vælge den bedste ide.

1. Brainstorm
Ideer:
  • Legway - Balance robot.
  • Ping-pong
  • BattleBots - Robotter der forsøger at skyde hinanden med lasere.
  • Smørklat - To robotter skyder bolde imellem hinanden imens en tredje imellem dem skal forsøge at fange dem.
  • Ræs, fjernstyret bil der skal køre hurtigt gennem en forhindrings bane

Teknik vi gerne vil bruge, der har været inspiration til vores brainstorm:


2. Afvisning af ideer
Vi afviste hurtigt ideen med battleBots fordi den er for teknisk besværlig, da det kræver at vi kan skyde og opfange laserskud. Hvilket vi ikke kan se nogen umiddelbar løsning på. Desuden fandt vi ikke ideen specielt interessant i forhold til de andre ideer.

3. Vores 3 bedste ideer
Vores tre favorit ideer er blandet af de resterende emner i vores brainstorm.
1. Ping-pong / Smørklat

Vores ide til ping-pong udsprang fra et ønske om at bruge camera-tracking. Derudover ville vi gerne bruge omnihjul, disse kunne bruges til at programmere en robot bold da omnihjul giver os mulighed for “skæve” bevægelser uden at skulle rotere robotten (eksempel: http://www.youtube.com/watch?v=qiqqbrLEfo4).

Udfra denne ide fandt vi på smørklat, hvor en robot i midten på omnihjul forsøger at fange bolden som de andre spillere skyder imellem hinanden.
Hvad er svært i dette projekt:
  • At få lavet slåarme til robotterne så de kan skubbe/slå til bolden.
  • At få lavet fangearme så vi kan registrere vi har fanget bolden.


Hvad vil vi gerne fremlægge:
Et spil smørklat hvor man styrer robotten i midten og skal forsøge at fange bolden. Styringen kunne foregå via. Wiimote eller fjernstyret fra mobilen eller pc.

Til projektet skal vi bruge følgende:
  • Bane med bander
  • Omnihjul
  • 3 NXT'er
  • 6 motorer +-
  • Tryksenorer
  • Camera-tracking software


2. Armkontrol/ræs

Vi har tidligere forsøgt at konstruere noget ud af Lego som kunne sidde på armen og opfange hånden og fingrenes bevægelse og give os mulighed for at styre en robot derigennem.

Ud fra denne “håndleds-kontroller” syntes vi det kunne være sjovt at programmere en bil-robot hvor retningen styres ud fra armen/håndledets bevægelse og speeder, bremse, kobling og gear styres med fingrene.
Med dette vil vi enten lave en bil der kører ræs (f.eks. på tid, eller mod en anden robot) rundt om forhindringer.
En anden ide kunne være en bilsimulator som simulerer en køreprøve (parallelparkere, bakke om hjørne). Derudover kunne bilen også have sit eget liv, i form af at den f.eks. overtager kontrollen når det bliver farligt.
Hvad er svært?
  • Bygge håndleds-kontroller, og få denne til at fungere


Hvad vil vi fremlægge:
Enten en slags bilsimulator, eller en bil der kan køre ræs, men med sin egen mening om tingene (f.eks. nægter at køre stærkt når man er for tæt på muren)

Til projektet skal vi bruge:
  • 2 eller 3 NXT'er
  • Gyroskop
  • 4-6 motorer +-
  • evt. bane


3. Legway

Vi er i gruppen meget facinerede af legwayen og synes det kunne være sjovt at lave den. Desværre har vi svært ved at finde på noget der ikke blev udviklet til den sidste år, og vi synes ikke vi ville lave et lignende projekt. Dog kunne vi måske finden en anden måde at implementere balance-mekanismen.

Hvad er svært?
  • At balancere robotten, dvs. mange realtime beregninger og kontrol af motorer.


Vi vil gerne fremlægge:
En robot der kan balancere på to hjul, evt. med mere funktionalitet, f.eks. wall-following.
Til projektet skal vi bruge:
  • 1 NXT
  • Gyroskop
  • 2 motorer
  • evt. flere sensorer


4. Til sidst legede vi lidt med fjernstyring af robot med mobiltelefonen.





Koden til Android mobiltelefonen kan ses her
Og koden til NXT’en her