Razvoj kamere z vgrajenim programirljivim slikovnim procesorjem Aleš GORKIČ, Drago BRAČUN in Janez DIACI Izvleček: Za potrebe laserske profilometrije smo razvili hitro kamero, ki vsebuje slikovni senzor ločljivosti 667 x 502 pikslov in FPGA-vezje Xilinx Spartan 3E, ki zajete slike obdela v realnem času. Za prenos podatkov smo uporabili vmesnik USB2.0, katerega pasovna širina (38 MB/s) ne zadošča za prenos žive slike pri tej hitrosti zajema. Za zmanjšanje pretoka podatkov preko USB smo razvili namensko aritmetično-logično vezje, ki zna iz signala slikovnega senzorja izluščiti pozicijo laserske črte s podtočkovno ločljivostjo. Tako izračunane profile potem pošljemo v PC, ki iz njih izračuna tridimenzionalne (3D) koordinate površine merjenca. Z uporabo lokalnega procesiranja slike dosežemo hitrosti merjenja do 196 profilov na sekundo. Več takih kamer je možno povezati v sinhroniziran sistem, ki omogoča zajem tridimenzionalne oblike površine kompleksnih objektov. Ključne besede: laserska profilometrija, slikovni senzor, FPGA, procesiranje slike, ■ 1 Uvod Hitra laserska profilometrija je ena od metod, s katerimi lahko zajamemo obliko merjenca. Temelji na osvetljevanju površine s strukturirano lasersko svetlobo, zajemu slik osvetljene površine z videokamero ter računalniški obdelavi zajetih slik. V novejšem času se v laserskih profilomerih uveljavljajo digitalne videokamere. Takšna kamera je preko hitrega vodila povezana z osebnim računalnikom (PC), ki iz zajete slike izračuna 3D profil površine. Če merjenec ali strukturirani svetlobni vzorec premikamo, lahko izmerimo 3D koordinate površine merjenca (slika 7). Ključna dejavnika, ki omejujeta hitrost merjenja takih sistemov, sta predvsem prepustnost vodila in hitrost obdelovanja slike. Dr. Aleš Gorkič, univ. dipl. inž., dr. Drago Bračun, univ. dipl. inž., izr. Prof. dr. Janez Diaci, univ. dipl. inž., Univerza v Ljubljani, Fakulteta za strojništvo Prenos zajete slike v računalnik ponavadi poteka preko vmesnika lEEE-1394 (FireWire) ali USB (angl. Universal Serial Bus - univerzalno serijsko vodilo), ki imata pasovno širino 400 oz. 480 Mbit/s. Na tržišču obstajajo tudi hitrejši vmesniki, kot so npr. GigaLAN (1,25 Gbit/s), FireWire 800 (800 Mbit/s) in CameraLink (12x2,38 Gbit/s), ki pa so praviloma bistveno dražji in zahtevajo dodatno strojno opremo osebnega računalnika. Slika 1. Princip laserske profilometrije Da bi lahko bistveno povečali hitrost merjenja z lasersko profilometrijo, smo razvili kamero, ki omogoča lokalno procesiranje zajete slike. Takšna kamera bistveno razbremeni PC, tako sproščene zmogljivosti pa je mogoče uporabiti za hitrejše generiranje 3D modelov iz zajetih izmerkov in druge s tem povezane naloge. Tak pristop omogoča da en PC sočasno sprejema podatke z več kamer, kar omogoča hitrejši zajem 3D oblike kompleksnih objektov (npr. človeško telo). Kamera je zgrajena okoli dveh ključnih komponent: slikovnega senzorja in programirljivega logičnega vezja tipa FPGA (angl. Field of Programmable Gate Array). FPGA je v osnovi skupek logičnih vrat, pomnilniških celic in programirljivih povezav v enem samem integriranem vezju. Z njim lahko sestavimo logično vezje, ki opravlja poljubno funkcijo. Za gradnjo takih vezij njihovi proizvajalci nudijo močna razvoja orodja in že izdelana funkcionalna jedra, ki omogočajo, da razvijalec gradi svoj sistem z integracijo izbranih funkcionalnih jeder. Primeri takšnih jeder so npr. krmilniki vodil, pomnilnika, standardne vhodno-izhodne enote in celo mikroprocesorji različnih zmogljivosti [1]. Ideja o analizi slike z FPGA-vezji sicer ni nova [2, 3], vendar pa na tržišču ni kamer z vgrajenimi FPGA-vezji, ki bi omogočale implementacijo lastnih algoritmov za procesiranje slike. Za razvoj infrastrukture za zmogljive laserske profilomere nove generacije smo v okviru doktorskega dela [4] razvili lastno digitalno kamero z vgrajenim FPGA-vezjem, v katerem smo lahko implementirali hitre algoritme za obdelavo slike, ki smo jih razvili v predhodnih raziskavah na področju laserske profilometrije [5, 6]. V tem prispevku pa je opisan razvoj zadnje generacije teh kamer. ■ 2 Razvoj kamere Razvoj kamere smo razdelili na štiri podsklope: razvoj elektronskih vezij, razvoj sistema za obdelavo slike, razvoj ugnezdenega mikroprocesorskega sistema ter razvoj programske opreme za osebni računalnik. 2.1 Razvoj elektronskih vezij Kamera je zgrajena iz dveh modulov - tiskanih vezij: vezja s slikovnim senzorjem in vezja s FPGA-slikovnim procesorjem. Razvoj smo začeli z izbiro FPGA-mo-dula. Ena izmed osnovnih zahtev za ta modul je bila njegova povezljivost s PC-jem preko vodila USB. Ker na tržišču nismo našli dovolj majhne in zmogljive platforme za primerno ceno, smo v sodelovanju s Trenz Electronic razvili modul TE0300 [7]. TE0300 (slika 2) vsebuje FPGA-vezje Xilinx Spartan3E-1600, 64 MB DDR SDRAM pomnilnika, 4 MB SPI FLASH pomnilnika in Cypressov mikrokrmil-nik FX2, ki skrbi za povezavo USB2.0 do osebnega računalnika (slika 3). Modul meri 40,5 x 47,5 x 7 mm. Za ta modul smo v sodelovanju s slovenskima podjetjema Optomotive in Dewesoft razvili celotno programsko opremo, ki vključuje program za Slika 2. FPGA-modul TE0300 FPGA, program za FX2, USB-gonilnik in dinamično knjižnico z osnovnim naborom funkcij za komunikacijo modula s PC-jem. Za kamero, vgrajeno v laserski profilomer, je pomembno, da ima hiter in velik senzor [4]. V našem primeru smo izbrali slikovni senzor Micron MT9V403, ki omogoča zajem slik velikosti 502 x 667 pikslov (slikovnih točk) s frekvenco do 196 celih slik na sekundo. Velikost piksla je 9,9 pm x 9,9 pm, tako da je aktivna ploskev senzorja velika 5,0 mm x 6,6 mm, standardna diagonala pa meri 12,7 mm. Ob vsakem pikslu sta integrirana fotodioda in ojačevalnik. Na izhodu ojačevalnika se ustvari napetost, ki je sorazmerna osvetlitvi fotodiode. Slikovni senzor ima vgrajen 10-bitni analogno/digitalni (A/D) pretvornik, ki pretvori izhodno nape- tost ojačevalnika v digitalni signal. Tako ima senzor 10 priključkov za prenos slike, preko katerih je mogoče prenašati podatke pri frekvenci do 66 MHz. Priključke neposredno povežemo na vhode FPGA-vezja. Za pritrditev slikovnega senzorja smo razvili tiskano vezje, ki je enako veliko kot modul TE0300. Na tiskanem vezju (slika 4) sta poleg senzorja še priključka za USB-vodilo ter dodatne vhodno-izhodne enote - VI KON. (asinhroni serijski vmesnik, signal za sinhronizacijo kamer v sestavljenem sistemu, krmilnik koračnega motorja 2.2 Razvoj jedra za obdelavo slike Za obdelavo slike smo razvili arit-metično-logično vezje XPS_PEAK, Slika 3. Blokovni diagram celotnega sistema Slika 4. Tiskano vezje za povezavo slikovnega senzorja z modulom TE0300 ki zna iz signala slikovnega senzorja izluščiti pozicijo laserske črte. To potem pošljemo na PC, ki izračuna koordinate projekcije na merjencu. ti 196 slik na sekundo, moramo torej v sekundi zajeti 196 x 334.834 = 65.627.464 pikslov. Ker intenzivnost signala za vsak piksel opišemo z 10- Slika 5. Zajeta slika laserske črte, kot jo vidi kamera, s povečano vrstico v območju črte bitnim zapisom, to pomeni, da mora pasovna širina celotnega sistema omogočati obdelavo 10 bitov v 15 ns (ura 66 MHz), kar znaša 83 MB/s. Najboljša rešitev za obdelavo slike je sinhroni računalnik, ki obdeluje tok podatkov z enako hitrostjo, kot ta prihaja iz senzorja za zajem slike. Hitrost računalnika je torej pogojena s frekvenco prenosa slike. Razvoja algoritma za analizo slike smo se lotili v programskem paketu Matlab. Razvili smo interaktivni grafično podprti model (slika 6), ki naloži sliko laserske črte ter izračuna točke profila v kamerinem koordinatnem sistemu [5, 6]. Z drsnikom na vrhu slike izberemo želeno vrstico slike, vrednosti intenzitete za izbrano vrstico v območju laserske črte pa so prikazane v zgornjem diagramu. V diagramu pod njim so logične vrednosti za detekcijo laserske črte (presežen prag).V tretjem diagramu je prikazan signal, ki izstopa iz kon-volucijskega filtra FIR (angl. Finite Impulse Response - filter s končnim impulznim odzivom). V četrtem diagramu je prikazana detekcija prevoja, v petem (spodnjem) diagramu pa izločeni vrednosti levo (a) in desno (b) od prevoja. Pozicija točke, ki jo izračunamo s podtočkovno detekcijo, pa je izpisana v desnem zgornjem vogalu slike 6. Senzor pošilja sliko v obliki toka podatkov, ki je strukturiran v vrstice, začetek in konec vrstice pa določa signal za horizontalno sinhronizacijo. Vertikalna sinhronizacija pa določa začetek in konec slike. Laserska črta poteka preko vrstic senzorja, kot je prikazano na sliki 5. Za določitev oblike merjenca moramo čim bolj natančno določiti pozicijo slike laserske črte na senzorju. Slika iz senzorja prihaja kot zaporedje pikslov, tj. od izhodišča (X = 0, Y = 0) do konca prve vrstice (X = 0, Y = 667). Nato začne izpisovati drugo vrstico (X = 1, Y = 0) in tako naprej vse 502 vrsti. Na desni strani slike 5 je izrisan del signala za 84. vrstico za območje od Y = 315 doY = 335. Ena slika torej obsega 502 x 667 = 334.834 pikslov. Če hočemo zajema- Slika 6. Interaktivni model algoritma za analizo slike Slika 7. Blokovni diagram algoritma za obdelavo slike Algoritem za izračun koordinat točke vsebuje le take elemente, ki so primerni za implementacijo v logičnem vezju. Taki elementi so na primer konvolucija z uporabo filtra FIR, filtriranje z gibljivim povprečenjem in razne celoštevilčne primerjave. Ko smo algoritem temeljito preizkusili na modelu, smo shranili koeficiente za izdelavo konvolucijskega filtra v FPGA. Programska oprema za FPGA je bila razvita z Xilinxovimi orodji ISE, ki se uporabljajo za razvoj programov za namensko razvita logična vezja. Za razvoj konvolucijskega filtra smo uporabili programsko orodje FIR Compiler, ki je del orodij ISE. Na sliki 7 je prikazano, na kakšne funkcijske enote smo razdelili arit-metično-logično vezje za obdelavo slike. Na vhodu v vezje imamo 10 bitov široko vodilo za prenos slike in dva sinhronizacijska signala. Vse signale s senzorja beremo preko vstopnih registrov pri frekvenci do 66 MHz. Vstopne slikovne podatke nato vodimo v dva paralelna filtra FIR. Z enim filtrom računamo konvolucijo, z drugim pa zgladimo intenziteto signala. S konvolucijskim filtrom FIR intenziteto hkrati zgladimo in odvajamo. Nato v konvoliranem (odvedenem) signalu poiščemo prehod čez ničelno lego, ki predstavlja vrh intenzitete. Ta prehod sproži podtočkovno de-tekcijo (interpolacijo med dvema piksloma) in shrani podatek na štev-niku pozicije točke (celoštevilčni del koordinate Y) ter zglajeno intenziteto. Podtočkovna detekcija iz leve in desne točke od prehoda čez ničlo izračuna pozicijo ničelnega prehoda na 1/16 piksla natančno. Na koncu preračuna točke sortiramo, ker je v eni vrstici več ničelnih leg. Za vsako vrstico izberemo le tisto, ki ima najvišjo zglajeno intenziteto. Podatki za eno 3D točko vsebujejo 32 bitov: 14 bitov za pozicijo točke v vrstici, 10 bitov za številko vrstice in 8 bitov za podatek o intenziteti. Pri hitrosti zajema 196 slik na sekundo je tako izhodna podatkovna pasovna širina 400 kB/s, kar je za 200-krat manj kot pasovna širina zajema slike. Za tako nizko pasovno širino bi lahko uporabili tudi kakšen drug počasnejši vmesnik. TE0300 namreč omogoča do 38 MB/s pasovne širine preko USB, kar s pridom izkoristimo pri predogledu žive slike s slikovnega vezja. Največji problem pri razvoju jeder za FPGA so zakasnitve posameznih procesov (logični elementi + povezave med njimi). V našem primeru nobena zakasnitev procesa ne sme biti večja od 15 ns. Če nam to ne uspe, potem se morajo kritični procesi razbiti v več procesov, ki se lahko izvršijo v enem urnem ciklu. Čas, ki preteče od vstopa zadnjega podatka o intenziteti v vezje do izstopa zadnjega podatka o poziciji laserske črte, imenujemo latenca. Pri tem moramo poudariti, da nobenega podatka ne izpustimo. Več kot imamo procesov, ki si sledijo drug za drugim, večja je latenca. V našem primeru je latenca znašala 42 urnih ciklov ali 630 ns. Latenca ne vpliva na točnost izračuna, saj tudi vse ostale signale temu ustrezno zakasnimo. Po izračunu podatke prenesemo v zunanji pomnilnik, kjer jih skladiščimo, dokler jih preko USB ne prenesemo na PC. Za dostop do zunanjega pomnilnika DDR SDRAM smo uporabili visoko zmogljiv pomnilniški krmilnik MPMC (angl. Multi Port Memory Controller) [8]. MPMC ima 400 MB/s (megabajtov na sekundo) pasovne širine pri frekvenci 100 MHz in omogoča priklop do 8 različnih vodil, ki delujejo sočasno. V našem primeru je nanj priključen krmilnik NPI_DMA za hiter prenos podatkov brez obremenjevanja procesorja. Ta prenaša podatke iz senzorja v jedro za obdelavo slike XPS_PEAK ter na USB preko XPS_FX2. Jedra na sliki 8, ki so obarvana modro, so bila razvita na novo v jeziku VHDL (angl. Very High Speed Hardware descriptive Language), ki je eden od standardnih jezikov za programiranje FPGA. Od programskih jezikov se razlikuje po tem, da omogoča opis sočasnih procesov, česar jeziki za mikroprocesorje ne omogočajo. Sočasnost in paralelnost omogočata izjemno hitro obdelavo podatkov in prave »real-time« odločitve pri zelo nizki porabi energije. Kamera namreč porabi le 2 W električne energije. 2.3 Razvoj ugnezdenega mikroprocesorskega sistema Ugnezdeni mikroprocesorski sistem služi kot v aktivni vmesnik med PC-jem in slikovnim senzorjem ter dodatnimi vhodno-izhodnimi napravami in omogoča fleksibilno konfiguracijo kamere. Razvitje bil sXilinx-ovimi orodji EDK in SDK. EDK je orodje za mikroprocesorskega jedra in perifernih enot v vezju FPGA, SDK pa je orodje za razvoj programske opreme za te ugnezdene mikroprocesorske sisteme [8]. Jedro sistema predstavlja zmogljiv 32-bitni mikroprocesor MicroBlaze, ki deluje pri frekvenci 50 MHz in izvaja programsko kodo iz 32 kB velikega notranjega pomnilnika (slika 8). Sistem vsebuje še periferne enote za komunikacijo s senzorjem (XPS_I2C), FLASH-pomnilnikom (XPS_SPI), koračnim motorjem (XPS_STEPPER), časovnik, asinhroni serijski vmesnik ... Vse periferne enote procesor naslavlja preko PLB-vodila in tako krmili celotni sistem. 2.4 Razvoj programske opreme za PC Za ogled zajete slike in profilov smo razvili dinamično knjižnico (angl. DLL Dynamic Link Library), ki omogoča integracijo v različne grafične uporabniške vmesnike. Knjižnica je bila razvita v programskem jeziku C++ v razvojnem okolju Microsoft Visual Studio. Za začetni prikaz in shranjevanje zajetih podatkov ter nastavitev kamere smo uporabili grafično okolje LabView (slika 9). Ta program omogoča prikaz slike s slikovnega senzorja kot tudi prikaz zajetih profilov v realnem času. Poleg ogleda in shranjevanja zajetih podatkov omogoča tudi nastavitev vseh parametrov kamere. Slika 8. Blokovni diagram ugnezdenega sistema znotraj FPGA 250 Slika 9. Okno za prikaz podatkov Slika 10. Prikaz šuma detekcije pri mirovanju merjenca V okviru testiranja kamere smo izvedli analizo delovanja algoritma za analizo profilov. Na mirujočem merjencu smo zajeli 100 profilov. Za vsako točko v profilu smo določili razliko med minimalno in maksimal- no vrednostjo, ki sta bili zajeti znotraj vzorca 100 profilov. Na sliki 10 je prikazan diagram razlik v odvisnosti od zaporedne številke točke v profilu. Na ta način lahko ocenimo velikost šuma, ki je posledica zajema in analize slike. Kot vidimo, ta le redko seže preko 1/8 piksla. ■ 3 Zaključek Zasnovali, razvili in izdelali smo hitro kamero za potrebe laserske profilome-trije. Pri tem smo uporabili FPGA za procesiranje slike. Na ta način lahko zajamemo in obdelamo do 196 celih slik na sekundo. S tem smo omogočili bistveno povečanje hitrosti 3D meritev površin hkrati z razbremenitvijo osebnega računalnika. Izračunani profil vsebuje 494 točk, ki imajo 14-bitno ločljivost pozicije. Poleg pozicije vsaka točka vsebuje tudi podatek o intenziteti laserske črte, ki ga lahko uporabimo za prikaz sivinske teksture na senčenem 3D modelu površine. Razvita kamera je bila vgrajena v različne sisteme: sistem za merjenje oblike obraza, sistem za karakterizaci-jo učinka večvrstnih laserskih bliskov na obsevano površino, sistem za 3D lasersko označevanje, sistem za merjenje geometrije gumijastih cevi ter eksperimentalni mobilni robot [4, 9]. Hitrega senzorja MT9V403 ne izdelujejo več, dobavljiv pa je njegov naslednik MT9V034, ki pa zmore zajeti le do 65 slik na sekundo, a ima malenkost višjo ločljivost in boljše razmerje signal/šum. Ta je vgrajen v zadnjo generacijo FPGA-kamer tipa Cameleon, ki jih proizvaja podjetje Optomotive [10]. Te omogočajo priklop in obdelavo slike z do treh senzorjev hkrati. Na ta način lahko z eno samo kamero nadomestimo tri klasične kamere. Stem lahko merimo kompleksnejše objekte ali pa lahko povečamo hitrost merjenja, merilno območje ali ločljivost. Poleg tega so vsi trije senzorji natančno sinhronizi-rani pri polni hitrosti, kar s klasičnimi kamerami ponavadi ni mogoče. Reference [1] S. Kilts, »Advanced FPGA Design: Architecture, Implementation, and Optimization«, Wiley-IEEE Press, 2007. [2] Podatkovni list za hitri profilomer VDS Vosskühler ZPS-1000 (http://www.vdsvossk.de/down-load/doc/en/ZPS-1000_Datash-eet_V2_00_en.pdf) [3] Predstavitvi hitrih profilome-rov SICK IVP Ranger in Ruler (http://www.sickivp.com/sick-ivp/products/3d_cameras/) [4] A. Gorkič, »Optodinamska ka-rakterizacija in nadzor laserskih obdelovalnih procesov z večvrst-nimi laserskimi bliski«, doktor- sko delo, Fakulteta za strojništvo, Ljubljana, 2007. [5] D. Bračun, »Meritev oblike teles na osnovi laserske triangulacije«, doktorsko delo, Fakulteta za strojništvo, Ljubljana, 2002. [6] M. Jezeršek, »Laserski sistem za tridimenzionalno merjenje hitro spreminjajoče se oblike teles«, doktorsko delo, Fakulteta za strojništvo, Ljubljana, 2004. [7] Predstavitev industrijskega modula TE0300 (http://www. trenz-electronic.de/products/ fpga-boards/trenz-electronic/in-dustrial-micromodules.html). [8] Spletna stran dokumentacije za Xilinx EDK (http://www.xilinx. com/ise/embedded/edk_docs. htm). [9] L. Kuščer, »Sistem za detekcijo ovir na osnovi kamere z vgrajenim slikovnim procesorjem«, Ventil 14/5, 2008, s. 464-468. [10] Spletna stran podjetja Optomotive (http://www.optomotive.si). Developing a camera with a built-in programmable image processor Abstract: For laser profilometry applications we developed a high speed camera with a 667 x 502 pixels imaging sensor connected to a Xilinx Spartan 3E FPGA which processes the acquired images in real time. For a connection to a PC we used USB2.0 bus, whose bandwidth (38 MB/s) is not enough for image transmission at the high acquisition speed allowed by the imaging sensor. To reduce the required bandwidth we developed a custom arithmetic-logic circuit which calculates the position of the laser line from the acquired image with a sub-pixel resolution. The calculated profiles are sent to the PC, which calculates 3D coordinates of the measured object surface. Using the local image processing we have achieved up to 196 profile measurements per second. Several such cameras can be synchronized into a system that allows the acquisition of 3D surface shape of complex objects. Keywords: lasers profilometry, imaging sensor, FPGA, image processing, TEHNOLOŠKI PfiRH LJUBLJfiNfl 01