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