Professional Documents
Culture Documents
Mobile Robot OpenCV
Mobile Robot OpenCV
Nguyn Xun c
H NI-2010
I HC QUC GIA H NI
TRNG I HC CNG NGH
Nguyn Xun c
H NI 2010
LI CM N
Sinh vin
Nguyn xun c
TM TT NI DUNG N
MC LC
M U .......................................................................................................................... 1
CHNG 1. GII THIU CHUNG ................................................................................ 2
1.1. Gii thiu chung v r bt...................................................................................... 2
1.2. Gii thiu r bt bm i tng ............................................................................. 3
1.3. Mc tiu ca n ................................................................................................. 6
1.4. Gii hn ca n ................................................................................................. 6
CHNG 2. TNG QUAN V TH VIN OPENCV V MT S LINH KIN S
DNG TRONG KHI PHN CNG.............................................................................. 7
2.1. Th no l th gic my? ........................................................................................ 7
2.2. Th vin OpenCV.................................................................................................. 7
2.2.1. OpenCV l g? ................................................................................................ 7
2.2.2. V sao la chn OpenCV? .............................................................................. 8
2.2.3. Cu trc v ni dung OpenCV nh th no? ................................................... 9
2.2.4. Cc hm I/O trong OpenCV.......................................................................... 10
2.2.5. Cc hm thc hin x l nh......................................................................... 12
2.2.6. Cc hm Histograms and Matching .............................................................. 13
2.2.7. Hm Contours............................................................................................... 13
2.2.8. C s ton hc ca thut ton CamShift ....................................................... 14
2.3. C bn v PIC16F877A ....................................................................................... 15
2.3.1. PIC l g?...................................................................................................... 15
2.3.2. c im ni bt ca PIC16F877A ............................................................... 15
2.3.3. S cc chn ca PIC16F877A .................................................................. 16
2.4. Giao tip RS232................................................................................................... 18
2.5. Gii thiu v chp mch cu L298N ..................................................................... 20
CHNG 3. XY DNG PHN MM IU KHIN ................................................ 22
3.1. Th gic my iu khin r bt di ng bm i tng ........................................ 22
3.2. Thut ton tnh hng v kch c ca i tng cn theo di............................... 23
3.2.1. Thut ton chung .......................................................................................... 23
3.2.2. Nhn dng v bm mc tiu di ng ............................................................. 24
3.2.3. Chuyn i khng gian mu t RGB n HSV ............................................. 25
3.2.4. Histogram ..................................................................................................... 26
3.2.5. Lc nhiu Filter ............................................................................................ 27
3.2.6. Thut ton CamShift ..................................................................................... 28
3.2.7. Thit k hon chnh phn mm iu khin .................................................... 30
CHNG 4. XY DNG MCH PHN CNG ......................................................... 34
4.1. S mch dng trong n ............................................................................... 34
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
M U
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
1
CHNG 1
GII THIU CHUNG
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
2
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
3
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
4
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
5
1.3. Mc tiu ca n
Mc tiu nghin cu ca n c th chia thnh hai phn nh sau:
Th nht: Xy dng phn mm r bt di ng bm i tng s dng OpenCV.
Thut ton c la chn s dng trong n l thut ton CamShift.
Th hai: Xy dng khi phn cng kim nghim gii thut ca thut ton
xy dng s dng vi iu khin PIC16F877A.
Nh vy cng vic chnh ca n l:
Tm hiu th vin OpenCV.
Tm hiu v thut ton CamShift.
Lp trnh iu khin r bt di ng s dng thut ton CamShift.
Thit k mch phn cng v lp trnh iu khin ng c s dng
PIC16F877A.
Lp trnh truyn thng ni tip RS232.
1.4. Gii hn ca n
-
Mch phn cng v thut ton iu khin ng c ch thc hin vic iu khin
hng ca r bt, ngha l khng iu khin tc ca r bt.
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
6
CHNG 2
TNG QUAN V TH VIN OPENCV
V MT S LINH KIN S DNG TRONG KHI PHN CNG
2.1. Th no l th gic my
Th gic my l mt lnh vc a dng v ang rt pht trin. Khi nim th gic
my (Computer vision) c lin quan ti nhiu ngnh hc v hng nghin cu khc
nhau. T nhng nm 1970 khi m nng lc tnh ton ca my tnh ngy cng tr nn
mnh m hn, cc my tnh lc ny c th x l c nhng tp d liu ln nh cc
hnh nh, cc on phim th khi nim v k thut v th gic my ngy cng c
nhc n v nghin cu nhiu hn cho ti ngy nay. Hin ti, lnh vc ny c cc
chuyn gia nh gi l vn cn mi m v s c rt nhiu thay i trong thi gian ti.
Lnh vc nghin cu ca th gic my rt rng, v c im chung l cc bi ton
v th gic my tnh u khng c mt bi chung v cch gii duy nht. Mi gii
php gii quyt vn u c mt kt qu nht nh cho nhng trng hp c th. Ta
c th thy s tng quan gia th gic my vi cc lnh khc.
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
7
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
8
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
9
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
10
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
11
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
12
cng c s dng rng ri trong vic loi b nhiu, c lp nhng thnh phn ring r,
v lin kt cc thnh phn vi nhau.
Theshold (ngng).
Chng ta thng lm rt nhiu bc x l nh khc nhau v a ra nhng quyt
nh cui cng v im nh trn mt bc nh hay ni cch khc l loi b gi tr pha
trn hoc di mt ngng no gi li nhng im nh nm trong khong gi tr
mong mun lc ta dng hm threshold.
2.2.6. Cc hm Histograms and Matching
Histogram.
Trong vic phn tch hnh nh thng tin v i tng v video, chng ta thng
mun biu din chng ging nh l mt histogram. Histogram c th s dng biu
din rt nhiu dng khc nhau nh phn b mu ca i tng, dc mu cnh ca
mt i tng, hay xc sut phn b v tr ca i tng.
Tm histogram c s dng rt nhiu trong cc chng trnh ng dng th gic
my tnh. Histogram c s dng d tm s thay i gia cc cnh trong video
bng cch nh du khi cnh v mu sc thay i t khung ny n khung khc.
Chng s dng nhn dng nhng im quan tm trn mt bc nh bng cch gn
mi im nh mt tag cha nhng Histogram ca nhng c im gn nht.
Histogram ca cnh, mu, gc v rt nhiu c im khc. Mt chui cc mu sc,
cnh c th dng xc nhn d c hay khng mt video c copy trn web.
Ghp mu template matching.
Hm ghp cvMatchTemplate() khng da trn histogram, hn na, hm ny
ghp mt bc nh thc n mt bc nh u vo bng cch Sliding ng dn qua
bc nh u vo ny s dng thao tc ghp m t trong phn ny.
2.2.7. Hm Contours
Mc d thut ton nh d tm cnh candy c th s dng tm ra cnh pixel
phn bc nh thnh cc phn khc nhau. Bc tip theo l xy dng cc cnh ny
thnh contours.
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
13
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
14
2.3. C bn v PIC16F877A
2.3.1. PIC l g ?
PIC l vit tt ca Programable Intelligent Computer, tm dch l My tnh
thng minh kh trnh do hng Microchip Technology t tn cho vi iu khin u
tin ca h v pht trin thnh dng h vi iu khin PIC sau ny.
2.3.2. c im ni bt ca PIC16F877A
S dng cng ngh tch hp RISC CPU.
Ngi s dng c th lp trnh vi 35 cu lnh c bn.
Tt c cu lnh thc hin trong mt chu k lnh, ngoi tr mt s cu lnh
r nhnh thc hin trong 2 chu k lnh.
Tc hot ng xung ng h l DC-20MHZ.
B nh hot ng l flash 8kx14 words.
B nh RAM 368x8 bytes.
B nh EFPROM 256x8 bytes.
- Kh nng ca b vi x l ny.
Kh nng ngt ln n 14 ngt trong v ngt ngoi.
Ngn nh Stack c phn chia lm 8 mc.
Truy cp b nh bng a ch trc tip hoc gin tip.
Ngun khi ng (POR).
B to xung (PWRT) v b to dao ng (OST).
B m thi gian (WDT) vi ngun dao ng trn chp (ngun dao ng
RC) hot ng ng tin cy.
C m chng trnh bo v.
Phng thc ct gi SLEEP.
C bng la chn dao ng.
Cng ngh CMOS FLASH/EFPRO ngun mc thp tc cao.
Thit k hon ton tnh.
Mch chng trnh ni tip c 2 chn.
Mch x l c ghi ti b nh chng trnh.
Di in th hot ng 2.0 n 5.5V.
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
15
Hnh 7: PIC16F877A
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
16
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
17
c im:
Chn 13, 14 l cc chn kt ni vi thch anh to dao ng cho chip (N
c v nh l qu tim ca chp). Ta mc thm vo 2 t in c in dung
= 33pF tng n nh cho dao ng thch anh.
PORTB v PORTB lc ny ng vai tr l ng xut nn cc thanh ghi
TRISB trong chp phi c t gi tr logic 1 (Nu ta t ng B l ng
nhp th ta phi t gi tr logic 0).
Cc thng s cn thit khi lm vic vi PIC ta dng bng datasheet ca h
PIC16F877A.
VDD: L in p cp ngun cho vi iu khin, ngun in cp l 5V.
GND: L chn ni mass khi s dng cn thit k mt mch n p bo v
cho vi iu khin , thng s dng IC n p 7805.
PORTA: C 6 pin t chn 2 n chn 7.
PORTB: C 8 chn t 34 n 40, ngoi chc nng lm cng xut nhp cn
c thm mt s chc nng ph khc.
PORTC, PORTE: Tng t nh PORTB.
Chn Reset (MCLR): Ng vo chn 1 dng thit lp iu kin u cho
vi iu khin.
OSC1, OSC2: Hai chn ny c s dng nhn ngun xung clock t bn
ngoi c th l t thch anh dao ng.
Cc chn RC3, RC4 dng kt I2C.
Cc chn RC6, RC7 l chn kt ni RS232.
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
18
Chn 4: Data Terminal Ready (DTR): u cui d liu sn sng kch hot bi
b phn khi mun truyn d liu.
Chn 6: Data Set Ready (DSR): D liu sn sng, c kch hot bi b nhn
khi n mun truyn d liu.
Chn 9: Ring Indicate (RI): Bo chung cho bit l b nhn ang nhn tn hiu
chung.
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
19
MW. 15
Tn
1; 15
Sensor A;
Sensor B
iu khin dng ti
2; 3
Out 1;
Out 2
VS
5; 7
Input 1;
Input 2
6; 11
Enable A;
Enable B
GND
Chn mass
VSS
10; 12
Input 3;
Input 4
Cc chn logic ng vo ca B
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
20
13; 14
Output 3;
Output 4
S chn
Input 1
Input 2
Dng li
Quay thun
Quay ngc
Dng li
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
21
CHNG 3
XY DNG PHN MM IU KHIN
S tng qut ca r bt di ng
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
22
bng n led pht sng mu , mu vng, mu xanh v..v. Nh vy, lc tin hnh theo
di s gim c rt nhiu v vic x l nhiu do nn v cc i tng khng mong
mun gy ra, gim ng k s nhm ln i tng theo di. Chng trnh x l nh s
dng thut ton CamShift trong OpenCV tin hnh theo di cn c vo mu sc i
tng. Khong cch gia r bt v i tng chng ta t l c nh, da vo tm ca
i tng tm c qua thut ton CamShift chng ta bit c v tr ca i tng
tham chiu trn mt phng nh. Cc thuc tnh nhn c s truyn qua cng giao tip
RS232 xung vi iu khin PIC16f877A iu khin hng ng c mt chiu (DC)
thng qua mch cu iu khin ng c L298N.
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
23
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
24
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
25
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
26
Quan st hai Histogram ca i tng trong hnh trn cho ta thy thuc tnh mu
sc ca hai i tng m chng ta cn theo di. Mi thanh mu ch r c bao nhiu
pixel c gi tr hue. Hue l mt trong ba thuc tnh m t mu ca pixel trong khng
gian mu HSV (Hue, Saturation, Value).
3.2.5. Lc nhiu Filter
Lc th c s dng loi b nhiu, c nhiu nguyn nhn pht sinh nhiu
trong qu trnh x l nh. Ngoi ra lc nhiu cn quan trng trong vic chng ta gim
phn gii ca bc nh. C rt nhiu cch chng ta loi b nhiu, trong n ny,
do i tng theo di l vt bt k nn ti t cc loi nhiu thng thng qua s
tu chnh tu thuc vo i tng nhn c.
Kt qu lc nhiu s dng trong n nh sau.
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
27
1) Histogram.
u tin mt Histogram s c to ra, Histogram ny cha cc thuc tnh lin quan
n mu sc nh trnh by phn trn. Tip theo, tm ca v kch c ca mc tiu
c tnh ton theo di mc tiu khi hnh dng v kch c ca n thay i.
2) Tnh ton xc sut phn b ca mc tiu cn c vo Histogram nhn c
Histogram c to ra duy nht mt ln, lc bt u theo di. Sau n c s dng
gn cho xc sut i tng gi tr mi im nh trong khung video tip theo.
3) Dch chuyn n v tr mi vi mi khung hnh va nhn c t video,
CamShift s dch chuyn n v tr m n c lng trn i tng n s m tp
trung nhiu im sng nht trong bc nh xc sut. N tm v tr mi bt u t v tr
trc v tnh ton gi tr trng tm ca xc sut phn b bn trong mt hnh ch
nht. Sau n dch chuyn v tr ca hnh ch nht v trng tm va tm c.
OpenCV s dng hm cvCamShift() thc hin chuyn dch ny. Vic tnh ton
trng tm trong Camshift th da vo thut ton Mean Shift nh cp trc .
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
28
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
29
MO CONG COM: Khi c chc nng thc hin vic giao tip RS232 gia
PIC16F877A v laptop.
Smin: gi tr bo ha ca bc nh.
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
30
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
31
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
32
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
33
CHNG 4
XY DNG MCH PHN CNG
Khi ngun.
Khi iu khin ng c.
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
34
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
35
8
7
6
5
4
3
2
1
J3
2
1
C2
CAP NP
CON2
CON8
U1
D1
R3
Resistor
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
DIODE
D2
DIODE
D3
DIODE
D4
DIODE
R1
RESISTOR
J1
IN2_motor2
EN_motor2
IN1_motor2
D9
+5V
V-
VIN2_Motor1
EN_motor1
IN1_Motor1
1
2
LED
V+
V+
CON2
D10
DIODE
V+
R2
D5
DIODE
D6
DIODE
D7
DIODE
D8
DIODE
Resistor
L298
J4
2
1
C3
CAP NP
CON2
Sau khi hon thin cc khi iu khin ta xy dng c mch iu khin phn
cng hon thin nh sau.
4.1.5. Phn cng hon chnh
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
36
ng c 1
Tin
Li
Dng li
ng c 2
Tin
Li
Dng li
R bt
Tin
Tin
i thng
Li
Li
i li
Dng
Dng
Tin
Li
R phi
Li
Tin
R tri
Yahoo:thoi_chao_em_12325
Dng li
Email:xuanducdhcn@gmail.com
37
CHNG 5
KT QU THC HIN
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
38
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
39
150
100
50
1
133
265
397
529
661
793
925
1057
1189
1321
1453
1585
1717
1849
1981
2113
2245
2377
2509
2641
2773
2905
3037
3169
3301
3433
350
300
250
200
150
100
50
1
121
241
361
481
601
721
841
961
1081
1201
1321
1441
1561
1681
1801
1921
2041
2161
2281
2401
2521
2641
2761
2881
3001
3121
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
40
100
50
1
128
255
382
509
636
763
890
1017
1144
1271
1398
1525
1652
1779
1906
2033
2160
2287
2414
2541
2668
2795
2922
3049
3176
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
41
350
300
250
200
X
150
100
50
1
108
215
322
429
536
643
750
857
964
1071
1178
1285
1392
1499
1606
1713
1820
1927
2034
2141
2248
2355
2462
2569
2676
2783
150
100
50
1
182
363
544
725
906
1087
1268
1449
1630
1811
1992
2173
2354
2535
2716
2897
3078
3259
3440
3621
3802
3983
4164
4345
4526
4707
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
42
350
300
250
200
150
100
50
1
182
363
544
725
906
1087
1268
1449
1630
1811
1992
2173
2354
2535
2716
2897
3078
3259
3440
3621
3802
3983
4164
4345
4526
150
100
50
1
190
379
568
757
946
1135
1324
1513
1702
1891
2080
2269
2458
2647
2836
3025
3214
3403
3592
3781
3970
4159
4348
4537
4726
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
43
350
300
250
200
X
150
100
50
1
136
271
406
541
676
811
946
1081
1216
1351
1486
1621
1756
1891
2026
2161
2296
2431
2566
2701
2836
2971
3106
3241
3376
X
Y
100
50
1
109
217
325
433
541
649
757
865
973
1081
1189
1297
1405
1513
1621
1729
1837
1945
2053
2161
2269
2377
2485
2593
2701
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
44
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
45
KT LUN
nh gi kt qu t c
Bo co ny m t h thng r bt di ng bm i tng s dng th vin x l
nh OpenCV ca Intel. Thut ton s dng nhn hnh nh t webcam tin hnh kh
nhiu, histogram, s dng thut ton CamShift, tnh ton ta tm, kch c, gc,
thit k khi giao tip RS232 s dng Microsoft Communication Version 6.0. Thit k
mch iu khin ng c s dng PIC16F877A. Di nhng iu kin nh sng nht
nh i tng c th c tm ra nhanh chng chnh xc m t b nh hng ca
nhiu.
Hon chnh c c phn cng v phn mm ca r bt, tin hnh chy th trn
nhiu dng mi trng khc nhau, ban m, ban ngy, nh sng mnh, nh sng yu,
ng thng, ng vngkt qu, r bt lun bm theo gi i tng nm trn
mt phn ca mt phng nh m ta chn.
Tuy nhin chng trnh cn hn ch trong thit k phn cng (khung xe), phn
ny cn yu nn gy kh khn trong vic di chuyn v ng c ca r bt di chuyn
tc chm do khng p ng c tc ca webcam ca r bt. X l nh ph
thuc rt nhiu vo cht lng hnh nh v tc chp hnh ca webcam. Tc ca
r bt l c nh do cha xy dng thut ton iu khin tc r bt ph hp tc
dch chuyn ca i tng ang theo di.
Chng trnh c th c ci thin bng cch thm mt s hm lin quan n x
l nh nh trnh by trn. Tc theo di i tng ca thut ton CamShift l
tng i thp v d b mt i tng mt s iu kin nht nh nh i tng qu
nh hoc di chuyn qu nhanh. Nhc im ca thut ton CamShift c th c ci
thin bng thut ton lc Kalman. iu ny cha c nghin cu do thi gian c hn.
Chng trnh iu khin mi c th nghim trn mt s mi trng nht nh
kt qu t c l tng i tt. Tuy nhin trong x l nh vn nhiu trong mi
trng rt quan trng do cn c thm nhiu th nghim na mi c th nh gi
c tin cy ca kt qu t c.
Webcam ang s dng c kh nng lc nhiu tng i tt. Tuy nhin thi gian
tnh ton ca r bt s tng ln nu tng phn ca webcam tng ln. Trong ng
dng ny em s dng webcam c phn gii c th iu chnh c c th nh sau
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
46
(160x120, 176x144, 320x240, 640x480). Kt qu thc hin cho thy vic x l nhiu
kh khn hn vi cc webcam c phn gii tng dn do nhiu nh khng cn thit
tng ln, gn nh khng c thay i nhiu. Tuy nhin vi webcam c phn gii cao
hn th cha c kim nghim.
Cc hm lc nhiu c th loi b nhiu gn nh hon ton, nhng n phi qut
bc nh qu nhiu ln, do n s lm tng thi gian tnh ton ca chng trnh, cc
hm ny cn c ci thin v ti u hn.
R bt c xy dng di chuyn trong trng hp webcam t v tr cao
hn so vi i tng.
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
47
PH LC A
CHNG TRNH X L NH
#include "stdafx.h"
#include "afx.h"
#include "cv.h"
#include "highgui.h"
#include "stdio.h"
#include "cxcore.h"
#include <windows.h>
#include <tchar.h>
#include <stdarg.h>
#include <iostream>
#include <fstream>
IplImage *image = 0, *hsv = 0, *hue = 0, *mask = 0, *backproject = 0, *histimg
= 0, *gray;
CvHistogram *hist = 0;
int backproject_mode = 0;
int select_object = 0;
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
48
int track_object = 0;
int show_hist = 1;
CvPoint origin;
CvRect selection;
CvRect track_window;
CvBox2D track_box;
CvConnectedComp track_comp;
int hdims = 16;
float hranges_arr[] = {0,180};
float* hranges = hranges_arr;
int vmin = 10, vmax = 256, smin = 30, count;
CvPoint boxcenter,h;
int d2, d3,count1=0, dem=0;
int high_switch_value = 256;
int highInt = 0;
int low_switch_value = 0;
int lowInt = 0;
int d0=0;
CvPoint seed_point = cvPoint(305,195);
CvScalar color = CV_RGB(250,255,255);
int g_switch_value = 0;
int filterInt = 0;
int lastfilterInt = -1;
//int position;
void switch_callback( int position ){
if( position == 0 ){
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
49
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
50
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
51
{
selection.x = MIN(x,origin.x);
selection.y = MIN(y,origin.y);
selection.width = selection.x + CV_IABS(x - origin.x);
selection.height = selection.y + CV_IABS(y - origin.y);
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
52
}
// Chuyen doi tu khoang gian mau HSV den RGB
CvScalar hsv2rgb( float hue )
{
int rgb[3], p, sector;
static const int sector_data[][3]=
{{0,2,1}, {1,2,0}, {1,0,2}, {2,0,1}, {2,1,0}, {0,1,2}};
hue *= 0.033333333333333333333333333333333f;
sector = cvFloor(hue);
p = cvRound(255*(hue - sector));
p ^= sector & 1 ? 255 : 0;
rgb[sector_data[sector][0]] = 255;
rgb[sector_data[sector][1]] = 0;
rgb[sector_data[sector][2]] = p;
return cvScalar(rgb[2], rgb[1], rgb[0],0);
}
void CTUBODlg::OnBnClickedButtonAuto()
{
FILE * xFile;
FILE * yFile;
FILE * demFile;
fopen_s (&demFile,"dem.txt","w");
fopen_s (&xFile,"X.txt","w");
fopen_s (&yFile,"Y.txt","w");
UpdateData(true);
Setting();
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
53
CvCapture* capture = 0;
capture = cvCaptureFromCAM(0);
if( !capture )
{
fprintf(stderr,"Could not initialize capturing...\n");
//
return -1;
}
printf( "Hot keys: \n"
"\tESC - quit the program\n"
"\tc - stop the tracking\n"
"\tb - switch to/from backprojection view\n"
"\th - show/hide object histogram\n"
"To initialize tracking, select the object with mouse\n" );
// Tao track_bar.
cvNamedWindow( "Histogram", 1 );
cvNamedWindow( "MobileRobot", 1 );
cvSetMouseCallback( "MobileRobot", on_mouse, 0 );
cvCreateTrackbar( "Vmin", "MobileRobot", &vmin, 256, 0 );
cvCreateTrackbar( "Vmax", "MobileRobot", &vmax, 256, 0 );
cvCreateTrackbar( "Smin", "MobileRobot", &smin, 256, 0 );
cvCreateTrackbar("Dilate","MobileRobot",&dilate_pos,10,Dilation);
cvCreateTrackbar("Erode","MobileRobot",&erode_pos,10,Erosion);
cvCreateTrackbar("Filter","MobileRobot",
switch_callback );
&g_switch_value,
5,
//start:
for(;;)
{
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
54
IplImage* frame = 0;
int i, bin_w, c;
frame = cvQueryFrame( capture );
if( !frame )
break;
if( !image )
{
/* allocate all the buffers */
image = cvCreateImage( cvGetSize(frame), 8, 3 );
image->origin = frame->origin;
cvFloodFill( image,
cvScalarAll(5.0), NULL, 4, NULL );
seed_point,
color,
cvScalarAll(5.0),
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
55
{
int _vmin = vmin, _vmax = vmax;
cvInRangeS( hsv, cvScalar(0,smin,MIN(_vmin,_vmax),0),
cvScalar(180,256,MAX(_vmin,_vmax),0), mask );
cvSplit( hsv, hue, 0, 0, 0 );
if( track_object < 0 )
{
float max_val = 0.f;
cvSetImageROI( hue, selection );
cvSetImageROI( mask, selection );
cvCalcHist( &hue, hist, 0, mask );
cvNormalizeHist(hist,20*255);
cvGetMinMaxHistValue( hist, 0, &max_val, 0, 0 );
cvConvertScale( hist->bins, hist->bins, max_val ? 255. / max_val : 0.,
0 );
cvResetImageROI( hue );
cvResetImageROI( mask );
track_window = selection;
track_object = 1;
cvZero( histimg );
bin_w = histimg->width / hdims;
for( i = 0; i < hdims; i++ )
{
int val = cvRound( cvGetReal1D(hist->bins,i)*histimg->height/255
);
CvScalar color = hsv2rgb(i*180.f/hdims);
cvRectangle( histimg, cvPoint(i*bin_w,histimg->height),
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
56
cvPoint((i+1)*bin_w,histimg->height - val),
color, -1, 8, 0 );
}
}
cvCalcBackProject( &hue, backproject, hist );
cvFloodFill( backproject, seed_point, color, cvScalarAll(5.0),
cvScalarAll(5.0), NULL, 4, NULL );
cvNormalizeHist(hist,20*255);
cvEqualizeHist( backproject, backproject );
switch_callback(g_switch_value);
Erosion(erode_pos);
Dilation(dilate_pos);
//Closing(close_pos);
cvAnd( backproject, mask, backproject, 0 );
cvCamShift( backproject, track_window,
cvTermCriteria( CV_TERMCRIT_EPS | CV_TERMCRIT_ITER, 10, 1
),
&track_comp, &track_box );
track_window = track_comp.rect;
if( backproject_mode )
cvCvtColor( backproject, image, CV_GRAY2BGR );
if(!image->origin)
track_box.angle = -track_box.angle;
cvCircle( image, boxcenter, 50, CV_RGB(255,0,0), 1,
8,0);\
track_box.angle = -track_box.angle;
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
57
CvPoint2D32f dcenter=track_box.center;
boxcenter=cvPointFrom32f(dcenter);
m_IntX=boxcenter.x;
m_IntY=boxcenter.y;
fprintf (xFile, "
%4d\n",m_IntX);
%4d\n",m_IntY);
float h=track_box.size.height;
float w=track_box.size.width;
float s=h*w;
m_floatkichthuoc=s;
m_floatGoc=track_box.angle;
cvCircle( image, boxcenter, 3, CV_RGB(0,255,0), -1, 8,0);
}
int d=(boxcenter.x);
int d1=(boxcenter.y);
count1 +=1;
if(count1==5){
if ((d!=d2)||(d1!=d3)){
d2=d;
d3=d1;
if ((115<=d)&& (d<=185)&&(150<=d1)&& (d1<=200))
{
data_send_RS232= "s";
m_mscomm1.put_Output(COleVariant(data_send_RS232));//strOutput));
}
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
58
else if(d1>200)
{
data_send_RS232= "b";
m_mscomm1.put_Output(COleVariant(data_send_RS232));//strOutput));
}
else if((d1>0)&&(d1<150)&&(115<=d)&&(d<=185))
{
data_send_RS232= "f";
m_mscomm1.put_Output(COleVariant(data_send_RS232));//strOutput));
}
else if((d>185)&&(d1>0)&&(d1<=200))
{
data_send_RS232= "r";
m_mscomm1.put_Output(COleVariant(data_send_RS232));//strOutput));
}
else if((d>0)&&(d<115)&&(d1>0)&&(d1<=200))
{
data_send_RS232= "l";
m_mscomm1.put_Output(COleVariant(data_send_RS232));//strOutput));
}
}
else
if
(((d==d2)&&(d1==d3)&&(d!=0)&&(d1!=0))&&((d1<100)||(d1>200)||(d<115)||(d>18
5))){
dem= dem+1;
data_send_RS232= "s";
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
59
m_mscomm1.put_Output(COleVariant(data_send_RS232));//strOutput));
}
count1=0;
}
if( select_object && selection.width > 0 && selection.height > 0 )
{
cvSetImageROI( image,selection );
cvXorS( image, cvScalarAll(255), image, 0 );
cvResetImageROI( image );
}
cvSaveImage("image.jpg",image);
cvSaveImage("histimg.jpg",histimg);
cvSaveImage("backproject.jpg",backproject);
cvShowImage( "MobileRobot", image );
cvShowImage( "Histogram", histimg );
cvShowImage( "backproject",backproject);
c = cvWaitKey(10);
if( (char) c == 27 )
break;
switch( (char) c )
{
case 'b':
backproject_mode ^= 1;
break;
case 'c':
track_object = 0;
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
60
cvZero( histimg );
break;
case 'h':
show_hist ^= 1;
if( !show_hist )
cvDestroyWindow( "Histogram" );
else
cvNamedWindow( "Histogram", 1 );
break;
default:
;
}
}
cvDestroyWindow("backproject");
cvDestroyWindow("Histogram");
cvDestroyWindow("MobileRobot");
cvReleaseImage(&image);
cvReleaseImage(&histimg);
cvReleaseCapture( &capture );
cvReleaseImage( &backproject);
fprintf(demFile," %4d\n",dem);
fclose (xFile);
fclose (yFile);
fclose (demFile)
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
61
PH LC B
CHNG TRNH IU KHIN ROBOT
//---------------------------------------------------------------------------------------------------// Khi iu khin Robot s dng PIC16F877A v L298N
// Nguyn Xun c K51H-CDT
// Ngy 8.12.2010
// Ngn ng: CCS C complier
//----------------------------------------------------------------------------------------------------#include <16F877A.h>
#include <defs_16f877a.h>
#device *=16 adc=10
#fuses nowdt,hs,noput,noprotect,nodebug,nobrownout,nolvp, nocpd,nowrt
#use delay(clock=20000000,RESTART_WDT)
20 megahertz
char value;
void forward(){
rb4=1;
rb5=0;
rb6=0;
rb7=1;
}
void backward(){
rb4=0;
rb5=1;
rb6=1;
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
62
rb7=0;
}
void right(){
rb4=1;
rb5=0;
rb6=1;
rb7=0;
}
void left(){
rb4=0;
rb5=1;
rb6=0;
rb7=1;
}
void full_stop(){
rb4=0;
rb5=0;
rb6=0;
rb7=0;
}
void M2_forward(){
rb4=1;
rb5=0;
}
void M2_stop(){
rb4=0;
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
63
rb5=0;
}
void M2_backward(){
rb4=0;
rb5=1;
}
void M1_forward(){
rb6=0;
rb7=1;
}
void M1_stop(){
rb6=0;
rb7=0;
}
void M1_backward(){
rb6=1;
rb7=0;
}
#INT_RDA
void RDA_interrupt(){
value = getc();
delay_ms(10);
putc(value);
switch(value)
{
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
64
case 'l':
left();
break;
case 'r':
right();
break;
break;
case '1':
M1_forward();
break;
case '2':
M1_backward();
break;
case '3':
M1_stop();
break;
case '4':
M2_forward();
break;
case '5':
M2_backward();
break;
case '6':
M2_stop();
break;
default: full_stop();break;
}
}
void main(){
ENABLE_INTERRUPTS(INT_RDA);
enable_interrupts(global);
SET_TRIS_B(0X00);
RB3=1;
RB2=1;
RB0=1;
while(true)
{
}
}
//-----------------------------------------------------------------------------------------
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
65
PH LC C
CHNG TRNH TRUYN THNG RS232
//---------------------------------------------------------------------------------------------------// Khi truyn thng RS232 s dng cng c Microsoft Communication version 6.0
// Nguyn Xun c K51H-CDT
// Ngy: 8.12.2010
// Ngn ng : C++ 2008 (MFC Aplication).
//----------------------------------------------------------------------------------------------------void CTUBODlg::InitComboBox(void)
{
// ComboBox ComPort
m_cboComPort.ResetContent();
m_cboComPort.AddString(L"COM1");
m_cboComPort.AddString(L"COM2");
m_cboComPort.AddString(L"COM3");
m_cboComPort.AddString(L"COM4");
m_cboComPort.AddString(L"COM5");
m_cboComPort.AddString(L"COM6");
m_cboComPort.AddString(L"COM7");
m_cboComPort.AddString(L"COM8");
m_cboComPort.AddString(L"COM9");
m_cboComPort.SetCurSel(2);
// ComboBox BitRate
m_cboBitRate.ResetContent();
m_cboBitRate.InsertString(0,L"600");
m_cboBitRate.InsertString(1,L"1200");
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
66
m_cboBitRate.InsertString(2,L"2400");
m_cboBitRate.InsertString(3,L"4800");
m_cboBitRate.InsertString(4,L"9600");
m_cboBitRate.InsertString(5,L"14400");
m_cboBitRate.InsertString(6,L"19200");
m_cboBitRate.InsertString(7,L"28800");
m_cboBitRate.InsertString(8,L"38400");
m_cboBitRate.InsertString(9,L"56000");
m_cboBitRate.InsertString(10,L"57600");
m_cboBitRate.InsertString(11,L"115200");
m_cboBitRate.InsertString(12,L"128000");
m_cboBitRate.InsertString(13,L"256000");
m_cboBitRate.SetCurSel(6);
// ComboBox Data Bits
m_cboDataBit.ResetContent();
m_cboDataBit.AddString(L"5");
m_cboDataBit.AddString(L"6");
m_cboDataBit.AddString(L"7");
m_cboDataBit.AddString(L"8");
m_cboDataBit.SetCurSel(3);
// ComboBox Stop Bit
m_cboStopBit.ResetContent();
m_cboStopBit.AddString(L"1");
m_cboStopBit.AddString(L"1.5");
m_cboStopBit.AddString(L"2");
m_cboStopBit.SetCurSel(0);
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
67
m_mscomm1.put_Handshaking(m_cboHandshaking.GetCurSel());
// Thiet lap tan so bit du lieu bit stop
CString
strBitRate=getCurStrInCombobox(m_cboBitRate);
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
68
CString
strParity=getCurStrInCombobox(m_cboParityBit);
CString
strDataBit=getCurStrInCombobox(m_cboDataBit);
CString
strStopBit=getCurStrInCombobox(m_cboStopBit);
CString
strSetting;
strSetting.Format(_T("%s,%c,%s,%s"),strBitRate,strParity[1],strDataBit,strSto
pBit);
m_mscomm1.put_Settings(strSetting);
// Thiet lap khac
m_mscomm1.put_RThreshold(1);
m_mscomm1.put_InputLen(1);
m_mscomm1.put_InBufferSize(1024);
m_mscomm1.put_InputMode(0); // 0- text mode, 1- binary mode
m_mscomm1.put_OutBufferSize(1024);
m_mscomm1.put_PortOpen(true); // mo cong
}
void CTUBODlg::OnBnClickedButtonSend()
{
UpdateData(TRUE);
Setting();
m_mscomm1.put_Output(COleVariant(m_strTransfer));//strOutput));
UpdateData(false);
}
void CTUBODlg::OnBnClickedButtonClear()
{
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
69
UpdateData();
m_strReceive="";
UpdateData(false);
}
void CTUBODlg::OnCommMscomm1()
{
count+=1;
VARIANT data;
switch (m_mscomm1.get_CommEvent()){
case 1: // comEvSend
break;
case 2: // comEvReceive
data =m_mscomm1.get_Input();
m_strReceive += (CString)data.bstrVal;
if (count==500){
m_strReceive="";
count=0;
}
//
UpdateData(FALSE);
break;
case 3:// comEvCTS
break;
case 4:// ComEvDSR
break;
case 5: // comEvCD
break;
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
70
case 6: // comEvRing
break;
case 7: // comEvEOF
break;
default:
break;
};
UpdateData(false);
}
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
71
[1]
[2]
[3]
[4] http://blog.gmane.org/gmane.comp.lib.opencv/month=20090401
[5] http://extremeelectronics.co.in/avr-tutorials/rs232-communication-the-levelconversion/
[6] http://homepages.inf.ed.ac.uk/rbf/CVonline/
[7] http://www.instructables.com/id/Control-your-motors-with-L293D
[8] http://nashruddin.com/opencv-examples-for-operation-on-images.html
[9] http://www.pages.drexel.edu/~nk752/distanceTut.html
[10] http://www.sourcecodeonline.com/list?q=object_tracking_using_opencv
Yahoo:thoi_chao_em_12325
Email:xuanducdhcn@gmail.com
72