TỔNG QUAN
Lý do chọn đề tài
Trong kỷ nguyên số hiện nay, sự phát triển vượt bậc của công nghệ đã tạo ra nhiều thành tựu giá trị cho con người, đồng thời cũng đặt ra những thách thức mới Đặc biệt, công nghệ AI đang được ứng dụng rộng rãi và tiếp tục được nghiên cứu phát triển, mang đến nhiều sản phẩm đổi mới.
Và một trong những ứng dụng thành công nhất của AI chính là xe tự hành
Ngành ô tô toàn cầu đang tích cực nghiên cứu và phát triển các mẫu xe thông minh, không người lái, phù hợp với xu hướng công nghệ hiện đại Việc ứng dụng công nghệ AI thay thế con người trong các phương tiện tự hành không chỉ giảm bớt sức lao động mà còn mang lại lợi nhuận kinh tế cao và khả năng hoạt động hiệu quả trong nhiều điều kiện đặc biệt.
Trong nghiên cứu của Alexandros Nikitas, Eric Tchouamou Njoya và Samir Dani, các tác giả chỉ ra rằng phương tiện kết nối và tự hành (CAV) có khả năng trở thành hình thức giao thông có ảnh hưởng lớn trong tương lai Mặc dù lý thuyết cho thấy CAV có thể cải thiện quản lý giao thông, an toàn, kinh tế, môi trường và cơ sở hạ tầng công cộng, nhưng thực tế cho thấy công nghệ này đang phải đối mặt với nhiều thách thức phức tạp Những thách thức này bao gồm sự chấp nhận của cộng đồng, đồng thuận trong ngành công nghiệp ô tô, cũng như sự ủng hộ từ người tiêu dùng và các cơ quan quản lý xã hội, cần thiết để CAV trở thành tiêu chuẩn mới trong giao thông vận tải.
Những lợi ích mang lại từ xe tự hành, như là:
– Cải thiện tình hình an toàn và phòng chống tai nạn giao thông, cũng như góp phần nâng cao ý thức tham gia giao thông
– Cải thiện tình hình an ninh chung: Đơn giản hóa quy trình giám sát và kiểm soát các loại hình phương tiện giao thông
Giảm tắc nghẽn giao thông thông qua quản lý lưu lượng hiệu quả không chỉ giúp cải thiện tình trạng giao thông mà còn nâng cao hiệu quả sử dụng cơ sở hạ tầng Nhờ vào việc di chuyển có trật tự và hiệu quả hơn, các phương tiện giao thông sẽ góp phần tạo ra một môi trường giao thông thông suốt và an toàn hơn.
– Tiết kiệm thời gian đáng kể: Mọi người có thể sử dụng khoảng thời gian ngồi
2 trên trên xe để nghỉ ngơi hoặc làm việc cũng như giải trí
– Tiện ích cuộc sống được nâng cao
Công nghệ tự hành góp phần bảo vệ môi trường bằng cách tiết kiệm nhiên liệu và giảm thiểu khí thải nhờ vào khả năng vận hành linh hoạt.
– Giúp thúc đẩy văn hóa chia sẻ phương tiện giao thông, đồng thời tạo điều kiện phát triển giao thông công cộng
– Loại bỏ các vấn đề, rào cản đối với người điều khiển phương tiện giao thông như tuổi tác, thể trạng, và kỹ năng trong việc lái xe
– Tiết kiệm ngân sách đầu tư cho hạ tầng giao thông
Công nghệ mô phỏng mới đang nâng cao đáng kể độ an toàn cho xe tự lái, cho thấy tiềm năng lớn của ngành ô tô tự hành Nhóm sinh viên chúng em nhận thấy rằng xe tự hành sẽ ngày càng chiếm lĩnh thị trường ô tô trong tương lai Ngành ô tô Việt Nam hiện đang phát triển mạnh mẽ và được xem là tiềm năng trẻ trong cộng đồng ô tô toàn cầu, điều này càng củng cố niềm tin của chúng em vào tương lai tươi sáng của ngành ô tô tự hành tại Việt Nam.
Nhóm chúng em đã quyết định nghiên cứu đề tài "Nghiên cứu, thiết kế và lắp đặt hệ thống điều khiển ứng dụng xử lý ảnh vào xe mini để vận chuyển hàng hóa trong khuôn viên viện" nhằm giải quyết các vấn đề liên quan đến vận chuyển hàng hóa hiệu quả trong khu vực viện.
Mục đích của đề tài
Mục tiêu của nghiên cứu này là phát triển một mô hình xe tự động vận chuyển hàng hóa, có khả năng di chuyển theo làn đường và nhận diện biển báo, nhằm hoạt động độc lập trong một khu vực nhất định mà không cần sự can thiệp của con người Mô hình này sẽ hỗ trợ quá trình vận chuyển hàng hóa một cách tự động và hiệu quả.
Nghiên cứu tập trung vào các vấn đề lý thuyết trong xử lý ảnh và những thách thức khi áp dụng vào thực tế Việc chuyển giao hệ thống lý thuyết sang mô hình thực tế, đặc biệt trong lĩnh vực vận chuyển hàng hóa, gặp nhiều khó khăn cần được giải quyết.
Đối tượng và phạm vi nghiên cứu
+ Tìm hiểu về ngôn ngữ lập trình Python trong xử lý ảnh
+ Nghiên cứu về phương pháp xử lý ảnh theo cạnh (Canny) và theo màu + Nghiên cứu về phương pháp định dạng đường thẳng (Hough Lines)
+ Nghiên cứu thực hiện và tự phát triển phương pháp định dạng đường thẳng của lane dạng đứt đoạn (lane đường giữa)
+ Nghiên cứu phương pháp nhận diện khung tròn của biển báo (HoughCircles)
+ Nghiên cứu phương pháp nhận diện biển báo bằng mạng tích chập CNN + Nghiên cứu các phương pháp theo dõi đối tượng (CSRT, Meanshift, Optical Flow)
+ Tìm hiểu về hệ điều hành Raspberry Pi Os
+ Tìm hiểu về Raspberry Pi 3B+
+ Ứng dụng hệ thống phần mềm đã phát triển lên mô hình
+ Tự phát triển hệ thống cơ khí cho mô hình
1.3.2 Phạm vi nghiên cứu Đề tài có phạm vi nghiên cứu ở mức độ ứng dụng các thư viện trong OpenCV cũng như một vài khía cạnh nhỏ của DeepLearning để có thể tạo ra hệ thống nhận diện lane đường và biển báo Chưa đi sâu và DeepLearning được vì vấn đề thời gian nghiên cứu
Mô hình hoạt động bị hạn chế do vấn đề khả năng xử lý của phần cứng và khả năng tối ưu hóa phần mềm, đặc biệt là khi sử dụng các thư viện hỗ trợ.
Phân tích đánh giá các hướng nghiên cứu đã có của các tác giả trong và ngoài nước liên quan đến đề tài
1.4.1 Phân tích đánh giá các hướng nghiên cứu đã có của các tác giả ngoài nước liên quan đến đề tài
Nghiên cứu của Ahmed Herchi và Abdellatif Mtibaa về "Nhận diện làn đường và biển báo giao thông cho hệ thống hỗ trợ lái xe" đã phát hiện ra các phương pháp xác định làn đường và biển báo giao thông khi xe di chuyển Bài viết trình bày cách thức xác định làn đường và phương trình tính toán để giữ xe luôn trong đúng làn, đồng thời nêu rõ các phương pháp nhận diện biển báo giao thông một cách chính xác Các bước xử lý hình ảnh đầu vào và phương pháp lọc nhiễu nhằm tăng độ chính xác trong quá trình xử lý được mô tả chi tiết Tác giả cũng đề xuất phương pháp hiệu quả nhất để xác định làn đường và biển báo giao thông.
Nghiên cứu “A Simple Way to Prevent Neural Networks from Overfitting” của Nitish Srivastava, Geofrey Hinton, Alex Krizhevsky và Ilya Sutskever giới thiệu một phương pháp mới trong đào tạo máy học bằng cách sử dụng mạng Neural networks Phương pháp này không chỉ giúp quá trình đào tạo diễn ra nhanh chóng và dễ dàng hơn mà còn nâng cao độ chính xác so với các phương pháp truyền thống Bài viết cung cấp các phương trình tính toán và hướng dẫn cụ thể về cách thiết lập hệ thống mạng Neural, giúp người đọc dễ dàng tiếp cận và hiểu rõ hơn về công nghệ này.
Trong bài báo "Deep Residual Learning for Image Recognition," Kaiming He cùng các đồng tác giả đã trình bày một khung hình mới giúp dễ dàng đào tạo các mạng nơ-ron sâu hơn so với các mạng hiện có Họ chỉ ra rằng việc định dạng rõ ràng các lớp để học các hàm dư với tham chiếu đến đầu vào của lớp là hiệu quả hơn so với việc học các hàm không được ước tính Các bằng chứng thực nghiệm được cung cấp để chứng minh rằng việc tối ưu hóa và tăng cường số lượng lớp nơ-ron có thể cải thiện đáng kể độ chính xác trong nhận diện hình ảnh.
1.4.2 Phân tích đánh giá các hướng nghiên cứu đã có của các tác giả trong nước liên quan đến đề tài
Nghiên cứu "Phát hiện và nhận dạng biển báo giao thông đường bộ sử dụng đặc trưng HOG và mạng Neural nhân tạo" của Trương Quốc Bảo và Trương Quốc Định từ trường đại học Cần Thơ vào năm 2015 đã trình bày một thuật toán xử lý ảnh và học máy nhằm tự động phát hiện và nhận diện các loại biển báo giao thông Hệ thống có khả năng nhận diện hầu hết các biển báo như biển cấm, biển nguy hiểm, biển hiệu lệnh và biển chỉ dẫn mà không bị chồng lấp Thực nghiệm cho thấy thời gian phát hiện và nhận diện trên một frame ảnh là khoảng 0.021 giây với mạng Neural nhân tạo và 0.099 giây với mô hình SVM, đạt độ chính xác nhận dạng lên đến 94%.
Luận văn thạc sĩ của Lê Thị Thu Hằng tại Đại Học Công Nghệ Hà Nội năm 2016 nghiên cứu về mạng Neural tích chập và ứng dụng trong nhận dạng biển báo giao thông Bài viết đã giới thiệu tổng quan về các kiểu mạng Neural và đặc điểm của chúng, đồng thời cung cấp định nghĩa chi tiết về mạng Neural tích chập và phương pháp xây dựng chúng.
5 mô hình mạng Neural tích chập, ứng dụng vào việc nhận dạng biển báo giao thông trên đường
Đồ án tốt nghiệp mang tên “Robot vận chuyển mẫu xét nghiệm trong bệnh viện” được thực hiện bởi Đinh Việt Hùng và Đặng Thị Huỳnh Như tại Đại Học Sư Phạm Kỹ Thuật Thành Phố Hồ Chí Minh, nhằm nâng cao hiệu quả vận chuyển mẫu xét nghiệm trong môi trường bệnh viện Dự án này không chỉ cải thiện quy trình làm việc mà còn góp phần tiết kiệm thời gian và giảm thiểu sai sót trong việc xử lý mẫu.
Năm 2019, đề tài đã mô tả quy trình thu thập và xử lý hình ảnh của làn đường trong bệnh viện, cho phép robot hoạt động tự động trong môi trường đã được thiết lập Tuy nhiên, hạn chế của nghiên cứu là robot chỉ có khả năng tự vận hành trong môi trường cố định, không thể hoạt động hiệu quả ở những môi trường khác.
Đồ án tốt nghiệp mang tên “Ứng dụng xử lý ảnh trong chạy theo lane, nhận diện biển báo và áp dụng lên xe tự hành” của Nguyễn Trung Trực và Lê Minh Hùng từ Đại Học Sư Phạm tập trung vào việc phát triển công nghệ xử lý hình ảnh nhằm cải thiện khả năng nhận diện và điều khiển xe tự hành Nghiên cứu này không chỉ ứng dụng trong việc chạy theo làn đường mà còn trong việc nhận diện biển báo giao thông, góp phần nâng cao độ an toàn và hiệu quả cho các phương tiện tự động.
Kỹ Thuật Thành Phố Hồ Chí Minh, 2020 đã ứng dụng công nghệ xử lý ảnh để nhận diện làn đường và biển báo giao thông nhằm điều khiển hoạt động của xe Tuy nhiên, một trong những hạn chế của nghiên cứu là hiện tượng nhiễu trong quá trình xử lý ảnh.
Những vấn đề còn tồn tại dựa trên kết quả nghiên cứu
Mô hình hiện tại chưa đạt được sự ổn định hoàn toàn do các thông số tinh chỉnh phụ thuộc vào khả năng xử lý của hệ thống và điều kiện cơ khí thực tế của mô hình.
- Chưa tích hợp được khả năng định vị vị trí cho mô hình
- Mô hình chưa có khả năng tự động tránh vật cản.
Nhiệm vụ và giới hạn của đề tài
1.6.1 Nhiệm vụ của đề tài
- Tìm hiểu về Python và Open CV ứng dụng trong xử lý ảnh
- Tìm hiểu về Raspberry Pi 3B+ để lắp đặt lên xe mô hình
- Nghiên cứu lý thuyết về các phương pháp xử lý ảnh trong nhận diện lane đường
- Nghiên cứu lý thuyết về mạng tích chập CNN trong Deep Learning để nhận diện biển báo
- Cảnh báo vật cản và định vị vị trí xe mô hình
- So sánh tính hiệu quả của các phương pháp nhận diện biển báo và lane đường để chọn ra phương án phù hợp nhất
- Thực hiện phần cứng mô hình: Khung và thân xe, CPU điều khiển (Raspberry Pi 3B+) để điều khiển động cơ và điều khiển lái cho mô hình xe
- Trình bày Tập “Hướng dẫn sử dụng và lý thuyết mô hình Xe tự hành vận chuyển hàng hóa trong khuôn viên viện”
1.6.2 Giới hạn của đề tài
- Số lượng biển báo nhận diện hiện tại chỉ là 3 biển báo do khả năng xử lý của Raspberry chưa cao
- Mô hình chỉ mới hoạt động được trong môi trường cố định chưa thể tự hành trong môi trường có nhiều sự thay đổi
- Tốc độ của mô hình còn chậm do tốc độ xử lý của Raspberry Pi 3B+ không cao
- Tải trọng mô hình chịu được chưa cao.
Kết cấu đề tài
Đề tài được chia ra thành 6 chương:
- Chương 2: Cơ sở lý thuyết
- Chương 3: Lập trình hệ thống nhận diện lane đường và biển báo
- Chương 4: Xây dựng mô hình phần cứng
- Chương 5: Thực nghiệm và đánh giá
- Chương 6: Kết luận và hướng phát triển
CƠ SỞ LÝ THUYẾT
Xe tự hành
Xe tự hành, hay còn gọi là AGV (Automated Guided Vehicle), là phương tiện di chuyển tự động dùng để vận chuyển hàng hóa giữa các địa điểm mà không cần sự can thiệp của con người Chúng sử dụng các phương pháp di chuyển như dây dẫn hướng, cảm biến tín hiệu điện hoặc cảm biến đọc ánh sáng để định hướng và thực hiện nhiệm vụ.
2.1.2 Các cấp độ xe tự hành
Theo các cơ quan có thẩm quyền tại châu Âu và Mỹ, công nghệ xe tự hành sẽ được phân loại thành 6 cấp độ khác nhau, dựa trên nghiên cứu của Viện Nghiên cứu Đường cao tốc Liên bang Đức.
Cấp độ 0 trong tự hành là giai đoạn mà người lái hoàn toàn chịu trách nhiệm về việc điều khiển xe, bao gồm cả chuyển động ngang và dọc Ở cấp độ này, không có sự hỗ trợ từ công nghệ tự động nào, khiến hầu hết các mẫu xe giá rẻ và xe cũ thuộc về phân khúc này.
- Cấp độ 1: Hỗ trợ người lái
Hệ thống hỗ trợ điều khiển chuyển động ngang và dọc của xe, nhưng người lái vẫn phải chịu trách nhiệm chính Người lái cần luôn sẵn sàng can thiệp và điều khiển xe khi cần thiết.
- Cấp độ 2: Tự hành một phần
Trong nhiều trường hợp chiếc xe có thể tự điều khiển chuyển động ngang và dọc tuy nhiên người lái vẫn phải giám sát và can thiệp mọi lúc.
- Cấp độ 3: Tự hành có điều kiện
Người lái xe không cần phải liên tục giám sát, mà có thể thực hiện các công việc khác nhờ vào hệ thống tự động nhận diện giới hạn vận hành Khi điều kiện không đủ, hệ thống sẽ thông báo để người lái điều khiển xe trở lại Tính năng AI Traffic Jam Pilot là một ví dụ điển hình cho công nghệ này.
- Cấp độ 4: Tự hành cấp cao
Cấp độ này cho phép xe tự lái mà không cần sự can thiệp của người lái, nhưng chỉ hoạt động trong những khu vực nhất định như cao tốc hoặc các khu đô thị với cơ sở hạ tầng đặc biệt Người lái chỉ cần điều khiển xe khi ra khỏi những khu vực này.
- Cấp độ 5: Tự hành hoàn toàn
Chiếc xe sẽ tự động kiểm soát các chuyển động ngang và dọc mà không cần sự can thiệp của người lái Ở cấp độ này, xe không yêu cầu bất kỳ sự hỗ trợ nào từ người lái trong mọi tình huống, do đó không cần trang bị tay lái, chân ga hay chân phanh.
2.1.3 Các ứng dụng của xe tự hành hiện nay
Với sự tiện lợi và tính cơ động của xe tự hành, nên hiện nay nó được sử dụng rộng rãi trên nhiều lĩnh vực:
Quy trình sản xuất ô tô bao gồm nhiều bước quan trọng, từ việc chế tạo khung và nội thất đến lắp ráp động cơ Dây chuyền khung gầm được thiết kế tinh vi, đảm bảo tính chính xác và hiệu quả trong sản xuất Các bộ phận được dàn dựng tiền sản xuất kịp thời, giúp tối ưu hóa quy trình lắp ráp và nâng cao chất lượng sản phẩm cuối cùng.
Thực phẩm và đồ uống đóng vai trò quan trọng trong quá trình sản xuất, giúp cải thiện hiệu quả vận chuyển từ nơi cung cấp đến nơi lưu trữ Việc vận chuyển container thực phẩm và đồ uống được tối ưu hóa thông qua các ứng dụng tích hợp với hệ thống giá đỡ trong các kho hàng cao, đảm bảo sự lưu thông mượt mà và hiệu quả.
Công nghiệp quốc phòng đóng vai trò quan trọng trong việc tích hợp các cơ sở hấp tiệt trùng, nơi các bộ phận được nung nóng đến nhiệt độ cực cao, từ đó nâng cao hiệu quả và tốc độ sản xuất.
Dược phẩm: Vận chuyển pallet thiết bị y tế từ các tế bào khử trùng ở nhiệt độ cao đến kho chứa sóng vô tuyến được xếp chồng sâu, với AGV giao tiếp hiệu quả với Hệ thống lưu trữ và truy xuất tự động.
Vận chuyển hóa chất và các dẫn xuất của chúng là một phần quan trọng trong quá trình pha trộn, đòi hỏi các thùng chứa và lồng được thiết kế đặc biệt Những thùng chứa này giúp bảo đảm an toàn cho chai nhựa trong quy trình sản xuất polyetylen terephthalate.
Giấy & in: Hệ thống điều khiển xe tự hành AGV Max giám sát việc xử lý và vận chuyển các cuộn giấy lớn, bao gồm lưu trữ tại các nhà máy và cơ sở in ấn, đưa cuộn giấy vào kho cao từ các trạm tước, và chuyển trực tiếp vào máy ép.
Thiết bị điện tử đóng vai trò quan trọng trong việc vận chuyển linh kiện và lắp ráp sản phẩm, đảm bảo quá trình sản xuất diễn ra suôn sẻ Việc vận chuyển này cần được thực hiện trong môi trường phòng sạch đạt tiêu chuẩn cao để bảo vệ chất lượng sản phẩm.
Hệ thống AGV Max tự động hóa kho và phân phối, giúp loại bỏ thiệt hại cho giá đỡ bằng cách tự động hóa các nhiệm vụ lặp đi lặp lại Nó có khả năng tích hợp với hệ thống chủ, cung cấp khả năng truy xuất nguồn gốc hàng hóa hiệu quả.
- Công nghiệp: AGV Max đóng vai trò là yếu tố chính trong việc thực hiện các
9 nhiệm vụ lặp đi lặp lại linh hoạt trong môi trường công nghiệp
Phương pháp nhận diện lane đường và biển báo
Machine learning, một lĩnh vực con của Trí tuệ nhân tạo, sử dụng các thuật toán giúp máy tính học hỏi từ dữ liệu Thay vì được lập trình một cách cụ thể, máy tính có khả năng tự học để thực hiện các công việc khác nhau.
Khi kết thúc đào tạo, một hệ thống Machine Learning sẽ có thể đưa ra dự đoán chính xác khi được cung cấp dữ liệu
- Machine Learning làm việc ra sao?
Một chương trình máy tính được coi là học để thực hiện một nhiệm vụ T từ kinh nghiệm E, nếu hiệu suất thực hiện nhiệm vụ T của nó được đánh giá qua chỉ số hiệu suất P và được cải thiện theo thời gian nhờ vào kinh nghiệm E.
Một cỗ máy chơi cờ (nhiệm vụ T) có khả năng học hỏi từ dữ liệu các ván cờ trước đó hoặc từ việc thi đấu với chuyên gia (kinh nghiệm E) Hiệu suất của cỗ máy được đo bằng tỷ lệ số ván thắng khi so tài với con người (hiệu suất P).
- Các ứng dụng của Machine Learning vào đề tài:
Xử lý ảnh là một lĩnh vực quan trọng trong việc phân tích thông tin từ hình ảnh và thực hiện các phép biến đổi cần thiết Các ứng dụng của xử lý ảnh bao gồm nhận diện đối tượng, cải thiện chất lượng hình ảnh và phân tích dữ liệu hình ảnh trong nhiều lĩnh vực khác nhau.
• Gắn thẻ hình ảnh (Image Tagging)
• Nhận dạng ký tự (Optical Character Recognition)
• Ô tô tự lái (Self-driving cars)
Phân tích văn bản là quá trình trích xuất và phân loại thông tin từ các nguồn như bài viết trên Facebook, email, đoạn chat và tài liệu Những ví dụ phổ biến của phân tích văn bản bao gồm việc xử lý nội dung từ mạng xã hội, phân tích dữ liệu từ email và đánh giá thông tin trong các cuộc trò chuyện.
• Phân tích ngữ nghĩa (Sentiment Analysis)
• Khai thác thông tin (Information Extraction)
Khai phá dữ liệu là quá trình tìm kiếm thông tin giá trị và dự đoán từ dữ liệu, trong đó mỗi bản ghi được xem như một đối tượng học và mỗi cột là một đặc trưng Chúng ta có thể dự đoán giá trị của một cột trong bản ghi mới dựa trên các bản ghi đã học hoặc phân nhóm các bản ghi Dưới đây là những ứng dụng của khai phá dữ liệu.
• Phát hiện bất thường (Anomaly detection)
• Phát hiện các quy luật (Association rules)
Deep Learning là một nhánh của Machine Learning, thuộc lĩnh vực trí tuệ nhân tạo, nổi bật với khả năng giải quyết các vấn đề phức tạp mà Machine Learning truyền thống không thể xử lý.
- Deep Learning làm việc ra sao?
Khi dữ liệu của bạn chủ yếu là không có cấu trúc và rất phong phú, các thuật toán Deep Learning có khả năng xử lý những dữ liệu lộn xộn và không có nhãn, như video, hình ảnh, âm thanh và văn bản Chúng có thể tổ chức dữ liệu này một cách hiệu quả để đưa ra những dự đoán hữu ích, xây dựng hệ thống phân cấp các đặc điểm nhận diện cho các đối tượng như chó hoặc mèo từ hình ảnh, hoặc từ âm thanh tạo thành từ ngữ trong lời nói.
2.2.3 Phương pháp nhận diện lane đường
Trong ảnh, cạnh (edge) được định nghĩa là ranh giới (boundary) hoặc đường viền (contour) nơi có sự thay đổi rõ rệt về các khía cạnh vật lý của hình ảnh, như cường độ sáng và bề mặt phản chiếu.
Trong ảnh số, một cạnh (edge) là một tập hợp các pixels mà tại pixel đấy xảy ra một sự thay đổi đột ngột về cường độ sáng
Hình 2.1 Ví dụ về cạnh trong ảnh
Các pixel cạnh là những pixel có cường độ sáng khác biệt rõ rệt so với các pixel xung quanh Đặc biệt, những pixel nằm cạnh đường đỏ thể hiện sự thay đổi đột ngột về độ sáng, từ 0 đến 255 và ngược lại Những pixel này được gọi là cạnh (Edge).
Hình 2.2 Ví dụ về cạnh trong ảnh
Edge Detection là kỹ thuật xử lý ảnh giúp xác định viền của các đối tượng trong hình ảnh Quá trình này tập trung vào việc phát hiện những khu vực có sự thay đổi đột ngột về độ sáng, từ đó phân vùng ảnh và trích xuất thông tin cần thiết Kỹ thuật này đóng vai trò quan trọng trong các ứng dụng của Thị giác máy và Học máy, hỗ trợ giải quyết nhiều bài toán phức tạp trong lĩnh vực này.
- Phương pháp tìm cạnh – bộ lọc Canny
Bộ lọc Canny là một phương pháp hiệu quả để phát hiện và tối ưu hóa đường biên trong hình ảnh, tạo ra các đường biên mảnh và chính xác Quá trình này bao gồm bốn bước chính để tìm kiếm và xác định biên một cách tối ưu.
Để loại bỏ nhiễu trong ảnh, người ta sử dụng bộ lọc Gauss nhằm làm mờ ảnh Cụ thể, có thể áp dụng bộ lọc Gauss 5x5 với hệ số δ = 1.4 để đạt được hiệu quả tối ưu.
+ Bước 2: Tính toán giá trị Gradien trong ảnh
Đường biên trong ảnh đóng vai trò là ranh giới phân cách giữa các đối tượng khác nhau, do đó gradien tại đây sẽ có sự biến đổi mạnh mẽ nhất Để tính toán gradien trong ảnh, có thể áp dụng bộ lọc Sobel hoặc thực hiện nhân chập ma trận ảnh với các mặt nạ theo hướng x và y.
Sau đó tính độ lớn gradien trong ảnh: 𝐺 = √𝐺 𝑥 2 − 𝐺 𝑦 2 𝑣à 𝜃 = 𝑎𝑟𝑐𝑡𝑎𝑛 ( 𝐺 𝑦
Đạo hàm theo hướng x và y của ảnh được ký hiệu là Gx và Gy Góc θ sẽ được làm tròn theo các hướng thẳng đứng, nằm ngang và chéo, với các giá trị nhận được là 0, 45, 90 và 135 độ.
Phần mềm mô hình xe
Python là một ngôn ngữ lập trình mạnh mẽ, hướng đối tượng, được phát triển bởi Guido van Rossum Ngôn ngữ này hỗ trợ kiểu dữ liệu động và có cơ chế cấp phát bộ nhớ tự động Với cấu trúc dữ liệu cao cấp và phương pháp lập trình đơn giản nhưng hiệu quả, Python là lựa chọn lý tưởng cho lập trình viên.
- Tính năng chính của Python
+ Ngôn ngữ lập trình đơn giản, dễ học
+ Miễn phí, mã nguồn mở
+ Khả năng mở rộng và có thể nhúng
+ Ngôn ngữ thông dịch cấp cao
+ Thư viện tiêu chuẩn lớn để giải quyết những tác vụ phổ biến
Visual Studio Code (VS Code) là một trình soạn thảo mã nguồn mở, nhẹ nhàng nhưng mạnh mẽ, hỗ trợ trên cả ba nền tảng Windows, Linux và macOS.
Microsoft phát triển một nền tảng hỗ trợ JavaScript, Node.js và TypeScript, đồng thời cung cấp một hệ sinh thái phong phú cho nhiều ngôn ngữ lập trình khác.
- Tính năng chính của Visual Studio Code
+ Hoạt động đa nền tảng
+ Đơn giản trong việc chỉnh sửa, xây dựng và gỡ lỗi
+ Hệ thống phím tắt sinh động
+ Sự hỗ trợ của cộng đồng GitHub
+ Kiến trúc cực mạnh mẽ và có thể mở rộng
Package trong Python là một thư mục chứa nhiều modules hoặc các package khác, được thiết kế để phân bố các modules có cùng chức năng, nhằm mục đích quản lý mã nguồn một cách hiệu quả hơn.
Để tạo một package trong Python, bạn chỉ cần tạo một thư mục với tên tương ứng với tên của package Trong thư mục này, bắt buộc phải có một file có tên init .py, file này hoạt động như một constructor và sẽ được gọi đầu tiên khi bạn import package.
VD: Đầu tiên tạo một thư mục mới có cấu trúc như sau:
Mở file init .pyra và viết đoạn code sau vào:
Tiếp đó, ở filemain.py import package demopackage vào như sau:
Sau đó các bạn chạy filemain.py, sẽ thu được kết quả như sau:
Hình 2.73 Tạo ra một Package trong Python
- Import package: Để import các package, sử dụng cú pháp giống như đối với modules Nhưng bây giờ sẽ gọi từ package thành module
VD: Trong thư mục demopackage ở ví dụ trên, tạo file module.py
Và ở trong filemodules.py tạo 2 hàm như sau:
Lúc này khi muốn importmodules.py vàomain.pythì sẽ gọi như sau: hoặc hoặc
Hình 2.74 Import Package trong Python
Trong Python, một package có thể chứa một hoặc nhiều package khác mà không bị giới hạn số lượng Tuy nhiên, để đảm bảo tính hợp lệ của package, mỗi package phải có file init .py Điều này có nghĩa là package A có thể chứa package B, và package B lại có thể chứa package C, và cứ như vậy.
VD: Cũng với thư mục trong VD ở phần 3 mình sẽ tạo thêm 1 package con nằm trong demopackage có tên là packagechild chứa 2 file childmodule.py và init .py:
Cấu trúc thư mục: file childmodules.py: file init .py:
Lúc này ở file main.py các bạn chỉ cần import theo đúng cấp package
OpenCV, short for Open Source Computer Vision Library, is a leading open-source library for Computer Vision and Machine Learning It now includes GPU acceleration features for real-time operations.
Nó có trên các giao diện C++, C, Python và Java và hỗ trợ Windows, Linux, Mac
OpenCV là thư viện được tối ưu hóa cho các hệ điều hành như iOS và Android, chuyên hỗ trợ các ứng dụng thời gian thực Khi được lập trình bằng C/C++, OpenCV có khả năng tận dụng hiệu quả bộ xử lý đa lõi, giúp nâng cao hiệu suất tính toán.
- Tính năng và các module phổ biến của OpenCV
Theo tính năng và ứng dụng của OpenCV, có thể chia thư viện này thánh các nhóm tính năng và module tương ứng như sau:
• Xử lý và hiển thị Hình ảnh/ Video/ I/O (core, imgproc, highgui)
• Phát hiện các vật thể (objdetect, features2d, nonfree)
• Geometry-based monocular hoặc stereo computer vision (calib3d, stitching, videostab)
• Computational photography (photo, video, superres)
• Machine learning & clustering (ml, flann)
OpenCV có cấu trúc module, bao gồm các thư viện liên kết tĩnh và động Dưới đây là một số định nghĩa chi tiết về các module phổ biến trong OpenCV.
Chức năng cốt lõi (core) là một mô-đun nhỏ gọn giúp xác định cấu trúc dữ liệu cơ bản, bao gồm mảng đa chiều dày đặc và nhiều chức năng cơ bản cần thiết cho tất cả các mô-đun khác.
Module xử lý hình ảnh (imgproc) bao gồm các kỹ thuật lọc hình ảnh tuyến tính và phi tuyến, phép biến đổi hình học như chỉnh kích thước, biến đổi affine và phối cảnh, cũng như ánh xạ lại dựa trên bảng chung Ngoài ra, module còn hỗ trợ chuyển đổi không gian màu, quản lý biểu đồ và nhiều tính năng khác.
• Video Analysis (video) – module phân tích video bao gồm các tính năng ước tính chuyển động, tách nền, và các thuật toán theo dõi vật thể
Camera calibration and 3D reconstruction (calib3d) involve fundamental geometric algorithms for single and stereo camera calibration, enabling accurate object pose estimation These techniques utilize stereo correspondence algorithms and various factors essential for effective 3D reconstruction.
• 2D Features Framework (features2d) – phát hiện các đặc tính nổi bật của bộ nhận diện, bộ truy xuất thông số, thông số đối chọi
• Object Detection (objdetect) – phát hiện các đối tượng và mô phỏng của các hàm được định nghĩa sẵn – predefined classes (vd: khuôn mặt, mắt, cốc, con người, xe hơi,…)
• High-level GUI (highgui) – giao diện dễ dùng để thực hiện việc giao tiếp UI đơn giản
• Video I/O (videoio) – giao diện dễ dùng để thu và mã hóa video
• GPU – Các thuật toán tăng tốc GPU từ các modun OpenCV khác
• Và một số module hỗ trợ khác, ví dụ như FLANN và Google test wrapper, Python binding, v.v
TensorFlow là thư viện mã nguồn mở hàng đầu cho machine learning, được phát triển bởi các nhà nghiên cứu của Google Thư viện này cung cấp hỗ trợ mạnh mẽ cho các phép toán trong machine learning và deep learning, giúp đơn giản hóa và tăng tốc quá trình giải quyết các bài toán phức tạp.
TensorFlow cung cấp các hàm dựng sẵn cho phép xây dựng nhiều mạng nơ-ron và thực hiện tính toán song song trên nhiều máy tính, bao gồm cả nhiều CPU và GPU trên cùng một máy Ngoài ra, nó còn hỗ trợ tạo ra các đồ thị luồng dữ liệu để xây dựng mô hình Được phát triển bằng C++ và sử dụng Python cho giao diện, hiệu suất của TensorFlow rất ấn tượng Đối tượng sử dụng TensorFlow rất đa dạng, từ các nhà nghiên cứu và nhà khoa học dữ liệu đến lập trình viên.
TensorFlow là một công cụ mạnh mẽ cho phép lập trình viên xây dựng đồ thị dữ liệu (dataflow graph), mô tả cách dữ liệu di chuyển qua các node trong một biểu đồ Mỗi node trong đồ thị đại diện cho một phép toán, trong khi các kết nối giữa các node, gọi là edge, thể hiện các mảng dữ liệu đa chiều, hay còn gọi là 'tensor'.
Phần cứng mô hình xe
Pi là một máy vi tính nhỏ gọn, với kích thước tương đương một thẻ ATM Nó được tích hợp đầy đủ các thành phần cần thiết, cho phép người dùng sử dụng như một máy vi tính thông thường.
Bo mạch của Raspberry Pi bao gồm CPU, GPU, RAM, khe cắm thẻ microSD, Wi-Fi, Bluetooth và 4 cổng USB 2.0 Để bắt đầu sử dụng, bạn chỉ cần cài đặt hệ điều hành bằng cách sao chép thư mục vào thẻ nhớ, sau đó kết nối chuột, bàn phím và màn hình Ngoài ra, bạn có thể sử dụng remote desktop hoặc SSH từ một máy khác để điều khiển Pi một cách tiện lợi hơn.
Hình 2.76 Module Camera Raspberry Pi
+ Ống kính : f = 3,57 mm, f / 2.8 + Góc nhìn : 65 độ
+ Phạm vi lấy nét : 0,69m đến vô cực (ở mức 1,38m)
+ Hỗ trợ: 1080p @30 khung hình / giây, 720p@60fps và 640x480p @ 60/90 khung hình/ giây
+ Giao diện: CSI + Kích thước: 25 mm x 25 mm x 10 mm (0,98 "x 0,98" x 0,39 ")
VCC: 3.3–5V, GND: nối đất, TX: chân truyền dữ liệu, RX: chân truyền dữ liệu
+ Mạch định vị GPS GY-NEO 6M, nguồn cung cấp 3V-5V + Mẫu: GY-GPS6MV2
+ Mô-đun với ăng-ten bằng sứ, tín hiệu mạnh + EEPROM power-down lưu dữ liệu tham số cấu hình + Với pin dự phòng dữ liệu
+ Chỉ báo tín hiệu LED + Kích thước ăng ten 12*12mm + Kích thước module 23mm*30mm + Lắp đặt khẩu độ 3mm
+ Tốc độ baud mặc định: 9600
+ Tương thích với nhiều module điều khiển chuyến bay, cung cấp kiểm tra máy tính GPS
2.4.2 Cảm biến siêu âm HC-SR04
Hình 2.78 Cảm biến siêu âm
VCC (5V), trig (chân điều khiển phát), echo (chân nhận tín hiệu phản hồi), GND (nối đất)
Cảm biến siêu âm SR04 hoạt động dựa trên nguyên lý phản xạ sóng siêu âm, bao gồm hai module: một module phát sóng siêu âm và một module thu sóng phản xạ Khi cảm biến phát ra sóng siêu âm với tần số 40kHz, nếu có chướng ngại vật, sóng sẽ phản xạ trở lại và được module thu nhận Thời gian từ khi phát đến khi nhận sóng được sử dụng để tính khoảng cách từ cảm biến đến chướng ngại vật.
+ Điện áp: 5V DC + Dòng hoạt động: < 2mA + Mức cao: 5V
+ Mức thấp: 0V + Góc tối đa: 15 độ + Khoảng cách: 2cm – 450cm (4.5m) + Độ chính xác: 3mm
+ Điện áp cấp cho động cơ hoạt động : 3 - 12VDC + Điện áp cấp cho Encoder hoạt động: 3.3VDC + Đĩa Encoder 11 xung, hai kênh A-B
+ Tỷ số truyền khi qua hộp giảm tốc: 1:34 + Số xung khi qua hộp giảm tốc: 374 xung
+ Đường kính động cơ: 25mm, đường kính trục : 4mm + Tốc độ không tải : 320 rpm
Động cơ có dòng không tải 80mA và tốc độ 284 rpm khi có tải Khi hoạt động với tải, dòng điện đạt 600mA, tạo ra mô men 1.88 kgf.cm và công suất định mức 13.2W Trong trường hợp động cơ bị giữ, dòng điện tăng lên 2.29A và mô men đạt 7.96 kgf.cm.
IC L298 là một IC tích hợp nguyên khối gồm 2 mạch cầu H bên trong
Tóm tắt qua chức năng các chân của L298:
• 4 chân INPUT: IN1, IN2, IN3, IN4 được nối lần lượt với các chân 5,
7, 10, 12 của L298 Đây là các chân nhận tín hiệu điều khiển
• 4 chân OUTPUT: OUT1, OUT2, OUT3, OUT4 (tương ứng với các chân INPUT) được nối với các chân 2, 3, 13, 14 của L298 Các chân này sẽ được nối với động cơ
Hai chân ENA và ENB được sử dụng để điều khiển các mạch cầu H trong L298 Khi ở mức logic “1” (kết nối với nguồn 5V), mạch cầu H sẽ hoạt động, trong khi ở mức logic “0”, mạch cầu H sẽ không hoạt động.
• Điều khiển chiều quay với L298:
Khi ENA = 0: Động cơ không quay với mọi đầu vào
+ INT1 = 1; INT2 = 0: động cơ quay thuân
+ INT1 = 0; INT2 = 1: động cơ quay nghịch
+ INT1 = INT2: động cơ dừng ngay tức thì
(tương tự với các chân ENB, INT3, INT4)
Sơ đồ nguyên lý hoạt động:
Hình 2.81 Sơ đồ nguyên lý hoạt động của mạch cầu IC L298
Động cơ Servo là thành phần quan trọng trong hệ thống vòng kín, bao gồm mạch điều khiển, động cơ Servo, trục, chiết áp, bánh răng truyền động, bộ khuếch đại và bộ mã hóa hoặc bộ phân giải Thiết bị này hoạt động độc lập, cho phép quay các bộ phận máy với hiệu suất và độ chính xác cao.
Động cơ này có khả năng di chuyển đầu ra đến một góc hoặc vị trí cụ thể với vận tốc được chỉ định trước, điều mà động cơ thông thường không thể thực hiện.
Nguyên lý hoạt động của động cơ Servo DC dựa trên bốn thành phần chính: động cơ DC, thiết bị cảm biến vị trí, cụm bánh răng và mạch điều khiển Tốc độ động cơ DC phụ thuộc vào điện áp sử dụng, với chiết áp được dùng để tạo ra điện áp đầu vào cho bộ khuếch đại Độ dài xung quyết định điện áp tại bộ khuếch đại, giúp đạt được tốc độ hoặc vị trí mong muốn Cảm biến phản hồi, thường là chiết áp, tạo ra điện áp tương ứng với góc của trục động cơ thông qua bánh răng Giá trị điện áp phản hồi được so sánh với vị trí mong muốn, tạo ra sai số điện áp dương hoặc âm Sai số này điều chỉnh điện áp áp dụng cho phần ứng động cơ; khi sai số tăng, điện áp đầu ra cũng tăng, khiến động cơ quay cho đến khi sai số bằng không Nếu sai số âm xuất hiện, điện áp phần ứng sẽ đảo chiều, làm cho động cơ quay ngược lại.
Pin Lipo, viết tắt của Lithium Polymer, là loại pin sạc sử dụng chất điện phân polymer khô, đóng vai trò quan trọng trong sự phát triển nhanh chóng của mô hình điện Một trong những loại pin phổ biến là pin 3 cell (3S) với điện áp 11,1V.
Mạch Giảm Áp DC LM2596 3A sử dụng IC giảm áp LM2596, nhận điện áp đầu vào từ 3.0 đến 40V và cho phép điều chỉnh điện áp đầu ra từ 1.5V đến 35V Với dòng điện đầu ra tối đa 3A và dòng làm việc bình thường 2A, mạch này tích hợp bộ dao động nội 150 kHz, giúp tăng hiệu suất chuyển đổi Mạch thường được ứng dụng trong các board mạch nuôi nguồn và mạch điều khiển trong lĩnh vực DC dân dụng và công nghiệp.
Hình 2.84 Sơ đồ kết nối Mạch Giảm Áp DC LM2596 3A
Thông Số Kĩ Thuật + Điện áp đầu vào: Từ 3V đến 30V
+ Điện áp đầu ra: Điều chỉnh được trong khoảng 1.5V đến 30V
+ Dòng đáp ứng tối đa là 3A
+ Công suất: 15W + Kích thước: 45 (dài) * 20 (rộng) * 14 (cao)mm
+ Chip điều khiển chính: ATmega328P + Chip nạp và giao tiếp UART: ATmega16U2 + Nguồn nuôi mạch: 5VDC
+ Số chân Digital I/O: 14 (trong đó 6 chân xuất xung PWM) + Số chân PWM Digital I/O: 6
+ Số chân Analog Input: 6 + Dòng điện DC Current trên mỗi chân I/O: 20 mA + Dòng điện DC Current chân 3.3V: 50 mA
+ Flash Memory: 32 KB (ATmega328P), 0.5 KB dùng cho bootloader
+ SRAM: 2 KB (ATmega328P) + EEPROM: 1 KB (ATmega328P) + Clock Speed: 16 MHz
+ LED_BUILTIN: 13 + Kích thước: 68.6 x 53.4 mm
XÂY DỰNG PHẦN CỨNG MÔ HÌNH XE
Thiết kế khung mô hình xe
Hình 3.1 Thùng xe mô hình
Hình 3.2 Bảng vẽ thùng xe mô hình
Hình 3.3 Bảng vẽ thùng xe mô hình
Hình 3.4 Thân xe mô hình
Hình 3.5 Bảng vẽ thân xe mô hình
- Các chi tiết phụ trên xe
Hình 3.6 Lò xo mô hình
Hình 3.7 Bảng vẽ lò xo mô hình
Hình 3.8 Bánh xe mô hình
Hình 3.9 Bảng vẽ bánh xe mô hình
Hình 3.10 Càng chữ A mô hình
Hình 3.11 Bảng vẽ càng chữ A mô hình
Hình 3.12 Càng chữ A mô hình
Hình 3.13 Bảng vẽ càng chữ A mô hình
Hình 3.14 Hộp vi sai mô hình
Hình 3.15 Bảng vẽ hộp vi sai mô hình.
Lắp ráp mô hình xe
Cấu tạo mô hình gồm 2 phần chính:
- Phần hệ thống treo, lái và truyền động
- Phần hệ thống nhận diện và điều khiển
3.2.1 Lắp ráp hệ thống treo, lái và truyền động
Lắp ráp 2 cầu xe, khung xe, bánh xe, motor và servo lại với nhau
Hình 3.16 Lắp ráp cầu xe
3.2.2 Lắp ráp hệ thống nhận diện và điều khiển
Hình 3.17 Sơ đồ mạch điều khiển xe
Hình 3.18 Sơ đồ mạch nguồn của xe
Hình 3.19 Sơ đồ chân Raspberry Pi 3B+
Bảng 3.1 Thứ tự kết nối các chân của mạch điện
Cảm biến siêu âm đo khoảng cách
Hình 3.23 Cảm biến siêu âm đo khoảng cách
GPS phát hiện vị trí
Hình 3.24 GPS phát hiện vị trí
Hình 3.25 Mô hình xe hoàn chỉnh
Thiết kế biển báo và sân
Hình 3.26 Thiết kế biển báo và sân
LẬP TRÌNH HỆ THỐNG NHẬN DIỆN LANE ĐƯỜNG VÀ BIỂN BÁO
Thiết lập môi trường
4.1.1 Thiết lập VNC điều khiển Raspberry Pi qua laptop
Truy cập link sau để tải bản mới nhất và cài đặt trên máy tính: https://www.realvnc.com/en/connect/download/viewer/raspberrypi/
Sau đó bạn mở VNC Viewer trên máy Để thêm thiết bị kết nối, làm như sau: Bước 1: File > New Connection…
Bước 2: Trong VNC Server gõ vào IP của Raspberry Pi
Bước 4: Hiện ra hình máy tính mới Bấm vào Nó báo điền tên đăng nhập và pass của Pi Mặc định là: User: pi – Password: raspberry
Bước 5: Cảnh báo truy cập lần đầu tiên Bấm “Continue”
4.1.2 Thiết lập môi trường ảo cho Raspberry Pi Để sử dụng được Virtual Environment thì phải cài virtualenv
Sử dụng lệnh $ virtualenv [project_name] để tạo ra một thư mục mang tên [project_name], trong đó chứa tất cả các thành phần cần thiết cho dự án Hãy kiểm tra nội dung bên trong thư mục này để hiểu rõ hơn.
Nếu trên server có nhiều phiên bản Python (2.x, 3.x) bạn hoàn toàn có thể khởi tạo Virtual Environment với một phiên bản chỉ định: virtualenv -p /usr/bin/python2.7 [project_name]
Hoặc bạn có thể tạo một Virtual Environment mà không có các packages đã được cài đặt sẵn (trong trường hợp bạn muốn làm mọi thứ từ đầu:
88 virtualenv no-site-packages [project_name]
Khởi động Virtual Environment bằng câu lệnh:
$ source [project_name]/bin/activate
Tên của Virtual Environment sẽ hiển thị ở đầu command prompt, cho thấy rằng Python đang sử dụng Virtual Environment Từ thời điểm này, tất cả các gói (packages) được cài đặt mới sẽ được lưu trữ trong thư mục [project_name].
- Tìm hiểu về pyenv để thiết lập môi trường ảo nhanh chóng
Pyenv là công cụ giúp bạn dễ dàng thiết lập và quản lý các môi trường ảo cũng như các phiên bản Python khác nhau Nếu bạn đã quen thuộc với rbenv trong Ruby, thì pyenv được phát triển từ rbenv, mang lại sự tiện lợi tương tự cho người dùng Python.
Sau đây là các bước để cài đặt và sử dụng rbenv
Di chuyển đến vị trí muốn cài pyenv: thông thường $HOME/.pyenv
$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv
Xác định biến môi trường Pyenv_root
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
Add pyenv init vào shell
$ echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
Cài môi trường phiên bản python bạn muốn sử dụng.VD 2.7.8
Bạn có thể cài nhiều phiên bản python Set 1 phiên bản mặc định pyenv global 2.7.8
Hoặc cục bộ ở 1 thư mục pyenv local 3.4.3
Hình 4.1 Code flow thuật toán điều khiển động cơ và đánh lái
3 Đặt tốc độ xe bằng 65
4 Mode của phương pháp nhận diện biển báo
5 Khoảng cách lớn nhất xe sẽ đánh lái nếu khoảng lệch lớn hơn khoảng cách này
10 Điều kiện có biển báo hay chưa và mode có bằng Detection hay không và mode trước đó có là Tracking hay không
11 Biển báo tốc độ có phải là biển báo 70 hay không
12 Biển báo tốc độ có phải là biển báo 80 hay không
14 Xét giá trị tuyệt đối của khoảng cách có lớn hơn giá trị cực đại cho trước hay không
15 Xét giá trị của khoảng cách có lớn hơn giá trị cực đại cho trước hay không
16 Xét góc lái lý thuyết của xe có có lớn hơn góc cho trước hay không
17 Xét góc lái thực tế có nhỏ hơn 55 hay không
18 Xét góc lái thực tế có lớn hơn 95 hay không
19 Đặt biến tốc độ bằng 70
20 Đặt biến tốc độ bằng 80
21 Đặt biến tốc độ bằng 0
22 Nội suy tuyến tính góc lái
23 Góc lái cực đại + Góc cua của đường
24 Đổi dấu góc lái cực đại + Góc cua của đường
25 Đặt góc lái lý thuyết lại thành góc lái cực đại cho trước
26 Đặt góc lái lý thuyết lại thành (-) góc lái cực đại cho trước
27 Nội suy tuyến tính góc lái thành tốc độ xe
28 Nội suy góc lái trái
29 Nội suy góc lái phải
30 Nhãn của biển báo nhận diện
31 Kiểm tra xe góc lái có lớn hơn giá trị thực tế đạt được của xe không
32 Đánh dấu sau để sử dụng tiếp cho đoạn sau
+ Nhận diện biển báo 70 thì tăng công suất motor lên 70%
+ Nhận diện biển báo 80 thì tăng công suất motor lên 80%
+ Nhận diện biển báo Stop thì dừng xe
Khi góc lái vượt quá khả năng bẻ lái của xe, hãy tăng tốc độ để ôm cua nhanh hơn Đầu tiên, thiết lập biến tốc độ xe Car_Speed = 65 Nếu nhận được biển báo tốc độ 70, hãy điều chỉnh lại Car_Speed Tương tự, nếu nhận được biển báo 80, cũng cần cập nhật Car_Speed.
Biến Max_Sane_dist được sử dụng để xác định khi nào xe cần đánh lái Nếu độ lệch Distance lớn hơn Max_Sane_dist, xe sẽ bắt đầu đánh lái; ngược lại, nếu độ lệch nhỏ hơn, xe sẽ tiếp tục chạy thẳng Đầu vào gồm Max_Sane_dist và Distance, và quyết định dựa trên giá trị tuyệt đối của chúng.
Nếu Max_Sane_dist lớn hơn Distance, nghĩa là góc đánh lái cần thiết sẽ là bên phải Ta sẽ tính toán góc đánh lái bằng công thức Car_turn_angle = Max_turn_angle + Curvature, trong đó Max_turn_angle là giá trị góc đánh lái cực đại đã được xác định trước, và Curvature là góc lệch của xe so với làn đường.
> Distance là sai thì có nghĩa là góc đánh lái trái ta chỉ cần đặt thêm dấu trừ phía trước Car_turn_angle
Nếu |Max_Sane_dist| lớn hơn Distance, thì ta điều chỉnh khoảng lệch của xe so với làn đường thành góc lái bằng cách sử dụng khối Translate Distance 2 turn Req Sau đó, cộng góc này với Curvature để tính toán góc đánh lái của xe.
Nếu Car_turn_angle lớn hơn Max_turn_angle, ta sẽ điều chỉnh Car_turn_angle về giá trị Max_turn_angle và xuất ra Angle, là góc lái truyền cho xe Ngược lại, nếu Car_turn_angle nhỏ hơn hoặc bằng Max_turn_angle, ta sẽ thiết lập Car_turn_angle thành -Max_turn_angle để chuyển đổi thành góc lái Angle.
Nếu góc lái (Angle) lớn hơn giá trị tối đa mà xe có thể đạt được, ta cần xem xét trường hợp khi Angle nhỏ hơn 55, tức là đánh lái sang trái Trong trường hợp này, ta sẽ nội suy tuyến tính giữa góc lái từ 30 đến 55, tương ứng với tốc độ từ 100 đến 80.
Để đạt được vị trí mong muốn khi góc lái bên phải là 95 độ, chúng ta sẽ thực hiện nội suy tuyến tính giữa góc lái [95,120] và tốc độ [80,100] Mục đích là nếu góc lái trái hoặc phải không đủ đáp ứng góc lái lý thuyết, chúng ta sẽ tăng tốc độ xe để nhanh chóng đạt được vị trí cần thiết.
Còn nếu Angle không lớn hơn khả năng của xe thì ta chỉ việc xuất Angle ra cho xe đánh lái theo Angle
Bảng 4.1 Thành phần Code flow thuật toán điều khiển động cơ và đánh lái
Lập trình điều khiển
Mục tiêu điều khiển là sử dụng các thông số thu được từ quá trình nhận diện thông qua xử lý ảnh để điều khiển xe mô hình tự động di chuyển trên đường cố định.
Khoảng cách giữa xe và điểm giữa làn đường, cùng với góc lệch của làn đường so với phương thẳng đứng, hình ảnh từ camera và loại biển báo mà hệ thống nhận diện đều là những yếu tố quan trọng trong việc đảm bảo an toàn giao thông.
Output: Tốc độ xe theo biển báo, tốc độ xe theo góc đánh lái, góc đánh lái
4.2.1 Điều khiển Motor Định nghĩa các hàm điều khiển
Hình 4.3 Định nghĩa các hàm điều khiển
Thay đổi tốc độ xe theo biển báo
Hình 4.4 Thay đổi tốc độ xe theo biển báo
Thay đổi tốc độ theo góc đánh lái
Hình 4.5 Thay đổi tốc độ xe theo góc đánh lái
4.2.2 Điều khiển Servo lái Điểu khiển góc lái theo độ lệch giữa phương xe với phương lane đường và góc lệch giữa phương lane đường với phương thẳng đứng
Hình 4.6 Điều khiển Servo lái
96 Đánh lái xe và trả về góc đánh lái và vận tốc xe hiện tại
Hình 4.7 Đánh lái và trả về góc đánh lái Định nghĩa hàm lái và hiển thị lên màng hình
Hình 4.8 Định nghĩa hàm đánh lái và hiển thị lên màng hình.
Tiến hành chạy code trên raspberry pi
Hình 4.9 Code flow tổng thể
2 Biến khoảng lệch của xe
4 Mode của phương pháp nhận diện biển báo
7 Khối thực hiện tính toán ra thành góc lái và tốc độ xe
Từ các yếu tố như Distance, Curvature, Mode, Tracked Class và Frame_disp trong khối Drive_Car, chúng ta có thể xác định góc đánh lái của Servo và tốc độ của xe, từ đó điều khiển mô hình di chuyển theo đúng làn đường.
Bảng 4.2 Code flow tổng thể
Kết nối Raspberry với màng hình, bàn phím và chuột
Kích hoạt VNC cho raspberry
Hình 4.11 Kích hoạt VNC cho raspberry
Tra IP của Raspberry Pi bằng lệnh ifconfig trên terminal
Hình 4.13 Tra IP của Raspberry Pi
Dùng laptop kết nối với Raspberry Pi bằng VNC qua IP
Hình 4.14 Dùng laptop kết nối với Raspberry Pi bằng VNC qua IP
Kết nối thành công giờ ta có thể thao tác trên Raspberry Pi bằng laptop thông qua VNC
Hình 4.15 Dùng laptop kết nối với Raspberry Pi bằng VNC qua IP
Download file source code về sau đó mở file ra tìm đến file SelfDrive.py
Hình 4.16 Download file source code và tìm file SelfDrive.py
Mở file lên và chạy bằng Thonny IDE
Hình 4.17 Mở file lên và chạy bằng Thonny IDE
Hoặc ta có thể chạy file code chính bằng Terminal như sau
- Mở Folder chứa file code chính trong Terminal
Hình 4.18 Mở Folder chứa file code chính trong Terminal
- Khởi động môi trường ảo trên Python bằng lệnh source sdc_env/bin/activate
Hình 4.19 Khởi động môi trường ảo trên Python
- Chạy lệnh python SelfDrive.py
Hình 4.20 Chạy lệnh python SelfDrive.py
Hình 4.21 Hình ảnh mà Camera của Raspberry Pi nhận được
Hình ảnh hiển thị trên màn hình là dữ liệu từ Camera của Raspberry Pi Sau khi mã nguồn đã chạy thành công trên Raspberry, bước tiếp theo là lắp ráp mô hình hoàn chỉnh lên xe Cuối cùng, xe sẽ được thử nghiệm trong môi trường thực tế và thực hiện tinh chỉnh các thông số cần thiết.
THỰC NGHIỆM VÀ ĐÁNH GIÁ MÔ HÌNH XE
Kết quả thực nghiệm mô hình xe
5.1.1 Thực nghiệm nhận diện lane đường
Hình 5.1 Thử nghiệm nhận diện lane đường
Thử nghiệm trên đoạn đường ngắn
Hình 5.2 Thử nghiệm nhận diện lane đường
5.1.2 Thực nghiệm nhận diện biển báo
Biển báo tốc độ 70 km/h
Hình 5.3 Thử nghiệm nhận diện biển báo
Biển báo tốc độ 80 km/h
Hình 5.4 Thử nghiệm nhận diện biển báo
Hình 5.5 Thử nghiệm nhận diện biển báo
Chạy trên đường bình thường
+ Lấy hàng ( Góc đánh lái phải)
Hình 5.6 Thử nghiệm thực tế
Hình 5.7 Thử nghiệm thực tế
Hình 5.8 Thử nghiệm thực tế
+ Mang hàng về (Góc đánh lái trái)
Hình 5.9 Thử nghiệm thực tế
Hình 5.10 Thử nghiệm thực tế
Hình 5.11 Thử nghiệm thực tế
Hình 5.12 Thử nghiệm thực tế
Dừng tránh vật cản xuất hiện trện đường
Hình 5.13 Thử nghiệm thực tế
Chạy tiếp sau khi không còn vật cản
Hình 5.14 Thử nghiệm thực tế
Nhận diện biển báo Stop
Hình 5.15 Thử nghiệm thực tế
Hình 5.16 Thử nghiệm thực tế
Dừng xe sau khi nhận diện được biển báo Stop
Hình 5.17 Thử nghiệm thực tế.
Đánh giá mô hình xe
Mô hình đã trải qua quá trình thử nghiệm và thực nghiệm trong môi trường thực tế, cho thấy khả năng tự di chuyển hiệu quả từ một địa điểm này đến địa điểm khác, đồng thời nhận diện chính xác làn đường và biển báo.
• Tốc độ tối đa: 2km/h
• Khối lượng vận chuyển tối đa: 5kg
• Góc đánh lái tối đa: 30 độ
• Đường kính góc ôm cua tối thiểu: 1m
• Khoảng cách tránh vật cản: 0,5m
• Nhận tọa dộ vị trí: ngoài trời
• Khả năng tránh va chạm: có
• Cảnh báo va chạm: có
Nhược điểm cần cải tiến:
• Xe cần phải hoạt động trong môi trường cố định đã được thiết kế sẵn và nhằm đảm bảo hiệu quả nhận diện xử lý của xe
• Trong phòng kín không nhận được vị trí
• Có khả năng tránh va chạm nhưng chưa có khả năng tự né vật cản và đi tiếp, chỉ đi tiếp được khi vật cản đã rời đi