cơ sở thiết kế robot tự hành

99
ðẠI HC QUC GIA THÀNH PHHCHÍ MINH TRƯỜNG ðẠI HC BÁCH KHOA KHOA ðIN – ðIN TBMÔN THIT BðIN ----------------------oOo--------------------- LUN VĂN TT NGHIP ðẠI HC THIT KPHN CƠ SCA ROBOT THÀNH GVHD : TS. TRNH HOÀNG HƠN SVTH : ðẶNG QUANG VINH MSSV : 40702964 TP. HCHÍ MINH, THÁNG 01/2012

Upload: tuyen-dinh

Post on 15-Jan-2016

60 views

Category:

Documents


12 download

DESCRIPTION

Luận văn cơ sở thiết kế robot tự hành

TRANSCRIPT

Page 1: Cơ sở thiết kế robot tự hành

ðẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH TRƯỜNG ðẠI HỌC BÁCH KHOA

KHOA ðIỆN – ðIỆN TỬ BỘ MÔN THIẾT BỊ ðIỆN

----------------------oOo---------------------

LUẬN VĂN TỐT NGHIỆP ðẠI HỌC

THI ẾT KẾ PHẦN CƠ SỞ CỦA ROBOT TỰ HÀNH

GVHD : TS. TRỊNH HOÀNG HƠN SVTH : ðẶNG QUANG VINH MSSV : 40702964

TP. HỒ CHÍ MINH, THÁNG 01/2012

Page 2: Cơ sở thiết kế robot tự hành

BỘ GIÁO DỤC VÀ ðÀO TẠO TRƯỜNG ðH BÁCH KHOA KHOA ðIỆN - ðIỆN TỬ BỘ MÔN THIẾT BỊ ðIỆN

CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM ðộc lập – Tự do – Hạnh phúc ==================================

NHIỆM VỤ LUẬN VĂN TỐT NGHIỆP

HỌ VÀ TÊN: ðẶNG QUANG VINH MSSV: 40702964 NGÀNH: Kỹ thuật ñiện LỚP: DD07KTD6

1. Tên ñề tài: THIẾT KẾ PHẦN CƠ SỞ CỦA ROBOT TỰ HÀNH

2. Nhiệm vụ: (yêu cầu về nội dung và số liệu ban ñầu) a. Thiết kế phần cơ cho robot (10%) b. ðiều khiển robot bằng tay sử dụng remote (10%) c. Tìm hiểu về xử lý ảnh và Matlab, lập trình cho robot bám ñối tượng (35%) d. Thiết kế mạch phần cứng và lập trình PIC16F877A ñiều khiển robot (35%) e. Tìm hiểu và lập trình truyền thông nối tiếp RS232 (10%)

3. Ngày giao nhiệm vụ luận án: _________________________________________ 4. Ngày hoàn thành nhiệm vụ luận án: ____________________________________ 5. Họ tên người hướng dẫn: Phần hướng dẫn:

1) _______________________________ _________________________ 2) _______________________________ _________________________ 3) _______________________________ _________________________

Nội dung và yêu cầu luận án tốt nghiệp ñã ñược thông qua bộ môn Ngày ____ tháng ____ năm ______ CHỦ NHIỆM BỘ MÔN NGƯỜI HƯỚNG DẪN CHÍNH (Ký và ghi rõ họ tên) (Ký và ghi rõ họ tên)

PHẦN DÀNH CHO KHOA BỘ MÔN Người duyệt (chấm sơ bộ): ___________________________ ðơn vị: __________________________________________ Ngày bảo vệ: ______________________________________ ðiểm tổng kết: ____________________________________ Nơi lưu trữ luận án: ________________________________

Page 3: Cơ sở thiết kế robot tự hành

LỜI CẢM ƠN

Khi bắt ñầu nhận luận văn tốt nghiệp này em ñã rất lo lắng bởi xử lý ảnh là lĩnh vực còn mới mẻ ở Việt Nam và bản thân cũng lần ñầu tiên tiếp xúc với l ĩnh vực này. Em rất vui vì cuối cùng ñã hoàn thành tốt nhiệm vụ ñược giao.

Trước hết em xin gửi lời cảm ơn sâu sắc ñến thầy Trịnh Hoàng Hơn. Tuy không

có ñiều kiện trực tiếp ñược làm việc cùng thầy nhiều, nhưng qua những lần tiếp xúc ñó chính thầy ñã cho em những lời ñộng viên, những lời khuyên quý báu, em học ñược ở thầy rất nhiều.

Em cũng xin cảm ơn tất cả quý thầy cô trường ðại học Bách Khoa TP.HCM nói

chung, quý thầy cô khoa ðiện-ðiện tử, ngành Kỹ thuật ñiện và bộ môn Thiết bị ñiện nói riêng ñã tận tình giảng dạy, trang bị cho em những kiến thức bổ ích trong khoảng thời gian học ñại học.

Xin cảm ơn gia ñình và tất cả bạn bè ñã là nguồn ñộng viên, góp ý, giúp ñỡ tôi rất

nhiều trong quá trình học tập và thực hiện luận văn. Một lần nữa, xin cám ơn tất cả mọi người. Cầu chúc cho tất cả mọi người mạnh

khoẻ, vui vẻ, hạnh phúc và thành công!

TP. Hồ Chí Minh, tháng 01/2012 ðặng Quang Vinh

Page 4: Cơ sở thiết kế robot tự hành

TÓM TẮT LUẬN VĂN

Mục tiêu của luận văn là ñiều khiển robot bám theo một ñối tượng sử dụng xử lý ảnh trong Matlab. Nó phải duy trì ñược khoảng cách nhất ñịnh giữa robot và ñối tương, khi ñối tượng di chuyển robot phải di chuyển theo dựa vào hình ảnh thu ñược từ webcam ñể xác ñịnh ñối tượng ñi thẳng, rẽ phải, rẽ trái, ñi lùi. Nghĩa là chúng ta phải ñiều khiển cả tốc ñộ và hướng của robot tuy nhiên trong luận án này tôi chỉ ñiều khiển hướng, tốc ñộ có thể xem là không ñổi. ðể làm ñược việc này, chúng ta phải nhận dạng ñược ñối tượng và xác ñịnh ñược hướng di chuyển của nó. Thứ hai phải xây dựng chương trình xử lý ảnh bám ñối tượng. Thứ ba là phải xây dựng ñược phần cứng ñể kiểm ñịnh kết quả.

Có rất nhiều cách ñể dò tìm ñối tượng ví dụ dựa trên hình dáng, âm thanh, ... những thuật toán này thực sự rất phức tạp. ðể giảm ñộ khó của nó chúng ta ñặt phía sau ñối tượng một vật có những thuộc tính về màu sắc ñặc biệt ví dụ màu ñỏ, màu vàng, màu xanh, ... Như vậy, lúc tiến hành theo dõi sẽ giảm ñược rất nhiều về việc xử lý nhiễu do nền và các ñối tượng không mong muốn gây ra, giảm ñáng kể sự nhầm lẫn ñối tượng theo dõi. Chương trình xử lý ảnh sử dụng Matlab theo dõi ñối tượng căn cứ vào màu sắc của nó. Khoảng cách giữa robot và ñối tượng chúng ta ñặt là cố ñịnh, dựa vào tâm của ñối tượng tìm ñược chúng ta biết ñược vị trí của ñối tượng tham chiếu trên mặt phẳng ảnh. Các thuộc tính nhận ñược sẽ truyền qua cổng giao tiếp RS232 xuống vi ñiều khiển PIC16F877A ñể ñiều khiển ñộng cơ một chiều (DC) thông qua mạch cầu ñiều khiển ñộng cơ L298N.

Page 5: Cơ sở thiết kế robot tự hành

MỤC LỤC

ðề mục Trang bìa Nhiệm vụ luận văn Lời cảm ơn Tóm tắt luận văn Mục lục

Trang

i ii

iii iv

Danh sách hình vẽ v

Danh sách bảng vi

CHƯƠNG 1: Tổng quan về ñề tài ……………………………………………….. 1 1.1 ðặt vấn ñề ………………………………………………………………….. 1 1.2 Giới thiệu chung ……………………………………......…………….……. 1

1.2.1 Robot tự hành ……………………………………..………………… 1 1.2.2 Robot bám ñối tượng ……….……………………………………….. 3

1.3 Sơ ñồ khối của robot tự hành……………... ...…………………………….. 5 1.3.1 Phân tích sơ ñồ khối của robot tự hành ………...…………………… 5 1.3.2 Thiết kế mô hình robot tự hành ………………...………………….... 6

1.4 Nhiệm vụ cụ thể và giới hạn của luận văn……………... ...……………….. 7 1.4.1 Nhiệm vụ cụ thể của luận văn………... ………...……………………7 1.4.2 Giới hạn của luận văn ……………………...…………………........... 7

CHƯƠNG 2: Thiết kế phần cơ khí cho robot ……..…………………………… 8 2.1. Sơ lược về các phương pháp di chuyển của robot tự hành ……………….. 8

2.1.1 Robot dùng bánh xe ………………………………………….……… 9

2.1.2 Robot dùng chân ……………………………………………….……. 10

2.2. Mô hình kết cấu của robot ………………………………………………… 10 2.3. Thực hiện mô hình cơ khí robot ……………………...…………………… 11

CHƯƠNG 3: ðiều khiển robot từ xa ………………………….………………… 15 3.1 Lý thuyết ñiều khiển từ xa …………………………………………………. 15

3.1.1 Giới thiệu …………………………………………………….……… 15

3.1.2 ðiều khiển từ xa dùng tia hồng ngoại ………………………….……. 15

3.1.3 ðiều khiển từ xa dùng sóng vô tuyến ………………….…….……… 15

3.1.4 Ưu và khuyết ñiểm của ñiều khiển từ xa dùng tia hồng ngoại………. 16

3.1.5 Ưu và khuyết ñiểm của ñiều khiển từ xa dùng sóng vô tuyến…….…. 16

3.2 Tổng quát …………………………………………………………..………. 17

3.3 Phần cứng bên phát tín hiệu …………………………..……………………. 18

3.3.1 Sơ lược về IC mã hoá PT2262 ……………………………….……… 18

Page 6: Cơ sở thiết kế robot tự hành

3.3.2 Quy tắc mã hoá với IC PT2262 …………………….………….……. 19

3.3.3 Cách thức mã hoá dữ liệu của PT2262 ……………..….…….……… 21

3.3.4 Remote 8 nút tích hợp IC PT2262…………………………...………. 21

3.4 Phần cứng bên thu tín hiệu ………………………………………………… 22

3.4.1 Sơ lược về IC giải mã PT2272 ……………………...……….……… 22

3.4.2 Cách thức giải mã dữ liệu của PT2272 …………….………….……. 24

3.4.3 Mạch thu sóng tích hợp IC PT2272 ……………..….………..……… 24

CHƯƠNG 4: Giới thi ệu về Matlab và xử lý ảnh……………………...………… 25

4.1 Giới thiệu chung về phần mềm Matlab ………………………….………… 25

4.1.1 Khái niệm về Matlab ……………………………..…………………. 25

4.1.2 Cấu trúc dữ liệu của Matlab và các ứng dụng……………………….. 25

4.1.3 Hệ thống Matlab ……………………..……………………………… 26

4.2 Giới thiệu khái quát về ảnh số……………………..……………………….. 27

4.2.1 Các khái niệm cơ bản về ảnh ……………………..…………………. 27

4.2.2 Các kiểu ảnh trong Matlab………………………..………………….. 28

4.3 Xử lý ảnh với Matlab ………………………...……………………………. 32

4.3.1 Xử lý ảnh …………………...……………………………………….. 32

4.3.2 Các giai ñoạn xử lý ảnh………………………………………...……. 32

4.4 Các hàm xử lý ảnh cơ bản trong Matlab…………………...………………. 34

4.4.1 ðọc và ghi dữ liệu ảnh…………………………….………….……… 34

4.4.2 Chuyển ñổi giữa các kiểu dữ liệu, kiểu ảnh…………………….……. 34

4.4.3 Các phép toán số học cơ bản ñối với dữ liệu ảnh….………....……… 35

4.4.4 Các hàm hiển thị ảnh trong Matlab………………………………..…. 35

4.4.5 Các phép biến ñổi hình học……………………………………….…. 35

CHƯƠNG 5: Các linh kiện sử dụng trong khối phần cứng…………………….. 39 5.1 Cơ bản về PIC16F877A ………………………….………………………... 39

5.1.1 PIC là gì?………………………….………………………….……… 39

5.1.2 ðặc ñiểm nổi bật của PIC16F877A …………………...……….……. 39

5.1.3 Các cổng vào ra ………………………………………..…….……… 40

5.1.4 Các khối Timer………………………………………………………. 43

5.1.5 Các khối PWM………………………………………………………. 46

5.1.6 Khối ADC……………………………………………………………. 47

5.1.7 Khối truyền thông nối tiếp UART…………………………..…….…. 49

5.2 Giao tiếp RS232 …………………………………………………………… 49

5.2.1 ðặt vấn ñề ……………….……………………….………………….. 49

Page 7: Cơ sở thiết kế robot tự hành

5.2.2 Ưu ñiểm của giao tiếp RS232.……………………………………….. 49

5.2.3 Các mức ñiện áp ñường truyền…………………………………….. 50

5.2.4 Cổng RS232…….………………..……………….………………….. 50

5.2.5 Quá trình truyền dữ liệu…………………………..………………….. 51

5.2.6 Truyền thông cổng nối tiếp trong Matlab……...…………………….. 52

5.3 Giới thiệu về chip mạch cầu L298N ………………….…………………… 54

5.3.1 Phương pháp ñiều chế ñộ rộng xung PWM………………………….. 54

5.3.2 Mạch cầu H ………………………………………………………..… 55

5.3.3 IC công suất L298N ……………………………………………….… 55

CHƯƠNG 6: Thiết kế mạch phần cứng ……………………………………...…. 58

6.1 Khối nguồn ……………..…………………………..……………………… 58

6.2 Khối ñiều khiển trung tâm ……………………………………...………….. 58

6.3 Khối ñiều khiển ñộng cơ ………………………….……………………….. 59

6.4 Khối truyền thông RS232…………………………….………………….…. 60

6.5 Mạch phần cứng hoàn chỉnh……………………………………………….. 60

CHƯƠNG 7: Xây dựng phần mềm ñiều khiển………………………………….. 63 7.1 Sơ ñồ tổng quát của robot ………………………………………..………… 63

7.2 Robot di ñộng bám ñối tượng…………………………...………..………… 63

7.3 Xây dựng phần mềm ñiều khiển robot……………………...……………… 64

7.3.1 Nhận dạng và tính toán vị trí, kích thước của ñối tượng màu ñỏ……. 64

7.3.2 Các bước thu thập ảnh bằng webcam………………..………………. 68

7.3.3 Mặt phẳng ảnh……………………………………………………….. 71

7.3.4 Tập lệnh ñiều khiển robot………………….………………………… 72

7.4 Giao diện ñiều khiển sử dụng GUI của Matlab…………..………………… 73

CHƯƠNG 8: Kết quả ñạt ñược…………………………………………...……… 74

8.1 Các kết quả ñạt ñược …………………………………………………...….. 77

8.2 Hạn chế …………………………………………………………………….. 77

8.3 Hướng khắc phục các hạn chế và phát triển ñề tài…………………………. 78

Tài li ệu tham khảo …………………...………………………..………………….. 79PHỤ LỤC A: Chương trình ñiều khiển robot………………………….……….. 80 PHỤ LỤC B: Chương trình giao diện GUI trong Matlab ………………..…….. 84

Page 8: Cơ sở thiết kế robot tự hành

DANH SÁCH HÌNH V Ẽ

Hình Trang Hình 1.1 : Một số hình ảnh về robot tự hành ……………………………...……...... 2 Hình 1.2 : Robot Pops (nguồn: slashgear.com)……………………...…….............. 3 Hình 1.3 : Robot MIDbo (nguồn: telepresenceoptions.com)…………...……......... 4 Hình 1.4 : PANrobot (nguồn: mobilerobot.org)……………………...……............. 4 Hình 1.5 : Laptop robot (nguồn: mobilerobot.org)…………………...……..............4 Hình 1.6 : Sơ ñồ khối robot tự hành………………………………………… ……... 5 Hình 2.1 : Robot di chuyển bằng chân ……………………………………... ……... 8Hình 2.2 : Robot di chuyển bằng bánh …………………………………....... ……... 8Hình 2.3 : Các dạng robot dùng bánh xe …………………………………… ……... 9Hình 2.4 : Robot dùng bánh xích và dùng chân ……………………...……….......... 10Hình 2.5 : Mô hình kết cấu của robot ………………………………………. ……... 10Hình 2.6 : ðộng cơ …………………………………………………………. ……... 11Hình 2.7 : Bánh xe chủ ñộng ……………………………………….............. ……... 11Hình 2.8 : Bánh xe tự lượn …………………………………………………. ……... 11Hình 2.9 : Acquy ……………………………………………………………. ……... 12Hình 2.10 : Khung sườn …………………………………………………………..... 12Hình 2.11 : Mô hình cơ khí………………………………..……………….……...... 13Hình 2.12 : Mô hình cơ khí …………………………………………….….……...... 13Hình 2.13 : Mô hình cơ khí …………………………………………………. ……... 14Hình 2.14 : Mô hình cơ khí ………………………………….. .……………............ 14Hình 3.1 : Sơ ñồ khối ñiều khiển từ xa ……………………………………... ……... 17Hình 3.2 : IC PT2262……………………………………………………...... ……... 18Hình 3.3 : Biểu diễn Bit code mã hoá ………………………………………. ……... 19Hình 3.4 : Biểu diễn Bit ñồng bộ …………………………………………… ……... 20Hình 3.5 : Biễu diễn từ mã ………………………………………………...... ……... 20Hình 3.6 : Biễu diễn khung truyền ………………………………………...... ……... 21Hình 3.7 : Remote 8 nút tích hợp IC PT2262……………………………...... ……... 21Hình 3.8 : IC PT2272……………………………………………………...... ……... 22Hình 3.9 : Mạch thu sóng tích hợp IC PT2272……………………………………... 24Hình 4.1 : Ma trận dữ liệu và ma trận bản ñồ màu …………………………. ……... 28Hình 4.2 : Ảnh Index ……………………………………………………….. ……... 29Hình 4.3 : Ảnh Grayscale …………………………………………………... ……... 29Hình 4.4 : Ảnh nhị phân ……………………………………………………. ……... 30Hình 4.5 : Các mặt phẳng màu ……………………………………………... ……... 30Hình 4.6 : Ảnh RGB ………………………………………………………... ……... 31Hình 4.7 : Các bước cơ bản trong xử lý ảnh ……………………………....... ……... 32Hình 4.8 : Tăng kích thước ảnh …………………………………………...... ……... 36Hình 4.9 : Quay ảnh ………………………………………………………… ……... 37Hình 4.10 : Xén ảnh ………………………………………………………… ……... 38

Page 9: Cơ sở thiết kế robot tự hành

Hình 5.1 : Sơ ñồ chân của PIC16F877A …………………………………… ……... 39Hình 5.2 : Sơ ñồ khối của PIC16F877A ……………………………………. ……... 40Hình 5.3 : Sơ ñồ khối Timer0………………………………………….......... ……... 44Hình 5.4 : Sơ ñồ khối Timer1……………………………………………...... ……... 44Hình 5.5 : Sơ ñồ khối Timer2……………………………………………...... ……... 45Hình 5.6 : Sơ ñồ khối PWM ………………………………………………... ……... 46Hình 5.7 : Xung ra từ PWM ………………………………………………... ……... 47Hình 5.8 : Sơ ñồ khối ADC ………………………………………………… ……... 48Hình 5.9 : Cổng giao tiếp RS232……………………………………………. ……... 50Hình 5.10 : Mạch ñơn giản …………………………………... ……………............. 54Hình 5.11 : Xung PWM ……………………………………………….......... ……... 54Hình 5.12 : Mạch cầu H …………………………………………………….. ……... 55Hình 5.13 : IC L298N ………………………………………………………. ……... 55Hình 5.14 : Sơ ñồ chân L298N ……………………………………………... ……... 56Hình 5.15 : Sơ ñồ nguyên lý của L298N …………………………………… ……... 57Hình 6.1 : Sơ ñồ khối nguồn ………………………………………………... ……... 58Hình 6.2 : Sơ ñồ khối ñiều khiển trung tâm ………………………………… ……... 58Hình 6.3 : Sơ ñồ khối ñiều khiển ñộng cơ ………………………………...... ……... 59Hình 6.4 : Sơ ñồ khối truyền thông RS232………………………………...... ……... 60Hình 6.5 : Mạch ñiều khiển ………………………………………………… ……... 61Hình 6.6 : Mạch ñiều khiển ………………………………………………… ……... 61Hình 6.7 : Mạch công suất ………………………………………………….. ……... 62Hình 6.8 : Mạch công suất …………………………………………….......... ……... 62Hình 7.1 : Ảnh gốc cần xử lý ……………………………………………...... ……... 64Hình 7.2 : Ảnh của ma trận ñỏ ……………………………………………… ……... 65Hình 7.3 : Ảnh grayscale từ ảnh gốc ……………………………………...... ……... 65Hình 7.4 : Ảnh thu ñược khi lấy màu ñỏ …………………………………… ……... 66Hình 7.5 : Giảm nhiễu ……………………………………………………… ……... 66Hình 7.6 : Ảnh nhị phân ………………………………………………...…….......... 67Hình 7.7 : Loại bỏ ñối tượng nhỏ …………………………………… ……...……... 67Hình 7.8 : Xác ñịnh tâm và vẽ hình chữ nhật xung quanh …………………. ……... 68Hình 7.9 : Mặt phẳng ảnh …………………………………………………... ……... 71Hình 7.10 : Biểu diễn ñối tượng di chuyển trên mặt phẳng ảnh…………….. ……... 72Hình 7.11 : Giao diện ñiều khiển viết bằng Matlab ………………………… ……... 73Hình 8.1 : Hình ảnh thực tế ………………………………………………….……... 74Hình 8.2 : Hình ảnh thực tế ………………………………………………….……... 75Hình 8.3 : Hình ảnh thực tế ………………………………………………….……... 75Hình 8.4 : Hình ảnh thực tế ………………………………………………….……... 76Hình 8.5 : Hình ảnh thực tế ………………………………………………….……... 76

Page 10: Cơ sở thiết kế robot tự hành

DANH SÁCH BẢNG

Bảng Trang Bảng 3.1 : Chức năng các chân IC PT2262…………………………...…...……...... 19 Bảng 3.2 : Mức logic của 4 chân dữ liệu ………………………...…...……............. 22 Bảng 3.3 : Chức năng các chân IC PT2272………………………...…...…….......... 23 Bảng 5.1 : Cấu hình cổng A ………………………...…...……................................. 41 Bảng 5.2 : Cấu hình cổng B ………………………...…...……................................. 41 Bảng 5.3 : Cấu hình cổng C ………………………...…...……................................. 42 Bảng 5.4 : Cấu hình cổng D ………………………...…...……................................. 42 Bảng 5.5 : Cấu hình cổng E ………………………...…...……................................. 43 Bảng 5.6 : Cấu hình Prescale Timer0………………………...…...……................... 44 Bảng 5.7 : Cấu hình khối CCP ………………………...…...……...... …………….. 47 Bảng 5.8 : Cấu hình xung nhịp cho ADC ……………………...…...……................ 48 Bảng 5.9 : Chức năng các chân L298N ……………...…...……............................... 56 Bảng 7.1 : Các loại thiết bị Webcam ………………...…...……............................... 69 Bảng 7.2 : Tập lệnh ñiều khiển robot ………………………...…...……................... 72

Page 11: Cơ sở thiết kế robot tự hành

Chương 1: Tổng quan về ñề tài

SV: ðẶNG QUANG VINH 1

CHƯƠNG 1

Tổng quan về ñề tài 1.1 ðặt vấn ñề:

Cùng với công cuộc công nghiệp hóa – hiện ñại hóa ñất nước, lĩnh vực tự ñộng hóa có những bước tiến vượt bậc và trở thành yếu tố quan trọng không thể thiếu của nền công nghiệp hiện ñại. Khi nói ñến tự ñộng hóa là nói ñến sự thay thế dần dần ñến hoàn toàn các hoạt ñộng chân tay bằng máy móc, trong ñó robot tự hành là một phần quan trọng không thể thiếu. Ngày nay robot tự hành ngày càng ñược hoàn thiện và chứng tỏ vai trò của mình trong ứng dụng công nghiệp và sinh hoạt ñời sống.

ðề tài này tìm hiểu và xây dựng mô hình robot tự hành như một phần cơ sở bao gồm cả về mạch ñiện phần cứng và phần mềm ñiều khiển robot tự hành.

Mặc dù hoạt ñộng của các robot thực tế bao gồm rất nhiều thao tác, ñề tài này chỉ giới hạn ở hoạt ñộng di chuyển của robot tự hành, và phần mềm ứng dụng tập trung vào hiện thực giải pháp ñiều khiển dẫn ñường cho robot.

1.2 Giới thi ệu chung: 1.2.1 Robot tự hành:

Robot tự hành hay robot di ñộng (Mobile Robot, thường gọi tắt là Mobot) ñược ñịnh nghĩa là một loại xe robot có khả năng tự di chuyển, tự vận ñộng (có thể lập trình ñược) dưới sự ñiều khiển tự ñộng ñể thực hiện công việc ñược giao.

Tiềm năng ứng dụng của robot tự hành hết sức rộng lớn. Có thể kể ñến robot vận chuyển vật liệu, hàng hóa trong các tòa nhà, nhà máy, cửa hàng, sân bay và thư viện; robot phục vụ quét dọn ñường phố, khoang chân không; robot kiểm tra trong môi trường nguy hiểm; robot canh gác, do thám; robot khám phá không gian, di chuyển trên hành tinh; robot hàn, sơn trong nhà máy; robot xe lăn phục vụ người khuyết tật; robot phục vụ sinh hoạt gia ñình v.v...

Mặc dù nhu cầu ứng dụng cao, nhưng những hạn chế chưa giải quyết ñược của robot tự hành, như chi phí chế tạo cao ñã không cho phép chúng ñược sử dụng rộng rãi. Một nhược ñiểm khác của robot tự hành phải kể ñến là còn thiếu tính linh hoạt và thích ứng khi làm việc ở những vị trí khác nhau. Bài toán ñiều khiển dẫn ñường cho robot tự hành cũng không phải là bài toán ñơn giản.

Trong luận văn tốt nghiệp này, giải pháp ñiều khiển dẫn ñường cho robot tự hành sẽ ñược giải quyết ở mức ñộ không quá phức tạp.

Page 12: Cơ sở thiết kế robot tự hành

Chương 1: Tổng quan về ñề tài

SV: ðẶNG QUANG VINH 2

a) b)

c) d)

e) f)

Hình 1.1 – Một số hình ảnh về robot tự hành

a) Robot Spirit của NASA thám hiểm sao Hỏa – b) Robot AQUA hoạt ñộng dưới nước

c) Robot SRR và FIDO của NASA - d) Spiderbot di chuyển bằng chân trên sao Hỏa

e) Robot nghiên cứu vùng cực Bắc – f) iRobot Roomba hút bụi

Page 13: Cơ sở thiết kế robot tự hành

Chương 1: Tổng quan về ñề tài

SV: ðẶNG QUANG VINH 3

1.2.2 Robot bám ñối tượng: Hệ thống ñiều khiển rô bốt có thị giác ñược sử dụng ñể theo dõi mục tiêu di ñộng

trong các ứng dụng công nghiệp, quốc phòng và xã hội. Hệ thống thị giác có thể ñược phân thành 2 lớp, theo như cấu trúc của hệ, ñó là hệ có camera gắn cố ñịnh và hệ có camera gắn trên tay máy (eye-in-hand). Trong hệ camera cố ñịnh, camera ñược gắn cố ñịnh so với hệ toạ ñộ thực, thu thập ảnh của cả mục tiêu và cả môi trường. Mục tiêu của hệ này là cung cấp tín hiệu ñiều khiển sao cho tay máy ñạt ñược vị trí mong muốn. Mục ñích của cấu truc eye-in-hand là ñiều khiển tay máy sao cho ảnh của mục tiêu cố ñịnh hay di ñộng luôn ñược duy trì ở vị trí mong muốn trên mặt phẳng ảnh thu ñược. Trên cơ sở ảnh thu ñược từ camera, ñược số hoá và tích hợp trong vòng ñiều khiển phản hồi, hệ thống ñiều khiển các khớp của tay máy.

Một thách thức của thị giác máy là việc phân loại ñối tượng. Một robot có thể phải ñối mặt với nhiều ñối tượng khác nhau, trong khi ñó chỉ có một mục tiêu quan tâm, còn các ñối tượng khác thì không.

ðể nhận biết ñược thông tin về vị trí của mục tiêu trong môi trường ñộng, các ñặc trưng của mục tiêu rất quan trọng. Các ñiểm lỗ, các góc cạnh, các ñặc ñiểm hình học của mục tiêu ñược phân tích qua quá trình nhận dạng.

Hình 1.2: Robot Pops (nguồn: slashgear.com)

Page 14: Cơ sở thiết kế robot tự hành

Chương 1: Tổng quan về ñề tài

SV: ðẶNG QUANG VINH 4

Hình 1.3: Robot MIDbo (nguồn: telepresenceoptions.com)

Hình 1.4: PANrobot (nguồn: mobilerobot.org)

Hình 1.5: Laptop robot (nguồn: mobilerobot.org)

Page 15: Cơ sở thiết kế robot tự hành

Chương 1: Tổng quan về ñề tài

SV: ðẶNG QUANG VINH 5

1.3 Sơ ñồ khối của robot tự hành: 1.3.1 Phân tích sơ ñồ khối của robot tự hành:

Một robot tự hành có các khối cơ bản sau:

Hình 1.6 – Sơ ñồ khối robot tự hành

Cảm biến (Sensor): thu nhận các tín hiệu từ môi trường hoạt ñộng và biến ñổi thành tín hiệu ñiện. Có nhiều loại cảm biến thu nhận nhiều loại tín hiệu ngoài như: ánh sáng, nhiệt ñộ, ñộ ẩm, lực, khoảng cách, vận tốc, gia tốc, góc nghiêng, hình ảnh… Các robot tự hành hiện ñại ñược trang bị rất nhiều cảm biến hiện ñại cho phép robot thích nghi tốt với môi trường và hoạt ñộng chính xác hơn.

Mạch cảm biến có nhiệm vụ tiền xử lý các tín hiệu ñiện từ cảm biến ñưa ñến, như khuếch ñại, biến ñổi sang tín hiệu số,… và ñưa sang khối xử lý trung tâm. Cảm biến và mạch cảm biến có thể ñược tích hợp trong một khối.

Khối xử lý trung tâm (CPU) là các mạch vi ñiều khiển, vi xử lý, hay máy tính với chương trình ñiều khiển. CPU phân tích các tín hiệu thu ñược, xử lý và ñưa ra quyết ñịnh ñiều khiển các hoạt ñộng cho robot.

Các tín hiệu ñiều khiển từ CPU thường không ñủ công suất ñể ñiều khiển trực tiếp các cơ cấu chấp hành, vì vậy cần có khối công suất làm nhiệm vụ nhận tín hiệu ñiều khiển từ CPU và cung cấp ñủ công suất ñể ñiều khiển cơ cấu chấp hành hoạt ñộng theo ñúng tín hiệu ñiều khiển ñó.

Cơ cấu chấp hành thường là các ñộng cơ, các van khí nén hay thủy lực,… sẽ truyền ñộng cho các kết cấu cơ khí vận ñộng robot.

Robot tự hành hoạt ñộng ñộc lập nên cần mang theo nguồn năng lượng cho mình thường là acquy hay pin năng lượng mặt trời.

Tất cả các khối trên ñược ñặt trên một khung sườn cơ khí. Kết cấu cơ khí cũng làm lớp vỏ bảo vệ các khối bên trong. ðồng thời, kết cấu cơ khí cũng bao gồm các chi tiết vận ñộng cho robot (bánh, xích, chân ñể di chuyển; cánh tay thao tác…).

Cảm biến

Mạch cảm biến

CPU

Phần mềm ñiều khiển

Khối công suất

Các cơ cấu chấp hành

Nguồn cung cấp

Page 16: Cơ sở thiết kế robot tự hành

Chương 1: Tổng quan về ñề tài

SV: ðẶNG QUANG VINH 6

1.3.2 Thiết kế mô hình robot tự hành: Trong ñề tài này, ta xây dựng một mô hình robot tự hành nhỏ, với công việc chính

tập trung vào việc tìm hiểu và thực hiện mạch, chương trình ñiều khiển cho robot sử dụng xử lý ảnh bằng Matlab. Vì vậy, thiết kế mô hình robot tự hành với sơ ñồ khối như sau:

Hình 1.7 – Mô hình robot tự hành

Cảm biến là một webcam, thu nhận hình ảnh và ñưa ñến Laptop. Trên Laptop, ta viết chương trình xử lý ảnh dùng Matlab, và xuất tín hiệu ñiều khiển

ñến mạch ñiều khiển thông qua cáp RS232. Driver board là khối công suất cho ñộng cơ. Sử dụng mạch cầu H ñể ñiều khiển

quay, ñảo chiều và ñiều khiển vận tốc cho ñộng cơ DC dùng phương pháp ñiều chế ñộ rộng xung PWM.

Các ñộng cơ DC sử dụng loại công suất nhỏ, ñủ ñể phát ñộng cho robot di chuyển. Dùng ñộng cơ DC 12V - 10W.

Nguồn ñiện: dùng acquy 12V – 1.2AH. Kết cấu cơ khí nhỏ gọn với khung sườn bằng nhôm và mica.

Webcam

Laptop

Matlab xử lý ảnh

Mạch ñiều khiển

Frame RS232

PIC16F877A

RS232

Mạch công suất

L298N ðộng cơ DC

Page 17: Cơ sở thiết kế robot tự hành

Chương 1: Tổng quan về ñề tài

SV: ðẶNG QUANG VINH 7

1.4 Nhiệm vụ cụ thể và giới hạn của luận văn:

1.4.1 Nhiệm vụ cụ thể của luận văn: Mục tiêu nghiên cứu của luận văn có thể chia thành hai phần chính như sau:

- Thứ nhất: Xây dựng phần mềm robot di ñộng bám ñối tượng sử dụng xử lý ảnh trong Matlab. - Thứ hai: Xây dựng khối phần cứng ñể kiểm nghiệm giải thuật của thuật toán ñã xây dựng sử dụng vi ñiều khiển PIC16F877A.

Như vậy công việc chính của luận văn là: � Thiết kế phần cơ cho robot (10%) � ðiều khiển robot bằng tay sử dụng remote (10%) � Tìm hiểu về xử lý ảnh và Matlab, lập trình cho robot bám ñối tượng (35%) � Thiết kế mạch phần cứng và lập trình PIC16F877A ñiều khiển robot (35%) � Tìm hiểu và lập trình truyền thông nối tiếp RS232 (10%)

1.4.2 Giới hạn của luận văn: � Robot chỉ thực hiện việc bám ñối tượng trong một số môi trường và ñối tượng

nhất ñịnh mà ít bị ảnh hưởng của nhiễu. � Mạch phần cứng và thuật toán ñiều khiển ñộng cơ chỉ thực hiện việc ñiều khiển

hướng của robot, nghĩa là không ñiều khiển tốc ñộ của robot. � ðiều khiển sử dụng trong robot là ñiều khiển vòng hở.

Page 18: Cơ sở thiết kế robot tự hành

Chương 2: Thiết kế phần cơ khí cho robot

SV: ðẶNG QUANG VINH 8

CHƯƠNG 2

Thiết kế phần cơ khí cho robot

2.1 Sơ lược về các phương pháp di chuyển của robot tự hành: Theo phương pháp chuyển ñộng trên mặt ñất, ta chia robot tự hành thành 2 lớp:

chuyển ñộng bằng chân (legged) và bằng bánh (wheeled). Trong lớp ñầu tiên, chuyển ñộng có ñược nhờ các chân cơ khí bắt chước chuyển

ñộng của con người và ñộng vật. Robot loại này có thể di chuyển rất tốt trên các ñịnh hình lồi lõm, phức tạp. Tuy nhiên, cách phối hợp các chân cũng như vấn ñề giữ thăng bằng là công việc cực kỳ khó khăn.

a) b)

Hình 2.1 – Robot di chuyển bằng chân

a) Robot Asimo hình người - b) Robot 6 chân mô phỏng chuyển ñộng của nhện

Lớp còn lại (di chuyển bằng bánh) tỏ ra thực tế hơn, chúng có thể làm việc tốt trên hầu hết các ñịa hình do con người tạo ra. ðiều khiển robot di chuyển bằng bánh cũng ñơn giản hơn nhiều, gần như luôn ñảm bảo tính ổn ñịnh cho robot. Lớp này có thể chia làm 3 loại robot: Loại chuyển ñộng bằng bánh xe (phổ biến), loại chuyển ñộng bằng vòng xích (khi cần mô men phát ñộng lớn hay khi cần di chuyển trên vùng ñầm lầy, cát và băng tuyết, vùng ñịa hình lồi lõm phức tạp), và loại hỗn hợp bánh xe và xích (ít gặp).

a) b)

Hình 2.2 – Robot di chuyển bằng bánh

a) di chuyển bằng bánh xe - b) di chuyển bằng bánh xích

Page 19: Cơ sở thiết kế robot tự hành

Chương 2: Thiết kế phần cơ khí cho robot

SV: ðẶNG QUANG VINH 9

2.1.1 Robot dùng bánh xe: Dạng ñơn giản nhất của robot tự hành là dùng bánh xe, ñược mô tả bằng các sơ ñồ ở

hình dưới :

Hình 2.3 – Các dạng robot dùng bánh xe

Robot tự hành dạng này bao gồm một hay nhiều bánh xe ñược lái ( ñược tô ñậm trong sơ ñồ ) , bánh tự do (không ñược tô) và bánh bẻ lái ( ñược khoanh tròn). Thiết kế ở bìa trái hình trên có một bánh ñược lái và cũng ñể bẻ lái. Thiết kế này ñòi hỏi 2 ñộng cơ, một ñể ñiều khiển vận tốc (lái) và một ñể bẻ lái. Thuận lợi của thiết kế này là việc ñiều khiển và bẻ lái ñược tách riêng biệt trên hai ñộng cơ, do ñó việc ñiều khiển bằng phần mềm trên các quỹ ñạo cong sẽ ñơn giản. Tuy nhiên, ñiểm bất lợi là robot không thể bẻ lái tại chỗ do bánh ñể bẻ lái không ñặt ở giữa.

Thiết kế ở giữa có tính chất lái vi sai (differential drive) ñược sử dụng khá phổ biến trong thiết kế robot tự hành. Sự kết hợp hai bánh xe lái ñộc lập cho phép robot có thể chạy thẳng, chạy vòng hoặc xoay tại chỗ. Việc ñiều khiển robot trên một quỹ ñạo nào ñó, ví dụ như một ñường cong ñã biết bán kính phải ñược làm bằng phần mềm. Một lợi thế nữa của thiết kế là các bánh xe ñược giữ cố ñịnh nên làm cho kết cấu cơ khí ñơn giản.

Cuối cùng thiết kế bìa phải, còn gọi là “Ackermann Steering”, có dạng giống như các xe vận tải trên ñường phố. Ta chỉ cần một ñộng cơ lái cả hai bánh sau và một ñộng cơ bẻ lái bằng cả hai bánh trước.

Một ñiều cần lưu ý là cả ba thiết kế trên ñều sử dụng hai ñộng cơ cho việc ñiều khiển vận tốc và bẻ lái.

ðiểm bất lợi chung cho các robot dùng bánh xe là nó ñòi hỏi mặt ñường hay mặt phẳng ñể di chuyển. Dùng bánh xích có thể khắc phục chuyện này nhưng nó rất khó ñể ñiều khiển chính xác như là bánh xe. Bánh xích cũng cần 2 ñộng cơ, một cho mỗi bên.

Page 20: Cơ sở thiết kế robot tự hành

Chương 2: Thiết kế phần cơ khí cho robot

SV: ðẶNG QUANG VINH 10

2.1.2 Robot dùng chân

Hình 2.4 – Robot dùng bánh xích và dùng chân

Giống như robot dùng bánh xích, robot dùng chân có thể di chuyển trên bề mặt phức tạp, hơn nữa còn có thể lên xuống cầu thang hoặc bước qua các chướng ngại vật nhỏ. Có rất nhiều kiểu thiết kế lọai này dựa vào số chân với một quy tắc tổng quát: càng nhiều chân càng dễ thăng bằng. Ví dụ robot 6 chân hình trên có thể di chuyển giống như robot 3 chân với 3 chân còn lại trên không. Một robot 3 chân thì có thể luôn giữ ñược trạng thái ổn ñịnh, với trọng tâm gần ñúng bằng tâm hình tam giác tao bởi ñiểm tiếp xúc của 3 chân với mặt ñất. Mỗi chân robot ñòi hỏi từ hai ñộng cơ trở lên tùy thuộc vào số bậc tự do mỗi chân. Các thiết kế cho robot 2 chân (biped robot) thường có hơn 5 ñộng cơ cho mỗi chân và do ñó số bậc tự do cũng tăng lên, ñòi hỏi yêu cầu về khối lượng và chi phí cho robot.

2.2 Mô hình kết cấu của robot:

Hình 2.5– Mô hình kết cấu của robot

ðề tài này thực hiện mô hình robot tự hành nhỏ di chuyển trên mặt phẳng, vì vậy, chọn giải pháp di chuyển bằng bánh xe sẽ ñơn giản cho thiết kế và thi công.

Kết cấu robot lựa chọn gồm 4 bánh, trong ñó có 2 bánh chủ ñộng ñược ñiều khiển ñộc lập và 2 bánh tự lượn có khả năng quay tùy ý. Với kết cấu cơ khí này robot có khả năng di chuyển rất linh hoạt: tiến, lùi, rẽ trái, rẽ phải và quay một góc bất kỳ.

Page 21: Cơ sở thiết kế robot tự hành

Chương 2: Thiết kế phần cơ khí cho robot

SV: ðẶNG QUANG VINH 11

2.3 Thực hiện mô hình cơ khí robot: Kết cấu cơ khí của mô hình robot ñược thiết kế và thi công dựa trên ước tính sơ bộ ñể

chịu ñược trọng lượng của robot và laptop. Không ñi sâu vào tính toán chi tiết về cơ khí. 2 ñộng cơ sử dụng là ñộng cơ DC 12V, công suất 10W. Có bộ giảm tốc.

Hình 2.6 – ðộng cơ

2 bánh xe làm bánh chủ ñộng cho robot, ñường kính ngoài 100mm, bề rộng 35mm.

Hình 2.7 – Bánh xe chủ ñộng

2 bánh xe tự lượn giúp robot cân bằng và ñể dễ bẻ hướng.

Hình 2.8 – Bánh xe tự lượn

Page 22: Cơ sở thiết kế robot tự hành

Chương 2: Thiết kế phần cơ khí cho robot

SV: ðẶNG QUANG VINH 12

Nguồn cung cấp cho robot là acquy 12V – 1.2Ah

Hình 2.9 – Acquy

Khung sườn robot hình hộp chữ nhật, làm bằng nhôm và mica

Hình 2.10 – Khung sườn

Page 23: Cơ sở thiết kế robot tự hành

Chương 2: Thiết kế phần cơ khí cho robot

SV: ðẶNG QUANG VINH 13

Ta ñược mô hình cơ khí hoàn chỉnh của robot tự hành:

Hình 2.11 – Mô hình cơ khí

Hình 2.12 – Mô hình cơ khí

Page 24: Cơ sở thiết kế robot tự hành

Chương 2: Thiết kế phần cơ khí cho robot

SV: ðẶNG QUANG VINH 14

Hình 2.13 – Mô hình cơ khí

Hình 2.14 – Mô hình cơ khí

Page 25: Cơ sở thiết kế robot tự hành

Chương 3: ðiều khiển robot từ xa

SV: ðẶNG QUANG VINH 15

CHƯƠNG 3

ðiều khiển robot từ xa 3.1 Lý thuyết ñiều khiển từ xa:

3.1.1 Giới thiệu: ðiều khiển từ xa là việc ñiều khiển một mô hình ở một khoảng cách nào ñó mà con

người không nhất thiết trực tiếp ñến nơi ñặt hệ thống. Khoảng cách ñó tùy thuộc vào từng hệ thống có mức ñộ phức tạp khác nhau, chẳng hạn như ñể ñiều khiển từ xa một phi thuyền ta cần phải có hệ thống phát và thu mạnh, ngược lại ñể ñiều khiển một trò chơi ñiện tử từ xa ta chỉ cần một hệ thống phát và thu yếu hơn.

Trong sinh hoạt hằng ngày của con người như những trò chơi giải trí (robot, xe ñiều khiển từ xa…) cho ñến những ứng dụng gần gũi với con người cũng ñược cải tiến cho phù hợp với việc sử dụng và ñạt mức tiện lợi nhất. ðiều khiển từ xa ñã thâm nhập vào vấn ñề này do ñó cho ra những loại tivi ñiều khiển từ xa, ñầu video, vcd, cd…ñến quạt bàn tất cả ñều ñược ñiều khiển từ xa. Như vậy,có thể thấy công nghệ ñiều khiển từ xa có tầm quan trọng không thể thiếu trong thời ñại phát triển công nghệ như ngày nay.

3.1.2 ðiều khiển từ xa dùng tia hồng ngoại: Ánh sáng hồng ngoại (tia hồng ngoại) là ánh sáng không thể nhìn thấy ñược bằng mắt

thường, có bước sóng khoảng 0.8µm ñến 0.9µm, tia hồng ngoại có vận tốc truyền bằng vận tốc ánh sáng.

Tia hồng ngoại có thể truyền ñi ñược nhiều kênh tín hiệu. Nó ứng dụng rộng rãi trong công nghiệp. Lượng thông tin ñược truyền ñi với ánh sáng hồng ngoại lớn gấp nhiều lần so với sóng ñiện từ mà người ta vẫn dùng.

Tia hồng ngoại dễ bị hấp thụ, khả năng xuyên thấu kém. Trong ñiều khiển từ xa chùm tia hồng ngoại phát ñi hẹp, có hướng do ñó khi thu phải ñúng hướng.

3.1.3 ðiều khiển từ xa dùng sóng vô tuyến: Hệ thống vô tuyến là hệ thống truyền tín hiệu từ nơi này sang nơi khác bằng sóng ñiện

từ. Tín hiệu thông tin ñược truyền ñi từ nơi phát ñược chuyển thành tín hiệu ñiện, sau ñó ñược mã hóa ñể truyền ñi. Tại nơi thu tín hiệu ñiện sẽ ñược giải mã, tái tạo lại thông tin ban ñầu. Việc ñiều chế tín hiệu ñiện trong hệ thống vô tuyến, truyền tín hiệu là quá trình ñặt tín hiệu thông tin vào sóng mang có tần số cao hơn ñể truyền ñi. Tại máy thu tín hiệu sẽ loại bỏ thành phần sóng mang, chỉ nhận và xử lý tái tạo lại tín hiệu thông tin, ñây là quá trình giải mã ñiều chế.

Hệ thống ñiều khiển từ xa dùng sóng vô tuyến bao gồm máy phát và máy thu. Máy phát có nhiệm vụ phát ra lệnh ñiều khiển truyền ra môi trường dưới dạng sóng ñiện từ mang theo tin tức ñiều khiển. Máy thu thu tin tức từ môi trường, xử lý tin tức và ñưa ra lệnh ñiều khiển ñến mạch chấp hành. ðặc ñiểm của hệ thống này là phải dùng ăngten ñể bức xạ tín hiệu ñối với máy phát, dùng ăngten ñể thu tín hiệu ñối với máy thu.

Page 26: Cơ sở thiết kế robot tự hành

Chương 3: ðiều khiển robot từ xa

SV: ðẶNG QUANG VINH 16

3.1.4 Ưu và khuyết ñiểm của ñiều khiển từ xa dùng tia hồng ngoại: Ưu ñiểm:

• Không dây dẫn.

• Led phát và thu nhỏ, gọn dễ thiết kế lắp ñặt và có ñộ tin cậy cao.

• Áp cung cấp thấp, công suất tiêu tán nhỏ.

• ðiều khiển ñược nhiều thiết bị.

• Tính khả thi cao, linh kiện dễ tìm thấy và thi công dễ. Khuyết ñiểm:

• Tầm xa bị hạn chế.

• Dòng ñiện cao tức thời.

• Nhiễu hồng ngoại do các nguồn nhiệt xung quanh ta phát ra nên gây ảnh hưởng và hạn chế tầm phát. Do ñó chỉ dùng trong phòng, kho hoặc nơi có nhiệt ñộ môi trường ảnh hưởng thấp.

• Hạn chế khi bị vật cản nên không thể phát xa ñược.

3.1.5 Ưu và khuyết ñiểm của ñiều khiển từ xa dùng sóng vô tuyến: Ưu ñiểm:

• Truyền ñạt tín hiệu với khoảng cách xa.

• Không bị ảnh hưởng nhiều ñối với vật cản.

• Tầm phát rộng nhiều hướng khác nhau. Khuyết ñiểm:

• Khi phát hay thu ñều cần có ăngten.

• Làm cho không gian bị bão hòa, gây nhiễu vô tuyến.

• Hay bị ảnh hưởng nhiễu gây méo dạng hoặc sai tín hiệu nên không ñiều khiển ñược.

• Vô tuyến bị nhiễu nên hệ thống mã hóa phức tạp hơn. Kết luận:

Sau khi so sánh phân tích những thuận lợi và khó khăn cơ bản, tôi nhận thấy phương án ñiều khiển từ xa bằng sóng vô tuyến có những ưu ñiểm vượt trội, ñược ứng dụng nhiều trong các thiết bị ñiện. Trong phạm vi ñề tài này tôi quyết ñịnh dùng phương pháp ñiều khiển từ xa bằng sóng vô tuyến vào việc ñiều khiển từ xa cho robot di chuyển tiến, lùi, rẽ phải, rẽ trái và thay ñổi vận tốc của robot.

Page 27: Cơ sở thiết kế robot tự hành

Chương 3: ðiều khiển robot từ xa

SV: ðẶNG QUANG VINH 17

3.2 Tổng quát: Bất cứ một robot nào cũng ñược ñiều khiển ở hai chế ñộ: ñiều khiển bằng tay từ xa

và tự ñộng. ðiều khiển từ xa có tầm quan trọng không thể thiếu trong robot vì nó gần gũi với con người, phù hợp với việc sử dụng và ñạt mức tiện lợi nhất.

Hình 3.1 – Sơ ñồ khối ñiều khiển từ xa

� Mạch phát tín hiệu

� NÚT BẤM: có 8 nút bấm ñể người sử dụng ñiều khiển robot từ xa

� MÃ HÓA: dùng IC PT2262 ñể mã hóa dữ liệu từ nút bấm rồi phát ñi.

� MẠCH PHÁT SÓNG: là mạch công suất phát sóng RF tần số 315MHz.

� Mạch nhận tín hiệu

� MẠCH NHẬN SÓNG: là mạch công suất nhận sóng RF tần số 315MHz.

� GIẢI MÃ: dùng IC PT2272 giải mã tín hiệu, sau ñó truyền dữ liệu cho vi

ñiều khiển.

� VI ðIỀU KHIỂN: nhận dữ liệu từ mạch giải mã từ ñó ra lệnh ñiều khiển

robot.

MÃ HÓA MẠCH PHÁT SÓNG NÚT BẤM

VI ðIỀU KHIỂN BÁNH XE MẠCH NHẬN SÓNG GIẢI MÃ

REMOTE

Page 28: Cơ sở thiết kế robot tự hành

Chương 3: ðiều khiển robot từ xa

SV: ðẶNG QUANG VINH 18

3.3 Phần cứng bên phát tín hiệu: 3.3.1 Sơ lược về IC mã hoá PT2262: ðây là IC tích hợp, ñi cặp là IC giải mã PT2272. Có chức năng mã hóa dữ liệu và ñịa

chỉ dạng song song thành mã dạng nối tiếp ñể phù hợp với các module phát vô tuyến và hồng ngoại. Nó có tất cả 12 chân ñịa chỉ 3 trạng thái từ ñó cung cấp số mã ñịa chỉ lên ñến 531.441 (3 mũ 12). Vì thế nó nâng cao tính bảo mật và tránh trường hợp truyền sai ñịa chỉ hoặc trùng ñịa chỉ.

Hình 3.2 – IC PT2262

Tên chân I/O Mô tả

A0-A5 I - 6 chân ñịa chỉ từ A0-A5.

- Mỗi chân có thể có 3 trạng thái: 0, 1 hoặc f (ñể nổi).

A6/D5-A11/D0 I - Vừa 6 chân ñịa chỉ từ A6-A11, vừa 6 chân dữ liệu từ D0-D5.

- Khi những chân này ñược dùng làm chân ñịa chỉ, chúng có

thể có 3 trạng thái: 0,1 hoặc f.

- Khi những chân này ñược dùng làm chân dữ liệu, chúng chỉ

có thể có 2 trạng thái: 0 hoặc 1.

Page 29: Cơ sở thiết kế robot tự hành

Chương 3: ðiều khiển robot từ xa

SV: ðẶNG QUANG VINH 19

/TE I - Chân cho phép truyền tín hiệu, tích cực mức thấp.

- PT2262 sẽ xuất mã xung tới chân DOUT khi chân TE ñược

kéo xuống mức thấp.

OSC1 O

OSC2 I

- 2 chân tạo dao ñộng bên trong.

- Một ñiện trở ñược kết nối giữa 2 chân này ñể xác ñịnh tần số

cơ bản cho PT2262.

DOUT O - Mã xung ñược xuất ra theo từng kỳ tới chân này.

- Khi PT2262 không truyền tín hiệu, DOUT ở mức ñiện áp

thấp.

Vcc - - Chân cấp nguồn.

Vss - - Chân nối mát.

Bảng 3.1 – Chức năng các chân IC PT2262

3.3.2 Quy tắc mã hoá với IC PT2262:

� Biểu diễn Bit code mã hóa

Cơ bản PT2262 sử dụng mỗi Bit gồm 3 trạng thái 0,1 và f. Mỗi trạng thái sẽ có 1 kiểu mã hóa Bit code khác nhau. Mỗi Bit code mã hóa chứa trong 32 chu kỳ tần số mã hóa của OSC (32α).

Hình 3.3 – Biểu diễn Bit code mã hoá

Page 30: Cơ sở thiết kế robot tự hành

Chương 3: ðiều khiển robot từ xa

SV: ðẶNG QUANG VINH 20

� Bit ñồng bộ (Synchronous Bit)

Là Bit ñược thêm vào trong 1 khung truyền ñể giúp ñồng bộ hóa quá trình mã hóa/giải mã. ðộ dài của Sync Bit là bằng 4 lần ñộ dài 1 bit ñịa chỉ/dữ liệu tức 128α.

Hình 3.4 – Biểu diễn Bit ñồng bộ

� Từ mã (Code Word)

Cấu trúc việc truyền các Bit ñịa chỉ/ dữ liệu và Bit ñồng bộ của PT2262 ñược xác ñịnh như sau:

Hình 3.5 – Biễu diễn từ mã

Với dòng PT2262 sử dụng 6 bits ñịa chỉ và 6 bits dữ liệu thì từ mã này ñược biểu diễn:

Như vậy với các dòng PT2262 với số ñường ñịa chỉ/dữ liệu khác nhau ta có các Code Word khác nhau theo dạng sau:

Page 31: Cơ sở thiết kế robot tự hành

Chương 3: ðiều khiển robot từ xa

SV: ðẶNG QUANG VINH 21

� Khung truy ền (Code Frame)

Một khung truyền bao gồm 4 từ mã (Code Word) phát liên tục nhau ra chân DOUT của PT2262 khi chân /TE là tích cực(/TE tích cục mức thấp).

Hình 3.6 – Biễu diễn khung truyền

� ðiện tr ở dao ñộng (Resistor Oscillator)

Tần số bộ dao ñộng tiêu biểu với nhiều giá trị ñiện trở cho cả PT2262 lẫn PT2272 ñược cho thấy ở bên dưới:

3.3.3 Cách thức mã hoá dữ liệu của PT2262 Khi chân /TE ở mức tích cực (/TE tích cực thấp), PT2262 phát liên tục 4 code word ra

chân DOUT, với 1 code word bao gồm Bit ñịa chỉ + Bit dữ liệu + Bit ñồng bộ (số lượng bit ñịa chỉ và bit dữ liệu tùy thuộc vào từng dòng sản phẩm).

3.3.4 Remote 8 nút tích hợp IC PT2262:

Hình 3.7 – Remote 8 nút tích hợp IC PT2262

Page 32: Cơ sở thiết kế robot tự hành

Chương 3: ðiều khiển robot từ xa

SV: ðẶNG QUANG VINH 22

Khối phát lệnh ñiều khiển: là 8 nút bấm ñược kết nối tới 4 chân dữ liệu (D0, D1, D2, D3) của IC mã hóa PT2262. Mức logic của 4 chân dữ liệu khi nhấn các nút như sau:

Nút D0 D1 D2 D3

1 0 0 0 1

2 0 0 1 0

3 0 0 1 1

4 0 1 0 0

5 0 1 0 1

6 0 1 1 0

7 0 1 1 1

8 1 0 0 0

Bảng 3.2 – Mức logic của 4 chân dữ liệu

3.4 Phần cứng bên thu tín hiệu: 3.4.1 Sơ lược về IC giải mã PT2272:

Hoàn toàn tương tự như IC mã hóa PT2262, ta có sơ ñồ chân của IC giải mã PT2272:

Hình 3.8– IC PT2272

Page 33: Cơ sở thiết kế robot tự hành

Chương 3: ðiều khiển robot từ xa

SV: ðẶNG QUANG VINH 23

Tên chân I/O Mô tả

A0-A5 I - 6 chân ñịa chỉ từ A0-A5.

- Mỗi chân có thể có 3 trạng thái: 0, 1 hoặc f (ñể nổi).

A6/D5-A11/D0 I/O - Vừa 6 chân ñịa chỉ từ A6-A11 (input), vừa 6 chân dữ liệu từ

D0-D5 (output), phụ thuộc loại PT2272 ñược dùng.

- Khi ñược dùng làm các chân ñịa chỉ (input) thì mỗi chân có

thể có 3 trạng thái: 0, 1 hoặc f.

- Khi ñược dùng làm các chân dữ liệu (output), các chân này

sẽ ñược lái lên Vcc nếu ñịa chỉ giải mã từ mã xung nhận

ñược trùng với ñịa chỉ thiết lập tại các chân ñịa chỉ ở

PT2272 và bit dữ liệu tương ứng nhận ñược là bit “1”.

Ngược lại, chúng ñược lái lên Vss.

DIN I - Chân nhận dữ liệu từ bộ thu sóng.

OSC1 O

OSC2 I

- 2 chân tạo dao ñộng bên trong.

- Một ñiện trở ñược kết nối giữa 2 chân này ñể xác ñịnh tần số

cơ bản cho PT2272.

VT O - PT2272 nhận ñược mã xung truyền tới hợp lệ sẽ ñưa chân

VT lên mức cao.

Vcc - - Chân cấp nguồn.

Vss - - Chân nối mát.

Bảng 3.3 – Chức năng các chân IC PT2272

Page 34: Cơ sở thiết kế robot tự hành

Chương 3: ðiều khiển robot từ xa

SV: ðẶNG QUANG VINH 24

3.4.2 Cách thức giải mã dữ liệu của PT2272 IC PT2272 sẽ trong trạng thái chờ khi bật nguồn, khi có tín hiệu từ bộ mã hoá thì sẽ

xuất hiện một tín hiệu ở ngõ DIN cho phép nhận tín hiệu. Sau ñó dựa vào cách thức mã hóa của PT2262 ñể giải mã thành dữ liệu. ðịa chỉ ñưa vào sẽ ñược so sánh phần ñịa chỉ ñã ñược quy ñịnh sẵn trên các chân ñịa chỉ của PT2272. Sau khi so sánh nếu ñịa chỉ giống nhau thì sẽ thực hiện giải mã ñể xuất ra tín hiệu song song 4 bit ñồng thời chân VT ñược kích ñể thông báo rằng dữ liệu là hợp lệ.

3.4.3 Mạch thu sóng tích hợp IC PT2272:

Hình 3.9 Mạch thu sóng tích hợp IC PT2272

Page 35: Cơ sở thiết kế robot tự hành

Chương 4: Giới thiệu về Matlab và xử lý ảnh

SV: ðẶNG QUANG VINH 25

CHƯƠNG 4

Giới thiệu về Matlab và xử lý ảnh

4.1 Giới thi ệu chung về phần mềm Matlab: 4.1.1 Khái niệm về Matlab: Matlab là một ngôn ngữ lập trình thực hành bậc cao ñược sử dụng ñể giải các bài toán

về kỹ thuật. Matlab tích hợp ñược việc tính toán, thể hiện kết quả, cho phép lập trình, giao diện làm việc rất dễ dàng cho người sử dụng. Dữ liệu cùng với thư viện ñược lập trình sẵn cho phép người sử dụng có thể có ñược những ứng dụng sau ñây:

� Sử dụng các hàm có sẵn trong thư viện, các phép tính toán học thông thường. � Cho phép lập trình tạo ra những ứng dụng mới. � Cho phép mô phỏng các mô hình thực tế. � Phân tích, khảo sát và hiển thị dữ liệu. � Với phần mềm ñồ hoạ cực mạnh. � Cho phép phát triển, giao tiếp với một số phần mềm khác như C++, Fortran.

4.1.2 Cấu trúc dữ liệu của Matlab và các ứng dụng: Matlab là một hệ thống tương giao, các phần tử dữ liệu là một mảng (mảng này không

ñòi hỏi về kích thước). Chúng cho phép giải quyết các vấn ñề liên quan ñến lập trình bằng máy tính, ñặc biệt sử dụng các phép tính về ma trận hay vectơ và có thể sử dụng ngôn ngữ C hoặc Fortran lập trình rồi thực hiện ứng dụng lập trình ñó bằng các câu lệnh gọi từ Matlab. Matlab ñược viết tắt từ chữ “MAT rix LAB oratory” tức là thư viện về ma trận, từ ñó phần mềm Matlab ñược viết nhằm cung cấp cho việc truy cập vào phần mềm ma trận một cách dễ dàng, phần mềm ma trận này ñược phát triển bởi các công trình Linpack và Eispack. Ngày nay Matlab ñược phát triển bởi Lapack và Artpack tạo nên một nghệ thuật phần mềm cho ma trận.

Dữ liệu của Matlab thể hiện dưới dạng ma trận (hoặc mảng - tổng quát), và có các kiểu dữ liệu ñược liệt kê sau ñây:

• Kiểu ñơn single, kiểu này có lợi về bộ nhớ dữ liệu vì nó ñòi hỏi ít byte nhớ hơn, kiểu dữ liệu này không ñược sử dụng trong các phép tính toán học, ñộ chính xác kém hơn.

• Kiểu double kiểu này là kiểu thông dụng nhất của các biến trong Matlab.

• Kiểu Sparse.

• Kiểu uint8, uint8, uint16, uint64,...

• Kiểu char ví dụ “Hello”.

• Kiểu cell.

• Kiểu Structure. Trong Matlab kiểu dữ liệu double là kiểu mặc ñịnh sử dụng trong các phép tính số học.

Page 36: Cơ sở thiết kế robot tự hành

Chương 4: Giới thiệu về Matlab và xử lý ảnh

SV: ðẶNG QUANG VINH 26

Matlab tạo ñiều kiện thuận lợi cho:

• Các khoá học về toán học.

• Các kỹ sư, các nhà nghiên cứu khoa học.

• Dùng Matlab ñể tính toán, nghiên cứu tạo ra các sản phẩm tốt nhất trong sản xuất. Toolbox là một công cụ quan trọng trong Matlab. Công cụ này ñược Matlab cung cấp cho phép ứng dụng các kỹ thuật ñể phân tích, thiết kế, mô phỏng các mô hình. Ta có thể tìm thấy toolbox ở trong mô trường làm việc của:

• Mạng nơron.

• Logic mờ.

• Simulink.

4.1.3 Hệ thống Matlab: Hệ thống giao diện của Matlab ñược chia thành 5 phần:

• Môi trường phát triển. ðây là nơi ñặt các thanh công cụ, các phương tiện giúp chúng ta sử dụng các

lệnh và các file, ta có thể liệt kê một số như sau: + Desktop. + Command Window. + Command History. + Browsers for viewinghelp.

• Thư viện, các hàm toán học bao gồm các cấu trúc như tính tổng, sin cosin atan, atan2 etc..., các phép tính ñơn giản ñến các phép tính phức tạp như tính ma trận nghich ñảo, trị riêng, chuyển ñổi fourier, laplace, symbolic library.

• Ngôn ngữ Matlab. ðó là các ngôn ngữ cao về ma trận và mảng, với các dòng lệnh, các hàm, cấu trúc dữ liệu vào, có thể lập trình hướng ñối tượng.

• ðồ hoạ trong Matlab. Bao gồm các câu lệnh thể hiện ñồ họa trong môi trường 2D và 3D, tạo các hình ảnh chuyển ñộng, cung cấp các giao diện tương tác giữa người sử dụng và máy tính.

• Giao tiếp với các ngôn ngữ khác. Matlab cho phép tương tác với các ngôn ngữ khác như C, Fortran, …

Page 37: Cơ sở thiết kế robot tự hành

Chương 4: Giới thiệu về Matlab và xử lý ảnh

SV: ðẶNG QUANG VINH 27

4.2 Giới thi ệu khái quát về ảnh số: 4.2.1 Các khái niệm cơ bản về ảnh: Ảnh số là tập hợp hữu hạn các ñiểm ảnh với mức xám phù hợp dùng ñể mô tả ảnh gần

với ảnh thật. Số ñiểm ảnh xác ñịnh ñộ phân giải của ảnh. Ảnh có ñộ phân giải càng cao thì càng thể hiện rõ nét các ñặt ñiểm của tấm hình càng làm cho tấm ảnh trở nên thực và sắc nét hơn. a) ðiểm ảnh (Picture Element)

ðiểm ảnh (Pixel) là một phần tử của ảnh số tại toạ ñộ (x, y) với ñộ xám hoặc màu nhất ñịnh. Kích thước và khoảng cách giữa các ñiểm ảnh ñó ñược chọn thích hợp sao cho mắt người cảm nhận sự liên tục về không gian và mức xám (hoặc màu) của ảnh số gần như ảnh thật. Mỗi phần tử trong ma trận ñược gọi là một phần tử ảnh. b) Mức xám của ảnh

Mức xám là kết quả của sự biến ñổi tương ứng 1 giá trị ñộ sáng của 1 ñiểm ảnh với 1 giá trị nguyên dương. Thông thường nó xác ñịnh trong [0, 255] tuỳ thuộc vào giá trị mà mỗi ñiểm ảnh ñược biểu diễn. Các thang giá trị mức xám thông thường: 16, 32, 64, 128, 256 (Mức 256 là mức phổ dụng. Lý do: từ kỹ thuật máy tính dùng 1 byte (8 bit) ñể biểu diễn mức xám. Mức xám dùng 1 byte biểu diễn: 28 =256 mức, tức là từ 0 ñến 255). c) ðộ phân giải của ảnh

ðịnh nghĩa: ðộ phân giải (Resolution) của ảnh là mật ñộ ñiểm ảnh ñược ấn ñịnh trên một ảnh số ñược hiển thị.

Theo ñịnh nghĩa, khoảng cách giữa các ñiểm ảnh phải ñược chọn sao cho mắt người vẫn thấy ñược sự liên tục của ảnh. Việc lựa chọn khoảng cách thích hợp tạo nên một mật ñộ phân bổ, ñó chính là ñộ phân giải và ñược phân bố theo trục x và y trong không gian hai chiều.

Ví dụ: ðộ phân giải của ảnh trên màn hình CGA (Color Graphic Adaptor) là một lưới ñiểm theo chiều ngang màn hình: 320 ñiểm chiều dọc * 200 ñiểm ảnh (320*200). Rõ ràng, cùng màn hình CGA 12” ta nhận thấy mịn hơn màn hình CGA 17” ñộ phân giải 320*200. Lý do: cùng một mật ñộ (ñộ phân giải) nhưng diện tích màn hình rộng hơn thì ñộ mịn (liên tục của các ñiểm) kém hơn.

Page 38: Cơ sở thiết kế robot tự hành

Chương 4: Giới thiệu về Matlab và xử lý ảnh

SV: ðẶNG QUANG VINH 28

4.2.2 Các kiểu ảnh trong Matlab: a) Ảnh ñược ñịnh chỉ số (Indexed Images) Một ảnh chỉ số bao gồm một ma trận dữ liệu X và ma trận bản ñồ màu map. Ma trận dữ liệu có thể có kiểu thuộc lớp uint8, uint16 hoặc kiểu double. Ma trận bản ñồ màu là một mảng m x 3 kiểu double bao gồm các giá trị dấu phẩy ñộng nằm giữa 0 và 1. Mỗi hàng của bản ñồ chỉ ra các giá trị mà: red, green và blue của một màu ñơn. Một ảnh chỉ số sử dụng ánh xạ trực tiếp giữa giá trị của pixel ảnh tới giá trị trong bản ñồ màu. Màu sắc của mỗi pixel ảnh ñược tính toán bằng cách sử dụng giá trị tương ứng của X ánh xạ tới một giá trị chỉ số của map. Giá trị 1 chỉ ra hàng ñầu tiên, giá trị 2 chỉ ra hàng thứ hai trong bản ñồ màu …

Một bản ñồ màu thường ñược chứa cùng với ảnh chỉ số và ñược tự ñộng nạp cùng với ảnh khi sử dụng hàm imread ñể ñọc ảnh. Tuy nhiên, ta không bị giới hạn khi sử dụng bản ñồ màu mặc ñịnh, ta có thể sử dụng bất kì bản ñồ màu nào.

Hình 4.1 – Ma trận dữ liệu và ma trận bản ñồ màu

Page 39: Cơ sở thiết kế robot tự hành

Chương 4: Giới thiệu về Matlab và xử lý ảnh

SV: ðẶNG QUANG VINH 29

Hình 4.2 – Ảnh Index

b) Ảnh Grayscale Một ảnh ñược biểu diễn bởi một ma trận hai chiều, trong ñó giá trị của mỗi phần tử cho biết ñộ sáng ( hay mức xám ) của ñiểm ảnh ñó. Ma trận này có thể một trong các kiểu uint8, uint16 hoặc double. Ảnh biểu diễn theo kiểu này còn gọi là ảnh trắng ñen.

Hình 4.3 – Ảnh Grayscale

Page 40: Cơ sở thiết kế robot tự hành

Chương 4: Giới thiệu về Matlab và xử lý ảnh

SV: ðẶNG QUANG VINH 30

c) Ảnh nhị phân (Binary Images) Ảnh ñược biểu diễn bởi một ma trận hai chiều thuộc kiểu logical. Mỗi ñiểm ảnh chỉ có thể nhận một trong hai giá trị là 0 (ñen) hoặc 1 (trắng).

Hình 4.4 – Ảnh nhị phân

d) Ảnh RGB (RGB Images) Một ảnh RGB - thường ñược gọi là true-color, ñược lưu trữ trong Matlab dưới dạng một mảng dữ liệu có kích thước 3 chiều mxnx3 ñịnh nghĩa các giá trị màu red, green và blue cho mỗi pixel riêng biệt. Màu của mỗi pixel ñược quyết ñịnh bởi sự kết hợp giữa các giá trị R, G, B (Red, Green, Blue) ñược lưu trữ trong một mặt phẳng màu tại vị trí của pixel. ðịnh dạng file ñồ hoạ lưu trữ ảnh RGB giống như một ảnh 24 bits trong ñó R, G, B chiếm tương ứng 8 bit một. ðiều này cho phép nhận ñược 16 triệu màu khác nhau.

Hình 4.5 – Các mặt phẳng màu

Page 41: Cơ sở thiết kế robot tự hành

Chương 4: Giới thiệu về Matlab và xử lý ảnh

SV: ðẶNG QUANG VINH 31

Một mảng RGB có thể thuộc lớp double, uint8 hoặc uint16. Trong mộ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ành phầ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. Chẳng hạn, giá trị màu R, G, B của pixel (10, 5) ñượlưu trữ trong RGB(10, 5, 1), RGB(10, 5, 2) và RGB(10, 5, 3) tương ứng. ðể tính toán màu sắc của pixel tại hàng 2 và cột 3 chẳng hạn, ta nhìn vào bộ ba giá trị ñược lưu trữ trong (2, 3, 1:3). Giả sử (2, 3, 1) chứa giá trị 0.5176; (2, 3, 2) chứa giá trị 0.1608 và (2, 3, 3) chứa giá trị 0.0627 thì màu sắc của pixel tại (2, 3) sẽ là (0.5176, 0.1608, 0.0627).

Hình 4.6 – Ảnh RGB

Page 42: Cơ sở thiết kế robot tự hành

Chương 4: Giới thiệu về Matlab và xử lý ảnh

SV: ðẶNG QUANG VINH 32

4.3 Xử lý ảnh với Matlab: 4.3.1 Xử lý ảnh: Các bước cần thiết trong xử lý ảnh. ðầu tiên, ảnh tự nhiên từ thế giới ngoài ñược thu

nhận qua các thiết bị thu (như Camera, máy chụp ảnh). Trước ñây, ảnh thu qua Camera là các ảnh tương tự (loại Camera ống kiểu CCIR). Gần ñây, với sự phát triển của công nghệ, ảnh màu hoặc ñen trắng ñược lấy ra từ Camera, sau ñó nó ñược chuyển trực tiếp thành ảnh số tạo thuận lợi cho xử lý tiếp theo. Máy ảnh số hiện nay là một thí dụ gần gũi. Mặt khác, ảnh cũng có thể tiếp nhận từ vệ tinh; có thể quét từ ảnh chụp bằng máy quét ảnh. Hình dưới ñây mô tả các bước cơ bản trong xử lý ảnh.

Hình 4.7 – Các bước cơ bản trong xử lý ảnh

4.3.2 Các giai ñoạn xử lý ảnh: a) Thu nhận ảnh (Image Acquisition) - Ảnh ñược thu từ nhiều nguồn khác nhau:máy ảnh, máy quay phim, máy quét, ảnh vệ tinh… - Mục ñích: biến ñổi thông tin hình ảnh về các cấu trúc ñược lưu trữ trong máy tính, có thể hiển thị ra các thiết bị ngoại vi như là máy in, màn hình… - Gồm hai tiến trình: + Biến ñổi năng lượng quang học thành năng lượng ñiện. + Tổng hợp năng lượng ñiện thành ảnh hoặc ma trận số. b) Tiền xử lý (Image Processing) - Là quá trình sử dụng các kỹ thuật xử lý ảnh ñể làm ảnh tốt lên theo mục ñích sử dụng. - Mục ñích: + ðiều chỉnh ñộ chiếu sáng ñể khắc phục hậu quả của việc chiếu sáng không ñều. + Giảm nhỏ thành phần nhiễu của ảnh tức là các ñối tượng xuất hiện ngoài ý muốn. + Hiệu chỉnh giá trị ñộ sáng giữa nền và ñối tượng. + Chuẩn hoá ñộ lớn, màu, dạng của ảnh. + ðiều chỉnh bộ lọc ñể khuyếch ñại và nén các tần số.

Page 43: Cơ sở thiết kế robot tự hành

Chương 4: Giới thiệu về Matlab và xử lý ảnh

SV: ðẶNG QUANG VINH 33

c) Phân ñoạn (Segmentation) - Là quá trình phân chia nội dung các ñối tượng cần khảo sát ra khỏi ảnh. - Phân chia các ñối tượng tiếp giáp nhau. - Phân tách các ñối tượng riêng biệt thành các ñối tượng con. d) Biểu diễn ảnh (Image Representation)

ðầu ra ảnh sau phân ñoạn chứa các ñiểm ảnh của vùng ảnh (ảnh ñã phân ñoạn) cộng với mã liên kết với các vùng lận cận. Việc biến ñổi các số liệu này thành dạng thích hợp là cần thiết cho xử lý tiếp theo bằng máy tính. Việc chọn các tính chất ñể thể hiện ảnh gọi là trích chọn ñặc trưng (Feature Selection) gắn với việc tách các ñặc tính của ảnh dưới dạng các thông tin ñịnh lượng hoặc làm cơ sở ñể phân biệt lớp ñối tượng này với ñối tượng khác trong phạm vi ảnh nhận ñược.

Ví dụ: trong nhận dạng ký tự trên phong bì thư, chúng ta miêu tả các ñặc trưng của từng ký tự giúp phân biệt ký tự này với ký tự khác. e) Nhận dạng và nội suy ảnh (Image Recognition and Interpretation)

Nhận dạng ảnh là quá trình xác ñịnh ảnh. Quá trình này thường thu ñược bằng cách so sánh với mẫu chuẩn ñã ñược học (hoặc lưu) từ trước. Nội suy là phán ñoán theo ý nghĩa trên cơ sở nhận dạng.

Ví dụ: một loạt chữ số và nét gạch ngang trên phong bì thư có thể ñược nội suy thành mã ñiện thoại. Có nhiều cách phân loại ảnh khác nhau về ảnh. Theo lý thuyết về nhận dạng, các mô hình toán học về ảnh ñược phân theo hai loại nhận dạng ảnh cơ bản:

- Nhận dạng theo tham số. - Nhận dạng theo cấu trúc.

Một số ñối tượng nhận dạng khá phổ biến hiện nay ñang ñược áp dụng trong khoa học và công nghệ là: nhận dạng ký tự (chữ in, chữ viết tay, chữ ký ñiện tử), nhận dạng văn bản (Text), nhận dạng vân tay, nhận dạng mã vạch, nhận dạng mặt người… f) Cơ sở tri th ức (Knowledge Base)

Như ñã nói ở trên, ảnh là một ñối tượng khá phức tạp về ñường nét, ñộ sáng tối, dung lượng ñiểm ảnh, môi trường ñể thu ảnh phong phú kéo theo nhiễu. Trong nhiều khâu xử lý và phân tích ảnh ngoài việc ñơn giản hóa các phương pháp toán học ñảm bảo tiện lợi cho xử lý, người ta mong muốn bắt chước quy trình tiếp nhận và xử lý ảnh theo cách của con người. Trong các bước xử lý ñó, nhiều khâu hiện nay ñã xử lý theo các phương pháp trí tuệ con người. Vì vậy, ở ñây các cơ sở tri thức ñược phát huy.

Page 44: Cơ sở thiết kế robot tự hành

Chương 4: Giới thiệu về Matlab và xử lý ảnh

SV: ðẶNG QUANG VINH 34

4.4 Các hàm xử lý ảnh cơ bản trong Matlab: 4.4.1 ðọc và ghi dữ liệu ảnh:

Hàm imread ñọc các file ảnh với bất kỳ các ñịnh dạng ảnh ñã biết hiện nay và lưu lại dưới dạng một ma trận biểu diễn ảnh trong Matlab. Cú pháp : A=imread(filename,fmt) ü Hàm imwrite cho phép lưu một ảnh biểu diễn bằng một ma trận trong Matlab

thành một file ảnh dưới một trong các ñịnh dạng ñã biết. Cú pháp : imwrite(A,filename,fmt)

ü Hàm imfinfo dùng ñể xem các thông số của một file ảnh nào ñó.

Cú pháp : imfinfo(filename,fmt) Các thông tin ñược cung cấp bởi hàm imfinfo là : filename, filemoddate,

filesize, format, formatversion, width, height, bitdepth, colortype.

4.4.2 Chuyển ñổi giữa các kiểu dữ liệu, kiểu ảnh: a) Chuyển ñổi giữa các kiểu dữ liệu

Matlab cung cấp sẵn các hàm thực hiện chuyển kiểu cho các ma trận biểu diễn ảnh, bao gồm : im2double, im2uint8 và im2uint16.

Tuy nhiên, khi thực hiện chuyển kiểu giữa các dữ liệu ảnh cần lưu ý:

ü Khi chuyển từ một kiểu dữ liệu dùng nhiều bit sang một kiểu dữ liệu dùng it bit

hơn thì một số thông tin chi tiết về bức ảnh ban ñầu sẽ bị mất. Không phải lúc nào cũng có thể chuyển ñổi kiểu dữ liệu ñối với kiểu ảnh

indexed, vì các giá trị của ma trận ảnh xác ñịnh một ñịa chỉ trong bản ñồ màu chứ không phải là giá trị màu, do ñó không thể lượng tử hóa ñược. b) Chuyển ñổi giữa các kiểu ảnh

+ dither : Tạo một ảnh nhị phân từ một ảnh cường ñộ ñen trắng bằng cách trộn , tạo một

ảnh chỉ số từ một ảnh RGB bằng cách trộn (dither )

+ gray2ind : Tạo một ảnh chỉ số từ một ảnh cường ñộ ñen trắng .

+ grayslice : Tạo một ảnh chỉ số từ một ảnh cường ñộ ñen trắng bằng cách ñặt ngưỡng.

+ im2bw : Tạo một ảnh nhị phân từ một ảnh cường ñộ, ảnh chỉ số hay ảnh RGB trên cơ

sở của ngưỡng ánh sáng .

+ ind2gray : Tạo một ảnh cường ñộ ñen trắng từ một ảnh chỉ số.

+ ind2rgb : Tạo một ảnh RGB từ một ảnh chỉ số.

+ mat2gray : Tạo một ảnh cường ñộ ñen trắng từ dữ liệu trong một ma trận bằng cách

lấy tỉ lệ dữ liệu.

+ rgb2gray : Tạo một ảnh cường ñộ ñen trắng từ một ảnh RGB.

+ rgb2ind : Tạo một ảnh chỉ số từ một ảnh RGB.

Page 45: Cơ sở thiết kế robot tự hành

Chương 4: Giới thiệu về Matlab và xử lý ảnh

SV: ðẶNG QUANG VINH 35

4.4.3 Các phép toán số học cơ bản ñối với dữ liệu ảnh: Các phép toán số học cơ bản trên các dữ liệu ảnh bao gồm các phép cộng, trừ, nhân

và chia. Tuy nhiên, Matlab chỉ hỗ trợ các phép toán này trên kiểu double nên cần thực hiện chuyển ñổi kiểu trước khi thực hiện. ðể giảm bớt thao tác này, trong IPT (Image Processing Toolbox) có cung cấp các hàm thực hiện các phép toán số học trên ảnh mà có thể chấp nhận bất kỳ kiểu dữ liệu ảnh nào và trả về kết quả thuộc cùng kiểu với các toán hạng. Các hàm này cũng xử lý các dữ liệu tràn một cách tự ñộng.

ü Imabsdiff : z=imabsdiff(x,y)

ü Imadd : z=imadd(x,y,out_class)

ü Imcomplement : im2=imcomplement(im)

ü Imdivide : z=imdivide(x,y)

ü Imlincomb : z=imlincomb(k1,a1,k2,a2,…,kn,an,k,out_class)

ü Immultiply : z=immultiply(x,y)

ü Imsubstract : z=imsubstract(x,y)

4.4.4 Các hàm hiển thị ảnh trong Matlab: Matlab cung cấp hai hàm hiển thị cơ bản là image và imagesc. Ngoài ra trong IPT cũng có hai hàm hiển thị ảnh khác, ñó là imview và imshow.

ü Hàm image(X,Y,C) hiển thị hình ảnh biểu diễn bởi ma trận C kích thước M x N

lên trục tọa ñộ hiện hành. X, Y là các vector xác ñịnh vị trí các pixel C(1,1) và C(M,N) trong hệ trục hiện hành.

ü Hàm imagesc có chức năng tương tự như hàm image, ngoại trừ việc dữ liệu ảnh

sẽ ñược co giãn ñể sử dụng toàn bộ bản ñồ màu hiện hành.

ü Hàm imview cho phép hiển thị hình ảnh trên một cửa sổ riêng, nền Java, gọi là

Image Viewer. Image Viewer cung cấp các công cụ dò tìm và xác ñịnh các giá trị pixel một cách linh hoạt.

ü Hàm imshow cũng tạo một ñối tượng ñồ họa thuộc loại image và hiển thị ảnh

trên một figure. Hàm imshow sẽ tự ñộng thiết lập các giá trị của các ñối tượng image, axes và figure ñể thể hiện hình ảnh.

4.4.5 Các phép biến ñổi hình học: a) Phép nội suy ảnh

Nội suy là quá trình ước lượng giá trị của một ñiểm nằm giữa hai pixel có giá trị ñã biết. IPT cung cấp 3 phương pháp nội suy ảnh: nội suy theo các lân cận gần nhất, nội suy song tuyến tính và nội suy bicubic. Cả 3 phương pháp ñều thực hiện theo nguyên tắc chung: ñể xác ñịnh giá trị của một pixel ảnh nội suy, ta tìm một ñiểm trong ảnh ban ñầu tương ứng với pixel ñó, sau ñó giá trị của pixel ở ảnh mới sẽ ñược tính bằng trung bình có

Page 46: Cơ sở thiết kế robot tự hành

Chương 4: Giới thiệu về Matlab và xử lý ảnh

SV: ðẶNG QUANG VINH 36

trọng số của một tập các pixel nào ñó ở lân cận của ñiểm vừa xác ñịnh, trong ñó trọng số của các pixel phụ thuộc vào khoảng cách tới ñiểm này.

Phương pháp lân cận gần nhất (nearest neighbor) : pixel mới sẽ ñược gán giá trị của pixel chứa ñiểm tương ứng của nó trong ảnh ban ñầu

ü Phương pháp song tuyến tính (bilinear interpolation) : pixel mới sẽ ñược gán là

trung bình có trọng số của các pixel trong một lân cận kích thước 2 x 2.

ü Phương pháp bicubic, pixel mới sẽ ñược gán là trung bình có trọng số của các

pixel trong một lân cận kích thước 4 x 4. b) Thay ñổi kích thước ảnh

Hàm imresize cho phép người sử dụng thay ñổi kích thước ảnh. Ngoài kích thước ảnh mới, người sử dụng còn có thể xác ñịnh phương pháp nội suy sẽ dùng và loại bộ lọc dùng ñể chống aliasing. Cú pháp : b=imresize(a,m, method) :tạo ảnh gấp m lần ảnh a.

b=imresize(a,[mrows mcols],method) b=imresize(a,[mrows mcols],method,N) b=imresize(a,[mrows mcols],method,h)

Ví dụ : Lệnh sau tăng kích thước của ảnh I lên 1.25 lần. I = imread('circuit.tif'); J = imresize(I,1.25); imshow(I) figure, imshow(J)

Hình 4.8 – Tăng kích thước ảnh

Page 47: Cơ sở thiết kế robot tự hành

Chương 4: Giới thiệu về Matlab và xử lý ảnh

SV: ðẶNG QUANG VINH 37

c) Phép quay ảnh ðể thực hiện phép quay ảnh, ta có thể sử dụng hàm imrotate. Ngoài hai thông số

cơ bản là ảnh gốc và góc quay, người sử dụng cũng có thể xác ñịnh phương pháp nội suy sẽ dùng và kích thước của ảnh mới. Cú pháp : b=imrotate(a,angle)

b=imrotate(a,angle,method) b=imrotate(a,angle,method,Bbox)

Ví dụ : Lệnh sau quay một ảnh 35 ñộ ngược chiều kim ñồng hồ sử dụng nội suy song tuyến tính. I = imread('circuit.tif'); J = imrotate(I,35,'bilinear');

imshow(I) figure, imshow(J)

Hình 4.9 – Quay ảnh

d) Trích xuất ảnh Khi cần trích xuất một phần ảnh gốc, ta dùng hàm imcrop.

üXác ñịnh cụ thể vị trí của phần ảnh cần trích xuất (dưới dạng hình chữ nhật)

Cú pháp : x2=imcrop(x,map,rect) % indexed x2=imcrop(a,rect) % grayscale or RGB

trong ñó rect=[Xmin Ymin width height]

Page 48: Cơ sở thiết kế robot tự hành

Chương 4: Giới thiệu về Matlab và xử lý ảnh

SV: ðẶNG QUANG VINH 38

üSử dụng mouse ñể chọn phần ảnh cần trích xuất.

Ta không cần cung cấp thông số rect, khi thực hiện hàm này, con trỏ sẽ chuyển sang dạng chữ thập, người dùng sẽ kéo chuột ñể chọn phần ảnh cần trích xuất sau ñó thả chuột. Ví dụ : Hiển thị một ảnh và gọi hàm imcrop. Hàm imcrop hiển thị ảnh trong một hình và ñợi ta vẽ vùng chữ nhật cần xén ảnh.

imshow circuit.tif I=imcrop; imshow(I);

Hình 4.10 – Xén ảnh

Page 49: Cơ sở thiết kế robot tự hành

Chương 5: Các linh kiện sử dụng trong khối phần cứng

SV: ðẶNG QUANG VINH 39

CHƯƠNG 5

Các linh kiện sử dụng trong khối phần cứng

5.1 Cơ bản về PIC16F877A: 5.1.1 Pic là gì? PIC là viết tắt của “Programable Intelligent Computer”, tạm dịch là “ Máy tính

thông minh khả trình” do hãng Microchip Technology ñặt tên cho vi ñiều khiển ñầu tiên của họ và phát triển thành dòng họ vi ñiều khiển PIC sau này.

Vi ñiều khiển ñược sử dụng trong robot là PIC16F877A. Các vi ñiều khiển thuộc dòng PIC tỏ ra rất ổn ñịnh, các khối chức năng ñược hỗ trợ ñầy ñủ và giúp người dùng tiết kiệm thời gian thiết kế mạch cũng như lập trình. Hiện nay các loại vi ñiều khiển dòng PIC ñược sử dụng rất nhiều trong công nghiệp. Tiêu biểu nhất trong dòng vi ñiều khiển cấp trung của họ PIC là 16F877A.

Hình 5.1 – Sơ ñồ chân của PIC16F877A

5.1.2 ðặc ñiểm nổi bật của PIC16F877A: • Cấu trúc tập lệnh ñơn giản: 35 lệnh ñơn.

• CPU thiết kế theo kiến trúc RISC.

• Tần số hoạt ñộng lớn nhất: DC – 20MHz.

• Flash Program Memory: 8K x 14 words.

• Data Memory (RAM) : 368 x 8 bytes.

• EEPROM Data Memory: 256 x 8 bytes.

• Nạp chương trình và sửa lỗi onboard.

• Chế tạo theo công nghệ CMOS.

• Hỗ trợ nhiều tính năng mạnh mẽ

Page 50: Cơ sở thiết kế robot tự hành

Chương 5: Các linh kiện sử dụng trong khối phần cứng

SV: ðẶNG QUANG VINH 40

Hình 5.2 – Sơ ñồ khối của PIC16F877A

5.1.3 Các cổng vào ra: Vi ñiều khiển PIC16F877A có 5 cổng vào ra bao gồm:A, B, C, D, E. Trong ñó:

Cổng A: • Vào ra 6 bit, có ñịnh hướng. Khai báo ñịnh hướng vào ra ở thanh ghi TRISA. Nếu

bit TRISAx=1 thì chân RAx sẽ ñược ñinh nghĩa là lối vào và ngược lại.

• Thanh ghi lưu trạng thái các chân của cổng A là thanh ghi PORTA.

• Chân RA4 của cổng A ñược có thể ñược sử dụng ñể ñưa dao ñộng ñầu vào cho

Timer0 (T0CKI).

• Các chân còn lại của cổng A có thể ñược khai báo ñể ñược dùng như lối vào tương

tự. Các thanh ghi liên quan ADCON0, ADCON1.

Page 51: Cơ sở thiết kế robot tự hành

Chương 5: Các linh kiện sử dụng trong khối phần cứng

SV: ðẶNG QUANG VINH 41

Bảng 5.1 – Cấu hình cổng A

Cổng B:

• Vào ra số có ñộ rộng 8bit, có ñịnh hướng. Khai báo ñịnh hướng vào ra ở thanh ghi

TRISB. Nếu bit TRISBx=1 thì chân RBx sẽ ñược ñinh nghĩa là lối vào và ngược

lại.

• Thanh ghi lưu trạng thái các chân của cổng B là thanh ghi PORTB

• 3 chân của cổng B là : RB3,RB6,RB7 còn ñược sử dụng làm chân lập trình PGM,

PGC,PGD.

• 4 chân từ RB7:RB4 có ngắt on-change.

Bảng 5.2 – Cấu hình cổng B

Cổng C :

• Vào ra số có ñộ rộng 8bit, có ñịnh hướng. Khai báo ñịnh hướng vào ra ở thanh ghi

TRISC. Nếu bit TRISCx=1 thì chân RCx sẽ ñược ñinh nghĩa là lối vào và ngược

lại.

• Thanh ghi lưu trạng thái các chân của cổng C là thanh ghi PORTC.

• Các chân của cổng C ñều có bộ ñệm triger smitt.

• Cổng C còn ñược sử dụng cho 1 số khối chức năng khác.

Page 52: Cơ sở thiết kế robot tự hành

Chương 5: Các linh kiện sử dụng trong khối phần cứng

SV: ðẶNG QUANG VINH 42

Bảng 5.3 – Cấu hình cổng C

Cổng D :

• Vào ra số có ñộ rộng 8bit, có ñịnh hướng. Khai báo ñịnh hướng vào ra ở thanh ghi

TRISD. Nếu bit TRISDx=1 thì chân RDx sẽ ñược ñinh nghĩa là lối vào và ngược

lại.

• Thanh ghi lưu trạng thái các chân của cổng D là thanh ghi PORTD.

Bảng 5.4 – Cấu hình cổng D

Cổng E :

• Cổng E chỉ có 3 chân vào ra, có bộ ñệm triger smitt.

• Cổng E có thể ñược dùng như lối vào ra số hoặc tương tự. Thiết lập tại các thanh

ghi TRISE, ADCON1.

Page 53: Cơ sở thiết kế robot tự hành

Chương 5: Các linh kiện sử dụng trong khối phần cứng

SV: ðẶNG QUANG VINH 43

Bảng 5.5 – Cấu hình cổng E

5.1.4 Các khối Timer: Vi ñiều khiển PIC16F877A có 3 bộ timer: Timer 0:

• Là bộ ñếm 8bit, có thể ghi ñọc.

• Timer0 có 2 chế ñộ hoạt ñộng là : ñịnh thời hoặc ñếm.

• Khi hoạt ñộng Timer ñếm tiến từ giá trị ñược ghi trong thanh ghi TMR0 ñến 256.

Khi ñếm ñến 256 cờ tràn TMR0IF sẽ ñc bật lên.

• Time = (FOSC/4) x Prescale x ( 256 – TMR0 )

• Bit T0CS : chọn nguồn dao ñộng cho Timer0

� =1 nguồn dao ñộng ñược ñưa vào từ chân T0CKI.(Chế ñộ ñếm)

� =0 nguồn dao ñộng hệ thống

• Bit T0SE : Ở chế ñộ ñếm, chọn sườn xung

� =1 sườn xuống.

� =0 sườn lên.

• Bit PSA : Chọn prescale

� =1 prescale ñược dùng cho watchdog.

� =0 prescale ñược dùng cho timer0.

• Bit PS2:PS0 : chọn tỉ lệ chia cho Prescale

Page 54: Cơ sở thiết kế robot tự hành

Chương 5: Các linh kiện sử dụng trong khối phần cứng

SV: ðẶNG QUANG VINH 44

Bảng 5.6 – Cấu hình Prescale Timer0

Hình 5.3 – Sơ ñồ khối Timer0

Timer1:

Hình 5.4 – Sơ ñồ khối Timer1

Page 55: Cơ sở thiết kế robot tự hành

Chương 5: Các linh kiện sử dụng trong khối phần cứng

SV: ðẶNG QUANG VINH 45

• Là bộ ñếm 16 bit, có thể ghi ñọc. Giá trị timer ñược lưu trong 2 thanh ghi là

TMR1L và TMR1H.

• Khác với timer0, timer1 có bit bật và tắt timer.

• Timer1 có thể ñược dùng ñể ñinh thờI cho khối CPP.

• Khi Timer 1 ñược bật, timer sẽ ñếm từ giá trị ñược ghi trong 2 thanh ghi TMR1L

và TMR1H tới 0xFFFF, khi ñó cờ tràn TMR1IF ñược bật.

• Time = (FOSC/4) x Prescale x ( 0xFFFF – (( TMR1H x 0xFFFF ) + TMR1L)).

• Bit T1OSCEN: Chọn nguồn dao ñộng

� =1: sử dụng dao ñộng ngoài.

� =0: sử dụng nguồn dao ñộng hệ thống.

• Bit TMR1CS=1 timer1 hoạt ñộng như bộ ñếm, xung vào từ chân RC1.

• Bit TMR1ON: bật tắt timer1.

� =1 Bật.

� =0 Tắt.

• Bit T1CKPS1: T1CKPS0 : Chọn số chia cho prescale.

� 0:0 chia 1

� 0:1 chia 2

� 1:0 chia 4

� 1:1 chia 8

Timer2:

Hình 5.5 – Sơ ñồ khối Timer2

Page 56: Cơ sở thiết kế robot tự hành

Chương 5: Các linh kiện sử dụng trong khối phần cứng

SV: ðẶNG QUANG VINH 46

• Là bộ ñếm 16 bit, có thể ghi ñọc. Giá trị timer ñược lưu trong 2 thanh ghi là

TMR1L và TMR1H.

• Timer2 có bit bật và tắt timer.

• Timer1 có thể ñược dùng ñể ñinh thời cho khối PWM.

• Khi Timer 1 ñược bật, timer sẽ ñếm từ giá trị ñược ghi trong 2 thanh ghi TMR2L

và TMR2H tới 0xFFFF, khi ñó cờ tràn TMR2IF ñược bật.

• Timer 2 có cả prescale lẫn postscale.

• Các bit TOUTPS3: TOUTPS0 : Chọn thỉ lệ chia cho postscale.

• TMR2ON : bit bật tắt timer2.

• T2CKPS1: T2CKPS1 : Chọn tỉ lệ cho prescale

5.1.5 Các khối PWM: PIC16F877A có 2 khốI PWM nằm trong 2 khối CCP

Hình 5.6 – Sơ ñồ khối PWM

• ðộ rộng xung là dữ liệu 10 bit ñược lưu trong 2 thanh ghi CCPR1L và

OCPCON<5:4>

• Chu kì ñược quyết ñịnh bởI giá trị ghi trong thanh ghi PR2 và Timer2.

PWM period = [( PR2 + 1 ) x 4 x TOSC x ( TMR2 prescale value )

Page 57: Cơ sở thiết kế robot tự hành

Chương 5: Các linh kiện sử dụng trong khối phần cứng

SV: ðẶNG QUANG VINH 47

Hình 5.7 – Xung ra từ PWM

Các bước cài ñặt cho PWM:

• Ghi chu kì vào thanh ghi PR2.

• Ghi ñộ rộng xung vào 2 thanh ghi CCPR1L và CCP1CON<5:4>

• Chọn chân ra là chân RC2. Bằng cách xoá bit TRISC2.

• Ghi giá trị prescale của timer2. Cho phép Timer2.

• Cấu hình CCP ñể sử dụng PWM.

Bảng 5.7 – Cấu hình khối CCP

5.1.6 Khối ADC: Khối ADC của PIC16F877A là loại ADC xấp xỉ liên tiếp có 10 bit lối ra. ðiện áp

tham chiếu lựa chọn ñược bằng phần mềm, có thể là ñiện áp hệ thống, hoặc ñiện áp tham

chiếu ngoài ñược ñưa và từ chân RA2 và RA3.

Khi việc biến ñổi A/D hoàn tất cờ ADIF sẽ ñược bật.

Khối biến ñổi A/D có 4 thanh ghi là :

• Kết quả biến ñổi Byte cao: ADRESH

• Kết quả biến ñổi Byte thấp: ADRESL

• Hai thanh ghi ñiều khiển: ADCON0 và ADCON1

Page 58: Cơ sở thiết kế robot tự hành

Chương 5: Các linh kiện sử dụng trong khối phần cứng

SV: ðẶNG QUANG VINH 48

Hình 5.8 – Sơ ñồ khối ADC

• Thanh ghi ADCON0:

o Chọn nhịp xung ñồng hồ cho ADC.

Bảng 5.8 – Cấu hình xung nhịp cho ADC

o Các bit CHS2:CHS1:CHS0 : chọn kênh cho ADC

� 000 : kênh 0 ( AN0 )

� 001: kênh 1 ( AN1 )

� 010: kênh 2 ( AN2 )

� 011: kênh 3 ( AN3 )

� 100: kênh 4 ( AN4 )

Page 59: Cơ sở thiết kế robot tự hành

Chương 5: Các linh kiện sử dụng trong khối phần cứng

SV: ðẶNG QUANG VINH 49

� 101: kênh 5 ( AN5 )

� 110: kênh 6 ( AN6 )

� 111: kênh 7 ( AN7 )

o Bit GO/DONE : khi ADGO=1, ADC bắt ñầu biến ñổi.

o Bit ADON: bật tắt ADC.

5.1.7 Khối truyền thông nối tiếp UART: • Khối UART có thể ñược cấu hình ñể hoạt ñộng ở chế ñộ song công hoặc bán song

công.

• Chuẩn ñiện : bit 1 tương ứng mức ñiện áp 5v, bit 0 tương ứng với ñiện áp 0v.

• Data 7 bit hoặc 8 bit. Ở ñầu khung dữ liệu có 1 Bit start, cuối khung dữ liệu có 1

hoặc 2 bit stop.

• Khi nhận dữ liệu cờ ngắt RCIE và RCIF sẽ ñc bật.

• Tốc ñộ truyền ñược ghi vào thanh ghi SPBRG.

SPBRG = [(FOSC/16)/Speed] – 1

5.2 Giao tiếp RS232: 5.2.1 ðặt vấn ñề: Vấn ñề giao tiếp giữa PC và vi ñiều khiển rất quan trọng trong các ứng dụng ñiều

khiển, ño lường... Ghép nối qua cổng nối tiếp RS232 là một trong những kỹ thuật ñược sử dụng rộng rãi ñể ghép nối các thiết bị ngoại vi với máy tính. Nó là một chuẩn giao tiếp nối tiếp dùng ñịnh dạng không ñồng bộ, kết nối nhiều nhất là 2 thiết bị , chiều dài kết nối lớn nhất cho phép ñể ñảm bảo dữ liệu là 12.5 ñến 25.4m, tốc ñộ 20kbit/s ñôi khi là tốc ñộ 115kbit/s với một số thiết bị ñặc biệt. Ý nghĩa của chuẩn truyền thông nối tiếp nghĩa là trong một thời ñiểm chỉ có một bit ñược gửi ñi dọc theo ñường truyền. Có hai phiên bản RS232 ñược lưu hành trong thời gian tương ñối dài là RS232B và RS232C. Nhưng cho ñến nay thì phiên bản RS232B cũ và ít ñược dùng còn RS232C hiện vẫn ñược dùng và tồn tại thường ñược gọi là tên ngắn gọn là chuẩn RS232. Các máy tính thường có 1 hoặc 2 cổng nối tiếp theo chuẩn RS232C ñược gọi là cổng Com. Chúng ñược dùng ghép nối cho chuột, modem, thiết bị ño lường...Trên main máy tính có loại 9 chân hoặc lại 25 chân tùy vào ñời máy và main của máy tính. Việc thiết kế giao tiếp với cổng RS232 cũng tương ñối dễ dàng, ñặc biệt khi chọn chế ñộ hoạt ñộng là không ñồng bộ và tốc ñộ truyền dữ liệu thấp.

5.2.2 Ưu ñiểm của giao tiếp RS232: • Khả năng chống nhiễu của các cổng nối tiếp cao.

• Thiết bị ngoại vi có thể tháo lắp ngay cả khi máy tính ñang ñược cấp ñiện.

• Các mạch ñiện ñơn giản có thể nhận ñược ñiện áp nguồn nuôi qua công nối tiếp.

Page 60: Cơ sở thiết kế robot tự hành

Chương 5: Các linh kiện sử dụng trong khối phần cứng

SV: ðẶNG QUANG VINH 50

5.2.3 Các mức ñiện áp ñường truyền: RS 232 sử dụng phương thức truyền thông không ñối xứng, tức là sử dụng tín hiệu

ñiện áp chênh lệch giữa một dây dẫn và ñất. Do ñó ngay từ ñầu tiên ra ñời nó ñã mang vẻ lỗi thời của chuẩn TTL, nó vẫn sử dụng các mức ñiện áp tương thích TTL ñể mô tả các mức logic 0 và 1. Ngoài mức ñiện áp, tiêu chuẩn cũng cố ñịnh các giá trị trở kháng tải ñược ñấu vào bus của bộ phận và các trở kháng ra của bộ phát. Mức ñiện áp của tiêu chuẩn RS232C ( chuẩn thường dùng bây giờ) ñược mô tả như sau: + Mức logic 0 : +3V , +12V + Mức logic 1 : -12V, -3V Các mức ñiện áp trong phạm vi từ -3V ñến 3V là trạng thái chuyển tuyến. Chính vì từ - 3V tới 3V là phạm vi không ñược ñịnh nghĩa, trong trường hợp thay ñổi giá trị logic từ thấp lên cao hoặc từ cao xuống thấp, một tín hiệu phải vượt qua quãng quá ñộ trong một thơì gian ngắn hợp lý. ðiều này dẫn ñến việc phải hạn chế về ñiện dung của các thiết bị tham gia và của cả ñường truyền. Tốc ñộ truyền dẫn tối ña phụ thuộc vào chiều dài của dây dẫn. ða số các hệ thống hiện nay chỉ hỗ trợ với tốc ñộ 19,2 kBd .

5.2.4 Cổng RS232 Hầu hết các máy tính cá nhân hiện nay ñều ñược trang bị ít nhất là 1 cổng Com hay

cổng nối tiếp RS232. Số lượng cổng Com có thể lên tới 4 tùy từng loại main máy tính. Khi ñó các cổng Com ñó ñược ñánh dấu là Com 1, Com 2, Com 3...Trên ñó có 2 loại ñầu nối ñược sử dụng cho cổng nối tiếp RS232 loại 9 chân (DB9) hoặc 25 chân (DB25). Tuy có cùng số chân với cổng song song (còn gọi là cổng máy in LPT) là 25 chân, nhưng cổng nối tiếp 25 chân trên máy tính là cổng ñực (male) còn cổng song song là cổng cái (female). Nhờ ñặc ñiểm này mà ta có thể phân biệt 2 loại cổng với nhau. Ta xét sơ ñồ chân cổng Com 9 chân:

Hình 5.9 – Cổng giao tiếp RS232

• Chân 1: Data Carrier Detect (DCD): phát tín hiệu mang dữ liệu.

• Chân 2: Receive Data (RXD): Nhận dữ liệu.

• Chân 3: Transmit Data (TxD): Truyền dữ liệu.

Page 61: Cơ sở thiết kế robot tự hành

Chương 5: Các linh kiện sử dụng trong khối phần cứng

SV: ðẶNG QUANG VINH 51

• Chân 4: Data Terminal Ready (DTR): ðầu cuối dữ liệu sẵn sàng kích hoạt bởi bộ phận khi muốn truyền dữ liệu.

• Chân 5: Signal Ground (SG): mass của tín hiệu.

• Chân 6: Data Set Ready (DSR): Dữ liệu sẵn sàng, ñược kích hoạt bởi bộ nhận khi nó muốn truyền dữ liệu.

• Chân 7: Request to Send: Yêu cầu gửi bộ truyền ñặt ñường này lên mức hoạt ñộng khi sẵn sàng truyền dữ liệu.

• Chân 8: Clear to Send (CTS): Xoá ñể gửi bộ nhận ñặt ñường này lên mức hoạt ñộng ñể thông báo bộ truyền là nó ñã sẵn sàng nhận tín hiệu.

• Chân 9: Ring Indicate (RI): Báo chuông cho biết là bộ nhận ñang nhận tín hiệu chuông.

5.2.5 Quá trình truyền dữ liệu:

a) Quá trình truy ền dữ liệu: Việc truyền dữ liệu qua cổng nối tiếp RS232 ñược thực hiện theo kiểu không ñồng bộ. Vì thế, tại một thời ñiểm chỉ có một bit ñược truyền. Bộ truyền gửi một bit bắt ñầu (start bit) ñể thông báo cho bộ nhận biết một ký tự sẽ ñược gửi ñến trong lần truyền bit tiếp theo. Bit này luôn bắt ñấu ở mức 0. Tiếp theo là các bit dữ liệu (data bits) ñược gửi dưới dạng mã ASCII (có thể là 4, 5, 6, 7 hoặc 8 bit dữ liệu). Sau ñó là một bit chẵn lẻ (parity bit, có thể có hoặc không) và cuối cùng là bit dừng (stop bit, có thể là 1, 1.5 hoặc 2 bit dừng). b) Tốc ñộ Baud: Một trong các tham số chính ñặc trưng cho quá trình truyền dữ liệu qua cổng nối tiếp RS232 là tốc ñộ truyền nhận dữ liệu, còn gọi là tốc ñộ bit. Tốc ñộ bit ñược ñịnh nghĩa là số bit truyền ñược trong 1 giây. Cả bộ truyền và bộ nhận ñều phải thiết lập ñể hoạt ñộng với cùng một tốc ñộ bit này. Ngoài tốc ñộ bit còn có một thuật ngữ khác ñược sử dụng ñể mô tả tốc ñộ truyền là tốc ñộ Baud. Tốc ñộ bit phản ánh tốc ñộ thực tế mà các bit ñược truyền. Còn tốc ñộ Baud liên quan ñến tốc ñộ mà các phần tử mã hóa dữ liệu ñược sử dụng ñể diễn tả các bit ñược truyền. Bởi vì một phần tử báo hiệu sự mã hóa một bit, nên khi ñó hai tốc ñộ là ñồng nhất. Chỉ trong các modem, do có thêm quá trình biến ñổi nên tốc ñộ bit mới khác tốc ñộ Baud. Một số tốc ñộ Baud thường dùng: 50, 75, 110, 150, 300, 600, 1200, 2400, 4800, 9600, 19200, 28800, 38400, 56000, 115200 …Một trong những yêu cầu quan trọng khi sử dụng chuẩn truyền thông nối tiếp RS232 là thời gian chuyển mức logic không ñược vượt quá 4% thời gian truyền 1 bit. Vì thế, nếu tốc ñộ bit càng cao, thời gian truyền 1 bit càng nhỏ, thì thời gian chuyển mức logic phải càng nhỏ. Vấn ñề này làm giới hạn tốc ñộ Baud và khoảng cách truyền. Ví dụ, với tốc ñộ Baud là 19200, ta có thể truyền xa nhất là 50 feet (khoảng 15,24 m).

Page 62: Cơ sở thiết kế robot tự hành

Chương 5: Các linh kiện sử dụng trong khối phần cứng

SV: ðẶNG QUANG VINH 52

c) Bit chẵn lẻ (parity bit): ðây là bit kiểm tra lỗi trên ñường truyền. Thực chất của quá trình kiểm tra lỗi khi truyền dữ liệu là bổ sung thêm dữ liệu ñược truyền ñể tìm ra hoặc sửa một số lỗi trong quá trình truyền . Do ñó trong chuẩn RS232 sử dụng một kỹ thuật kiểm tra chẵn lẻ. Một bit chẵn lẻ (parity bit) ñược bổ sung vào dữ liệu ñược truyền ñể cho thấy số lượng các bit “1” ñược gửi trong một khung truyền là chẵn (parity chẵn) hoặc lẻ (parity lẻ). ðây là một phương pháp ñơn giản ñể mã hóa lỗi và chỉ cần một cổng XOR ñể tạo ra parity bit. Parity bit ñược bổ sung vào dữ liệu ñược truyền bằng cách chèn nó vào một vị trí chính xác của bit trong thanh ghi dịch sau khi ñã ñếm xem có bao nhiêu bit “1” ñược gửi. Một parity bit chỉ có thể tìm ra một số lẻ các lỗi, chẳng hạn như 1, 3, 5, 7, … Nếu như có một số chẵn các bit mắc lỗi thì parity bit sẽ trùng giá trị với trường hợp không mắc lỗi. và không thể phát hiện ra lỗi. Vì thế, kỹ thuật mã hóa lỗi này thường không ñược sử dụng trong trường hợp có khả năng một vài bit bị mắc lỗi.

5.2.6 Truyền thông cổng nối tiếp trong Matlab: Như chúng ta ñã biết, việc cấu hình cổng COM máy tính dùng giao tiếp có rất

nhiều ngôn ngữ hỗ trợ như VB,C,C#,…Ngoài ra thì Matlab cũng có khả năng làm việc ñó.

Sau ñây là một số hàm cơ bản ñể lập trình truyền thông cổng nối tiếp bằng Matlab:

• Tạo một ñối tượng cổng COM. Vì có nhiều cổng COM, nên ta cần xác ñịnh cổng COM nào ñược sử dụng. Ví dụ sử dụng cổng COM1:

>> serialPort = serial ( ‘com1’ ) Serial Port Object : Serial-COM1 Communication Settings Port: COM1 BaudRate: 9600 Terminator: 'LF' Communication State Status: closed RecordStatus: off Read/Write State TransferStatus: idle BytesAvailable: 0 ValuesReceived: 0 ValuesSent: 0

Page 63: Cơ sở thiết kế robot tự hành

Chương 5: Các linh kiện sử dụng trong khối phần cứng

SV: ðẶNG QUANG VINH 53

• Hiển thị và thay ñổi các thông số của ñối tượng. Ví dụ hiển thị và thay ñổi tốc ñộ Baud.

>> get ( serialPort, ‘baudrate’ ) ans = 9600 >> set ( serialPort, ‘baudrate’, 19200 ) >> get ( serialPort, ‘baudrate’ ) ans = 19200

• Một cách thiết lập khi có nhiều tham số cần thay ñổi: >> serialPort = serial ( ‘com1’, ‘baudrate’, 19200, ‘terminator’, ‘CR’) Serial Port Object : Serial-COM1 Communication Settings Port: COM1 BaudRate: 19200 Terminator: 'CR' Communication State Status: closed RecordStatus: off Read/Write State TransferStatus: idle BytesAvailable: 0 ValuesReceived: 0 ValuesSent: 0

• Trước khi giao tiếp với thiết bị, cần phải kết nối và mở cổng COM bằng lệnh: >> fopen ( serialPort );

• Truyền ký tự dùng lệnh: >> fprintf ( serialPort, …);

• Ví dụ muốn gửi ký tự s ta dùng lệnh: >> fprintf ( serialPort, ‘s’);

• Ngược lại muốn nhận ký tự ta dùng lệnh: >> indata = fscanf ( serialPort ) ; với indata là biến dùng ñể lưu ký tự.

• Sau khi làm việc xong với cổng nối tiếp, cần phải ñóng và xoá ñối tượng khỏi bộ nhớ và không gian làm việc của Matlab bằng lệnh:

>> fclose ( serialPort ) ; >> delete ( serialPort ) ; >> clear serialPort ;

Page 64: Cơ sở thiết kế robot tự hành

Chương 5: Các linh kiện sử dụng trong khối phần cứng

SV: ðẶNG QUANG VINH 54

5.3 Giới thi ệu về chip mạch cầu L298N: 5.3.1 Phương pháp ñiều chế ñộ rộng xung PWM:

Phương pháp ñiều chế ñộ rộng xung PWM (Pulse Width Modulation) là phương pháp thay ñổi ñiện áp ra trung bình nhờ vào thay ñổi thời gian ñóng ngắt của các khóa cấp ñiện cho ngõ ra.

Phương pháp PWM ñược sử dụng rất phổ biến trong ñiều khiển ñộng cơ vì các ưu ñiểm:

• Mạch công suất thiết kế ñơn giản.

• Vận tốc ñộng cơ thay ñổi êm.

• Tổn hao công suất nhỏ.

Xét mạch ñiện sau:

Hình 5.10 – Mạch ñơn giản

Khóa S ñược ñóng ngắt theo chu kỳ không ñổi, bằng cách thay ñổi thời gian ñóng (Ton) và ngắt của khóa S trong chu kỳ (T), ta thay ñổi ñược ñiện áp trung bình trên tải. Khoảng thay ñổi từ 0 ñến U.

Hình 5.11 – Xung PWM

Ta có công thức: . onaverage

TV UT

=

Như vậy ta thay ñổi ñược ñiện áp trung bình cấp cho ñộng cơ, việc này làm thay ñổi vận tốc ñộng cơ.

Xung PWM ñược tạo rất dễ dàng bằng các mạch vi ñiểu khiển. Khóa ñóng ngắt S trong thực tế thường sử dụng Mosfet hoặc IGBT.

Page 65: Cơ sở thiết kế robot tự hành

Chương 5: Các linh kiện sử dụng trong khối phần cứng

SV: ðẶNG QUANG VINH 55

5.3.2 Mạch cầu H: Mạch cầu H ñược sử dụng rộng rãi ñể ñiều khiển ñảo chiều ñộng cơ. Xét mạch:

Hình 5.12 – Mạch cầu H

Giả sử khi có dòng ñiện chạy theo chiều + � - thì ñộng cơ quay thuận, chiều ngược lại sẽ làm ñộng cơ quay nghịch.

- Cho khóa S1 và S4 ñóng, khóa S2 và S3 hở mạch, khi ñó dòng ñiện qua ñộng cơ có chiều: S1 � M � S4, ñộng cơ quay thuận.

- Muốn ñảo chiều quay của ñộng cơ, ta ngắt S1 và S4, ñóng S2 và S3, khi ñó dòng ñiện qua S3 � M � S2, ñộng cơ sẽ quay theo chiều ngược lại.

Trong ñề tài này, kết hợp mạch cầu H và phương pháp PWM, ta sẽ ñiều khiển vận tốc và chiều quay của ñộng cơ như sau: - Quay thuận: ngắt khóa S2 và S3, ñóng khóa S4 và cấp xung PWM cho S1. - Quay ngược: ngắt khóa S1 và S4, ñóng khóa S2 và cấp xung PWM cho S3.

5.3.3 IC công suất L298N

L298N là IC công suất tích hợp 2 mạch cầu H bên trong, chuyên dụng cho ñiều khiển các ñộng cơ công suất thấp.

Hình 5.13 – IC L298N

Các thông số kỹ thuật ñáng chú ý: o ðiện áp hoạt ñộng lên ñến 46V. o Có 2 mạch cầu H hoạt ñộng ñộc lập, với dòng tối ña 2A cho mỗi cầu. o Ngõ vào tương thích mức ñiện áp logic TTL.

Page 66: Cơ sở thiết kế robot tự hành

Chương 5: Các linh kiện sử dụng trong khối phần cứng

SV: ðẶNG QUANG VINH 56

Hình 5.14 – Sơ ñồ chân L298N

Chân Tên Chức năng

1; 15 Sense A Sense B

Nối chân này qua ñiện trở cảm ứng dòng xuống GND ñể ñiều khiển dòng tải

2; 3 Out 1 Out 2

Ngõ ra của cầu A. Dòng của tải mắc giữa 2 chân này ñược quy ñịnh bởi chân 1.

4 VS Chân cấp nguồn cho tầng công suất, cần có một tụ ñiện cảm kháng 100nF nối giữa chân này và chân GND

5; 7 Input 1 Input 2

Chân ngõ vào của cầu A, tương thích chân TTL

6; 11 Enable A Enable B

Chân ngõ vào Enable tương thích chuẩn TTL. Mức thấp của chân này sẽ cấm ngõ ra cầu A, ñối với enable A; hoặc ngõ ra cầu B ñối với enable B;

8 GND Chân mass

9 VSS Chân cấp nguồn cho khối logic. Cần có tụ ñiện 100nF giữa chân này với chân GND

10; 12 Input 3 Input 4

Các chân logic ngõ vào của B

13; 14 Output 3 Output 4

Ngõ ra của cầu B, dòng của tải mắc giữa 2 chân này ñược quy ñịnh bởi chân 15.

Bảng 5.9 – Chức năng các chân L298N

Page 67: Cơ sở thiết kế robot tự hành

Chương 5: Các linh kiện sử dụng trong khối phần cứng

SV: ðẶNG QUANG VINH 57

Hình 5.15 – Sơ ñồ nguyên lý của L298N

Từ sơ ñồ nguyên lý, dễ thấy mỗi ngõ ra (OUT1, OUT2, OUT3, OUT4) ñược ñiều khiển bởi 1 ngõ vào (IN1, IN2, IN3, IN4) ñộc lập. Khi ngõ vào ở mực logic thấp, ngõ ra tương ứng sẽ ñược kéo xuống GND qua RS mắc ở chân SENSE. Khi ngõ vào ở mức logic cao, ngõ ra tương ứng sẽ ñược kéo lên +VS.

EnA và EnB ñể cho phép hoặc cấm 2 cầu A và B. SENSE A và SENSE B mắc với ñiện trở Sunt RSA và RSB ñể lấy ñiện áp hồi tiếp về

mạch ñiều khiển nếu cần thiết. Khi không cần lấy ñiện áp hồi tiếp, có thể bỏ RSA và RSB, mắc trực tiếp SENSE A và SENSE B xuống GND.

VS là nguồn công suất cho ñộng cơ. VSS là nguồn +5VDC cung cấp cho khối logic của L298.

Hoạt ñộng: Ta có thể thay ñổi trạng thái của một ñộng cơ dựa vào (Input 1; Input 2), ở ñây ta

luôn ñể mức ra ở chân cho phép (Enable) là mức cao. • ðể ñộng cơ quay thuận, ta cấp mức logic 0 cho ngõ vào Input2, và cấp xung

PWM cho Input1. • Ngược lại, ñể ñộng cơ quay nghịch, ta cấp mức logic 0 cho Input1, và cấp

xung PWM cho Input2. Vì vậy, ñể ñiều khiển ñộng cơ chỉ cần ñiều khiển giá trị xuất ra từ cổng của

PIC16F877A ở các chân nối với Input1, Input2, Input3 và Input4.

Page 68: Cơ sở thiết kế robot tự hành

Chương 6: Thiết kế mạch phần cứng

SV: ĐẶNG QUANG VINH 58

CHƯƠNG 6 Thiết kế mạch phần cứng

6.1 Khối nguồn:

Hình 6.1 – Sơ đồ khối nguồn

Khối nguồn có chức năng lấy điện áp 9V từ pin, điện áp này được đưa qua IC78L05 để chuyển đổi thành điện áp 5V cung cấp nguồn cho PIC16F877A và L298N.

6.2 Khối điều khiển trung tâm:

Hình 6.2 – Sơ đồ khối điều khiển trung tâm

Page 69: Cơ sở thiết kế robot tự hành

Chương 6: Thiết kế mạch phần cứng

SV: ĐẶNG QUANG VINH 59

Khối điều khiển trung tâm là khối có chức năng điều khiển chính trong khối phần cứng bao gồm điều khiển động cơ và giao tiếp RS232. PIC16F877A được lựa chọn sử dụng trong luận văn đảm nhận chức năng khối điều khiển này.

Trong khối phần cứng dùng PIC16F877A để điều khiển động cơ. Cờ ngắt dùng trong việc truyền nhận dữ liệu giữa Laptop và PIC16F877A.

6.3 Khối điều khiển động cơ:

Hình 6.3 – Sơ đồ khối điều khiển động cơ

Khối này có thành phần chính là một mạch cầu L298N có chức năng điều khiển hoạt động của các động cơ robot. Nguyên tắc hoạt động của L298N như đã trình bày ở phần trên.

Page 70: Cơ sở thiết kế robot tự hành

Chương 6: Thiết kế mạch phần cứng

SV: ĐẶNG QUANG VINH 60

6.4 Khối truyền thông RS232:

Hình 6.4– Sơ đồ khối truyền thông RS232

Khối này có nhiệm vụ nhận tín hiệu điều khiển từ cổng RS232 của laptop truyền xuống cho PIC16F877A điều khiển hoạt động của robot. 6.5 Mạch phần cứng hoàn chỉnh:

Mạch được thiết kế bằng phần mềm Proteus 7 Professional. Sau khi thiết kế mạch in, ta hoàn thiện các mạch phần cứng như sau:

Mạch điều khiển gồm khối nguồn, khối điều khiển trung tâm sử dụng PIC16F877A và khối truyền thông RS232.

Mạch công suất điều khiển động cơ sử dụng IC mạch cầu L298N.

Page 71: Cơ sở thiết kế robot tự hành

Chương 6: Thiết kế mạch phần cứng

SV: ĐẶNG QUANG VINH 61

Hình 6.5– Mạch điều khiển

Hình 6.6– Mạch điều khiển

Page 72: Cơ sở thiết kế robot tự hành

Chương 6: Thiết kế mạch phần cứng

SV: ĐẶNG QUANG VINH 62

Hình 6.7– Mạch công suất

Hình 6.8– Mạch công suất

Page 73: Cơ sở thiết kế robot tự hành

Chương 7: Xây dựng phần mềm điều khiển

SV: ĐẶNG QUANG VINH 63

CHƯƠNG 7 Xây dựng phần mềm điều khiển

7.1 Sơ đồ tổng quát của robot:

7.2 Robot di động bám đối tượng: Mục tiêu của luận văn là điều khiển robot bám theo một đối tượng sử dụng

xử lý ảnh trong Matlab. Nó phải duy trì được khoảng cách nhất định giữa robot và đối tương, khi đối tượng di chuyển robot phải di chuyển theo dựa vào hình ảnh thu được từ webcam để xác định đối tượng đi thẳng, đi lùi, rẽ trái, rẽ phải. Nghĩa là chúng ta phải điều khiển cả tốc độ và hướng của robot tuy nhiên trong luận án này tôi chỉ điều khiển hướng, tốc độ của đối tượng có thể xem là không đổi. Để làm được việc này, chúng ta phải nhận dạng được đối tượng và xác định được hướng di chuyển của nó. Thứ hai phải xây dựng thuật toán bám đối tượng. Thứ ba là phải xây dựng được phần cứng để kiểm định thuật toán

Có rất nhiều cách để dò tìm đối tượng ví dụ dựa trên hình dáng, âm thanh v..v. những thuật toán này thực sự rất phức tạp. Để giảm độ khó của thuật toán theo dõi chúng ta đặt phía sau đối tượng một vật có những thuộc tính về màu sắc đặc biệt ví dụ màu đỏ, màu vàng, màu xanh v..v. Như vậy, lúc tiến hành theo dõi sẽ giảm được rất nhiều về việc xử lý nhiễu do nền và các đối tượng không mong muốn gây ra, giảm đáng kể sự nhầm lẫn đối tượng theo dõi. Chương trình xử lý ảnh để tiến hành theo dõi căn cứ vào màu sắc đối tượng. Khoảng cách giữa robot và đối tượng chúng ta đặt là cố định,

Webcam

Laptop

Matlab xử lý ảnh

Mạch điều khiển

Frame RS232

PIC16F877A

RS232

Mạch công suất

L298N Động cơ DC

Page 74: Cơ sở thiết kế robot tự hành

Chương 7: Xây dựng phần mềm điều khiển

SV: ĐẶNG QUANG VINH 64

dựa vào tâm của đối tượng tìm được chúng ta biết được vị trí của đối tượng tham chiếu trên mặt phẳng ảnh. Các thuộc tính nhận được sẽ truyền qua cổng giao tiếp RS232 xuống vi điều khiển PIC16F877A để điều khiển động cơ một chiều (DC) thông qua mạch cầu điều khiển động cơ L298N.

7.3 Xây dựng phần mềm điều khiển robot: 7.3.1 Nhận dạng và tính toán vị trí, kích thước của đối tượng màu đỏ:

Áp dụng các hàm xử lý ảnh của Matlab để tìm đối tượng màu đỏ, sau đó tính toán toạ độ và kích thước của đối tượng trên mặt phẳng ảnh. Dùng hàm Imread để đọc file ảnh và lưu lại dưới dạng ma trận trong Matlab. RGB=imread (‘redball.jpg’) ;

Hình 7.1 – Ảnh gốc cần xử lý

Ảnh gốc là một ảnh RGB. Ảnh này được biểu diễn bởi một ma trận ba chiều kích thước m x n x 3, với m x n là kích thước ảnh theo pixels. Ma trận này định nghĩa các thành phần màu red, green, blue cho mỗi điểm ảnh.

Các mặt phẳng màu riêng rẽ của ảnh gốc: R = RGB ( ; ; 1 ) G = RGB ( ; ; 2 ) B = RGB ( ; ; 3 )

Vì đối tượng ta quan tâm có màu sắc là đỏ nên ta lấy ra mặt phẳng ảnh màu đỏ từ ảnh gốc.

Page 75: Cơ sở thiết kế robot tự hành

Chương 7: Xây dựng phần mềm điều khiển

SV: ĐẶNG QUANG VINH 65

Hình 7.2– Ảnh của ma trận đỏ

Tạo một ảnh grayscale từ ảnh gốc dùng hàm rgb2gray.

Hình 7.3– Ảnh grayscale từ ảnh gốc

Page 76: Cơ sở thiết kế robot tự hành

Chương 7: Xây dựng phần mềm điều khiển

SV: ĐẶNG QUANG VINH 66

Dùng hàm imsubtract để trừ ảnh grayscale từ ảnh của ma trận màu đỏ để lọc lấy màu đỏ.

Hình 7.4 – Ảnh thu được khi lấy màu đỏ

Dùng hàm medfilt2 để giảm nhiễu cho ảnh

Hình 7.5 – Giảm nhiễu

Page 77: Cơ sở thiết kế robot tự hành

Chương 7: Xây dựng phần mềm điều khiển

SV: ĐẶNG QUANG VINH 67

Chuyển sang ảnh nhị phân dùng hàm im2bw

Hình 7.6 – Ảnh nhị phân

Dùng hàm bwareaopen để loại bỏ những đối tượng nhỏ

Hình 7.7 – Loại bỏ đối tượng nhỏ

Page 78: Cơ sở thiết kế robot tự hành

Chương 7: Xây dựng phần mềm điều khiển

SV: ĐẶNG QUANG VINH 68

Cuối cùng dùng các thuộc tính Centroid, Boundingbox, Area của hàm regionprops để xác định tâm và vẽ hình chữ nhật xung quanh đối tượng màu đỏ.

Hình 7.8 – Xác định tâm và vẽ hình chữ nhật xung quanh

7.3.2 Các bước thu thập ảnh bằng webcam Bước 1: Gắn thiết bị thu hình vào máy tính và cài đặt driver điều khiển + Gắn thiết bị thu hình vào máy tính. + Cài đặt driver (trình điều khiển) cho thiết bị (được cho bởi nhà sản xuất). + Xem thử hình ảnh video hiện trên máy tính thông qua phần mềm của nhà sản xuất. + Khởi động Matlab. Bước 2: Chỉ định thông tin phần cứng:

Cần chỉ định cho Matlab biết phần cứng nào dùng để lấy dữ liệu (vì có thể có nhiều camera kết nối tới PC)

Gõ lệnh imaqhwinfo để biết tên các loại thiết bị có thể dùng. >> imaqhwinfo ans = InstalledAdaptors: {'coreco' 'winvideo'} MATLABVersion: '7.5 (R2007b)' ToolboxName: 'Image Acquisition Toolbox'

Page 79: Cơ sở thiết kế robot tự hành

Chương 7: Xây dựng phần mềm điều khiển

SV: ĐẶNG QUANG VINH 69

ToolboxVersion: '3.0 (R2007b)' Tên Loại thiết bị

'coreco' Thiết bị của công ty coreco

‘DCAM’ Các thiết bị dùng chuẩn IEEE 1394

‘dt’ Các thiết bị của Data Translation

‘Matrox’ Các thiết bị của hãng Matrox

‘winvideo’ Các thiết bị dùng chuẩn Windows Driver Model (WDM) hoặc Video for indows (VFW). Bao gồm các loại USB WEBCAM và camera IEEE 1394

Bảng 7.1 – Các loại thiết bị Webcam

Chỉ định thiết bị: Tùy vào loại thiết bị (adaptor name), mỗi thiết bị cùng loại gắn vào PC được đánh số ID, thiết bị thứ nhất có deviceID=1, thiết bị thứ 2 có deviceID=2,… Để liệt kê xem loại winvideo có bao nhiêu thiết bị gắn vào máy, ta cũng dùng lệnh imaqhwinfo với đối số là winvideo. >> imaqhwinfo('winvideo') ans = AdaptorDllName: [1x81 char] AdaptorDllVersion: '3.0 (R2007b)' AdaptorName: 'winvideo' DeviceIDs: {[1]} DeviceInfo: [1x1 struct] => Có một thiết bị với DeviceID là 1. Ta có thể tìm hiểu thêm thông tin về thiết bị này: >> imaqhwinfo('winvideo',1) ans = DefaultFormat: 'YUY2_160x120' DeviceFileSupported: 0 DeviceName: 'USB Video Device' DeviceID: 1 ObjectConstructor: 'videoinput('winvideo', 1)' SupportedFormats: {1x5 cell} => Đúng cái Webcam của Laptop.

Page 80: Cơ sở thiết kế robot tự hành

Chương 7: Xây dựng phần mềm điều khiển

SV: ĐẶNG QUANG VINH 70

Bước 3: Tạo đối tượng đại diện cho luồng dữ liệu video Để tạo luồng dữ liệu video,dùng lệnh videoinput. Ví dụ

>> vid=videoinput(‘winvideo’,1) Bước 4: Hiển thị luồng video trên màn hình để xem thử

Sau khi tạo biến tham chiếu luồng video (Matlab gọi là tạo đối tượng video ngõ vào), Ta có thể dùng Matlab để lấy dữ liệu từ thiết bị thu hình (thuật ngữ là “thu thập dữ liệu”). Tuy nhiên, trước khi làm việc này, bạn có thể xem trước luồng video để chắc rằng thiết bị hoạt động tốt.

Để xem trước luồng dữ liệu video, dùng lệnh preview. Ví dụ: preview(vid) Để kết thúc xem, dùng lệnh stoppreview. Hoặc để đóng cửa sổ preview,

dùng lệnh closepreview(vid)

Bước 5: Cấu hình cho hoạt động trích hình ảnh Một số thông số hoạt động của biến video mà t a c ó thể thay đổi như

FramesPerTrigger, ReturnedColorspace, FrameGrabInterval, FramesAcquired,…

Bước 6: Lấy dữ liệu hình ảnh Ta tiến hành theo các bước sau để lấy dữ liệu:

+ Gọi hàm start để bắt đầu. (ví dụ : Start(vid)) . Một số thông số của biến video sẽ bị khóa thành dạng chỉ đọc. + Lấy dữ liệu (hay còn gọi là thu thập dữ liệu): Tùy vào thông số TriggerType, ta có nhiều cách lấy dữ liệu. + Trích một ảnh từ luồng video thông qua lệnh getsnapshot. Bước 7: Xử lý frame ảnh vừa thu được

Ta thực hiện các hàm xử lý ảnh ở trên để nhận dạng và tính toán vị trí cũng như kích thước của đối tượng màu đỏ.

Page 81: Cơ sở thiết kế robot tự hành

Chương 7: Xây dựng phần mềm điều khiển

SV: ĐẶNG QUANG VINH 71

Bước 8: Làm sạch bộ nhớ Sau khi lấy dữ liệu video, ta có thể giải phóng bớt bộ nhớ bằng các lệnh sau:

stop(vid) flushdata(vid) clear vid

7.3.3 Mặt phẳng ảnh: Cấu trúc của hệ bám mục tiêu di động gồm hai phần chính. Phần thứ nhất là phần xử

lý ảnh dựa vào chuỗi hình ảnh thu được từ webcam để nhận dạng và tính toán vị trí của đối tượng quan tâm.

Phần thứ hai là phần điều khiển, dựa vào thông tin vị trí đối tượng nhận được trong mặt phẳng ảnh, tính toán tín hiệu điều khiển robot sao cho đối tượng di chuyển được duy trì ở một vị trí nhất định trên mặt phẳng ảnh và ở một khoảng cách nhất định.

Mặt phẳng ảnh là mặt phẳng có gốc nằm phía trên bên trái, trục x là trục nằm ngang, trục y là trục thẳng đứng như hình vẽ.

Hình 7.9 – Mặt phẳng ảnh

Căn cứ vào vị trí dịch chuyển của đối tượng trên mặt phẳng ảnh so với gốc toạ độ mà ta tính toán các khả năng di chuyển của robot sao cho đối tượng nằm ở một vị trí bất kỳ trên mặt phẳng ảnh.

Page 82: Cơ sở thiết kế robot tự hành

Chương 7: Xây dựng phần mềm điều khiển

SV: ĐẶNG QUANG VINH 72

Dựa vào toạ độ x, y của tâm đối tượng nằm trên mặt phẳng ảnh, ta sẽ biết đối tượng đang ở bên trái hay bên phải của robot, từ đó điều khiển robot quay về phía đối tượng.

Dựa vào số lượng pixel hay kích thước của đối tượng, ta ước chừng được khoảng cách giữa robot và đối tượng, từ đó điều khiển robot di chuyển tới hay lùi.

Hình vẽ sau mô tả các vị trí tương ứng của đối tượng trên mặt phẳng ảnh tương ứng với điều kiện di chuyển:

Hình 7.10 – Biểu diễn đối tượng di chuyển trên mặt phẳng ảnh

7.3.4 Tập lệnh điều khiển robot: Dựa vào các kết quả nhận được, ta sẽ gửi tín hiệu điều khiển qua cổng kết nối RS232 để điều khiển robot di động bám đối tượng.

Lệnh Động cơ 1 Động cơ 2 Robot

f Tiến Tiến Đi thẳng

b Lùi Lùi Đi lùi

s Dừng Dừng Dừng lại

r Tiến Lùi Rẽ phải

l Lùi Tiến Rẽ trái Bảng 7.2 – Tập lệnh điều khiển robot

Page 83: Cơ sở thiết kế robot tự hành

Chương 7: Xây dựng phần mềm điều khiển

SV: ĐẶNG QUANG VINH 73

7.4 Giao diện điều khiển sử dụng GUI của Matlab: Chương trình được thiết kế bằng giao diện GUI thuộc phần mềm Matlab R2007b.

Hình 7.11 – Giao diện điều khiển viết bằng Matlab

Chú thích: Connect: Mở cổng COM, kết nối vi điều khiển với Laptop qua RS232 Disconnect: Ngắt kết nối Manual: Chế độ điều khiển bằng tay, kiểm tra hoạt động của robot Automatic: Bấm RUN để mở webcam, robot nhận dạng và bám theo mục tiêu màu

đỏ Exit: Thoát khỏi chương trình

Page 84: Cơ sở thiết kế robot tự hành

Chương 8: Kết quả đạt được

SV: ĐẶNG QUANG VINH 74

CHƯƠNG 8 Kết quả đạt được

Đề tài được đánh dấu hoàn thành bằng việc thiết kế thành công robot tự hành bám

đối tượng. Robot có thể điều khiển từ xa bằng remote và có thể bám theo đối tượng màu đỏ nằm ở trên một phần của mặt phẳng ảnh mà ta chọn.

Hình ảnh thực tế:

Hình 8.1 – Hình ảnh thực tế

Page 85: Cơ sở thiết kế robot tự hành

Chương 8: Kết quả đạt được

SV: ĐẶNG QUANG VINH 75

Hình 8.2 – Hình ảnh thực tế

Hình 8.3 – Hình ảnh thực tế

Page 86: Cơ sở thiết kế robot tự hành

Chương 8: Kết quả đạt được

SV: ĐẶNG QUANG VINH 76

Hình 8.4 – Hình ảnh thực tế

Hình 8.5 – Hình ảnh thực tế

Page 87: Cơ sở thiết kế robot tự hành

Chương 8: Kết quả đạt được

SV: ĐẶNG QUANG VINH 77

8.1 Các kết quả đạt được: Đề tài hoàn thành với những kết quả đạt được so với yêu cầu nhiệm vụ đặt ra:

Đã phân tích tìm hiểu, lựa chọn và thi công mô hình robot tự hành với 4 bánh xe: 2 bánh xe chủ động và 2 bánh tự lượn. Mô hình gọn nhẹ và di chuyển linh hoạt.

Điều khiển bằng tay sử dụng thu phát sóng vô tuyến hoạt động ổn định, có thể điều khiển ở một khoảng cách xa.

Thiết kế robot hoạt động tốt đã đáp ứng được các yêu cầu cơ bản nhất của robot: đi tiến, đi lùi, rẽ phải, rẽ trái.

Thi công mạch điều khiển động cơ bao gồm khối nguồn, vi điều khiển PIC16F877A và khối giao tiếp RS232. Mạch nhỏ gọn và đơn giản.

Thi công mạch công suất động cơ, mạch công suất động cơ điều khiển tốc độ (dùng PWM) và chiều quay cho 2 động cơ công suất nhỏ độc lập. Mạch nhỏ gọn và đơn giản, có thể thay đổi vận tốc của robot bằng remote.

Báo cáo này mô tả hệ thống robot di động bám đối tượng sử dụng công cụ xử lý ảnh của Matlab. Robot nhận hình ảnh từ webcam tiến hành tính toán tọa độ tâm, kích cỡ, thiết kế khối giao tiếp RS232 sử dụng GUI của Matlab. Thiết kế mạch điều khiển động cơ sử dụng PIC16F877A. Trong điều kiện ánh sáng bình thường và phông nền không quá phức tạp, hệ thống có thể phát hiện đối tượng và điều khiển robot bám theo.

Giao diện điều khiển rõ ràng, truyền thông giữa các thiết bị ổn định.

8.2 Hạn chế: Còn hạn chế trong thiết kế phần cứng (khung xe), phần này còn yếu nên

gây khó khăn trong việc di chuyển và động cơ của robot di chuyển tốc độ chậm do đó không đáp ứng được tốc độ của webcam của robot.

Mạch công suất chưa được cách ly với khối điều khiển, chưa có bảo vệ quá tải. Giải thuật điều khiển động cơ là vòng hở. Hệ thống làm việc tốt dưới điều kiện ánh sáng vừa phải, nếu môi trường có

độ sáng quá cao như ánh sáng mặt trời thì hệ làm việc rất kém do màu và độ sáng của đối tượng luôn thay đổi khi đối tượng thay đổi hướng.

Tốc độ của robot là cố định do chưa xây dựng thuật toán điều khiển tốc độ robot phù hợp tốc độ dịch chuyển của đối tượng đang theo dõi.

Chương trình điều khiển mới được thử nghiệm trên một số môi trường nhất định kết quả đạt được là tương đối tốt. Tuy nhiên trong xử lý ảnh vấn đề nhiễu trong môi trường rất quan trọng do đó cần có thêm nhiều thử nghiệm nữa mới có thể đánh giá được độ tin cậy của kết quả đạt được.

Page 88: Cơ sở thiết kế robot tự hành

Chương 8: Kết quả đạt được

SV: ĐẶNG QUANG VINH 78

8.3 Hướng khắc phục các hạn chế và phát triển đề tài: Khắc phục các nhược điểm cụ thể của mô hình trong đề tài:

Mô hình cơ khí có thể cải tiến chắc chắn hơn, với động cơ công suất lớn hơn để mang tải nặng.

Mạch công suất động cơ cần thêm phần lấy giá trị dòng điện hồi tiếp để bảo vệ quá tải. Đồng thời thêm encoder để hồi tiếp tốc độ động cơ về mạch điều khiển.

Phần mềm điều khiển chỉ điều khiển vòng hở vận tốc động cơ bằng điều rộng xung PWM nên cho đáp ứng vận tốc chưa tốt. Cần nhận tín hiệu hồi tiếp từ encoder và dùng giải thuật điều khiển vòng kín tốc độ động cơ (như giải thuật PID).

Từ những kiến thức đã thu được trong quá trình thực hiện đề tài, mô hình robot tự hành có thể được phát triển:

Cải tiến kết cấu cơ khí để mang tải hoặc thực hiện các động tác cho ứng dụng cụ thể.

Thêm các cảm biến khác để robot hoạt động chính xác hơn. Robot chỉ được thử nghiệm trên hệ thống có tốc độ thay đổi chậm, cần

phải được thử nghiệm với hệ thống có tốc độ nhanh hơn. Thay vì dò tìm một vùng đặc biệt trên đối tượng như màu đỏ, màu xanh v..v.

Hệ thống cần được cải thiện để dò tìm đối tượng dựa vào các đặc tính khác trên đối tượng. Không chỉ màu sắc của đối tượng được sử dụng mà cần quan tâm đến các đặc điểm của cạnh, góc, như vậy sẽ tăng được độ tin cậy cho việc dò tìm và theo dõi đối tượng.

Phần cứng cần bổ sung thêm thuật toán tăng, giảm tốc độ theo sự thay đổi tốc độ của đối tượng.

Robot sẽ được ứng dụng vào một số công việc cụ thể: robot tự động hút bụi trong nhà, robot lau kính trên các tòa nhà cao tầng, hay robot vận chuyển trong nhà máy…

Page 89: Cơ sở thiết kế robot tự hành

Tài liệu tham khảo

SV: ðẶNG QUANG VINH 79

Tài li ệu tham khảo

[1] Alasdair McAndrew. An introduction to Digital Image Processing with Matlab. [2] Associate Professor Joel M. Esposito. Matlab serial communication tutorial.

http://www.usna.edu/Users/weapsys/esposito/ [3] Microchip, Datasheet PIC 16F87XA. [4] Datasheet L298N. [5] Quan Quach. Matlab GUI tutorial for beginners.

http://blinkdagger.com/matlab/matlab-gui-graphical-user-interface-tutorial-for-beginers

[6] http://www.payitforward.edu.vn/wordpress/tutorials [7] http://www.pyroelectro.com/tutorials [8] http://www.wikipedia.com [9] http://www.picvietnam.com [10] http://www.dientuvietnam.net

Page 90: Cơ sở thiết kế robot tự hành

Phụ lục

SV: ðẶNG QUANG VINH 80

PHỤ LỤC A

Chương trình ñiều khiển robot //---------------------------------------------------------------------------------------------------- // Khối ñiều khiển Robot sử dụng PIC16F877A và L298N // Ngôn ngữ: PIC C Compiler //----------------------------------------------------------------------------------------------------- #include <16F877A.h> #device *=16 #device adc=8 #FUSES NOWDT #FUSES HS #FUSES NOPUT #FUSES NOPROTECT #FUSES NODEBUG #FUSES NOBROWNOUT #FUSES NOLVP #FUSES NOCPD #FUSES NOWRT #use delay(clock=20000000) #use rs232(baud=19200,xmit=PIN_C6,rcv=PIN_C7) #use fast_io(b) #use fast_io(d) #byte portb=0x06 #byte portd=0x08 #bit RB4=portb.4 #bit RB5=portb.5 #bit RB6=portb.6 #bit RB7=portb.7 #bit RD0=portd.0 #bit RD1=portd.1 #bit RD2=portd.2

Page 91: Cơ sở thiết kế robot tự hành

Phụ lục

SV: ðẶNG QUANG VINH 81

#bit RD3=portd.3 char value; void forward() { RB4=1; RB5=0; RB6=0; RB7=1; } void backward() { RB4=0; RB5=1; RB6=1; RB7=0; } void right() { RB4=1; RB5=0; RB6=1; RB7=0; } void left() { RB4=0; RB5=1; RB6=0; RB7=1; } void stop() { RB4=0;

Page 92: Cơ sở thiết kế robot tự hành

Phụ lục

SV: ðẶNG QUANG VINH 82

RB5=0; RB6=0; RB7=0; } #int_RDA void RDA_isr(void) { value=getc(); delay_ms(10); putc(value); switch(value) { case 'f':forward();break; case 'b':backward();break; case 'r':right();break; case 'l':left();break; case 's':stop();break; } } int duty=0; int p; void main() { set_tris_b(0x00); RB4=0; RB5=0; RB6=0; RB7=0; enable_interrupts(INT_RDA); enable_interrupts(GLOBAL); setup_timer_2(T2_DIV_BY_4,82,1); setup_ccp1(CCP_PWM); setup_ccp2(CCP_PWM); set_pwm1_duty(duty); set_pwm2_duty(duty); while(1)

Page 93: Cơ sở thiết kế robot tự hành

Phụ lục

SV: ðẶNG QUANG VINH 83

{ if((RD0==0)&&(RD1==0)&&(RD2==1)&&(RD3==1))p=1; else if((RD0==0)&&(RD1==1)&&(RD2==0)&&(RD3==0))p=2; else if((RD0==0)&&(RD1==1)&&(RD2==0)&&(RD3==1))p=3; else if((RD0==0)&&(RD1==1)&&(RD2==1)&&(RD3==0))p=4; else if((RD0==0)&&(RD1==1)&&(RD2==1)&&(RD3==1))p=5; else if((RD0==0)&&(RD1==0)&&(RD2==0)&&(RD3==1)) {duty=78; set_pwm1_duty(duty); set_pwm2_duty(duty); while((RD0==0)&&(RD1==0)&&(RD2==0)&&(RD3==1)); } else if((RD0==0)&&(RD1==0)&&(RD2==1)&&(RD3==0)) {duty=53; set_pwm1_duty(duty); set_pwm2_duty(duty); while((RD0==0)&&(RD1==0)&&(RD2==1)&&(RD3==0)); } else if((RD0==1)&&(RD1==0)&&(RD2==0)&&(RD3==0)) {duty=65; set_pwm1_duty(duty); set_pwm2_duty(duty); while((RD0==1)&&(RD1==0)&&(RD2==0)&&(RD3==0)); } switch(p) { case 1:forward();break; case 2:backward();break; case 3:right();break; case 4:left();break; case 5:stop();break; } } }

Page 94: Cơ sở thiết kế robot tự hành

Phụ lục

SV: ðẶNG QUANG VINH 84

PHỤ LỤC B

Chương trình giao diện GUI trong Matlab gồm chương trình xử lý ảnh và giao tiếp RS232

function varargout = test3(varargin) % TEST3 M-file for test3.fig % TEST3, by itself, creates a new TEST3 or rai ses the existing % singleton*. % % H = TEST3 returns the handle to a new TEST3 or the handle to % the existing singleton*. % % TEST3('CALLBACK',hObject,eventData,handles,. ..) calls the local % function named CALLBACK in TEST3.M with the given input arguments. % % TEST3('Property','Value',...) creates a new TEST3 or raises the % existing singleton*. Starting from the left , property value pairs are % applied to the GUI before test3_OpeningFcn g ets called. An % unrecognized property name or invalid value makes property application % stop. All inputs are passed to test3_Openin gFcn via varargin. % % *See GUI Options on GUIDE's Tools menu. Cho ose "GUI allows only one % instance to run (singleton)". % % See also: GUIDE, GUIDATA, GUIHANDLES % Edit the above text to modify the response to hel p test3 % Last Modified by GUIDE v2.5 07-Dec-2011 15:26:01 % Begin initialization code - DO NOT EDIT gui_Singleton = 1; gui_State = struct( 'gui_Name' , mfilename, ... 'gui_Singleton' , gui_Singleton, ... 'gui_OpeningFcn' , @test3_OpeningFcn, ... 'gui_OutputFcn' , @test3_OutputFcn, ... 'gui_LayoutFcn' , [] , ... 'gui_Callback' , []); if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end % End initialization code - DO NOT EDIT % --- Executes just before test3 is made visible. function test3_OpeningFcn(hObject, eventdata, handles, vara rgin) % This function has no output args, see OutputFcn. % hObject handle to figure

Page 95: Cơ sở thiết kế robot tự hành

Phụ lục

SV: ðẶNG QUANG VINH 85

% eventdata reserved - to be defined in a future v ersion of MATLAB % handles structure with handles and user data ( see GUIDATA) % varargin command line arguments to test3 (see V ARARGIN) % Choose default command line output for test3 handles.output = hObject; % Update handles structure guidata(hObject, handles); IsConnect = 0; % 1 = Connect,0 = Disconnect %Declare global variable global hand; hand = handles; % Save data. handles.status_com = IsConnect; guidata(hObject,handles); % UIWAIT makes test3 wait for user response (see UI RESUME) % uiwait(handles.figure1); % --- Outputs from this function are returned to th e command line. function varargout = test3_OutputFcn(hObject, eventdata, ha ndles) % varargout cell array for returning output args ( see VARARGOUT); % hObject handle to figure % eventdata reserved - to be defined in a future v ersion of MATLAB % handles structure with handles and user data ( see GUIDATA) % Get default command line output from handles stru cture varargout{1} = handles.output; % --- Executes on button press in connect_button. function connect_button_Callback(hObject, eventdata, handle s) % hObject handle to connect_button (see GCBO) % eventdata reserved - to be defined in a future v ersion of MATLAB % handles structure with handles and user data ( see GUIDATA) IsConnect = handles.status_com; if (IsConnect == 0), IsConnect = 1; s = serial( 'com1' , 'baudrate' ,19200); s.BytesAvailableFcn = @BytesAvailable_Callback; fopen(s); temp = s.status; if (temp == 'open' ), set(handles.status_static, 'String' , 'Connected' ); else set(handles.status_static, 'String' , 'A Problem occur' ); end ; end ; handles.com = s; handles.status_com = IsConnect; guidata(hObject,handles);

Page 96: Cơ sở thiết kế robot tự hành

Phụ lục

SV: ðẶNG QUANG VINH 86

%% ---------------------- Serial_Callback function BytesAvailable_Callback(obj,event) global hand; ind = fscanf(obj); set(hand.edit_RX, 'String' ,ind); % --- Executes on button press in disconnect_button . function disconnect_button_Callback(hObject, eventdata, han dles) % hObject handle to disconnect_button (see GCBO) % eventdata reserved - to be defined in a future v ersion of MATLAB % handles structure with handles and user data ( see GUIDATA) IsConnect = handles.status_com; s = handles.com; if (IsConnect == 1), IsConnect = 0; fclose(s); delete(s); clear s; set(handles.status_static, 'String' , 'Disconnected' ); end ; handles.status_com = IsConnect; guidata(hObject,handles); % --- Executes on button press in backward_button. function backward_button_Callback(hObject, eventdata, handl es) % hObject handle to backward_button (see GCBO) % eventdata reserved - to be defined in a future v ersion of MATLAB % handles structure with handles and user data ( see GUIDATA) IsConnect = handles.status_com; s = handles.com; if (IsConnect == 1), fprintf(s, 'b' ); end ; handles.com = s; guidata(hObject,handles); % --- Executes on button press in stop_button. function stop_button_Callback(hObject, eventdata, handles) % hObject handle to stop_button (see GCBO) % eventdata reserved - to be defined in a future v ersion of MATLAB % handles structure with handles and user data ( see GUIDATA) IsConnect = handles.status_com; s = handles.com; if (IsConnect == 1), fprintf(s, 's' );

Page 97: Cơ sở thiết kế robot tự hành

Phụ lục

SV: ðẶNG QUANG VINH 87

end ; handles.com = s; guidata(hObject,handles); % --- Executes on button press in right_button. function right_button_Callback(hObject, eventdata, handles) % hObject handle to right_button (see GCBO) % eventdata reserved - to be defined in a future v ersion of MATLAB % handles structure with handles and user data ( see GUIDATA) IsConnect = handles.status_com; s = handles.com; if (IsConnect == 1), fprintf(s, 'r' ); end ; handles.com = s; guidata(hObject,handles); % --- Executes on button press in forward_button. function forward_button_Callback(hObject, eventdata, handle s) % hObject handle to forward_button (see GCBO) % eventdata reserved - to be defined in a future v ersion of MATLAB % handles structure with handles and user data ( see GUIDATA) IsConnect = handles.status_com; s = handles.com; if (IsConnect == 1), fprintf(s, 'f' ); end ; handles.com = s; guidata(hObject,handles); % --- Executes on button press in left_button. function left_button_Callback(hObject, eventdata, handles) % hObject handle to left_button (see GCBO) % eventdata reserved - to be defined in a future v ersion of MATLAB % handles structure with handles and user data ( see GUIDATA) IsConnect = handles.status_com; s = handles.com; if (IsConnect == 1), fprintf(s, 'l' ); end ; handles.com = s; guidata(hObject,handles); % --- Executes on button press in auto_button. function auto_button_Callback(hObject, eventdata, handles) % hObject handle to auto_button (see GCBO) % eventdata reserved - to be defined in a future v ersion of MATLAB % handles structure with handles and user data ( see GUIDATA) s = handles.com; vid = videoinput( 'winvideo' ,1);

Page 98: Cơ sở thiết kế robot tự hành

Phụ lục

SV: ðẶNG QUANG VINH 88

set(vid, 'FramesPerTrigger' , Inf); set(vid, 'ReturnedColorspace' , 'rgb' ) vid.FrameGrabInterval = 3; start(vid) figure(); while (vid.FramesAcquired<=300) data = getsnapshot(vid); diff_im = imsubtract(data(:,:,1), rgb2gray(data )); diff_im = medfilt2(diff_im, [3 3]); diff_im = im2bw(diff_im,0.18); diff_im = bwareaopen(diff_im,50); bw = bwlabel(diff_im, 8); stats = regionprops(bw, 'BoundingBox' , 'Centroid' , 'Area' ); imshow(data) hold on areamax=zeros(1,length(stats)); for j=1:length(stats) areamax(j)=stats(j).Area; end [object,j]= max(areamax); if j>0 bb = stats(j).BoundingBox; bc = stats(j).Centroid; ss = stats(j).Area; rectangle( 'Position' ,bb, 'EdgeColor' , 'g' , 'LineWidth' ,2) plot(bc(1),bc(2), '-bo' , 'markerfacecolor' , 'b' , 'markersize' ,4) a=text(bc(1)+10,bc(2), strcat( 'X: ' , num2str(round(bc(1))), ' Y: ' , num2str(round(bc(2))))); set(a, 'FontName' , 'Arial' , 'FontWeight' , 'bold' , 'FontSize' , 12, 'Color' , 'yellow' ); if bc(1)<40 fprintf(s, 'l' ); elseif bc(1)>120 fprintf(s, 'r' ); elseif 50<bc(1)<110 & ss>3500 fprintf(s, 'b' ); elseif 50<bc(1)<110 & ss<1500 fprintf(s, 'f' ); else fprintf(s, 's' ); end end hold off end fprintf(s, 's' ); stop(vid); flushdata(vid); clear vid handles.com = s; guidata(hObject,handles); % --- Executes on button press in exit_button. function exit_button_Callback(hObject, eventdata, handles) % hObject handle to exit_button (see GCBO) % eventdata reserved - to be defined in a future v ersion of MATLAB

Page 99: Cơ sở thiết kế robot tự hành

Phụ lục

SV: ðẶNG QUANG VINH 89

% handles structure with handles and user data ( see GUIDATA) IsConnect = handles.status_com; s = handles.com; if (IsConnect == 1), fclose(s); delete(s); clear s ; end ; close(test3); % --- Executes on button press in reset_button. function reset_button_Callback(hObject, eventdata, handles) % hObject handle to reset_button (see GCBO) % eventdata reserved - to be defined in a future v ersion of MATLAB % handles structure with handles and user data ( see GUIDATA) function edit_RX_Callback(hObject, eventdata, handles) % hObject handle to edit_RX (see GCBO) % eventdata reserved - to be defined in a future v ersion of MATLAB % handles structure with handles and user data ( see GUIDATA) % Hints: get(hObject,'String') returns contents of edit_RX as text % str2double(get(hObject,'String')) returns contents of edit_RX as a double % --- Executes during object creation, after settin g all properties. function edit_RX_CreateFcn(hObject, eventdata, handles) % hObject handle to edit_RX (see GCBO) % eventdata reserved - to be defined in a future v ersion of MATLAB % handles empty - handles not created until afte r all CreateFcns called % Hint: edit controls usually have a white backgrou nd on Windows. % See ISPC and COMPUTER. if ispc set(hObject, 'BackgroundColor' , 'white' ); else set(hObject, 'BackgroundColor' ,get(0, 'defaultUicontrolBackgroundColor' )); end