Camera Raspberry Pi

Một phần của tài liệu Hệ thống hỗ trợ giám sát an toàn trên ô tô (Trang 51)

- Raspberry Pi Camera Module V2 có một cảm biến 8-megapixel (MP) của Sony IMX219 (so với cảm biến 5-megapixel (MP) OmniVision OV5647 trên Camera Module phiên bản cũ).

39

- Camera Module có thể được sử dụng để quay video độ nét cao, cũng như chụp hình ảnh tĩnh. Nó khá dễ dàng để sử dụng cho người mới bắt đầu, nhưng cũng có rất nhiều giải pháp mở rộng để cung cấp cho người dùng yêu cầu cao. Có rất nhiều demo của người dùng về công dụng của Camera Module như chụp Time- Lapse, Slow-Motion và rất nhiều ứng dụng khác. Bạn có thể tham khảo thêm hướng dẫn sử dụng để tạo các hiệu ứng với chiếc camera này.

- Raspberry Pi Camera Module V2 là một bước nhảy vọt về chất lượng hình ảnh, màu sắc trung thực và hiệu suất ánh sáng thấp. Đặc biệt nó hỗ trợ video lên tới 1080P30, 720P60 và video mode VGA90, cũng như chế độ chụp hình. Dĩ nhiên, nó vẫn sử dụng đoạn cáp 15cm qua cổng CSI trên Raspberry Pi.

- Chiếc camera này tương thích với tất cả các phiên bản của Raspberry Pi.

 Thông số kỹ thuật:

- Ống kính tiêu cự cố định.

- Cảm biến độ phân giải 8 MP cho khả năng chụp ảnh kích thước 3280 x 2464. - Hỗ trợ video 1080p30, 720p60 và 640x480p90.

- Kích thước 25mm x 23mm x 9mm. - Trọng lượng chỉ hơn 3g.

- Kết nối với Raspberry Pi thông qua cáp ribbon đi kèm dài 15 cm.

4.2.4 Loa Buzzer

 Giới thiệu:

- Loa Buzzer 5V (Cịi chíp, cịi bíp) là sản phẩm còi báo thường được sử dụng trong các mạch điện tử, được thiết kế nhỏ gọn, chân cắm thích hợp sử dụng báo động, báo hiệu âm thanh cho tín hiệu.

40  Thông số kỹ thuật:

- Nguồn : 3.5V – 5.5V.

- Dòng điện tiêu thụ: <25mA.

- Tần số cộng hưởng: 2300Hz ± 500Hz. - Biên độ âm thanh: >80 dB.

- Nhiệt độ hoạt động:-20 °C đến +70 °C. - Kích thước : Đường kính 12mm, cao 9,7mm.

Hình 4.5: Sơ đồ nối mạch 4.2.5 Mạch động cơ L298N

 Giới thiệu:

- Mạch động cơ L298N là một module thông dụng với chức năng thông dụng và giá thành cực kỳ rẻ là lựa chọn của các bạn học sinh, sinh viên.

41

Hình 4.6: Mạch động cơ L298N và chú thích chi tiết

 Thông số kỹ thuật:

- Driver: L298N tích hợp hai mạch cầu H. - Điện áp điều khiển: +5 V ~ +12 V.

- Dòng tối đa cho mỗi cầu H là: 2A (=>2A cho mỗi motor). - Điện áp của tín hiệu điều khiển: +5 V ~ +7 V.

- Dịng của tín hiệu điều khiển: 0 ~ 36mA.

- Cơng suất hao phí: 20W (khi nhiệt độ T = 75 ℃). - Nhiệt độ bảo quản: -25 ℃ ~ +130 ℃.

 L298 gồm các chân:

 12V power, 5V power. Đây là 2 chân cấp nguồn trực tiếp đến động cơ.

+ Ta có thể cấp nguồn 9-12V ở 12V. + Bên cạnh đó có jumper 5V.

 Power GND chân này là GND của nguồn cấp cho Động cơ.  2 Jump A enable và B enable.

42

 Gồm có 4 chân Input. IN1, IN2, IN3, IN4. Output A: nối với động cơ A.

4.3 Phần mềm

 Thiết lập hệ điều hành Raspberry Pi

- Cài đặt hệ điều hành NOOBS RASPBIAN vào thẻ microSD cắm vào mạch Raspberry. Sau khi cài đặt và khởi động lại, ta sẽ thấy xuất hiện một màn hình GUI đầy đủ như bên dưới, màn hình này tương tự với màn hình giao diện của Windows.

Hình 4.7: Giao diện hệ điều hành Raspberry Pi

- Trong quá trình cài đặt, Pi sẽ yêu cầu thay đổi mật khẩu cho người dùng mặc định. - Sau khi thiết lập xong các cài đặt ban đầu, ta sẽ nâng cấp lên phần mềm mới nhất.

 Thiết lập quyền truy cập từ xa

- Thiết lập truy cập từ xa cho phép máy tính Pi chạy khơng cần kết nối thiết bị ngoại vi (màn hình, chuột, bàn phím) với nó mọi lúc.

- Kết nối với Pi Car qua VNC từ Laptop.

- Cài đặt phần mềm Cascade-Trainer GUI để dạy xe ghi nhớ và so sánh hình ảnh.

4.4 Các tính năng trên xe mơ hình

 Hệ thống giữ làn đường tự động:

- Hệ thống giữ làn đường có hai thành phần: nhận biết (phát hiện làn đường) và lập kế hoạch đường đi (đánh lái). Cơng việc của tính năng phát hiện làn đường là quay video về con đường thành tọa độ của các vạch làn đường được phát hiện. Nhưng trước khi phát hiện được làn đường trong video ta cần phải phát hiện được làn đường trong 1 hình ảnh. Khi đó, việc phát hiện làn đường trong video chỉ đơn giản là việc lặp đi lặp lại các bước tương tự cho từng khung hình trong video.

43

- Xác định màu của làn đường: nhóm sử dụng băng keo màu trắng để tạo thành 1 làn đường với nét liền đậm màu trắng.

Hình 4.8: Mơ hình đường đi

- Trên đây là khung video được quay từ camera V2.1 gắn trên xe. Đầu tiên cần làm là cô lập các vùng màu trắng trên ảnh. Để thực hiện việc này, trước tiên ta cần chuyển khơng gian màu được sử dụng bởi hình ảnh là RGB (red, green, blue) thành không gian màu HSV (Hue, Saturation, Value). Mục đích chính cho việc thực hiện chuyển đổi này là trong hình ảnh RGB các phần khác nhau của màu lane đường (băng keo màu trắng) có thể được chiếu sáng bằng các màu sáng khác nhau dẫn đến xuất hiện dưới dạng màu trắng đậm hơn hay màu trắng nhạt hơn. Do đó, trong khơng gian màu HSV, thành phần Hue sẽ hiển thị toàn bộ băng màu trắng thành 1 màu bất kể độ bóng của màu đó.

Hình 4.9: Hình ảnh trong khơng gian màu HSV

- Do OpenCV đọc hình ảnh vào khơng gian màu BGR (Xanh lam, xanh lá cây, đỏ) theo mặc định thay vì khơng gian màu RGB (đỏ, xanh lá cây, xanh lam) được sử dụng phổ biến hơn. Về cơ bản, chúng là không gian màu tương đương, chỉ là thứ tự của các màu được hoán đổi.

44

- Sau khi hình ảnh ở trong HSV, chúng ta có thể lọc tất cả các màu trắng khỏi hình ảnh. Điều này là bằng cách chỉ định một dải màu trắng.

Hình 4.10: Xác định đường Lane Phát hiện các đường viền của làn đường: Phát hiện các đường viền của làn đường:

- Tiếp theo, chúng ta cần phát hiện các cạnh trong khối dải màu trắng để chúng ta có thể có một vài đường phân biệt đại diện cho các đường làn đường màu trắng. - Thực hiện lệnh Canny, đây là 1 lệnh chính xác để phát hiện các cạnh trong một hình ảnh.

Hình 4.11: Xác định đường viền ngồi của Lane Cơ lập khu vực quan tâm:

- Từ hình ảnh trên, chúng ta thấy rằng chúng ta đã phát hiện ra khá nhiều khu vực màu trắng KHÔNG phải là vạch phân làn đường của chúng ta. Quan sát kỹ hơn sẽ thấy rằng tất cả chúng đều nằm ở nửa trên của màn hình. Khi thực hiện điều hướng làn đường, ta chỉ quan tâm đến việc phát hiện các vạch kẻ làn đường gần xe hơn,

45

nơi cuối màn hình. Vì vậy, chúng ta sẽ đơn giản là cắt bỏ nửa trên. Hai vạch phân làn được đánh dấu rõ ràng như được thấy trên hình ảnh bên phải.

Hình 4.12: Vạch phân làn đường Phát hiện phân đoạn dòng: Phát hiện phân đoạn dịng:

- Trong hình ảnh các cạnh được cắt ở trên, đối với con người chúng ta, rõ ràng là chúng ta đã tìm thấy bốn đường biểu thị hai đường làn đường. Tuy nhiên, đối với máy tính, chúng chỉ là một loạt các pixel màu trắng trên nền đen. Chúng ta cần trích xuất tọa độ của các đường làn này từ các pixel màu trắng này. OpenCV có chứa một chức năng được gọi là Hough Transform, thực hiện chính xác điều này. Hough Transform là một kỹ thuật được sử dụng trong xử lý hình ảnh để trích xuất các đối tượng địa lý như đường thẳng, hình trịn và hình elip. Chúng ta sẽ sử dụng nó để tìm các đường thẳng từ một loạt các pixel dường như tạo thành một đường thẳng. Về cơ bản, hàm HoughLinesP khớp nhiều dòng qua tất cả các pixel màu trắng và trả về tập hợp các dịng có khả năng xảy ra cao nhất, tn theo các giới hạn ngưỡng tối thiểu nhất định.

46

- Nếu chúng ta in ra đoạn thẳng được phát hiện, nó sẽ hiển thị các điểm cuối (x1, y1) theo sau là (x2, y2) và độ dài của mỗi đoạn thẳng.

Kết hợp các đoạn đường thành hai làn đường:

- Bây giờ chúng ta có nhiều đoạn thẳng nhỏ với tọa độ điểm cuối của chúng (x1, y1) và (x2, y2), làm thế nào để chúng ta kết hợp chúng thành hai đường mà chúng ta thực sự quan tâm, đó là đường làn trái và phải. Một cách là phân loại các đoạn thẳng này theo độ dốc của chúng. Từ hình trên, chúng ta có thể thấy rằng tất cả các đoạn thẳng thuộc làn đường bên trái phải dốc lên và ở bên trái màn hình, trong khi tất cả các đoạn thẳng thuộc làn đường bên phải dốc xuống và ở bên phải của màn hình. Khi các đoạn đường được phân loại thành hai nhóm, chúng ta chỉ cần lấy trung bình cộng của độ dốc và điểm giao nhau của đoạn thẳng để có được độ dốc và điểm giao nhau của các đường làn bên trái và bên phải.

- Đây là hình ảnh cuối cùng với các đường làn được phát hiện được vẽ bằng màu xanh lá cây.

Hình 4.14: Đường phân làn được phát hiện Lập kế hoạch chuyển động: Lập kế hoạch chuyển động:

- Bây giờ chúng ta đã có tọa độ của các vạch làn đường, chúng ta cần điều khiển xe sao cho nó nằm trong vạch kẻ làn đường, tốt hơn nữa là chúng ta nên cố gắng giữ nó ở giữa làn đường. Về cơ bản, chúng ta cần tính tốn góc lái của ơ tô, dựa trên các vạch làn được phát hiện.

47

Hai đường làn được phát hiện:

- Chúng ta có thể tính tốn hướng đi bằng cách lấy trung bình các điểm cuối xa của

cả hai đường làn. Dòng màu xanh hiển thị bên dưới là đường căn chỉnh. Lưu ý rằng, điểm dưới của đường căn chỉnh màu xanh luôn nằm ở giữa cuối màn hình, đó là bởi vì chúng ta đặt camera hành trình được lắp ở giữa xe và hướng thẳng về phía trước.

Hình 4.15: Đường căn chỉnh màu xanh ở giữa Góc lái: Góc lái:

- Để xe có thể rẽ hướng ta cần tính tốn được góc lái cho xe. Ta đặt góc lái cho xe

là 900 là hướng thẳng, 450–890 là rẽ trái và 910–1350 là rẽ phải.

 Nhận biết biển báo giao thông vào hầm

- Trước hết ta cần cài đặt phần mềm Cascade Trainer GUI trên máy tính, phần mềm

này có mục đích train cho Raspberry có thể nhận biết được biển báo, để sau đó khi Camera truyền hình ảnh vào Raspberry có thể so sánh từ đó thực hiện lệnh ban đầu. - Sau đó ta sẽ dùng chính camera V2.1 gắn trên xe để chụp ảnh biển báo như hình bên dưới, chúng ta cần chụp nhiều góc độ khác nhau để khi vào thực tế xe chạy ổn định và nhận biết biển báo chính xác nhất.

48

Hình 4.16: Các góc chụp của camera truyền về

- Chúng ta nhập 1 tệp tất cả hình ảnh đã chụp vào phần mềm Trainer GUI. - Thực hiện zoom hình và cắt khoanh vùng xuất hiện biển báo bằng chuột.

- Thực hiện chạy phần mềm kết quả trả về là một tệp mới trong đó biển báo vào hầm sau khi được phát hiện sẽ nằm trong ô màu đỏ.

Hình 4.17: Vùng nhận diện biển báo của camera

- Cuối cùng kết quả nhận được là một thuật tốn sau q trình nhập hình ảnh, xác định biển báo trong không gian. Chúng ta sẽ nhập file thuật toán này vào Raspberry để nhận diện hình ảnh từ camera gắn trên xe.

 Kiểm sốt hành trình chủ động và vật cản phía trước

49

- Khi được cấp nguồn động cơ bắt đầu hoạt động quay với vận tốc 70 vịng/phút.

Hình 4.18: Xe di chuyển bình thường khơng có vật cản

Khi xe gặp vật cản ở phía trước:

50

Trường hợp 1: Vật cản ở khoảng cách nhỏ hơn 40cm

+ Sóng siêu âm được phát ra từ chân Trig của cảm biến HC-SR04, chân Echo nhận được tín hiệu phản xạ ngay lập tức, thơng tin được truyền đến Arduino Uno đến chân số 10 digital thông qua dây dẫn của arduino. Sau khi thông tin được truyền vào mạch Arduino thì tại đây nó sẽ được con chip U7 xử lý thông tin dựa trên mã Code đã được cài đặt trước đó, sau khi xử lý thơng tin thì nó sẽ phát tín hiệu cảnh báo đèn LED bắt đầu sáng. Đồng thời mạch điều khiển động cơ điều khiển motor quay với vận tốc 45 vòng/phút.

Trường hợp 2: Vật cản ở khoảng cách nhỏ hơn 30cm

+ Lúc này thông tin tiếp tục được xử lí, sau đó phát tín hiệu động thời loa Buzzer phát âm thanh và LED tiếp tục sáng. Động cơ quay với vận tốc chậm hơn 40 vịng/phút.

Hình 4.20: Khi gặp vật cản ở khoảng cách nguy hiểm Trường hợp 3: Vật cản ở khoảng cách nhỏ hơn hoặc bằng 20cm Trường hợp 3: Vật cản ở khoảng cách nhỏ hơn hoặc bằng 20cm

+ Thơng tin được xử lí, động cơ dừng hẳn để tránh xảy ra va chạm với vật cản phía trước.

51

CHƯƠNG 5: THI CƠNG VÀ THỰC NGHIỆM

MƠ HÌNH

5.1 Thi cơng

* Chuẩn bị mơ hình đường cho xe chạy:

- Nhóm chuẩn bị phơng nền màu xanh lá đậm để trải lên sàn nhà nhằm mục đích tránh bị nhiễu hình ảnh cho Camera.

- Mặt đường được sơn màu đen.

- Đường line sử dụng băng keo màu trắng để tạo thành một nét liền đậm.

Hình 5.1: Mơ hình mặt đường

* Lắp ráp xe tự hành (Xe A):

- Bước 1: Chuẩn bị khung xe mơ hình có sẵn, lắp 4 bánh xe vào 4 động cơ gắn vào

khung xe dưới.

52

Hình 5.2: Lắp khung xe

- Bước 3: Dựa vào sơ đồ mạch điện ở Chương 3 lắp lần lượt mạch Raspberry,

Arduino, mạch điều áp vào khung xe trên và kết nối chúng lại với nhau.

53

- Bước 4: Gắn dây cáp kết nối từ camera với mạch Raspberry, đèn Led kết nối với

mạch Arduino.

Hình 5.4: Kết nối Camera (trái) và đèn Led (phải) - Bước 5: Hoàn thành tổng thể xe tự hành.

Hình 5.5: Mơ hình hồn chỉnh

* Lắp ráp xe cho tính năng kiểm soát tốc độ và giữ khoảng cách (Xe B):

- Bước 1: Lần lượt lắp các bánh xe và bốn motor vào khung xe dưới tương tự như

mơ hình xe tự hành.

- Bước 2: Lắp mạch Arduino, mạch điều khiển động cơ L298N và pin vào khung

54

- Bước 3: Nối các mạch và motor với nhau bằng dây điện, lắp loa, đèn cảnh báo và

lắp cảm biến.

* Thực hiện chạy thử nghiệm cho từng tính năng:

- Thực hiện cấp nguồn cho xe, nhóm chọn cấp nguồn bằng nguồn điện từ Adapter

Power thay cho pin để quá trình test ổn định hơn. - Chỉnh dòng điện cấp cho xe là 11,3V – 11.8V.

Hình 5.6: Cấp nguồn cho xe tự hành

 Hệ thống giữ làn đường:

- Nạp code đã viết trên Geany (phụ lục) vào OpenCV trong Raspberry và chạy. - Trên màn hình Laptop xuất hiện lần lượt các cửa sổ: Origal, Final, Perpective, Stop Sign, Traffic.

55

Lần kiểm tra 1:

- Đặt xe vào Làn đường bên phải giữa hai Lane trắng và quan sát hình ảnh trả về trên màn hình Laptop.

- Kết quả trả về trong cửa sổ Origal là: “Result = 0 ( Move Forwart)”.

- Trong cửa sổ Final trả về giá trị hình ảnh cuối cùng là hai Lane đường màu trắng

Một phần của tài liệu Hệ thống hỗ trợ giám sát an toàn trên ô tô (Trang 51)