Produktrapport. Brain. Rammeverk for Robotino. Side 1 av 13



Like dokumenter
Dokumentasjon av Installasjon

Automatisering av datasenteret

Installasjonsveiledning

TDT4102 Prosedyre og Objektorientert programmering Vår 2014

Forord. Brukerveiledning

Produksjonssettingsrapport

Øving 0 - Xcode TDT4102

3. Kravspesifikasjon. Experior - rich test editor for FitNesse -

Debugging. Tore Berg Hansen, TISIP

Soloball. Steg 1: En roterende katt. Sjekkliste. Test prosjektet. Introduksjon. Vi begynner med å se på hvordan vi kan få kattefiguren til å rotere.

Straffespark Introduksjon Scratch Lærerveiledning

DDS-CAD 7 INSTALLASJON AV NETTVERKSLÅS. DATA DESIGN SYSTEM ASA Øksnevad Næringspark, 4353 Klepp st., fax , tel.: , e-post: dds@dds.

Mangelen på Internett adresser.

Forprosjekt. Accenture Rune Waage,

Generelt om operativsystemer

Kanter, kanter, mange mangekanter

Side 1 av 11

MONTERINGSANVISNING TERMLIFT

1. NetBeans IDE: Lage en enkel mobilapplikasjon

Læringsmål og pensum. v=nkiu9yen5nc

ENC ENKEL AKSE og KLIPPE LENGDE KONTROLLER for PLATESAKSER

Robotino XT. Hovedprosjekt i Informasjonsteknologi. Høgskolen i Oslo og Akershus. Prosjektgruppe 37. Lars Øyvind Hagland Ole Andreas Røsok

Guide for tilkobling til HIKT s Citrix løsning

1. Å lage programmer i C++

Installasjonsveiledning DDS-CAD 7.3

Velkommen som ny bruker av Uni Økonomi!

Alternativ dag for teoriforelesning. Intro. Torsdag 12:15-14:00 R1

Operativsystemer og grensesnitt

FRC-Feeder-E. Et sikkert og raskt verktøy for overføring av data til File Record Converter Versjon 1.9

Oversikt. Introduksjon Kildekode Kompilering Hello world Hello world med argumenter. 1 C programmering. 2 Funksjoner. 3 Datatyper. 4 Pekere og arrays

FORSIDE ved besvarelse av hjemmeeksamen, semesteroppgave, rapport, essay m.m.

TDT4110 Informasjonsteknologi grunnkurs: Kapittel 1 Introduksjon til Programmering og Python. Professor Alf Inge Wang

Innlevering 2b i INF2810, vår 2017

Skilpaddefraktaler Erfaren Python PDF

Installasjonsveiledning

Software installasjon og andre ettertanker

PUNKT TIL PUNKT-KOBLING KOBLING. Versjon 10/10. Hvordan kobler jeg controlleren til en pc 1

Shellscripting I. Innhold

Innhold Forord...3 Begreper og akronymer...4 Systembeskrivelse...5 Generelt...5 Funksjonelle krav...7 Ikke-Funksjonelle krav...9 Prioritering...

Kjenn din PC (Windows7)

Kapittel 1. Datamaskiner og programmeringsspråk. 1.1 Programmering

DDS-CAD 7 INSTALLERE PÅ TERMINALSERVER. DATA DESIGN SYSTEM ASA Øksnevad Næringspark, 4353 Klepp st., fax , tel.: , e-post: dds@dds.

Min digitale infrastruktur

Dagens tema: 12 gode råd for en kompilatorskriver. Sjekking av navn. Lagring av navn. Hvordan finne et navn?

Installasjonsveiledning for Ordnett Pluss

Kjernejournal. Pilotering - Javafri oppkobling

Norsk versjon. Innledning. Installasjon av hardware. Installasjon Windows XP. LW057V2 Sweex trådløst LAN PCI kort 54 Mbps

Dokumentasjon av Git. Vedlegg F

INF Obligatorisk oppgave 2

DDS-CAD 7 INSTALLERE PÅ TERMINALSERVER. DATA DESIGN SYSTEM ASA Øksnevad Næringspark, 4353 Klepp st., fax , tel.: , e-post: dds@dds.

TDT4102 Prosedyreog objektorientert programmering Vår 2016

Enarmet banditt Nybegynner Scratch Lærerveiledning

TDT4102 Prosedyreog objektorientert programmering Vår 2016

Kom i gang med programmering i Java

Kapittel 1: Datamaskiner og programmeringsspråk

TDT4110 Informasjonsteknologi, grunnkurs Uke 35 Introduksjon til programmering i Python

Enbruker-installasjon

Nyheter i Office 2016 NYHETER, FUNKSJONER, FORKLARING

Kjenn din PC (Windows Vista)

1. Å lage programmer i C++

Introduksjon til programmering og programmeringsspråk. Henrik Lieng Høgskolen i Oslo og Akershus

TDT4105 Informasjonsteknologi, grunnkurs (ITGK)

Objective-C. Shermila Thillaiampalam

Installasjonsmanual. Updater Fullversjon (med mulighet for å styre lås) LAN / WAN

Komme igang med App Inventor Introduksjon App Inventor PDF

Installasjonsveiledning

Veileder for opplasting av AKTIV sporlogg til PC

Innstallasjon og oppsett av Wordpress

Installere JBuilder Foundation i Mandrake Linux 10.0

Del 1: Overgang fra gammel hjemmeside til ny hjemmeside

1 Innledning. 2 Fremgangsmåte. 3 Windows - installering. C++ i Unix 1 TDT4102 NTNU

Brukerveiledning for Digifob Pro

Installasjonsveiledning

TextureTool med SOSI-parser

INSTALLASJONSVEILEDNING FOR KALK2010 KALKULASJONSPROGRAM

Kom i gang med Stata for Windows på UiO - hurtigstart for begynnere

Kom i gang med Python

COLOR LASERJET ENTERPRISE CM4540 MFP-SERIEN. Installeringsveiledning for programvare

En liten oppskrift på hvordan jeg installert og fikk Xastir til å virke sånn at jeg ble synlig i APRS verden.

Introduksjon til programmering og programmeringsspråk

Klasser. Webprogrammering høsten Objekter. Eksempelklasser og -objekter. 2 of :56. 1 of :56

Klask-en-Muldvarp. Steg 1: Gjøre klart spillbrettet. Sjekkliste. Introduksjon

Definisjon av prosess

Konfigurasjonsstyring

S y s t e m d o k u m e n t a s j o n

Om du allerede kjenner Scratch og har en Scratchbruker kan du gå videre til Steg 1.

Huldt & Lillevik Lønn og Personal - System 4. Oppdatering. Personec AS. Veiledningen er oppdatert pr

Lablink 2.x brukerveiledning

Komme i gang med Skoleportalen

Installasjon enbruker

HURTIGVEILEDNING FOR MODEM OPTIONS FOR NOKIA 7650

Installasjon av Windows 7 og Office 2016

DDS-CAD 7 INSTALLASJON AV NETTVERKSLÅS. DATA DESIGN SYSTEM ASA Øksnevad Næringspark, 4353 Klepp st., fax , tel.: , e-post: dds@dds.

Brukerveiledning Astra XT- programvare oppsett og kommunikasjons innstillinger.

Litt om Javas class-filer og byte-kode

TDT4105 Informasjonsteknologi, grunnkurs (ITGK)

Hurtigreferanse for installasjon av datakabelen CA-42

TMA4100 Matematikk 1, høst 2013

Brukerhåndbok. Programområde

Transkript:

Brain Rammeverk for Robotino Side 1 av 13

Innholdsfortegnelse 1 Brain... 4 1.1 Innledning... 4 1.1.1 Situasjon...4 1.1.2 Løsning...4 1.1.3 Resultat... 4 2 Design... 5 2.1 Hovedtrekk... 5 2.2 Geometri-bibliotek... 6 2.3 Flertrådet kjøring... 6 2.4 Innstillinger... 7 2.5 Funksjonalitet... 8 2.5.1 _Odometry...8 2.5.2 _OmniDrive... 8 2.5.3 _CompactBha...8 3 Hvordan ta i bruk Brain... 9 3.1 Installasjon... 9 3.1.1 RobotinoAPI2... 9 3.1.2 Kompilere Brain... 9 3.1.3 Kjøre Brain... 9 3.1.3.1 Med RobotinoSim... 10 3.2 Legge til egen kode... 10 4 Videreutvikling... 10 4.1 Publisering og lisens...10 4.2 Forslag til videre utvikling... 10 4.2.1 Robotinos tilleggsutstyr...10 4.2.2 Avstandssensorer... 11 4.2.3 Forbedring av cbha...11 4.2.4 Ekstern konfigurasjon og parametere...11 4.2.5 Herding av Brain... 11 5 Versjoner... 12 5.1 0.0.1 - Design... 12 5.2 0.0.2 - Design... 12 5.3 0.1 - Delvis implementasjon...12 5.4 0.1.1 - Design... 12 5.5 0.2 - Implementasjon... 12 5.6 0.3... 12 5.7 0.3.1... 12 5.8 0.3.2... 12 5.9 0.4... 12 5.10 0.4.1... 13 5.11 0.4.2...13 5.12 0.5 - Alfa stadie...13 5.13 0.5.1... 13 6 Teknologier benyttet i Brain og tilhørende kode...13 Side 2 av 13

Brain Innledning En utfordring i programmering av roboter er at dette ofte gjøres på et veldig lavt nivå, ofte ved å skrive direkte til minneadresser som igjen leses av robotens mikrokontrollere. Dette gjør det svært vanskelig å få til komplisert funksjonalitet. Situasjon Med Robotino og RobotinoAPI2 har programmeringen blitt gjort vesentlig lettere ved å muliggjøre programmering mot et høyerenivå C++ API. Allikevel er det, selv med RobotinoAPI2, kun en veldig direkte kontroll som er tilgjengelig. Det må fortsatt mye til for å utføre mer enn helt grunnleggende operasjoner, abstraksjonsnivået er for lavt. Løsning For å øke abstraksjonsnivået ytterligere har prosjekgruppen laget et rammeverk kalt Brain. Brain abstraherer bort detaljbevegelsene som må utføres og lar programmeren fokusere på det han/hun vil oppnå. Resultat Brain muliggjør for eksempel forflytning til et koordinat, kun ved å oppgi koordinatet. For å oppnå det samme kun med RobotinoAPI2 må Robotinos posisjon kontinuerlig leses av, hastigheter og vinkler må beregnes og instruksjoner sendes til Robotino. Brain håndterer alt dette for utvikleren og følger samtidig mer på andre sensorer, slik at f.eks. armen vil reagere på fysisk kontakt selv uten at en funksjon kjøres av brukeren. Side 3 av 13

Design Figur 1, Viser klassediagram for Brain Hovedtrekk Brain består av en rekke klasser som håndterer Robotinos funksjonalitet gjennom RobotinoAPI2 I tillegg til en klasse for tilgang på Kinect-avlesning over nettverk muliggjort av en klasse kalt TcpSocket 1. I tillegg finnes det et bibliotek av geometri-klasser til lagring og kalkulering av blant annet vinkler og koordinater. Hovedklassen Brain arver RobotinoAPI2s Com-klasse. Com danner kommunikasjonsobjektet som kobler seg til Robotino og håndterer kommunikasjonen. Brain eier alle andre API2-objekter og står for initalisering og kommunikasjon mellom disse. I tillegg håndterer Brain tråder for sin egen hovedsløyfe, for avlesning av og aksjon mot hendelser tilhørende kommunikasjonsobjektet og for avlesning av eksterne sensorer der disse er aktivert. 1 TcpSocket er skrevet av prosjektgruppens deltakere i forbindelse med en tidligere oppgave, men har fått utført noen endringer i samsvar med nye krav som følge av dette prosjektet. Side 4 av 13

En viktig komponent er grensesnittet Axon 2. Dette arves av alle Brains underkomponenter og gir en peker tilbake til Brain, i tillegg til å forutsette implementasjon av to funksjoner, analyze() og apply(). Disse funksjonene utfører henholdsvis analyse og bearbeiding av inndata og effektuering av resultatdataene. Hensikten er å la Brain, i mellom disse stegene og utifra en større helhet, kunne modifisere hva som faktisk effektueres. I tillegg k an man også på sikt skille ut deler av analysen i egne tråder dersom mer avansert funksjonalitet Figur 2, Illustrasjon av et nervefiber, Axon fører til tyngre kalkulasjoner, uten å oppleve at Robotino aksjonerer asynkront. Geometri-bibliotek Geometri-biblioteket er skrevet for Brain og inneholder kun de klasser og funksjoner som har vært nødvendig for utviklingen av Brain. Ved videreutvikling oppfordrers det til å bygge videre på dette biblioteket i stedet for å gjøre kalkulasjoner andre steder i Brain-koden. Bestanddelene av geometri-biblioteket er utskilt Figur 3, Arvdiagram for geometriklassene på atomert nivå og arver hverandre for å bygge opp sammensatte geometriske konstruksjoner. Dette vil si at en vektor, Vector, som fra matematikken består av en skalar og en vinkel arver nettopp Scalar og Angle. På denne måten kan man direkte benytte funksjonalitet i Angle for å regne ut differanse-vinkelen mellom en posisjon med vinkel, AngluarCoordinate, og en vektor, Vector. Man kan også direkte benytte en 3d-koordinat, VolumeCoordinate, som en 2d-koordinat, Coordinate, der kun denne delen av koordinatet benyttes. Annen funksjonalitet er å regne ut vektoren fra en koordinat til en annen, reversering av en vinkel som også gjør samme for en Vector. Biblioteket har ingen knytninger til Brain og kan således på sikt skilles ut og benyttes i andre prosjekter. En endring som da bør gjøres er å endre bruken av floats til doubles. Floats er brukt da de har tilstrekkelig presisjon mot Brain. 2 Nervefiber; http :// en. wikipedia. org / wiki / Axon Side 5 av 13

Flertrådet kjøring Figur 4, Tråd som kjører i Brain Brain kjøres i hovedsak i to tråder, én hovedtråd som kjører analyse- og utføringsfunksjonaliteten, og én tråd som utfører hendelser fra kommunikasjonsgrensesnittet Com. I tillegg kommer tråder for avlesning av eksterne sensorer (Kinect). Brain eier og håndterer selv disse trådene og sørger for å stoppe og stenge trådene ned når Brain-objektet dør. Side 6 av 13

Innstillinger Innstilligene i Brain er foreløpig basert på bruk av #define-erklæringer i header-filene. Disse leses av kompilatoren og gjør at begrepene satt av en #define i kildekoden erstattes av det etterfølgende begrepet, som normalt vil være ett tall (#define har mange andre bruksområder, men disse tas ikke opp her). Dette gjør det veldig lett å endre instillinger som griper svært bredt, for eksempel er avstanden fra Robotinos sentrum til enden av kloen når armen er i avslappet tilstand, CBHA ARM_RELAXED_DISTANCE_FROM_CENTER definert i _CompactBha.h, men også benyttet i Control.cpp. Hvis det viser seg at denne distansen er målt feil vil det kun være ett sted å rette dette opp. En ulempe med denne måten å gjøre innstillinger på er at det krever rekompilering av hele programmet, for å være sikker på at endringen er gjennomført i alle ledd. Funksjonalitet _Odometry Funksjonalitet: 1. Avlesning av posisjon som et koordinat inkludert retning. 2. Enkel korreksjon av odometrisk avvik. 3. Innsetting av nye koordinater for kalibrasjon. _OmniDrive Funksjonalitet: 1. Kjør til et punkt (destinasjon) 2. Stopp i ønsket avstand fra destinasjonen 3. Jevn aksellerasjon 4. Pent stopp (før nådd posisjon) 5. Nødstopp 6. Snu mot et punkt _CompactBha Bionic Handling Assistant, compact version, er en to-leddet arm med en vridbar gripeklo med to fingre, drevet av lufttrykk. Den originale, fulle versjonen, har flere ledd, mer bevegelighet og en gripeklo med tre fingre. Deteksjon av: 1. Bevegelse som følge av trykkforskjeller (arm styres) 2. Berøring Deteksjon og reaksjon på: 1. Mottak av objekt Side 7 av 13

2. Avhending av objekt Funksjonalitet: 1. Gripe objekt 2. Slippe objekt 3. Vri gripeklo 4. Kalkulere posisjon relativt til kjent posisjon for en berørende hånd (dynamisk kalibrering) Hvordan ta i bruk Brain Installasjon Brain foreligger som kildekode og kan kompileres ved hjelp av make-verktøyet tilgjengelig på Linux. For å kompilere må RobotinoAPI2 være tilgjengelig, RobotinoAPI2 krever i tillegg at Qt 4.5 er installert. RobotinoAPI2 RobotinoAPI2 er tilgjengelig som binærfiler, men kun for et begrenset antall systemer. Kildekoden for RobotinoAPI2 kan hentes ved å bruke versjonskontrollsystemet svn, som er fritt tilgjengelig. For å pre-kompilerer trengs verktøye cmake. Med svn, cmake og Qt 4.5 installert kan følgende kommandoer brukes for å laste ned og kompilere RobotinoAPI2: svn co http://svn.openrobotino.org/api2/trunk source/api2 mkdir build/api2 cd build/api2 cmake../../source/api2 make install Du vil da ha en trestruktur inneholdende undermappende source og build, der source har en undermappe api2 med kildekoden og build har en undermappe api2 inneholdene blant annet API-dokumentasjon, header-filer og en bibliotek-fil. De faktiske filene ligger under api2/install/usr/local/robotino/api2/ i underkatalogene doc, include og lib. For å forenkle installasjonsprosessen er det inkludert et bash-script, rapi2symlinks.sh som oppretter symlinker 1 i systemmappene slik at Brain kan kompileres. Dette finnes i repositoriet sammen med Brain og må kjøres fra fra mappen build/api2/ med rotrettigheter, alternativ angis full sti til denne mappen som parameter. Dersom du har installert API2 fra binærfiler kan verktøyet benyttes med flagget --local. Ved bruk av binærfilene kan symlinker opprettes ved å kjøre newapisymlinks.sh med flagget --local. 1 En symbolsk lenke, symlink, er en filpeker i filsystemet som gjør at det for alle normale prosesser ser ut som om den faktiske filen ligger der symlinken gjør. Side 8 av 13

Kompilere Brain Når API2 er installert og symlinket til standardkatalogene i operativsystemet kan Brain kompileres ved hjelp av verktøyet make og den medfølgende Makefile. Kjøre Brain Sammen med Brain ligger det en main.cpp fil som kompileres til den kjørbare filen brain. Denne inneholder rutiner for initialisering og oppstart av Brain med tilkobling mot Robotino og Kinect. IP-adressen til Robotino kan angis som første parameter, men er 10.10.1.57 som standard. Det forsøkes å koble til en server som leverer Kinect-data på 10.10.1.66:5000, men Brain kjører fint uten, selv om funksjonalitet basert på Kinect da ikke vil virke. Ved oppstart vil Brain ende i et prompt 1. Dette betyr at brain er klar for å motta instruksjoner fra brukeren. Selv uten at noen instruksjon er gitt er noe funksjonalitet aktiv, forsøk for eksempel å legge noe i gripekloen til Robotino, og Robotino vil gripe rundt objektet. Løft objektet opp igjen og Robotino vil slippe det. Ved å skrive kommandoen help vil du få en liste og beskrivelse over de tilgjengelige kommandoer. En påminnelse om dette gis dersom en feil/ukjent kommando gis. For å avslutte, gi kommandoen exit. Med RobotinoSim For å teste Brain uten en tilgang på en Robotino kan RobotinoSim brukes. RobotinoSim finnes kun tilgjengelig for Windows i skrivende stund, men kjører fint i en virtuell maskin. Ved kjøring i en virtuell maskin må denne settes opp slik at den får en annen IP enn vertsmaskinen dersom samme maskin også benyttes til å kjøre Brain. Dette fordi RobotinoAPI2 vil forsøke å kjøre med direkte minneaksess 2 dersom IP en til Robotino er den samme som maskinen den kjører på. Den fritt tilgjengelige demoversjonen av RobotinoSim har ikke noen cbha-arm og da Brain i stor grad er designet for å vise interaksjonen mellom Robotino og en forsøksperson ved hjelp av Kinect vil utbyttet her være noe begrenset. Legge til egen kode Den enkleste måten å legge til egen kode er å legge til funksjoner i klassen Control. For å gjøre dette enklest mulig er ikke header-delen av denne klassen skilt ut, både definisjonen og implementasjonen ligger i filen Control.cpp. Legg så til din nye funksjon som en kommando i funksjonen Control::prompt(), slik at du kan kalle denne fra promptet når applikasjonen kjøres. 1 Et prompt vil si en forespørsel om kommando 2 Direkte minneaksess vil si at i stedet for å kommunisere med daemonen rpcd over en socket vil den i stedet skrive rett til og lese fra rpcd s variable i direkte i minnet. Dette er en kraftig optimisering sammenlignet med å skrive data og lese data til og fra en socket via operativsystemet. Side 9 av 13

Videreutvikling Publisering og lisens Brain er planlagt publisert som et github-prosjekt når prosjektet er ferdig. Brain vil få en åpen lisens. Prosjektets intensjon er å dele Brain med alle som kan ha behov for koden i forbindelse med egne prosjekter. Forslag til videre utvikling Robotinos tilleggsutstyr Robotino har mye tilgjengelig ekstrautstyr som ikke er implementert som mulig funksjonalitet. Mulighet for å teste ut om et aktuelt utstyr er tilkoblet gjennom APIet står på RobotinoAPI2- ønskelisten men er ikke implementert per i dag. Avstandssensorer Et av standardutstyrene på Robotino som ikke er tatt i bruk i Brain er avstandssensorene. Implementering av denne er påbegynt, men ikke ferdigstilt. At avstandssensorene ikke er implementert betyr at Brain per i dag ikke har noen form for kollisjonssikring annet en bumperen. En mulig utvikling er å benytte avstandssensorene til å kartlegge omgivelsene og videre bruke disse dataene til navigasjon ved kjøring. Forbedring av cbha Deteksjon av hendelser fra cbha er av forholdsvis enkel karakter. Her kunne man oppnådd presis detekasjon av mange forskjellige hendelser ved å benytte et nevralt nett. Utfordringen, utover implementasjonen av et nevralt nett, er å enten generere læringsdata eller å sette opp ett system der Robotino kan få tilbakemelding basert på eksterne kameraer eller lignende. Noe som kanskje vil være mulig uten for store rammeverk rundt er å la Robotino lære plasseringen på potmeterene ved forskjellige trykk, og på den måten kunne oppdage om armen faktisk holder noe eller ikke, basert på hvordan vekten av objektet presser armen ned. Et annet aspekt ved cbha som ville være svært nyttig er å kunne forholde seg til et punkt i tre dimensjoner. Dette vil kreve posisjonsberegning utifra potmeterverdiene på begge leddene i armen. Ekstern konfigurasjon og parametere For å muliggjøre innstillinger uten å måtte rekomplilere koden bør mange av de verdier som i dag ligger lagret som defines i header-filene i stedet hentes fra en konfigurasjonsfil. For Side 10 av 13

eksempel kan Boost 1 -bibliotekets program_options 2 benyttes til dette. program_options leser også kommandolinje-opsjoner og kombinerer disse naturlig med data fra en konfigurasjonsfil og genererer i tillegg automatisk hjelpetekst basert på de definerte mulige parametere. Herding av Brain Selv om det benyttes flertrådet kjøring har implementasjonen av mutexer 3 blitt nedprioritert. Det er dermed foreløpig ikke brukt mutexer noe sted Brain. Da den nåværende utformingen av Brain gjør at det aldri vil være mer enn én tråd som skriver til en variabel gjør dette at konsekvensene ved slike feil er begrenset. Likevel er det en unødvendig kilde til mulige feil som bør rettes. Versjonen av Brain som er dokumentert her å se på som en Alfa-versjon, med hensikt å demonstrere muligheter og funksjonalitet, ikke å kunne fungere i noen som helst form for driftssituasjon. Det har derfor heller ikke blitt gjennomført tester med tanke på produksjonssetting. Versjoner 0.0.1 - Design 3 klasser - Arm, Drive, Sensors, funksjonalitet sys sammen av main. Sensors implementert ved hjelp av et nevralt nett. 0.0.2 - Design 3 hovedklasser - Kinect - Control - Robotino, der Robotino har underklassene Arm, Drive og Sensors. Control henter data fra Kinect og gir ordre til Robotino i stedet for håndtere komponentene direkte. Komponentene kjører i egne tråder, henter og prosseserer data fortløpende. 0.1 - Delvis implementasjon Forholdsvis lik 0.0.2, men i stedet for å samle funksjonalitet i Arm, Drive og Sensors lages det egne wrapper-objekter rundt alle benyttede objekter fra API2, inkludert Com. 0.1.1 - Design Vurdert diverse design-patterns for å sy sammen hendelser på tvers av av de forskjellige klassene. 0.2 - Implementasjon Robotino døpt om til Brain, som også blir navnet for hele implementasjonen. Alle geometriske kalkulasjoner flyttet ut i egne objekt-klasser. KinectReader implementert. 1 http :// www. boost. org / 2 http :// www. boost. org / doc / libs /1_53_0/ doc / html / program _options. html 3 En mutex er en låsemekanisme for å sikre at kun én tråd av gangen endrer en variabel. Dette kan være svært viktig ved flertrådet kjøring. Side 11 av 13

0.3 Brain arver og integrerer Com, Axon er på plass under det foreløpige navnet NeuralConnection. Geometri-klassene er delt atomisk og arver hverandre slik at f.eks. AngularCoordinate som beskriver Robotinos posisjon og vinkel kan beregne differanse i vinkel mot Vector (matematisk vektor, bestående av en skalar og en vinkel). 0.3.1 Alle implementerte Robotino-objekter arver nå sine respektive API2-objekter. Med unntak av Brain navngis de med samme navn som sine API2-feller, startende med en understrek _. 0.3.2 Implementasjon av PoC4, løst ved hjelp av noen hacks som skal fjernes. Odometri har fått implementert en justering av koordinatene pga. avvik. 0.4 Stor omskrivning av Brain og API2-underklasser. NeuralConnection er døpt om til Axon og har fått noen rene virtuelle funksjoner (må implementeres av arvende klasser). Brain har nå fått sin endelige form og grunn-implementasjon av hoved-løkken er på plass. Alle underklasser bruker nå event-funksjonaliteten i API2 for å lese data som først og fremst lagres i klassene. Kun denne måten for avlesning av data benyttes med mindre dataene er utdatert (i tilfelle Brain brukes uten å kjøre hovedløkken, noe som fortsatt er mulig). Klassene lagrer en historikk av delta-verdier for å kunne agere på mønstre over korte tidsrom. 0.4.1 Skrevet om gamle eksempler til å fungere med nye Brain. Flere korreksjoner og tillegg i _OmniDrive og _CompactBha. 0.4.2 Forbedret trådhåndtering i Brain, håndtering av tråder ved avsluning (destruct) av Brain. 0.5 - Alfa stadie Brain oppfører seg nå pent i de fleste situasjoner. Forbedret måten Kinect håndteres i Brain. Lagt til en kommando-tolker, Command::prompt(), og flere eksempel-applikasjoner som demonstrerer Brains muligheter via kommando-grensesnittet. 0.5.1 Lagt til kjøring i separat tråd for lengrekjørende kommander i Command. Flere justeringer på deteksjon i _CompactBha. Side 12 av 13

Teknologier benyttet i Brain og tilhørende kode Språk: 1. C++ 11 - Brain 2. Bash - for skripting av API-installasjon 3. make - for automatisering av kompilering Dokumentasjon: 1. javadoc - Kodedokumentasjon 2. Doxygen - generasjon av kodedokumentasjon 3. LaTeX - framstilling av utskrivbar kodedokumentasjon Utvikling: 1. git - Versjonskontroll 2. Vim - en kraftig teksteditor 3. GNU/Linux - utviklingsplatform, herunder: 1. Ubuntu - en distribusjon basert på Debian 2. Arch Linux - en frittstående GNU/Linux-distrubusjon Side 13 av 13