TỔNG QUÁT
LÝ DO CHỌN ĐỀ TÀI
Công nghệ AI (Trí tuệ nhân tạo) ra đời từ những năm 60 của thế kỷ XX nhờ nhà khoa học John McCarthy và đã bùng nổ mạnh mẽ trong thời đại công nghệ 4.0 AI được coi là công nghệ tối ưu hóa thời gian và sức lực của con người, với khả năng mô phỏng các quá trình suy nghĩ và học tập Nó bao gồm các quá trình học tập, lập luận và tự sửa lỗi, giúp máy móc thực hiện nhiệm vụ như con người Ngày nay, trí tuệ nhân tạo được ứng dụng rộng rãi trong nhiều lĩnh vực như y tế, giáo dục, sản xuất và kinh doanh, nhằm giảm bớt sức lao động và tăng cường lợi nhuận cho doanh nghiệp.
Ngành công nghiệp ô tô đang dẫn đầu trong việc ứng dụng khoa học và công nghệ, đặc biệt là trí tuệ nhân tạo (AI), được sử dụng như bộ não trong xe với nhiều ứng dụng từ hỗ trợ lái xe đến dự đoán bảo trì Tesla là công ty tiên phong trong phát triển xe tự hành, trong khi tại Việt Nam, FPT tổ chức "Cuộc Thi Số" để khuyến khích đam mê về xe tự hành Là đồng tác giả của đề tài xe tự hành với công nghệ AI được viết bằng Python, tôi hiểu rõ những khuyết điểm và hạn chế trong các lĩnh vực cơ khí, điện tử và lập trình.
Nhóm chúng tôi đã quyết định chọn đề tài tối ưu hóa hệ thống hiện tại, với mục tiêu xây dựng nền tảng vững chắc cho cả phần mềm và phần cứng Điều này sẽ giúp chúng tôi thực hiện một dự án lớn hơn, đó là tích hợp toàn bộ hệ thống và thuật toán cho Robot Operating System (ROS).
CÁC NGHIÊN CỨU TRONG VÀ NGOÀI NƯỚC
Chúng em đã tham khảo đề tài "P.I.D Position and Speed Control" từ arduino.vn, do tuenhi.20 thực hiện Hệ thống này được phát triển và lập trình trên IDE, sử dụng vi điều khiển Arduino UNO R3 Thuật toán PID được xây dựng từ thư viện PID_v1.h do Brett Beauregard tạo ra Mặc dù thuật toán này khá đơn giản, nhưng nó là bước đệm quan trọng giúp người dùng tiếp cận và hiểu rõ hơn về PID.
Chúng em đã tham khảo thuật toán của TS Trần Đức Thiện về việc sử dụng Arduino kết hợp với Matlab Simulink để điều khiển PID và Fuzzy cho động cơ DC Ngoài ra, chúng em cũng học hỏi từ bài giảng của thầy Nguyễn Văn Đông Hải về lý thuyết và phương pháp điều khiển động cơ DC với thuật toán PID.
Luận văn của Lê Thị Thu Hằng tại trường ĐH Công nghệ Hà Nội nghiên cứu về noron tích chập và ứng dụng trong nhận dạng biển báo giao thông Đồ án tốt nghiệp của Nguyễn Trung Trực và Lê Minh Hùng ứng dụng xử lý ảnh để nhận diện biển báo và điều khiển xe tự hành, được phát triển bằng ngôn ngữ Python cùng với các thư viện như OpenCV, TensorFlow, Keras, và NumPy, dựa trên thuật toán deep learning Ngoài ra, bài viết “Cách xây dựng một mạng neuron đơn giản bằng Python” của TonyPham trên diễn đàn IT Python cung cấp các hàm code cơ bản, công thức tính toán, và giải thuyết về mạng neuron, cùng với nguyên lý tích chập và ví dụ trực quan.
Bài viết của Trần Đức Trung trên diễn đàn Viblo Learning mang tên "Tìm hiểu về CNN và làm một vài ví dụ đơn giản về phân loại ảnh" khám phá kiến trúc mạng nơ-ron tích chập (CNN) và các thành phần của nó Tác giả không chỉ trình bày những khái niệm cơ bản về CNN mà còn cung cấp các ví dụ minh họa cụ thể, giúp độc giả hiểu rõ hơn về khả năng và phương pháp nghiên cứu liên quan đến CNN trong việc phân loại ảnh.
Bài nghiên cứu "Phân loại biển báo giao thông với Keras và Deep Learning" của Adrian Rosebrock trình bày các phương pháp nhận diện và phân loại biển báo giao thông bằng Python, sử dụng Keras và Deep Learning Nghiên cứu cũng phát triển các phương pháp huấn luyện cho các mô hình và áp dụng matplotlib để vẽ biểu đồ thể hiện quá trình huấn luyện mô hình.
Trong nghiên cứu "Deep Residual Learning for Image Recognition" của Kaiming He và các cộng sự, các tác giả đã đề xuất một khung hình mới giúp dễ dàng đào tạo mạng nơ-ron sâu hơn so với các mạng hiện tại Họ chỉ ra rằng việc định dạng rõ ràng các lớp để học các hàm dư dựa trên đầu vào lớp, thay vì học các hàm không được ước tính, mang lại hiệu quả cao hơn Nghiên cứu cũng cung cấp các bằng chứng thực nghiệm cho thấy việc tối ưu hóa và đạt được độ chính xác cao có thể thực hiện được bằng cách tăng số lượng lớp nơ-ron và áp dụng các lớp quét khi xử lý hình ảnh.
The Udemy online course on "CNN Computer Vision" teaches the fundamentals of constructing basic CNN architectures, creating neural connections, and developing training algorithms It also covers how to retrieve and utilize data from training files in various formats, including h5 and xml.
Bài nghiên cứu “MIT – deep-learning” trên diễn đàn Github của lexfridman cung cấp cái nhìn trực quan về mạng neuron, đồng thời chia sẻ các phương pháp nghiên cứu và phát triển xe tự hành Nghiên cứu còn kèm theo ví dụ về các thuật toán kiểm tra hình ảnh trong quá trình huấn luyện.
MỤC ĐÍCH CỦA ĐỀ TÀI
Mục tiêu của đề tài là tối ưu hóa phần cứng và thuật toán điều khiển, nâng cao mạng lưới noron của AI, giảm thiểu số lượng hình ảnh đào tạo mà vẫn đảm bảo độ chính xác và hiệu quả trong từng nhiệm vụ Đồng thời, đề tài cũng hướng đến việc tăng cường tỉ lệ thành công và độ chính xác so với nhóm nghiên cứu trước đó.
Xây dựng thuật toán traning mới tốt hơn, hiệu quả hơn và có thể traning nhiều cỡ ảnh khác nhau và đặc biệt là traning được ảnh màu RGB
Thay đổi phương pháp điều khiển động cơ bằng cách sử dụng thuật toán Arduino để điều khiển module BTS, áp dụng thuật toán PID nhằm tạo ra độ ổn định cho xe trong quá trình vận hành.
Thay đổi hệ thống lái ban đầu (được thiết kế từ 2 bánh răng và 1 trục dẫn động) thành hệ thống lái bằng trục vít thanh răng
Mô phỏng hệ thống lái bằng phần mềm Inventor giúp cân chỉnh và tối ưu hóa hiệu suất Việc thay thế bánh xe cũ và lựa chọn loại bánh xe phù hợp với nhiệm vụ của xe là rất quan trọng Đồng thời, việc mô phỏng sơ đồ mạch điện trên Proteus cho phép thiết kế toàn bộ hệ thống điện một cách hiệu quả.
Tất cả các hạng mục và mục đích của đề tài này đều nhằm tạo nền tảng cho một nghiên cứu lớn hơn, cụ thể là việc áp dụng Hệ điều hành Robot (ROS) cho xe tự hành.
NHIỆM VỤ VÀ GIỚI HẠN CỦA ĐỀ TÀI
Nhiệm vụ đề tài bao gồm:
- Giảm được số lượng ảnh cần để traning
- Tăng tính ổn định ở phần cứng cho xe
- Tăng tỉ lệ thành công khi vận hành
- Vận hành xe đi xa hơn (xung quanh khuôn viên khoa)
- Xây dựng được thuật toán CNN cho việc traning model
Biểu đồ PID không thể đạt được độ hoàn hảo do sai số lớn từ các bánh răng của hộp số được điều khiển bởi động cơ, cùng với việc module encoder không được thiết kế để hoạt động trong điều kiện khắc nghiệt.
- Xe sẽ được training nhiều phần khác nhau
- Các yếu tố môi trường ( mưa gió lớn hoặc quá tối) vẫn chưa khắc phục được
- Tốc độ xử lý không được cải thiện vì toàn bộ quá trình nâng cấp đều dựa trên cơ sở phần cứng cũ có sẵn trên xe
Các cải tiến đã được thực hiện nhằm nâng cao hiệu suất hoạt động của xe trong quá trình thực hiện đề tài Những cải tiến này phù hợp với khả năng của nhóm, tuy nhiên, chưa được kiểm nghiệm trên các thiết bị đo kiểm chính xác.
PHƯƠNG PHÁP NGHIÊN CỨU
- Phân tích dữ liệu, công trình nghiên cứu trong và ngoài nước
- Tham khảo các đồ án được lưu trữ trong thư viện
- Lập trình và gia tăng các điều kiện có thể áp dụng cho xe tự hành
- Tiến hành thực nghiệm nhiều lần để rút ra kết quả và tổng quan số liệu thu được
- Hiệu chỉnh số liệu được tìm ra từ các lần thực nghiệm tiến hành tinh chỉnh và điều khiển như mong muốn
- Giải quyết các vấn đề xảy ra, các lỗi thường gặp khi xe vận hành phát sinh những yếu tố đặc biệt
- Nghiên cứu từ các dữ liệu có từ nhóm trước
CƠ SỞ LÝ THUYẾT
XE TỰ HÀNH
2.1.1 Giới thiệu về xe tự hành
Tự hành là khả năng của máy móc thực hiện nhiệm vụ mà không cần sự điều khiển của con người Hệ thống tự hành (autonomous system) bao gồm cả phần cứng và phần mềm, có khả năng tự động thực hiện các nhiệm vụ khi được kích hoạt Nó có khả năng cảm nhận và phản ứng linh hoạt với môi trường xung quanh.
Hệ thống tự hành không chỉ áp dụng cho phương tiện không người lái như robot, mà còn được tích hợp vào các phương tiện có người điều khiển như ô tô và máy bay Nhiều ô tô hiện đại được trang bị công nghệ tiên tiến như thắng chống khóa, hệ thống điều khiển độ ma sát và thăng bằng, tay lái điện, dây an toàn tự thắt khẩn cấp và đệm khí Các mẫu xe cao cấp hơn còn có hệ thống lái xe thông minh, tự động giữ làn đường, tránh va chạm và tự đậu xe Trong khi đó, máy bay thương mại hiện đại cũng có mức độ tự động hóa cao trong từng giai đoạn của chuyến bay.
Xe không người lái không còn là lĩnh vực độc quyền của các hãng xe lớn như Ford, Daimler, Toyota, và Nissan, mà đang trở thành sân chơi cho các công ty phần mềm Nghiên cứu công nghệ xe tự hành hiện nay chủ yếu tập trung vào hai lĩnh vực quan trọng: phát hiện làn đường và nhận dạng đối tượng.
Phát hiện làn đường đã được nghiên cứu trong nhiều thập kỷ, với phần lớn hệ thống này được phát triển và ứng dụng trong các loại xe sang.
Nhận dạng đối tượng: Đây là một thành phần quan trọng của hệ thống xe tự hành
Gần đây, công nghệ nhận dạng đối tượng đã có những tiến bộ vượt bậc, cho phép nhận diện các đối tượng tĩnh như xe đạp, người đi bộ, ô tô và biển báo giao thông Công nghệ này đang hướng tới khả năng nhận dạng các đối tượng động, bao gồm xe và người đang di chuyển trên đường thực.
2.1.2 Cấp độ xe tự hành
Cấp độ 0 hoàn toàn phụ thuộc vào người lái trong việc điều khiển các tính năng của xe, không có tính năng tự lái Hầu hết các xe hiện nay trên thị trường, bao gồm cả những mẫu xe có tính năng như cảnh báo va chạm và cảm biến điểm mù, đều thuộc cấp độ này.
Cấp độ 1 của hệ thống hỗ trợ người lái bao gồm một số tính năng như điều khiển tốc độ hoặc hướng lái, nhưng không thể thực hiện đồng thời cả hai chức năng Một ví dụ điển hình là tính năng cruise control, cho phép giữ chân ga tự động theo thiết lập của người lái Ngoài ra, hãng Subaru cũng trang bị tính năng điều khiển làn đường cho những mẫu xe phổ thông Các xe hơi có khả năng tự phanh khẩn cấp cũng thuộc vào cấp độ này.
Cấp độ 2 của hệ thống hỗ trợ lái xe cung cấp nhiều tính năng tự động hơn, nhưng vẫn không thể điều khiển xe trong mọi tình huống, như việc nhập làn trên cao tốc Một số hãng xe cao cấp như Volvo, Mercedes-Benz và BMW đã giới thiệu tính năng tự điều khiển hướng lái và tốc độ mà không cần tương tác từ người lái trong thời gian ngắn (dưới 1 phút) Tuy nhiên, người lái vẫn phải theo dõi điều kiện xung quanh trong suốt quá trình di chuyển Tính năng Autopilot của Tesla cũng được xem là cấp độ 2, với khả năng điều chỉnh lực xoay trên vô-lăng dựa vào sự tập trung của tài xế.
Cấp độ 3 của xe tự lái cho phép tự điều hành trong mọi tình huống, khác với cấp độ 2 Xe sẽ tự theo dõi điều kiện đường xá nhưng sẽ chuyển giao quyền điều khiển cho người lái khi không thể xử lý tình huống Theo định nghĩa của SAE, xe cấp độ 3 yêu cầu can thiệp của con người khi hệ thống tự lái gặp lỗi Tuy nhiên, một số hãng như Ford và Volvo cho rằng điều này có thể ảnh hưởng đến an toàn và quyết định bỏ qua giai đoạn này.
Cấp độ 4 của xe tự lái cho phép xe hoạt động mà không cần sự can thiệp của lái xe, với khả năng tự dừng lại khi phát hiện lỗi Các hãng xe như Tesla và Mercedes-Benz đã trang bị tính năng tự giảm tốc độ hoặc phát cảnh báo bằng đèn khi người lái mất tập trung Đặc biệt, Ford và Volvo đã công bố kế hoạch ra mắt xe tự lái cấp độ 4 trước năm 2021.
Cấp độ 5 của xe tự lái là giai đoạn cuối cùng, cho phép xe tự điều khiển trong mọi điều kiện mà không cần sự can thiệp của con người Để đạt được cấp độ này, cần nhiều cải tiến công nghệ, đặc biệt là sự phát triển từ cấp độ 4 Ở cấp độ 5, xe có khả năng xử lý mọi tình huống mà không cần đến chân ga, tay lái hay chân phanh, vì không còn người lái bên trong.
Chưa có hãng xe nào công bố lịch trình cụ thể cho giai đoạn cuối cùng của việc phát triển công nghệ, mà chỉ đưa ra một mốc thời gian chung là khoảng 10 năm tới.
PHƯƠNG PHÁP NHẬN DIỆN LANE
Do môi trường thực nghiệm không có lane, nhóm em đã chọn phương pháp nhận dạng dựa trên các yếu tố đặc điểm, sử dụng TensorFlow và Keras với nguyên lý deep learning Bên cạnh đó, chúng em cũng phát triển thêm các thư viện hỗ trợ như Matplotlib, Numpy, và nhiều thư viện khác.
Deep learning sử dụng Tensorflow và Keras trên môi trường Anaconda3
Để xây dựng dữ liệu hiệu quả, chúng ta cần phát triển các mô hình thần kinh nhân tạo dựa trên nền tảng của đề tài cũ, mở rộng phạm vi hoạt động và nâng cao độ chính xác trong việc nhận diện các đường đi đã được huấn luyện Để thực hiện điều này, việc khởi tạo môi trường cho thuật toán bằng Anaconda3 là rất cần thiết.
Hình 2.1 Các cấp độ xe tự hành
Bước 1: Khởi tạo một môi trường ảo trên Anaconda3
Bước 2 + 3: Cài đặt và kiểm tra các thư viện cho môi trường
Sau đó tiến hành chụp ảnh ở môi trường thực nghiệm và lọc, chọn ảnh để traning
Hình 2.2 Khởi tạo môi trường
Hình 2.3 Cài đặt và kiểm tra các thư viện
Khởi tạo thuật toán chụp ảnh bằng python và chụp ảnh chuẩn bị đào tạo mô hình.Xây dựng dữ liệu đào tạo mô hình:
Bước 1: Chuẩn bị các dữ liệu đầu vào, chia file ảnh theo 8 thư mục được sắp xếp sẵn
Bước 2: Sắp xếp dữ liệu theo thứ tự nhằm nhận diện các làn đường trong môi trường, từ đó nâng cao độ chính xác cho xe.
Hình 2.4 Thuật toán chụp ảnh bằng python
Hình 2.5.Chuẩn bị các file ảnh training
Bước 3: Tiến hành đào tạo mô hình trí tuệ nhân tạo, thời gian phụ thuộc vào dung lượng dữ liệu đào tạo và thiết bị đào tạo
Hình 2.6 Tạo liên kết từ thuật toán traning đến thư mục chứa dữ liệu
Sau khi đào tạo kết thúc, ta tiến hành sử dụng mô hình thần kinh nhân tạo đã được chạy trên thực tế
Sau khi cải tiến hệ thống lái và thay thế bánh xe, độ chính xác của hệ thống lane đã được nâng cao đáng kể, ngay cả trong điều kiện ánh sáng yếu vào lúc 3 giờ 56 phút chiều.
Hạn chế: Tuy nhiên vẫn chưa khắc phục được tình trạng nhiễu do các vật thể khác gây ra
Hình 2.9 Thử nghiệm file traning và thuật toán Hình 2.8 Kết quả sau khi hoàn tất quá trình traning
THUẬT TOÁN PID
PID là một hệ thống điều khiển bao gồm ba thành phần chính: điều khiển tỉ lệ, điều khiển tích phân và điều khiển vi phân Hệ thống này có khả năng tối ưu hóa sai số, nâng cao tốc độ phản hồi, giảm thiểu hiện tượng quá điều chỉnh và hạn chế sự dao động.
Bộ điều khiển PID, viết tắt của "Proportional-Integral-Derivative", là một kỹ thuật điều khiển quá trình quan trọng, giúp giảm thiểu sai số thông qua ba yếu tố chính: tỉ lệ, tích phân và vi phân Kỹ thuật này hoạt động bằng cách điều chỉnh tín hiệu sai số dựa trên ảnh hưởng của các tác động tỉ lệ, tích phân, và tốc độ thay đổi của dữ liệu trước đó Điều khiển PID thường được áp dụng trong các hệ thống điện, tự động hóa và điện tử, nhờ vào tính hiệu quả của nó trong việc duy trì sự ổn định và chính xác trong quy trình điều khiển.
Hiện nay, thay vì sử dụng các chip chuyên dụng như PID, Atmega để tích hợp thuật toán, chúng ta có thể sử dụng Arduino hoặc Raspberry Pi để nhúng thuật toán thông qua các vi mạch điều khiển này.
2.3.2 Nguyên lý của thuật toán
Một chiếc xe tự động được thiết kế với Arduino, cảm biến âm thanh và bộ điều khiển động cơ có khả năng di chuyển theo một đường thẳng Để đạt được điều này, thuật toán PID là giải pháp tối ưu để điều chỉnh và kiểm soát chuyển động của xe.
Để bánh xe quay đạt 200 vòng/giây, cần thiết lập giá trị pwm = 200 cho động cơ Tuy nhiên, khi xe di chuyển vào mép lề bãi cát, bánh trái chạy trên đường bình thường trong khi bánh phải gặp ma sát lớn, chỉ quay được 100 vòng/giây Do đó, xe sẽ bị lệch sang phải với độ lỗi bánh xe phải là 100 vòng Để xe có thể chạy thẳng, cần tăng tốc độ pwm cho động cơ bên phải nhằm đạt được 200 vòng/giây bất kể ma sát Từ độ lỗi này, có thể quy đổi thành giá trị pwm cần thiết để truyền vào cho động cơ.
Khi này pwm = 200 + 50 (giả sử: 100 vòng/giây ~ 50 pwm)
* Lưu ý: những con số trong ví dụ này là giả định
Kết quả của thuật toán cho biết độ lỗi của tốc độ động cơ tại một thời điểm cụ thể Thông tin này được sử dụng để điều chỉnh và áp dụng hợp lý vào bài toán.
Giá trị trả về của thuật toán được tổng hợp từ ba thành phần chính là P, I, D, phản ánh độ lỗi theo thời gian trong quá trình hoạt động của động cơ.
13 độ lỗi ở thời điểm hiện tại, độ lỗi dựa trên toàn bộ quá trình và đạo hàm độ lỗi ở thời điểm hiện tại
Đầu ra của bộ điều khiển PID được tính toán từ ba thành phần chính: tỉ lệ, tích phân và vi phân Biểu thức cuối cùng của thuật toán PID xác định độ lợi tỉ lệ Kp, đóng vai trò quan trọng trong việc điều chỉnh phản hồi của hệ thống.
Giá trị càng lớn, tốc độ đáp ứng càng nhanh, dẫn đến sai số lớn hơn và cần bù khâu tỉ lệ cao hơn Nếu độ lợi tỉ lệ quá lớn, hệ thống sẽ trở nên không ổn định và gây ra dao động Độ lợi tích phân Ki cũng đóng vai trò quan trọng trong quá trình này.
Giá trị lớn dẫn đến việc sai số ổn định bị khử nhanh chóng, nhưng đồng thời cũng tạo ra độ vọt lố lớn hơn Mọi sai số âm tích phân trong quá trình đáp ứng quá độ cần được triệt tiêu bằng sai số dương trước khi hệ thống đạt trạng thái ổn định Độ lợi vi phân Kp đóng vai trò quan trọng trong quá trình này.
Giá trị lớn giúp giảm độ vọt lố, nhưng cũng làm chậm quá trình đáp ứng và có thể gây mất ổn định do khuếch đại nhiễu tín hiệu trong phép vi phân sai số.
Công thức tính PID số nghiên cứu từ đề tài của T.s Nguyễn Văn Đông Hải tocdo=((xung/250)*(1/T)*60); xung=0;
E = tocdodat - tocdo; alpha = 2*T*Kp + Ki*T*T + 2*Kd; beta = T*T*Ki - 4*Kd - 2*T*Kp; gamma = 2*Kd;
Output = (alpha*E + beta*E1 + gamma*E2 + 2*T*LastOutput)/(2*T); LastOutput = Output;
Hình 2.10 Công thức PID (Wikipedia.com)
GIỚI THIỆU VỀ PYTHON ANACONDA3
Python Anaconda là một nền tảng mã nguồn mở chuyên về khoa học dữ liệu, bao gồm các thư viện và gói phần mềm được viết bằng Python và R Nền tảng này cung cấp các công cụ hữu ích cho lập trình viên, chuyên gia phân tích dữ liệu và các chuyên viên kinh tế - tài chính trong công việc phân tích dữ liệu Anaconda giúp đơn giản hóa quy trình phát triển và quản lý các dự án khoa học dữ liệu.
Các chương trình phân tích dữ liệu được phát triển bằng Python Anaconda mang lại tính linh hoạt cao, cho phép chạy trên nhiều nền tảng như Windows, Linux và Mac OS Nhờ vào việc sử dụng Virtual Environment của Python, các môi trường phân tích dữ liệu có thể hoạt động song song mà không gây ảnh hưởng lẫn nhau.
Python Anaconda sở hữu một cộng đồng người dùng rộng lớn với hơn 20 triệu người trên toàn thế giới Người dùng dễ dàng nhận được sự hỗ trợ từ cộng đồng trong việc debug và tìm kiếm các đoạn code mẫu cho dự án của mình.
Thu thập dữ liệu là quá trình đơn giản nhất, thường bắt đầu bằng việc đọc dữ liệu từ các file định dạng tiêu chuẩn như csv, txt, và xml.
15 dữ liệu từ các files tiêu chuẩn này được nạp vào chương trình, công việc phân tích dữ liệu sẽ bắt đầu được tiến hành
Slicing và dicing là quá trình cắt ghép dữ liệu sau khi nạp từ các nguồn bên ngoài vào chương trình Việc này nhằm xử lý dữ liệu trước khi phân tích, giúp tạo ra thông tin phù hợp với tiêu chuẩn phân tích và loại bỏ các thông tin không cần thiết Các thông tin thừa có thể bao gồm các trường có giá trị không phù hợp yêu cầu phân tích và các trường có giá trị null.
Trực quan hóa dữ liệu giúp các chuyên gia và người đọc thông thường đánh giá số liệu một cách chính xác hơn Quá trình này được thực hiện thông qua việc sử dụng các hàm trong thư viện khoa học dữ liệu để biểu diễn thông tin dưới dạng đồ hình và đồ thị.
Phân tích dữ liệu là quá trình mà các chuyên gia dữ liệu xem xét các đồ thị và hình ảnh của tệp dữ liệu đã được trực quan hóa Ví dụ, khi phân tích tệp dữ liệu liên quan đến việc làm, các nhà phân tích cần chú ý đến các đồ thị thể hiện số lượng việc làm trong từng ngành nghề.
Dựa trên phân tích dữ liệu, các chuyên gia có khả năng xây dựng mô hình dự đoán cho tương lai, mang lại lợi thế lớn cho việc phân tích dữ liệu Điều này giúp người dùng có cái nhìn rõ ràng hơn về công việc hiện tại của họ.
GIỚI THIỆU VỀ NUMPY- MATPLOTLIB
Hình 2.12 Chức năng Anaconda- Python
NumPy, viết tắt của "Numeric Python" hoặc "Numerical Python", là một mô-đun mã nguồn mở cho Python, cung cấp các chức năng biên dịch nhanh cho các phép toán số học Nó bổ sung cho ngôn ngữ lập trình Python với các cấu trúc dữ liệu mạnh mẽ, cho phép tính toán hiệu quả trên các mảng và ma trận đa chiều, bao gồm cả các ma trận và mảng lớn Ngoài ra, NumPy còn cung cấp một thư viện phong phú các hàm toán học nâng cao để xử lý các mảng và ma trận.
2.5.2 Matplotlib Để thực hiện các suy luận thống kê cần thiết, cần phải trực quan hóa dữ liệu của bạn và Matplotlib là một trong những giải pháp như vậy cho người dùng Python Nó là một thư viện vẽ đồ thị rất mạnh mẽ hữu ích cho những người làm việc với Python và NumPy Module được sử dụng nhiều nhất của Matplotib là Pyplot cung cấp giao diện như MATLAB nhưng thay vào đó, nó sử dụng Python và nó là nguồn mở.
LÝ THUYẾT VỀ MẠNG NEURAL TÍCH CHẬP
Mạng nơ-ron tích chập (CNN) là một trong những mô hình deep learning phổ biến và có ảnh hưởng lớn trong lĩnh vực thị giác máy tính CNN được áp dụng rộng rãi trong các bài toán như nhận diện hình ảnh, phân tích video, hình ảnh MRI, và cả trong xử lý ngôn ngữ tự nhiên, với hiệu quả cao trong việc giải quyết các vấn đề này.
Trước khi CNN trở thành phổ biến, thuật toán SIFT và HOG là hai phương pháp rút trích đặc trưng nổi bật, dựa trên việc lấy giá trị đặc trưng từ ma trận đầu vào và biểu diễn chúng qua các vector xác suất Tuy nhiên, do tính lỗi thời và độ tin cậy không cao, hai thuật toán này dần bị thay thế.
Mô hình CNN có lịch sử phát triển lâu dài, bắt đầu từ năm 1980 khi một nhà khoa học máy tính người Nhật giới thiệu kiến trúc gốc Đến năm 1998, Yan LeCun đã lần đầu tiên huấn luyện mô hình CNN bằng thuật toán backpropagation để nhận dạng chữ viết tay Tuy nhiên, chỉ đến năm 2012, Alex Krizhevsky, học trò của Geoffrey Hinton, đã phát triển mô hình CNN (AlexNet) và sử dụng GPU để tăng tốc quá trình huấn luyện deep nets Sự kiện này đã giúp AlexNet đạt được vị trí top 1 trong cuộc thi ImageNet với độ lỗi phân lớp top 5 giảm đáng kể.
Sự phát triển mạnh mẽ của deep CNN, nhờ vào sự hỗ trợ của GPU, đã tạo ra một bước tiến vượt bậc trong lĩnh vực Computer Vision, giảm thiểu 10% so với các mô hình truyền thống trước đây và giải quyết hiệu quả nhiều vấn đề trong ngành.
2.6.2 Phân loại ảnh (Image Classification)
Phân loại ảnh là một bài toán quan trọng trong lĩnh vực thị giác máy tính Trước đây, một số phương pháp như SIFT và HOG đã được sử dụng để rút trích đặc trưng hình ảnh, nhưng hiệu quả vẫn chưa cao Con người có khả năng phân loại hình ảnh từ dữ liệu đầu vào là bức ảnh, trong khi máy tính biểu diễn hình ảnh dưới dạng ma trận Kích thước ma trận tương ứng với kích thước ảnh, và nếu là ảnh màu RGB, kích thước sẽ được nhân thêm 3 kênh Ví dụ, một bức ảnh có kích thước 300x200 sẽ tạo ra ma trận 300x200 cho ảnh đơn sắc và 300x200x3 cho ảnh RGB.
2.6.3 Cấu trúc của mạng neural tích chập
Cấu trúc cơ bản của mạng nơ-ron tích chập (CNN) bao gồm các lớp: convolution, nonlinear, pooling và fully connected, liên kết theo trình tự nhất định Ảnh đầu vào sẽ được xử lý qua lớp convolution và lớp nonlinear, sau đó giá trị tính toán sẽ được chuyển đến lớp pooling Bộ ba lớp này có thể lặp lại nhiều lần trong mạng Cuối cùng, thông tin sẽ được truyền đến lớp fully connected và hàm softmax, giúp xác định xác suất của vật thể xuất hiện trong ảnh.
Lớp tích chập (Convolution layer) là thành phần quan trọng nhất trong mạng nơ-ron tích chập, có chức năng chính là phát hiện các đặc trưng không gian hiệu quả Lớp này bao gồm bốn thành phần chính: ma trận đầu vào, bộ lọc (filters), vùng nhìn thấy (receptive field) và bản đồ đặc trưng (feature map) Lớp tích chập nhận đầu vào là ảnh 3 chiều, trong đó bộ lọc sẽ trượt qua ma trận ảnh để thực hiện phép tích chập, xác định vùng tương ứng gọi là receptive field Kết quả của quá trình này là bản đồ đặc trưng, phản ánh các đặc điểm quan trọng của ảnh đầu vào.
Hình 2.14 So sánh Filter Hình 2.13 Cấu trúc của CNN
Hàm kích hoạt ReLU (Rectified Linear Unit) f = max(0,x) hiện đang là lựa chọn phổ biến nhất trong các mạng nơ-ron tích chập (CNN) Trước đây, các hàm Sigmoid và Tanh từng được ưa chuộng, nhưng ReLU đã thay thế nhờ vào tính đơn giản và khả năng hạn chế tình trạng Vanishing Gradient, giúp cải thiện hiệu suất đào tạo và độ chính xác ReLU được sử dụng sau các lớp tích chập (Conv layer), gán giá trị âm thành 0 và giữ nguyên các giá trị đầu vào lớn hơn 0.
Hình 2.15 Công thức hàm kích hoạt
Sau khi áp dụng hàm kích hoạt, việc sử dụng hàm pooling giúp giảm kích thước ma trận Điều này cho thấy các giá trị đặc trưng của ảnh chuyển từ vị trí tuyệt đối sang giá trị tương đối, từ đó giảm kích thước ma trận và thời gian huấn luyện.
Lớp pooling, hay còn gọi là hàm tổng hợp, có nhiệm vụ rút trích thông tin từ ma trận đầu ra sau khi đã thực hiện tích chập và áp dụng hàm kích hoạt.
Có 2 loại tổng hợp loại thứ nhất là lấy max của ma trận, loại thứ hai là lấy trung bình của ma trận
Nguyên hoạt động của lớp này là tạo ra một bộ lọc có kích thước nhỏ, thường là 2x2, để quét qua các vùng tương ứng của ma trận và thực hiện các phép toán cần thiết.
Khi áp dụng vùng quét, nếu chọn công thức là max, hệ thống sẽ chọn phần tử có giá trị lớn nhất trong vùng của bộ lọc Ngược lại, nếu chọn công thức average, máy sẽ tính giá trị trung bình bằng cách cộng giá trị của cả 4 ô và chia cho 4 để đưa ra kết quả.
Các kết quả thu được sẽ được sắp xếp vào một ma trận nhỏ hơn so với ma trận đầu ra, nhưng vẫn giữ được các giá trị đặc trưng của hình ảnh để chuẩn bị cho bước tiếp theo.
Tầng cuối cùng của CNN có chức năng chuyển đổi ma trận đặc trưng thành các vector xác suất cho các đối tượng cần dự đoán thông qua hàm softmax Số lượng ma trận đặc trưng sẽ được chuyển đổi thành các vector có số chiều tương ứng với số lớp cần phân loại.
Trong lớp mạng này, mỗi nơ-ron sẽ kết nối với tất cả nơ-ron của các lớp khác Để đưa hình ảnh từ các lớp trước vào mạng, cần phải dàn phẳng bức ảnh thành một dạng phù hợp.
GIỚI THIỆU VỀ MỘT SỐ PHẦN MỀM HỖ TRỢ KHÁC
Proteus là phần mềm mô phỏng mạch điện tử do Lancenter Electronics phát triển, cho phép người dùng thiết kế mạch và lập trình điều khiển cho các vi điều khiển như MCS-51, PIC, AVR Phần mềm này hỗ trợ mô phỏng hầu hết các linh kiện điện tử phổ biến, đặc biệt là các MCU như PIC, 8051, AVR và Motorola.
Phần mềm Proteus là một công cụ thiết kế và mô phỏng mạch điện tử toàn diện, bao gồm hai chương trình chính là ISIS và ARES Trong đó, ISIS cho phép người dùng mô phỏng mạch điện tử, còn ARES được sử dụng để vẽ mạch in Ngoài ra, Proteus cũng hỗ trợ mô phỏng các loại Vi Điều Khiển một cách hiệu quả, giúp người dùng thiết kế và kiểm tra hệ thống điện tử phức tạp.
Proteus là một bộ công cụ mạnh mẽ chuyên về mô phỏng mạch điện tử, hỗ trợ 22 dòng vi điều khiển như PIC, 8051, dsPIC, AVR, HC11, MSP430, ARM7/LPC2000 và các giao tiếp như I2C, SPI, CAN, USB, Ethernet Nó còn cho phép mô phỏng hiệu quả các mạch số và mạch tương tự.
Autodesk Inventor là phần mềm mô hình 3D hàng đầu của Autodesk, cho phép người dùng thiết kế, tạo hình mẫu và kiểm tra ý tưởng sản phẩm Với khả năng tạo ra các nguyên mẫu chính xác về khối lượng, áp lực, độ ma sát và tải trọng trong môi trường 3D, Inventor hỗ trợ thiết kế từ khuôn đúc cơ bản đến chi tiết máy phức tạp Phần mềm tích hợp các công cụ mô phỏng và phân tích, giúp trực quan hóa sản phẩm hiệu quả Ngoài ra, Inventor còn kết hợp CAD và các công cụ giao tiếp thiết kế, nâng cao năng suất làm việc và giảm thiểu lỗi, tiết kiệm thời gian cho người dùng.
Arduino IDE là phần mềm mã nguồn mở giúp người dùng viết và tải mã trong môi trường thời gian thực Mã được lưu trữ trên đám mây, thường được sử dụng bởi những ai cần mức độ dư thừa cao Hệ thống hoàn toàn tương thích với mọi bo mạch phần mềm Arduino.
Arduino IDE có khả năng hoạt động trên các hệ điều hành Windows, Mac và Linux, với phần lớn thành phần được viết bằng JavaScript, giúp việc chỉnh sửa và biên dịch trở nên dễ dàng Ngoài việc hỗ trợ mã viết, IDE còn tích hợp các tính năng hữu ích, cho phép người dùng chia sẻ thông tin với các bên liên quan trong dự án một cách thuận tiện Hơn nữa, người dùng có thể tùy chỉnh bố trí và sơ đồ theo nhu cầu của mình.
Hướng dẫn chi tiết sẽ hỗ trợ hiệu quả trong quá trình cài đặt ban đầu, đặc biệt cho những người thiếu kinh nghiệm với khung công tác Arduino.
XÂY DỰNG VÀ LẬP TRÌNH HỆ THỐNG
GIỚI THIỆU
Chúng em sẽ phát triển dự án dựa trên đề tài "Xe tự hành chạy theo Lane và nhận diện biển báo", nhằm hoàn thành các tiêu chí đã đề ra.
- Mở rộng phạm vi tự hành (khuôn viên khoa cơ khí động lực)
- Giảm số lượng ảnh training đầu vào cho xe
- Lập trình Pid cho hai động cơ chính để xe ổn định
Để đáp ứng các yêu cầu của hệ thống lái mới, việc thiết kế thuật toán cần được điều chỉnh và tối ưu hóa hoàn toàn, nhằm đảm bảo tính chính xác và hiệu quả trong quá trình vận hành.
Mô hình xe tự hành được thiết kế, chế tạo và hoàn thiện trong thời gian 15 tuần với các công việc nhóm bao gồm thiết kế và thi công hệ thống lái sử dụng động cơ bước kết hợp với bộ trục vít – bánh vít để thực hiện đánh lái phục vụ cho mục đích cho xe chạy tự hành Mô hình xe được trang bị hai camera bên phải và phía trước để nhận diện lane và nhận diện biển báo stop, đồng thời sử dụng laptop làm bộ xử lý trung tâm để xử lý lượng dữ liệu lớn và hoạt động ổn định trên quãng đường dài Khung xe điện có sẵn nhẹ, nhỏ gọn được lựa chọn để xây dựng mô hình xe, phù hợp với điều kiện thực tế và tạo điều kiện thuận lợi cho việc nghiên cứu lập trình và thực nghiệm trên xe.
Bánh hơi có bán kính 15 cm, được lắp với niền bánh bằng kim loại và lốp cao su, mang lại độ bám đường tốt hơn, giúp xe chạy êm ái và ổn định hơn so với bánh bằng nhựa.
Phần truyền động của xe được nâng cấp với hai động cơ nhằm đạt tốc độ mong muốn Để tối ưu hóa tốc độ và cân bằng tốc độ bánh xe khi di chuyển thẳng, nhóm đã áp dụng thuật toán PID vào mô hình xe và encoder để thu thập tín hiệu tốc độ bánh xe.
Thiết kế sơ đồ khối
Về tổ chức sơ đồ khối vẫn được giữ nguyên như ban đầu, chỉ thay đổi một số chức năng của các khối:
- Khối nguồn: Cung cấp nguồn cho hệ thống
- Khối động cơ: Được chạy độc lập với thuật toán PID chỉ chịu sự ảnh hưởng đóng ngắt nguồn từ khối trung tâm
- Khối điều khiển và xử lý trung tâm: Điều khiển đóng ngắt PID (khi gặp bảng stop) điều khiển khối lái khi vào góc cua phù hợp
- Khối thu thập ảnh: Cụm 2 camera lấy ảnh từ môi trường truyền vào bộ xử lý trung tâm
XÂY DỰNG PHẦN CỨNG
3.2.1 Xây dựng khối điều khiển lái
Hình 3.4 Cơ cấu hệ thống lái Hình 3.3 Sơ đồ khối hệ thống
Hệ thống lái của mô hình xe bao gồm các bộ phận đơn giản và nhẹ, nhưng vẫn đảm bảo hiệu suất đánh lái tốt Cần đánh lái chính là bộ phận thực hiện việc kết nối với bánh vít, trong khi động cơ bước và trục vít được kết nối đồng bộ tốc độ qua một khớp nối kim loại.
3.2.1.1 Bộ Bánh vít – Trục vít
Truyền động trục vít – bánh vít là hệ thống bao gồm trục vít và bánh vít, hoạt động nhờ sự ăn khớp giữa ren của trục vít và răng của bánh vít Hệ thống này được sử dụng để truyền động quay giữa hai trục chéo nhau, thường với góc 90 độ Qua đó, chuyển động được truyền từ trục vít sang bánh vít với tỷ số truyền rất lớn, giúp nâng cao hiệu suất truyền động trong các ứng dụng cơ khí.
Hình 3.5 Hệ thống lái trên mô hình Ưu điểm của hệ thống trục vít – bánh vít:
- Làm việc êm, không ồn
- Có khả năng tự hãm
- Có độ chính xác động học cao
Nhược điểm của hệ thống trục vít – bánh vít:
- Sinh nhiệt nhiều do có vận tốc trượt lớn
Bộ truyền bánh vít – trục vít được chọn để nâng cao mô-men đánh lái, đảm bảo xe có thể điều khiển chính xác theo tín hiệu mà không bị ảnh hưởng bởi điều kiện mặt đường, sỏi đá hay vật cản Sự chính xác của bộ truyền này mang lại lợi ích lớn trong việc cải thiện khả năng điều khiển xe.
Khả năng điều khiển lái của xe trong các tình huống vào cua được cải thiện đáng kể nhờ bộ trục vít – bánh vít với tính năng tự hãm cao Điều này giúp xe tránh được tình trạng mất lái hoặc vượt lố do quán tính, mang lại sự an toàn và ổn định khi quay vòng.
Bảng 3.1 Bảng thông số của bộ trục vít – bánh vít
Kí hiệu Trục vít Bánh vít
Góc biên dạng ren 19.8198 độ
Chiều dài phần cắt ren b1 60 mm Đường kính vòng chia d1,2 7.1 mm 55 mm
Chiều rộng bánh vít b2 42.75 mm
Mo-men xoắn T 0.194 Nm 18.727 Nm
Hình 3.6 Mô phỏng nối trục trên Inventor
Hệ thống lái được điều khiển bằng Arduino Uno R3 cho phép điều chỉnh sang trái, phải và trở về vị trí giữa Để điều khiển hệ thống này, nhóm đã sử dụng động cơ bước kích thước 57.
Hình 3.8 Động cơ bước size 57 Hình 3.7 Bánh răng trục vít trên mô hình
Các chế độ điều khiển động cơ bước:
- Điều khiển dạng sóng (Wave): là phương pháp điều khiển cấp xung điều khiển lần lượt theo thứ tự chon từng cuộn dây pha
- Điều khiển bước đủ (Full step): là phương pháp điều khiển cấp xung đồng thời cho 2 cuộn dây pha kế tiếp nhau
Điều khiển nửa bước (Half step) là phương pháp điều khiển kết hợp giữa điều khiển dạng sóng và điều khiển bước đủ Phương pháp này cho phép giá trị góc bước nhỏ hơn hai lần so với điều khiển bước đủ, đồng thời tăng số bước của động cơ bước lên gấp đôi Tuy nhiên, điều khiển nửa bước yêu cầu bộ phát xung điều khiển phức tạp hơn.
Điều khiển vi bước (Microstep) là một phương pháp tiên tiến trong việc điều khiển động cơ bước, cho phép động cơ dừng và định vị tại vị trí nửa bước giữa hai bước đầy đủ Phương pháp này mang lại nhiều ưu điểm, bao gồm khả năng hoạt động với góc bước nhỏ và độ chính xác cao Ngoài ra, nhờ vào dạng sóng của xung cấp, động cơ hoạt động êm ái hơn và giảm thiểu hiện tượng cộng hưởng trong quá trình hoạt động.
3.2.1.3 Module TB6600 Để điều khiển động cơ bước một cách chính xác và dễ dàng hơn thì cách tối ưu nhất là nên sử dụng driver điều khiển động cơ bước Vì vậy nhóm em sử dụng TB6600 để điều khiển động cơ bước trên
Mạch điều khiển động cơ bước TB6600, sử dụng IC TB6600HQ/HG, phù hợp cho động cơ bước 2 pha hoặc 4 dây kích thước 42/57/86 với dòng tải tối đa 5A/42V DC Sản phẩm này thường được ứng dụng trong các máy móc như CNC, máy Laser và các thiết bị tự động khác.
Hình 3.9 Phương pháp điều khiển động cơ bước
31 Điện áp cấp cho driver có thể từ 12- 48V, với dòng điện đầu ra tối đa là 5A đủ để cung cấp cho động cơ bước trên
TB6600 sử dụng công nghệ cách ly bằng opto cho cả đầu vào và đầu ra, giúp bảo vệ khỏi quá áp, thấp áp, và quá dòng, đồng thời ngăn ngừa tình trạng ngắn mạch, giảm nguy cơ cháy động cơ Thiết bị hoạt động hiệu quả trong dải nhiệt độ từ -10 đến 45 độ C.
Cài đặt và ghép nối:
- DC+: Nối với nguồn điện từ 9 - 40VDC
- DC- : Điện áp (-) âm của nguồn
- A+ và A -: Nối vào cặp cuộn dây của động cơ bước
- B+ và B- : Nối với cặp cuộn dây còn lại của động cơ
- PUL+: Tín hiệu cấp xung điều khiển tốc độ (+5V) từ BOB cho M6600
- PUL-: Tín hiệu cấp xung điều khiển tốc độ (-) từ BOB cho M6600
- DIR+: Tín hiệu cấp xung đảo chiều (+5V) từ BOB cho M6600
- DIR-: Tín hiệu cấp xung đảo chiều (-) từ BOB cho M6600
- ENA+ và ENA -: khi cấp tín hiệu cho cặp này động cơ sẽ không có lực momen giữ và quay nữa
Có thể đấu tín hiệu dương (+) chung hoặc tín hiệu âm (-) chung
Cơ cấu cơ khí dẫn động thước lái đã được cải tiến từ nguyên lý dẫn động 2 bánh răng sang khối dẫn động bánh răng trục vít Sự thay đổi này nhằm đảm bảo độ chính xác và ổn định trong quá trình thu thập hình ảnh, giúp khối thu thập hình ảnh có thể chụp được các bức ảnh rõ nét và duy trì sự ổn định khi chạy thuật toán.
3.2.2 Khối điều khiển và xử lý trung tâm
Đề tài "Xe tự hành chạy theo Lane và nhận diện biển báo" được phát triển với hai thuật toán hoạt động trên hai nền tảng khác nhau là Windows và Ubuntu Sau khi so sánh và phân tích kết quả, chúng tôi quyết định sử dụng thuật toán trên nền tảng Windows.
Việc lựa chọn laptop HP Pavilion thay vì các module như Jetson Nano và Raspberry Pi là do nhu cầu thực hiện nhiều tác vụ đồng thời trong quá trình thực nghiệm và nâng cấp, chẳng hạn như quay màn hình, theo dõi biểu đồ và kiểm tra độ chính xác của file training Với những lý do này, laptop trở thành giải pháp cần thiết và hiệu quả hơn so với các module đã đề cập.
Hình 3.11 Mô phỏng hệ thống lái trên Proteus
Quá trình thực nghiệm và phát triển đề tài yêu cầu sử dụng card đồ họa GPU mạnh mẽ và đáng tin cậy, vì điều này rất quan trọng cho việc training model và cài đặt.
Hình 3.15 Sơ đồ chân GPIO
34 các môi trường ảo cần phải sử dụng CUDA (Compute Unifited Device Architecture) và cuDNN (Nvidia CUDA Deep Neural Network) để tăng tốc các thuật toán sử dụng CNN
Những vấn đề như cuDNN, CNN và CUDA sẽ được đề cập chi tiết và rõ ràng ở phần sau
Arduino Uno R3 là phiên bản thứ ba của kit Arduino Uno, nổi bật với khả năng lập trình các ứng dụng phức tạp nhờ cấu hình mạnh mẽ với bộ nhớ ROM, RAM và Flash Kit này được trang bị nhiều ngõ vào ra Digital I/O, trong đó có nhiều ngõ hỗ trợ xuất tín hiệu PWM, cũng như các ngõ đọc tín hiệu Analog và các chuẩn giao tiếp như UART, SPI, TWI (I2C) Nguồn cấp cho Arduino Uno R3 có thể là 5V qua USB hoặc nguồn ngoài với điện áp khuyên dùng từ 7-12V DC Cần lưu ý rằng nếu nguồn vượt quá 20V, kit có thể bị hỏng, vì vậy cần cẩn thận khi cấp nguồn cho kit.
THIẾT BỊ, LINH KIỆN, MÔ-ĐUN VÀ SƠ ĐỒ NGUYÊN LÝ TOÀN MẠCH CỦA HỆ THỐNG
Bảng 3.2 Bảng thống kê các linh kiện, thiết bị nhóm đã sử dụng
Tên linh kiện Hình ảnh Chức năng Thông số kỹ thuật Động cơ bước size
Dẫn động cho hệ thống bánh răng trục vít
Giữ cho hệ thống lái chạy thẳng
Số pha: 2 pha Dòng điện: 3.0A Momen xoắn: 1.8Nm Khối lượng: 1.05KG Đường kính trục: 6.35mm
TB6600 Điều khiển động cơ bước nhờ tín hiệu từ arduino
Nối với nguồn điện từ 9 - 40VDC
Nhận mô-men từ động cơ bước và dẫn động thước lái
Tỉ số truyền 55 Modun 1 Góc ren xoắn 8.0171 độ Khoáng cách trục 32 Góc biên dạng ren 19.8198 độ Bước ren 3.14 mm Chiều rộng bánh vít 42.75 mm Mo-men xoắn 0.194Nm 18.727 Nm
Triển khai thuật toán, traning các model, chạy thuật toán chính, điều khiển Arduino
CPU Intel Core i5-8265U Ram 4 GB, DDR4, 2666 MHz
GPU NVIDIA GeForce MX130 2 GB & Intel UHD Graphics 620
Uno R3 Điều khiển động cơ bước, điều khiển PID
SRAM 2 KB (ATmega328P) EEPROM 1KB Tốc độ 16Mhz Arduino
Nano Điều khiển hệ thống giảm rung cho camera
EEPROM: 1KB Clock Speed: 16Mhz
Thu thập hình ảnh về cho thuật toán Độ phân giải 3MP Kết nối qua cổng USB Khối lượng 0.2 kg
Cân bằng 3 góc Pitch Yaw Roll theo điều khiển của arduino nano
Chủng loại: Analog RC Servo Điện áp: 4.8~6.6VDC Tốc độ quay:
0.17sec / 60 degrees 0.13sec / 60 degrees Cảm biến
Thu thập tín hiệu gia tốc gửi về cho arduino nano Điện áp sử dụng: 3~5VDC Điện áp giao tiếp: 3~5VDC Chuẩn giao tiếp: I2C Giá trị Gyroscopes trong khoảng: +/- 250 500 1000
Giá trị Acceleration trong khoảng: +/- 2g, +/- 4g, +/- 8g, +/- 16g
Nhận tính hiệu thông qua bánh răng dẫn động từ động cơ Điện áp sử dụng: 3~5VDC Độ phân giải 20 xung/vòng
Giảm áp 12v cho hệ thống giảm rung và driver TB6600 Điện áp đầu vào: Từ 3V đến 30V Điện áp đầu ra: Điều chỉnh được rong khoảng 1.5V đến 30V
Dòng đáp ứng tối đa là 3A Hiệu suất: 92%
Rơle Đóng ngắt nguồn động cơ khi có biển báo Stop
Sử dụng điện áp nuôi DC 5V
Relay mỗi Relay tiêu thụ dòng khoảng 80mA Điện thế đóng ngắt tối đa: AC250V ~ 10A hoặc DC30V ~ 10A
Có đèn báo đóng ngắt trên mỗi Relay
Có thể chọn mức tín hiệu kích 0 hoặc 1 qua jumper
Làm lực đẩy cho xe di chuyển
DC 6V: tốc độ 3600 vòng/phút không tải Dòng điện: 1.3A
DC 9.6V: tốc độ 7000vòng/phút không tải Dòng điện: 1.6A
DC 12V: tốc độ 11000vòng/phút không tải Dòng điện: 1.8A
43A Điều khiển động cơ RS 550 thông qua Arduino
Dòng điện tải mach: 43A (Tải trở) hoặc 15A (Tải cảm)
Tín hiệu logic điều khiển: 3.3 ~ 5V
Tần số điều khiển tối đa: 25KHz Ắc qui 12V Cấp nguồn cho toàn bộ hệ thống Ắc quy thắp sáng dân dụng
- Kích thước (Dài x Rộng x Cao): 232 x 91 x 165 mm
Hình 3.34 Sơ đồ mạch của hệ thống trên proteus
LẬP TRÌNH HỆ THỐNG
3.4.1 Lập trình PID cho động cơ Động cơ ban đầu được lập trình điều khiển qua mạch BTS với thuật toán đơn giản như sau:
To control a motor using Arduino, start by initializing the serial communication with `Serial.begin(9600);` Set the motor control pins as outputs using `pinMode` for motorA1, motorA2, motorB1, and motorB2 Additionally, configure pin 9 for the right wheel speed and pin 11 for the left wheel speed Activate the motors by writing HIGH to motorA1 and motorB1 while setting motorA2 and motorB2 to LOW Adjust the speeds of the wheels using `analogWrite`, applying the desired speed values to pins 9 and 11, with a difference for the left wheel speed Finally, set pin 2 to HIGH to complete the motor control setup.
Thuật toán điều khiển động cơ dựa trên việc mở và đóng các chân transistor, tuy nhiên, nhược điểm của phương pháp này là khiến động cơ không hoạt động đồng tốc, dẫn đến xe chạy lệch khỏi đường thẳng Điều này ảnh hưởng nghiêm trọng đến độ chính xác của xe, đặc biệt khi di chuyển trên quãng đường dài hoặc trong các sa hình phức tạp Để khắc phục vấn đề này, nhóm chúng tôi đã phát triển một thuật toán PID số dựa trên nền tảng hiện có.
PID được tính như sau:
Tốc độ được thiết lập là: 995 vòng
Thời gian lấy mẫu là T: 0,01 giây
Biến Error = tốc độ đặt – tốc độ, tốc độ được tính theo số xung của động cơ x = 2*T*Kp + Ki*T*T + 2*Kd y = T*T*Ki – 4xKd - 2*T*Kp z = 2*Kd
Output = (x*Error + y*Error1 + z*Error2 + 2*T*LastOutput)/(2*T)
Thuật toán được tham khảo từ Ths.Nguyễn Văn Đông Hải khoa Điện - Điện tử trường Đại học Sư Phạm Kỹ Thuật Tp.HCM
Việc tính toán các chỉ số Kp, Ki, Kd cho động cơ dẫn động qua hộp số với 4 bánh răng và tín hiệu encoder là rất phức tạp do sai số lớn từ động cơ và bánh răng, đặc biệt khi xe di chuyển trong các điều kiện tải khác nhau Do đó, chúng tôi đã quyết định cho xe chạy không tải và kết nối với mạch đo điện áp từ động cơ để quan sát sự thay đổi điện áp, từ đó lựa chọn các chỉ số phù hợp và ổn định nhất Sau đó, xe được thử nghiệm chạy có tải trên nhiều loại mặt đường, tiến hành đo đạc và quan sát độ lệch của xe so với điểm xuất phát ban đầu Kết quả của các lần chạy thử sẽ được trình bày trong phần kết luận và đánh giá.
Hình 3.35 Mạch đo điện áp từ động cơ
Hình 3.36 Mô phỏng 3D bánh răng dẫn động module encoder
- Phương pháp dò chỉ số Kp Ki Kd
Hình 3.37 Mô phỏng 2D bánh răng dẫn động encoder
Hình 3.38 Bánh răng hoàn chỉnh được lắp đặt trên xe
Hình 3.39 Bảng phương pháp dò các chỉ số
3.4.2 Cài đặt Anaconda3 và NvidiaCuda
Yêu cầu phần cứng và phần mềm:
- Hệ điều hành: Win 7, Win 8/8.1, Win 10, Red Hat Enterprise Linux/CentOS 6.7, 7.3, 7.4, and 7.5, and Ubuntu 12.04+
- Ổ cứng trống tối thiểu 3GB để tải và cài đặt
Tiến hành cài đặt Anaconda3 theo các bước:
Hình 3.40 =>3.47 Các bước thực hiện cài đặt
Anaconda3 là một công cụ hữu ích để tạo ra các môi trường cho việc chạy thuật toán Để khởi tạo môi trường Anaconda với ngôn ngữ Python, bạn có thể sử dụng câu lệnh: `conda create -n name anaconda python=3.6.8`.
*name là tên môi trường đặt
Cách mở môi trường đã cài theo câu lệnh:
Trong đó name là tên môi trường ta đã đặt lúc khởi tạo
Câu lệnh tải và cài đặt thư viện như sau
Numpy là tên thư viện 1.1.2 là phiên bản của thư viện
Câu lệnh kiểm tra các thư viện đã cài trên môi trường như sau
3.4.3 Sửa đổi thuật toán training Để việc training thuật toán của xe có hiệu suất tốt nhất và ổn định, nhóm em đã khởi tạo 2 môi trường khác nhau, một môi trường traning và một môi trường chạy thuật toán, nguyên nhân xuất phát từ việc GPU của các máy có đời và phiên bản khác nhau nên việc thích ứng các phiên bản của thư viện cũng khác nhau
Hình 3.49 Môi trường chạy thuật toán
Thuật toán training được chỉnh sửa bao gồm:
Số lượng thư mục ảnh đầu vào trong thuật toán mới đã được tăng lên từ 3 lên 8 Cụ thể, các thư mục ảnh được xác định bao gồm: "t1", "t2", "t3", "t4", "c1", "c2", "c3", và "c4" Mỗi thư mục này chứa các tệp ảnh định dạng JPG, cho phép mở rộng khả năng xử lý và phân tích dữ liệu hình ảnh một cách hiệu quả hơn.
Số lớp quét tăng từ 4 lên 8 number_class = 4 => 8
Số ảnh 1 lần quét giảm từ 500 xuống 300 batchsize = 500 => 300 # số hình 1 lần quét
Ma trận gán cho số lượng hình được tăng từ 3 lên 8 y = np.asarray([0]*y1 + [1]*y2 + [2]*y3 ) tăng lên thành y = np.asarray([0]*y1+[1]*y2+[2]*y3+[3]*y4+[4]*y5+[5]*y6+[6]*y7+7*[y8])
Việc điều chỉnh thuật toán nhằm mở rộng khả năng hoạt động của xe là rất cần thiết, do đó, việc tăng cường số lượng ảnh đầu vào là một yếu tố quan trọng Song song với việc gia tăng số lượng ảnh, số lớp quét và ma trận gán cho các mục ảnh cũng cần được điều chỉnh tương ứng để đảm bảo hiệu quả hoạt động.
Tuy nhiên vì số lượng ảnh train được giảm đi so với bản cũ trung bình từ
4000 ~ 5000 còn 800 ~ 1000 ảnh nên số ảnh quét cho 1 lần được giảm xuống còn
300 để tăng độ chính xác, ổn định cho file sau khi train
Để sử dụng thuật toán với TensorFlow, việc cài đặt đúng CUDA và cuDNN là rất quan trọng CUDA hỗ trợ tính toán song song, trong khi cuDNN là thư viện giúp gọi lệnh CUDA cho Deep Learning Do đó, bạn cần cài đặt CUDA trước, sau đó mới tiến hành cài cuDNN.
Để kiểm tra xem GPU có phù hợp để cài đặt CUDA hay không, bạn cần sử dụng phần mềm GPU-Z Lưu ý rằng CUDA là công nghệ độc quyền của Nvidia, vì vậy các máy tính sử dụng card đồ họa AMD/ATI sẽ không hỗ trợ chạy CUDA.
Tiến hành cài đặt CUDA 10.1:
Download CUDA 10 trên web của Nvidia, chọn phiên bản phù hợp với window
Sau khi tải xong tiến hành cài đặt bình thường, sau đó khởi động lại máy tính
Cài thư viện cuDNN Đầu tiên đăng ký tài khoản developer, sau khi đăng kí xong tải cuDNN
Chọn cuDNN library for windows 10, không nện chọn bản mới hơn 7.6.5
Sau khi tải xong, giải nén và copy tất cả các file vào thư mục theo đường dẫn
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1 Sau đó khởi động máy vậy là xong
Hình 3.51 => 3.53 Các bước cài đặt cuDNN
3.4.4 Xây dựng lưu đồ giải thuật
3.4.4.1 Lưu đồ nhận diện lane
Sau khi hoàn thành việc huấn luyện mô-đun, chúng ta sẽ sử dụng mô hình này để nhận diện và điều khiển Tùy thuộc vào phạm vi hoạt động của xe, có thể xây dựng các lớp tương ứng nhằm giúp xe hoạt động một cách chính xác nhất.
3.4.4.2 Lưu đồ nhận diện biển báo Stop
Đầu tiên, chúng ta cần khởi tạo các thư viện OpenCV để hỗ trợ thu thập dữ liệu Sau khi lấy được ảnh đầu vào, tiến hành chuẩn hóa theo lưu đồ giải thuật đã đề ra Đọc ảnh đầu vào và xử lý tương tự như trong phần thu thập dữ liệu để phù hợp với mô hình nhận diện biển báo Stop đã được huấn luyện Khi nhận diện thành công biển báo Stop, thuật toán sẽ vẽ hình chữ nhật bao quanh biển báo để xác nhận Tiếp theo, diện tích của biển báo sẽ được tính toán theo đơn vị pixel; nếu diện tích lớn hơn giá trị cho phép, tín hiệu sẽ được truyền xuống.
Hình 3.54 Lưu đồ nhận diện và chạy theo lane
67 để dừng xe,còn ngược lại khi diện tích biển báo nhỏ hơn chứng tỏ xe chưa đến vị trí cần dừng lại thì xe vẫn xe đi thẳng
Hình 3.56 Nhận diện biến báo Stop ở trong xưởng
Hình 3.55 Lưu đồ nhận diện biển báo
3.4.4.3 Cải tiến thuật toán training cho ảnh màu và thiết kế bộ CNN mới
Thuật toán đào tạo cũ chỉ hỗ trợ hình ảnh trắng đen, gây khó khăn trong việc xử lý hình ảnh màu và ảnh thực tế Do đó, việc phát triển một thuật toán đào tạo mới, kiểm soát quy trình đào tạo hiệu quả thông qua việc tạo các biểu đồ tương ứng và xây dựng kiến trúc CNN tiên tiến hơn là rất cần thiết.
To develop an improved CNN architecture, it is essential to analyze the components of the existing model The new architecture can be constructed using the Sequential model, beginning with a Conv2D layer featuring 8 channels and a 7x7 kernel size, utilizing ReLU activation and a stride of 2, with an input shape of (400, 200, 3) for RGB images Subsequent layers include Conv2D with 16 channels and a 5x5 kernel, followed by another Conv2D layer with 32 channels, both maintaining ReLU activation and a stride of 2 Additional Conv2D layers with 64 channels and a 3x3 kernel size are added, employing a stride of 1 Finally, a Dense layer is included to output the number of classes with softmax activation This structured approach ensures a comprehensive understanding and enhancement of the CNN architecture.
- Phân tích: số lượng tích chập
Lần tích chập đầu tiên sử dụng filter lớn với số lượng filter nhỏ nhằm mục đích thu thập đặc điểm ảnh một cách cục bộ Phương pháp này giúp giảm thiểu thời gian training, đặc biệt khi lượng ảnh cần training lên tới 4000 đến 6000 ảnh cho một cung đường.
Các lần tích chập lần sau thì số lượng filter và kích thước filter được giảm dần, từ ma trận được tích chập bởi các lần tích chập trước
Hàm kích hoạt là relu và dùng solfmax để chuyển đổi ma trận thành các vecto xác suất
Bảng 3.3 Phân tích số lượng tích chập
Số lần Số lượng ma trận filter Kích thước filter Kích thước ma trận tổng hợp
To create a new CNN architecture, we begin by initializing a Sequential model and adding layers such as Conv2D with a smaller kernel size of (5,5) and an increased number of filters, enhancing the model's ability to learn image features more clearly and in greater detail This is followed by MaxPooling and Dropout layers to prevent overfitting Additional Conv2D layers with a kernel size of (3,3) further refine the feature extraction process, while the Flatten and Dense layers at the end culminate in a classification output of 43 classes using a softmax activation function The key innovation in this architecture is the use of smaller filters compared to previous CNN designs, which allows for a more detailed understanding of image characteristics while reducing the frequency of pooling operations, thus minimizing the potential shift in feature values.