1. Trang chủ
  2. » Giáo án - Bài giảng

Đồ án Lý thuyết định vị robot

93 28 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 93
Dung lượng 3,26 MB
File đính kèm ROBOT BAM VAT.rar (4 MB)

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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 1

Trong 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 2

Chú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 3

NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN:

Chữ ký giáo viên:

Trang 4

NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN:

Chữ ký giáo viên:

Trang 5

MỤC LỤC

Trang 6

Việ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 7

Hì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 9

Hình 2.1 Mô hình Encoder và encoder đang sử dụng E6B2

Trang 10

Ngõ 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 11

2.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 12

Hì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 13

8 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 14

U 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 15

Mạ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 16

3 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 17

3.1 Các hình chiếu của robot:

Trang 18

Hình 3.c: Hình chiếu cạnh robot tự động

Trang 19

Phầ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 21

B: 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 24

3.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 26

Mô hình màu HSV.

Mô hình màu YCbCr

Trang 27

Mô hình màu YIQ.

Trang 28

Phầ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 29

5 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 30

trong 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 31

IV 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 32

Bạ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 33

Nế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 34

Khi 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 35

Khi 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 36

OpenCV 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 37

Giá 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 38

nChan = 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 39

6 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 40

IV Sơ đồ chân

Ngày đăng: 20/08/2020, 09:02

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w