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 ô vng, 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 q trình cài đặt hồ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. Ngồ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ó đ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à q trình cài đặt hồ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 tố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 tố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, q 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 đã hồ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 hồ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 đã hồ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 hồ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 ngồ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 ngồ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à 100 lần và được kết quả như trên thì cũng có thể thấy model xử lý chính xác hình ảnh được thu nhận từ camera trong điều kiện ánh sáng tối ưu nhất.
65 Hình 4.9: Xe đi thẳng 2
Hình 4.10: Kết quả nhận diện lane thẳng 2
Hình 4.9 và 4.10 là quá trình thực nghiệm đi xe đi thẳng 2.Cùng với số lần thực nghiệm như trên thì cho thấy model xử lý tốt hình ảnh của thẳng 2 trong điều kiện ánh sáng tối ưu nhất.Và tất cả các hình ảnh trên đều được nhóm thu thập khi xe chạy trong điều kiện ánh sáng tốt nhất.
66 Hình 4.11: Xe dừng lại
Hình 4.12: Kết quả nhận diện biển báo
Hình 4.12 là quá trình thực nghiệm nhận diện biển báo đồng thời tính diện tích của biển báo để cho xe dừng lại khi diện tích thỏa điều kiện.Và điều khiện cho trước đó cũng thơng qua việc thực nghiệm để tìm diện tích biển báo thích hợp với mong muốn của nhóm.Qua hình ảnh cũng có thể đánh giá được model nhận diện được biển báo khá tốt.
67 4.2.2 Thực nghiệm model Deep learning sử dụng tensorflow
Hình 4.13: Xe đi thẳng api
Hình 4.14: Kết quả nhận diện thẳng api
Hình 4.13 và 4.14 là quá trình thử nghiệm xe chạy thẳng với model được xây dựng bởi thư viện tensorflow.Kết quả trên cho thấy model đáp ứng được yêu cầu đặt ra là xác định xe phải đi thẳng trong trường hợp này.Cũng như những thực nghiệm khác đây là kết quả khi thực nghiệm trong điều kiện ánh sáng tối ưu nhất,khơng bị các tác động bên ngồi.
68 Hình 4.15: Xe rẽ phải api
69 Hình 4.17: Kết quả nhận diện biển báo bằng api
Hình 4.17 là ảnh thực nghiệm quá trình nhận diện biển báo bằng model api, đồng thời tính diện tích của biển báo để có dừng xe khi diện tích thỏa điều kiện cho phép.Kết quả trên cũng cho thấy model api cũng đáp ứng khá tốt việc nhận diện biển báo trong điều kiện ánh sáng thực tế.Số lần thực nghiệm của model này cũng tương tự như model keras là 100 lần.
4.2.3 Thống kê
Qua quá trình thực nghiệm của cả hai model được xây dựng dựa trên hai phương