TỔNG QUAN
Lý do chọn đề tài
Công nghệ xe tự lái đang phát triển mạnh mẽ và được coi là an toàn hơn do khả năng xử lý nhanh chóng của máy móc so với con người Mắt thường chỉ thu nhận được một số khung hình nhất định mỗi giây, trong khi máy quay tốc độ cao hoạt động hiệu quả hơn Tại Việt Nam, cơ sở hạ tầng giao thông đang được cải thiện, và việc xây dựng hệ thống giao thông thông minh là rất cần thiết trong quá trình công nghiệp hóa, hiện đại hóa đất nước Nghiên cứu và phát triển các công cụ hỗ trợ cho hệ thống giao thông thông minh, bao gồm phương tiện giao thông thông minh, là yêu cầu cấp bách của thời đại Ứng dụng công nghệ xử lý ảnh để nhận dạng đường đi cho ô tô tự động là một phần quan trọng trong hướng phát triển này.
Chúng em quyết định nghiên cứu hệ thống quan sát cho xe nhằm xác định tình trạng giao thông, từ đó cảnh báo nguy hiểm để bảo vệ an toàn cho người điều khiển ô tô Mục tiêu là giảm thiểu các yếu tố chủ quan và khách quan có thể xảy ra khi tham gia giao thông.
Mục tiêu và phạm vi nghiên cứu
Trong quá trình học tập tại trường, chúng em đã áp dụng kiến thức về kỹ năng hàn-cắt, hệ thống điện thân xe, và lập trình Matlab, Arduino để tiến hành nghiên cứu.
Thực hiện chế tạo xe mô hình, lắp đặt các thiết bị cảm biến hình ảnh lên xe
Thử nghiệm đo độ chính xác trong việc phát hiện làn đường, phát hiện vật cản chuyển động và đánh lái giữ làn đường
Phạm vi nghiên cứu của chúng em bị hạn chế do không có điều kiện thực hiện thí nghiệm trên xe thực tế, mà chỉ tiến hành trên mô hình Wevcam của máy tính với độ phân giải thấp Điều này dẫn đến độ chính xác không cao, cộng với việc chế tạo cơ khí không chính xác cũng gây ra nhiều sai số trong kết quả.
Phương pháp nghiên cứu
Để ứng dụng xử lý ảnh cho việc nhận dạng đường đi của xe mô hình, đề tài đề xuất các bước thực hiện cụ thể.
1 Nghiên cứu các cơ sở lý thuyết: Lý thuyết về xử lý ảnh, tham khảo và ứng dụng các phương pháp của các công trình nghiên cứu đã công bố để xây dựng một phương pháp mang tính đổi mới
2 Tìm hiểu các loại camera và xác định các tham số của camera: Đây là một bước rất quan trọng bởi đề tài xây dựng trên cơ sở ứng dụng xử lý ảnh
3 Nghiên cứu các công cụ xử lý ảnh phù hợp để thu thập và xử lý: LabVIEW, Matlab, OpenCV…
4 Thu nhận hình ảnh và xử lý dựa trên các ảnh thu nhận được: Viết chương trình thu thập dữ liệu là hình ảnh từ các camera để nhận biết các dấu hiệu phân cách đường trên cơ sở ứng dụng các phần mềm xử lý ảnh
5 Theo vết làn đường: Dựa trên kết quả của bước 4 xây dựng chương trình bám theo vết làn đường thông qua bám biên của làn đường
6 Xây dựng thuật toán điều khiển, chương trình nhận dạng đường đi,vật cản để xuất tín hiệu điều khiển phần cứng.
Phạm vi ứng dụng
Hiện nay, nhiều hãng xe trên thế giới đang áp dụng công nghệ mới để nâng cao an toàn cho người lái và người tham gia giao thông Một ví dụ điển hình là công nghệ Eye Sight của Subaru, đã chứng minh hiệu quả rõ rệt trong việc giảm thiểu tai nạn Theo thống kê an toàn giao thông tại Nhật Bản, công nghệ này đã giúp giảm số vụ va chạm lên tới 61% từ năm 2010.
Năm 2014, các phương tiện trang bị hệ thống Eyesight đã ghi nhận tỷ lệ va chạm phía sau giảm tới 84% so với xe không có hệ thống này Công nghệ tiên tiến này cũng giúp giảm 62% tỷ lệ va chạm giữa các phương tiện và 49% tỷ lệ va chạm giữa xe với người đi bộ.
Hệ thống này hoạt động như một đôi mắt thứ hai cho người lái, giúp quan sát đường phía trước Nó bao gồm hai camera màu được lắp đặt ở hai bên gương chiếu hậu, có khả năng phát hiện phương tiện, người đi bộ, và xe đạp, cũng như nhận diện nguy cơ va chạm từ khoảng cách 110 mét Hệ thống này góp phần nâng cao an toàn khi lái xe.
Hệ thống lái, phanh, điều khiển và cảnh báo đi lệch làn đường hay có vật cản phía trước, thông qua rung vô-lăng hoặc âm thanh, đóng vai trò quan trọng trong việc nâng cao tính năng an toàn cho xe Việc ứng dụng hệ thống quan sát để xác định tình trạng giao thông là nền tảng cho sự phát triển tính năng tự động hóa, hướng đến các dự án lớn hơn như xe tự hành và xe không người lái.
CƠ SỞ LÝ THUYẾT
Lý thuyết tổng quan về xử lý ảnh
Xử lý ảnh có ứng dụng rộng rãi trong cuộc sống, đặc biệt trong lĩnh vực y tế và an ninh Một ứng dụng gần gũi với đời sống gia đình là cải tiến hình ảnh tivi, với công nghệ xử lý ảnh số đóng vai trò quan trọng trong việc nâng cao chất lượng hình ảnh của hệ thống truyền hình độ phân giải cao (HDTV).
Người máy ngày càng trở nên quan trọng trong cả công nghiệp lẫn gia đình, thực hiện các công việc nhàm chán, nguy hiểm và đòi hỏi tốc độ, độ chính xác vượt trội hơn con người Sự phát triển của người máy đồng nghĩa với việc thị giác máy tính (Computer Vision) sẽ có vai trò quan trọng hơn, khi chúng cần không chỉ phát hiện và nhận dạng các bộ phận công nghiệp mà còn “hiểu” những gì chúng “thấy” để đưa ra hành động phù hợp Xử lý ảnh sẽ có ảnh hưởng lớn đến sự phát triển của thị giác máy tính.
Nhìn chung, những ứng dụng của xử lý ảnh số là vô hạn
2.1.1 Xử lý ảnh số là gì?
Xử lý ảnh số sử dụng các máy tính số, chúng được phát triển để đáp ứng ba vấn đề chính liên quan đến các bức ảnh là :
- Số hóa và mã hóa các bức ảnh để đơn giản hóa quá các quá trình truyền thông, in ấn và lưu giữ ảnh
Cải thiện chất lượng và khôi phục ảnh giúp hiểu rõ hơn nội dung thông tin trong từng bức ảnh, bao gồm hình ảnh bề mặt các hành tinh xa xôi do vệ tinh gửi về và các ảnh nội soi, công hưởng từ trong khảo sát y học.
Phân đoạn và mô tả ảnh là quá trình quan trọng trong việc tạo ra các ảnh như tín hiệu đầu vào cho hệ thống nhận diện nhân tạo Quá trình này giúp tách biệt và phân tích các thông tin có trong ảnh Ngoài ra, phân đoạn và mô tả ảnh còn được biết đến với tên gọi lý giải ảnh, đóng vai trò then chốt trong việc cải thiện khả năng hiểu biết của các hệ thống máy tính về nội dung hình ảnh.
Lý giải ảnh có ứng dụng rộng rãi trong thị giác máy tính, rôbốt và nhận dạng mục tiêu Khác với các lĩnh vực khác của xử lý ảnh, lý giải ảnh tập trung vào việc hiểu và phân tích thông tin từ hình ảnh, trong khi các lĩnh vực như cải tiến, phục hồi và số hóa chủ yếu xử lý hình ảnh mà không thay đổi bản chất của chúng Trong lý giải ảnh, quá trình xử lý tín hiệu đóng vai trò quan trọng để đạt được kết quả chính xác và hiệu quả.
5 đầu vào là ảnh nhưng đầu ra là một biểu diễn bằng một ký hiệu nội dung của ảnh đầu vào
Sự phát triển thành công của hệ thống trong lĩnh vực này phụ thuộc vào việc kết hợp giữa xử lý tín hiệu và trí tuệ nhân tạo Trong hệ lý giải ảnh, xử lý ảnh thực hiện các tác vụ cơ bản như giảm thiểu sự xuống cấp và trích xuất các đường biên, trong khi trí tuệ nhân tạo đảm nhận các nhiệm vụ phức tạp hơn như thao tác ký hiệu và quản lý tri thức.
Phân đoạn và mô tả ảnh là hai khái niệm then chốt trong nghiên cứu hệ thống quan sát cho xe, giúp xác định tình trạng giao thông một cách hiệu quả Việc áp dụng lý thuyết này không chỉ nâng cao khả năng nhận diện tình huống giao thông mà còn hỗ trợ trong việc phát triển các giải pháp an toàn hơn cho người tham gia giao thông.
Một bức ảnh là hình ảnh ảo của một đối tượng, người hay phong cảnh, được tạo ra bởi thiết bị quang học như gương, ống kính hoặc máy ảnh Hình ảnh này mang tính chất hai chiều (2D) và phản ánh thế giới thực ba chiều (3D) của đối tượng hoặc cảnh vật.
Ảnh kỹ thuật số là hình ảnh hai chiều được tạo thành từ một tập hợp hữu hạn các điểm ảnh, thường được gọi là pixels, pels hoặc phần tử ảnh.
Hình 2 1 Ảnh tương tự và ảnh số hóa
Ảnh số thường được biểu diễn dưới dạng ma trận hai chiều (2D) của các số thực, với các phần tử đại diện cho các pixel số hóa Một ảnh số hóa được ký hiệu là f(x,y) cho một ảnh đơn sắc có kích thước MxN, trong đó x là chỉ số hàng (từ 0 đến M-1) và y là chỉ số cột (từ 0 đến N-1).
Hình 2 2 Điểm quy chiếu không gian của điểm ảnh
Giá trị của hàm f(x,y) tại tọa độ (xo,yo), ký hiệu là f(xo,yo), được gọi là cường độ hay mức xám của ảnh tại điểm ảnh đó Mức độ cường độ tối đa và tối thiểu của mỗi điểm ảnh phụ thuộc vào kiểu dữ liệu và quy ước được áp dụng Thông thường, giá trị này nằm trong khoảng từ 0.0 (đen) đến 1.0 (trắng) cho kiểu double, và từ 0 (đen) đến 255 (trắng) cho kiểu dữ liệu uint8.
Một ảnh số được xác định bởi ba thuộc tính chính: độ phân giải, độ nét và số lượng lớp Số lớp trong ảnh phản ánh số mảng điểm ảnh có trong ảnh, ví dụ, một ảnh đen trắng chỉ có một lớp duy nhất.
Trong Matlab và các công cụ xử lý ảnh, các điểm ảnh được đánh số bắt đầu từ chỉ số 1 Chúng ta quy ước ký hiệu f(p,q) để chỉ ảnh f(x,y) trong Matlab.
2.1.2.3 Ảnh nhị phân (1-Bit) Ảnh nhị phân được mã hóa như một mảng hai chiều (2D), thường sử dụng 1bit trên mỗi pixel, trong đó 0 là đen và 1 là trắng
2.1.2.4 Ảnh xám Ảnh xám cũng được mã hóa như một mảng 2D của các điểm ảnh Thường sử dụng 8 bít cho mỗi pixel, trong đó điểm ảnh có giá trị 0 thể hiện màu đen và 255 thể hiện màu trắng và các giá trị trung gian hiển thị các sắc thái khác nhau của màu xám
Trong Matlab, ảnh cường độ (ảnh xám) có thể được xử lý với nhiều kiểu dữ liệu khác nhau Cụ thể, ảnh đơn sắc kiểu uint8 và uint16 có giá trị điểm ảnh trong khoảng [0, 255] và [0, 65535], trong khi ảnh đơn sắc kiểu double có giá trị pixel nằm trong khoảng [0.0, 1.0].
Một ảnh màu thật có 3 lớp – mỗi lớp thay cho thành phần màu đỏ là Red, màu xanh lục là Green, và màu xanh lơ là Blue
Biến đổi Hough (Hough Transform)
2.2.1 Biến đổi Hough cho đường thẳng
Bằng cách nào đó ta thu được một số điểm, vấn đề đặt ra là cần kiểm tra xe các điểm có là đường thẳng hay không
Để kiểm tra xem n điểm (x_i, y_i), với i từ 1 đến n, có nằm trên cùng một đường thẳng hay không, ta giả định rằng các điểm này thuộc về một đường thẳng có phương trình y = ax + b.
Mỗi điểm (x_i, y_i) trên đường thẳng có thể được biểu diễn dưới dạng y_i = ax_i + b, từ đó suy ra b = -ax_i + y_i cho mọi i = 1, n Điều này cho thấy mỗi điểm trong mặt phẳng sẽ tương ứng với một đường thẳng b = -ax_i + y_i trong mặt phẳng tham số a, b Với n điểm (x_i, y_i) thuộc cùng một đường thẳng, sẽ có n đường thẳng trong mặt phẳng tham số a, b giao nhau tại một điểm duy nhất, điểm giao này chính là hệ số a và b, xác định phương trình của đường thẳng mà các điểm nằm trên đó.
- Xây dựng mảng chỉ số [a, b]và gán giá trị 0 ban đầu cho tất cả các phân tử của mảng
- Với mỗi (x i ,y i ) và với mọi a, b là chỉ số của phần tử mảng thoã mãn b = - ax i + y i tăng giá trị của phân tử mảng tương ứng lên 1
Để xác định phần tử mảng có giá trị lớn nhất, ta cần so sánh giá trị này với số lượng phần tử lớn hơn hoặc bằng ngưỡng θ đã cho Nếu giá trị lớn nhất thỏa mãn điều kiện này, chúng ta có thể kết luận rằng các điểm nằm trên cùng.
1 đường thẳng và đường thẳng có phương trình y = ax +b trong đó a, b tương ứng là chỉ số của phần tử mảng có giá trị lớn nhất tìm được
Ví dụ: Cho 5 điểm (0, 1); (1, 3); ( 2, 5); (3, 5); (4 , 9) và θ = 80% Hãy kiểm tra xem
5 điểm đã cho có nằm trên cùng một đường thẳng hay không? Hãy cho biết phương trình đường thẳng nếu có
- Lập bảng chỉ số [a, b] và gán giá trị 0
Hình 2 6 Bảng chỉ số giá trị
- Tìm phần tử lớn nhất có giá trị 4: 4/5 = 80%
- Kết luận: 5 điểm này nằm trên cùng 1 đường thẳng có phương trình y = 2x+1
2.2.2 Biến đổi Hough cho đường thẳng trong tọa độ cực
Hình 2 7 Đường thẳng Hough trong hệ tọa độ Đề-các
Mỗi điểm (x,y) trong mặt phẳng có thể được biểu diễn bằng cặp (r, φ) trong tọa độ cực Tương tự, mỗi đường thẳng trong mặt phẳng cũng có thể được thể hiện bằng cặp (r, φ), trong đó r là khoảng cách từ góc tọa độ đến đường thẳng, và φ là góc giữa trục Ox với đường thẳng vuông góc Hình 2.16 minh họa đường thẳng Hough trong tọa độ Đề-các.
Ngược lại, mỗi một cặp (r,φ) trong toạ độ cực cũng tương ứng biểu diễn một đường thẳng trong mặt phẳng
Giả sử M(x,y) là điểm trên đường thẳng được biểu diễn bởi (r,φ), và H(x,y) là hình chiếu của góc tọa độ O trên đường thẳng, với các công thức x = rcosφ và y = rsinφ Ngoài ra, ta có mối quan hệ OH.HA = 0.
Mối liên hệ giữa tọa độ Đề-các (x,y) và tọa độ cực (r,φ) được thể hiện qua phương trình xcosφ + ysinφ = ro, cho thấy rằng các điểm (x,y) tạo thành những đường thẳng trong hệ tọa độ Đề-các Biến đổi Hough ánh xạ các điểm này thành n đường sin trong tọa độ cực, với tất cả các đường này đều đi qua điểm (r,φ) Giao điểm của n đường sin sẽ xác định một đường thẳng duy nhất trong tọa độ Đề-các Do đó, mỗi đường thẳng đi qua điểm (x,y) tương ứng với một cặp giá trị (r,φ), và số lượng đường thẳng đi qua (x,y) sẽ tương đương với số cặp giá trị (r,φ) tồn tại.
SƠ LƯỢC VỀ LINH KIÊN VÀ PHẦN MỀM ỨNG DỤNG
Giới thiệu chung về Arduino
Arduino đã tạo nên một cơn sốt trong cộng đồng DIY toàn cầu, tương tự như ảnh hưởng của Apple trong lĩnh vực thiết bị di động Sự phổ biến của Arduino không chỉ thu hút một lượng lớn người dùng đa dạng từ học sinh đến sinh viên đại học, mà còn khiến cả những người sáng lập ra nó cũng phải ngạc nhiên Các trường đại học danh tiếng như MIT, Stanford, và Carnegie Mellon đã áp dụng Arduino trong nghiên cứu và giảng dạy Đặc biệt, Google cũng đã tham gia vào cuộc chơi này với bộ kit Arduino Mega ADK, giúp phát triển ứng dụng Android tương tác với cảm biến và thiết bị khác.
Arduino là một bo mạch vi xử lý cho phép lập trình và tương tác với các thiết bị phần cứng như cảm biến, động cơ và đèn Điểm nổi bật của Arduino là môi trường phát triển dễ sử dụng và ngôn ngữ lập trình thân thiện, giúp người mới bắt đầu dễ dàng tiếp cận Hiện tượng Arduino còn được thúc đẩy bởi mức giá hợp lý, chỉ khoảng $30 cho một board với 20 ngõ I/O, cùng với tính chất nguồn mở từ phần cứng đến phần mềm, tạo điều kiện thuận lợi cho người dùng sáng tạo và phát triển dự án.
Arduino được ra mắt tại thị trấn Ivrea, Ý, và mang tên vị vua thế kỷ 9, King Arđuin Được giới thiệu vào năm 2005 như một công cụ dành cho sinh viên của giáo sư Massimo Ranzi tại trường Interaction Design Institute Ivrea (IDII), Arduino nhanh chóng trở nên phổ biến dù không được tiếp thị mạnh mẽ Sự lan truyền thông tin chủ yếu nhờ vào những phản hồi tích cực từ người dùng đầu tiên Ngày nay, Arduino đã trở thành biểu tượng công nghệ, thu hút nhiều người đến thăm thị trấn Ivrea để khám phá nguồn gốc của nó.
Giới thiệu chung về Arduino MEGA 2560
Board mạch Arduino Mega 2560 R3 là phiên bản nâng cấp của Arduino Mega, còn được biết đến với tên gọi Arduino Mega 1208 Sự khác biệt lớn giữa các phiên bản này nằm ở khả năng xử lý và số lượng chân kết nối, giúp mở rộng khả năng ứng dụng trong các dự án điện tử phức tạp.
Arduino Mega 2560, phiên bản phổ biến nhất hiện nay, sử dụng chip Atmega2560 với bộ nhớ flash 256KB, 8KB SRAM và 4KB EEPROM Điều này cho phép người dùng phát triển các chương trình phức tạp và điều khiển nhiều thiết bị lớn như máy in 3D, robot và các hệ thống trên ô tô.
Arduino Mega2560 là một vi điều khiển bằng cách sử dụng ATmega2560
54 chân digital (15 chân có thể sử dụng như chân PWM)
UARTs ( cổng nối tiếp phần cứng)
Hình 3 1 Board mạch Arduino Mega 2560
Chip xử lý Atmega2560 Điện áp hoạt động 5V Điện áp vào (đề nghị) 7V-15V Điện áp vào giới hạn (đề nghị) 6V-20V
Cường độ dòng điện trên mỗi 3.3V pin 50mA
Cường độ dòng điện trên mỗi I/O pin 20mA
Giới thiệu chung về cảm biến siêu âm SRF05
Sóng siêu âm (sonar) là loại sóng âm tần số cao mà con người không nghe thấy, nhưng chúng hiện diện rộng rãi trong tự nhiên Nhiều loài động vật như dơi và cá heo sử dụng sóng siêu âm để giao tiếp, săn mồi và định vị không gian.
Dựa trên quan sát hoạt động của các loài vật, nguyên tắc sử dụng sóng âm để định vị có thể được tóm gọn trong ba bước đơn giản.
1 Vật chủ phát ra sóng âm
2 Sóng âm này va chạm với môi trường xung quanh và phản xạ lại
3 Dựa vào thời gian phát / thu, khoảng cách giữa vật chủ và môi trường xung quanh được tính ra
Khoảng cách truyền sóng âm phụ thuộc vào môi trường truyền dẫn, với tốc độ truyền trong nước hoặc kim loại nhanh hơn nhiều so với trong không khí Đặc biệt, sóng âm không thể truyền qua môi trường chân không.
Dựa trên nguyên tắc ứng dụng sóng âm trong khoa học công nghệ hiện đại, chúng ta đã chứng kiến nhiều ứng dụng thiết thực trong đời sống, bao gồm thiết bị định vị dưới biển cho tàu ngầm, công nghệ radar và các thiết bị đo khoảng cách môi trường như đo độ sâu của đại dương.
Cảm biến siêu âm SRF05 cũng hoạt động theo như nguyên tắc ở trên, thiết bị gồm có
Cảm biến 2 loa - thu và phát - được thiết kế với 5 chân kết nối với Arduino, có tầm hoạt động tối đa lên đến 3m theo tài liệu của nhà sản xuất Các chân này thực hiện những chức năng cụ thể để đảm bảo hiệu quả hoạt động của cảm biến.
1 Vcc: cấp nguồn cho cảm biến
2 Trigger: kích hoạt quá trình phát sóng âm Quá trình kích hoạt khi một chu kì điện cao / thấp diễn ra
3 Echo: bình thường sẽ ở trạng thái 0V, được kích hoạt lên 5V ngay khi có tín hiệu trả về, sau đó trở về 0V
4 Gnd: nối với cực âm của mạch
Giới thiệu về động cơ điện một chiều
Động cơ điện một chiều hoạt động với dòng điện một chiều và được ứng dụng rộng rãi trong cả lĩnh vực dân dụng lẫn công nghiệp Cấu tạo của động cơ bao gồm hai phần chính: stato đứng yên và rotor quay Phần cảm, thường được đặt trên stato, tạo ra từ trường xuyên qua các vòng dây quấn của phần ứng, thường nằm trên rotor Ngoài ra, động cơ còn có cổ góp, ổ bi và trục Khi dòng điện chạy qua mạch phần ứng, các thanh dẫn sẽ chịu tác động từ trường, tạo ra chuyển động.
Hình 3 2 Cảm biến siêu âm SRF-05
Động cơ điện một chiều hoạt động nhờ vào các lực điện từ tác động theo phương tiếp tuyến với mặt trụ rotor, dẫn đến sự quay của rotor Có nhiều loại động cơ khác nhau tùy thuộc vào cách mắc cuộn dây roto và stato.
Động cơ kích từ độc lập: Cuộn dây kích từ (cuộn dây stato) và cuộn dây phần ứng (roto) mắc riêng rẽ nhau, có thể cấp nguồn riêng biệt
Động cơ kích từ nối tiếp là loại động cơ mà cuộn dây kích từ được mắc nối tiếp với cuộn dây phần ứng Trong trường hợp động cơ kích từ độc lập, cuộn dây kích từ có thể được thay thế bằng nam châm vĩnh cửu, tạo ra động cơ điện một chiều sử dụng nam châm vĩnh cửu.
Giới thiệu chung về Matlab
Matlab (Matrix Laboratory) là phần mềm phổ biến do MathWorks phát triển, được ưa chuộng bởi kỹ sư, nhà khoa học và nhà nghiên cứu trong cả ngành công nghiệp và học thuật Sự phổ biến của Matlab đến từ nhiều yếu tố, trong đó nổi bật là các bộ công cụ chuyên biệt được thiết kế cho từng lĩnh vực, từ mạng nơron đến tài chính và xử lý ảnh Với Matlab, người dùng có thể giải quyết các vấn đề một cách đơn giản và trực quan, mà không cần phải là lập trình viên chuyên nghiệp.
Hình 3 4 Giao diện khi khởi động
Matlab, với bộ công cụ mạnh mẽ, cho phép giải quyết hiệu quả các bài toán như hệ phương trình tuyến tính, phi tuyến và các bài toán ma trận, mang lại kết quả nhanh chóng và chính xác Bộ lệnh của Matlab rất phong phú, lên tới hàng ngàn lệnh và ngày càng được mở rộng nhờ vào các hàm ứng dụng do người dùng tạo ra cũng như thư viện hỗ trợ.
Matlab là một công cụ mạnh mẽ cho việc xử lý dữ liệu và biểu diễn đồ họa, cho phép người dùng quan sát kết quả một cách trực quan trong không gian hai chiều và ba chiều, từ đó đưa ra giải pháp tối ưu Nó hỗ trợ nhiều ngôn ngữ lập trình phổ biến như C, C++, Fortran và Java, giúp việc chuyển đổi ứng dụng trở nên dễ dàng và linh hoạt Trong lĩnh vực xử lý ảnh số, Matlab đã được ứng dụng rộng rãi tại Việt Nam và trên thế giới, với nhiều hệ thống như giữ xe tự động và nhận diện khuôn mặt.
3.5.1 Các thành phần cơ bản của Matlab
Phần này trình bày các yếu tố cơ bản của Matlab gồm: Môi trường làm việc, các kiểu dữ liệu và sự hoạt động của các dòng lệnh
Môi trường làm việc của Matlab bao gồm:
Matlab Desktop: thông thường gồm 5 của sổ chính: Command Window,
Workspace Browser, Current Directory Window, Command History Window và một hoặc nhiều Figure Window – để hiển thị hình ảnh hoặc đồ thị
Matlab Editor: Dùng để tạo và chỉnh sửa các M-files Bao gồm các hàm để lưu, xem và sửa lỗi các M-files
Help System: Là cửa sổ trợ giúp được hiển thị dưới dạng trình duyệt HTML, bao gồm các chức năng tìm kiếm và trợ giúp
Hình 3 5 Cửa sổ làm việc
Matlab hỗ trợ nhiều kiểu dữ liệu, trong đó tám kiểu đầu tiên là kiểu số Kiểu dữ liệu mặc định cho số trong Matlab là Double Người dùng có thể dễ dàng chuyển đổi giữa các kiểu dữ liệu khác nhau Một chuỗi (string) trong Matlab được định nghĩa là một mảng 1x n ký tự.
Các kiểu dữ liệu trong lập trình bao gồm: unit8, là số nguyên không dấu 8-Bit (1 byte); unit16, số nguyên không dấu 16-Bit (2 byte); unit32, số nguyên không dấu 32-Bit (4 byte); int8, số nguyên có dấu 8-Bit (1 byte); int16, số nguyên có dấu 16-Bit (2 byte); int32, số nguyên có dấu 32-Bit (4 byte); single, số thập phân với độ chính xác đơn (4 byte); double, số thập phân với độ chính xác kép (8 byte); logical, kiểu logic với giá trị 0 (false) hoặc 1 (true) (1 byte); và char, kiểu ký tự (2 byte).
Một trong những ưu điểm nổi bật của Matlab là khả năng xử lý mảng, cho phép làm việc với tập số được sắp xếp theo thứ tự như một biến đơn Tính năng này giúp cho mã nguồn trong Matlab trở nên gọn gàng và dễ hiểu hơn Mảng được xem là một trong những đối tượng cơ bản trong Matlab.
Mảng một chiều: Véc tơ
Mảng kiểu dòng (Véc tơ dòng) trong Matlab là tập hợp các phần tử được phân tách bằng khoảng trắng, dấu phẩy, hoặc cả hai, và được đặt trong dấu ngoặc vuông [ ] Matlab hiển thị véc tơ dòng theo hàng ngang, giúp người dùng dễ dàng quan sát và xử lý dữ liệu.
Mảng kiểu cột (Véc tơ cột): Các phần tử được ngăn cách bằng dấu chẩm phẩy (;) Matlab hiển thị véc tơ cột theo phương dọc
Để khai báo một mảng với các phần tử cách đều theo số gia q, bạn có thể sử dụng cú pháp: Tên_mảng = [phần tử đầu: số gia q: phần tử cuối].
Mảng hai chiều: Ma trận
Một mảng trong Matlab có thể có nhiều dòng, nhiều cột Một mảng hai chiều như vậy được gọi là ma trận
Một ma trận có kích thước m x n, chính là một mảng có n dòng, m cột
Trong Matlab, véc tơ được coi là các mảng hai chiều đặc biệt với kích thước 1 x n (véc tơ dòng) hoặc m x 1 (véc tơ cột) Tất cả véc tơ và ma trận đều được xếp vào lớp double array trong không gian làm việc.
Có thể chỉnh sửa các phần tử của ma trận bằng cú pháp: open(‘ten_ma_tran’)
Các hàm thông dụng đối với đối số là mảng
Hàm size(X): trả về một véc tơ dòng [m n] chứa kích thước của mảng X có m dòng, n cột
Hàm length(X): trong đó X là một ma trận, sẽ trả về số dòng hoặc số cột lớn nhất
Hàm max(X) trong lập trình có chức năng khác nhau tùy thuộc vào loại dữ liệu đầu vào Nếu X là một véc tơ, hàm sẽ trả về phần tử lớn nhất trong véc tơ đó Ngược lại, nếu X là một ma trận, hàm sẽ tạo ra một véc tơ dòng chứa các phần tử lớn nhất từ mỗi cột của ma trận.
Hàm min(X) : tương tự hàm max(X) nhưng sẽ trả về phần tử bé nhất
Hàm sum(X) : tính tổng các phần tử trong từng cột của ma trận X, kết quả chứa trong một véc tơ dòng
Hàm sort(X) : sắp xếp mỗi phần tử của ma trận X theo thứ tự tăng dần từ dòng
1 đến dòng cuối, kết quả là một ma trận cùng kích thước với X
Lệnh [x, k] = max(X) hoạt động tương tự như max(X), nhưng với điểm khác biệt là giá trị của phần tử lớn nhất được lưu trữ trong véc tơ dòng x, trong khi các chỉ số tương ứng được lưu trong véc tơ dòng k.
Lệnh [u, v, w] = find(X) được sử dụng để tìm các phần tử khác 0 trong ma trận X Véc tơ u sẽ chứa chỉ số dòng, v sẽ chứa chỉ số cột, và véc tơ w sẽ lưu trữ các giá trị khác 0 của ma trận X.
Mảng ba chiều có kích thước m x n x q, trong khi mảng bốn chiều có kích thước m x n x q x p, với hai chiều đầu tiên đại diện cho dòng và cột, còn các chiều lớn hơn được gọi là trang Để truy xuất tất cả các phần tử ở trang 2 của mảng X, bạn có thể sử dụng cú pháp: X(:, :, 2) Hàm ndims() sẽ trả về số chiều của một mảng.
Chỉ số mảng và ma trận trong Matlab
Các phần tử trong mảng (bao gồm ma trận và véc tơ) được đánh chỉ số bắt đầu từ 1 Vì vậy, cú pháp a(1) được sử dụng để truy cập phần tử đầu tiên của mảng một chiều a, trong khi f(1,1) được dùng để gọi phần tử đầu tiên của mảng hai chiều f, ví dụ như các điểm ảnh bên trái của một ảnh đơn sắc f.
Matlab cho phép người dùng tạo mảng với số chiều không giới hạn, tuy nhiên số lượng phần tử trong mảng lại bị giới hạn Giới hạn này phụ thuộc vào cấu hình máy tính và phiên bản Matlab mà bạn đang sử dụng Để kiểm tra giới hạn này, bạn có thể sử dụng cú pháp phù hợp.
Matlab có một vài mảng tiêu chuẩn được xây dựng sẳn:
zeros(m,n) tạo ra một ma trận mxn phần tử 0
ones(m,n) tạo ra một ma trân mxn phần tử 1
true(m,n) tạo ra một ma trận mxn phẩn tử logic 1
fales(m,n) tạo ra một ma trận mxn phẩn tử logic 0
eye(n) trả về một ma trận đơn vị nxn
magic(m) trả về một ma trận vuông có tổng các phần tử trên một hàng, một cột hoặc trên đường chéo bằng nhau
rand(m,n) tạo một ma trận mxn mà các phần tử là các giá trị ngẫu nhiên nằm trong đoạn [0,1]
3.5.1.4 Các công cụ lập trình: Scrip và Function
Image Acquisition Toolbox
Image Acquisition Toolbox là tập hợp các hàm của MATLAB có chức năng thu thập hình ảnh số từ các thiết bị thu hình Cụ thể là:
- Thu thập hình ảnh từ các thiết bị thu hình khác nhau, từ loại chuyên dụng đến loại rẻ tiền như Webcam (giao tiếp USB)
- Trình chiếu (preview) luồng dữ liệu video từ thiết bị thu hình
- Trích hình ảnh từ luồng dữ liệu video
- Thiết lập các callback cho các sự kiện khác nhau
- Chuyển dữ liệu hình ảnh vào không gian workspace của MATLAB để xử lý ảnh tiếp theo
3.6.2 Các bước thu thập hình ảnh cơ bản
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
Bước 2: Chỉ định thông tin phần cứng:
Ta 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 với PC)
Gõ lệnh imaqhwinfo để biết tên các loại thiết bị có thể dùng
Trong đó ‘winvideo’ chỉ các thiết bị dùng chuẩn Windows Driver Model (WDM) hoặc Video for Windows (VFW) Bao gồm các loại USB WEBCAM và camera IEEE 1394
Mỗi thiết bị kết nối với PC được gán một số ID riêng, bắt đầu từ deviceID = 1 cho thiết bị đầu tiên, deviceID = 2 cho thiết bị thứ hai, và cứ tiếp tục như vậy Để kiểm tra số lượng thiết bị loại winvideo đang kết nối với máy, bạn có thể sử dụng lệnh imaqhwinfor với đối số là winvideo.
'E:\Mathlab\osgenericvideointerface\toolbox\imaq\supportpackages\gener icvideo\adaptor\win64\mwwinv '
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 bằng cú pháp:
SupportedFormats: {1x12 cell} Đây là webcam mặc định của laptop
Bước 3: Tạo đối tượng đại diện cho luồng dữ liệu hình ảnh Để tạo luồng dữ liệu hình ảnh ta dùng lệnh videoinput hoặc lệnh imaq.VideoDevice
Summary of Video Input Object Using 'HP Webcam'
Acquisition Source(s): input1 is available
Acquisition Parameters: 'input1' is the current selected source
10 frames per trigger using the selected source
'YUY2_160x120' video data to be logged upon START
Grabbing first of every 1 frame(s)
Log data to 'memory' on trigger
Trigger Parameters: 1 'immediate' trigger(s) on START
Bước 4: Hiển thị luồng video lên màn hình để xem thử Để xem trước luồng dữ liệu video ta dùng lệnh preview
Để kết thúc việc xem video, bạn có thể sử dụng lệnh stoppreview, hoặc nếu muốn đóng cửa sổ preview, hãy dùng lệnh closepreview(vid).
Bước 5: Để lấy một khung ảnh và lưu thành file đồ hoạ, bạn sử dụng lệnh getsnapshot để nhập ảnh vào quá trình xử lý Sau đó, để lưu ảnh dưới dạng file đồ hoạ, hãy sử dụng lệnh imwrite.
Bước 6: Làm sạch bộ nhớ
Sau khi lấy dữ liệu hình ảnh ta có thể giải phóng bớt bộ nhớ bằng các lệnh sau:
35 delete(vid) clear close(gcf)
Computer Vision System Toolbox
Đây là bộ công cụ được sử dụng chính trong đề tài
Computer Vision Toolbox là bộ công cụ mạnh mẽ cung cấp các thuật toán và hàm cho việc mô phỏng thị giác máy và xử lý ảnh Nó hỗ trợ nhiều ứng dụng quan trọng trong lĩnh vực này.
- Phát hiện và nhận dạng đối tượng
- Xử lí video, chú thích đối tượng trong video, xuất nhập video, hiển thị video
3.7.2 Các hàm xử lí video
Hàm này có chức năng đọc các hình ảnh và âm thanh từ các file video hoặc các file ảnh
Cú pháp: videoFReader=vision.VideoFileReader(FILENAME) hoặc videoFReader=vision.VideoFileReader(Filename,Name,Value)
Định dạng tập tin mà hàm có thể thực hiện phụ thuộc vào hệ điều hành của bộ công cụ Tuy nhiên, với tập tin có đuôi avi, hàm có thể hoạt động trên tất cả các hệ điều hành Đối với hệ điều hành Windows, các hàm chỉ thực thi trên các tập tin có đuôi như: jpg, bmp, mpeg, mp2, mpg, mp4, m4v, mj2, wmv, asf, asx, wav, aif, aiff, aifc, và mp3.
Hàm này dùng để mở một video hoặc hiển thị hình ảnh
Cú pháp videoPlayer = vision.VideoPlayer videoPlayer = vision.VideoPlayer(Name,Value)
Để hiển thị một video frames cần thực hiện: o Định nghĩa và thiết lập đối tượng mở theo cú pháp
36 o Gọi lệnh step Theo cú pháp step(videoPlayer,I), trong đó I là đối tượng cần hiển thị trong video player
% Doc mot hinh anh tu file video va tao doi tuong mo file videoFReader = vision.VideoFileReader('videothucte_0002.avi'); videoPlayer = vision.VideoPlayer;
% Mo file Moi lenh goi step se doc mot khung hinh while ~isDone(videoFReader) frame = step(videoFReader); step(videoPlayer,frame); end
% Dong doi tuong release(videoFReader); release(videoPlayer);
To open a video file using the vision.VideoPlayer, the Computer Vision System Toolbox provides several functions for adding elements to the video player These include insertText for adding text, insertShape for incorporating shapes, insertMarker for placing markers within images or videos, and insertObjectAnnotation for adding appropriately colored annotations to video frames.
Thực hiện lọc ma trận đầu vào dùng bộ lọc 2D FIR
H = vision.ImageFilter hàm này trả về đối tượng hệ thống H
3.7.2.4 Hàm vision.Autotheresholder Đây là hàm chuyển đổi ảnh cường độ sang ảnh nhị phân, sử dụng phương pháp Otsu Xác định ngưỡng bằng cách chia tách hoành đồ của ảnh đầu vào để giảm thiểu sai số
Ví dụ: img = im2single(rgb2gray(imread('peppers.png'))); imshow(img); hautoth = vision.Autothresholder; bin = step(hautoth,img); pause(2); figure;imshow(bin);
Để tìm cực đại địa phương trong ma trận, trước tiên cần thiết lập các thuộc tính của ma trận đầu vào Sau đó, sử dụng cú pháp IDX = step(H,I) hoặc [ ] = step(H,I,THRESH), trong đó THRESH là ngưỡng, để xác định vị trí có giá trị cực đại trong ma trận.
H = vision.LocalMaximaFinder(MAXNUM,NEIGHBORSIZE,Name,Value)
0 0 0 0 0 0 0 0 0 0 0 0]; hLocalMax = vision.LocalMaximaFinder; hLocalMax.MaximumNumLocalMaxima = 1;
39 hLocalMax.NeighborhoodSize = [3 3]; hLocalMax.Threshold = 1; location = step(hLocalMax, I) location =
Hàm xác định tọa độ Đề các của đường thẳng trong ảnh sử dụng cặp tham số rho và theta Đầu vào là các cặp rho và theta từ ảnh tham chiếu, trong khi đầu ra là vị trí hàng và cột của các giao điểm giữa các đường thẳng và đường bao của ảnh này Các đường bao bao gồm biên dọc bên trái và bên phải, cùng với biên ngang phía trên và phía dưới của ảnh tham chiếu.
Ví dụ: Xác định đường thẳng dài nhất trong ảnh
I = imread('circuit.tif'); hedge = vision.EdgeDetector; hhoughtrans = vision.HoughTransform(pi/360,'ThetaRhoOutputPort', true); hfindmax = vision.LocalMaximaFinder(1, 'HoughMatrixInput', true); hhoughlines = vision.HoughLines('SineComputation','Trigonometric function');
[ht, theta, rho] = step(hhoughtrans, BW); linepts = step(hhoughlines, theta(idx(1)-1), rho(idx(2)-1), I); imshow(I); hold on;
Hình 3 15 Đường thẳng dài nhất trong ảnh
Hàm chuyển đổi thông tin giữa các không gian màu
Ví dụ: Chuyển đổi ảnh RGB sang không gian màu cường độ i1 = imread('pears.png'); imshow(i1); hcsc = vision.ColorSpaceConverter; hcsc.Conversion = 'RGB to intensity'; i2 = step(hcsc, i1); pause(2); imshow(i2);
Image Processing Toolbox
Bộ công cụ Xử lý Ảnh (Image Processing Toolbox) cung cấp một loạt các thuật toán, hàm và ứng dụng đa dạng cho việc xử lý ảnh, bao gồm biểu diễn ảnh, phân tích và biến đổi ảnh, khôi phục ảnh, cải thiện chất lượng hình ảnh, cũng như nén và mã hóa ảnh.
Trong phần này, chúng tôi sẽ trình bày các hàm và ứng dụng cơ bản trong hộp công cụ Image Processing Toolbox, liên quan trực tiếp đến nội dung của đề tài.
3.8.1 Đọc ảnh Để đọc ảnh H trong môi trường Matlab, dùng hàm imread với cú pháp: H = imread(‘tên file’) Lúc này, f được biểu diễn dưới dạng một ma trận
Hàm imread cho phép bạn đọc file ảnh từ thư mục hiện hành, và để đọc ảnh từ một thư mục cụ thể, bạn chỉ cần cung cấp đường dẫn đến thư mục đó Để kiểm tra kích thước của ảnh H, bạn có thể sử dụng lệnh size(H) Bên cạnh đó, để biết thêm thông tin chi tiết về ảnh H, hãy sử dụng lệnh whos H.
Các định dạng ảnh được trợ giúp bở hàm imread là các ảnh có phần mở rộng tif, tiff, jpg, jpeg, gif, bmp, png, xwd
3.8.2 Hiển thị ảnh Để hiển thị ảnh ta dùng hàm imshow với cú pháp: imshow(H,G) trong đó H là ma trận ảnh, G là số mức Nếu không viết G thì mặc định là 256 mức Hoặc ta dùng cú pháp : imshow(H,[low,high]) sẽ hiển thị ảnh với màu đen có tất cả các giá trị nhỏ hơn hoặc bằng low, trong khi màu trắng có tất cả các giá trị lớn hơn hoặc bằng high Với cú pháp: imshow(H,[]) có low là mức cực tiển của ảnh còn high là mức cực đại của ảnh H Để hiện thị các thông tin về các pixel ảnh, dùng hàm pixval Hàm này hiển thị một con trỏ nằm ngay trên ảnh Khi dịch con trỏ này thì giá trị của các pixel tương úng sẽ được hiển thị và xuất hiện ở dưới cửa sổ hình Nếu là ảnh RGB thì sẽ hiện ra toạ độ của các thành phần màu R, G, B Nếu kích trái chuột và ấn giữ thì pixval hiển thị khoảng cách Euler giữa vị trí đầu và vị trí hiện thời của con trỏ
3.8.3 Ghi ảnh Để ghi ảnh H vào trong đĩa, dùng hàm imwrite với cú pháp: imwrite(H, ‘tên file’), hàm này sẽ lưu file vào thư mục hiện hành Chẳng hạn với ảnh JPEG, dùng lệnh imwrite(H, ‘tên_file.jpg’, ‘quality’, q), trong đó q có giá trị từ 0 đến 100 Để thu được thông tin chi tiết hơn, trong Matlab người ta dùng lệnh: imfinfo tên_file Các thông tin hiển thị bởi lệnh iminfo có thể lưu vào trong cấu trúc biến bằng lệnh: V=imfinfo(‘tên_file’) Lúc này, tất cả các thông tin được phát ra bởi lện iminfo được lưu vào biến V Chẳng hạn như độ cao và độ rộng của ảnh được lưu trong cấu trúc V.Height và V.Width. Đặc biệt, với các loại ảnh khác nhau, trong Matlab ta có thể dùng các hàm khác nhau để hiện thị ảnh Để hiển thị một ảnh cường độ, dùng hàm imagesc Với ảnh nhị phân ta có thể dùng lệnh imview Để hiển thị ảnh RGB, ta có thể dùng lệnh image
CHƯƠNG TRÌNH ĐIỀU KHIỂN
Mô hình tổng quát
TOOLBOX Image Acquistion Toolbox Computer Vision Toolbox Image Processing Toolbox
M-file function Hardware driver adaptor
Chọn và thiết lập camera
Bước thiết lập vị trí ghi hình là rất quan trọng, ảnh hưởng lớn đến độ chính xác trong việc xử lý các đề tài ứng dụng xử lý ảnh Các yếu tố cần chú ý bao gồm độ phân giải của camera và tốc độ ghi hình.
Camera được sử dụng trong đề tài này là Integrated Webcam Webcam mặc định laptop Dell Inspiron 5547
Khi kết nối vào máy tính, kiểm tra các thông số của webcam thông qua cú pháp:
Xuất tín hiệu điều khiển Nhận dạng và giải thích Biểu diễn và mô tả ảnh Tiền xử lý và phân đoạn ảnh
Thông số DefaultFormat có thể thay đổi, trong khi kích thước khung hình thu thập từ thiết bị này dao động từ 160x90.
1600x1200, tốc độ ghi hình là 30fps
Tiến trình xử lý ảnh
4.3.1 Xác định dấu phân cách làn đường
4.3.1.1 Thu thập hình ảnh từ Webcam
Sử dụng hàm imaq.VideoDevice để thu tập hình ảnh từ webcam với cú pháp :
>> hVideoSrc = imaq.VideoDevice('winvideo',2,'RGB24_640x480',
Trong đó vùng quan tâm ROI , với ý nghĩa như Hình 4.3
Sau đó, dùng lệnh step(hVideoSrc) để trích xuất từng khung hình rồi tạo vòng lặp xử lý
Hình 4 2 Ảnh được trích xuất
Code chương trình: Phụ Lục A
4.3.1.2 Biến đổi ảnh và lọc ảnh
Dấu phân cách làn đường trong ảnh được xác định bởi các vạch kẻ đường, do đó cần tập trung vào phần hình ảnh của chúng Trong hình 4.4, vùng quan trọng nhất nằm ở phần dưới khung hình, vì vậy cần hạn chế vùng quan sát như trong hình 4.3.
Hình 4 3 Hình giới hạn quan sát
Dùng hàm vision.ColorSpaceConverter chuyển ảnh RGB sang ảnh cường độ như hình 4.6
Dùng hàm vision.ImageFilter để lọc ảnh và hàm vision.Autothresholder để chuyển ảnh xám đã lọc sang ảnh nhị phân như hình 4.5
Code chương trình: Phụ Lục A
4.3.1.3 Thực hiện biến đổi Hough
Dùng phương pháp biến đổi Hough xác định đường thẳng trong ảnh bằng hàm vision.HoughTransform và vision.LocalMaximaFinder, vision.HoughLines Với cú pháp: hHough = vision.HoughTransform(
'OutputDataType', 'single'); hLocalMaxFind = vision.LocalMaximaFinder(
'IndexDataType', 'uint16'); hHoughLines1 = vision.HoughLines('SineComputation',
Code chương trình: Phụ Lục A
4.3.2 Xác định dấu phân cách trái- phải và chèn đánh dấu làn đường
Dấu phân cách làn đường bên trái và phải được xác định dựa vào giao điểm với đường bao phía dưới cùng của ảnh Chương trình sẽ tính toán khoảng cách từ tâm của khung ảnh tới các dấu phân cách này và phát tín hiệu cảnh báo nếu xảy ra một trong các trường hợp cụ thể.
- Dấu phân cách làn đường phía bên phải khung hình giao với đường bao phía dưới cùng của khung hình Sẽ cho tín hiệu lệch phải
- Dấu phân cách làn đường phía bên trái khung hình giao với đường bao phía dưới cùng của khung hình Sẽ cho tín hiệu lệch trái
- Không có dấu phân cách nào giao với đường bao phía dưới của khung hình Sẽ cho tín hiệu đúng làn
Code của chương trình: Phụ Lục B.
Xuất tín hiệu
Khi di chuyển đúng làn đường, chương trình sẽ gửi tín hiệu kiểu int(8) với giá trị ‘1’ qua cổng COM thông qua lệnh serial(port) trong Matlab Tín hiệu này sau đó được truyền đến Arduino Mega2560 để điều khiển motor giữ cho phương tiện đứng yên trong làn đường.
Khi xe lệch khỏi đường, chương trình sẽ gửi tín hiệu dạng String int(8) với giá trị ‘0’ cho lệch trái và ‘1’ cho lệch phải qua cổng COM bằng lệnh serial(port) trong Matlab Tín hiệu này sau đó được truyền đến Arduino Mega2560 để điều khiển motor quay thuận hoặc ngược, giúp xe trở lại đúng làn đường.
Khi gặp vật cản có màu đỏ, lục hoặc chàm, hãy vẽ một hình chữ nhật màu xanh lá xung quanh vật cản đó Đồng thời, để thể hiện khoảng cách, hãy thêm một hình chữ nhật màu vàng phía trên.
Nếu có người đi bộ thì sẽ vẽ một hình chữ nhật màu đỏ bao quanh người đi bộ Code chương trình phụ lục A
Điều khiển bằng vi điều khiển Arduino Mega2560
4.5.1 Giao tiếp với máy tính bằng cổng COM (serial port) Để truyền tín hiệu điều khiển( lệch làn đường trái, phải, hay đúng làn đường) từ Matlab xuống Arduino và từ Arduino truyền tín hiệu khoảng cách từ cảm biến siêu âm SRF-05 lên để hiển thị trên màn hình vi tính ta dùng lệnh serial (port)
Cú pháp : obj = serial('port','PropertyName',PropertyValue, ) lệnh tạo ra một đối tượng cổng nối tiếp với tên xác định và giá trị đặc tính của nó
S = serial ('com4', 'BaudRate',115200,'Terminator','LF','Timeout',10);
Thiết lập giao tiếp với cổng ‘Com4”, với các thông số: BaudRate, Terminator, Timeout
Dùng lệnh fopen (s) để bắt đầu truyền và nhận tín hiệu từ vi điều khiển gửi lên hay từ trên Matlab gửi xuống
Kết thúc giao tiếp với cổng Com ta dùng lệnh fclose(s) để kết thúc
Để truyền tín hiệu xuống vi điều khiển, sử dụng lệnh Fprintf(s, value), trong đó s là biến thiết lập giao tiếp và value là giá trị cần truyền qua cổng Com Để đọc tín hiệu từ vi điều khiển, dùng lệnh A = Fread(s) để nhận dữ liệu nhị phân từ các thiết bị kết nối với cổng Com và lưu trữ dữ liệu vào biến.
Nhận tín hiệu từ vi điều khiển gửi lên và in chúng ra màn hình ta dùng lệnh Fcanf(s)
Ví dụ: truyền giá trị khoảng cách đo được từ arduino lên Matlab.: delete(instrfind); clear all close all
S = serial ('com3', 'BaudRate',115200,'Terminator','LF','Timeout',10); fopen(S); c = fscanf(S) fclose(S);
Hình 4 6 Giá trị khoảng cách từ cảm biến siêu âm
4.5.2 Dùng vi điều khiển Arduino Mega 2560 để điều khiển
Sau khi truyền tín hiệu từ Matlab xuống vi điều khiển qua cổng serial, chúng ta tiến hành viết mã điều khiển dựa trên các tín hiệu nhận được Sử dụng lệnh arduino() để kết nối vi điều khiển Arduino với Matlab, từ đó cho phép Matlab điều khiển motor quay góc lái một cách hiệu quả.
Code chương trình phụ lục A
Hình 4 7 Sơ đồ nối dây của hệ thống điều khiển
Hình 4 8 Sơ đồ nối dây mô hình thực tế