Andreas Bach Aaen Innovation og Open Source

3. august, 2011

Lego Mindstorms og Linux

Filed under: hardware,lego,linux — andreas @ 8:00

Min kone kender mig for godt. Jeg er meget tidligt blevet bidt af en gal Legoklods. Det har været min favoritlegetøj helt indtil hjemmecomputeren blev opfundet og flyttede ind i mit teenageværelse. Så nu da alle børnene skulle have Lego i julegave, så skulle jeg også. Det blev til en kasse med Lego Mindstorms.

Det var en perfekt anledning til, at tage mit gamle tekniklego ud af skabet og få det mellem fingrene igen. Det tekniklego, der følger med Mindstormssættet er dog blevet redesignet siden jeg var lille, så stængerne ikke længere har knopper. En del nye sammenkoblingsklodser er kommet til, så rent konstruktionsmæssigt er det en noget anderledes oplevelse at lege med dagens tekniklego. Der er lidt mere Meccado eller Briomek over det.

Softwaren der følger med Lego Mindstormssættet er kun til Microsoft Windows, så ud med den. Der er endda kun konstruktionstegninger på papir til en meget simpel robot med hjul. De mere advancerede modeller, så som den gående robot, der pryder forsiden af æsken, dem finder man kun elektronisk og kun til Microsoft Windows. Nå pyt med det, det er alligevel sjovere at bygge selv.

Men hvad skal man programmere i? Man kan vælge, at bruge Legos eget sprog. Simpelt, men nok mere begrænset end ladder-diagrammer til PLC-programmering. Så er der Open Source alternativerne. Her kan man vælge imellem java programmering og næsten-C programmering. Her valgte jeg NXC (Not eXactly C), da det er det simpleste og ikke krævede flash af firmwaren for at komme i gang. NXC er  frigivet under Mozilla Public License (MPL) og findes prekompileret til Linux, Mac og Microsoft Windows.

Til NXC er der en udemærket tutorial og en ret uoverskuelig userguide, der bærer præg af at være autogenereret med doxygen ud fra kildekoden. Svagheden er nok især, at der mangler en masse sigende eksempler på brugen af de mange funktioner. Så start med tutorialen og kig en ekstra gang om fuktionalitet ikke er beskrevet her inden du giver dig til at lede i userguiden.

NXC giver mulighed for trådprogrammering og brug af semaforer. Man kan sige, at det er komplekst, men i en shared memory model, da er det nødvendigt for at kunne lave parallelprogrammering. Alternativt kunne det være interesant at køre et Occam eller Erlang inspireret sprog til Lego Mindstorms. Message parsing er for mig at se en mere intuitiv og nemmere model at håndtere parallelisme i end shared memory.

6 Comments »

  1. Ada er også en mulighed, hvis man ikke har noget imod at udskifte firmwaren fra Windows/MacOSX.

    GCC Ada til Mindstorms inkluderer parallelprogrammering under Ravenscar-profilen.

    Kommentar by Jacob Sparre Andersen — 3. august, 2011 @ 20:44

  2. Kan man skifte firmwaren ud fra en Linux maskine? Jeg har altså ikke nogen Microsoft Windows licenser i privat regi.
    Adas parallelprogrammering er det via beskedudveksling? altså kopiering – og er der pools af beskeder eller er det i princippet muligt at sende uendeligt mange beskeder fra en proces til en anden? Og hvad nu hvis den anden proces ikke tager imod fordi den er mættet?
    Erlang er ikke optimal på dette punkt efter min smag. Jeg foretrækker, at det er nemt at lave besked puljer, så man kan lave backpressure og dermed stopper med at lave unødig processering, hvis senere processer i systemet ikke lan tage fra.

    Kommentar by andreas — 3. august, 2011 @ 21:01

  3. I Ada bruger man primært de to højniveaukonstruktioner “rendezvous” og “protected object” til synkronisering og dataoverførsel.

    Med “protected objects” kan man uden den store hurlumhej implementere en kø til beskedudveksling, der passer til opgavens behov.

    Med et “rendezvous” tvinger man to “tasks” (tråde) til at synkronisere med hinanden. – Den task der kommer først til et “rendezvous” venter på (d)en anden.

    Ravenscar-profilen betyder at der er visse begrænsninger i hvad du kan. Fordelen ved Ravenscar-profilen er at det er muligt at lave visse former for statisk realtidsanalyse af programmet.

    Kommentar by Jacob Sparre Andersen — 5. august, 2011 @ 19:22

  4. Jeg har endnu ikke fundet en løsning på at skifte firmware fra Linux. Men da jeg selv helst er fri for at skulle låne en maskine til formålet, så vil jeg gøre lidt mere for at finde en løsning. (Man kunne prøve at køre programmet i WINE.)

    Kommentar by Jacob Sparre Andersen — 5. august, 2011 @ 19:25

  5. Ada til Lego Mindstoms findes tilsyneladende på:
    http://libre.adacore.com/libre/tools/mindstorms/
    Det er meget forvirrende hvad man skal downloade, og jeg kan ikke finde de libraries og eksempler der er Mindstorms specifikke.
    Noget bedre ser det ud hvis man kigger på:
    http://polaris.dit.upm.es/~str/proyectos/mindstorms/2010/index.html
    En lidt ældre udgave, men her er der en INSTALL beskrivelse med, der rent faktisk kan bruges til noget.
    Firmware flashing klares under Linux med:
    http://code.google.com/p/libnxt/
    Generelt synes jeg det er noget sværere, at finde en god HOWTO, eksempelkode og en tilgængelig referencemanual til ADA Ravenscar til Mindstorms end det er at finde tilsvarende for LejOS og NXC.
    Jeg må også sige, at det er et minus ved nyere GNAT compilere, at der ikker længere en library exception på licensen, så man kun kan skrive GPL lisenserede programmer uden at hive penge op af lommen. Også hvis man vil lave BSD-lisenseret software. Jeg er ikke rigtig lun på den forretningsmodel.

    Kommentar by andreas — 6. august, 2011 @ 1:01

  6. Den spanske side er den jeg har brugt til at hente GNAT men Mindstorms som mål og Linux som vært.

    Jeg tror det svære ved at finde specifikke HOWTO’er om Ada til Mindstorms er at de er gemt på AdaCores side for universitetsfolk (GAP), men bortset fra kontakten til sensorer og motorer burde Ada Language Reference Manual fortælle dig alt havd du har brug for at vide.

    Ravenscar-profilen er en del af Ada-standarden: http://www.adaic.org/resources/add_content/standards/05rm/html/RM-D-13-1.html

    Det med licensen er jeg enig med dig i er noget hø, men heldigvis gælder det (stort set) kun de udgaver af GNAT du henter fra AdaCore. For eksempel gælder det ikke udgaven i GCC’s VCS og den udgave du får med Debian og Ubuntu (og så vidt jeg er orienteret ligeledes *BSD).

    Kommentar by Jacob Sparre Andersen — 7. august, 2011 @ 12:26

RSS feed for comments on this post. TrackBack URL

Leave a comment

Powered by WordPress