Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Mechatronic System Design

366 views

Published on

FPGA Accelerated Vision

Published in: Engineering
  • Be the first to comment

  • Be the first to like this

Mechatronic System Design

  1. 1. Afstudeerwerk ingediend tot het behalen van het diploma van master in de industriële wetenschappen: opleiding elektronica ICT Promotoren: Drs. Stijn Duchateau (Xios Hogeschool) ing. Vincent Claes (Xios Hogeschool) Steven Palmaers MSc (Xios Hogeschool) Academiejaar 2012 – 2013 FPGA accelerated vision XIOS HOGESCHOOL LIMBURG DEPARTEMENT TOEGEPASTE INGENIEURSWETENSCHAPPEN Tobias Adryan
  2. 2. Inhoudsopgave Dankwoord I Abstract II Lijst van afkortingen en symbolen..................................................................III Lijst van figuren....................................................................................................V Lijst van tabellen................................................................................................. VI 1. Inleiding........................................................................................................... 7 1.1 PXL ............................................................................................................. 7 1.2 MSD: Mechatronic System Design............................................................. 7 1.3 Wat is een FPGA ........................................................................................ 8 1.3.1 Inleiding........................................................................................ 8 1.3.2 De opbouw .................................................................................... 9 1.3.3 Wat is de Zynq............................................................................ 10 1.3.4 Programma's schrijven voor FPGA's ......................................... 11 2 De case 12 Het algoritme ....................................................................................................... 14 2.1 De opstelling............................................................................................. 14 2.2 Voorwaarden............................................................................................. 14 2.3 Mathematisch concept.............................................................................. 15 3 Kinect 18 3.1 Inleiding.................................................................................................... 18 3.2 Sensoren ................................................................................................... 18 3.3 Camera's ................................................................................................... 19 3.4 Structured light........................................................................................ 21 3.5 Precisie van de Kinect .............................................................................. 22 3.5.1 inleiding...................................................................................... 22 3.5.2 Berekening van de resolutie....................................................... 22
  3. 3. 3.5.3 Haalbaarheid van vereisten....................................................... 24 3.6 Kinect drivers ........................................................................................... 25 3.6.1 Microsoft..................................................................................... 25 3.6.2 Openscource................................................................................ 25 4 Zedboard........................................................................................................ 26 4.1 Specificaties.............................................................................................. 26 4.2 Waarom het Zedboard .............................................................................. 26 5 Xillinux 28 5.1 Inleiding.................................................................................................... 28 5.2 Toepassingen en kenmerken.................................................................... 28 5.3 Userspace vs kernelspace......................................................................... 29 5.4 Xillybus..................................................................................................... 29 6 Interfaces....................................................................................................... 31 6.1 inleiding.................................................................................................... 31 6.2 Kinect naar CPU ...................................................................................... 31 6.3 CPU naar FPGA....................................................................................... 32 6.4 FPGA naar HDMI .................................................................................... 32 6.5 FPGA naar CPU....................................................................................... 33 7 Discussie ........................................................................................................ 34 7.1 De meetopstelling..................................................................................... 34 7.2 De verwachtingen..................................................................................... 35 7.3 De metingen.............................................................................................. 37 8 Conclusie en toekomstvisie........................................................................ 39 8.1 Conclusie................................................................................................... 39 8.2 Mogelijke verbeteringen........................................................................... 39 Referenties 40
  4. 4. I
  5. 5. I Dankwoord Eerst en voor al wil ik mijn ouders bedanken, om dit allemaal mogelijk te maken en voor hun steun doorheen mijn schoolcarrière. Daarnaast wil ik ook mijn promotoren Vincent Claes, Steven Palmaers en Stijn Duchateau bedanken voor hun geduld en goede raad. Niet te vergeten ook al de andere mensen die met mij hebben moeten omgaan tijdens deze soms stressvolle periode, zodat ik mij ten volle kon concentreren op mijn master thesis. Tobias Adryan
  6. 6. II Abstract De kinect is al jaren in gebruik in de gaming industrie, de prijs voor zo een camera is daardoor ook buitengewoon laag. Dit maakt de Kinect ook interessant voor andere toepassingen. Omdat andere vergelijkbare systemen vele malen meer kosten, opent de Kinect een brede waaier van nieuwe toepassingen. Bij dit onderzoek gaat het om zo een nieuw toepassingsgebied te verkennen. Er werd gekozen voor een testcase die een volume berekening doet. De berekening van dit volume werd er gebruik gemaakt van het Zedboard. Het Zedboard is een low-cost development board dat ondersteunt wordt door een open source community. Bij systemen waar het gaat om visueel detecteren en analyseren van voorwerpen of personen wordt veelal gebruik gemaakt van klassieke processoren. Maar deze zijn gebouwd om sequentieel bewerkingen uit te voeren, dit zorgt voor een probleem als het om beeldverwerking gaat. Namelijk dat bij veel toepassingen de responstijd erg groot wordt en dat is meestal absoluut niet in het voordeel van gebruiksgemak. Het probleem bij processoren is dat ze altijd maar één handeling tegelijk kunnen doen en bij beeldverwerking komen grote hoeveelheden data voor, als deze sequentieel verwerkt moeten worden zorgt dit voor een enorme bottleneck bij de processor. Daarom wordt hier dus een FPGA gebruikt om de zware bulk berekeningen over te nemen, deze is veel beter geschikt voor grote blokken data parallel te verwerken. Het doel van dit onderzoek is dus om zo een processor-FPGA omgeving te ontwikkelen die het beste van beide werelden kan gebruiken. Hierbij wordt er gebruik gemaakt van een Xilinx zynq-7000, dit is een chip van Xilinx die een dualcore ARM cortex A9 processor en een Artix 7 FPGA met elkaar verbind in één package. Dat is dan ook de meest geschikte basis voor een hardware accelerated video processor.
  7. 7. III Lijst van afkortingen en symbolen ADC AES AMBA ARM ASIC AXI CLB CLI DDR DMA DSP DVI FIFO FPGA GPIO GUI HDL HDMI HPC I2C I/O IOB IP OLED PCI PCIe PL PS RISC RSA SD SDRAM SHA SoC Analog Digital Convertor Advanced Encryption Standard Advanced Microcontroller Bus Architecture Advanced RISC Machine Application-specific integrated circuit Advanced eXtensible Interface Configurable Logic BLock Command Line Interface Double Data Rate (SDRAM) Direct Memory Access Digital Signal Processing Digital Visual Interface First In First Out Field Programmable Gate Array General Purpose I/O Graphical User Interface Hardware Descriptive Language High-Definition Multimedia Interface High Performance Computing Inter Integrated Circuit Input/Output I/O Block Intellectual Property Organic Light Emitting Diode Peripheral Component Interconnect PCI express Programmable Logic Processing System Reduced Instruction Set Computer Rivest Shamir Adleman Secure Digital Synchonous Dynamic Random Access Memory Secure Hash Algorithm System On Chip
  8. 8. IV SPI SRAM TMDS UART USB USB OTG VESA VGA VHSIC Serial Peripheral Interface Shadow Random Access Memory Transition-Minimized Differential Signaling Universal Asynchronous Reciever/Transmitter Universal Serial Bus USB On The GO Video Electronics Standards Association Videa graphics Array Very High Speed Integrated Circuit
  9. 9. V Lijst van figuren Figuur 1 Opbouw van een FPGA.................................................................................9 Figuur 2 Opbouw Zynq..............................................................................................10 Figuur 3 Testcase pixel grootte .................................................................................13 Figuur 4 Testcase opbouw .........................................................................................14 Figuur 5 Vormen beperking ......................................................................................15 Figuur 6 Integraal .....................................................................................................15 Figuur 7 Riemann......................................................................................................16 Figuur 8 Meting van op verschillende afstanden Wolfram.com (Riemann).............17 Figuur 9 Kinect onderdelen.......................................................................................19 Figuur 10 Kinect camera's.........................................................................................20 Figuur 11 IR pattroon................................................................................................21 Figuur 13 Beeldhoek met variablelen.......................................................................23 Figuur 14 Zedboard geheel........................................................................................26 Figuur 15 Zedboard opbouw......................................................................................26 Figuur 16 Xillybus FIFO's.........................................................................................30 Figuur 17 Interfaces geheel.......................................................................................31 Figuur 18 FPGA-HDMI interface..............................................................................32 Figuur 19 Meetopstelling ..........................................................................................34 Figuur 23 Schaduwprobleem.....................................................................................38
  10. 10. VI Lijst van tabellen Tabel 1 Kinect eigenschappen...................................................................................20 Tabel 2 Kinect eigenschappen[7][1][2] ......................................................................22 Tabel 3 Positieve afwijking........................................................................................35 Tabel 4 Negatieve afwijking......................................................................................36 Tabel 5 Meetresultaten..............................................................................................37
  11. 11. 7 1. Inleiding 1.1 PXL Hogeschool PXL is vanaf oktober 2013 een hogeschool in Belgisch Limburg met vestigingen in Hasselt, Genk en Diepenbeek. Het is een zelfstandige hogeschool, niet direct gebonden aan een onderwijsnet. Door haar actief pluralistisch karakter werkt PXL samen met alle onderwijsnetten. De hogeschool is ontstaan uit de fusie tussen de XIOS Hogeschool Limburg en de Provinciale Hogeschool Limburg. Samen met de Universiteit Hasselt behoort Hogeschool PXL tot de Associatie Universiteit- Hogescholen Limburg. De hogeschool wordt bestuurd door een Raad van Toezicht en een Raad van Bestuur. Voorzitter is Frank Smeets, covoorzitter is Luc Houbrechts en algemeen directeur is Ben Lambrechts. 1.2 MSD: Mechatronic System Design Dit project heeft plaatsgevonden binnen het PWO-project MSD, MSD staat voor Mechatronic System Design. MSD is een nieuw PWO-onderzoeksproject dat de professionele opleidingen van elektronica-ict, elektromechanica en toegepaste informatica samen brengt. Zo kunnen grotere multidisciplinaire applicaties verwezenlijkt worden. Het project combineert Mechanische constructies met state-of-the-art elektronica. Daarnaast wordt de HMI (Human Machine Interface) afgehandeld door smartdevices die op iOS of Android draaien. Het is ook daarom dat dit onderzoeksproject met de Kinect geknipt is voor MSD. De Kinect is een nieuwe vorm van HMI waarbij er geen fysiek contact meer nodig is tussen het toestel en de gebruiker. Hiernaast wordt bij machinebouw veel visie toegepast, bij het analyseren van inkomende goederen of kwaliteitscontrole aan het einde van een process.
  12. 12. 8 1.3 Wat is een FPGA 1.3.1 Inleiding De FPGA of Field-Programmable Gate Array is fundamenteel gezien een herprogrammeerbare silicium chip. Door gebruik te maken van programmeerbare logische blokken die aan elkaar gehangen worden door inter-connecties, kan je custom hardware maken. Het grote voordeel van FPGA's de herprogrammeerbaarheid, dit maakt ontwerpen waarin een FPGA zit uiterst flexibel. Zo zal bijvoorbeeld door een puur softwarematige update een nieuwe interface kunnen worden voorzien voor hardware die op voorhand niet gekend was. Een ander groot voordeel van de FPGA is de mogelijkheid op in real-time dingen te gaan verwerken en zelfs volledig onafhankelijk en parallel . Naast de vele voordelen zijn er natuurlijk ook wel nadelen. Zo zal een schakeling in een FPGA altijd trager zijn als die in een ASIC (Application Specific Integrated Circuit). Hierbij zal de FPGA ook meer energie gaan verbruiken. Hiernaast is het omzetten van de HDL (Hardware Descriptive Laguage) naar een fysieke schakeling in de FPGA uiterst complex en neemt dus ook veel tijd in beslag, dit vertraagd het ontwikkelingsproces. Natuurlijk is het ontwikkelen van een ASIC ook uiterst duur en zal de keuze voor een FPGA meestal gemaakt worden voor een laag volume productie of een product dat uiterst flexibel moet zijn. Dit hoofdstuk zal versimpeld uitleggen wat een Field-Programmable Gate Array eigenlijk is.
  13. 13. 9 1.3.2 De opbouw Figuur 1 Opbouw van een FPGA De Field-Programmable Gate Array is hoofdzakelijk opgebouwd uit drie elementen, IOB's, CLB's en routing channels. IOB's zijn Input Output Blocks, zij zijn de buffers die de logica met de buitenwereld verbinden. De CLB's zijn de Common Logic Blocks waarin de programmeerbare logica zit, deze layout maakt de routing veel eenvoudiger. De gedetailleerde samenstelling van de CLB's is verschillend voor verschillende fabrikanten en verschillende series van FPGA's. Daarnaast zijn er nog de Routing channels die alles met elkaar verbinden, dit is een netwerk van "draden" die met elkaar zijn verbonden via elektronische "schakelaars".
  14. 14. 10 1.3.3 Wat is de Zynq Zoals te zien op Figuur 2 is de Zynq een all-in-one oplossing voor toepassingen die een sterke applicatie processor nodig hebben naast een custom co-processor of programmeerbare logica om custom interfaces te kunnen maken. Figuur 2 Opbouw Zynq Het groene deel in het midden van figuur 2 illustreert de inhoud van de applicatie processor. Het gele deel beschrijft de inhoud van de FPGA. De inhoud van de FPGA is natuurlijk zeer beperkt, hier zijn alleen interfaces beschreven. De rest van de invulling van de FPGA is te voorzien van de ontwerper.
  15. 15. 11 1.3.4 Programma's schrijven voor FPGA's Door de complexiteit van de FPGA's is er zware software nodig om deze te programmeren. De FPGA ontwerper schrijft zijn code in HDL (Hardware Descriptive Laguage) en definieert hiermee zijn hardware design. De meest gebruikte HDL hier in europa is VHDL ( VHSIC Hardware Descriptive Laguage), in Amerika wordt er gebruikt gemaakt van Verilog. Maar al deze code is nutteloos zonder de UCF (User Constraints File) file dit het bestand waarin de in en uitgangen worden bepaald de zogenaamde netlist. Dit is meteen ook de reden waarom HDL code zo portable is. De volledige code staat los van de hardware waar hij op draait (op een paar uitzonderingen na) en is alleen aan zijn hardware gebonden via de netlist.
  16. 16. 12 2 De case Het is de bedoeling om een volume meting te kunnen uitvoeren van objecten in real time. Dat wilt dus zeggen dat het volume van pakjes die op een lopende band voorbij komen kan gemeten worden. De opstelling wordt opgebouwd met een Microsoft Kinect camera en een lopende band. De camera hangt boven de band om zo de objecten die voorbij komen te kunnen meten. Tijdens het proces blijft de Kinect camera op exact dezelfde plaats hangen. Momenteel is dit beperkt tot één Kinect en dus is er ook een beperking op de vorm van de te meten voorwerpen, de vereiste resolutie voor deze toepassing is ±1mm. Meer informatie hierover is te vinden in hoofdstuk 3 het algoritme.
  17. 17. 13 Figuur 3 Testcase pixel grootte Figuur 3 toont een statisch platform omdat dit een testcase is. Met dit systeem zou een volledig geautomatiseerd systeem kunnen worden gebouwd dat zelf pakjes sorteert naar volume en vorm met een optimale benutting van de beschikbare ruimte. Dit kan bijvoorbeeld een postorder bedrijf de mogelijkheid geven om pakjes optimaler te stockeren.
  18. 18. 14 Het algoritme 2.1 De opstelling Het doel van het algoritme is om het volume van een object te kunnen berekenen. Aangezien de opstelling momenteel beperkt is tot één camera moet er worden van uitgegaan dat het object één vlakke kant heeft waarmee hij op of tegen een vlak rust zoals geïllustreerd op figuur 4 hieronder. Figuur 4 Testcase opbouw 2.2 Voorwaarden De vorm van het object is door deze opstelling ook beperkt, als het object naar onder toe versmalt wordt er bij deze opstelling eigenlijk het volume van een object berekend dat zijden heeft die recht naar beneden gaan.
  19. 19. 15 Figuur 5 Vormen beperking 2.3 Mathematisch concept Het algoritme bestaat fundamenteel uit een integraal voor iedere rij pixels van het dieptebeeld, hieronder is een voorbeeld uitgewerkt voor een 2 dimensioneel figuur. Hieronder zichtbaar op figuur 6 een versimpeld voorbeeld hiervan, namelijk een functie van ( ) . Figuur 6 Integraal De oppervlakte onder de curve is wat van belang is. Die oppervlakte kan gevonden worden door de integraal van deze functie te berekenen. Maar dit kan ook benaderd worden met de Riemann som, het dieptebeeld op de computer ziet er vloeiend uit, net alsof het een functie zou zijn die continu is, maar niets is minder waar. Het is een digitaal beeld en bestaat dus eigenlijk uit pixels of samples, dus
  20. 20. 16 zou het een nutteloos werk zijn om er een continue functie op te fitten om deze dan uit te rekenen in software die volgens de Riemann som werkt. Bij een Riemann som gaat het immers om de functie op te delen in kleine delen en deze dan op te tellen. Voor deze toepassing van de Kinect volstaat het dus volledig om de zogenaamde benadering te gebruiken die de Riemann som voorstelt. Zoals op figuur 7 hieronder te zien volgen de blokjes van de samples niet exact de curve. Dit is een probleem dat veroorzaakt wordt door de beperkte resolutie van de dieptecamera van de Kinect. De problemen en afwijkingen die dit met zich mee brengt worden besproken in hoofdstuk 3.5 over de precisie van de Kinect. Figuur 7 Riemann Maar in de Kinect zijn er niet 2 dimensies maar wel 3 dimensies, namelijk x, y en z. Waarbij x en y respectievelijk de horizontale en de verticale verplaatsing in het vlak tegenover de Kinect voorstelt en de z component diepte (afstand) tot de Kinect sensor voorstelt. Dit is niet de afstand van het object tot de diepte camera maar de afstand van het vlak waarin de 2 camera’s en de IR projector zich bevinden[7]. Op die mannier definieert de Kinect een volledig lineair orthogonaal assenstelsel. Figuur 8 hieronder illustreert de afwijking van de gemeten diepte tegenover de echte vorm van het voorwerp.
  21. 21. 17 Figuur 8 Meting van op verschillende afstanden Wolfram.com (Riemann) Op figuur 8 is te zien hoe de halve bol wordt benaderd door de meting op verschillende afstanden, de resolutie waarmee de het object wordt gemeten ligt in direct verband met de afstand van de sensor tot het object. In hoofdstuk 3.5 over de precisie van de Kinect wordt hier meer over verteld.
  22. 22. 18 3 Kinect 3.1 Inleiding Oorspronkelijk ontwikkeld als de "next generation gaming interface" voor de Xbox 360, de microsoft Kinect bevat een reeks aan sensoren, de meest prominente uit de reeks is de primesense afstandssensor.[2] Goedkope afstandssensoren waren altijd al aantrekkelijk als alternatief voor dure laser scanners voor werkgebieden zoals indoor mapping, bewaking of robotica. De Kinect was dan misschien wel ontworpen als "natural interaction in a computer game environment" maar door de aard van de data die de Kinect verzameld heeft de Kinect al veel aandacht naar zich getrokken. Van onderzoekers in onderzoeksvelden als indoor mapping en 3D modellering.[1] 3.2 Sensoren De Microsoft Kinect wordt vaak valselijk als camera beschreven, daarbij kan de Kinect eigenlijk beter beschreven worden als een "sensor array" omdat hij eigenlijk een vrij groot aantal sensoren bevat. Bij het uit elkaar halen van de Kinect vind je: een rgb kleuren camera, een IR projector, een IR camera, een microfoon array en een 3-as accelerometer. Ook al zijn er zoveel sensoren zal hier vooral gefocust worden op de camera's omdat deze de Kinect echt wel uniek maken.[2]
  23. 23. 19 Figuur 9 Kinect onderdelen 3.3 Camera's Zoals hierboven reeds vermeld heeft de Kinect twee camera's hierbij gaat het om een kleuren camera en een IR camera. Ze staan beiden langs elkaar in het midden van de Kinect op ongeveer 2,5cm afstand van elkaar. De projector zit ongeveer 7,5cm links van het midden (vooraanzicht).
  24. 24. 20 Figuur 10 Kinect camera's Deze afmetingen zijn bekomen door de stereo calibratie methode [4][5] Tabel 1 [3] bevat de specificaties van de Kinect volgens Microsoft[7]. Tabel 1 Kinect eigenschappen Sensor eigenschap Waarde / Bereik Beeldhoek 57°horiz., 43° vert. Tilt motor hoek ±28° Resolutie color stream 640x480 (VGA) Resolutie diepte stream 320x240 (QVGA) Nominale Resolutie (diepte) op 2m 1mm Nominale Resolutie (horiz.-vert.) op 2m 3mm Framerate ±30Hz Diepte bereik 0,8m - 3,5m Skeletal tracking bereik 0,8m - 3,5m Audio formaat 16 kHz, 16-bit mono pulse code modulatie Audio ingangskarakteristieken Array van 4 microfoons met 24-bit ADC
  25. 25. 21 met ingebouwde DSP voor noise en echo onderdrukking Interface USB + externe stroombron 3.4 Structured light De Kinect straalt een IR patroon uit op de omgeving om de diepte te bepalen zoals te zien op figuur 11 [3]. Zoals op figuur 11 te zien straalt de projector een pseudo random patroon uit maar deze wordt vervormd door de IR camera. De projector die dit doet wordt ook wel structured light projector genoemd[2]. Figuur 11 IR pattroon Deze foto komt van een externe IR camera, aangezien de IR camera van de Kinect het beeld vervormd. Elk puntje van dat patroon is uniek en kan onderscheiden worden van de anderen. Het exacte algorithme dat de Kinect gebruikt is niet bekend maar in het patent[7] is er sprake dat er gebruik wordt gemaakt van pixelshifts om de diepte te kunnen meten. Dit met behulp van een gecallibreerd referentie beeld. Een speculatieve maar gedetailleerde discussie hierover is te vinden op de ROS.org wiki pagina[5] over Kinect kalibrering.
  26. 26. 22 3.5 Precisie van de Kinect 3.5.1 inleiding Bij het ontwikkelen van een meetopstelling is het natuurlijk van belang om van tevoren te weten wat voor een precisie van de opstelling kan verwacht worden. De Kinect sensor registreert kleur -en diepte beelden aan een snelheid van 30 beelden per seconde. Deze beelden worden geregistreerd in een resolutie van 640x480. Verdere eigenschappen van de Kinect zijn te vinden in de tabel hieronder. Tabel 2 Kinect eigenschappen[7][1][2] Sensor eigenschap Waarde / Bereik Beeldhoek 57°horiz., 43° vert. Tilt motor hoek ±28° Resolutie color stream 640x480 (VGA) Resolutie diepte stream 320x240 (QVGA) Nominale Resolutie (diepte) op 2m 1mm Nominale Resolutie (horiz.-vert.) op 2m 3mm Framerate ±30Hz Diepte bereik 0,8m - 3,5m Skeletal tracking bereik 0,8m - 3,5m Audio formaat 16 khz, 16-bit mono pulse code modulatie Audio ingangskarakteristieken Array van 4 microfoons met 24-bit ADC met ingebouwde DSP voor noise en echo onderdrukking Interface USB + externe stroombron 3.5.2 Berekening van de resolutie Met de informatie over de beeldhoeken en de resolutie waarmee de beelden worden vastgelegd, kunnen functies worden opgesteld om de precisie van de Kinect te beschrijven. De afstand tussen het object en de sensor wordt gemeten tussen de oppervlakte van het object tot het brandpunt van de camera. Om de precisie van de Kinect te kunnen berekenen kan gebruik gemaakt worden van de driehoeksmeetkunde. De driehoek die voor de berekening van belang is, is hieronder getekend op figuur 12, samen met de variabelen die voor deze
  27. 27. 23 berekening van belang zijn. Deze driehoek kan gebruikt worden voor de horizontale en de verticale afmetingen van de pixels te berekenen. De variabel α is de beeldhoek, A is de werkelijke breedte van het beeld. Om de formules simpeler te maken is ervoor gekozen om maar de halve driehoek te gebruiken in de berekening van daar dus ook de variabelen α/2 en A/2. De variabele X stelt de afstand van het object tot het brandpunt van de camera voor en de y variabele die niet op de figuur 13 te zien is, stelt respectievelijk de breedte of de hoogte van een pixel voor. Volgens de specificaties van Microsoft zelf zouden de pixels perfect vierkant moeten zijn, om dit te controleren en ter zelfcontrole worden hieronder de afmetingen van de pixels zowel in de horizontale als in de verticale richting berekend. Figuur 12 Beeldhoek met variablelen In de horizontale richting is α 57° en A = Yh*640p, α/2 is dus 28,5° en A/2 = Yh *320p. Om Y te vinden is er een vergelijking nodig, hiervoor wordt de tangensregel gebruikt.
  28. 28. 24 ( ) Omgevormd naar een vergelijking die als oplossing de Y variabele heeft, geeft dit dan. ( ) In de verticale richting kan dezelfde formule gebruikt worden maar dan met de resolutie en de hoeken van die richting, de formule zou er als volgt uit zien. ( ) Een pixel vertegenwoordigd volgens Microsoft een oppervlakte van 3 mm x 3 mm als het object zich 2 meter van de camera bevind. De net bekomen formules kunnen hiermee dus gecontroleerd worden. ( ) ( ) Hierbij is te zien dat Microsoft wel behoorlijk ongeveer is geweest met zijn specificaties. 3.5.3 Haalbaarheid van vereisten Als een precisie van 1mm moet bereikt worden kan daarom niet gezegd worden dat de pixel 1mmx1mm moet vertegenwoordigen, men kan wel stellen dat de pixel 1mm² moet zijn in dat geval zou * gelijk moeten zijn aan 1mm², dat geeft dus. ( ) ( ) √( ( ) ) ( ( ) ) Om een resolutie van 1mm te kunnen hebben moet de Kinect 60cm van het object verwijderd zijn. Dat wil zeggen dat dit niet haalbaar is met de standaard Kinect die je bij de Xbox 360 krijgt, bij de standaard Kinect moet het object minimaal 80cm van de camera verwijderd zijn anders kan de Kinect de meting niet
  29. 29. 25 uitvoeren. De Kinect for windows daarintegen heeft een "near-mode" dan kan er gekozen worden om dichter bij te kunnen meten, namelijk vanaf 40 cm dit beperkt de maximale diepte tot 3m, de standaard Kinect heeft een bereik van 80cm tot 4m, maar zelfs in deze near-mode mag het object in kwestie maximaal 20cm hoog zijn of het valt buiten de meetbare zone. 3.6 Kinect drivers Ondanks dat de Kinect door microsoft is uitgebracht is hij eigenlijk niet ontworpen door Microsoft maar door Primesense. Primesense had voordat ze in de handen van Microsoft terecht kwamen een nauwe band met OpenNI, die nu de opensource verder ondersteunt. 3.6.1 Microsoft Microsoft heeft de Kinect natuurlijk eerst en vooral uitgebracht voor de Xbox360. Van dag één dat de Kinect uit was zijn de hackers en modders aan het werk gegaan om de Kinect aan het werken te krijgen aan de PC op Linux. Het heeft dan ook niet lang geduurd voordat de Kinect gekraakt was en kon uitgelezen worden op de pc. Microsoft heeft zich zeer negatief opgesteld tegenover dit gebeuren. Maar later zag Microsoft zelf in dat het een gevecht tegen de bierkaai was. Dus heeft Microsoft toen besloten om deze groep mensen te ondersteunen. Microsoft is toen op de proppen gekomen met Kinect for Windows. Microsoft ondersteunt ook alleen maar Kinect voor Windows. Ookal werkt hij ook op ander besturingssystemen die beter over weg kunnen met de data. 3.6.2 Opensource Natuurlijk is OpenNI nadat Primesense werd overgenomen door Microsoft niet gestopt. OpenNI ondersteunt de opensource beweging nog steeds met broncode voor zijn software en proprietary binaries die nodig zijn om te kunnen communiceren met de Primesense SoC die in de Kinect zit. OpenNI voorziet deze binaries zowel voor Windows als voor Linux en zelfs voor Linux op ARM!
  30. 30. 26 4 Zedboard 4.1 Specificaties Het zedboard is een evaluatie en ontwikkelingsbord dat gebaseerd is op de Xilinx-7000 All Programmable SoC (AP Soc). Hij combineerd een dualcore Cortex-A9 processor systeem(PS) met 85,000 serie-7 programmeerbare logica cellen van de Artix FPGA, de Zynq-7000 AP SoC kan ingezet worden in een breed spectrum van toepassingen. Het zedboard is een bord met vele mogelijkheden en on-board periferie en uitbreidingsmogelijkheden dit maakt het de ideale kandidaat voor vele toepassingen.  Figuur 14 Zedboard opbouw 4.2 Waarom het Zedboard Het Zedboard is comunity-based development board voor de Zynq het bied een volledig pakket aan I/O met de Zynq 7020 voor een uiterst lage prijs, het is daarmee ook het enige Zynq development board dat binnen het budget paste. Er werd voor de Zynq gekozen omdat dit platform een Dual-core ARM A9 applicatie processor heeft met in dezelfde chip een Atrix 7 FPGA. Dit was de perfecte basis voor dit project aangezien dan de volledige bewerking kan gebeuren op één enkele chip! Figuur 13 Zedboard geheel
  31. 31. 27
  32. 32. 28 5 Xillinux 5.1 Inleiding De Xillinux distributie is zowel software voor de ARM core als voor de FPGA (PL), het is een "volledige" linux distributie, zelfs met een grafische desktop omgeving. Je kan er via de USB OTG kabel een keyboard en muis aansluiten, en via de VGA connector ook een monitor. Het is niet alleen een demo applicatie maar ook een kick-start development kit, die de integratie tussen de linux omgeving op de ARM processor en de programmable Logic (PL) in de FPGA. Een demo configuratie van de Xillybus IP core is inbegrepen in de logica van Xillinux. Je kan natuurlijk ook zelf een custom core programmeren. Of één downloaden van de Core factory met de nodige licenties. Xillinux is gebaseerd op Ubuntu 12.4LTS voor de ARM processor, met deze linux distributie kan het zedboard zelfs bijna dienen als een echte desktop computer. Hij gebruikt de SD kaart als harde schijf en via de USB OTG aansluiting wordt usb muis en toetsenbord aangesloten, via de VGA poort kan je gewoon ieder scherm dat conform is aan de VESA standaard aansluiten. Naast de desktop omgeving kan je Xillinux ook gebruiken zonder de desktop GUI, voor taken die meer vragen van de processor kan de GUI gewoon weg gelaten worden en in de CLI verder werken[10]. Dit is ook gebeurt in de demo applicatie om wat meet headspace te hebben om een vloeiende werking te garanderen. 5.2 Toepassingen en kenmerken Er zijn vele mogelijke toepassingen voor dit systeem, de belangrijkste zijn hier opgelijst.  Data capturing  HPC (high performance computing)  FPGA control vanaf de host  Debugging  Cryptografie De belangrijkste kenmerken van de Xillybus zijn:  Tot 160 FIFO's via dezelfde bus
  33. 33. 29  Niet systeem gebonden (xilinx/altera,Linux/windows)  Gebruikt DMA als communicatie naar de host  Ondersteunt PCI Express of AXI bus  Programmeren gebeurt in de userspace  Geen specifieke driver nodig op de host 5.3 Userspace vs kernelspace Er is een groot verschil tussen drivers die in de userspace geschreven worden en drivers die in de kernelspace liggen. Een userspace driver is eenvoudiger te schrijven, maar er ontstaan problemen als er echt diepgaande toegang nodig is tot bepaalde adressen of hardware functies. In gevallen dat er zo een diepgaande toegang nodig is wordt normaalgezien geopteerd om de driver in kernel space te schrijven. Een driver in de kernelspace functioneert als module, een zogenaamde kernel module. Een programma dat in de kernel space draait heeft absolute bevoegdheid over alles, dat is meteen ook het grote gevaar met programma's die in de kernelspace draaien. Hiernaast moet alles tussen de kernel driver en de rest van het operating system direct en low level gebeuren. Fouten die hier gemaakt worden zijn vaak nefast voor de rest van het systeem[11]. 5.4 Xillybus De Xillybus is een end-to-end oplosing voor data transport van de linux host en de FPGA, in de context van deze thesis gaat het alleen maar over de communicatie met Linux, maar de Xillybus kan met andere development platformenen zelfs ook met Microsoft Windows gebruikt worden, dit gebeurt dan via de PCI bus. In een embedded omgeving op een ARM-processor wordt de AMBA bus (AXI3/AXI4) gebruikt. De Xillybus IP core kan dus gebruikt worden voor PC based systemen maar ook in een embedded omgeving. Momenteel is Xillybus for Zynq alleen nog maar beschikbaar op het zedboard.
  34. 34. 30 Figuur 15 Xillybus FIFO's Zoals boven op figuur 16 te zien, moet de logica van de toepassing alleen maar communiceren met FIFO's die mee in de logica staan. Zo zal de toepassing in de logica de data in de onderste FIFO op het diagram schrijven en zal de Xillybus IP core merken dat er data beschikbaar is in de FIFO. Kort daarna zal de Xillybus IP core beginnen met lezen en de data doorsturen naar de host en hierdoor de data leesbaar maken in de userspace van de applicatie op de ARM processor. Daarna handelt de axi bus de verdere communicatie af, deze genereert DMA aanvragen voor de ARM core bus. De applicaties op de ARM core gebruiken device files om te communiceren met AXI bus, deze device files dienen als een soort pijpleidingen om data heen en weer te sturen naar de programmeerbare logica. Dit maakt het eenvoudiger om informatie over te dragen van de ARM naar de FPGA. Verder moet hierdoor alleen maar in de userspace geprogrammeerd worden en worden de gevaren van in de kernelspace te programmeren omzeild[10].
  35. 35. 31 6 Interfaces 6.1 inleiding Bij een ontwerp waarbij er een besturingssysteem zijn data haalt van een extern toestel en deze verder leid naar de FPGA om dan weer data terug te krijgen van de FPGA. Terwijl de FPGA ook zijn data toont op een extra scherm. Zijn de interfaces het belangrijkste deel van het project. Hierbij is vooral timing van belang, omdat er in een FPGA niet per definitie wordt gewerkt met processen doen zich daar een paar problemen voor. Daarom moeten al deze interfaces ontworpen worden met desynchronisatie en synchronisatie. Figuur 16 Interfaces geheel 6.2 Kinect naar CPU De Kinect wordt aangesloten via een USB-poort, dit is voor het Zedboard via een USB OTG kabel en een USB HUB, dit is dus gevoelig voor grote hoeveelheden data die via één USB controller moeten passeren. De twee datastreams die van de Kinect komen zijn samen goed voor een datastream van ongeveer 20MB/s. Omdat er maar gebruik gemaakt wordt van één Kinect camera en aangezien de andere toestellen die zijn aangesloten via de HUB een toetsenbord en een muis zijn, vormt dit echter geen probleem voor de demo applicatie. De RAW USB data wordt omgezet via de NITE middleware, verder wordt de data beschikbaar gemaakt in de userspace via het OpenNI framework.
  36. 36. 32 6.3 CPU naar FPGA De CPU naar FPGA interface verzorgd de FPGA met de diepte data van de Kinect. Hierbij heb ik gekozen voor een 32-bit interface via de Xillybus. De Xillybus is zoals uitgelegd in hoofdstuk 5 is de interface die mee in de Xillinux distributie zit op met de FPGA te kunnen communiceren. Volgens de specificaties[10] zou de verwachte bandbreedte bij 195MB/s liggen, natuurlijk alleen maar haalbaar als DMA gebruikt wordt. 6.4 FPGA naar HDMI Figuur 17 FPGA-HDMI interface In de FPGA bevind zich een geheugen dat de de image data bij houd, dit is een dual-port ram zodat de HDMI generator en de Xillybus ten alle tijden tegelijk aan het geheugen kunnen. Hieruit leest de videodata generator zijn diepte data die in de image memory zit. In de video data generator wordt de timing en het formaat voorzien voor de video data input van de ADV7511. Dit komt grotendeels overeen met het formaat dat zou voorzien worden voor een VESA[2] compliant VGA maar dan in de YCbCr colorspace in plaats van RGB. Via de I2C interface wordt de ADV7511 geconfigureerd. Daarna zal de ADV7511 de video data omzetten naar signalen voor HDMI/DVI uitgang.
  37. 37. 33 6.5 FPGA naar CPU De interface van de FPGA naar de CPU is ook bewust simpel gehouden, de logica in de FPGA berekend het volume van het te meten object in pixels en compenseert voor het verschil in grootte van de pixel die ontstaat door de hoogte die de pixel vertegenwoordigd. Omdat de omrekening van het volume in pixels naar het volume in mm³ kommagetallen nodig heeft gebeurt die omzetting bij de CPU omdat deze er beter voor geschikt is.
  38. 38. 34 7 Discussie 7.1 De meetopstelling Natuurlijk moet al deze theorie ook getest worden, figuur 19 hier onder verduidelijkt de testopstelling. Hierbij bevind zich de Kinect camera 1m boven het meetvlak, bij een minimale meetdiepte van 80 cm geeft dit maar een bruikbaar venster van 20cm om de meting door te voeren. Er werd voor deze afstand gekozen omdat dit een maximale resolutie geeft op een zo klein mogelijk oppervlak om de metingen uit te voeren met de Kinect for Xbox360. Figuur 18 Meetopstelling Op figuur 19 is te zien dat het object dat gemeten wordt geen kubus is, maar een voetstuk waarop zich een plaatje bevind. Op deze manier konden door vier voetstukken en vier plaatjes op exacte afmetingen te fabriceren, 16 voorwerpen met verschillende afmetingen gesimuleerd worden. Omdat de camera recht boven
  39. 39. 35 het voorwerp staat en bij gevolg alleen maar het bovenvlak ziet geeft dit exact hetzelfde resultaat. 7.2 De verwachtingen Omdat op 1m diepte gemeten wordt zal de verwachte resolutie nu anders liggen dan bij de berekeningen van hoofdstuk 3. Met de breedte van een pixel en de lengte ervan. ( ) ( ) Hieruit kan berekend worden wat de verwachte fout op de meting zal zijn voor de te meten voorwerpen. De maximale fout treed op als een rand van het voorwerp net op de grens van twee pixels ligt en als de hoogte van het voorwerp net op de grens ligt tussen twee niveaus van de dieptemeting. Dit kan het volume groter laten lijken dan in de realiteit, dit zou een positieve afwijking zijn. Het voorwerp kan ook kleiner lijken dan in de werkelijkheid, dan wordt er gesproken over een negatieve afwijking. Deze twee uiterste gevallen zijn in tabel 3 en tabel 4 weergegeven. Tabel 3 Positieve afwijking
  40. 40. 36 Tabel 4 Negatieve afwijking
  41. 41. 37 7.3 De metingen Zoals te zien in tabel 5 hieronder is de precisie van de Kinect veel slechter als verwacht. Bij de procentuele fout is duidelijk te zien dat deze significant stijgt als de hoogte van de voet stijgt. Dit is net het tegengestelde van wat er verwacht was. De berekeningen gaan er van uit dat er buiten de pixel fouten geen andere fouten meer zijn. Maar dat is niet zo, de significante stijging in fout is te verklaren door de opbouw van de Kinect, het voorwerp staat dan wel recht onder de camera van de Kinect, maar zoals in hoofdstuk 3 beschreven staat de IR projector absoluut niet in het midden maar sterk naar links verschoven. Tabel 5 Meetresultaten Door het verschil in inkijkhoek ontstaat er naast een voorwerp een schaduw in het IR patroon dat zorgt voor de fout in de meting. Die schaduw is dus maar een zeer beperkte invloed op objecten die laag zijn en dus dicht op het meetplatform. Maar grotere voorwerpen werpen een grote schaduw, dit is het ergste bij hoge en smalle objecten. Figuur 23 illustreert dit probleem.
  42. 42. 38 Figuur 19 Schaduwprobleem Op de figuur 19 is te zien dat doordat de IR projector meer naar links staat, de camera in staat is om de schaduw te zien achter het voorwerp. Zelfs zonder het probleem met de schaduw is er enorm veel ruis die onderdrukt moet worden. Om deze ruis weg te filteren wordt er gebruik gemaakt van een lopend gemiddelde en een beperking in mogelijke waarden, maar toch is een ruis piek van 1000mm³ of meer zeker geen uitzondering.
  43. 43. 39 8 Conclusie en toekomstvisie 8.1 Conclusie De Microsoft Kinect is als dieptecamera om absolute metingen uit te voeren niet geschikt. De Kinect is ontworpen om relationele data op te nemen en te verwerken, zoals een object of gebaar herkenning. De Kinect beschikt ook over een custom ASIC die deze verwerking uitvoert, aangezien deze anders te veel rekenkracht zou vragen van de host. De Microsoft Kinect is tenslotte gemaakt voor de Xbox360, dit is een spelconsole, die veel grafisch ingewikkelde verwerkingen moet kunnen doen om een spel te kunnen draaien en dus zou die extra belasting een nefaste gevolgen hebben voor de kwaliteit van spellen die gebruik maken van de Kinect. De Kinect is dus voor absolute meet toepassingen niet geschikt. Maar hij zou wel kunnen ingezet worden voor bijvoorbeeld object herkenning op een lopende band of voor een interactieve etalage. 8.2 Mogelijke verbeteringen De huidige Kinect is een dieptecamera die met behulp van structured light de diepte bepaald en dit in VGA kwaliteit. Maar de Xbox360 is aan het einde van zijn leven toegekomen en zal al binnenkort worden vervangen door zijn opvolger. Die opvolger is de Xbox One en wordt standaard in een bundel verkocht met de nieuwe Kinect. Deze dieptecamera is een time-of-flight camera, dit is hetzelfde systeem dat ook gebruikt wordt door professionele dieptecamera's. Time-of-flight is veel preciezer als de structured light methode, daarbovenop neemt de nieuwe Microsoft Kinect zijn beelden op in 1080p resolutie. Dit geeft een veel hogere precisie als de VGA resolutie van de oude kinect, deze methode is ook veel minder gevoelig aan ruis dan de structured light methode. Met andere woorden is deze nieuwe Kinect met hoge waarschijnlijkheid wel geschikt voor vooropgestelde case. Helaas is de nieuwe kinect nog niet beschikbaar en konden er dus geen testen mee uitgevoerd worden.Om dit systeem bruikbaar te kunnen maken om in de praktijk volume metingen te doen, moet de beperking in vorm van de voorwerpen die gemeten kunnen worden, verholpen worden door meerdere Kinect camera's te gaan gebruiken.
  44. 44. 40 Referenties [1] ACCURACY ANALYSIS OF KINECT DEPTH DATA, K. Khoshelham, ITC Faculty of Geo-information Science and Earth Observation, University of Twente, 2011 [2] The Kinect Up Close: Modifications for Short-Range Depth Imaging, Mark Theodore Draelos, North Carolina State University, 2012 [3] Kinect Depth Sensor Evaluation for Computer Vision Applications, M.R. Andersen, T. Jensen, Aarhus University, Februari 2012 [4] N. Burrus. (2010) Kinect calibration. [Online]. Available: http://nicolas.burrus.name/index.php/Research/KinectCalibration [5] K. Konolige and P.Mihelich. (2010) Kinect_calibration/technical. ROS.org. Discussion of the Kinect’s software workings. [Online]. Available: http://www.ros.org/wiki/Kinect_calibration/technical [6] Microsoft.com [7] Programming Guide,Microsoft Research, 2011, Kinect forWindows SDK, Beta 1 Draft Version 1.0. [Online]. Available: http://research.microsoft.com/en- us/um/redmond/projects/Kinectsdk/docs/ProgrammingGuide_KinectSDK.pdf [8] Depth mapping using projected patterns, U.S. Patent 12/522,171, 2010. [9] Getting started with Xillinux for Zynq-7000 EPP, Xillybus Ltd, 2012 [10] Xillybus.com [11] Linux device drivers 3th edition, O'Reilly Media, Januari 2005 [12] Analyse voor het hoger onderwijs 3de druk,Gustaaf Deen, Paul Levrie , de boeck, 2011 [13] http://www.vesa.org/

×