Các loại xe tự lái ở cấp độ này có thể được điều khiển với một hoặc nhiều hệ thống, bao gồm cả hệ thống điều khiển tốc độ hoặc hướng lái, nhưng không thể hoạt động cùng một lú
Trang 1THÀNH PHỐ HỒ CHÍ MINH
BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT
ĐỒ ÁN TỐT NGHIỆP NGÀNH CÔNG NGHỆ KỸ THUẬT Ô TÔ
GVHD: TS LÊ THANH PHÚC SVTH: TRẦN THANH PHONG TRẦN GIA HUÂN
S K L 0 1 2 8 7 4
DỤNG PHƯƠNG PHÁP XỬ LÝ ẢNH NGHIÊN CỨU, THIẾT KẾ Ô TÔ TỰ HÀNH ỨNG
Trang 2TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH
KHOA CƠ KHÍ ĐỘNG LỰC
ĐỒ ÁN TỐT NGHIỆP
GVHD: TS LÊ THANH PHÚC SVTH : TRẦN THANH PHONG
MSSV: 20145130 SVTH : TRẦN GIA HUÂN MSSV: 20145510
Tp Hồ Chí Minh, tháng 5 năm 2024
NGHIÊN CỨU, THIẾT KẾ Ô TÔ TỰ HÀNH ỨNG DỤNG
PHƯƠNG PHÁP XỬ LÝ ẢNH
Trang 3TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH
KHOA CƠ KHÍ ĐỘNG LỰC
ĐỒ ÁN TỐT NGHIỆP Ngành: Công nghệ Kỹ thuật Ô tô
Tên đề tài NGHIÊN CỨU, THIẾT KẾ Ô TÔ TỰ HÀNH ỨNG DỤNG
PHƯƠNG PHÁP XỬ LÝ ẢNH
GVHD: TS LÊ THANH PHÚC SVTH : TRẦN THANH PHONG
MSSV: 20145130 SVTH : TRẦN GIA HUÂN MSSV: 20145510
Tp Hồ Chí Minh, tháng 5 năm 2024
Trang 4TP Hồ Chí Minh, Ngày tháng năm
NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP
Họ tên sinh viên: 1 Trần Gia Huân MSSV: 20145510
(Email: - 20145510@student.hcmute.edu.vn Điện thoại : 0913373659)
2 Trần Thanh Phong MSSV: 20145130
(Email: - 20145130@student.hcmute.edu.vn Điện thoại: 0702142707)
Ngành: Công nghệ Kỹ thuật Ô tô Khóa : K20 Lớp: 20145CL6B
- Thực nghiệm, đánh giá kết quả đạt được
3 Sản phẩm của đề tài
- Mô hình thực nghiệm, file thuyết minh, file báo cáo
4 Ngày giao nhiệm vụ đề tài: 08/01/2024 5 Ngày hoàn thành nhiệm vụ 20/05/2024
TRƯỜNG ĐH SƯ PHẠM KỸ THUẬT
TP HỒ CHÍ MINH
KHOA CƠ KHÍ ĐỘNG LỰC
CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
Độc Lập – Tự Do – Hạnh Phúc
Trang 5Bộ môn: Điện ô tô
PHIẾU NHẬN XÉT ĐỒ ÁN TỐT NGHIỆP
(Dành cho giảng viên hướng dẫn)
Họ và tên sinh viên: Trần Gia Huân MSSV : 20145510 Họ và tên sinh viên: Trần Thanh Phong MSSV : 20145130 Tên đề tài: NGHIÊN CỨU, THIẾT KẾ Ô TÔ TỰ HÀNH ỨNG DỤNG PHƯƠNG PHÁP XỬ LÝ ẢNH
Ngành đào tạo: Công nghệ Kỹ thuật Ô tô Họ và tên GV hướng dẫn: TS Lê Thanh Phúc
Trang 63 Đánh giá về khả năng ứng dụng của đề tài 10 4 Sản phẩm cụ thể của ĐATN 10 Tổng điểm 100 4 Kết luận Được phép bảo vệ Không được phép bảo vệ
TP.HCM, ngày tháng 5 năm 2024
Giảng viên hướng dẫn
Trang 7Bộ môn: Điện ô tô
PHIẾU NHẬN XÉT ĐỒ ÁN TỐT NGHIỆP
(Dành cho giảng viên phản biện)
Họ và tên sinh viên: Trần Gia Huân MSSV : 20145510 Họ và tên sinh viên: Trần Thanh Phong MSSV : 20145130 Tên đề tài: NGHIÊN CỨU, THIẾT KẾ Ô TÔ TỰ HÀNH ỨNG DỤNG PHƯƠNG PHÁP XỬ LÝ ẢNH
Ngành đào tạo: Công nghệ Kỹ thuật Ô tô Họ và tên GV phản biện : ThS Nguyễn Thanh Tuyên
4 Những thiếu sót và tổn tại của ĐATN:
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP.HCM
KHOA CƠ KHÍ ĐỘNG LỰC
CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
Độc lập – Tự do – Hạnh phúc
Trang 8
5 Câu hỏi:
3 Đánh giá về khả năng ứng dụng của đề tài 10
7 Kết luận:
Được phép bảo vệ Không được phép bảo vệ
TP.HCM, ngày tháng 05 năm2024
Giảng viên phản biện
Trang 9Bộ môn : Điện ô tô
XÁC NHẬN HOÀN THÀNH ĐỒ ÁN
Tên đề tài:
NGHIÊN CỨU, THIẾT KẾ Ô TÔ TỰ HÀNH ỨNG DỤNG PHƯƠNG PHÁP XỬ LÝ ẢNH
Họ và tên sinh viên: Trần Gia Huân MSSV: 20145510 Trần Thanh Phong MSSV: 20145130 Ngành: Công nghệ Kỹ thuật Ô tô
Sau khi tiếp thu và điều chỉnh theo góp ý của Giảng viên hướng dẫn, Giảng viên phản biện và các thành viên trong Hội đồng bảo vệ Đồ án tốt nghiệp đã dược hoàn chỉnh đúng theo yếu cầu về nội dung và hình thức
Chủ tịch Hội đồng: _ _
Giảng viên hướng dẫn :
Giảng viên phản biện:
Tp Hồ Chí Minh, ngày tháng 05 năm 2024 TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ
THUẬT TP HCM
KHOA CƠ KHÍ ĐỘNG LỰC
CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
Độc lập – Tự do – Hạnh phúc
Trang 10LỜI CẢM ƠN
Lời đầu tiên, xin kính gửi lời cảm ơn chân thành đến Ban giám hiệu Trường Đại học Sư phạm Kỹ thuật Thành phố Hồ Chí Minh đã tạo điều kiện cho nhóm có cơ hội để tìm hiểu, nghiên cứu và thực hiện đề tài tốt nghiệp Nhóm cũng xin chân thành cảm ơn quý thầy cô Khoa Cơ khí Động lực đã hết mình trong công tác giảng dạy, sự tận tâm và chuyên nghiệp của thầy cô không chỉ riêng gì là sự động viên mà còn là một nguồn cảm hứng lớn lao cho sự phát triển cá nhân và chuyên môn của sinh viên trong tương lai
Và đặc biệt nhóm cũng xin gửi lời cảm ơn sâu sắc đến giảng viên hướng dẫn TS Lê Thanh Phúc, người đã tận tình hỗ trợ, định hướng, gợi ý và giải đáp thắc mắc với sự kiên nhẫn và tâm huyết trong quá trình hoàn thành đề tài tốt nghiệp Sự hiểu biết, kiến thức sâu rộng và tâm huyết của Thầy không chỉ giúp nhóm nắm vững kiến thức chuyên ngành mà còn giúp hiểu rõ hơn về quá trình nghiên cứu, cách tiếp cận vấn đề một cách logic và khoa học Sự tận tâm và chia sẻ, sự quan tâm và hỗ trợ vô điều kiện từ Thầy là nguồn động viên to lớn xuyên suốt quá trình thực hiện đồ án tốt nghiệp
Nhóm cũng muốn gửi lời tri ân đặc biệt đến những người thương, gia đình và bạn bè Niềm tin yêu, sự ủng hộ vững vàng từ họ, sự động viên, quan tâm và hy vọng từ họ đã là nguồn động lực lớn về mặt tinh thần trong suốt quá trình nghiên cứu và hoàn thành đề tài tốt nghiệp
Một lần nữa, từ đáy lòng, xin chân thành cám ơn quý thầy cô xin kính chúc quý thầy cô Trường Đại học Sư phạm Kỹ thuật Thành phố Hồ Chí Minh nói chung, quý thầy cô Khoa Cơ khí Động lực nói riêng mạnh khỏe, hạnh phúc và thành công trong sự nghiệp
Nhóm xin chân thành cảm ơn!
TP HỒ CHÍ MINH, Ngày tháng 05 năm 2024
Nhóm sinh viên thực hiện
Trần Gia Huân Trần Thanh Phong
Trang 11TÓM TẮT
Mục tiêu chính của dự án là nghiên cứu và thiết kế một mô hình xe tự hành, điều khiển thông qua thuật toán xử lý ảnh để nhận diện các làn đường Trong giai đoạn xử lý ảnh nhằm phát hiện các làn đường, chúng em sẽ triển khai các thuật toán trên máy tính xách tay, sau đó gửi dữ liệu tới bộ kit Arduino ESP32 4MB Flash UNO D1 R32 thông qua kết nối không dây, cụ thể là sử dụng kết nối Bluetooth Arduino sẽ tiếp nhận dữ liệu này và điều khiển motor chính cùng motor servo trên mô hình xe điều khiển tỷ lệ 1:10, dựa trên chương trình đã được lập trình sẵn, từ đó điều khiển xe bám theo làn đường
Để đạt được mục tiêu trên, nhóm quyết định thực hiện xử lý ảnh bằng ngôn ngữ lập trình Python với thư viện OpenCV Chương trình của hệ thống sẽ được xây dựng và phát triển trên phần mềm PyCharm để đảm bảo tính trực quan và dễ dàng quản lý Nhóm cần nghiên cứu kỹ lưỡng về các phương thức giao tiếp giữa chương trình xử lý ảnh và chương trình điều khiển xe Để đảm bảo giao tiếp không dây, nhóm sử dụng giao tiếp Bluetooth Serial nhờ vào bộ xử lý chính của kit Arduino là ESP32, một vi điều khiển mạnh mẽ với khả năng hỗ trợ BLE (Bluetooth Low Energy) và WiFi
Dữ liệu đầu vào sẽ là các khung hình thu được từ camera Nhóm sẽ sử dụng một điện thoại Android như là một camera và truyền dữ liệu đến laptop thông qua kết nối WiFi, sử dụng phần mềm biến điện thoại thành webcam Phương pháp này không chỉ tận dụng được thiết bị sẵn có mà còn giúp cải thiện chất lượng và độ ổn định của hình ảnh đầu vào, đảm bảo hệ thống hoạt động hiệu quả và chính xác
Trang 12MỤC LỤC
LỜI CẢM ƠN i
TÓM TẮT ii
MỤC LỤC iii
DANH MỤC CÁC CHỮ VIẾT TẮT VÀ KÝ HIỆU v
DANH MỤC CÁC HÌNH vi
DANH MỤC CÁC BẢNG ix
CHƯƠNG 1 TỔNG QUAN 1
1.1 Lý do chọn đề tài 1
1.2 Đối tượng và phạm vi nghiên cứu 1
1.2.1 Đối tượng nghiên cứu 1
1.2.2 Phạm vi nghiên cứu 1
1.3 Tình hình nghiên cứu và phát triển của đề tài 2
1.3.1 Trong nước 2
1.3.2 Ngoài nước 2
1.4 Mục tiêu nghiên cứu 5
1.5 Kết quả đạt được 5
1.6 Nội dung 5
CHƯƠNG 2 CƠ SỞ LÝ THUYẾT 7
2.1 Ngôn ngữ lập trình Python 7
2.1.1 Khái niệm về Python 7
2.1.2 Đặc điểm của ngôn ngữ lập trình Python 7
2.2 Thư viện OpenCV 10
2.2.1 Giới thiệu thư viện OpenCV 10
2.2.2 Các hàm cơ bản trong OpenCV được sử dụng trong đồ án 11
2.3 Thư viện bluetooth 16
Trang 13CHƯƠNG 3 XÂY DỰNG MÔ HÌNH VÀ CHƯƠNG TRÌNH ĐIỀU KHIỂN 17
3.1 Xây dựng mô hình 17
3.1.1 Xây dựng sơ đồ hệ thống và sơ đồ kết nối các thiết bị 17
3.2 Các thiết bị và linh kiện cần sử dụng 21
3.2.1 Kit khung xe điều khiển tỉ lệ 1:10 21
3.2.2 Motor 540 22
3.2.3 Motor Servo 23
3.2.4 Kit Arduino ESP32 4MB Flash UNO D1 R32 24
3.2.5 Module điều khiển động cơ BTS7960 43A 27
3.2.6 Pin cell NCR18650B 3400mAh 3.7V 29
3.2.7 Một số linh kiện khác 30
3.3 Xây dựng chương trình cho mô hình xe tự hành 33
3.3.1 Ý tưởng về phương pháp tìm làn đường 33
3.3.2 Xây dựng chương trình tìm làn đường dựa trên phương pháp xử lý ảnh 36
3.3.3 Xây dựng chương trình cho arduino để điều khiển mô hình xe 58
CHƯƠNG 4 : KẾT QUẢ THỰC NGHIỆM 65
4.1 Thiết kế làn đường cho xe chạy thực nghiệm 65
4.2 Thực nghiệm khả năng bám đường của mô hình 66
4.2.1 Khi camera thu được cả hai làn đường 66
4.2.2 Khi camera chỉ thu được một làn đường 70
CHƯƠNG 5 : KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 73
DANH MỤC TÀI LIỆU THAM KHẢO 74
Trang 14DANH MỤC CÁC CHỮ VIẾT TẮT VÀ KÝ HIỆU
AI: ARTIFICIAL INTELLIGENCE BLE: BLUETOOTH LOW ENERGY EN: ENABLE
GND: GROUND IoT: INTERNET OF THING ORC: OPTICAL CHARACTER RECOGNITION PWM: PULSE WIDTH MODULATION
SAE: SOCIETY of AUTOMOTIVE ENGINEERS SMAC: SOCIAL, MOBILE, ANALYTICS, CLOUD VR: VIRTUAL REALITY
Trang 15DANH MỤC CÁC HÌNH
Hình 3.1: Sơ đồ liên kết các phần cứng 17
Hình 3.2: Sơ đồ kết nối các thiết bị phần cứng 18
Hình 3.3: Mô hình xe tụ hành hoàn chỉnh 20
Hình 3.4: Kit xe điều khiển HPS 94170 21
Hình 3.5: Motor 540 22
Hình 3.6: Servo MG996R 23
Hình 3.7: Arduino ESP32 4MB Flash UNO D1 R32 25
Hình 3.8: Sơ đồ chân của Arduino ESP32 4MB Flash UNO D1 R32 26
Hình 3.9: Module BTS7960 43A 27
Hình 3.10: Sơ đồ chân Module BTS7960 43A 27
Hình 3.11: Pin cell NCR18650B 3400mAh 3.7V 29
Hình 3.12: Mica tấm trong suất dày 2mm 30
Hình 3.13: Hộp đế pin 18650 loại 2 cell mắc song song 31
Hình 3.14: Dây bus 2 đầu đực cái 32
Hình 3.15: Điện thoại Android dùng làm camera 32
Hình 3.16: Đế kẹp điện thoại 33
Hình 3.17: Hình ảnh minh họa khung hình sau khi xử lý ảnh cơ bản 34
Hình 3.18: Khung hình sau khi xử lý ảnh cơ bản và các thông số cần tìm 34
Hình 3.19: Sơ đồ khối của chương trình để tìm tâm đường 36
Hình 3.20: Giao diện chính của ứng dụng Droicam 37
Hình 3.21: Đoạn chương trình hiển thị hình ảnh thu từ camera điện thoại 38
Hình 3.22: Màn hình ứng dụng Droicam khi chạy chương trình 38
Hình 3.23: Màn hình hiển thị hình ảnh thu từ camera điện thoại 39
Hình 3.24: Thu nhận khung hình từ ứng dụng Droicam 39
Hình 3.25: Chuyển đổi phối cảnh 39
Trang 16Hình 3.26: Khung hình trước (bên trái) và sau (bên phải) khi chuyển đổi phối cảnh 40
Hình 3.27: Xử lý ảnh để phát hiện làn đường 41
Hình 3.28: Áp dụng ngưỡng nhị phân 41
Hình 3.29: Lọc nhiễu và phát hiện cách cạnh 41
Hình 3.30: Kết hợp ảnh nhị phân và ảnh đã phát hiện cạnh rồi chuyển sang ảnh màu 42
Hình 3.31: Ảnh sau khi đã xử lý để phát hiện làn đường 42
Hình 3.32: Hàm tính toán Histogram 43
Hình 3.33: Khai báo biến và khởi tạo danh sách rỗng 43
Hình 3.34: Tính toán HistogramLane 44
Hình 3.35: Tính toán HistogramLaneEnd 44
Hình 3.36: Tìm vị trí làn đường bên trái và bên phải 45
Hình 3.37: Tìm vị trí làn đường bên trái 45
Hình 3.38: Tìm vị trí làn đường bên phải 46
Hình 3.39: Vẽ hai điểm lên làn đường trái và phải 47
Hình 3.40: Ảnh sau khi thực hiện hàm tìm làn đường 47
Hình 3.41: Tính toán tìm giá trị result 47
Hình 3.42: Tính toán tìm vị trí tâm đường 48
Hình 3.43: Vẽ hai đường thẳng thể hiện cho tâm đường và tâm khung hình 48
Hình 3.44: Tính độ lệch trung tâm làn đường so với tâm khung hình và in lên “frame” 48 Hình 3.45: Ảnh sau khi thực hiện hàm tính toán vị trí trung tâm làn đường 49
Hình 3.46: Kết quả khi thực hiện các hàm đã thiết kế 50
Hình 3.47: Khi xe gặp khúc cua sang phải 51
Hình 3.48: Khi xe gặp khúc cua sang phải có góc lớn 51
Hình 3.49: Khi xe gặp khúc cua sang trái 52
Hình 3.50: Khi xe gặp khúc cua sang trái có góc lớn 52
Hình 3.51: Gửi tín hiệu điều khiển đến arduino 53
Trang 17Hình 3.52: Thiết lập kết nối bluetooth 54
Hình 3.53: Xây dựng các lệnh điều khiển xe dựa trên “result” 55
Hình 3.54: Hàm gửi tín hiệu điều khiển xe đi thẳng 55
Hình 3.55: Hàm thực hiện tất cả cả hàm đã được xây dựng 57
Hình 3.56: Thực hiện tuần tự các hàm để xử lý ảnh và gửi tín hiệu điều khiển 58
Hình 3.57: Khai báo các thư viện 58
Hình 3.58: Khai báo các thư viện và biến cần thiết 59
Hình 3.59: Thiết lập các thông số cần thiết 59
Hình 3.60: Khởi động bluetooth 60
Hình 3.61: Nhận lệnh và điều khiển 61
Hình 3.62: Kiểm tra lệnh từ bluetooth 62
Hình 3.63: Gọi các hàm tương ứng với tín hiệu 63
Hình 3.64: Hàm điều khiển xe đi thẳng 63
Hình 4.1: Làn đường cho xe thực nghiệm 65
Hình 4.2: Mô hình xe chạy trên làn được thực nghiệm 66
Hình 4.3: Hình ảnh thu được từ camera 67
Hình 4.4: Vùng cần xử lý sau khi đã áp dụng thuật toán Canny 68
Hình 4.5: Hình ảnh từ camera khi gặp khúc cua trái 69
Hình 4.6: Hình ảnh sau khi xử lý khi gặp khúc cua trái 69
Hình 4.7: Hình ảnh camera thu được khi gặp khúc cua gắt 70
Hình 4.8: Hình ảnh khúc cua gắt sau khi cắt để tìm ra ROI 71
Hình 4.9: Hình ảnh khúc cua gắt sau khi xử lý 71
Trang 18DANH MỤC CÁC BẢNG Bảng 3.1 Kết nối các thiết bị đến arduino 19
Trang 19CHƯƠNG 1 TỔNG QUAN 1.1 Lý do chọn đề tài
Trên thế giới đã trải qua ba cuộc cách mạng công nghiệp lớn, mỗi lần đều làm thay đổi toàn diện về kinh tế, xã hội và văn hóa Hiện nay, thế giới đang tiến vào cuộc cách mạng công nghiệp thứ tư - cách mạng số, với sự phát triển mạnh mẽ của các công nghệ như mạng xã hội, điện toán đám mây, phân tích dữ liệu lớn (SMAC), kết nối vạn vật (IoT), trí tuệ nhân tạo (AI), thực tế ảo (VR), tương tác thực tại ảo (AR) và đặc biệt là xe tự hành
Dự đoán của các chuyên gia, trong vòng 10 đến 15 năm tới, xe tự hành sẽ chiếm ưu thế trên các phương tiện truyền thống Nhiều tập đoàn lớn trên thế giới, trong đó có Tesla, Daimler, Google, đã tham gia vào cuộc đua phát triển công nghệ xe tự lái mà không cần sự can thiệp của con người
Hệ thống điều khiển xe bám đường và tránh vật cản chính là yếu tố chính để xe có thể tự hành độc lập Trong đồ án này, chúng ta sẽ tập trung nghiên cứu về hệ thống điều khiển bám đường cho xe tự hành, sử dụng camera để xác định làn đường Điều kiện là đường phải được phân chia rõ ràng bằng các vạch kẻ như trên đường cao tốc
Để thực hiện đồ án này, chúng ta sử dụng máy tính laptop Acer, điện thoại Android làm camera, và Kit Arduino ESP32 4MB Flash UNO D1 R32 Chương trình điều khiển được viết bằng ngôn ngữ Python, kết hợp với thư viện OpenCV
Trong quá trình thực hiện, do trình độ về mặt chuyên môn của nhóm còn hạn chế, sai sót là điều khó tránh khỏi Mong được sự đóng góp từ các thầy, cô và bạn đọc để đồ án được hoàn thiện hơn
1.2 Đối tượng và phạm vi nghiên cứu 1.2.1 Đối tượng nghiên cứu
• Phương pháp xử lý ảnh • Kit Arduino ESP32 4MB Flash UNO D1 R32 • Phần mềm Arduino IDE
Trang 20• Tìm hiểu và thiết kế mô hình xe tự hành
1.3 Tình hình nghiên cứu và phát triển của đề tài 1.3.1 Trong nước
Trước bối cảnh nghiên cứu xe tự hành trên thế giới đang diễn ra rất sôi nổi, vào ngày 2/11/2016, tập đoàn FPT đã chính thức phát động cuộc thi "Cuộc đua số" với chủ đề "Xe không người lái" Mục tiêu của cuộc thi là giúp các bạn trẻ Việt Nam xây dựng một nền tảng vững chắc để đón nhận cơ hội và thành công trong cuộc cách mạng số đang phát triển mạnh mẽ trên toàn cầu
Ông Bùi Đình Giáp, CEO của Akabot, FPT Telecom, chia sẻ: "Chúng ta đều nhận thấy rằng vấn đề tự hành ở Việt Nam phức tạp hơn so với các quốc gia khác Nếu chúng ta tập trung vào một bài toán quá khó, điều đó sẽ không hiệu quả về mặt kinh doanh Dù công nghệ có tiến bộ đến đâu, yếu tố kinh doanh vẫn rất quan trọng Vì vậy, tôi cho rằng chúng ta nên tiến hành từng bước một cách thận trọng."
Theo đại diện của FPT Software, xe tự hành là chiếc có khả năng nhận diện được vật cản, bám đường và hoạt động giống hết một chiếc xe có người lái Xe có thể di chuyển trên đoạn đường cong và tránh vật cản nhờ vào thuật toán phát hiện biên ảnh để xác định lộ trình, đọc dữ liệu từ các cảm biến siêu âm, tính toán tốc độ động cơ và điều khiển động cơ PID cơ bản cho vòng tốc độ và vị trí
Ngoài ra, xe tự hành thông minh cấp độ 4 "Make-in-Vietnam" đầu tiên tại Việt Nam do Tập đoàn Phenikaa nghiên cứu, phát triển và sản xuất đã được giới thiệu trong khuôn khổ Hội thảo Quốc tế "Công nghệ tự hành và Giao thông thông minh" tổ chức vào chiều ngày 26/3 tại Trường Đại học Phenikaa (quận Hà Đông, Hà Nội) Sự kiện này đã thu hút sự quan tâm của nhiều chuyên gia, doanh nghiệp và người dân [1]
1.3.2 Ngoài nước
Năm 2014, để xác định tình hình nghiên cứu về xe tự hành ở trạng thái như thế nào, 6 cấp độ cho xe tự lái đã được công bố bởi Hiệp hội Kỹ sư ô tô (SAE) Cấp độ 0 không có chức năng tự lái hoàn toàn Nhiều phương tiện giao thông hiện nay được phân loại vào cấp độ này, kể cả khi được trang bị các tính năng như cảnh báo
Trang 21tiền va chạm hoặc công nghệ cảnh báo điểm mù Tại cấp độ này, việc điều khiển các tính năng của xe như lái xe, tăng giảm tốc độ hay phanh khi di chuyển là trách nhiệm của người ngồi sau vô lăng
Một số tính năng hỗ trợ người lái được trang bị cho ô tô ở cấp độ 1 Các loại xe tự lái ở cấp độ này có thể được điều khiển với một hoặc nhiều hệ thống, bao gồm cả hệ thống điều khiển tốc độ hoặc hướng lái, nhưng không thể hoạt động cùng một lúc Hiện nay, nhiều mẫu xe đã tích hợp tính năng Cruise Control để giúp xe duy trì tốc độ mà người lái mong muốn, giảm sự mệt mỏi trong việc phải giữ chân ga trong suốt quãng đường di chuyển Đây là ví dụ điển hình cho khả năng tự vận của ô tô ở cấp độ 1 Đến năm 2021, phần lớn ô tô được bán ra tại Mỹ sẽ trang bị hệ thống phanh tự động khẩn cấp, là một yếu tố quan trọng của xe tự lái cấp độ 1 Ngoài ra, một số hãng xe như Subaru đã tích hợp công nghệ chủ động kiểm soát làn đường vào các dòng sản phẩm của mình, giúp xe có khả năng tự điều chỉnh và duy trì trong làn đường khi di chuyển lạch sang phải hoặc trái trên các con đường thông thường, nhưng các hệ thống này không phổ biến bằng hệ thống Cruise Control
Cấp độ 2 được trang bị một số hệ thống hỗ trợ người lái nhiều hơn Các xe tự hành cấp độ hai đã được cung cấp bởi nhiều nhà sản xuất ô tô hạng sang, có khả năng điều khiển hướng lái và tốc độ mà không cần sự người lái can thiệp trong một khoảng thời gian ngắn (dưới 1 phút hoặc vài giây) Hiện tại, tính năng tự hành cấp độ hai đã được phổ biến trên hầu hết các dòng xe từ trung cấp đến hạng sang, nhưng yêu cầu người lái vẫn phải theo dõi xung quanh khi xe di chuyển Hệ thống tự hành cấp độ hai nổi tiếng nhất hiện nay có lẽ là Autopilot của Tesla Lực xoay trên vô lăng được đo để đảm bảo rằng người lái tập trung vào việc điều khiển xe Xe tự hành ở cấp độ này không thể điều khiển tự do trong mọi tình huống, bao gồm việc nhập làn trên cao tốc và di chuyển trong điều kiện giao thông tắc nghẽn
Cấp độ 3 là cấp độ của xe tự hành có điều kiện Khác với các xe tự hành ở cấp độ 2, việc điều khiển của xe tự hành cấp độ 3 có thể diễn ra trong mọi tình huống, đồng thời luôn liên tục theo dõi điều kiện của con đường Tuy nhiên, không giống như các cấp độ cao hơn, khi chúng không xử lý được tình huống nào đó, các
Trang 22xe tự hành cấp độ 3 sẽ chuyển sang chế độ người lái điều khiển Theo quy chuẩn được SAE xác định, việc can thiệp của người lái là bắt buộc khi hệ thống tự lái không hoạt động Tuy vậy, một số nhà sản xuất ô tô cho rằng vấn đề an toàn cho người lái là quan trọng vì sự phụ thuộc quá mức vào các hệ thống này có thể khiến họ không kịp thời can thiệp khi cần Chính vì lý do này mà nhiều công ty sản xuất ô tô như Ford hay Volvo đã thông báo rằng họ sẽ bỏ qua giai đoạn này
Cấp độ 4 của xe tự hành được mô tả là hoàn toàn tự động Thông báo gần đây từ Ford và Volvo cho biết rằng những chiếc xe tự hành cấp độ 4 sẽ được ra mắt trước năm 2021 Chưa rõ liệu những chiếc xe này có thể được phân phối rộng rãi cho khách hàng thông thường hay chỉ được sử dụng trong các dịch vụ chia sẻ xe hoặc hoạt động tại một số thành phố cụ thể Tuy nhiên, rõ ràng là nhiều hãng xe đã đặt mục tiêu để đạt được cấp độ này Xe tự hành cấp độ 4 sẽ không yêu cầu sự can thiệp của người lái, mà sẽ tự dừng lại khi gặp trục trặc trong quá trình hoạt động Điều quan trọng khác so với xe tự hành cấp độ 3 chính là tính năng này Tesla và Mercedes-Benz, giữa nhiều nhà sản xuất ô tô khác, đã tích hợp vào các sản phẩm của mình tính năng giảm tốc dần cho xe trước khi dừng hoặc kích hoạt ánh sáng cảnh báo nguy hiểm khi phát hiện người lái không tương tác với xe Một số hãng xe cho rằng việc tích hợp cả tính năng tự lái và khả năng lái tay là không cần thiết và tốn kém
Cấp độ 5 được xem như là những chiếc xe hoàn toàn tự hành Mặc dù cấp độ 4 và cấp độ 5 có vẻ tương đồng, tuy nhiên, thực tế cho thấy rằng, đây là một bước tiến lớn khi xe tự hành cấp độ năm không cần sự can thiệp của người lái trong quá trình hoạt động Các trang bị điều khiển cơ bản như vô lăng, chân ga và chân phanh sẽ không còn quan trọng trên một chiếc xe tự hành cấp độ này do chúng không còn phụ thuộc vào việc điều khiển từ tài xế Hiện nay, trên khắp thế giới đã có rất nhiều công ty tham gia vào việc nghiên cứu về xe tự hành và trong thời gian tới, họ sẽ tung ra và thử nghiệm một số loại xe tự hành để áp dụng vào cuộc sống hàng ngày theo phương pháp nghiên cứu và phát triển [2]
Trang 23Hiện nay, nổi tiếng nhất trong lĩnh vực xe taxi tự hành là các dự án do Waymo (công ty con của tập đoàn Alphabet) và Cruise (công ty con của tập đoàn General Motors) triển khai Nổi trội hơn đối thủ Cruise, Waymo đã đưa vào hoạt động hơn 500 phương tiện tự hành tại San Francisco, một trong những thành phố công nghệ cao hàng đầu thế giới và là nơi thử nghiệm lý tưởng cho các công nghệ taxi không người lái [3]
1.4 Mục tiêu nghiên cứu
Nghiên cứu, thiết kế được mô hình xe tự hành trên kit xe điều khiển tỉ lệ 1:10
Thiết kế, thi công và hoàn thành mô hình hệ thống
1.6 Nội dung
Chương 1 : Tổng quan Chương 2 : Cơ sở lý thuyết
Trang 24Chương 3 : Xây dựng mô hình và chương trình điều khiển Chương 4 : Kết quả thực nghiệm
Chương 5 : Kết luận và hướng phát triển
Trang 25CHƯƠNG 2 CƠ SỞ LÝ THUYẾT 2.1 Ngôn ngữ lập trình Python
2.1.1 Khái niệm về Python
Năm 1990 Guido Van Rossum đã tạo ra ngôn ngữ lập trình được cho là phổ biến nhất hiện nay, đó chính là Python, hoàn toàn được tạo kiểu động và sử dụng cơ chế cấp phát bộ nhớ tự động; do đó, nó tương tự như perl, ruby, scheme, smalltalk và tcl Python đã được phát triển trong một dự án mở, được quản lý bởi tổ chức phi lợi nhuận Python Software Foundation
Ban đầu, Python đã được phát triển nhằm dựa trên nền unix Tuy nhiên, theo năm tháng, ngôn ngữ lập trình này đã vương ra mọi hệ điều hành từ MS-DOS đến Mac OS, OS/2, WindowsLinux cùng các hệ điều hành khác trong họ Unix Mặc dù sự phát triển của Python có sự tham gia của rất nhiều lập trình viên, tuy nhiên hiện tại Guido van Rossum mới là cha đẻ chính của Python Ông đóng vai trò chủ chốt trong quá trình xác định hướng phát triển của Python
Hiện nay, Python là ngôn ngữ lập trình được sử dụng rộng rãi thứ hai trên thế giới Điều này có ý nghĩa là có rất nhiều tài liệu, thư viện và các framework đã được phát triển để hỗ trợ việc viết phần mềm bằng Python Điều này giúp cho việc phát triển các ứng dụng, dự án từ nhỏ đến lớn có thể diễn ra một cách dễ dàng và hiệu quả
2.1.2 Đặc điểm của ngôn ngữ lập trình Python
Đặc điểm chính của Python là cú pháp đơn giản và rõ ràng, giúp các lập trình viên tập trung vào việc giải quyết vấn đề thay vì phải lo lắng về các chi tiết cú pháp phức tạp
Sử dụng từ khoá Tiếng Anh được tăng cường trong Python, việc hạn chế các ký hiệu và cấu trúc cú pháp so với các ngôn ngữ khác Python là ngôn ngữ mà phân biệt kiểu chữ hoa và chữ thường, với các từ khoá đều ở dạng chữ thường
Trong các ngôn ngữ khác, các khối mã thường được đánh dấu bằng các cặp ký hiệu hoặc từ khóa Ví dụ: trong C/C++, dấu ngoặc nhọn {} được sử dụng để bao
Trang 26quanh một khối mã Ngược lại, trong Python, có một cách rất đặc biệt để tạo các khối câu lệnh: các câu lệnh trong một khối được thụt sâu hơn (ở bên phải) so với các câu lệnh của khối cha chứa khối đó và có thể được thụt lề bằng cách sử dụng dấu tab hoặc dấu cách
Khả năng mở rộng của Python là không giới hạn: thông qua viết hàm và tích hợp vào Python khi biết sử dụng C, người dùng có thể tạo ra nhiều hàm tùy theo nhu cầu của mình Những hàm này sau đó có thể trở thành các hàm xây dựng sẵn (built-in) của Python Chúng ta cũng có thể mở rộng chức năng của trình thông dịch hoặc liên kết các chương trình Python với các thư viện chỉ có ở dạng nhị phân, chẳng hạn như các thư viện đồ họa do nhà sản xuất thiết bị cung cấp Hơn nữa, trình thông dịch Python có thể được liên kết với các ứng dụng viết bằng ngôn ngữ C, cho phép sử dụng Python như một ngôn ngữ mở rộng hoặc như một ngôn ngữ dòng lệnh phụ trợ cho các ứng dụng đó
Python là một ngôn ngữ lập trình dạng thông dịch, được biết đến với ưu điểm tiết kiệm thời gian trong quá trình phát triển ứng dụng vì không yêu cầu thực hiện biên dịch và liên kết Việc sử dụng trình thông dịch cho phép chạy file script hoặc tương tác với người dùng Ở chế độ tương tác, Python hoạt động giống như shell của các hệ điều hành Unix, nơi mà từng biểu thức có thể được nhập vào và sau đó bấm Enter, kết quả sẽ được hiển thị ngay tức khắc Điều này rất hữu ích cho việc nghiên cứu tính năng của ngôn ngữ hoặc để lập trình viên chạy thử mã lệnh trong quá trình phát triển phần mềm Bên cạnh đó, tính năng này cũng có thể được sử dụng để thực hiện các phép tính như máy tính di động
Mỗi câu lệnh trong Python được viết trên một dòng mã và không yêu cầu kết thúc bằng bất kỳ kí tự nào từ người sử dụng Cũng như các ngôn ngữ khác, Python cũng có các cấu trúc điều khiển Chúng bao gồm:
Cấu trúc rẽ nhánh: cấu trúc if (có thể sử dụng thêm elif hoặc else) là cấu
trúc điều kiện đơn giản để thực thi một khối mã nếu điều kiện là đúng
Lệnh while: chạy một khối mã cụ thể cho đến khi điều kiện lặp có giá trị false
Trang 27Vòng lặp for: Vòng lặp for trong python được sử dụng để lặp một biến qua một dãy (List hoặc String) theo thứ tự mà chúng xuất hiện Vòng lặp for trong python được sử dụng để lặp một phần của chương trình nhiều lần
Lớp, đối tượng: Python cũng có từ khóa class dùng để khai báo lớp (sử dụng trong lập trình hướng đối tượng) và lệnh def dùng để định nghĩa hàm
Hệ thống kiểu dữ liệu: Hệ thống kiểu duck typing của Python được sử dụng, còn được biết đến là latent typing (tự động xác định kiểu) Điều này có nghĩa là, các ràng buộc về kiểu dữ liệu không được kiểm tra bởi Python tại thời điểm biên dịch, mà chỉ được thực hiện tại thời điểm chạy Khi một hoạt động trên một đối tượng gây lỗi, điều này cho thấy rằng đối tượng không sử dụng một kiểu phù hợp Python cũng là một ngôn ngữ có tính chất định kiểu mạnh Mọi hoạt động không hợp lệ như cộng số vào chuỗi ký tự sẽ bị từ chối Trong Python, không cần phải khai báo biến; biến được coi là đã được khai báo khi gán giá trị cho lần đầu tiên Dựa vào giá trị gán, Python sẽ tự động xác định kiểu dữ liệu của biến
Module: Trong Python, chia chương trình thành các module để có thể tái sử dụng trong các chương trình khác là điều phổ biến Ngoài ra, Python cung cấp sẵn một loạt các modules chuẩn mà lập trình viên có thể tái sử dụng trong ứng dụng của họ Các module này cung cấp nhiều chức năng hữu ích, như các hàm truy xuất tập tin, các lời gọi hệ thống, trợ giúp lập trình mạng (socket), …
Đa năng: Python là một ngôn ngữ lập trình đơn giản nhưng vô cùng hiệu quả Khi so sánh với Unix shell, Python hỗ trợ xây dựng các chương trình lớn hơn và cung cấp nhiều cấu trúc phong phú hơn So với C, Python mang lại nhiều cơ chế kiểm tra lỗi hơn và cung cấp nhiều kiểu dữ liệu cấp cao như mảng (array) linh hoạt và từ điển (dictionary), những cấu trúc dữ liệu này đòi hỏi nhiều công sức nếu viết bằng C
Python, với vai trò là một ngôn ngữ lập trình cấp cao, có thể đáp ứng hầu hết các nhu cầu của lập trình viên Nó thích hợp cho việc phát triển các chương trình lớn hơn cả AWK và Perl Python cũng được sử dụng rộng rãi trong lập trình web và có thể đóng vai trò như một ngôn ngữ kịch bản
Trang 28Thiết kế của Python cho phép nó được nhúng và sử dụng như một ngôn ngữ kịch bản để tùy biến và mở rộng các ứng dụng lớn hơn Python có khả năng tương tác với hầu hết các loại cơ sở dữ liệu, xử lý văn bản và tài liệu hiệu quả, và hoạt động tốt với các công nghệ web khác
Trong lĩnh vực tính toán khoa học, Python đặc biệt hiệu quả nhờ các công cụ như Python Imaging Library, pyVTK, MayaVi 3D Visualization Toolkits, Numeric Python, ScientificPython, và nhiều công cụ khác Python cũng phù hợp để phát triển các ứng tính toán khoa học, với các thư viện như Statsmodels, SymPy, HDF5, Scipy
Ngoài ra, Python còn cung cấp một framework unit testing để tạo ra các bộ test (test suites), hỗ trợ lập trình viên trong việc kiểm thử và đảm bảo chất lượng phần mềm
2.2 Thư viện OpenCV 2.2.1 Giới thiệu thư viện OpenCV
Thư viện OpenCV là một thư viện được phát hành miễn phí được cấp giấy phép BSD Nó hỗ trợ các interface C++, C, Python, Java và có khả năng hoạt động trên các hệ điều hành Windows, Linux, Mac OS, iOS và Android OpenCV được thiết kế để tính toán hiệu quả và tập trung nhiều vào ứng dụng thời gian thực Với việc viết bằng ngôn ngữ lập trình C/C++ tối ưu hóa, thư viện này có khả năng tận dụng sức mạnh của xử lý đa lõi Được sử dụng rộng rãi trên toàn cầu, OpenCV thu hút cộng đồng người dùng với số lượng vượt qua con số 47 nghìn và download đã vượt qua con số 6 triệu Phạm vi ứng dụng của OpenCV rất đa dạng, đang được sử dụng rộng rãi trong các ứng dụng bao gồm:
Nhận diện khuôn mặt và nhận dạng: • Phát hiện khuôn mặt trong ảnh và video • Nhận dạng khuôn mặt để xác định danh tính Nhận diện đối tượng:
• Phát hiện và phân loại các đối tượng trong hình ảnh và video • Ứng dụng trong hệ thống giám sát, xe tự lái, và robot
Trang 29Thị giác máy tính trong xe tự hành: • Phát hiện làn đường, biển báo giao thông, và chướng ngại vật • Hỗ trợ hệ thống lái tự động và an toàn giao thông
Thực tế tăng cường (AR): • Phát hiện và theo dõi các điểm đặc trưng trong môi trường thực • Kết hợp các đối tượng ảo với thế giới thực
Nhận diện chuyển động và theo dõi: • Phát hiện chuyển động trong video • Theo dõi đối tượng di chuyển trong khung hình Ứng dụng trong robot:
• Giúp robot nhận biết môi trường xung quanh và định hướng • Hỗ trợ robot trong các nhiệm vụ phức tạp như gắp và thả đồ vật Nhận dạng chữ viết (OCR):
• Chuyển đổi văn bản trong hình ảnh thành dạng văn bản số • Ứng dụng trong quét tài liệu và nhận dạng biển số xe
2.2.2 Các hàm cơ bản trong OpenCV được sử dụng trong đồ án
a) Perspective Transformation Thuật toán Perspective sử dụng trong việc chọn vùng ảnh cần xử lý Hình ảnh đầu ra sẽ có góc nhìn từ trên cao, trong đó các đối tượng gần camera ba đầu sẽ xuất hiện nhỏ hơn và các đối tượng ở xa sẽ được phóng to hơn
matrix = cv2.getPerspectiveTransform(source,destination) Các đối số truyền vào hàm:
• source: toạ độ các điểm trên ảnh đầu vào • destination: toạ độ các điểm trên ảnh đầu ra • frame_pers = cv2.warpPerspective(frame,matrix,(640,480))
Trang 30• Các đối số truyền vào hàm: • frame: hình ảnh đầu vào • matrix: ma trận biến đổi của getPerspectiveTransform • (640,480): kích thước của ảnh đầu ra
b) Chuyển đổi hình ảnh sang không gian màu Grayscale frame_gray = cv2.cvtColor(frame_pers, cv2.COLOR2GRAY) Hàm này có chức năng chuyển đổi một hình ảnh từ không gian với không gian màu RGB sang không gian màu xám
Các đối số truyền vào hàm: • frame_pers: ảnh cần chuyển đổi • cv2.COLOR2GRAY: lựa chọn không gian màu cần chuyển đổi ▪ Đầu ra:
• frame_gray: biến chứa hình ảnh đã được chuyển đổi c) Hàm phân ngưỡng động
frame_thresh = cv2.threshold(frame_pers,0,20,cv2.TRHRESH_BINARY) Hàm này được sử dụng để phân ngưỡng cho một hình ảnh xám, chuyển đổi nó thành hình ảnh nhị phân
Các đối số truyền vào hàm: • frame_gray: hình ảnh đầu vào cần chuyển đổi sang hình ảnh nhị phân, ảnh này phải đảm bảo là đã được chuyển về không gian màu xám trước • ngưỡng cực tiểu: đây là một con số đại diện cho giá trị pixel của điểm ảnh, bất kì điểm ảnh nào có giá trị bé hơn ngưỡng này sẽ được chuyển thành giá trị 0 (màu đen)
• ngưỡng cực đại: điểm ảnh nào có giá trị lớn hơn ngưỡng này sẽ được chuyển thành giá trị 255 (màu trắng)
• cv2.THRESH_BINARY: loại phương pháp phân ngưỡng, trong trường hợp này nó là phương pháp nhị phân, nghĩa là mỗi giá trị pixel sẽ có 2 giá trị: 0 hoặc 255
Trang 31Đầu ra: • frame_thresh: biến chứa hình ảnh đã được phân ngưỡng
d) Làm mờ hình ảnh bằng bộ lọc Gaussian blur = cv2.GaussianBlur(frame_gray,(kernel,kernel),0)
Hàm này được sử dụng để làm mờ một hình ảnh bằng bộ lọc Gaussian Bộ lọc Gausian được sử dụng trong xử lý hình ảnh để làm mờ hoặc làm trơn một hình ảnh Nó dựa trên phân phối Gaussian, hay còn lại là phân phối chuẩn, là một phân phối xác suất liên tục mà giả định rằng các biển ngẫu nhiên có phân phối chuẩn
Trong bộ lọc Gaussian, mỗi pixel của hình ảnh đầu ra được tính toán dựa trên một trung bình trọng số của các pixel lân cận trong hình ảnh đầu vào, với các trọng số được xác định bởi một hàm Gaussian Các pixel gần nhau sẽ có trọng số lớn hơn, trong khi các pixel xa nhau sẽ có trọng số thấp hơn
Cụ thể, quá trình tính toán một pixel trong bộ lọc Gaussian bao gồm: • Xác định vùng lân cận của pixel đó trong hình ảnh đầu vào • Tình toán trung bình trọng số của các pixel trong vùng lân cận với các trọng số được xác định bởi hàm Gaussian
• Gán giá trị trung bình được tính toán cho pixel tương ứng trong hình ảnh đầu ra
Các tham số truyền vào hàm: • frame_gray: hình ảnh đầu vào cần được làm mờ Đảm bảo hình này phải được chuyển đổi sang không gian màu xám
• (kernel, kernel): kích thước của bộ lọc Gaussian, cặp giá trị (kernel, kernel) này có nhiệm vụ xác định kích thước, giá trị thường lẻ và lớn hơn 0 • ‘0’ : Đây là độ lệch chuẩn của bộ lọc, nếu được đặt thành ‘0’ thì hàm sẽ tự động xác định độ lệch chuẩn dựa trên giá trị của kernel
e) Canny Edge Detection
Trang 32frame_edge = cv2.Canny(blur,250,300,aptureSize = 3) Hàm cv2.Canny() được sử dụng để phát hiện cạnh của một hình ảnh bằng cách sử dụng phương pháp Canny Edge Dectection
Các đối số sẽ truyền vào hàm: • blur: đây là biến chứa hình ảnh đầu vào đã được làm mờ trước đó, thường giúp giảm nhiễu và làm cho việc xác định cạnh trở nên chính xác hơn
• ‘250’ và ‘300’: đây là hai ngưỡng để xác định cạnh trong hình ảnh Các pixel có độ gradient lớn hơn ngưỡng cao (300) thì được coi là cạnh chắc chắn, trong khi các pixel có độ gradient nhỏ hơn ngưỡng thấp (250) sẽ bị loại bỏ Các pixel có độ gradient nằm giữa hai ngưỡng sẽ được xem xét là cạnh nếu chúng được kết nối với các pixel cạnh chắc chắn
• apertureSize: kích thước của kernel Sobel sử dụng để tính toán độ gradient của hình ảnh Giá trị mặc định là 3, tương ứng với kernel kích thước 3x3
Đầu ra: • Hình ảnh chứa các cạnh đã được phát hiện: Các pixel trong hình ảnh đầu ra sẽ có giá trị 0 hoặc 255 với giá trị 0 biểu thị cho các pixel không được coi là cạnh và giá trị 255 biểu thị cho các pixel được xác định là cạnh
f) Các hàm thao tác lên hình ảnh - Vẽ đường thẳng lên ảnh cv2.line(frame, start_point, end_point, thickness) Hàm này có chức năng vẽ một đường thẳng lên hình ảnh đầu vào với điểm bắt đầu, điểm kết thúc và độ dày được chỉ định
Các đối số truyền vào hàm: • frame: hình cần vẽ đường thẳng lên • start_point: điểm bắt đầu vẽ
Trang 33• end_point: điểm kết thúc • thickness: độ dày của đường thẳng - Ghi lên ảnh
cv2.putText(frame, text, org, font, fontScale, color, thickness, lineType = False)
Hàm này sẽ trả về một hình ảnh với văn bản được ghi lên ảnh Các đối số truyền vào hàm:
- frame: hình ảnh cần ghi lên - text: nội dung cần ghi lên ảnh - org: toạ độ (x,y) của kí tự đầu tiên của văn bản cần ghi - font: loại phông chữ sử dụng cho văn bản Có thể chọn một vài phông chữ đã được định nghĩa sẵn: “cv2.FONT_HERSHEY_SIMPLEX”, “cv2.FONT_HERSHEY_PLAIN ”, …
- fontScale: tỉ lệ kích thước của văn bản - color: màu chữ ghi lên trên ảnh
- thickness: độ dày cỡ chữ (được chỉ định dưới dạng số nguyên) - lineType: là kiểu đường vẽ(mặc định là False), có thể chỉ định “cv2.LINE_AA” cho việc sử dụng anti-aliasing, hoặc “cv2.LIN_8”, “cv2.LINE_4”,…
- Hiển thị ảnh cv2.imshow(window_name, image) Hàm này có chức năng hiển thị ảnh ra một cửa số với tên gọi do người dùng đặt
Các đối số truyền vào hàm: • window_name: tên cửa sổ hiển thị ảnh, tên này do người dùng đặt • iamge: hình cần hiển thị ra cửa sổ
- Đóng các cửa sổ hiển thị ảnh
Trang 34cv2.destroyAllWindow() Hàm này sẽ đóng tất cả các cửa sổ hiển thị hình ảnh [4]
2.3 Thư viện bluetooth
Thư viện bluetooth trong Python cung cấp các công cụ cho việc tương tác với các thiết bị bluetooth từ các ứng dụng Python, trong đồ án này, nhóm chúng em sử dụng thư viện Bluetooth
Thư viện này cho phép tìm kiếm các thiết bị có tích hợp bluetooth khác, tiến hành kết nối và truyền nhận dữ liệu qua bluetooth Cụ thể:
• Tìm kiếm thiết bị bluetooth: sử dụng thư viện để quét và tìm kiếm các thiết bị bluetooth trong phạm vi hoạt động của máy tính Điều này cho phép phát hiện các thiết bị bluetooth có sẵn để kết nối
• Kết nối với thiết bị bluetooth: Sau khi phát hiện được thiết bị bluetooth mong muốn, ta có thể sử dụng thư viện để thiết lập kết nối với thiết bị đó • Truyền và nhận dữ liệu qua Bluetooth: Sau khi kết nối thành công, ta có thể sử dụng kết nối này để thực hiện truyền và nhận dữ liệu giữa ứng dụng Python và thiết bị bluetooth Điều này cho phép chúng ta thực hiện các tác vụ như điều khiển từ xa, truyền dữ liệu các cảm biến,…
Trang 35CHƯƠNG 3 XÂY DỰNG MÔ HÌNH VÀ CHƯƠNG TRÌNH ĐIỀU
KHIỂN 3.1 Xây dựng mô hình
3.1.1 Xây dựng sơ đồ hệ thống và sơ đồ kết nối các thiết bị
Mô hình xe được nhóm em xây dựng dựa trên các phần cứng: một máy tính laptop, điện thoại android làm camera chính, Kit Arduino ESP32 4MB Flash UNO D1 R32, motor 540, motor servo, mô đun BTS7960 43A Các thiết bị phần cứng
trên được liên kết dựa trên sơ đồ liên kết Hình 3.1
Trong đó Laptop đóng vai trò xử lý hình ảnh và tim các làn đường thông qua camera là điện thoại android, điện thoại chúng em sử dụng là Poco C40 và được cài đặt phần mềm Droidcam, phần mềm này kết nối với laptop thông qua wifi.Sau khi laptop xử lý xong dữ liệu thì dữ liệu đã xử lý truyền qua arduino ESP32 4MB Flash UNO D1 R32 bằng giao tiếp bluetooth, kit arduino sau đó sẽ đưa ra các lệnh
Hình 3.1: Sơ đồ liên kết các phần cứng
Trang 36để điều khiển servo và thông qua mạch đệm BTS7960 43A để điều khiển động cơ Từ sơ đồ liên kết phần cứng, nhóm em đưa ra sơ đồ kết nối thực tế như Hình 3.2
Các kết nối quan trọng được kết nối đến kit Arduino ESP32 4MB Flash UNO D1 R32 được chỉ ra trong bảng sau:
Hình 3.2: Sơ đồ kết nối các thiết bị phần cứng
Trang 37Tên thiết bị Chân thiết bị Chân Arduino ESP32 4MB
Cell pin 18650 Gộp thành jack nguồn DC Nguồn DC 12V
Bảng 3.1: Kết nối các thiết bị đến Arduino
Trang 38Hình 3.3 là mô hình xe tự hành được lắp ráp hoàn chỉnh
Hình 3.3: Mô hình xe tụ hành hoàn chỉnh
Trang 393.2 Các thiết bị và linh kiện cần sử dụng 3.2.1 Kit khung xe điều khiển tỉ lệ 1:10
Về khung xe, nhóm chúng em sử dụng kit xe điều khiển HSP 941770 đã qua sử dụng để tiết kiệm chi phí, có kích thước đủ để lắp các thiết bị hỗ trợ cho một chiếc xe tự hành Khung xe là một khung xe đã qua sử dụng nhung vẫn còn có thể hoạt động tốt các khả năng như một chiếc ô tô thật sự
Hình 3.4: Kit xe điều khiển HPS 94170