Để mô phỏng hình dáng chiếc xe so với thực tế nhóm em sử dụng phần mềm Inventor.Autodesk Inventor là phần mềm xây dựng mô hình 3D, thiết kế, hình mẫu và kiểm tra sản phẩm.Các công cụ mô phỏng, phân tích được tích hợp trong Inventor cho phép người dùng thiết kế từ cơ bản đến nâng cao như thiết kế chi tiết máy, trực quan hóa sản phẩm.Inventor còn được tích hợp CAD và các công cụ giao tiếp thiết kế nhằm nâng cao năng suất làm việc của CAD và giảm thiểu phát sinh lỗi,tiết kiệm thời gian.Inventor cũng cung cấp một môi trường thiết kế và phím tắt tương tự với AutoCAD,cho phép người dùng chuyển từ môi trường vẽ 2D hiện hành sang xây dựng mô hình 3D.
40
Mô hình xe tự hành sau khi vẽ bằng Inventor:
Hình 3.19: Mô phỏng xe tự hành
41 3.5 LẬP TRÌNH HỆ THỐNG
3.5.1 Cài đặt hệ điều hành cho jetson nano
Việc cài đặt hệ điều hành cho jetson nano có thể cài đặt trên cả ba hệ điều hành thông dụng là windows, linux, mac os. Với mỗi hệ điều hành sẽ có một chút khác biệt nhỏ dựa trên đặt điểm của hệ điều hành, cơ bản sẽ bao gồm các bước như sau (đối với Windows):
- Bước 1: Tiến hành format thẻ nhớ bằng phần mềm chuyên dụng, ví dụ như SD Memory Card Formatter ( đối với windows). Nên sử dụng phần mềm chuyên dụng thay vì format mặc định của windows không thể format thẻ nhớ đã được cài đặt hệ điều hành jetson nano (linux không cần phần mềm chuyên dụng).
42
- Bước 2: Tải phiên bản hệ điều hành của jetson nano tại trang chủ (https://developer.nvidia.com/embedded/learn/get-started-jetson-nano-devkit#write) và Etcher để tiến hành ghi đè hệ điều hành lên thẻ nhớ. Với phần select image tiến hành chọn phiên bản của hệ điều hành ( chúng em sử dụng jetpack 4.3), select drive để chọn ổ đĩa ghi đè (thẻ nhớ). Và ta tiến hành cài đặt hệ điều hành, quá trình này tốn khoảng 30 phút.
43
- Bước 3: Tiến hành cài đặt thông số hệ điều hành bao gồm ngôn ngữ hệ thống, định dạng bàn phím, thời gian, tên , mật khẩu và tên máy tính.
Hình 3.23: Giao diện hệ điều hành 3.5.2 Cài đặt các chương trình và phần mềm cần thiết
Với việc cài đặt jetpack thì trong hệ điều hành đã mặc định có thư viện opencv, cuda và libCudnn. Ngoài ra ta cần cài một số thư viện hệ thống cần thiết. Mở terminal và dùng câu lệnh như sau:
- sudo apt-get install libhdf5-serial-dev hdf5-tools libhdf5-dev zlib1g-dev zip libjpeg8- dev liblapack-dev libblas-dev gfortran
Cài đặt thư viện pip3 ( hỗ trợ cài đặt thư viện cho python 3.x): - sudo apt-get install python3-pip
- sudo pip3 install -U pip testresources setuptools
Cài đặt thư viện cho python 3 bao gồm numpy, future, mock, h5py, keras_preprocessing, keras_applications, gast, futures, protobuf, pybind11, matplotlib. Bằng câu lệnh như sau:
44
Cài đặt thư viện tensorflow ( tensorflow-gpu). Tải phiên bản tensorflow phù hợp với phiên bản jetpack, với v43 là phiên bản jetpack 4.3, “tensorflow” là phiên bản tensorflow phù hợp với nhu cầu:
- sudo pip3 install --pre --extra-index-url
https://developer.download.nvidia.com/compute/redist/jp/v43 “tensorflow”
3.5.3 Cài đặt chương trình Visual studio code cho jetson nano
Để thuận lợi trong việc viết sửa chương trình cho jetson nano thì chúng em sử dụng visual code. Tuy nhiên jetson nano là hệ điều hành dựa trên ubuntu nhưng chạy trên nền ARM thì việc cài đặt có chút khác biệt so với thông thường.
- Bước 1: Tải chương trình từ github: git clone https://github.com/JetsonHacksNano/installVSCode.git
- Bước 2: cd installVSCode - Bước 3: ./installVSCode.sh
Sau khi cài đặt hoàn thiện sử dụng lệnh “ code-oss” trên của sổ terminal để khởi động chương trình.
- Bước 4: Trong cửa sổ của visual studio, phía bên trái màn hình ở biểu tưởng 4 ô vuông, ta tải python để lập trình code dưới dang python.
- Bước 5: Ấn Ctrl + shift + P để chọn đường dẫn chứa chương trình python.
3.5.4 Cài đặt phần mềm trên máy tính chủ (máy tính dùng để đào tạo mô hình) 3.5.4.1 Cài đặt Cuda , cuDNN 3.5.4.1 Cài đặt Cuda , cuDNN
Việc cài đặt Cuda và cuDNN nhằm mục đích tận dụng gpu rời của máy tham gia vào việc đào tạo mô hình deep learning. Việc cài đặt và sử dụng cuda trên windows tương đối phức tạp do hạn chế về dòng card đồ họa hỗ trợ (của nvidia) cũng như sự kém tương thích giữa Cuda và cuDNN trên windows. Để đơn giản hóa vấn đề ta cài đặt các chương trình này trên ubuntu.
Đầu tiên thiết lập card đồ họa nvidia là mặc định, vào mục tìm kiếm chọn software and update chọn diver của nvidia và tiến hành reset máy
45 Hình 3.24: Thiết lập card nvidia là GPU mặc định
Sau đó ta tải phiên bản Cuda và cuDNN trên trang chủ của nvidia và cài đặt theo hướng dẫn (phiên bản tụi em sử dụng là Cuda 10.1 và cuDNN 7.5). Khi quá trình cài đặt hoàn tất gõ nvidia-smi để kiểm tra, nếu thông số tương tự như hình dưới thì quá trình cài đặt hoàn tất.
46 3.5.4.2 Cài đặt anaconda, Visual studio code
Tác dụng của Visual studio code tương tự như trên jetson nano. Tuy nhiên việc cài đặt trên hệ điều hành máy tính đơn giản hơn rất nhiều đối với cả Visual studio code và anaconda. Đối với anaconda, nó cho phép ta tạo nhiều môi trường với mỗi môi trường tương ứng với một phiên bản python và các gói phần mềm khác nhau. Các môi trường nay hoạt động độc lập với nhau. Điều này cho phép chúng ta so sanh ưu nhược điểm giữa các phiên bản khác nhau mà không lo bị xung đột tới những nền tảng đã được cài đặt cũng như tự do thử các gói chương trình mới.
Sau khi cài đặt anaconda ta thiết lập môi trường cũng như phiên bản cho python: - Bước 1: Mở cửa sổ terminal (linux) hoặc anaconda promt (Windows) và tạo môi trường : conda create -n <tên môi trường> python==3.6.9 . Việc sử dụng phiên bản python 3.6.x thay vì 3.7.x hoặc cao hơn là vì python 3.6.x có sự tương thích ổn định với phiên bản tensorflow 1.x thay vì tensorflow 2.x cho phiên bản python 3.7.x hoặc cao hơn.
- Bước 2: Tiến hành cài đặt các chương trình như trên jetson nano. Ngoài ra cài một số gói đặc thù cho việc đào tạo mô hình như keras (phiên bản 2.2.0) và scikit-learn - đào tạo mô hình deep learning trên keras.
3.5.4.3 Thiết lập cho học sâu hướng đối tượng
So với đào tạo mô hình deep learning qua keras thì việc đào tạo mô hình deep learning hướng đối tượng của tensorflow đòi hỏi nhiều thiết lập hơn. Tiến hành cài đặt tensorflow object detection api từ github( tụi em sử dụng phiên bản tf v1.13) như sau:
- Bước 1: Tải tập tin tensorflow từ github cho (linux) ( windows thì chỉ cần tải ngay trên trang web) :
git clone https://github.com/tensorflow/models/tree/r1.13.0 - Bước 2: Tải model zoo phù hợp với nhu cầu đào tạo.
- Bước 3: Thiết lập PYTHONPATH theo địa chỉ của tệp tensorflow vừa tải về Ví dụ: tệp được tải về được lưu trong thư mục tensorflow1. Đối với windows:C:\> set PYTHONPATH=C:\tensorflow1\models;C:\tensorflow1\models\research;C:\tensorflow1 \models\research\slim” đối với linux: “export
PYTHONPATH=home/tensorflow1/models;home/tensorflow1/models/research;tensorflo w1/model/research/slim”.
47
- Bước 4: Tiến hành biên dịch protobufs và chạy file setup.py. Truy cập thu mục research tiến hành chuyển đổi các file có đuôi .proto sang .py :” protoc object_detection/protos/*.proto --python_out=.” và tiến hành xây dưng và cài đặt “python setup.py build” và “python setup.py install”. vậy là quá trình cài đặt hoàn tất.
3.5.5 Lưu đồ giải thuật hệ thống
3.5.5.1 Nhận diện Lane
Lưu đồ chạy theo Lane:
48 Hình 3.27: Lưu đồ nhận diện và chạy theo lane (P2)
Khi đã có model đã được huấn luyện ở phần trước,ta sẽ dùng nó để nhận diện và điều khiển.Đầu tiên phải khởi tạo các thư viện cần thiết.Sau đó đọc model đã được huấn luyện vào chương trình.
Đọc ảnh đầu vào và tiến hành xử lý để phù hợp với model đã được huấn luyện.Đưa ảnh vào nhận diện,theo lưu đồ thì có 3 class ứng với thứ tự làn đường và góc quay.Nếu nhận diện class bằng 0 tương ứng với xe đi thẳng ,class bằng 1 thì xe sẽ rẻ phải tương úng với góc quay phải 60 độ,khi class bằng 2 thì tương ứng với góc quay trái 60 độ để xe có thể đi thẳng trở lại.Một số hình ảnh sau khi nhận diện bằng model huấn luyện:
49 Hình 3.28: Thẳng 1
50 3.5.5.2 Nhận diện biển báo Stop
Lưu đồ nhận diện biển báo:
51 Hình 3.31: Lưu đồ nhận diện biển báo Stop (P2)
Việc đầu tiên chúng ta cần phải khởi tạo các thư viện của Opencv để hỗ trợ cho việc thu thập dữ liệu.Tương tự phần trên sau khi lấy được ảnh đầu vào ta tiến hành chuẩn hóa theo lưu đồ giải thuật trên.
Đọc ảnh đầu vào và tiến hành xử lý giống với phần thu thập dữ liệu để phù hợp với model nhiện diện biển báo Stop đã được huấn luyện.Đưa ảnh vào nhận diện, khi nhận diện được biển báo Stop thì thuật toán sẽ vẽ một hình chữ nhật bao xung quanh biển báo để thông báo là đã xác định được vât.Sau đó diện tích của biển báo sẽ được tính toán theo đơn
52
vị là pixel,khi diện tích biển báo lớn hơn giá trị cho phép thì tính hiệu sẽ được truyền xuống để 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.
53 3.5.6 Giao diện lập trình
3.5.6.1 Giao diện lập trình xử lý ảnh lane và biển báo
Để có thể lập trình cũng như xây dựng hệ thống xử lý ảnh nhóm em sử dụng ngôn ngữ Python và viết trên nền Visual Studio:
Hình 3.33: Giao diện Visual Studio
54
Để điều khiển động cơ và hướng di chuyển cho xe,nhóm em sử dụng phần mềm Arduino IDE để có thể lập trình cũng như nạp code xuống bo mạch Arduino Uno R3.Một chương trình được viết bởi Arduino IDE được gọi là sketch, sketch được lưu dưới dạng .ino.
Hình 3.35: Giao diện lập trình Arduino
Giao diện Arduino IDE gồm 3 vùng: vùng lệnh, vùng lập trình và vùng thông báo. - Vùng lệnh: Bao gồm các nút lệnh menu File,Edit,Sketch,Tools,Help.
- Vùng lập trình: Vùng này chứ code lập trình
- Vùng thông báo: Những thông báo thì IDE sẽ được thông báo tại đây. Các thông báo như chương trình có lỗi hay không, liệt kê các lỗi, quá trình nạp,…Góc dưới cùng bên phải hiển thị loại board Arduino và cổng COM được sử dụng.
55 3.6 HƯỚNG DẪN THAO TÁC
3.6.1 Thao tác đối với Jetson Nano 3.6.1.1 Remote Desktop 3.6.1.1 Remote Desktop
Mục đích của việc remote desktop là giúp chúng ta có thể quan sát được quá trình xử lý hình ảnh,hình ảnh nhận vào từ camera,đồng thời có thể sửa lỗi cũng như điều chỉnh code từ xa thông qua laptop mà không cần đến tận xe. Nhằm tiết kiệm thời gian cũng như thuận tiện cho quá trình sửa chữa.Để remote desktop nhóm em sử dụng phầm mềm VNC,các bước được tiến hành như sau:
- Bước 1: Cài đặt phần mềm VNC Viewer vào laptop.Để tải phần mềm thì vào đường dẫn https://www.realvnc.com/en/connect/download/viewer/,giao diện sau khi cài đặt thành công phần mềm.
56
- Bước 2: Tìm địa chỉ IP của Jetson Nano
Hình 3.37: Cú pháp tìm IP của Jetson Nano
57
- Bước 3: Chạy tập tin VNC trên Jetson Nano Để tải tập tin về Jetson Nano ta vào đường dẫn:
https://github.com/jetsonworld/downloadManuals/blob/master/00_How_To_Start_VNC.t xt
Tiến hành tải tập tin có tên là:00_How_To_Start_VNC.txt Tiến hành chạy trên Jetson Nano
Hình 3.39:Chạy VNC trên Jetson Nano
58
- Bước 4: Nhập IP của Jetson Nano vào VNC trên laptop
Hình 3.41: Nhập IP của Jetson vào VNC
- Bước 6: Chấp nhận trên Jetson Nano để liên kết với laptop bằng cách nhấn Accept
59
Liên kết thành công VNC giữ laptop và Jetson Nano.
Hình 3.43: Liên kết thành công Jetson Nano và laptop
Sau khi liên kết thành công Jetson Nano và laptop thì ta có thể điều khiển,lập trình,sử chửa hay thao các với Jetson từ xa.Nhưng VNC chỉ có thể sử dụng để liên kết hai thiết bị khi hai thiết bị cùng sử dụng chung một mạng wifi,nên đó cũng là nhược điểm của phần mềm này.Một nhược điểm khác là khi truyền dữ liệu từ Jetson sang laptop bằng VNC thì sẽ có độ trễ đối với tín hiệu,nhưng độ trễ này vẫn nằm trong khoảng có thể chấp nhận được,thời gian trể là tâm 1 đến 2s.
60 Chương 4
THỰC NGHIỆM VÀ ĐÁNH GIÁ 4.1 KẾT QUẢ
4.1.1 Kết quả thi công phần cứng
Sau 15 tuần thiết kế và thi công,nhóm đã hoàn thành mô hình xe tự hành.Mô hình xử lý được 10 frame/s đối với chương trình nhận diện lane, 4 frame/s đối với chương trình nhận diện biển báo.Nên tốc độ xe khá chậm so với dự kiến.
Hình 4.1: Mô hình xe tự hành
Hình 4.2: Mô hình xe tự hành
61 Hình 4.3: Mô hình xe tự hành
Những hình ảnh trên là mô hình xe tự hành sau khi hoàn thành của nhóm.Về mặt phần khung xe nhóm em đã tận dụng khung xe ô tô điện vì kích thước phù hợp,đồng thời tiết kiệm được thời gian để có thể tập trung vào xử lý phần mềm.Nhóm đã hoàn thành mô hình bao gồm: thiết kế và chế tạo lại hệ thống lái của xe sử dụng động cơ bước để đánh lái nhằm phục vụ cho mục đích tự hành, lắp đặt thêm hai camera phía trước và bên phải của xe để có thể thu thập hình ảnh trong việc xử lý ảnh chạy theo lane và nhận diện biển báo stop. Sử dụng Jetson Nano để làm máy tính xử lý trung tâm cho xe để xe có thể hoạt động tốt hơn.Đồng thời nâng cấp hai động cơ của xe để có thể đạt được tốc độ như mong.Sử dụng màn hình lcd để hiện thị hình ảnh xử lý của Jetson Nano trong khi xe di chuyển để dể dàng quan sát những sai lệch trong quá trình thu thập hình ảnh nhằm khắc phục,giúp xe ngày càng hoàn thiện hơn.
Trong qua trình vận hành ở môi trường thực tế thì cho thấy mô hình vẫn đáp ứng tốt với các yêu cầu của nhóm.Tuy vẫn có những sai lệch do sự chênh lệch tốc độ giữa hai bánh cũng như khả năng giữ lái của xe vẫn còn hạn chế khi bị tác động của ngoại lực bên ngoài, nhưng nhóm đã khắc phục đến mức thấp nhất cũng ảnh hưởng đó trong việc hoạt động của xe.
2
62 Hình 4.4: Mạch điện trong xe
Hình 4.4 là sơ đồ mạch điện thực tế trên xe đã được lắp đặt và sử dụng.
Bảng 4.1: Các linh kiện lắp đặt trên xe
STT Tên linh kiện
1 Camera logitech C270 2 LCD 3 Ắc quy 4 Module BTS7960 5 Arduino Uno R3 6 Driver TB6560 7 Jetson Nano 8 Giảm áp DC LM2596 4 5 6 7 8
63 4.2 THỰC NGHIỆM
4.2.1 Thực nghiện model Deep learning sử dụng tensorflow và keras
Nhóm chúng tôi thực nghiệm nhận dạng lane và điều khiển trong điều kiện thực tế,với môi trường tự nhiên ngoài trời,ánh sáng mặt trời.Trong phần điều khiển có chạy thẳng,rẽ phải,và dừng lại khi nhận diện biển báo.Vì xe chạy trong môi trường tự nhiên nên ảnh hưởng của ánh sáng và điều không tránh khỏi, nên các trường hợp trên nhóm em đã thực nghiệm trong những thời gian khác nhau trong ngày để quan sát độ của kết quả nhận dạng và điều khiển.
Hình 4.5: Xe đi thẳng1
64
Hình 4.5 và 4.6 là quá trình thử nghiệm xe đi thẳng bằng model được tạo ra bằng thư viện tensorflow và keras.Với nhiều lần thực nghiệm thì cho thấy khả năng nhận diện và xử lý hình ảnh đi thẳng của model là tốt.
Hình 4.7: Xe rẽ phải
Hình 4.8: Kết quả nhận diện lane cong
Hình 4.7 và 4.8 là quá trình thử nghiệm khi xe rẽ phải.Cũng với số lần thực nghiệm là