MỤC LỤC PHẦN Trang Phần 1.Lý thuyết định vị robot 6 Phần 2.Thiết kế mạch điều khiển 9 Phần 3. Thiết kế phần cơ Robot 18 Phần 4. Điều khiển Robot 20 Phần 5. Xử lý ảnh 25 Phần 6.Tổng quan về OPENCV 30 Phần 7. Truyền dữ liệu bằng module RF 40 Phần 8. Chương trình điều khiển 46ĐỒ ÁN 2 Robot di động bám theo vật GVHD: Thạc sĩ Phạm Thành Danh 6 SVTH: Nhật Duy Đại Dương Phần 1: LÝ THUYẾT VỀ ĐỊNH VỊ ROBOT 1.1. Định vị cho robot: Có 2 cách: định vị tương đối và tuyệt đối 1.1.1. Định vị tương đối Là một phương pháp phổ biến dùng để xác định vị trí tương đối của robot di động trong mặt phẳng sau một quá trình duy chuyển nào đó so với vị trí ban đầu. Việc giải bài toán định vị tương đối thực ra là giải bài toán động học cho robot di động, nhằm xác định vị trí và hướng tức thời của robot sau một quá trình chuyển động trong gốc tọa độ với bề mặt sàn của robot ở thời điểm ban đầu. Việc khó khăn là robot liên kết với sàn thi đấu bằng bánh xe và lớp cao su, vì vậy việc chuyển động là nhờ vào lực ma sát, do đó việc chính xác không cao lắm vì phục thuộc tương đối vào hai bánh xe, sự trượt của bánh.....Sai số hệ thống là do những cơ cấu chấp hành,những thiết kế không chính xác như: hai bánh xe không bằng nhau,không cân bằng… Phương pháp định vị tương đối chủ yếu dựa vào số vòng quay của motor, để xác định vị trí tương đối của robot sau một quá trình chuyển động. Phương pháp này thì đơn giản, nhưng có khuyết điểm lớn nhất là bán kính sai số lớn và là sai số tích lũy.
Trang 1Trong thời đại ngày nay, ngành công nghiệp đóng vai trò quan trọng trongnền kinh tế, khoa học… những ROBOT tự động, sẽ giúp cho con người rấtnhiều, chúng đã thay thế sức con người một cách hiệu quả nhất ROBOT được
sử dụng rộng rãi cuộc sống, nơi mà môi trường có tính độc hại , nguy hiểm cũngnhư các công việc yêu cầu có độ chính xác cao Do vậy ROBOT có tầm quantrọng rất lớn trong thời đại ngày nay
Là sinh viên chuyên ngành điện tử tự động, để bổ sung những kiến thức đãhọc cũng như nghiên cứu những vấn đề mới trong lĩnh vực điều khiển tự động
nên chúng em quyết định chọn đề tài “ROBOT DI DỘNG BÁM THEO VẬT”.
Mặc dù đã cố gắng hoàn thành đồ án đúng thời hạn nhưng trong quá trìnhthực hiện không tránh khỏi những thiếu sót Chúng em rất mong nhận được sựđóng góp ý kiến từ quý Thầy cô và các bạn
Trang 2Chúng em xin chân thành cảm ơn:
Thầy PHẠM THÀNH DANH đã tận tình hướng dẫn chúng em trong quá trình chuẩn bị cũng như thực hiện đề tài này.
Trang 3NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN:
Chữ ký giáo viên:
Trang 4NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN:
Chữ ký giáo viên:
Trang 5MỤC LỤC
Trang 6Việc khó khăn là robot liên kết với sàn thi đấu bằng bánh xe và lớpcao su, vì vậy việc chuyển động là nhờ vào lực ma sát, do đó việc chính xáckhông cao lắm vì phục thuộc tương đối vào hai bánh xe, sự trượtcủa bánh Sai số hệ thống là do những cơ cấu chấp hành,những thiết kếkhông chính xác như: hai bánh xe không bằng nhau,không cân bằng…
Phương pháp định vị tương đối chủ yếu dựa vào số vòng quay củamotor, để xác định vị trí tương đối của robot sau một quá trình chuyểnđộng Phương pháp này thì đơn giản, nhưng có khuyết điểm lớn nhất là bánkính sai số lớn và là sai số tích lũy
Sau đây là 1 ví dụ đơn giản:
Trang 7Hình 1.1: Mô hình robot đơn giản
Trong hình hai bánh xe được truyền động bằng hai motor giảm tốcriêng biệt và có hai encorder hồi tiếp xung cho mỗi motor Đặt vấn đề là bàitoán yêu cầu cho robot chạy một đoạn thẳng 10 cm thì có sai số không vàsai số là bao nhiêu Để giải quyết bài toán trên ta giả sử dùng 2 encoder chohai bánh xe với độ phân giải là 100 xung/vòng quay và encoder được gắntrên bánh xe có đường kính 5cm,
Gọi D là đường kính của bánh xe Encorder
S là chu vi của bánh xe encorder
P là độ phân giải của encoder
Trên đây chỉ là tính toán tuyệt đối và encorder xoay trong điều kiện
lý tưởng,nhưng thực tế thì thường có sai số vì:
Bánh xe không tròn
Trang 8 Đường kính bánh xe thực tế không bằng với bánh xe dùngtrong tính toán
Bánh xe lệch trục
Vị trí lắp bánh xe không thích hợp dẫn đến bánh xe có thểkhông tiếp xúc nền
Tần số lấy mẫu của encoder
ở đâu, toạ độ bao nhiêu Điểm khác so với định vị tương đối là:
Các phần thiết kế cơ khí không cần tuyệt đối chính xác
Luôn luôn đọc giá trị hiện tại
Điều khiển theo cơ sở logic
a Ưu điểm của phương pháp định vị tuyệt đối:
Định vị chính xác
Vị trí sai số nhỏ,không đáng kể
Cơ khí không cần thiết kế tuyệt đối chính xác
b Nhược điểm của phương pháp này:
Tốn kém kinh phí đầu tư
Mạch thiết kế phức tạp, để đáp ứng yêu cầu điều khiển
Cần cập nhật giá trị cảm biến liên tục
Phần 2: THIẾT KẾ PHẦN MẠCH ĐIỀU KHIỂN
2.1 Tìm hiểu encoder:
Trang 9Hình 2.1 Mô hình Encoder và encoder đang sử dụng E6B2
Trang 10Ngõ ra của encoder có thể được xem như kênh A và kênh B như hìnhdưới.
Hình2.2: Trạng thái ngõ ra kênh A và kênh B
Ngõ ra của kênh A là điện áp được khuếch đại bởi transisstor Q1 vàtương thích TTL với thời gian tăng và giảm bằng mạch kích SchmittrigerL1 Hoạt động tương tự ở kênh B qua Q2 và L2 Rõ ràng là mạch kíchSchmitt kênh A tạo ra xung clock để chốt và mạch kích Schmitt kênh B nốivới ngõ vào diode của chốt Với cấu hình này, trạng thái của ngõ ra Q củachốt sẽ cho biết chiều quay của đĩa mã hoá
Giả sử trạng thái logic của ngõ ra Q của SN7474 là mức cao Thế thìkênh B được ưu tiên dẫn trước kênh A Nói cách khác, khi chốt được kích
6
4 1
D
C L K Q
Trang 112.2 Mạch điều khiển động cơ:
Hình 2.3: Mạch điều khiển động cơ
Giản đồ trạng thái điện áp:
Trang 12Hình 2.4: Giản đồ trạng thái điện áp ngõ ra
Nếu cho động cơ chạy thì chân 1 Opto(PWM1) phải ở mức logic1,lúc này nội trở hai chân 3 và 4 của Opto sẽ thấp, nguồn 12v qua R5(doOpto) dẫn nên tại chân B của Q2 sẽ đạt mức logic thấp Q2 tắt Q3 dẫnbão hoà Q4 tắt Q5 dẫn Động cơ chạy
Ngược lại, khi Opto tắt Q2 dẫn bão hòa Q3 tắt Q4 dẫn(nếu
có điện áp rơi trên chân E của Q4) Q5 tắt Động cơ tắt
Khi muốn đảo chiều động cơ ta chỉ cần xuất mức logic 0 tại chânDKRL1, lúc này role 2 sẽ ON, nhờ vào những tiếp điểm của role ta sẽ đảochiều cấp nguồn của động cơ Động cơ chạy ngược chiều
2.3 Mạch Detect màu trên sân thi đấu:
Nguyên lý hoạt động: Dựa vào sự thay đổi nội trở của Photo Resistorkhi được chiếu sáng hay che tối, điều này làm thay đổi nội trở (dạng
Trang 138 7 6 5 4 3 2
Hình 2.6: Trạng thái xung
2.4 Mạch chọn kênh chương trình:
GVHD: Thạc sĩ Phạm Thành Danh 13 SVTH: Nhật Duy - Đại Dương
Trang 14U 2
9
1 0 8
Dùng vi mạch 4067 chúng ta có thể chọn được 16 chương trình từ 5chân của vi điều khiển
Bảng hoạt động như sau:
2.5 Mạch nạp chương trình vào vi điều khiển:
Trang 15Mạch trên dùng vi mạch Max232 dùng để chuyển từ chuẩn RS232sang mức logic 0 ;1.Nhờ vi điều khiển có chức năng nạp trực tiếp từ max
232 nên ta đưa trực tiếp hai chân TXD,RXD từ max232 vào vi điều khiển(Dùng phần mềm Flash Magic của Phillips để load chương trình vào,ra viđiều khiển)
2.6 Mạch tổng quát:
A Sơ đồ mạch Layout:
Sơ đồ mạch Capture:
Trang 163 2 1
A R 5 R
5 2
C 1 3 C
3 2 1
W A I T I N G
L E D
A R 1 3 R
R 1 0 8
A R 3 R
A Q 6
L E D
A R 1 2
R 2 0 R
U 1 8 B
4 0 1 0 6
4 3
A Q 2 6
P R O 1 0
E N C O D E R 2
R 1 9 R
3 2 1
A R 1 R
3 2 1
U 1 8 A
4 0 1 0 6
2 1
3 2 1
D 2 1
L E D
A 9
R 2 2 R
C 1 6 C
R 2 6 R
8
1 0
Phần 3: THIẾT KẾ PHẦN CƠ CHO ROBOT
Trang 173.1 Các hình chiếu của robot:
Trang 18Hình 3.c: Hình chiếu cạnh robot tự động
Trang 19Phần 4: ĐIỀU KHIỂN ROBOT
4.1 Vi xử lý và các ngõ vào ra:
Vi điều khiển P89V51RB2FN16KB chương trình,5 kênh điều rộng xung,hai thanh ghiDPTR,Watch dog timer,Brown out detect
16 CTHT tương ứng cho 16 chương trình hoặc 16 công tắchành trình
8 ngõ vào sensor dò đường
2 ngõ vào encoder, 2 ngõ vào ngắt ngoài
5 motor điều rộng xung
2 SW tổ hợp chọn chế độ hoạt động,1 nút chọn màu của độiđỏ/xanh
L3 sensor trái thứ 3 so với sensor trung tâm
L2 sensor trái thứ 2 so với sensor trung tâm
L1 sensor trái thứ 1so với sensor trung tâm
R1 sensor phải thứ 1 so với sensor trung tâm
R2 sensor phải thứ 2 so với sensor trung tâm
R3 sensor phải thứ 3 so với sensor trung tâm
Trang 20Đọc cảm biến theo nguyên tắc : đọc từ trong ra ngoài, tức là kiểm tragiá trị sensor từ CL,CR L1,R1 L2,R2 L3,R3 Vùng error
Vùng Error sẽ được thực thi khi và chỉ khi robot đang chạy dò đườngnhưng bất ngờ không có sensor nào tích cực đã chạy sai vạch tăng tốcbánh bên trái nếu trước đó rẽ phải hoặc tăng tốc bánh bên phải nếu trước
Trang 21B: Bảng tốc độ: ta có 4 hàm tốc độ ứng vời mỗi hàm có 16 tốc độ khác nhau
Trang 23độ sáng Mỗi điểm như vậy gọi là một điểm ảnh ( PEL : Picture Element ) haycòn gọi là Pixel Điểm ảnh Pixel là là một phần tử của ảnh số tại tọa độ (x,y) với
độ sáng hoặc màu nhất định Tập hợp những điểm ảnh tạo thành ma trận ảnh
3.1.1.2 Độ phân giải của ảnh:
Độ phân giải ảnh là mật độ điểm ảnh được ấn định trên một ảnh số đượchiển thị Khoảng cách các điểm ảnh được chọn sao cho mắt người thấy được sựliên tục của ảnh và tạo nên mật độ phân bố theo hai trục x và y trong không gianhai chiều
3.1.1.3 Mức xám:
Mỗi điểm ảnh được đặc trưng cơ bản bởi tọa độ x, y của điểm ảnh và độxám Mức xám của điểm ảnh là cường độ sáng của nó được gán giá trị số tạiđiểm đó Các thang mức xám thường dùng là: 16, 32, 64, 128, 256.Trong đó mức
256 thường dùng nhất vì máy tính dùng 1 byte ( 2^8=256) để biểu diễn từ 0 đến
255 mức
Trang 243.1.2 Các loại ảnh:
3.1.2.1 Ảnh đen trắng:
Ảnh đen chỉ bao gồm hai màu: màu đen và màu trắng Người ta phân biệtthành nhiều mức khác nhau Nếu chỉ có hai mức: mức 0 và mức 1 hay còn gọi làảnh nhị phân Mức 1 ứng với màu sáng và mức 0 ứng với màu tối Nếu số mứclớn hơn 2 người ta gọi là ảnh đa cấp xám Việc xác định số mức là phụ thuộc vàotiêu chí lượng hóa
Với ảnh nhị phân, mỗi Pixel mã hóa trên một bit, còn với ảnh 256 mứcmỗi Pixel được mã hóa trên 8 bit Ảnh nhị phân khá đơn giản, các phân tử ảnh cóthể coi như các phần tử logic, ứng dụng chính là tính toán logic để phân biệt đốitượng ảnh với nền hoặc phân biệt điểm biên với các điểm khác
3.1.2.2 Ảnh cường độ:
Ảnh cường độ là một ma trận dữ liệu ảnh, mà giá trị của nó đại diện chocường độ trong một số vùng nào đó của ảnh Matlab chứa một ảnh cường độnhư một ma trận dơn , với mỗi phần tử của ma trận tương ứng với một pixel củaảnh Ma trận có thể thuộc lớp double , uint8 hay uint16 Trong khi ảnh cường
độ hiếm khi được lưu với bản đồ màu , Matlab sử dụng bản đồ màu để hiển thịchúng
Những phần tử trong ma trận cường độ đại diện cho các cường độ khácnhau hoặc độ xám Những điểm có cường độ bằng 0 thường được đại diện bằngmàu đen và cường độ 1,255 hoặc 65535 thường đại diện cho cường độ cao nhấthay màu trắng
3.1.2.3 Ảnh màu:
Trang 25Ảnh màu là ảnh tổ hợp từ 3 màu cơ bản: đỏ (Red), lục (Green), xanh lơ(Blue) và thường thu nhận trên các dải tầng khác nhau Mỗi Pixel ảnh màu gồm
3 thành phần Mỗi thành phần cũng được chia thành L cấp khác nhau( thường là256) Do vậy để lưu ảnh màu, người ta lưu trữ từng mặt màu riêng biệt, mỗi màulưu trữ như một ảnh xám đa cấp Do đó không gian nhớ cho ảnh màu lớn gấp 3lần một ảnh đa cấp xám cùng kích thước
Một mảng ảnh RGB có thể thuộc lớp double , uint8 hoặc uint16 Trongmột mảng RGB thuộc lớp double , mỗi thành phần màu có giá trị giữa 0 và 1 Một pixel mà thành phần màu của nó là (0,0,0) được hiển thị với màu đen vàmột pixel mà thành phần màu là (1,1,1 ) được hiển thị với màu trắng Ba thànhphần màu của mỗi pixel được lưu trữ cùng với chiều thứ 3 của mảng dữ liệu Ví
dụ giá trị màu R,G,B của pixel (2,5) được lưu trữ trong RGB(2,5,1) , RGB(2,5,2)
và RGB(2,5,3) tương ứng Mô hình ảnh màu dựa trên hệ tọa độ Decac
Không gian ảnh màu RGB
Ngoài ra trong các camera số, máy chụp ảnh số người ta còn thường dùng
mô hình màu HSV, mô hình YcbCr và mô hình YIQ:
- H: Hue –đặc trưng cho màu sắc
- S: Saturation – đặc trưng cho mức độ đậm nhạt của màu sắc
- V: Value – đặc trưng cho cường độ ánh sáng
Trang 26Mô hình màu HSV.
Mô hình màu YCbCr
Trang 27Mô hình màu YIQ.
Trang 28Phần 6: TỒNG QUAN VỀ OPENCV
I Tổng quan về OpenCV:
OpenCV (Open Source Computer Vision Library) là một thư viện
xử lý hình ảnh nguồn mở của Intel Nó có rất nhiều tác dụng như: tươngtác giữa người và máy tính, nhận dạng vật, phân đoạn và nhận dạng, nhậndạng khuôn mặt, nhận biết, hiểu về cử chỉ, cấu trúc của vận động, vàtrong Robot di động Thêm vào đó nó cải thiện rất nhiều các thuật toán cởbản của thị giác máy như các hàm API cấp thấp hơn
Intel đưa ra phiên bản OpenCV đầu tiên vào năm 1999 Ban đầu nóyêu cầu phải có thư viện xử lý ảnh của Intel Sau đó vì sự lệ thuộc này mà
họ đã phải gỡ bỏ và bây giờ chúng ta có thể sử dụng thư viện này hoàntoàn độc lập OpenCV rất đa dạng, nó hỗ trợ rất nhiểu hệ điểu hành như:Window, Linux và MacOSX
II Những điểm đặc trưng:
Open CV có rất nhiều chức năng bạn có thể bị bất ngờ khi lần đầu tiêntiếp xúc nhưng chỉ sau vài lần sử dụng bạn sẽ thấy dễ dàng hơn
Sau đây là tóm tắt các chức năng cơ bản của openCV 1.0
1 Image and video I/O:
Những giao tiếp này cho phép đọc dữ liệu ảnh từ các file, hoặc từnhững video Bạn cũng có thể tạo những files hình ảnh và video nữa
2 Thị giác máy tính và thuật toán xử lý( mức trung bình và thấp):
Sử dụng giao tiếp này bạn có thể thử nghiệm với rất nhiều thuậttoán về thị giác máy tính mà không cần viết thêm code Nó bao gồmđường mép, đường thẳng và góc phát hiện, hình elip, hình ảnh kim tụtháp cho xử lý đa tỉ lệ, mẫu phù hợp, biến đổi đa dạng và nhiều hơnnữa
3 Module thị giác máy tính cấp cao:
OpenCV chứa đựng vài chức năng cao cấp như nhận dạng khuônmặt, nhận dạng vật thể và tracking, nó bao gồm luồng quang học ( sửdụng camera để xác định cấu trúc 3D), camera xác định kich thước và
âm thanh stereo
4 AI và phương pháp học của máy:
Thị giác máy tính thường đòi hỏi phương pháp học của máy hayphương pháp AI khác một vài phương pháp đó có trong OpenCV
Trang 295 Lấy mẫu hình ảnh và sự chuyển đổi:
Nó rất có ích để xử lý một nhóm pixels thành một đơn vị Open CV
có giao tiếp để trích những phân miền ảnh, lấy mẫu ngẫu nhiên, chỉnhsửa kích cỡ ảnh, làm cong, xoay, và cho phép tạo hiệu ứng cho ảnh
6 Phương pháp để tạo và phân tích ảnh nhị phân:
ảnh nhị phân thường được dùng trong hệ thông kiểm tra, nó quét đểtìm ra sự thay đổi hình dạng hoặc đếm các phần trên ảnh Sự biểu diễnảnh cũng rất thuận tiện khi chúng ta biết rõ vật thể cần bắt
7 Cách thức tính toán thông tin 3D:
Những hàm này rất có ích khi cần sắp xếp và xác định một vật thểvới âm thanh stereo hoặc không gian đa chiều phức tạp từ một camera
8 Mã lệnh toán để xử lý ảnh, thị giác máy tính và biên dịch ảnh:
OpenCV sử dụng các phép toán thông dụng như: đại số, thống kê,hình học
9 Đồ họa:
Những giao diện này cho phép bạn viết chữ và vẽ trên hình ảnh,thêm vào đó những chức năng thú vị có thể tạo ảnh, và những tínhnăng này còn được dùng để tạo nhãn và đánh dấu ví dụ nếu bạn muốnviết một chương trình nhận dạng vật thể, nó sẽ giúp bạn tạo nhãn ảnhvới kích thước và vị trí định sẵn
10 Phương thức GUI:
OpenCV có cửa sổ giao diện riêng trong khi đó nó bị giới hạn khilàm việc trong mỗi môi trường, chúng cung cấp đa môi trường API đểhiển thị hình ảnh và cho phép người dùng nhập dữ liệu thông qua chuộthoặc bàn phím và điều khiển quá trình
11.Cấu trúc dữ liệu và thuật toán
Với những giao diện này bạn có thể lưu, tìm kiếm, và cách danhmục điều khiển, các tuyển tập(cũng như các tập hợp lệnh được gọi ),
đồ họa và sơ đồ nhánh một cách hiệu quả
12.Khả năng tồn tại của dữ liệu
Những phương pháp này cung cấp các giao diện một cách thuận lợi
để lưu trữ các dạng khác nhau của dữ liệu vào đĩa để có thể khôi phụckhi cần thiết
III Cấu tạo
Những hàm của OpenCV có chứa ở trong vài modules
CXCORE chứa đựng các định nghĩa về kiểu dữ liệu cơ bản ví dụ, cấutrúc dữ liệu của ảnh, các điểm và các hình chữ nhật được xác định
Trang 30trong file cxtypes.h CXCORE cũng chứa đựng các phép toán đại sốtuyến tính,thống kê,các hàm lâu dài và lỗi thao tác Có một chút kỳ cục
o đây là các hàm đồ họa phục vụ cho vẽ trên ảnh được giữ ở đây
CV chứa đựng quá trình xử lý ảnh và các phương pháp đánh giá
sơ bộ kích thước ảnh Những hàm tính toán hình học cũng được lưu trữtại đây
CVAUX được mô tả trong văn bản của OpenCV như là modul
cũ và chỉ dùng để thí nghiệm Tuy nhiên, giao diện đơn giản nhất chonhận dạng mặt được nằm trong modul này Những mã nguồn nằmtrong module này rất phù hợp cho việc nhận dạng mặt và chúng được
sử dụng rộng rãi cho mục đích này
1 ML chứa đựng giao diện mechine-learning
Những hàm còn lại được nằm trong HighGUI và CVCAM Cả haiđều nẳm ở thư mục có tên “otherlibs”, sử dụng chúng rất dễ gặp lỗi Vìrằng HighGUI chứa các thư viện vào ra cơ bản , bạn sẽ muốn chắcchắn hơn, đừng bỏ sót nó.Nó cũng chứa đựng nhiều cửa sổ đa chứcnăng
CVCAM là thư viện chứa các hàm truy nhập video thông quaDirectX trên môi trường Window 32 bit Tuy nhiên, HighGUI cũng cócác giao diện video.Trong bài báo này, tôi chỉ xem xét HighGUI.Chúng đơn giản, làm việc trên nhiều môi trường Nếu bạn sử dụngWindow XP hoặc 2000, bạn có thể làm tăng hiểu quả của nó bằng cáchchuyển qua giao diện CVCAM, nhưng học OpenCV sẽ đơn giản hơnkhi dùng HighGUI
Trang 31IV Cài đặt OpenCV
1 Cài đặt cơ bản
OpenCV cho Linux và MacOSX được đóng gói như một gói
mã nguồn lưu trữ Bạn sẽ phải xây dựng cả thư viện tĩnh và cảnhững đối tượng chia sẻ (shared-object) Bạn cần xây dựng RPMtrước tiên và cài đặt từ nó, hoặc biên dịch và cài đặt nó ngay.Cấutrúc cho cả hai được nằm trong INSTALL
Với Window ta khi cài đặt OpenCV,nó sẽ cop file OpenCVvào thư mục mà bạn chọn.Cách thức lựa chọn trong đường dẫn hệthống của bạn chứa mã nhị phân OpenCV, đăng kí một vài bộ lọc
Files/OpenCV/<version>
2 Những yêu cầu khi cài đặt trong windows
Đối với người dùng xài Windows, OpenCV rất dễ dàng cài đặtvàluôn hoạt động nhưng một chút cải tiến nhỏ sẽ cho bạn kết quả tốthơn Sau đây là một vài đề nghị
OpenCV chỉ là một công cụ hỗ trợ cho người lập trình khôngphải là một chương trình bạn có thể lưu giữ nó ở một nơi nào đókhác thư mục Progam files Nếu bạn thích cài vào một nơi khác hãychọn thư mục đó trước khi nó hỏi
Tôi đề nghị bạn cũng quyết định trước khi cài đặt – bạn muốnwindows tìm kiếm những files dll của OpenCV như thế nào Bạn cóthể chỉnh sửa đường dẫn của hệ thống của bạn thay vì của hệ thống,hoặc bạn có thể di chuyển chúng sau khi cài đặt từ thư mục “bin”của OpenCV bằng thư mục gốc của bạn
Nếu bạn muốn di chuyển các files dll nhưng bạn không chắcthư mục gốc của bạn nằm ở đâu, bạn có thể lưu chúng bằng cách
Nếu bạn thích chỉnh đường dẫn hơn di chuyển các file dll, bạn cóthể cài đặt bằng cách lựa chọn các check box “ Add bin directory topath”
3 Sau khi cài đặt
Thư mục OpenCV có chứa và thư mục con Thư mục “docs” cóchứa các tài liệu html cho tất cả các hàm và kiểu dữ liệu từ các tàiliệu này bạn có thể làm các ví dụ, bạn cũng có thể duyệt (browse)thư mục “samples”
Trang 32Bạn cũng cần đến những file header khi biên dịch chươngtrình nó có ở trong các module của OpenCv Mặc dù bạn không cầnlàm việc này Tôi thích tập hợp chúng lại với nhau vào trong mộtthư mục.
Trên cả Linux và Windows, bạn có thể xác định vị trí củanhững header bằng cách tìm kiếm thư mục cài đặt và các thư mụccon của nó với các file có đuôi mở rộng là *.h, *.hpp sẽ có rấtnhiều file được tìm thấy bạn sẽ không cần tất cả các file Headercho tất cả các modules ngoại trừ HighGUI đã được đính sẵn trongmỗi module Bạn có thể bỏ các header trong thư mục “src” chonhưng module này Với HighGUI bạn sẽ cần đến file highgui.hđược lưu ở otherlibs/highgui
1 Những điều cần biết về Header và Libraries
Hầu hết chương trình OpenCV cần cv.h và highgui.h.Sau đó
để nhận dạng mặt chúng ta cần thêm cvaux.h Phần còn lại của file
header được thêm vào bởi những header cao nhất ( high-level
Trang 33Nếu bạn để các file header trong các thư mục khác nhau( càiđặt mặc định), hãy chắc chắn rằng đường dẫn của trình biên dịch cócác thư mục đó Nếu bạn gom chúng lại một thư mục hãy chắc chắnrằng nó trùng với đường dẫn của trình biên dịch của bạn.
Mối liên kết của bạn sẽ cần cả hai thư viện và tên của thưviện tĩnh để sử dụng thư viện tĩnh bạn cần liên kết đến filecxcore.lib, cv.lib, và highgui.lib và sau đó bạn cần thêm filecvaux.lib để nhận dạng gương mặt tất cả các file này đều nằm trongthư mục “lib”
2 Đọc và ghi ảnh
Xuất nhập ảnh rất dễ dàng với OpenCV/ hình 1 chỉ cho chúng
ta thấy một chương trình hoàn chỉnh để đọc một ảnh và ghi ảnh đó
sang một file thứ hai trong một định dạng khác
Để đọc một file ảnh đơn giản ta chỉ cần gọi cvloadImage(),trong ví dụ nó nằm ở dòng thứ 14 OpenCV hỗ trợ hầu hết các địnhdạng ảnh phổ biến như JPEG, PNG và BMP Bạn không cần phảicung cấp thông tin của định dạng ảnh cvLoadImage xác định địnhdạng file bằng cách đọc các file header
Để ghi một hình ảnh ra file, gọi hàm cvSaveImage() Hàmnày quyết định định dạng file nào sẽ được dùng từ đuôi mở rộng.trong ví dụ này đuôi mở rộng là “PNG” Vì vậy nó sẽ ghi dữ liệuảnh dưới định dạng PNG
Cả hai hàm cvLoadImage() và cvSaveImage() đều nằm trongHighGUI module
Figure 1:Ví dụ chương trình đọc một ảnh từ file và ghi nó vào một
file khác với dịnh dạng khác
Trang 34Khi bạn hoàn thành việc sử dụng nhập ảnh từ cvLoadImage(),bạn cần thả free bằng cách gọi hàm cvReleaseImage(), như ở dòng
29 hàm này sẽ lấy địa chỉ của một điểm làm input tạo “ngắt antoàn” Nó trả tự do cho cấu trúc ảnh chỉ khi ảnh không rỗng sau khitrả tự do, nó sẽ đặt giá trị điểm ảnh về 0
3 Thu video trục tiếp
Chụp một khung hình từ một webcam, hoặc từ các thiết bịquay video kĩ thuật số khác dễ dàng như load hình từ một file Hình
2 cho chúng ta thấy một danh sách các lệnh để khởi tạo cấu trúcchụp, và lưu các video frames và đóng các giao diện chụp
Giao diện chụp được khởi tạo tại dòng 19 bằng cách gọi hàmcvCaptureFromCAM() Hàm này trả một pointer về cấu trúc
cvCapture Bạn không thể truy cập trực tiếp vào cấu trúc này Thayvào đó bạn sẽ lưu pointer qua lệnh cvQueryFrame()
Figure 2: Ví dụ chương trình chụp ảnh video và lưu chúng vào một file
Trang 35Khi bạn hoàn thành việc sử dụng thu video, bạn gọi lệnhcvReleaveCapture() để thả nổi thu video Giống như hàmcvReleaseImage(), bạn hãy lưu địa chỉ của pointer cvCapture bằnghàm cvReleaseCapture().
Không được thả rỗi hoặc chỉnh sửa IplImage bạn nhận được
từ cvQueryFrame()! Nếu bạn cần sửa dữ liệu ảnh hãy tạo một bảncopy với câu lệnh như sau:
// Copy the video frame
IplImage *pImgToChange = cvCloneImage(pVideoFrame);
// Insert your image-processing code here
// Free the copy after using it cvReleaseImage(&pImgToChange);
4 Chuyển đổi màu
Hình 3 biểu diễn mã lệnh để chuyển đổi một ảnh màu sang một ảnhxám OpenCV hỗ trợ chuyển đổi từ nhiều chuẩn mẫu màu khác
nhau, gồm RGB,HSV, YCrCb vàCIELAB
Lưu ý các hàm
cvCvtColor() đòi hỏihai ảnh đầu vào ảnhthứ nhất pRGBImag
là ảnh nguồn cònảnh thứ haipGrayImag là ảnhsản phẩm nó sẽ chứakết quả chuyển đổi
cvCvtColor() đượcgọi lại
Bởi mô hình này có nguồn ngẫu nhiên và hình ảnh kết quả để
xử lý hàm và rất phổ biến trong OpenCV bạn sẽ cần chúng để tạoảnh sản phẩm như ở dòng 25 lệnh gọi hàm cvCreateImage() tạo ramột ảnh có cùng kích thước như ảnh ban đầu
5 OpenCV lưu ảnh như thế nào
Figure 3: Ví dụ chương trình chuyển đổi ảnh màu qua ảnh đen trắng
Trang 36OpenCV lưu hình ảnh giống như C,IplImage IPL ở trong thưviện xử lý ảnh là một thừa kế từ phiên bản trước của OpenCV.
Kiểu dữ liệu IplImage được xác định trong CXCORE Thêmvào đó là dữ liệu ảnh thô, nó chứa một số mô tả chi tiết gọi headercủa ảnh bao gồm:
Width – chiều rộng ảnh bằng pixels
Height – chiều cao ảnh bằng pixels
Depth – một vài phần tử bất biến xác định nó chỉ ra số bitstrên mỗi pixel trên mỗi kênh Ví dụ nếudepth=IPL_DEPTH_8U dữ liệu cho mỗi pixel được lưu trong
8 bit với giá trị unsigned (unsigned values)
nChannels – số kênh dữ liệu(từ 1 đến 4) Mỗi kênh chứa mộtkiểu dữ liệu pixel Ví dụ một ảnh RGB có 3 channels – đỏ,xanh lá, xanh dương (đôi khi nó được gọi là ảnh BGR bởi vì
dữ liệu pixel được lưu ở dạng xanh dương, xanh lá, đỏ) ảnhđen trắng chỉ có chứa một kênh là độ sáng của pixel
Bạn có thể tạo nhiều kiểu hàm khác nhau nhờ OpenCV màkhông cần truy xuất trực tiếp vào dữ liệu pixel thô Ví dụ, như nhậndạng khuôn mặt, tracking, và nhận dạng chương trình được nêusau,trong series này bạn không cần truy xuất dữ liệu thô bằng tay màthay vào đó chúng hoạt động bằng pointer của ảnh và các cấu trúc cấpcao khác Sự tính toán các mức pixel được thi hành bên trong các hàmcủa OpenCV Tuy nhiên nếu bạn ghi thuật toán xử lya ảnh của chínhbạn bạn có thể cần đến truy xuất vào dữ liệu pixel thô Có hai cách đểthực hiện như sau:
1 Truy xuất pixel đơn giản
Cách dễ dàng nhất để đọc các pixel riêng lẻ là với hàmcvGet2D():
Hàm này lấy 3 thông số là một pointer chứa dữ liệu (CVArr*), và mảngđược xếp theo hang và theo cột
Dữ liệu chứa đựng có thể có cấu trúc IplImage Cái hang cao nhất củađiểm ảnh có row = 0 và hang thấp nhất có row = chiều cao -1
Hàm cvGet2D() trả về cấu trúc dạng C là CvScalar được xác định nhưsau:
typedef struct CvScalar{
double val[4];
}
Trang 37Giá trị của mỗi điểm ảnh cho mỗi kênh được nằm trong val[i].Với ảnh đen trắng, val[0] chứa độ sáng của điểm ảnh, ba giá trị khácđược đặt bằng 0 Với ảnh có 3 kênh BGR thì blue = val[0], green =val[1],và red = val[2]
Các hàm bổ sung cvSet2D() cho phép bạn chỉnh sửa giá trị điểmảnh Nó được khai báo như sau:
void cvSet2D(CvArr*, int row, int col,CvScalar);
2 Truy xuất nhanh điểm ảnh
Mặc dù hàm cvGet2D() và cvSet2D() rất dễ dàng sử dụng nếubạn muốn truy xuất nhiều hơn vài giá trị điểm ảnh và gặp vấn đề bạn sẽphải đọc dữ liệu trực tiếp từ bộ nhớ đệm IplImage.imageData
Dữ liệu ảnh trong bộ nhớ đệm được lưu dưới dạng 1 chiều, trongchủ yếu một hang Điều đó có nghĩa tất cả các giá trị điểm ảnh tronghang đầu tiên được liệt kê ra trước tiếp theo sau là giá trị điểm ảnh củahang thứ hai và cứ tiếp tục như thế cho đến hang cuối cùng
Bởi vì dữ liệu điểm ảnh được xếp hàng và chèn thêm vào nếu cầnthiết vì thế mỗi dòng đều bắt đầu là bội của 4 byte Ngoài raIplImage.WidthStep biểu thị số byte dữ liệu điểm ảnh của mỗi dòng
IplImage.imageData+i*IplImage.widthStep
IplImage.imageData định nghĩa theo kiểu char* vì vậy bạn cầnhiểu kiểu dữ liệu này, ví dụ, nếu dữ liệu ảnh của bạn ở dạng unsignedbytes ( một kiểu dữ liệu phổ biến), bạn nên hiểu mỗi giá trị theo kiểuunsigned char* trước khi gán, hoặc sử dụng theo cách khác
Nếu bạn truy xuất dữ liệu từ một ảnh đen trắng ( kênh đơn),
và độ sâu của dữ liệu là 8 bits( một byte trong mỗi pixel), bạn nên truyxuất hàng cột của điểm ảnh như sau:
pixel[row][col] = ((uchar*)(pImg->imageData +
row*pImg->widthStep + col));
trong ảnh đa kênh, kênh dữ liệu quét chẵn lẻ xen kẽ nhau.Đây là một đoạn mã lệnh để truy xuất các giá trị điểm ảnh blue, green,red:
step = pImg->widthStep;
Trang 38nChan = pImg->nChannels;
// = 3 for a BGR imagebuf = pImg->imageData;
blue[row][col] =((uchar*)(buf + row*widthStep +nChan*col);
green[row][col] =((uchar*)(buf + row*widthStep +nChan*col + 1);
red[row][col] =((uchar*)(buf + row*widthStep +nChan*col + 2);
cuối cùng nếu độ sâu ảnh của bạn lớn hơn 8 bits ví dụIPL_DEPTH_32S bạn cần chuyển đổi byte bội số cho mỗi giá trị vànhân nó với bộ đệm bằng số byte dữ liệu với độ sâu của ảnh Điều đórất khó thành công tuy nhiên bạn sẽ gặp phải hoàn cảnh đó và bạn sẽphải truy xuất trực tiếp giá trị các điểm ảnh
Phần 7 TRUYỀN DỮ LIỆU BẰNG MODULE RF
I Đặc điểm của module HM TR:
1 Công nghệ FSK, chế độ bán song công, nhưng nhiễu rất mạng
2 Băng tần ISM, không cần đăng ký tần số
3 Có thể cấu hình tần số và có thể sử dụng ứng dụng FDMA
4 Có thể chọn được độ lệch tần số phát sóng và băng thông thu
Trang 396 Tốc độ truyền dữ liệu có thể lựa chọn nhiều phạm vi
7 Có chân Enable để điều khiển công suất cho những ứng dụngkhác nhau
8 Độ nhạy cao, phạm vi truyền tải rộng
9 Giao tiếp UART tiêu chuẩn, TTL hoặc RS232 với mức logic tùychọn
10 Rất gọn nhẹ độ tin cậy cao, kích thước nhỏ gọn, dễ dàng lắp đặt
11 Không có chỉnh sóng trên thiết bị
II Ứng dụng:
1 Điều khiển từ xa, điều khiển thiết bị đo
2 Đo không dây
3 Điều khiển truy xuất
4 Nhận dạng tách lọc
5 Thu thập dữ liệu
6 Thiết bị điện máy trong nhà
7 Sản phẩm cho căn nhà thông minh
8 Quản lý trẻ em
III Hình dạng thực tế:
Trang 40IV Sơ đồ chân