Mục tiêu chính của nghiên cứu là nghiên cứu, thiết kế và thử nghiệm một hệ thống xe tự hành có khả năng tự định hình, tự động lái và tương tác an toàn với môi trường xung quanh.. Nghiên
TỔNG QUAN VỀ ĐỀ TÀI
Lý do chọn đề tài
Trong những năm gần đây, ngành công nghiệp ô tô đã có nhiều biến chuyển với sự xuất hiện của các xu hướng mới, nổi bật là xe tự hành Bằng việc được trang bị những tính năng ưu việt và bộ xử lý thông minh, xe tự hành có khả năng "cảm nhận" môi trường xung quanh và tự vận hành mà ít phải phụ thuộc vào sự can thiệp của con người Và để bắt kịp xu hướng toàn cầu, nền công nghiệp ô tô ở Việt Nam cũng đang nỗ lực nghiên cứu, áp dụng các công nghệ và thiết bị hiện đại
Hiện nay, khi mà thế giới bước vào cuộc cách mạng công nghiệp lần thứ 4, các công nghệ robot ngày càng được tích hợp rộng rãi trong nhiều lĩnh vực, và trong trường hợp của xe tự hành, sự kết hợp của các mô hình tiên tiến như điện toán biên, Internet of Things (IoT), và đặc biệt là Trí tuệ Nhân tạo (AI) đã mở ra nhiều khả năng mới Xe tự hành không chỉ thu thập dữ liệu từ cảm biến mà còn có khả năng quan sát, học hỏi từ kinh nghiệm và đưa ra quyết định tự động khi tham gia giao thông Ứng dụng của xe tự hành không chỉ giải quyết vấn đề tai nạn giao thông mà còn mang lại nhiều lợi ích khác Dự kiến số lượng tai nạn giao thông sẽ giảm đến 90% khi thay thế lái xe bằng xe tự hành Đồng thời, sự phát triển của xe điện kết hợp với tính năng tự hành sẽ cải thiện môi trường và giảm tắc nghẽn giao thông, tiết kiệm nhiên liệu và giảm thiểu khí thải
Nhận thức về tầm quan trọng và xu hướng của xe tự hành, chúng em đã chọn đề tài
“Nghiên cứu, thiết kế, chế tạo chức năng tự hành cho xe điện dựa trên Deep Learning” Với mục đích phát triển một mô hình xe tự hành chạy trong các khuôn viên rộng lớn như trường học, bệnh viện, khu du lịch,… mà trong đó người dùng chỉ cần lựa chọn điểm đến, thì xe có thể tìm và di chuyển một cách an toàn, tối ưu đến điểm đến của mình.
Mục tiêu đề tài
- Thiết kế và triển khai mô hình máy học đa tác vụ lên các phần cứng Jetson Tx2 Kết nối với camera và đảm bảo có thể hoạt động với thời gian thực
- Thiết kế và chế tạo bộ điều khiển cho xe tự hành bằng STM32
- Thiết kế một ứng dụng android có thể tìm đường tối ưu, đường dự phòng trong khuông viên trường bằng thuật toán Dijkstra và đưa ra các chỉ dẫn rẻ hay đi thẳng cho xe tự hành
- Xây dựng thuật toán điều khiển góc lái cho xe dựa trên thuật toán điều khiển PID
- Triển khai, hoàn thiện các hệ thống trên Xe Golf Ezgo và tiến hành thực nghiệm trong khuôn viên trường Đại học Sư phạm Kỹ Thuật Thành phố Hồ Chí Minh
Đối tượng và phạm vi nghiên cứu
Ngôn ngữ Python, Java, C/C++ và các framework Pytorch, Tensorflow
Mạng phân đoạn, phát hiện và nhận diện bối cảnh và vật thể
Mạng học đa tác vụ
Thuật toán điều khiển PID và thuật toán tối ưu Dijkstra
Thiết kế xây dựng ứng dụng android chỉ đường
Xe và ứng dụng chỉ đường chỉ có thể hoạt động trong khuôn viên trường Đại học
Sư phạm Kỹ Thuật thành phố Hồ Chí Minh
Thuật toán điều khiển của xe chỉ phù hợp khi di chuyển trên những đoạn đường không quá đông
Khả năng điều khiển của xe sẽ bị hạn chế khi gặp những đường có độ rộng lớn vì góc của camera bị giới hạn
Trong quá trình thử nghiệm và thu thập thông dữ liệu, để đảm bảo an toàn xe thường di chuyển trên đoạn đường vắng người và thoáng đãng Vì thế khi một số tình huống bất ngờ như đường quá đông đúc có thể xe sẽ không hoạt động tốt.
Tình hình nghiên cứu
1.4.1 Tình hình nghiên cứu trong nước
Công nghệ xe tự lái trong nước đang có những bước phát triển tích cực và ngày càng đáp ứng tốt hơn với yêu cầu của ngành giao thông thế hệ mới Các doanh nghiệp Việt như FPT, Phenikaa-X và VinFast đã đưa ra những giải pháp tiên tiến, đặt nền móng cho sự phát triển của xe tự hành trong thị trường nội địa, chủ động tham gia vào cuộc cách mạng công nghiệp 4.0 và xu hướng phát triển xe tự hành trên thế giới
FPT đã thành công trong việc thử nghiệm công nghệ xe tự hành trên các loại xe thương mại 4 chỗ và xe điện sân golf tại khu công nghệ cao TP HCM và FPT Complex ở Đà Nẵng Đến năm 2019, xe tự hành của FPT đã được thử nghiệm tại khu đô thị Ecopark, mở ra khả năng đặt xe từ xa thông qua ứng dụng trên điện thoại do FPT Software phát triển
Phenikaa-X, vào tháng 5/2021, cũng giới thiệu mẫu xe tự hành đầu tiên của mình, với mục tiêu trở thành công ty công nghệ hàng đầu trong lĩnh vực xe tự hành và robot công nghiệp tại Việt Nam Mẫu xe của Phenikaa-X được trang bị công nghệ xe tự lái ở cấp độ 4, theo thang đo 5 cấp độ của Hiệp hội Kỹ sư xe hơi (SAE), nơi chiếc xe được coi là hoàn toàn tự động, cho phép người lái thoải mái nghỉ ngơi hoặc rời khỏi ghế lái trong khu vực nhất định
VinFast cũng là một đối thủ đáng chú ý, khi vào tháng 8/2021, họ đã thử nghiệm thành công mẫu xe tự hành cấp độ 4 có khả năng di chuyển với tốc độ tối đa 30 km/h VinFast đã tích hợp công nghệ tự lái vào các mẫu xe điện thông minh mới và sẽ triển khai trên các xe buýt điện trong thời gian sớm nhất, điều này là một bước quan trọng cho sự phát triển của ngành công nghiệp xe tự hành trong nước
Ngoài ra, sự gia tăng của các cuộc thi về xe tự hành cũng làm tăng cường môi trường cho việc phổ biến công nghệ này, đồng thời tạo điều kiện cho sự đổi mới và phát triển trong lĩnh vực xe tự hành, giúp nó ngày càng hoàn thiện và đáp ứng đúng xu hướng phát triển công nghệ toàn cầu trong lĩnh vực này
1.4.2 Tình hình nghiên cứu ngoài nước
Lĩnh vực xe tự hành đang phát triển mạnh mẽ trên toàn cầu với sự tham gia của nhiều công ty lớn như Uber, Tesla và Waymo (công ty xe tự lái của Google) tại Mỹ, cũng như Auto-X, Baidu, Pony.AI và Xpeng tại các quốc gia khác Uber, với công nghệ tầm nhìn 360 độ kết hợp giữa camera, radar và cảm biến khác, đang dẫn đầu với số lượng phương tiện trên đường Tesla sử dụng 8 camera, cảm biến siêu âm và radar để phát triển công nghệ xe tự hành của mình Waymo tập trung vào việc tạo ra người "tài xế ảo" giàu kinh nghiệm nhất thế giới với hàng triệu km trải nghiệm lái xe trong thực tế và hàng tỷ tình huống mô phỏng
Aptiv, thông qua giải pháp phần cứng và phần mềm cảm biến, đang đóng vai trò quan trọng trong việc triển khai các tính năng lái xe tự động như kiểm soát hành trình và công nghệ hỗ trợ giữ làn đường Aurora, tập trung vào phát triển công nghệ tự lái cấp độ
Và theo một nghiên cứu thị trường gần đây của New-Journal [1], thị trường xe tự hành được dự đoán sẽ tăng trưởng với tốc độ nhanh chóng trong những năm tới Quy mô thị trường dự kiến sẽ tăng thêm 319,41 tỷ USD, tăng tốc với tốc độ CAGR là 38,45% từ
4 năm 2022 đến năm 2027 Nhu cầu tự lái phương tiện ngày càng tăng để thúc đẩy thị trường xe tự lái Các nhà sản xuất lớn và các công ty công nghệ đều đang đầu tư vào lĩnh vực này
Tuy hiện tại vẫn còn nhiều hạn chế trong các thuật toán xử lý và các hạn chế về mặt pháp lí và đạo đức song đây vẫn là một trong những lĩnh vực đầy hấp dẫn và đáng mong đợi trong tương lai
Phương pháp nghiên cứu
- Tìm hiểu và tổng hợp những nghiên cứu về các mạng cho bài toán nhận diện và phân đoạn ứng dụng cho xe tự hành
- Tìm hiểu và tổng hợp những nghiên cứu về bài toán đa tác vụ
- Nghiên cứu và thiết kế mô hình đa tác vụ ứng dụng cho xe tự hành
- Viết chương trình cho hệ thống và huấn luyện mạng
- Nghiên cứu, xây dựng thuật toán điều khiển và thử nghiệm chúng trong các cuộc thi đua xe tự hành mô phỏng và thực tế với xe mô hình nhỏ
- Nghiên cứu, thiết kế bộ điều khiển cho xe tự hành
- Xây dựng và thử nghiệm tính chính xác của GPS cũng như là khả năng chỉ đường của ứng dụng
- Sử dụng các nguồn tài liệu khác từ Internet
CƠ SỞ LÝ THUYẾT
Tổng quan về trí tuệ nhân tạo
Trí tuệ nhân tạo (Artificial Intelligence - AI) là một lĩnh vực trong khoa học máy tính nhằm phát triển các hệ thống có khả năng thực hiện các nhiệm vụ yêu cầu sự hiểu biết, quyết định, và học hỏi mà thông thường đòi hỏi sự tham gia của con người Mục tiêu của trí tuệ nhân tạo là tạo ra máy tính hoặc hệ thống có khả năng tự động hóa công việc thông minh mà trước đây chỉ có con người mới có thể thực hiện được
Học máy, hay Machine Learning (ML) trong tiếng Việt, thuộc lĩnh vực quan trọng của trí tuệ nhân tạo (AI), tập trung vào phát triển thuật toán và mô hình máy tính có khả năng tự học và cải thiện dựa trên dữ liệu xử lý Khác với cách truyền thống lập trình máy tính để thực hiện công việc cụ thể, học máy cho phép máy tính tự học từ dữ liệu và trải nghiệm để tự động cải thiện hiệu suất theo thời gian
Các phương pháp chính của học máy bao gồm:
- Học giám sát (Supervised Learning): Mô hình được đào tạo trên tập dữ liệu có đầu vào và đầu ra mong muốn Mục tiêu là học cách ánh xạ từ đầu vào đến đầu ra, giúp mô hình có thể dự đoán đầu ra cho các đầu vào mới
- Học không giám sát (Unsupervised Learning): Mô hình được đào tạo trên tập dữ liệu chỉ có đầu vào mà không có đầu ra mong muốn Mục tiêu của học không giám sát là khám phá cấu trúc hoặc mối quan hệ trong dữ liệu, như phân cụm hoặc giả định về cấu trúc ẩn
- Học tăng cường (Reinforcement Learning): Mô hình hoạt động trong một môi trường động và học từ trải nghiệm bằng cách thực hiện hành động và nhận phản hồi từ môi trường Mục tiêu là tối ưu hóa một hàm thưởng hoặc minh họa
Học máy có ứng dụng rộng rãi trong nhiều lĩnh vực như nhận dạng hình ảnh, xử lý ngôn ngữ tự nhiên, dự đoán chuỗi thời gian, tư vấn cá nhân, và nhiều lĩnh vực khác Phần lớn các vấn đề mà học máy giải quyết là các vấn đề phân loại và hồi quy, và sự lựa chọn giữa các phương pháp phụ thuộc vào bản chất của vấn đề và loại dữ liệu được sử dụng
Học sâu là một nhánh của máy học, đặt ra khả năng cho máy tính tự huấn luyện để thực hiện các tác vụ phức tạp Phương pháp này hoạt động dựa trên cấu trúc của các mạng lưới thần kinh sâu, được thiết kế để mô phỏng cách con người suy nghĩ và học hỏi
Trong lĩnh vực học sâu, mạng Nơ-ron đóng một vai trò quan trọng trong nhiều thuật toán hiệu quả Điều này đã đóng góp quan trọng trong việc cho phép máy tính mô phỏng khả năng tư duy và hiểu biết giống như con người Cụ thể, một mạng Nơ-ron trong học sâu được xây dựng để sao chép chức năng của não bộ người, trong đó não bộ bao gồm các nơ-ron liên kết thông qua các synapse
Phương pháp trừu tượng hóa khái niệm này thành đồ thị, trong đó các nút đại diện cho các nơ-ron và các cạnh có trọng số đại diện cho các synapse Trong quá trình học sâu, mạng Nơ-ron này không chỉ giúp giải quyết những thách thức của thị giác máy tính, mà còn vượt qua những hạn chế của các phương pháp truyền thống trong việc nhận diện vật thể, nơi các đặc trưng có thể bị ảnh hưởng bởi nhiều yếu tố như góc nhìn, ánh sáng, và che khuất Học sâu đang được ứng dụng mạnh mẽ và ngày càng trở thành một công cụ quan trọng trong lĩnh vực thị giác máy tính
Hình 2.1 Hình ảnh mô phỏng của một tế bào thần kinh của con người
Dựa trên cấu trúc nói trên, một tế bào thần kinh nhân tạo thường hoạt động theo cách tương tự Trong hình dưới đây, mô tả một tế bào thần kinh nhân tạo, được mô hình
7 hóa toán học là một hàm tuyến tính kết hợp với một hàm kích hoạt (Activation function) Hàm kích hoạt chịu trách nhiệm biến đổi đầu ra của hàm tuyến tính, thường được áp dụng để nén giá trị trong khoảng từ 0 đến 1 (sigmoid activation), -1 đến 1 (tanh activation), hoặc lớn hơn 0 (ReLU) Ý tưởng của hàm kích hoạt là khám phá mối quan hệ phi tuyến tính giữa đầu vào và đầu ra Mỗi nơ-ron có thể được xem xét như một bộ phân loại tuyến tính, ví dụ như hồi quy logistic
Hình 2.2 Cấu trúc của một tế bào nhân tạo
Một số kiến trúc deep learning phổ biến bao gồm mạng nơ-ron đa tầng (Multilayer Perceptron - MLP) cho học giám sát, mạng nơ-ron hồi quy (Recurrent Neural Network - RNN) cho dữ liệu chuỗi, và mạng nơ-ron tích chập (Convolutional Neural Network - CNN) cho thị giác máy tính
2.1.2.2 Mạng Nơ-ron tích chập (Convolutional Neural Network)
Mạng thần kinh tích chập (CNN) là một kiến trúc học sâu được thiết kế đặc biệt cho xử lý dữ liệu hình ảnh, đạt hiệu suất cao Cách hoạt động của CNN được lấy cảm hứng từ cách vỏ não thị giác của động vật hoạt động Trong vỏ não thị giác, tế bào thần kinh thị giác phản ứng với kích thích thị giác trong một tiểu vùng của trường thị giác Các tế bào thần kinh khác nhau đảm nhiệm việc bao phủ các trường con khác nhau, tạo thành một sự chồng lớp để bao phủ toàn bộ trường thị giác Trong CNN, cách tiếp cận này được mô phỏng thông qua việc sử dụng các bộ lọc tương tác với tiểu vùng trong hình ảnh và truyền thông tin trong vùng đó
CNN bao gồm nhiều lớp lặp lại, mỗi lớp đảm nhận một chức năng cụ thể Lớp tích chập chịu trách nhiệm trích xuất các đặc trưng từ hình ảnh đầu vào bằng cách sử dụng bộ lọc tích chập Các lớp này nhận đầu vào từ hình ảnh và sản xuất đầu ra, chứa các đặc trưng được trích xuất, được chuyển giao đến lớp tiếp theo
Lớp tổng hợp giúp giảm kích thước của các đặc trưng bằng cách kết hợp nhiều đầu ra thành một đầu ra duy nhất Các phương pháp tổng hợp phổ biến bao gồm tổng hợp tối đa (lấy giá trị tối đa từ đầu ra) và tổng hợp trung bình (tính trung bình các đầu ra)
Xe tự hành
Xe tự lái [11], hay còn gọi là xe tự hành (self-driving car), là loại xe có khả năng tự cảm nhận môi trường xung quanh và di chuyển an toàn mà ít hoặc không cần sự can thiệp của con người
Các xe tự lái tích hợp nhiều công nghệ cảm biến môi trường như radar, lidar, sonar, định vị GPS, và trí tuệ nhân tạo Hệ thống điều khiển cao cấp phân tích thông tin từ các cảm biến để xác định đường đi phù hợp, đồng thời nhận biết chướng ngại vật và biển báo giao thông
Hoạt động của xe tự lái dựa vào sự kết hợp của cảm biến, bộ điều khiển, thuật toán, máy học và bộ xử lý mạnh mẽ Một số công nghệ phổ biến trên xe tự lái bao gồm:
- Cảm biến radar: Theo dõi vị trí của các phương tiện xung quanh
- Camera video: Phát hiện đèn giao thông, đọc biển báo, theo dõi phương tiện khác và nhận diện người đi bộ
- Cảm biến LiDAR: Sử dụng xung ánh sáng để đo khoảng cách, phát hiện mép đường và xác định vạch kẻ đường
- Cảm biến siêu âm: Lắp đặt trong bánh xe để phát hiện lề đường và các phương tiện khi đỗ xe
Phần mềm của xe tự lái xử lý thông tin đầu vào để đề xuất một con đường và gửi hướng dẫn đến bộ điều khiển của xe để kiểm soát tốc độ, phanh và lái xe Các quy tắc giao thông được định rõ trong phần mềm, và các thuật toán tránh chướng ngại vật, mô hình dự đoán và nhận dạng đối tượng giúp xe tuân thủ quy tắc và tránh chướng ngại vật khi di chuyển trên đường
2.2.2 Các cấp độ của xe tự hành Đến thời điểm hiện tại, thuật ngữ "xe tự lái" đã trở nên phổ biến trong ngành công nghiệp sản xuất ô tô Lĩnh vực xe tự hành đánh dấu sự xuất hiện của một phương tiện mới, và để áp dụng nó vào thực tế, cần thiết lập các quy chuẩn chung Hiệp hội Kỹ sư Ô tô (SAE), tổ chức chịu trách nhiệm phát triển quy định và tiêu chuẩn cho ngành công nghiệp ô tô toàn cầu, đã thiết lập một hệ thống phân loại gồm 6 cấp độ tự lái để xác định mức độ tự chủ của phương tiện và người lái trong quá trình vận hành
Hệ thống phân loại 6 cấp độ của SAE bắt đầu từ Cấp độ 0, trong đó không có sự hỗ trợ nào từ phương tiện, và tiến lên đến Cấp độ 5, đại diện cho việc phương tiện tự chủ hoàn toàn mà không cần sự can thiệp của người ngồi sau vô-lăng Các cấp độ này giúp xác định và đánh giá mức độ tự động hóa và khả năng điều khiển tự động của xe, đồng thời cung cấp hướng dẫn cho người tiêu dùng và các doanh nghiệp trong ngành ô tô
Hình 2.13 Các cấp độ của xe tự hành
2.2.3 Tiêu chuẩn an toàn của công nghệ xe tự lái Đúng, việc đảm bảo an toàn là một yếu tố quan trọng và không thể phủ nhận trong phát triển và triển khai các công nghệ xe tự lái Dưới đây là một số tiêu chuẩn và yếu tố an toàn quan trọng mà những người làm trong lĩnh vực này cần xem xét:
- Tiêu chuẩn An toàn Phương tiện Cơ giới Liên bang (FMVSS): Các nhà sản xuất ô tô cần tuân thủ theo các tiêu chuẩn của FMVSS để đảm bảo rằng xe của họ đáp ứng các yêu cầu an toàn cơ bản Điều này bao gồm các yêu cầu về hệ thống phanh, an toàn bám đường, hệ thống túi khí, v.v
- Hệ thống Cảm biến và Nhận diện Đối tượng: Hệ thống cảm biến của xe tự lái phải có khả năng chính xác xác định và theo dõi các đối tượng xung quanh, bao gồm xe khác, người đi bộ, và cả cấu trúc đường
- Quyết định Tức thì: Hệ thống phần mềm điều khiển xe tự lái cần có khả năng đưa ra quyết định tức thì và phản ứng nhanh chóng với các tình huống giao thông khẩn cấp
- An toàn Mạng và Phần mềm: Việc đảm bảo an toàn của hệ thống trước mọi rủi ro về an ninh mạng là quan trọng Phần mềm điều khiển phải được thiết kế để ngăn chặn các tấn công và đảm bảo tính toàn vẹn của hệ thống
- Hướng dẫn và Giáo dục Người Dùng: Người lái và người sử dụng các hệ thống xe tự lái cần được cung cấp hướng dẫn rõ ràng và đầy đủ về cách sử dụng, và họ cũng cần phải hiểu rõ về các hạn chế của hệ thống
- Giám sát và Can thiệp của Người Lái: Ở các cấp độ thấp hơn của tự động hóa, việc giữ cho người lái giữ tinh thần giám sát và sẵn sàng can thiệp vào mọi lúc cần thiết là quan trọng để đảm bảo an toàn
Các tiêu chuẩn và yếu tố an toàn này là những điểm cơ bản mà ngành công nghiệp đang nỗ lực đạt được để tạo ra các hệ thống xe tự lái an toàn và đáng tin cậy.
Framework Pytorch và TensorRT
Pytorch [12] là framework được phát triển bởi Facebook Với sự đầu tư đáng kể vào lĩnh vực Trí tuệ Nhân tạo, Facebook đã giới thiệu PyTorch như một công cụ mạnh mẽ PyTorch là một dự án mã nguồn mở, điều này đã tạo ra một cộng đồng lớn quanh nó Cộng đồng lớn không chỉ cung cấp nhiều tài nguyên học, mà còn giúp giải quyết vấn đề của bạn thông qua việc chia sẻ thông tin và kiến thức
PyTorch, cùng với Tensorflow và Keras, là một trong những framework phổ biến nhất được sử dụng cho các bài toán Deep Learning hiện nay Trong lĩnh vực nghiên cứu, đa phần các tác giả đều ưa chuộng PyTorch để triển khai bài toán của họ PyTorch thể hiện sự ưu việt của mình trong lĩnh vực nghiên cứu bằng việc cung cấp khả năng debug và visualize dễ dàng Ngoài ra, với cơ chế Dynamic Graphs, PyTorch giúp giảm thời gian huấn luyện mô hình
PyTorch sử dụng Tensor làm kiểu dữ liệu chủ yếu Tensor là một mảng nhiều chiều với các phần tử có cùng loại dữ liệu Đặc biệt, Tensor có thể thực hiện tính toán trên GPU, giúp tăng tốc quá trình tính toán
Hình 2.14 Quy trình cơ bản của Pytorch gồm các module quan trọng và được kết nối với nhau qua từng giai đoạn
Các module quan trọng và cơ bản chúng tôi sẽ đề cập trong bài báo cáo này là torch.utils, torch.nn, torch.optim, torch.autograd
Về thư viện TensorRT, TensorRT là một thư viện được phát triển bởi NVIDIA nhằm cải thiện tốc độ inference, giảm độ trì truệ trên các thiết bị đồ họa NVIDIA(GPU)
Nó có thể cải thiện tốc độ suy luận lên đến 2-4 lần so với các dịch vụ real-time và nhanh hơn gấp 30 lần so với hiệu suất của CPU
TensorRT [13] thực hiện 5 loại tối ưu để tăng hiệu suất bao gồm:
- Precision Calibration: Trong suốt quá trình training, các tham số và hàm kích hoạt activations trong độ chính xác FP32(Float Point 32) sẽ được convert về độ chính xác FP16 hoặc INT8 Việc tối ưu nó sẽ giảm độ trì truệ và tăng tốc độ suy luận nhưng phải trả một cái giá là phải giảm độ chính xác của model mặc dù không đáng kể Trong nhận diện real-time thì đôi khi vịệt đánh đổi độ chính xác so với tốc độ suy luận là cần thiết
- Layer & Tensor Fusion: TensorRT nó sẽ gộp layer and tensor để tối ưu hóa bộ nhớ GPU và băng thông bởi việc gộp các nodel theo chiều dọc, chiều ngang hoặc cả hai
- Kernel auto-tuning: Trong quá trình tối ưu model, một vài kernel riêng dành cho việc tối ưu sẽ thực thi trong suốt tiến trình
- Dynamic Tensor Memory: Cho phép chỉ phân bổ bộ nhớ cần thiết cho mỗi tensor và chỉ trong thời gian sử dụng của nó giúp giảm dung lượng bộ nhớ và cải thiện việc sử dụng lại bộ nhớ
- Multiple Stream Execution: Cho phép xử lý nhiều luồng đầu vào
Hình 2.15 Minh họa 5 loại tối ưu của thư viện TensorRT
Thuật toán tìm đường tối ưu Dijkstra
Đây là thuật toán được ra đời bởi nhu cầu tìm kiếm giải pháp cho việc tìm kiếm đường đi từ thành phố này đến thành phố khác của con người một cách ngắn nhất Nó được ra đời chính thức vào năm 1959 bởi nhà khoa học máy tính ông Dijkstra
Thuật toán Dijkstra [14] tìm đường đi ngắn nhất giải quyết bài toán đường đi ngắn nhất từ một điểm đến các điểm còn lại của đồ thị Để mô tả đường đi ngắn nhất từ thành phố A đến thành phố B, chúng ta sử dụng các đỉnh của đồ thị để biểu diễn các thành phố và các cạnh để đại diện cho các đường nối giữa chúng Trọng số của các cạnh được xem xét như là độ dài của các con đường, đảm bảo rằng chúng không âm, giúp thuật toán chỉ ra con đường ngắn nhất Trọng số không âm của các cạnh mang lại sự tổng thể hóa, không xét đến khoảng cách hình học giữa 2 đỉnh, điều này làm tăng tính chính xác của thuật toán
Dijkstra thường được ứng dụng trong bộ định tuyến với một chương trình con trong một hệ thống định vị toàn cầu hay còn gọi là GPS
Hình 2.16 Minh họa thuật toán tìm đường ngắn nhất Dijkstra
So sánh với các thuật toán khác:
- Ưu điểm: Hoạt động hiệu quả trên đồ thị với trọng số không âm, đảm bảo tìm ra đường đi ngắn nhất
- Nhược điểm: Không thể xử lý đồ thị có trọng số âm Dijkstra sử dụng một mảng để lưu trữ các khoảng cách ngắn nhất từ đỉnh nguồn đến các đỉnh khác Điều này có thể đòi hỏi một lượng bộ nhớ lớn, đặc biệt là trên đồ thị lớn
- Ưu điểm: Có thể xử lý đồ thị có trọng số âm
- Nhược điểm: Hiệu suất kém hơn Dijkstra trên đồ thị có trọng số không âm Có thể yêu cầu thời gian thực thi lâu hơn trong một số trường hợp
- Ưu điểm: Đảm bảo tìm ra đường đi ngắn nhất Dễ hiểu và triển khai
- Nhược điểm: Không chọn được đường đi tốt nhất cho đồ thị có trọng số âm Dijkstra sử dụng một mảng để lưu trữ các khoảng cách ngắn nhất từ đỉnh nguồn đến các đỉnh khác Điều này có thể đòi hỏi một lượng bộ nhớ lớn, đặc biệt là trên đồ thị lớn
- Ưu điểm: Hiệu suất cao hơn trên đồ thị lớn và phức tạp Có thể chọn được đường đi tốt nhất bằng cách sử dụng hàm heuristic
- Nhược điểm: Yêu cầu xác định một hàm heuristic phù hợp Có thể không đảm bảo tìm ra đường đi ngắn nhất nếu hàm heuristic không đúng
Kết luận: Với mục tiêu bài toán là tìm đường ngắn nhất trên bản đồ, khoảng cách giữa các điểm là độ dài của đường đi nên đồ thị tìm kiếm lúc này sẽ không có trọng số âm và để đảm bảo khả năng tìm kiếm, nhóm đã lựa chọn thuật toán tìm đường Dijkstra.
Thuật toán điều khiển PID
PID [15] (Proportional Integral Derivative) là một cơ chế phản hồi vòng điều khiển được sử dụng rộng rãi trong các hệ thống điều khiển công nghiệp PID còn được gọi với tên gọi khác là điều khiển tuyến tính
PID là một phương trình toán học phức tạp, quan trọng để duy trì một giá trị mong muốn (SP) trong hệ thống Giá trị mong muốn có thể là nhiệt độ, áp suất, lưu lượng, và nhiều yếu tố khác tùy thuộc vào ứng dụng cụ thể Phương trình này tạo ra sự kết nối mật
24 thiết giữa đầu vào và đầu ra của hệ thống để đảm bảo hiệu suất ổn định và đáp ứng chính xác theo mong muốn
Hình 2.17 Thuật toán điều khiển PID Điều khiển PID (Proportional Integral Derivative) bao gồm ba khâu chính: tỉ lệ (P – controller), tích phân (I – controller), và vi phân (D – controller)
- Khâu tỉ lệ (P – controller): Điều chỉnh giá trị đầu ra tỉ lệ với sai số hiện tại Chức năng của khâu tỉ lệ là điều chỉnh giá trị đầu ra để tiến gần hơn đến giá trị mong muốn Tuy nhiên, trong thực tế, không thể đạt được giá trị mong muốn hoàn toàn, và luôn tồn tại một lượng nhỏ sai lệch
- Khâu tích phân (I – controller): Cộng dồn các sai số từ quá khứ Khâu này tỉ lệ với biên độ của sai số và thời gian mà sai số đã xảy ra Khâu tích phân giúp giảm thiểu sai số trong hệ thống và tăng tốc độ đáp ứng
- Khâu vi phân (D – controller): Là vi phân của sai lệch Nó tạo ra tín hiệu điều khiển tỉ lệ với tốc độ thay đổi của sai số Khâu vi phân giảm dao động trong hệ thống, đặc biệt khi tốc độ thay đổi quá nhanh
Nếu loại bỏ khâu tích phân và vi phân, hệ thống vẫn có thể điều khiển được, nhưng sẽ xuất hiện sai số khi điều khiển tỉ lệ Thêm vào đó khâu tích phân sẽ giảm sai số và khâu vi phân sẽ làm giảm dao động trong hệ thống, mặc dù có thể làm tăng thời gian đáp ứng Sự kết hợp linh hoạt giữa ba khâu này giúp điều khiển PID đạt được sự ổn định và hiệu suất tốt trong nhiều ứng dụng điều khiển tự động
Hệ thống định vị toàn cầu GPS, AGPS
GPS [16] (tên đầy đủ trong tiếng anh là Global Positioning System) là một hệ thống định vị và đo đạc vị trí trên toàn cầu sử dụng tín hiệu từ một mạng các vệ tinh nằm ở quỹ đạo quanh Trái Đất Hệ thống GPS được phát triển và duy trì bởi Bộ Quốc phòng Hoa Kỳ, và nó được sử dụng rộng rãi trên khắp thế giới để xác định vị trí, độ cao, và thời gian GPS hoạt động bằng cách thu thập tín hiệu từ ít nhất bốn vệ tinh GPS ở trên bầu trời và sử dụng các thông tin này để xác định vị trí của một điểm cụ thể trên bề mặt Trái Đất
Người dùng có thể sử dụng các thiết bị GPS như điện thoại di động, đồng hồ thông minh, hoặc thiết bị định vị GPS độc lập để xác định vị trí của họ trong thời gian thực Ứng dụng của GPS rất đa dạng, từ điều hướng và dẫn đường, đến theo dõi vị trí trong thể thao, và đến việc định vị trong hệ thống định vị ô tô tự lái
Hình 2.18 Hệ thống định vị toàn cầu GPS Để giải quyết vấn đề về định vị và xác định vị trí trên Trái Đất, hệ thống GPS sử dụng các vệ tinh chuyển động trên quỹ đạo với độ chính xác cao Các vệ tinh này phát tín hiệu xuống Trái Đất, và các thiết bị thu GPS, như điện thoại di động, đồng hồ thông minh, hoặc các thiết bị định vị GPS, sẽ tiếp nhận tín hiệu này để xác định vị trí của chúng
Quá trình này dựa trên nguyên tắc so sánh thời gian tín hiệu được phát và thời gian tín hiệu được nhận, với mục tiêu xác định khoảng cách từ thiết bị đến vệ tinh Với thông tin từ nhiều vệ tinh, máy thu GPS có thể tính toán và xác định vị trí chính xác của người dùng
Tuy nhiên, có những hạn chế trong việc sử dụng GPS Trong môi trường có nhiều cản trở như tòa nhà cao, rừng cây dày, hay địa hình phức tạp, độ chính xác của GPS có thể giảm đi Đồng thời, độ chính xác của GPS cũng phụ thuộc vào nguồn năng lượng, và có thể mất thời gian để khởi động và định vị đúng vị trí, đặc biệt khi di chuyển từ vùng này sang vùng khác Đối với những ứng dụng cần độ chính xác cao và phản hồi nhanh, một số hệ thống sử dụng cảm biến khác để bổ sung và cải thiện định vị Vì thế ở đây nhóm sẽ sử dụng GPS từ điện thoại hay cụ thể hơn là hệ thống AGPS
A-GPS [17] là một công nghệ kết hợp giữa định vị GPS và cảm biến GPS, cùng với tín hiệu từ mạng viễn thông, nhằm cải thiện quá trình xác định vị trí của thiết bị A- GPS giúp tăng tốc độ tính toán vị trí, làm cho chức năng định vị trên thiết bị trở nên nhanh chóng hơn và khả năng xác định vị trí tương đối khi thiết bị nhập vào vùng mất tín hiệu vệ tinh GPS Trên các điện thoại thông minh hiện đại, Google cung cấp dịch vụ cải thiện độ chính xác vị trí thông qua A-GPS bằng cách sử dụng Wi-Fi, mạng di động, và các cảm biến để ước đoán vị trí Google thường xuyên thu thập dữ liệu vị trí để cải thiện độ chính xác của GPS Việc này giúp tăng cường độ chính xác, giảm thời gian cập nhật vị trí, và giảm bớt nhược điểm của GPS thông thường, đặc biệt là trong môi trường có nhiều rủi ro mất tín hiệu vệ tinh
THIẾT KẾ VÀ XÂY DỰNG HỆ THỐNG
Tổng quan hệ thống
Hình 3.1 Tổng quan hệ thống
Hệ thống bao gồm một số thành phần chính như sau:
- Tín hiệu chỉ đường từ GPS và Camera: Nhóm sẽ thiết kế app có thể hiển thị bản đồ, lấy tín hiệu GPS và cho phép người dùng có thể chọn vị trí mình muốn đến Sau khi chọn xong và nhấn xác nhận, app sẽ cung cấp đường ngắn nhất trên bản đồ Trong quá trình di chuyển khi đến cảm điểm giao, ngã tư và ngã ba, app sẽ cho hệ thống biết là rẻ trái hay rẻ phái giúp xe di chuyển chính xác và đúng lộ trình Với Camera sẽ cung cấp hình ảnh đến cho hệ thống
- Jetson Tx2: Xử lý tín hiệu từ Camera và tín hiệu chỉ đường từ app, bằng cách sử dụng các mô hình đa tác vụ và các thuật toán điều khiển giúp đưa ra tín hiệu điều khiển tốt nhất và truyền nó đến bộ điều khiển
- Mạch điều khiển; Giao tiếp với Jetson Tx2 để truyền nhận tín hiệu, sau đó cung cấp tín hiệu điều khiển đến cơ cấu chấp hành
Các thiết bị phần cứng
Mô hình thực hiện là chiếc xe golf bên dưới như trong hình 3.2 Mẫu xe này không có trợ lực lái điện, thông số của xe này được thể hiện ở bảng 3.1
Chiều dài tổng thể 240.03 cm
Chiều rộng tổng thể 120 cm
Chiều cao tổng thể 173.99 cm
Chiều dài cơ sở 166.878 cm
Khoảng cách giữa hai bánh trước 86 cm
Khoảng cách giữa hai bánh sau 97 cm
Tỷ lệ truyền động trục sau 12.44:1
Hệ thống lái Không có giá đỡ và bánh răng tự bù
Bảng 3.1 Thông số kỹ thuật của xe Golf Ezgo
3.2.2.1 Servo Động cơ servo là một loại động cơ được thiết kế để đáp ứng một cách chính xác với các tín hiệu điều khiển và duy trì vị trí cố định trong khi hoạt động Điều này làm cho chúng rất phù hợp trong các ứng dụng yêu cầu độ chính xác cao, như trong ngành tự động hóa và robot học
Dưới đây là một số đặc điểm chung và ứng dụng của động cơ servo:
- Phản hồi (Feedback): Động cơ servo thường kèm theo hệ thống phản hồi để liên tục giám sát vị trí hoặc tốc độ của động cơ Các cảm biến phổ biến bao gồm encoder và resolver
- Độ chính xác và Độ ổn định: Động cơ servo được thiết kế để cung cấp độ chính xác cao trong việc duy trì vị trí và độ ổn định trong khi hoạt động Điều này làm cho chúng thích hợp cho các ứng dụng yêu cầu độ chính xác và đáng tin cậy
- Tính Linh hoạt: Động cơ servo thường có khả năng hoạt động ở nhiều tốc độ và mô men khác nhau, tùy thuộc vào tín hiệu điều khiển được cung cấp
- Kiểm soát thông qua Tín hiệu PWM (Pulse Width Modulation): Thông thường, động cơ servo được điều khiển bằng cách sử dụng tín hiệu PWM, trong đó độ rộng của xung được sử dụng để xác định vị trí mong muốn hoặc tốc độ quay của động cơ
Hình 3.3 Một số loại động cơ Servo Động cơ Servo được dùng trên xe Golf Ezgo để điểu khiển hệ thống lái Hình ảnh và thông số kỹ thuật của Servo được thể hiện như sau:
Hình 3.4 Động cơ Ezi Servo và Ezi Driver trên Xe Golf Ezgo
Phương pháp điều khiển Điều khiển vòng lặp kín với 32Bit MCU
Bảng vị trí 64 bước lệnh chuyển động (Continuous, Wait, Loop, Jump and External start, v.v) Dòng điện tiêu thụ Max 500mA
Công năng Độ phân giải
Tốc độ quay 0~3,000 rpm Chiều quay CW/CCW I/O signal Tín hiệu đầu vào
3 đầu vào chuyên dụng (LIMIT+, LIMIT-, ORIGIN),
7 đầu vào có thể lập trình (Photocoupler) Tín hiệu đầu ra 1 đầu ra chuyên dụng (Compare Out),
3 đầu ra có thể lập trình (Photocoupler), Brake
Bảng 3.2 Thông số kỹ thuật của động cơ Ezi Servo
Loại động cơ EzS-PD-60
Phương pháp điều khiển Điều khiển vòng lặp kín với 32Bit MCU
Bảng vị trí 64 bước lệnh chuyển động (Continuous, Wait, Loop, Jump and External start, v.v) Dòng điện tiêu thụ Max 500mA
Công năng Độ phân giải
Tốc độ quay 0~3,000 rpm Chiều quay CW/CCW (Có thể lựa chọn bằng công tắc DIP) I/O signal Tín hiệu đầu vào Xung điều khiển vị trí, Bật/Tắt servo, Đặt lại cảnh báo
(Photocoupler Input) Tín hiệu đầu ra
In-Position, Alarm (Photocoupler Output) Encoder Signal (A+, A-, B+, B-, Z+, Z-, 26C31 of Equivalent), Brake
Bảng 3.3 Thông số kỹ thuật của driver Ezi Driver
Encoder hay còn gọi là Bộ mã hóa quay hoặc bộ mã hóa trục, là một thiết bị cơ điện chuyển đổi vị trí góc hoặc chuyển động của trục hoặc trục thành tín hiệu đầu ra analog hoặc kỹ thuật số Encoder được dùng để phát hiện vị trí, hướng di chuyển, tốc độ… của động cơ bằng cách đếm số vòng quay được của trục
Encoder cấu tạo chính gồm:
- Đĩa quang tròn có rảnh nhỏ quay quanh trục: Trên đĩa được đục lỗ (rãnh), khi đĩa này quay và chiếu đèn led lên trên mặt đĩa thì sẽ có sự ngắt quãng xảy ra Các rãnh trên
31 đĩa chia vòng tròn 360 độ thành các góc bằng nhau Và một đĩa có thể có nhiều dãy rãnh tính từ tâm tròn
- Bộ cảm biến thu (photosensor)
Khi đĩa quay quanh trục, trên đĩa có các rãnh để tín hiệu quang chiếu qua (Led) Chỗ có rãnh thì ánh sáng xuyên qua được, chỗ không có rãnh ánh sáng không xuyên qua được Với các tín hiệu có/không người ta ghi nhận đèn Led có chiếu qua hay không
Số xung Encoder được quy ước là số lần ánh sáng chiếu qua khe Ví dụ trên đĩa chỉ có 100 khe thì cứ 1 vòng quay, encoder đếm được 100 tín hiệu Đây là nguyên lý hoạt động của loại Encoder cơ bản, còn đối với với nhiều chủng loại khác thì đương nhiên đĩa quay sẽ có nhiều lỗ hơn và tín hiệu thu nhận cũng sẽ khác hơn
Encoder bao gồm hai loại chính:
- Incremental encoder (Tương đối): Tương ứng đĩa 2bit, cho ngõ ra dạng xung vuông pha AB, hoặc ABZ hoặc ABZA|B|Z| (đọc là A đảo, B đảo, Z đảo) Loại Encoder có 2 tín hiệu xung A và B là phổ biến nhất Tín hiệu khe Z là tín hiệu để xác định động cơ quay được một vòng
- Absolute encoder (Tuyệt đối): Tương ứng đĩa quay 8bit hay 8 dãy rãnh, cho ngõ ra dạng mã kỹ thuật số(BCD), Binary (nhị phân), Gray code Ở đây nhóm lựa chọn sử dụng Absolute encoder cho hệ thống, với độ phân giải của bộ mã hóa được chọn là 256 xung Dùng để đo góc lái trực tiếp với bộ mã hóa 8 bit
Hình 3.5 Encoder loại đo tuyệt đối
Nguồn cung cấp 12 VDC −10% to 24 VDC +15%, ripple (p-p): 5% max Dòng điện tiêu thụ 60 mA max Độ phân giải (xung/vòng) 256, 360, 720, 1024
Mã đầu ra Gray code
Tần số phản hồi tối đa 20 kHz
Tốc độ tối đa cho phép 5000 r/min
Bảng 3.4 Thông số kỹ thuật của Encoder loại đo tuyệt đối
Cơ cấu lái có thể được mô tả như hình 3.9 bên dưới Các bộ phận lái chứa DC servo, hộp số 1:11 có thiết kế cơ khí để kết nối trực tiếp với hệ thống lái
3.2.3 Bộ điều khiển từ xa
Bao gồm một bộ phát Devo7 và bộ thu Rx-601, dùng để điều khiển hệ thống lái của xe từ xa
Encoder ARM micro computer system
Công suất đầu ra ≤ 100mW
Dòng điện tiêu ra ≤ 230mA (100mW)
Bảng 3.5 Thông số kỹ thuật của Devo 7
Loại 2.4 GHz 6 channels Độ nhạy -105 dbm
Bảng 3.6 Thông số kỹ thuật của RX-601
Mô hình đa tác vụ
Trong phần này chúng tôi sẽ nói về về thiết kế mô hình học sâu đa tác vụ phù hợp để triển khai trên xe tự hành
Hình 3.11 Kiến trúc học của mô hình đa tác vụ
Backbone có nhiệm vụ trích xuất đặc trưng từ ảnh đầu vào Trong mô hình của được thiết kế, backbone chính được nhóm sử dụng là CSPDarknet53 - một backbone trích xuất các đặc điểm ở nhiều độ phân giải (tỷ lệ) bằng cách lấy mẫu dần dần xuống hình ảnh đầu vào Các đặc trưng được tạo ở các độ phân giải khác nhau chứa thông tin về các đối tượng ở các tỷ lệ khác nhau trong ảnh cũng như các mức độ chi tiết và trừu tượng khác nhau
Backbone bao gồm năm phần, mỗi phần có một lớp trích chập và theo sau là module C2f Module C2f là phần mới về CSPDarknet53 được tác giả của yolov8 [18] giới thiệu trong paper của họ Module này bao gồm các phần tách trong đó một đầu đi qua module bottleneck Đầu ra của module bottleneck được chia thêm N lần trong đó N tương ứng với kích thước của backbone Các phần tách này cuối cùng được nối và chuyển qua một phần cuối cùng lớp tích chập, lớp cuối cùng này chúng tôi cho nó qua một lớp kích hoạt
Neck có chức năng kết hợp các đặc trưng được lấy từ Backbone và để xử lý các đặc trưng nhận được Trong mô hình đa tác vụ nhóm đã sử dụng là PAFPN, PAFPN là một kiến trúc mạng trích chập được thiết kế để giải quyết vấn đề tự nhiên có trong các mô hình học sâu, đó là sự mất mát thông tin và thông tin không đồng đều qua các lớp PAFN giải quyết vấn đề này bằng cách sử dụng cơ chế tổng hợp đường dẫn, giúp nối các đường dẫn thông tin từ các lớp khác nhau của mạng Mạng PAFPN được sử dụng với top-down để lấy các đặc trưng từ backbone, và một đường bottom-up để lấy các đặc trưng từ đường top-down Và các khối C2f được thêm vào sau khi ghép nối đặc trưng giũa đường trước và sau Đối với đặc trưng cao nhất của backbone, đặc trưng này sẽ được cho qua khối SPPF (Spatial Pyramid Pooling [19] - Fast) giúp cung cấp sự biểu diễn đa tỷ lệ của các đặc trưng đối tượng đầu vào Bằng cách gộp ở các tỷ lệ khác nhau, SPPF cho phép mô hình nắm bắt các đặc điểm ở nhiều mức độ trừu tượng khác nhau Điều này có thể đặc biệt hữu ích trong việc phát hiện đối tượng, trong đó có thể cần phát hiện các đối tượng có kích thước khác nhau
3.3.3 Head Detect Đầu ra cho tác vụ phát hiện đối tượng có nhiệm vụ dự vị trí và lớp của các đối tượng trong một hình ảnh Từ các đăc trưng của neck đưa ra sẽ được cho qua 2 lớp convolution module để dự đoán vị trí, cũng đặc trưng từ neck đó cũng sẽ được cho qua 2 lớp convolution module để dự đoán lớp các đối tượng Đa số các phương pháp phát hiện đối tượng hiện nay đều sử dụng neo hộp để đoán, nhưng trong mô hình này nhằm giảm số lượng dự đoán hộp và tăng tốc độ quá trình hậu xử lý, phần neo hộp này sẽ được lược bỏ
Các model phát hiện mạnh từ trước tới nay đều sử dụng kỹ thuật Anchor Box Tuy nhiên, với sự ra đời của FCOS [20] (Fully Convolutional One-Stage Object Detection), đạt độ chính xác khá cao mà không cần sử dụng đến Anchor Box, đã có khá nhiều sự chú ý dành cho việc loại bỏ Anchor Box [21] ra khỏi các model Object Detection Ta gọi các dạng model đó là Anchor-free [22] Anchor-free giúp việc huấn luyện nhanh hơn, dùng ít GPU/CPU hơn là sử dụng Anchor Box (Anchor-based) Chính vì lý đo đó nên trong mô hình này, nhóm đã sử dụng Anchor-free cho tác vụ hiện đối tượng và sử dụng TAL (Task-Aligned Assigner) cho chiến lược Label Assignment
Hình 3.12 Khối phát hiện đối tượng của mô hình đa tác vụ
Decoder chịu trách nhiệm chuyển đổi đặc trưng từ các lớp trước thành mặt nạ hoặc map pixel-wise để phân loại các vùng trong ảnh Nó giúp khôi phục độ phân giải, kết hợp thông tin từ các lớp trước, và tạo ra kết quả phân loại chi tiết cho mỗi pixel Bộ decoder chúng tôi sử dụng ở đây là FLD [23] (Flexible and Lightweight Decoder), FLD giảm dần các kênh của các đặc tr từ cấp cao xuống cấp thấp FLD có thể dễ dàng điều chỉnh chi phí tính toán để đạt được sự cân bằng tốt hơn giữa bộ mã hóa và bộ giải mã Mặc dù các kênh tính năng trong FLD đang giảm dần nhưng các kết quả thử nghiệm cho thấy nó đạt kết quả khác tốt so với các phương pháp hiện đại
Trong decoder còn có thêm khỗi SPPM (Simple Pyramid Pooling Module) Đầu tiên, nó tận dụng mô-đun tổng hợp kim tự tháp để hợp nhất tính năng đầu vào SPPM gộp
39 nhóm kim tự tháp có ba hoạt động gộp trung bình toàn cầu và kích thước thùng lần lượt là 1 × 1, 2 × 2 và 4 × 4 Sau đó, các tính năng đầu ra được theo sau bởi các hoạt động tích chập và lấy mẫu Đối với hoạt động tích chập, kích thước hạt nhân là 1×1 và kênh đầu ra nhỏ hơn kênh đầu vào Cuối cùng, mô hình được thêm các tính năng được lấy mẫu lại này và áp dụng thao tác tích chập để tạo ra tính năng được tinh chỉnh So với PPM (Pyramid Pooling Module), SPPM giảm các kênh trung gian và đầu ra, loại bỏ đường tắt và thay thế thao tác nối bằng thao tác bổ sung Do đó, SPPM hiệu quả hơn và phù hợp hơn với các mô hình thời gian thực
Ngoài ra, trong bộ decoder còn có thêm khối UAFM (Unified Attention Fusion Module) UAFM sử dụng module attention để tạo ra trọng số α và kết hợp các đặc trưng đầu vào Cụ thể, các đặc trưng đầu vào được ký hiệu là F_high và F_low F_high là đầu ra của module sâu hơn và F_low là đầu ra của backbone UAFM trước tiên sử dụng thao tác nội suy song tuyến tính để thay đổi kích thước F_high lên cùng kích thước của Flow Sau đú, module attention lấy F_up và F_ơlow làm đầu vào và tạo ra trọng số α Sau đú, để có được các tính năng có trọng số attention, mô hình áp dụng nhân theo phần tử tương ứng cho F_up vào F_low Cuối cùng, UAFM thực hiện phép cộng theo từng phần tử cho các tính năng được chú ý và đưa ra tính năng hợp nhất
Tại đặc trưng cuối cùng của bộ decoder, nhóm đã thay đổi kích thước bằng với kích thước ảnh ban đầu và cho qua 2 lớp tích chập để dự đoán làn đường
Các mô hình đa tác vụ thường khó để huấn luyện do không ổn định và một số nhiệm vụ chiếm ưu thế trong gradient của mất mát Do đó, cẩn thận trong việc chọn trọng lượng của các nhiệm vụ và thường cần các chiến lược huấn luyện đa giai đoạn Qua quá trình nghiệm đào tạo mô hình học sâu chúng tôi chọn ra các hàm mất mát cho mô hình của chúng tôi như sau Hàm mất mát gồm 2 hàm mất mát chính: hàm mất mát cho tác vụ phân đoạn làn đường và hàm mất mát cho tác vụ phát hiện đối tượng
Trong hàm mất mát của tác vụ phân đoạn làn đường nhóm chọn CrossEntropyLoss [24] Hàm mất mát CrossEntropy là một hàm mất mát phổ biến được sử dụng trong các tác vụ phân loại, bài toán mà mỗi mẫu dữ liệu được phân loại vào một trong số nhiều lớp khả dụng Cụ thể, nó thường được sử dụng trong các mô hình học máy và mạng nơ-ron để đo lường sự khác biệt giữa các xác suất dự đoán và xác suất thực tế Mục tiêu của việc tối thiểu hóa mất mát Cross Entropy là điều chỉnh các trọng số của mô hình để làm tăng xác suất của lớp đúng và giảm xác suất của các lớp khác
Còn đối với hàm mất mát của tác vụ phát hiện đối tượng gồm 3 hàm mất mát chính: box_loss, cls_loss, dfl_loss Box loss là hàm mất mát giữa các hộp giới hạn dự đoán và các hộp giới hạn được gán nhãn, trong hàm mất mất này chúng tôi sử dụng BinaryCrossEntropyLoss Cls_loss là là hàm mất mát giữa lớp dự đoán và lớp được gán nhãn, trong hàm mất mát này chúng tôi sử dụng BinaryCrossEntropyLoss Dlf_loss là hàm mất mát chuyên dụng giúp cải thiện khả năng phát hiện đối tượng trong các tình
41 huống có hình ảnh bị mất nét hoặc mờ Nó giúp cho mô hình tập trung vào việc cải thiện khả năng phát hiện trong những điều kiện khác nhau
L total = εL segmentation +αL box +βL cls +γL dlf
Trong đó: ε, α, β và γ là các trọng số dùng để điều chỉnh sự cân bằng giữa các hàm mất mát.
Mạch điều khiển
Trong dự án này, để giảm thiểu số lượng dây và tối ưu hóa quá trình xử lý khả năng của hệ thống nên nhóm quyết định thiết kế mạch in 2 lớp (PCB) bao gồm STM32, GPS, RX-601
- STM32: Trong mạch điều khiển, bộ xử lý trung tâm (CPU) đóng vai trò rất quan trọng, nó là trung tâm xử lý dữ liệu cho các cảm biến khác trên bảng mạch Nhóm sử dụng STM32 hay vì dùng Arduino mega vì Arduino chỉ là một bộ vi xử lý 8 bit nên tín hiệu cũng như là quá trình xử lý không ổn định và tốn một khoảng thời gian trễ để thực thi lệnh Vì vậy sử dụng bộ vi xử lý 32-bit STM32 làm bộ vi xử lý chính sẽ là tối ưu hơn đặc biệt là đối với những yêu cầu cao về xử lý thời gian thực
Connectivity CAN, DCMI, EBI/EMI, Ethernet, I²C, IrDA, LIN, SPI,
UART/USART, USB, OTG Program Memory
Bảng 3.9 Thông số kỹ thuật của STM32
- Sơ đồ tổng quan mạch điều khiển: Hình ảnh dưới đây cho thấy cấu trúc tổng thể của các khối thành phần trên bảng mạch Chức năng của từng khối sẽ được trình bày chi tiết như sau:
Hình 3.16 Sơ đồ tổng quan của mạch điều khiển
• Khối nguồn: chứa nguồn điện 3,3V và 5V Trong khối này chứa nguồn điện 3,3V và 5V Nguồn điện 3,3V dùng để cấp nguồn cho CPU chính (STM32) và module GPS nguồn điện 5V dùng để cấp nguồn cho module bên ngoài như IMU hoặc mô-đun GPS khác
• Khối nhấp nháy mã: Mạch ST-LINK dùng để lập trình và debug qua các chân SWDIO và SWCLK
• Khối MCU: Bộ vi xử lý STM32F4 Các thông số kỹ thuật của STM32 tương ứng được trình bày trong bảng thông số kỹ thuật của STM32 MCU chính được dùng cho mạch này là STM32 với vai trò chính là sẽ xử lý hai chế độ lái xe trong hệ thống Đó là chế độ Manual (dùng tay điều khiển) và chế độ Auto (tự lái) Chế độ Manual sử dụng tín hiệu từ Devo7 để điều khiển tay lái và tốc độ của ô tô Chế độ Auto sử dụng dữ liệu từ nhiều cảm biến để điều hướng ô tô trong một số tình huống cơ bản
• Khối giao tiếp: Bao gồm các chân để giao tiếp với bộ mã hóa, RX-601 và một số thành phần bên ngoài Ở khối tín hiệu từ bộ mã hóa (Encoder Communication Part) sẽ bao gồm 11 chân, trong đó có 2 chân để cấp nguồn và 9 chân để đọc tín hiệu bộ mã hóa (Encoder Signal) Ở khối thua nhận tín hiệu (RX601 communication part) bao gồm 6 chân với 6 kênh thu Trong nghiên cứu này tôi chỉ sử dụng 3 chân: TIM3, TIM9, TIM10 để nhận dữ liệu từ Devo7
• Khối cảm biến: Bao gồm các chân để giao tiếp với các cảm biến khác như GPS và cảm biến khoảng cách Khối cảm biến khoảng cách bao gồm 8 cảm biến, được sử dụng để cảnh báo trong trường hợp khoảng cách giữa xe và cảm biến quá ngắn Về khối cảm biến GPS trên mạch điều khiển, ban đầu khi thiết kế nhóm sử dụng cảm biến này để lấy tín hiệu GPS, tuy nhiên sau nhiều lần thử nghiệm nhóm nhận thấy rằng việc dùng GPS từ điện thoại sẽ đem lại hiệu quả tốt hơn
Hình 3.22 Khối cảm biến khoảng cách
• Khối công suất: Bao gồm các chân để điều khiển xung điều khiển lái servo và quản lý tốc độ xe
Hình 3.23 Khối điều khiển công suất động cơ Servo
Hình 3.24 Khối điều khiển hướng của động cơ Servo
Hình 3.25 Khối điều khiển tốc độ xe
- Kết quả mạch điều khiển:
Hình 3.27 Bảng mạch điều khiển thực tế
Ứng dụng dẫn đường
Trong phần này, ta sẽ đi sâu vào quá trình thiết kế cũng như là áp dụng thuật toán Dijkstra vào trong quá trình tìm đường tối ưu Ở đây nhóm chọn tự xây dựng App và map
48 thay vì dùng các dịch vụ tìm đường được cung cấp miễn phí của Google vì hai lí do chính:
- Tuy Google cung cấp miễn phí dịch vụ tìm đường cho các ứng dụng tự phát triển, tuy nhiên với các IP từ Việt Nam thì dịch vụ này bị giới hạn đi rất nhiều, mỗi ngày chỉ được sử dụng vài lần và mỗi lần cách nhau rất lâu, điều này sẽ không đáp ứng được quá trình nghiên cứu và xây dựng hệ thống của nhóm khi mà việc thực nghiệm là một trong những việc không thể thiếu
- Việc tự xây dựng map và tự dùng thuật toán cho phép nhóm linh hoạt trong việc phát triển hệ thống của mình, cụ thể hơn ngoài việc tìm được đường ngắn nhất, giờ đây ứng dụng có thể dễ dàng cung cấp thông tin về vị trí và hướng di chuyển cho xe tự hành một cách chi tiết và dễ dàng hơn so với việc dùng của Google Ngoài ra trong quá trình di chuyển nếu gặp đoạn đường khó và không di chuyển được, app có thể cung cấp đường dự phòng khác cho xe Đây chính là những chức năng chính của ứng dụng chỉ đường được nhóm xây dựng
Khi dùng thuật toán Dijkstra ta cần xây dựng trước đồ thị của các node và chi phí tính toán để đi từ node này sang node khác Ở ứng dụng này các node được nhóm lựa chọn là các điểm giao lộ đối với những đoạn đường thẳng, đối với đoạn đường cong hoặc có ngã rẻ, góc cua lớn, nhóm cũng sẽ chia ra thành những đoạn nhỏ, khoảng cách giữa các giao lộ sẽ là chi phí tính toán Lúc này ta được một đồ thị của các node với các trọng số không âm – hoàn toàn phù hợp để sử dụng thuật toán tìm đường tối ưu Dijkstra
Hình 3.28 Xây dựng map cho ứng dụng dẫn đường
Các điểm node sẽ là các điểm chấm màu đỏ, các đường màu đỏ giữa các node là khoảng cách giữa các điểm node Điểm màu xanh là vị trí hiện tại và vị trí cần đến là điểm chữ X màu đen
3.5.2 Thuật toán tìm đường tối ưu Dijkstra Để sử dụng được thuật toán tối ưu Dijkstra trong bản đồ thì ta cần xây dựng trước một Graph – là xây dựng trước đồ thị của các node và khoảng cách của chúng, cụ thể:
- Như hình ảnh bàn đồ của trường đại học Sư phạm Kỹ Thuật thành phố Hồ Chí Minh ở trên, ta có 14 node được xác định trước Các node có định danh là các số thứ tự như được ghi ở trên, ngoài ra để phù hợp cho ứng dụng dẫn đường, mỗi node này sẽ được đính kèm thông tin là kinh độ và vĩ độ tương ứng
- Tiếp theo ta xác định trọng số giữa các điểm node tức là khoảng cách giữa các điểm giao lộ, điểm rẻ được đánh dấu ở trên Mỗi điểm sẽ có từ 2 cho đến 4 điểm kề khác nhau, ta cần cập nhật toàn bộ khoảng cách giữa các điểm này với các điểm liền kề
- Với các đoạn đường chỉ cho phép di chuyển một chiều, ví dụ từ 1 có thể sang nhưng 2 không được sang vị trí số 1, thì trong quá trình đánh trọng số, ta chỉ cập nhật trọng số khi xét điểm 1 với các điểm kề khác Đối với điểm 2, khi xét với các điểm kề khác ta chỉ cần không ghi trọng số khoảng cách đến điểm 1 Đây chính là điều kiện phù hợp để tìm đường tối ưu, khi mà các đoạn đường hiện nay không phải đường nào cũng là đường hai chiều, giúp ứng dụng dẫn đường có tính ứng dụng cao
Hình 3.29 Xây dựng các điểm node trong Graph
Hình 3.30 Đánh trọng số đối với đường hai chiều và một chiều trong Graph
Tuy nhiên không phải khi nào vị trí bắt đầu của xe và điểm đến cũng là các điểm node đã được xây dựng sẵn, vì thế ta cần có hai điểm node khác linh động hơn và không cố định như các điểm node được đề cập ở trên, ta gọi là Node Start và Node End Để thực hiện được yêu cầu trên, trước tiên app sẽ lấy vị trí của hai điểm xuất phát và điểm kết thúc, sau đó tính khoảng cách từ chúng đến tất cả các điểm node còn lại đã
51 có trên bản đồ - chọn ra điểm có khoảng cách ngắn nhất, khoảng cách giữa các điểm node [18] được tính bằng công thức tính khoảng cách Haversine - được sử dụng để tính khoảng cách giữa hai điểm trên bề mặt cầu Sau đó ta cập nhật node và trọng số của chúng Công thức Haversine được tính như sau: haversine(θ)=sin 2 ( 2Δϕ )+cos(ϕ 1 )⋅cos(ϕ 2 )⋅sin 2 ( 2Δλ ) Trong đó:
- Δϕ là chênh lệch vĩ độ giữa hai điểm
- ϕ 1 là vĩ độ của điểm đầu tiên
- ϕ 2 là vĩ độ của điểm thứ hai
- Δλ là chênh lệch kinh độ giữa hai điểm
Sau khi ta xây dựng đầy đủ map, ta tiến hành triển khai thuật toán tìm đường tối ưu Dijkstra Đầu tiên ta khởi tạo hai danh sách L1 và L2, trong đó L1 là danh sách khoảng cách từ điểm bắt đầu đến tất cả các điểm còn lại, L2 là danh sách tất cả các điểm node đã được cập nhật trong Graph
Hình 3.31 Lưu đồ thuật toán của thuật toán Dijkstra
Ta được kết quả là danh sách khoảng cách ngắn nhất từ điểm bắt đầu đến tất cả điểm còn lại, ngoài ra ta có thể dễ dàng cập nhật trong số khoảng cách vào Graph, điều này giúp ứng dụng có thể chức năng đó là tìm đường đi khác ngắn nhất khi mà đường đi phía trước không thể di chuyển được
Hình 3.32 Kết quả tìm đường tối ưu và đường dự phòng của ứng dụng dẫn đường
3.5.3 Tín hiệu dẫn đường và các chức năng khác
Sau khi hoàn thiện thuật toán cũng như các chức năng, nhóm thiết kế một số chức năng khác cho ứng dụng để giúp ứng dụng thân thiện và dễ sử dụng hơn, đồng thời hiển thị và cung cấp các thông tin cần thiết
- Giao diện của ứng dụng: Bao gồm ba switch với các chức năng là reset – xóa hết toàn bộ thông tin có trên bản đồ và reset tất cả các thông tin, Tìm đường – sau khi lựa nhấn vị trí hiện tại và lựa chọn điểm đến bằng cách nhấn đè trên bản đồ, sẽ cho ra đường đi trên bản đồ và cuối cùng là Xác nhận – sau khi tìm đường người dùng chọn xác nhận để xe bắt đầu di chuyển Ngoài ra ứng dụng cũng hiển thị thông tin khi đang di chuyển trên đường gồm Keep Straight, Turn Left, Turn Right
Hình 3.33 Giao diện của ứng dụng
Thuật toán điều khiển
Trong phần này sẽ trình bày các phương pháp và thuật toán được sử dụng để giúp xe tự hành trong khuôn viên trường Đại học Sư Phạm Kỹ Thuật Thành phố Hồ Chí Minh Các chức năng chính trong hệ thống điều khiển sẽ là di chuyển trong làn đường cho phép và né tránh, xử lý khi gặp vật cản
3.6.1 Điều khiển góc lái với PID
3.6.1.1 Lấy tín hiệu điều khiển
Sau khi nhận ảnh từ Camera, ta sẽ cho ảnh vào mô hình đa tác vụ, ở đây kết quả trả về sẽ là ảnh segmentation của làn đường và các bounding box dự đoán những đối tượng có trên ảnh, những đối tượng này sẽ là vật cản hoặc tín hiệu từ biển báo
Hình 3.36 Ảnh dự đoán từ mô hình
Sau khi có được ảnh dự đoán từ mô hình đa tác vụ, ta sẽ xây dựng thuật toán điều khiển để giúp xe tự di chuyển Mục tiêu điều khiển xe của ta làm đảm bảo xe di chuyển đúng và đi trong khu vực đường đi Ở đây nhóm đề xuất sử dụng phương pháp điều khiển như sau:
- Xác định hai điểm thuộc hai bên đường bằng cách kẻ một đường ngang sang ảnh dựa đoán từ mô hình, tại các vị trí thuộc đường thẳng này, nếu vị trí nào có giá trị tương ứng với giá trị được đánh cho làn đường thì ta lưu lại Kết quả ta được hai điểm cần tìm lần lượt là giá trị nhỏ nhất và giá trị lớn nhất trong các giá trị được lưu lại
- Ta tìm ra trung điểm giữa hai điểm hai bền làn đường, điểm này chính là vị trí ở giữa làn đường ta đang di chuyển Chọn một điểm khác nằm giữa khung hình, điểm này chính là vị trí xe hiện tại của ta So sánh khoảng cách giữa hai điểm này ta được một khoảng cách gọi là Error
- Mục tiêu của thuật toán là giảm giá trị Error này về 0, vì khi giá trị Error này giảm về 0, lúc này hai điểm sẽ cùng nằm trên một đường thẳng, tương ứng sẽ là vị trí của xe nằm ngay chính giữa làn đường, và trong quá trình di chuyển vị trí giữa làn đường sẽ được tính toán và cập nhật liên tục Bộ điều khiển PID sẽ giúp xe di chuyển bám theo vị trí giữa làn đường từ đó xe di chuyển một cách ổn định và đúng làn đường
Hình 3.37 Thuật toán điều khiển cho xe tự hành
3.6.1.2 Thuật toán điều khiển PID
Thuật toán PID được dùng trong các hệ thống điều khiển tự động vòng lặp kín, đầu vào của bài toán này sẽ là khoảng cách Error đã được tính toán ở trên, giá trị mong muốn đạt được là 0 Thuật toán được thể hiện cụ thể hơn ở hình 3.38, thuật toán này bao gồm ba thành phần chính: Proportional (P), Integral (I), và Derivative (D):
- Proportional Gain (Kp): Đây là hệ số tỷ lệ giữa sai số hiện tại và đầu ra điều khiển Kp quyết định phần tỷ lệ của phản ứng tức thì đối với sai số hiện tại
- Integral Gain (Ki): Đây là hệ số của phần tích luỹ của sai số theo thời gian Ki giúp giảm thiểu sai số ổn định và đưa về giá trị mong muốn trong thời gian dài
- Derivative Gain (Kd): Đây là hệ số của phần biến thiên của sai số theo thời gian
Kd giúp dự đoán xu hướng của sai số và làm giảm độ phóng đại của đầu ra điều khiển
Các thông số của bộ điều khiển PID được lựa chọn thông qua quá trình thực nghiệm
Hình 3.38 Lưu đồ thuật toán PID
3.6.2 Phát hiện vật cản Đối với việc xử lý khi gặp các vật cản, kết quả dự đoán của mô hình chính là hình ảnh segment của đoạn đường có thể đi kết hợp với thuật toán điều khiển thì xe hoàn toàn có thể di chuyển và tự né vật cản lớn như xe hơi, tuy nhiên khi gặp các vật thể nhỏ hơn như người đi bộ thì điều này sẽ thật sự nguy hiểm vì ảnh segment làn đường có thể không chịu nhiều ảnh hưởng từ những vật cản nhỏ Ngoài ra, để có thể đảm bảo tốc độ khi né vật cản được tối ưu hơn, nhóm quyết định xây dựng thuật toán có thể phát hiện được tương đối vị trí của các vật cản
Hình 3.39 Kết quả dự đoán của mô hình khi gặp các vật thể
Vậy làm thế nào để có thể giúp xe có thể né tránh hay dừng lại khi gặp các vật cản này Trước tiên ta cần khảo sát trước một số trường hợp có thể xảy ra, có thể thấy ở các trường hợp vật thể lớn dự đoán của mô hình sẽ trả về ảnh segment bị khuyết tại vị trí bounding box tương ứng của vật thể như xe hơi, nhưng đối với vật thể là con người thì ảnh segment vẫn sẽ bao quanh vật thể này Và khi sử dụng thuật toán bám lane như hiện tại ta sẽ được kết quả định hướng của xe như hình 3.40
Hình 3.40 Hướng di chuyển của xe khi gặp vật cản
Nếu chỉ dựa vào segment để xác định hướng di chuyển thì ở trường hợp xe hơi, xe hoàn toàn có thể né được vì vị trí của xe luôn nằm ngoài phần dự đoán làn đường của mô hình Tuy nhiên ở trường hợp vật cản là người tuy kết quả dự đoán của mô hình là đúng, nhưng vì người khá nhỏ so với xe nên kết quả dự đoán lúc này vị trí của người nằm trong khu vực dự đoán làn đường của mô hình vì thế hướng di chuyển của xe lúc này vẫn là bám hai làn đường và nếu tiếp tục di chuyển như thế thì sẽ xảy ra va chạm
Vì thế lúc này thay vì chỉ dựa vào ảnh segment ta cần kết hợp thông tin bounding box từ nhận diện vật thể và sử dụng chúng để né vật cản, cụ thể trường hợp dưới đây ta bám một bên làn đường và một bên bám vào tọa độ của vật thể Tùy vào vị trí của vật thể bên phải hay bên trái ta sẽ sử dụng tọa độ của bounding box cho phù hợp và nếu khoảng cách di giữa hai điểm quá nhỏ ta sẽ cho xe dừng lại
Hình 3.41 Hướng di chuyển của xe khi kết hợp bounding box vào né vật cản
3.6.3 Kết hợp với tín hiệu GPS Để giúp xe khi đến các giao lộ có thể xác định đi theo hướng nào, ta kết hợp thông tin từ GPS tức vị trí hiện tại của xe và vị trí cần đến, từ đó giúp xe có thể đến đó một cách nhanh chóng và hiệu quả Để hiệu quả, ở đây nhóm sẽ xử lý đa luồng cho các chức năng chính trên xe
Hình 3.42 Xử lý đa luồng trên hệ thống
Hình 3.43 Lưu đồ thuật toán kết hợp GPS trong điều khiển xe tự hành
3.6.4 Chiến thuật đánh lái Để điều khiển được vô lăng điện, chúng tôi đề xuất thuật toán đánh lái có thể phù hợp với vô lăng điện của chúng tôi Hầu như tất cả các ô tô hiện nay đều được trang bị hệ thống lái trợ lực điện tử (EPSS), giúp các thuật toán hiện tại linh hoạt hơn trong việc điều chỉnh góc lái Do có thêm mo-men do EPSS cung cấp, góc lái có thể thích ứng với những điều chỉnh lớn Nhưng đối với chúng tôi, chúng tôi bị hạn chế về mặt cơ khí nên hệ thống lái của chúng tôi vẫn chưa đạt yêu cầu và không thể so sánh với các hệ thống lái trên thị trường Cụ thể, hệ thống của chúng tôi không thể chịu một sự điều chỉnh lớn liên tiếp nhận được bằng cách tính toán góc lái từ quá trình xử lý hình ảnh Do đó, chúng tôi đã đề xuất chiến lược giữ cho ô tô của mình ổn định với DC servo và một encoder tuyệt đối cho công việc này Hệ thống bánh xe của chúng tôi được tích hợp hộp số tỷ lệ 1:11 giúp servo đáp ứng được mô-men cần thiết Hộp số được kết nối trực tiếp với một encoder tuyệt đối để đo được góc lái của bánh xe Cuối cùng là hộp số lái có tỷ lệ 1:12 điều khiển trực tiếp góc lái Hộp số lái có vai trò chuyển lực tròn thành lực điều khiển theo phương ngang
Hình 3.44 Chiến thuật đánh lái của xe
KẾT QUẢ THỰC NGHIỆM
Môi trường đánh giá
Tất cả các kết quả thực nghiệm được thực hiện ở trên khuôn viên trường Đại học
Sư phạm Kỹ Thuật thành phố Hồ Chí Minh Do những hạn chế về mặt thời gian và phần cứng sẵn có, khả năng của xe tự hành hiện còn hạn chế để vận hành trên những con đường cỡ lớn trong khuôn viên trường Ngoài ra trong quá trình nghiên cứu và tìm hiểu để đảm bảo an toàn cho người xung quanh, xe được thực nghiệm trong các đoạn đường tương đối vắng và thời tiết phù hợp, vì thế trong môi trường không đáp ứng được các yêu cầu trên, xe tự hành có thể hoạt động không như mong muốn
Hình 4.1 Sơ đồ khối của hệ thống
Huấn luyện mô hình đa tác vụ
4.2.1 Thu thập và đánh nhãn dữ liệu
Bộ dữ liệu được sử dụng để huấn luyện và đánh giá mô hình tác vụ của chúng tôi được chúng tôi thu thập trên tất cả các đoạn đường từ khuôn viên trường đại học Sư Phạm Kỹ thuật TP.HCM vào những thời điểm và điều kiện khác nhau Bộ dữ liệu của tôi chứa 4980 hình ảnh với các gán nhãn tương ứng với các đầu của mô hình
Hình 4.2 Dữ liệu thu thập được từ khuôn viên trường Đại học Sư phạm Kỹ thuật thành phố Hồ Chí Minh
Sau khi thu thập dữ liệu, nhóm cần chọn lọc những dữ liệu phù hợp để có thể huấn luyện mô hình đa tác vụ, cụ thể là sẽ chọn những ảnh có đầy đủ cả hai tác vụ như ảnh có đường và có xe hơi, có đường và có người hay có cả ba yếu tố trên
Dữ liệu cho tác vụ phân đoạn làn đường: Đối với tác vụ phân đoạn làn đường, nhóm đã tự gán nhãn cho toàn bộ dữ liệu mà nhóm đã thu thập được khi chạy xe hết tất các dường trong khuôn viên trường Đại học Sư phạm Kỹ thuật TP.HCM Công cụ đánh nhãn mà nhóm sử dụng có tên là “Label me”- công cụ chuyên gán nhãn cho tác vụ phân đoạn Trong bộ dữ liệu, nhóm đã gán nhãn với 2 lớp: “road” và “background”
Hình 4.3 Gán nhãn dữ liệu cho tác vụ phân đoạn làn đường bằng Labelme
Dữ liệu cho tác vụ phát hiện đối tượng: Đối với tác vụ phát hiên đối tượng, nhóm cũng đã tự gán nhãn cho toàn bộ dữ liệu đã thu thập được khi chạy xe hết tất các đường trong khuôn viên trường Đại học Sư phạm Kỹ thuật TP.HCM Công cụ gán nhãn mà được sử dụng có tên là “LabelImg”- công cụ chuyên gán nhãn cho tác vụ phát hiện đối tượng Trong bộ dữ liệu của chúng tôi, chúng tôi đã gán nhãn với 2 lớp: “car” và
Hình 4.4 Gán nhãn dữ liệu cho tác vụ phát hiện đối tượng bằng LabelImg
Mô hình được nhóm xây dựng dựa trên framework Pytorch và được huấn luyện trên GPU Tesla T4 và sử dụng trình tối ưu hóa Adam để tăng hiệu suất của mô hình Nhóm đánh giá độ hiệu quả của mô hình bằng mIoU cho tác vụ phân đoạn làn đường và mAP cho tác vụ phát hiện làn đường và loss cho cả hai tác vụ
Tham số đánh giá phân đoạn làn đường mIoU
Tham số đánh giá phát hiện đối tượng mAP
Trính tối ưu hóa Adam
Bảng 4 1 Thông số trong quá trình huấn luyện
Hình 4.5 Giá trị của hàm mất mát trong quá trình huấn luyện mô hình
Hình 4.6 Giá trị mAP trong quá trình huấn luyện mô hình
Hình 4.7 Giá trị mIoU trong quá trình huấn luyện mô hình
Sau khi huấn luyện mô hình với hơn 300 epoch, thì mô hình của nhóm đã đạt được kết quả:
- Object Detection: mAP đạt được là 94%
- Segmentation: mIoU đạt được là 84%
So sánh với các mô hình khi triển khai mô hình lên Jetson Tx2 với TensorRT FP16:
Mô hình mIoU mAP FPS
Bảng 4.2 Kết quả khi so sánh mô hình đa tác vụ với các mô hình khác
Dựa vào kết quả trên và mục tiêu là có thể hoạt động với thời gian thực, nhóm ưu tiên lựa chọn mô hình có FPS cao vì trong quá trình thực nghiệm FPS này hoàn toàn có thể bị giảm xuống khi thêm các thuật toán điều khiển Ngoài ra khi sử dụng mô hình đa tác vụ do nhóm thiết kế thì độ chính xác giảm cũng không đánh kể so với các mô hình khác đặc biệt là YoloPV2 cũng là một mô hình đa tác vụ.
Kết quả thực nghiệm xe tự hành trong khuôn viên trường Đại học Sư phạm Kỹ Thuật
4.3.1 Kết quả dự đoán của mô hình
Mô hình đã được chuyển đổi để hoạt động trên nền tảng TensorRT, cho phép nó hoạt động bằng cách sử dụng kiểu dữ liệu Float16 thay vì Float32 tiêu chuẩn TensorRT là một framework được thiết kế để tối ưu hóa khả năng suy luận deep learning trên card đồ họa NVIDIA Nó sử dụng các kỹ thuật lượng tử hóa để tăng tốc thời gian thực hiện mà không làm giảm độ chính xác Dựa trên kết quả thử nghiệm, mô hình đã thể hiện hiệu suất vượt trội về thời gian thực hiện khi so sánh với phiên bản gốc
Hình 4.8 Kết quả thực nghiệm khả năng dự đoán của mô hình
Tuy nhiên khi đến các giao lộ cũng như là ở một số đoạn cua, khả năng dự đoán của mô hình bị giảm xuống và xuất hiện tình trạng nhiễu khá lớn
Hình 4.9 Dự đoán của mô hình không được tốt ở các đoạn đường vào cua
Hình 4.10 Dựa đoán của mô hình không được tốt khi vào cua
Trong quá trình huấn luyện mô hình đa tác vụ đòi hỏi dữ liệu được đánh nhãn sẽ có đầy đủ các tác vụ tức là trong một hình ảnh phải có đường và các vật thể khác thì mới có thể đánh nhãn và đưa vào huấn luyện mô hình Sau khi thu thập và chọn lọc dữ liệu thì đa số dữ liệu đều được lấy trên các đoạn đường đi thẳng vì đa số người di chuyển và xe đỗ trên các đoạn đường này, vì thế có thể thấy khi di chuyển trên đoạn đường thẳng khả
72 năng dự đoán mô hình rất tốt và chính xác, tuy nhiên khi di chuyển trên các đoạn đường cua thì lại xảy ra dự đoán sai và nhiễu
Ngoài ra, một lí do khác cho việc mô hình có sự giảm độ chính xác như vậy là vì nhóm đã cố gắng tinh chỉnh mô hình một các tối ưu để có thể đưa vào hoạt động thời gian thực, cụ thể hơn khi chỉ chạy mô hình trên phần cứng, FPS đạt được là hơn 33 và khi thêm các thuật toán điều khiển vào FPS sẽ còn là 25-26 FPS Với mức FPS hoạt động của hệ thống như trên, sẽ đảm bảo cho khả năng tự hành của xe được thực hiện mượt mà và chính xác hơn
4.3.2 Kết quả thực nghiệm khả năng tự hành của xe
Hình 4.11 Thực nghiệm chức năng né vật cản của xe
Khi gặp vật cản xe sẽ lấy giá trị từ bounding box để xác định vật cản đang nằm phía nào sau đó lấy ra tọa độ của vật cản và tinh chỉnh hướng đánh lái của xe cho phù hợp
Kết quả thực nghiệm khả năng né vật cản của xe được thê hiện ở hình 4.12 Chức năng được thực nghiệm trên các đoạn đường rộng để đảm bảo tính an toàn
Hình 4.12 Khả năng né vật cản của xe tự hành
Bám lane đường và kết hợp tín hiệu từ GPS:
Hình 4.13 Xe tự hành khi đến giao lộ và cua
Khi có tín hiệu cua trái từ GPS và tín hiệu đến giao lộ từ camera thông qua thuật toán điều khiển, lúc này xe sẽ chuyển sang bám một lane, nếu rẽ trái sẽ bám bên trái và ngược lại, có thể thấy điểm màu đỏ là điểm dẫn đường của xe đang chuyển sang bên trái để giúp xe cua vào khúc cua
Hình 4.14 Xe tự hành khi đến giao lộ và đi thẳng
Có thể thấy dù xe đang đến giao lộ nhưng điểm màu đỏ vẫn nằm giữa hai lane đường lớn, vì lúc này tín hiệu xe nhận được là tiếp tục đi thẳng, xe sẽ di chuyển theo chế độ bám cả 2 lane đường để di chuyển hoặc là bám lane đối diện và trừ đi độ rộng đường tương ứng để tính ra điểm di chuyển xe
Hình 4.15 Xe tự dừng lại khi đã đến vị trí cần đến
Khi vị trí xe đến được vị trí cần đến, sẽ có thông báo đến từ ứng dụng và đồng thời lúc này xe sẽ tự dừng