Laserowy skaner obiektów 3D.
Transkrypt
Laserowy skaner obiektów 3D.
Laserowy skaner obiektów 3D. Włodzimierz Lipert. 19.06.07 1 Założenia. Wykonanie skanera laserowego w skład którego będą wchodzić: – laser linijkowy; – kamera z interface-em USB; – sterowana platforma obrotowa; – układ z mikrokontrolerem, sterujący pracą platformy obrotowej (RS232/USB); – oprogramowanie dla komputera PC; 2 Harmonogram prac. – 10.04.07, zaprojektowanie: – platformy obrotowej przy pomocy oprogramowania CAD; – sterownika mikroprocesorowego; – oprogramowania dla komputera PC ( system Linux ); – 24.04.07: – wykonanie pcb i zlutowanie sterownika mikroprocesorowego; – napisanie oprogramowanie dla mikrokontrolera; – 08.05.07: – wykonanie platformy obrotowej, i mocowania lasera linijkowego; – napisanie programu dla komputera; – 22.05.07: – podłączenie sprzętu i jego testy/debugowanie; – 05.06.07: – końcowe poprawki i oddanie projektu; 1 3 Idea Idea działania skanera laserowego jest bardzo prosta i opiera się na podstawach geometrii, mianowicie podczas kiedy wiązka lasera pada na obiekt zostaje odbita i trafia na obraz ( kamera ). Znając dokładny kąt pod jakim jest ustawiona płaszczyzna lasera, względem kamery, możemy wyliczyć, na podstawie triangulacji, współrzędne obiektu w przestrzeni, jako punk przecięcia płaszczyzny lasera z prostą wychodzącą w kierunku odebranej wiązki lasera ( na obrazie ). Płaszczyzna wiązki lasera jest jednoznacznie zdefiniowana przez dwa wektory orientacji lasera i odległość pomiędzy kamerą a źródłem wiązki. Więcej informacji na temat stereowizji, triangulacji i kalibracji kamery można uzyskać z materiałów do wykładu “Systemy Wizyjne” autorstwa dr. inż. Marka Wnuka dostępne pod adresem [1]. 4 Urządzenia zastosowane w projekcie – kamera firmy Logitech Communicate STX o matrycy 307200 pikseli i możliwości przechwytywania do 30 klatek/s; – stół obrotowy własnej konstrukcji, napędzany przy pomocy silnika krokowego i przekładni ślimakowej. Rozdzielczość z silnikiem 48 krokowym to 0.078125 stopnia ( 4608 działek ); – laser linijkowy, dioda laserowa pochodzi z poziomicy laserowej, obudowa soczewki skupiającej i rozpraszającej ( tworząca linie ) wykonana we własnym zakresie; – lawa i wsporniki, umożliwiające zamontowanie stołu obrotowego i kamery, wykonane we własnym zakresie; 4.1 Sterownik stołu obrotowego i lasera Sterownik został zrealizowany w oparciu o mikrokontroler MC68HC908JB16 firmy Freescale ( otrzymałem jako próbkę :) ). Na pokładzie sterownika znajduje się układ przekształtnika napięć z TTL na EIA/TIA-232 umożliwiający komunikację przez interfejs RS232 z pokładowymi modułami mikrokontrolera SCI i MON08. MON08 służy także do debugowania i programowania pamięci flash. Do sterowania silnikiem krokowym zastosowałem układ ULN2803A, który po zmodyfikowaniu ( połączenie 8 kanałów w 4 ) może sterować obciążeniem wymagającym nawet 1A. Do dyspozycji użytkownika są także 4 diody LEDSMD, które są bardzo pomocne przy diagnozowaniu oprogramowania bez debuggera. Sterownik lasera został zrealizowany na osobnej płytce drukowanej, jego głównym zadanie jest stabilizacja napięcia 3.3V i możliwość włączania i wyłączania lasera. Schematy elektryczne jak i projekty obwodów drukowanych są załączone do sprawozdania. 5 Pomiar Aby precyzyjnie wykryć odbicie wiązki laserowej zdecydowałem się na pomiar różnicowy, czyli przy włączonym i wyłączonym laserze, ma to swoje wady 2 w postaci 2x dłuższego czasu skanowania obiektu, jednak zalety są ogromne, ponieważ uniezależniamy się od wpływu zakłóceń zewnętrznych ( chwilowe przebłyski światła itp... ). 6 6.1 Oprogramowanie Oprogramowanie dla MC68HC908JB16 Program został napisany w języku C przy pomocy środowiska CodeWarrior 4.6 ( darmowa wersja do 16 KB kodu ) dla platformy Windowz :(. Po uruchomieniu zasilania program sterownika czeka na komendy otrzymane przez interfejs SCI, który jest połączony z portem RS232 komputera PC. Niestety interfejs USB sterownika nie został jeszcze oprogramowany. Komendy mają prostą formę i są w postaci: [ ilość-kroków; kierunek; prędkość; laser-włącz/wyłącz ]. 6.2 Oprogramowanie dla PC Program umożliwiający sterowanie, przetwarzanie i wizualizację danych pomiarowych został zrealizowany w oparciu o biblioteki OpenGL, GLUT, OpenCV. Aby rozpocząć skanowanie należy uruchomić z odpowiednimi przełącznikami. Kod źródłowy jest przenośny pomiędzy systemami typu UNIX, został dołączony do sprawozdania. 7 Post Factum Założenia projektowe zostały zrealizowane, jest jednak dużo rzeczy które można usprawnić, pierwszą z takich rzeczy jest program do wizualizacji danych, tak aby można było uzyskach siatkę obiektu. Niewątpliwie najważniejszą rzeczą jaką trzeba jeszcze wykonać jest kalibracja kamery, bez niej nie możliwe jest poprawne odwzorowanie brył z dużą precyzją. Po kalibracji precyzja jaką można uzyskać to 0.5 - 0.1mm. Literatura [1] http://rab.ict.pwr.wroc.pl/ mw/Docs/are4372.htm 3 3 PTD3 100uF 100nF C8 PTD4 100nF PTD5 +5V Voltage Regulator GND 560R R6 LED2 560R R7 LED3 560R LED4 +10V SHIFTER 100nF 100nF 1 3 4 5 C1 C2 D1 BAS70 RXD U$2 PTE3 TXD RXD 14 PTC0/TXD 16 PTC1/RXD 2 1 10k JP3 RESET 28 /RST 15 IRQ /IRQ 2 3 OSC1 OSC2 R12 PTA0/KBA0 PTA1/KBA1 PTA2/KBA2 PTA3/KBA3 PTA4/KBA4 PTA5/KBA5 PTA6/KBA6 PTA7/KBA7 PTA2 PTD0 PTD1 PTD2 PTD3 PTD4 PTD5 PTE0/TCLK PTE1/T1CH01 PTE2/T2CH0 PTE3/D+ PTE4/DVDD VREG OSC1 OSC2 VSS 6 7 8 9 10 17 PTD0 PTD1 PTD2 PTD3 PTD4 PTD5 23 11 22 12 13 PTE0 PTE1 PTE2 PTE3 PTE4 JP1 16 +5V 2 PTA3 1 GND VS+ VS- R1OUT R1IN R2OUT R2IN T1IN T1OUT T2IN T2OUT VCC GND 2 6 DB9F-MON08 13 8 14 7 1 2 3 4 5 6 7 8 9 15 MAX232 DB9F-SCI JP2 1 2 3 4 5 6 7 8 9 RS232 Level Shifter MON08 + SCI 5 GND 4 C13 C14 1 C12 100nF 100nF MC68HC908JB16 10k SUPPLY-1 GND GND SUPPLY-2 GND PTA5 PTA6 PTA7 1B 1C 2B 2C 3B 3C 4B 4C 5B 5C 6B 6C 7B 7C 8B 8C GND COM 18 17 16 15 14 13 12 11 10 OUT_A OUT-1 OUT_B OUT-2 OUT_C OUT-3 OUT_D VCC OUT-4 10M Q1 12MHz C4 C6 22pF 22pF ULN2803A GND GND 27R R1 PTE4/D- PTE3/D+ 27R R2 RESET C10 4 100nF 3 OUT2 IN2 OUT1 IN1 +5V Reset Circuit C11 1 2 3 4 5 6 7 8 9 PTA4 R3 4 3 2 1 DRV 100nF 4x1A Load Driver GND USB Interface SUPPLY 12MHz Oscilator OSC2 4 PTA3 10k R11 27 26 25 24 21 20 19 18 12 9 11 10 C1+ C1C2+ C2- VCC PTA1 10k R10 PTA0 PTA1 PTA2 PTA3 PTA4 PTA5 PTA6 PTA7 +10V IRQ +5V +5V PTA0 10k R9 + R8 OSC1 +5V TXD 3 2 1 100nF LED1 C3 +5V VO 560R R5 C5 VI GND C7 2 + 1 C9 +5V R4 100nF VCC PTD2 IC1 7805T GND 2 1 F09 2,54 2,54 F09 1 JP2 4C 6C 1DEL 2DEL 4R 3DEL 5R JP3 6R JP1 11R C 1 D C9 1R B 4 2 8C A 3 7C 2 2R trepiL.W 7002 7R VRD 4DEL IC1 SUPPLY OUT 1 31C 1C 2 8R 9R 21R 01R 3R 2C 1D DB9F-MON08 41C C12 01C 3 3C 9 5 2$U RETFIHS 5 DB9F-SCI 5C 6 1 9 5 Q1 6 1 11C USB VCC VI VO 3 GND C3 2 + C1 +5V US-5V L7805 1 100uF 100nF C2 2 1 100uF 3 ON/OFF 4 US-3V3 VIN VIN VOUT VOUT SHDN\ PWRGD GND CDELAY +3V3 1 2 7 8 5 100k R1 6 MCP1726 C4 1nF GND 22-23-2021 VCC X2-3 X2-2 X2-1 22-23-2031 GND GND +3V3 X1-2 X1-1 +5V + + 6 GND C5 10uF 7 ON/OFF 22-23-2021 100nF 10uF C5 X1 C1US-3V3 C3 5087L V5-SU 100uF 100k MCP1726 1nF R1 C4 100uF 22-23-2031 C2 X2