TỔNG QUAN
ĐẶT VẤN ĐỀ
Cuộc cách mạng 4.0 là cuộc cách mạng phát triển nhanh chóng, mạnh mẽ và ứng dụng nhiều trong cuộc sống, sản xuất, quân sự, y tế, Cuộc cách mạng 4.0 phát triển thông qua các công nghệ như IoT, AI, VR, AR, điện toán đám mây, phiên tích dữ liệu lớn (SMAC) và đặc biệt là xe tự hành
Các chuyên gia dự đoán, trong khoảng 15 đến 20 năm nữa, xe tự hành sẽ được sử dụng một cách rộng rãi, phổ biến hơn các phương tiện đang thịnh hành hiện nay Hiện có rất nhiều tập đoàn sản xuất xe hơi và công nghệ lớn trên thế giới đã tham gia cuộc chạy đua phát triển xe tự hành mà không cần đến bàn tay can thiệp của con người như Tesla, Google,
1.1.1 Tình hình nghiên cứu ngoài nước
Xe tự hành được nghiên cứu và ra mắt lần đầu tiên vào năm 1939 Đến năm
2010 các khả năng hỗ trợ người lái thông minh xuất hiện, Và kể từ năm 2016 đến nay các tính năng của xe tự hành trở nên tự động và phát triển hơn Các nước đi đầu về công nghệ như Mỹ, Nhật Bản, Trung Quốc đã và đang đưa ra nhiều chính sách mở cửa cho xe tự hành [1] Hiện nay, các công ty lớn trong ngành ô tô như Tesla, Mercedes-Benz, Ford, Volvo, Nissan, cũng đã nghiên cứu và ra mắt các sản phẩm xe ô tô tự hành ở cấp độ 4 với nhiều tính năng hỗ trợ như phanh khẩn cấp, tự động lái, hỗ trợ đỗ xe, cảnh báo va chạm,
Hiện nay, có rất nhiều hãng xe đã thử nghiệm xe tự hành trên nhiều tuyến đường thuộc một số tiểu bang của Mỹ như California, Arizona, Texas, Michigan, [1] Năm 2021, chính quyền bang California đã chính thức chấp thuận cho phương tiện không người lái làm dịch vụ giao hàng thương mại Để theo kịp công nghệ so với các nước khác trên thế giới, các quốc gia ở khu vực Đông Nam Á cũng tham gia vào cuộc đua công nghệ xe tự hành Singapore, Malaysia và Việt Nam là 3 nước dẫn đầu trong cuộc đua công nghệ xe tự hành ở khu vực Đông Nam Á [2] Theo báo cáo của KPMG, Singapore đứng thứ 2 trong số 25 quốc gia trên thế giới sẵn sàng cho công nghệ xe tự hành [2]
1.1.2 Tình hình nghiên cứu trong nước Ở Việt Nam, cùng với sự phát triển về công nghệ xe tự hành công ty công nghệ FPT cũng đã tập trung nghiên cứu và phát triển Năm 2017, FPT đã chạy thử xe điện cho sân golf có tích hợp công nghệ tự lái với tốc độ 25km/h [2] Mới đây, FPT đã phát triển công nghệ xe tự lái trên xe điện Yamaha, đưa vào thử nghiệm cho việc di chuyển nội bộ của dân cư tại khu đô thị Ecopark [2] Ngoài ra, hãng ô tô Vinfast của Việt Nam cũng dự kiến ra mắt 2 dòng xe điện thông minh là VF e35 và VF e36 trong năm nay với tính năng hỗ trợ lái tự động ( ADAS) Các mẫu xe này của Vinfast có thể đáp ứng các tiêu chuẩn an toàn của xe tự hành của NHTSA ( Cục quản lý an toàn giao thông quốc lộ Hoa Kỳ) và EURO NCAP ( chương trình đánh giá tính năng an toàn xe hơi châu Âu) Đáp ứng nhu cầu cạnh tranh trong cuộc đua công nghệ, tập đoàn FPT đã chuẩn bị nguồn lực cho tương lai bằng cách tổ chức các cuộc đua số “ Lập trình xe tự hành” cho học sinh, sinh viên nhằm phát huy khả năng sáng tạo, nghiên cứu và phát triển về xe tự hành Đây là cuộc thi duy nhất về công nghệ xe tự hành tại khu vực Đông Nam Á, giúp giới trẻ Việt Nam tiếp cận và trải nghiệm những công nghệ hiện đại nhất [2]
Bên cạnh đó, chiếc xe tự lái “ Made in Viet Nam” cấp độ 4 vừa mới được ra mắt ở Hà Nội do đội ngũ các nhà khoa học, kỹ sư thuộc tập đoàn Phenikaa từ các Viện nghiên cứu, trường Đại học Phenikaa và Công ty Phenikaa X nghiên cứu và phát triển [3] Ở các trường đại học, các phòng Lab cũng được lập ra để nghiên cứu và phát triển về xe tự hành, có rất nhiều mẫu xe tự hành có thể chạy tự ở ngoài thực tế với nhiều tính năng hỗ trợ như tự lái, nhận diện biển báo, bám đường,
Xe tự hành đóng vai trò quan trọng trong việc giảm thiểu áp lực và sự phân tâm cho người điều khiển nhằm đảm bảo an toàn, giảm thiểu tai nạn giao thông Vì vậy một chiếc xe tự hành hoạt động phải chính xác, tốc độ đáp ứng cao Ngày nay, có rất nhiều thuật toán được nghiên cứu và áp dụng để tối ưu hóa được các yêu cầu của xe tự hành Để nắm bắt được xu thế công nghệ xe tự hành nhóm em quyết định chọn đề tài “ Nghiên cứu, thiết kế và chế tạo xe tự hành ứng dụng xử lý ảnh và AI” với mục đích là xây dựng được mô hình xe tự hành có thể nhận diện được làn đường, biển báo giao thông dựa trên mô hình sa bàn và tránh được vật cản.
MỤC TIÊU
Đề tài “ Nghiên cứu, thiết kế và chế tạo xe tự hành ứng dụng xử lý ảnh và AI” được thực hiện với các mục tiêu được đề ra:
- Thiết kế và xây dựng mô hình xe theo yêu cầu thiết kế ban đầu đã đặt ra
- Xe tự hành hoạt động, di chuyển bám theo lane đường
- Tốc độ hoạt động của xe từ 0.5m/s
- Nhận diện được phần lane đường với độ chính xác 100%
- Có thể tránh được vật cản trên đường đi
- Nhận dạng được một số biển báo giao thông nhóm đề ra và di chuyển theo tín hiệu chỉ dẫn của biển báo với độ chính xác 90%.
NỘI DUNG
Dựa vào các mục tiêu, nhiệm vụ đã đề ra bố cục của luận văn tốt nghiệp được nhóm em chia thành 6 phần:
Nội dung chương 1 trình bày lí do chọn đề tài, mục tiêu và phạm vi của đề tài Chương 2: Cơ sở lý thuyết
Nội dung chương 2 trình bày về lý thuyết xử lý ảnh, các phương pháp xử lý biên, AI, bộ điều khiển PID, Fuzzy, thư viện Firmata điều khiển động cơ DC qua Arduino, truyền nhận dữ liệu giữa Server & Client và chương trình xử lý đa luồng
Chương 3: Thiết kế mô hình
Nội dung chương 3 trình bày về yêu cầu thiết kế cơ khí và phần thiết bị điện, sơ đồ nối dây giữa các thiết bị
Chương 4: Giải thuật và chương trình
Nội dung chương 4 trình bày về thuật toán nhận diện lane đường, nhận diện biển báo giao thông và thuật toán đường hồi quy
Chương 5: Kết quả và đánh giá
Nội dung chương 5 trình bày kết quả thực nghiệm và đánh giá tổng quan về mô hình được thực hiện
Chương 6: Kết luận và hướng phát triển đề tài
Nội dung chương 6 trình bày ưu nhược điểm của mô hình và đưa ra hướng phát triển của đề tài trong tương lai.
PHẠM VI ĐỀ TÀI
- Xe hoạt động trong điều kiện ánh sáng đầy đủ, tốc độ mạng wifi ổn định
- Phần Map cho xe di chuyển được thiết kế và thi công với phần lane đường rộng 40-50cm, tổng diện tích Map là 10m 2
- Xe nhận dạng được một số biển báo giao thông gồm: biển báo STOP, biển báo rẽ phải, biển báo rẽ trái, biển báo cấm rẽ phải, biển báo cấm rẽ trái, di chuyển bám đường và tránh được vật cản
- Xe chỉ tránh được các vật cản có màu khác với màu của lane đường ( màu trắng).
CƠ SỞ LÝ THUYẾT
Tổng quan về xử lý ảnh
2.1.1 Giới thiệu chung về xử lý ảnh
Xử lý ảnh là một lĩnh vực nghiên cứu mới trong khoa học công nghệ Trong những năm gần đây lĩnh vực này được nghiên cứu và phát triển với tốc độ nhanh chóng bởi các trung tâm nghiên cứu, các trường đại học với rất nhiều ứng dụng thực tế trong nhiều lĩnh vực khác nhau
Các phương pháp xử lý ảnh bắt đầu từ các ứng dụng nhằm nâng cao chất lượng ảnh bằng các phương pháp phân tích được nghiên cứu trong giai đoạn thiết bị phần cứng bị hạn chế như nâng cao độ sáng hay độ phân giải của ảnh, Ngày nay, khi công nghệ máy tính phát triển đã tạo điều kiện để cho quá trình thực hiện các thuật toán xử lý ảnh Xử lý ảnh ngày được ứng dụng càng nhiều trong các lĩnh vực tự động hóa, kỹ thuật y sinh, viễn thông, Trong cuộc sống, các thiết bị kỹ thuật số như máy ảnh, điện thoại thông minh, tivi thông minh, cũng kết hợp sử dụng xử lý ảnh để cho những hình ảnh rõ nét theo đúng yêu cầu của người sử dụng
2.1.2 Các bước xử lý ảnh
Hình 2 1 Các bước xử lý ảnh
- Thu nhận ảnh: Đây là bước đầu tiên Ảnh đầu vào sẽ được thu nhận qua các thiết bị như camera, sensor, máy scanner,
Sau khi có ảnh đầu vào, ảnh sẽ được đưa vào bộ tiền xử lý để nâng cao chất lượng hình ảnh Chức năng chính của bộ tiền xử lý là lọc nhiễu, nâng độ tương phản để làm ảnh rõ hơn, nét hơn
Quá trinh này thực hiện việc phân vùng ảnh thành các vùng rời rạc và đồng nhất với nhau hay nói cách khác là xác định các biên của các vùng ảnh đó Phân đoạn ảnh là chia ảnh thành các vùng không trùng lặp, mỗi vùng gồm 1 nhóm pixel liên thông và đồng nhất theo 1 tiêu chí nào đó Đây là phần phức tạp trong xử lý ảnh và dễ gây lỗi, làm mất độ chính xác của ảnh Kết quả nhận dạng ảnh phụ thuộc nhiều vào công đoạn này
Dựa trên các thông tin thu nhận được qua quá trình phân đoạn, kết hợp với các kỹ thuật xử lý, thủ tục phân tích dữ liệu để đưa ra các điểm đặc trưng, đối tượng ảnh cũng như các thông tin cần thiết trong quá trình xử lý
Các đặc điểm của đối tượng được trích chọn tùy theo mục đích nhận dạng trong hệ thống xử lý ảnh Một vài đặc điểm của ảnh: đặc điểm không gian, đặc điểm biến đổi, đặc điểm biên và đường biên
- Nhận dạng và giải thích: Đây là bước cuối cùng trong quá trình xử lý ảnh, quá trình này liên quan đến các mô tả đối tượng mà người ta muốn đặc tả nó Nhận dạng ảnh có thể được nhìn nhận một cách đơn giản là việc gán nhãn cho các đối tượng trong ảnh Hiện nay, người ta đã áp dụng kỹ thuật nhận dạng thành công với nhiều đối tượng: nhận dạng vân tay, khuôn mặt, biển số xe, Ngoài ra kỹ thuật nhận dạng dựa vào kỹ thuật mạng nơ ron đang được áp dụng và cho kết quả khả quan
2.1.3 Biên và các phương pháp phát hiện biên a Khái niệm
Cho tới nay chưa có định nghĩa chính xác về biên và mỗi định nghĩa được sử dụng trong một số trường hợp nhất định Biên có thể được tạo ra bởi bóng tối, kết cấu hình học, Biên cũng có thể được định nghãi là không liên tục ở cường độ hình ảnh do sự thay đổi trong cấu trúc hình ảnh Biên trong một hình ảnh thường xảy ra với độ phân giải hoặc quy mô khác nhau và đại diện cho quá trình chuyển đổi của mức xám khác nhau, hay mức độ gradient Tuy nhiên có thể định nghĩa biên như sau:
- Điểm biên: một điểm ảnh được coi là điểm biên nếu có sự thay đổi đột ngột về mức xám Ví dụ: đối với ảnh đen trắng, một điểm được gọi là điểm biên nếu nó là điểm đen có ít nhất một điểm trắng bên cạnh
- Đường biên của đối tượng: được tạo bởi một tập hợp các điểm biên
- Mỗi một biên là một thuộc tính gắn liền với một điểm riêng biệt và được tính toán từ những điểm lân cận nó Đó là một biến vector gồm 2 thành phần: độ lớn của Gradient; hướng của biên với góc φ, lệch so với hướng của Gradient ψ một góc -90⁰ b Quy trình phát hiện biên
Hình 2 2 Quy trình phát hiện biên
Quy trình phát hiện biên gồm 4 bước:
Bước 4: Liên kết & trích chọn c Các phương pháp phát hiện biên
Phương pháp phát hiện biên Gradient
Dựa theo đạo hàm ( sự biến thiên của hàm trong khoảng lân cận) Gradient là đạo hàm của hàm đa biến f(x,y):
Việc xấp xỉ đạo hàm bậc nhất theo các hướng x và y được thực hiện thông qua
2 mặt nạ nhân chập tương ứng sẽ cho ta các kỹ thuật phát hiện biên khác nhau ( Roberts, Sobel, )
Toán tử Roberts bao gồm một cặp mặt nạ nhân chập 2x2 là Hx và Hy, những mặt nạ này được thiết kế có thể đáp ứng tối đa để biên hoạt động theo 2 hướng -45 và 45:
Sử dụng 2 mặt nạ nhân chập 3*3 theo hướng x, y với hình xám
Phương pháp phát hiện biên Laplace Để khắc phục hạn chế và nhược điểm của phương pháp Gradient, trong đó sử dụng đạo hàm riêng bậc nhất người ta nghĩ đến việc sử dụng đạo hàm riêng bậc 2 hay toán tử Laplace Phương pháp phát hiện biện theo Laplace hiệu quả hơn phương pháp toán tử Gradient trong trường hợp mức xám biến đổi chậm, miền chuyển đổi mức xám có độ trải rộng
Toán tử Laplace được định nghĩa như sau:
Toán tử Laplace dùng một số kiểu mặt nạ khác nhau nhằm tính gần đúng đạo hàm riêng bậc hai Các dạng mặt nạ theo toán tử Laplace 3*3 hay dùng:
Phương pháp phát hiện biên Canny
Bước 1: Giảm nhiễu: làm trơn ảnh để loại bỏ nhiễu bằng cách nhân chập ảnh với bộ lọc Gauss
Bước 2: Tìm Gradient: Tính toán góc và chiều dài qua gradient Biên nên được đánh dấu nơi mà gradient của ảnh có chiều dài lớn
Bước 3: Thực hiện “Non-maximum suppression”: Chỉ cực đại cục bộ những điểm được đánh dấu là biên (có mức xám cao)
Bước 4: Sử dụng ngưỡng đôi: Những biên tiềm năng được xác định bởi ngưỡng cao và ngưỡng thấp
Biến đổi Hough Transform là một kỹ thuật nằm trong định dạng hình ảnh Hough Transform được sử dụng để trích chọn đường thẳng, hình tròn và elip
- Biến đổi Hough cho đường thẳng:
Phương trình đường thẳng cơ bản sẽ được biểu diễn theo 2 tham số a và b như sau: y ax b (2.6) Đường thẳng cắt nhau có điểm (x0,y0) chung Khi đổi (x0,y0) là tham số của phương trình:
- Biến đổi Hough cho đường thẳng trong hệ tọa độ cực
Ta sử dụng tọa độ cực để biểu diễn phương trình đường thẳng: cos x ysin (2.8)
Xét thấy trong phương trình tọa độ cực, giá trị của góc θ có thể bị chặn lại trong khoảng 0, ) Trên thực tế, không gian ảnh là không gian hữu hạn ( bị chặn bởi các cạnh của ảnh), do vậy giá trị ρ cũng bị chặn
2.1.5 Xử lý ảnh với thư viện OpenCV
Phương thức điều khiển động cơ qua thư viện Firmata
Firmata là một phương thức giao tiếp với vi điều khiển từ phần mềm máy tính chủ Giao thức được sử dụng trên bất kì cấu trúc vi điều khiển cũng như bất cứ phần mềm máy tính chủ nào Thư viện Firmata dành cho Arduino và các thiết bị tương thích với Arduino Ưu điểm của thư viện Firrmata là chúng ta có thể phân phối bằng cách sử dụng chương trình được viết bằng Arduino để thiết lập các chức năng và xác định cấu hình giữa giao thức truyền thông dữ liệu và mô hình Arduino mà không cần phải tạo giao thức và đối tượng riêng để lập trình cho môi trường mà chúng ta đang sử dụng
Có 2 module chính của Firmata được sử dụng:
- Module thứ nhất sử dụng các phương pháp được cung cấp bởi thư viện Firmata để gửi và nhận dữ liệu một cách có chọn lọc giữa thiết bị Arduino và phần mềm máy chủ
Cú pháp gửi một chuỗi: Firmata.sendString(stringToSend)
Cú pháp gửi dữ liệu:
Firmata.sendAnalog(analogPin,analogRead(analogPin))
- Module thứ hai phổ biến hơn là tải một bản phác thảo có mục đích chung là StandardFirmata trên Arduino và sau đó dùng máy tính chủ tương tác với bo Arduino Module StandardFirmata nằm trong Arduino IDE ( File→ Examples →Firmata) Để thực hiện giao tiếp giữa Raspberry Pi và Arduino ta sẽ sử dụng thư viện PyFirmata sử dụng phương thức Firmata Tạo đối tượng bo muốn điều khiển, ở đây nhóm em sử dụng bo Arduino kết nối với Pi qua cổng USB:
Cú pháp: bot = Arduino(“/dev/tty.usbserial-110”)
Tổng quan bộ điều khiển PID
Bộ điều khiển PID 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 Bộ điều khiển PID được sử dụng nhiều nhất trong các hệ thống điều khiển vòng kín (có tín hiệu phản hồi) Bộ điều khiển PID sẽ tính toán giá trị sai số là hiệu số giữa giá trị đo thông số biến đổi và giá trị đặt mong muốn Bộ điều khiển sẽ thực hiện giảm tối đa sai số bằng cách điều chỉnh giá trị điều khiển đầu vào Để đạt được kết quả tốt nhất, các thông số PID sử dụng trong tính toán phải điều chỉnh theo tính chất của hệ thống trong khi kiểu điều khiển là giống nhau, các thông số phải phụ thuộc vào đặc thù của hệ thống
Hình 2 8 Bộ điều khiển PID
- P (Proportional): là phương pháp điều chỉnh tỉ lệ, giúp tạo ra tín hiệu điều chỉnh tỉ lệ với sai lệch đầu vào theo thời gian lấy mẫu
- I (Integral): là tích phân của sai lệch theo thời gian lấy mẫu Điều khiển tích phân là phương pháp điều chỉnh để tạo ra các tín hiệu điều chỉnh sao cho độ sai lệch giảm về 0 Từ đó cho ta biết tổng sai số tức thời theo thời gian hay sai số tích lũy trong quá khứ Khi thời gian càng nhỏ thể hiện tác động điều chỉnh tích phân càng mạnh, tương ứng với độ lệch càng nhỏ
- D (Derivative): là vi phân của sai lệch Điều khiển vi phân tạo ra tín hiệu điều chỉnh sao cho tỉ lệ với tốc độ thay đổi sai lệch đầu vào Thời gian càng lớn thì phạm vi điều chỉnh vi phân càng mạnh, tương ứng với bộ điều chỉnh đáp ứng với thay đổi đầu vào càng nhanh
Tín hiệu điều khiển từ bộ điều khiển PID được tạo nên dựa vào 3 khâu, và tổng
3 khâu này được tạo thành bởi các biến điều khiển (Ký hiệu: MV) Công thức của tín hiệu điều khiển:
P out : thừa số tỉ lệ của đầu ra
I out : thừa số tích phân của đầu ra
D out : thừa số vi phân của đầu ra
( ) e t : sai số theo thời gian t
Bộ điều khiển mờ (Fuzzy)
2.5.1 Khái niệm về tập mờ và các phép toán trên tập mờ
Cho một tập hợp A, một phần tử x thuộc A được ký hiệu xA Để biểu diễn
A một tập A trên tập nền X, ta dùng hàm thuộc A x , với:
chỉ nhận một trong hai giá trị là “1” và “0”
Một tập xAluôn có X x 1 x được gọi là tập nền của A
Một tập A có dạng A = { x X| x thỏa mãn tính chất nào đó} Ta nói tập A được định nghĩa trên tập nền X
Tập mờ A được xác định trên tập kinh điển M là một tập mà mỗi phân tử của nó được biểu diễn bởi một cặp giá trị (x, A x ) Trong đó xM và A x là ánh xạ
- Ánh xạ A x được gọi là hàm liên thuộc của tập mờ A
- Tập kinh điển M được gọi là cơ sở của tập mờ A
2.5.3 Các thông số đặc trưng cho tập mờ
Các thông số đặc trưng cho tập mờ là độ cao, miền xác định và miền tin cậy
- Độ cao của tập mờ B là giá trị lớn nhất trong các giá trị của hàm liên thuộc
Một tập mờ có ít nhất một phần tử có độ phụ thuộc bằng 1 được gọi là tập mờ chính tắc (H = 1) Ngược lại, một tập mờ B với H < 1 gọi là tập mờ không chính tắc
- Miền xác định của tập hợp B ( định nghĩa trên cơ sở M) được ký hiệu bởi
S là tập con của M có giá trị hàm liên thuộc khác 0:
- Miền tin cậy của tập mờ B ( định nghĩa trên cơ sở M) được ký hiệu bởi S là tập con của M có giá trị hàm liên thuộc bằng 1:
Hình 2 9 Độ cao, miền xác định, miền tin cậy của tập mờ
2.5.4 Các hàm liên thuộc của tập mờ
Mặc dù mọi hàm A ( ) [0,1]x đều có thể sử dụng là hàm thuộc cho tập mờ A, song trong điều khiển, với mục đích đơn giản, người ta chỉ quan tâm tới 4 dạng là:
- Hàm thuộc dạng tam giác
Hình 2 11 Hình dạng tam giác
- Hàm thuộc dạng hình thang
Hình 2 12 Hàm dạng hình thang
- Hàm thuộc dạng hình chuông
Hình 2 13 Hàm dạng hình chuông
Xét hai biến ngôn ngữ χ và γ: Biến χ nhận giá trị (mờ) A có hàm liên thuộc
và γ nhận giá trị (mờ) B có hàm liên thuộc B x thì hai biểu thức: χ =A; γ=B được gọi là 2 mệnh đề
Luật điều khiển: nếu χ =A thì γ=B được gọi là mệnh đề hợp thành Trong đó χ =A gọi là mệnh đề điều kiện và γ=B gọi là mệnh đề kết luận
Một mệnh đề hợp thành có thể có nhiều mệnh đề điều kiện và nhiều mệnh đề kết luận, các mệnh đề liên kết với nhau bằng toán tử “và” Dựa vào số mệnh đề điều kiện và số mệnh đề kết luận trong một mệnh đề hợp thành mà ta phân chúng thành các cấu trúc khác nhau:
- Cấu trúc SISO ( một vào, một ra): Chỉ có một mệnh đề điều kiện và một mệnh đề kết luận Ví dụ: Nếu χ =A thì γ=B
- Cấu trúc MISO ( nhiều vào, một ra): Có từ 2 mệnh đề điều kiện trở lên và một mệnh đề kết luận Ví dụ: Nếu χ1=A1 và χ2 = A2 thì γ=B
- Cấu trúc MIMO ( nhiều vào, nhiều ra): Có ít nhất 2 mệnh đề điều kiện và
2 mệnh đề kết luận: Ví dụ: Nếu χ1=A1 và χ2 = A2 thì γ1=B1 và γ2 = B2
2.5.5.2 Mô tả mệnh đề hợp thành
Xét mệnh đề hợp thành: nếu χ =A thì γ=B; từ một giá trị x0 có độ phụ thuộc
đối với tập mờ S, ta xác định độ phụ thuộc của B Độ phụ thuộc đó biểu thị bởi ánh xạ A x 0 → B ( )y , lập lên tập mờ B’ trên tập nền B, mỗi phần tử dạng ( A ( ),x 0 B ( ))y
Có nhiều nguyên tắc xác định phần tử của B’, trong điều khiển mờ thường sử dụng 2 phương pháp:
Luật hợp thành R biểu diễn một hay nhiều hàm liên thuộc A B ( , )x y ứng với một hay nhiều mệnh đề hợp thành A => B
Luật hợp thành chỉ có một mệnh đề hợp thành được gọi là luật đơn, có từ 2 trở lên gọi là luật hợp thành phức
Hình 2 14 Mô tả hàm liên thuộc của luật hợp thành
Tùy theo cách thu nhận các hàm liên thuộc
và phương pháp thực hiện phép hợp để nhận tập mờ B’ mà ta có tên gọi các luật hợp thành khác nhau:
- Luật hợp thành MAX-MIN: hàm thuộc xác định bởi MIN, phép hợp xác định bởi luật MAX
- Luật hợp thành MAX-PROD: hàm thuộc xác định bởi PROD, phép hợp xác định bởi luật MAX
- Luật hợp thành SUM-MIN: hàm thuộc xác định bởi MIN, phép hợp xác định bởi luật SUM
- Luật hợp thành SUM-PROD: hàm thuộc xác định bởi PROD, phép hợp xác định bởi luật SUM
Giải mờ là quá trình xác định một giá trị rõ y0 nào đó có thể chấp nhận được hàm liên thuộc B ( )y của giá trị mờ B’ (tập mờ B’) Có hai phương pháp giải mờ chính là phương pháp cực đại và phương pháp điểm trọng tâm
Giải mờ theo phương pháp cực đại có 2 bước:
Bước 1: Xác định miền chứa giá trị rõ y0 (miền G) G là miền mà tại đó hàm liên thuộc B ( )y đạt giá trị cực đại
Bước 2: Xác định y0 có thể chấp nhận được từ G Gọi y1 và y2 là hai giá trị rõ ứng với cận bên trái và bên phải của miền G, ví dụ luật R gồm R1 và R2 khi đó có
Giải mờ theo phương pháp trọng tâm sẽ cho y’ là hoành độ của điểm trọng tâm được bao bởi trục hoành và đường B ( )y Công thức xác định:
2.5.7 Cấu trúc và các bước xây dựng bộ điều khiển mờ
2.5.7.1 Cấu trúc bộ điều khiển mờ
Một bộ điều khiển mờ gồm 3 khối cơ bản: khối mờ hóa, thiết bị hợp và khối giải mờ Ngoài ra còn có thêm 2 khối giao diện vào và ra
Hình 2 15 Cấu trúc bộ điều khiển mờ
- Khối mờ hóa có chức năng chuyển mỗi giá trị rõ của biến ngôn ngữ đầu vào thành vector à cú số phần tử bằng số tập mờ đầu vào
- Thiết bị hợp thành mà bản chất của nó là sự triển khai luật hợp thành R được xây dựng trên cơ sở luật điều khiển
- Khối giải mờ có nhiệm vụ chuyển tập mờ đầu ra thành giá trị rõ y0 (ứng với mỗi giá trị rõ x0 để điều khiển đối tượng)
- Giao diện đầu vào thực hiện việc tổng hợp và chuyển đổi tín hiệu vào (từ tương tự sang số), ngoài ra còn có thể có thêm các khâu phụ trợ để thực hiện bài toán động như tích phân, vi phân,
- Giao diện đầu ra thực hiện chuyển đổi tín hiệu ra (từ số sang tương tự) để điều khiển đối tượng
2.5.7.2 Nguyên lý bộ điều khiển mờ
Hình 2 16 Sơ đồ cấu trúc bộ điêu khiển mờ
Nguyên tắc tổng hợp một bộ điều khiển mờ hoàn toàn dựa vào những phương pháp toán học trên cơ sở định nghĩa các biến ngôn ngữ vào/ra và lựa chọn luật điều khiển Do các bộ điều khiển mờ có khả năng xử lý các giá trị vào/ra biểu diễn dưới dạng dấu phẩy động với độ chính xác cao nên chúng hoàn toàn đáp ứng được các yêu cầu của một bài toán điều khiển “ rõ ràng” và “ chính xác”
2.5.7.3 Các bước xây dựng bộ điều khiển mờ
Xây dựng bộ điều khiển mờ bao gồm 5 bước thực hiện:
Bước 1: Định nghĩa các biến ngôn ngữ vào/ra
Bước 2: Mờ hóa các biến ngôn ngữ vào/ra:
Bước 3: Xây dựng các luật hợp thành
Bước 4: Chọn thiết bị hợp thành
Bước 5: Giải mờ và tối ưu hóa
Sau khi thiết kế xong bộ điều khiển mờ, ta cần mô hình hóa và mô phỏng hệ thống để kiểm tra kết quả, đồng thời chỉnh lại một số tham số có chế độ làm việc tối ưu Các tham số có thể diểu chỉnh trong bước này là luật điều kiển, trọng số của các luật, hình dạng và miền xác định của các hàm liên thuộc.
Bộ điều khiển PD-Fuzzy
2.6.1 Thuật toán điều khiển mờ động
Thuật toán mờ động là thuật toán kết hợp giữa hệ kinh điển và hệ mờ, cụ thể là sự kết hợp giữa thuật toán điều khiển mờ và bộ điều khiển PID Các thành phần P,D là các thành phần của sai lệch đầu vào, còn I là thành phần của đầu ra bộ điều khiển mờ
- Thuật toán mờ động PD
Bộ điều khiển có hai đầu vào: lỗi ( sự khác biệt giữa điểm đặt và đầu ra thực tế), sự thay đổi trong lỗi và một đầu ra Ưu điểm của bộ điều khiển PDFuzzy là dự đoán lỗi và cả thiện độ ổn định của hệ thống vòng kín Sơ đồ khối cơ bản của bộ điều khiển PDFuzzy:
Hình 2 17 Sơ đồ khối bộ điều khiển PDFuzzy
2.6.2 Thiết kế bộ điều khiển PD-Fuzzy
Bộ điều khiển PD-Fuzzy cho xe được thiết kế là bộ điều khiển vòng kín Ngõ vào của bộ điều khiển là sai số và đạo hàm của sai số giữa đường hồi quy và đường chính giữa khung hình Ngõ ra là góc lái và vận tốc của xe Bộ điều khiển của hệ thống như hình 2.18 dưới đây:
Hình 2 18 Bộ điều khiển PD-Fuzzy cho hệ thống
Chương trình đa luồng
2.7.1 Cách thức hoạt động chương trình đa luồng
Chương trình đa luồng nghĩa là chạy một số chương trình khác nhau một cách đồng thời Các luồng trong một quy trình chia sẻ cùng một không gian dữ liệu với luồng chính và có thể chia sẻ thông tin, giao tiếp với nhau dễ dàng Giúp chương trình sử dụng ít bộ nhớ, xử lý nhanh hơn
Hình 2 19 Sơ đồ khối lập trình đa luồng
2.7.2 Thư viện Threading trên Python Để cho bo Raspberry Pi có thể xử lý khối lượng chương trình lớn một cách nhanh chóng, đồng thời nhóm em viết chương trình đa luồng thông qua module Threading của Python Một chương trình đa luồng chứa hai hay nhiều phần mà có thể chạy đồng thời và mỗi phần có thể xử lý tác vụ khác nhau tại cùng một thời điểm
Python cung cấp 2 module là thread và threading Để bắt đầu một thread mới cũng như một số tác vụ trong khi lập trình đa luồng Mỗi một Thread đều có vòng đời chung là bắt đầu, chạy và kết thúc Một Thread có thể bị ngắt hoặc tạm thời dừng trong khi các luồng khác đang chạy
Mặc dù module Thread hiệu quả với đa luồng tầm thấp nhưng khi so sánh với module threading thì còn nhiều hạn chế Threading cung cấp nhiều hỗ trợ mạnh và cấp độ cao hơn Ngoài các phương thức có trong thread module thì threading module còn có các phương thức khác, đó là:
- threading.activeCount(): trả về số đối tượng thread đã active
- threading.curentThread(): trả về số đối tượng thread trong Thread control của Caller
- threading.enumerate(): trả về một danh sách tất cả đối tượng thread mà hiện tại là active
Bên cạnh đó, threading module có lớp thread để triển khai đa luồng Lớp này có phương thức sau:
- run(): là điểm xuất phát cho một thread
- start(): bắt đầu một thread bởi gọi phương thức run()
- join([time]): đợi cho các thread kết thúc
- isAlive(): kiểm tra xem một thread có đang thực thi hay không
- getName(): trả về tên một thread
- setName(): thiết lập tên của một thread
Khi lập trình đa luồng, các luồng chia sẻ chung tài nguyên của tiến trình, vì vậy sẽ có những thời điểm nhiều luồng sẽ đồng thời thay đổi dữ liệu chung Do đó ta cần đảm bảo tại một thời điểm chỉ có duy nhất một luồng cho phép truy cập vào dữ liệu chung, nếu các luông khác muốn truy cập vào đoạn dữ liệu này thì cần đợi thread trước đó hoàn thành công việc của mình Để đồng bộ hóa các thread, module threading có phương thức sau:
Mô hình Server & Client
Mô hình Server & Client là một mô hình giao tiếp phổ biến trong truyền thông thông tin Mô hình gồm 2 phía, phía Client và Server Client có chức năng thực hiện một tác vụ chuyên biệt nào đó, nó có thể truyền thông tin và nhận lệnh từ Server Server nhận thông tin từ Client và gửi thông tin điều khiển
Phía Client sẽ luôn chủ động tạo kết nối với Server, còn bên phía Server sẽ ở trong chế độ chờ Client kết nối Client trong một lúc chỉ có thể kết nối duy nhất một Server còn Server có thể giao tiếp nhiều Client Ở đồ án này nhóm em sử dụng máy tính bàn để làm Server để nhận dữ liệu hình ảnh từ Raspberry Pi và gửi tín hiệu xử lý về ngược lại
Hình 2 20 Mô hình kết nối Raspberry Pi với máy chủ
Một socket là một end-point của một liên kết giữa hai ứng dụng Socket cho phép giao tiếp trong một tiến trình, giữa những tiến trình trên cùng một máy hoặc giữa nhiều máy với nhau [7] Sau khi được kích hoạt, một tiến trình Client và Server được tạo và mục đích của socket được sử dụng là để giúp 2 tiến trình này có thể truyền thông với nhau dễ dàng Socket được chia chủ yếu thành 2 loại: Stream socket và Datagram socket Để có thể tương tác với nhau và máy chủ có thể nhận liên lạc từ máy khách thì máy chủ phải luôn sẵn sàng Khi tiến trình chủ đã chạy, lúc này tiến trình khách sẽ tạo ra 1 socket TCP để có thể kết nối đến máy chủ Trong khi máy khách đang tạo TCP socket, nó sẽ kết nối tới địa chỉ IP thông qua số cổng của tiến trình chủ
Khi socket của tiến trình khách được tạo, TCP trên máy khách sẽ tiến hành thực hiện quá trình bắt tay 3 bước và thiết lập kết nối TCP tới máy chủ
Python có hỗ trợ module socket để ta có thể thực hiện kết nối truyền dữ liệu từ máy chủ sang bo Pi và ngược lại để có thể xử lý chương trình của xe tự hành realtime Để tạo một socket ta sử dụng hàm: socket.socket(Address Family, Socket Type) Trong đó:
- Address Family: kiểu thiết lập kết nối Gồm 3 kiểu: AF_INET (Ipv4), AF_INET6 (Ipv6), AF_UNIX
- Socket Type: cách thiết lập giao thức Có 2 cách thiết lập giao thức là SOCK_STREAM(TCP) và SOCK_DRAM(UPD).
THIẾT KẾ MÔ HÌNH
YÊU CẦU HỆ THỐNG
Camera thu nhập hình ảnh để xử lý nhận diện và tìm ra tâm đường, dự đoán đường đi khi có vật cản trên bo Raspberry Pi Sau đó Raspberry Pi sẽ gửi tín hiệu điều khiển qua bo Arduino theo giao tiếp USB để bo Arduino điều khiển servo và động cơ DC.
THIẾT KẾ HỆ THỐNG
Mô hình “ Thiết kế, nghiên cứu và chế tạo xe tự hành ứng dụng xử lý ảnh và AI” của nhóm thi công cần thực hiện được các yêu cầu sau:
- Phần cứng chắc chắn, dễ tháo lắp để thuận tiện cho việc sạc pin Lipo, thay thế linh kiện
- Dễ điều khiển, hoạt động ổn định
- Hoàn thành theo đúng tiến độ đã đặt ra
Mô hình bao gồm 2 phần: phần điện và phần cơ khí
3.2.1.1 Yêu cầu thiết kế Để xe có thể di chuyển đúng hướng và tốc độ yêu cầu phần hệ thống lái phải chắc chắn để khi servo thay đổi góc hệ thống lái sẽ chuyển hướng chính xác, bộ hộp số các bánh răng phải đồng bộ để không bị mòn và chạy đúng tốc độ yêu cầu Vì phần cứng được xây dựng từ mô hình xe RC 1/10 có sẵn nên cần thiết kế thêm các đế bằng mica và giá đỡ để gắn các bo mạch và camera
- Khung xe RC 1/10 ( đã bao gồm bộ hộp số và hệ thống đánh lái )
- Đế Mica để gắn các bo mạch
Thiết kế phần khung xe
Mô hình xe tự hành được nhóm vẽ lại dựa trên kích thước của phần khung xe và được lắp ráp với phần đế mica và các bộ phận khác
Hình 3 1 Bản vẽ 3D xe tự hành
Hình 3 2 Bản vẽ 2D xe tự hành
Thiết kế phần đế Mica
Dựa vào kích thước của khung xe, nhóm đã thiết kế phần đế Mica có kích thước phù hợp với phần khung
Hình 3 3 Bản vẽ 3D đế Mica để gắn bo mạch
Hình 3 4 Bản vẽ 2D của đế Mica gắn bo mạch
Hình 3 5 Bản vẽ 3D giá đỡ camera
Hình 3 6 Bản vẽ 2D của giá đỡ camera
- Khung xe RC 1/10 được làm bằng sợi cacbon, kích thước 400x150mm, trọng lượng 750g
- Bộ nhông kim loại gồm cốt nhông motor 3.17mm và nhông chính 5mm, bước răng 6mm Nhông chính có 65 răng, nhông motor có 20 răng Tỉ số truyền của bộ hộp số là 3.25
Hình 3 8 Bộ nhông kim loại
- Trụ đồng M3 5cm để liên kết phần đế Mica với khung xe RC và 2cm để liên kết đế Mica với bo mạch
Hình 3 9 Thông số trụ đồng M3
- Dựa theo thiết kế các lỗ trên phần đế Mica nhóm em lựa chọn sử dụng ốc và đai ốc M3 theo kích thước lỗ đã thiết kế
Hình 3 10 Ốc M3 Đường kính trên danh nghĩa
Bảng 3 1 Bảng thông số các loại ốc
- Chọn động cơ DC: Động cơ là trang bị cần thiết để tạo ra sự chuyển động của xe Nhóm em lựa chọn động cơ DC size 540 phù hợp với kích thước của khung xe, có mo-men xoắn lớn và giá thành thấp Các thông số của động cơ DC 540 như sau:
Thông số Giá trị Ghi chú Hình ảnh Điện áp 6-12V - Ở mức điện áp
12V, dòng điện 1.95A và tốc độ
- Ở mức điện áp 6V, dòng điện là 1.3A và tốc độ
Chiều dài 50mm Đường kính thân động cơ
Bảng 3 2 Thông số động cơ DC
ESC là một bộ điều tốc chuyên dùng điều khiển các động cơ cho xe RC, tùy theo từng loại động cơ và mục đích ta sẽ chọn ESC phù hợp Ở đây nhóm em lựa chọn ESC 1060 60A Hobbywings Các thông số của ESC 1060 60A Hobbywings như sau:
Thông số Giá trị Ghi chú Hình ảnh
BRUSHED Điện áp 2-3s Lipo hoặc 5-
- Pin 2S Lipo hoặc 5S NiMH: động cơ 540 hoặc 550 >
- Pin 3S Lipo hoặc 9S NiMH: động cơ 540 hoặc 550 >
Bảng 3 3 Bảng thông số của ESC
- Chọn động cơ RC Servo Động cơ RC Servo có chức năng làm thay đổi hướng di chuyển của xe Lựa chọn động cơ RC Servo phù hợp với khối lượng của phần cứng để khi xe di chuyển động RC Servo có thể thay đổi hướng lái chính xác Các thông số của động cơ RC Servo TIANKONGRC:
Thông số Giá trị Ghi chú Hình ảnh
Model TD-8120MG Điện áp 4.8 – 7.2V
21.8Kg/cm – 6V Nhiệt độ hoạt động
Bảng 3 4 Bảng thông số động cơ RC Servo
Pin Lipo có chức năng cấp nguồn cho ESC để điều khiển động cơ Dựa theo thông số của ESC đã chọn nhóm em lựa chọn pin Lipo 2S điện áp 7.4V phù hợp với điện áp hoạt động của ESC 1060 60A Thông số của pin Lipo 2S:
Thông số Giá trị Hình ảnh Điện áp 7.4V
Bảng 3 5 Bảng thông số pin Lipo
Camera như là mắt của một chiếc xe tự hành, nó có chức năng thu nhận hình ảnh từ môi trường xung quanh để cho bo Raspberry Pi xử lý Vì sử dụng bo Raspberry nên cần chọn camera được hỗ trợ bởi Pi và đáp ứng yêu cầu đã đặt ra khi thực hiện mô hình là tốc độ xử lý 60fps, góc quay rộng nên nhóm em lựa chọn Rpi camera (G), Fisheye Lens Thông số của Rpi camera (G):
Thông số Giá trị Hình ảnh
Góc nhìn 160⁰ Độ phân giải 1080p
Bảng 3 6 Thông số Rpi camera (G)
3.2.2.2 Sơ đồ kết nối phần điện
Mô hình xe tự hành của nhóm em bao gồm các thiết bị: bo mạch Raspberry Pi
4 B+, bo mạch Arduino, động cơ DC 540, động cơ DC servo, ESC 1060 60A, Rpi Camera (G), pin Lipo 2s (7.4V) Các thiết bị được kết nối với nhau như hình 3.11
Hình 3 11 Sơ đồ kết nối các thiết bị
Hình 3 12 Sơ đồ đấu nối dây chi tiết giữa các thiết bị điện
Trong đó Raspberry Pi đóng vai trò quan trọng là bộ xử lý chính, có nhiệm vụ lấy hình ảnh từ Camera xử lý và truyền tín hiệu qua Arduino để điều khiển Servo và ESC thông qua thư viện PyFirmata ESC có vai trò nhận tín hiệu từ Arduino và băm xung điều khiển động cơ DC chạy Các thiết bị được kết nối chân của bo Raspberry theo bảng 3.7 bên dưới
Tên thiết bị Chân thiết bị Chân của Raspberry
Rpi Camera (G) Camera Module Port
Arduino USB Plug Cổng USB
Bảng 3 7 Kết nối chân với Raspberry Pi
Vì ESC có tích hợp BEC cho đầu ra 6V nên nhóm sẽ cấp nguồn cho Servo thông qua BEC của ESC Khi kết nối thẳng Servo với Arduino, nguồn ra cấp cho Servo không đủ nên Arduino hoạt động không ổn định Các chân GND của ESC và Servo được kết nối chung và kết nối với GND của bo Arduino ESC và Servo kết nối các chân với Arduino theo bảng sau
Tên thiết bị Chân thiết bị Chân của Arduino
Bảng 3 8 Bảng kết nối chân với Arduino
3.2.3 Chi tiết mô hình xe
Hình 3 13 Chi tiết mô hình xe hoàn chỉnh
Hình 3 14 Mô hình sa bàn để xe hoạt động
3.2.5 Mô hình biển báo giao thông
Các loại biển báo giao thông
Tên biển báo Hình ảnh
Biển báo No Turn Right
Biển báo No Turn Left
Bảng 3 9 Các loại biển báo giao thông sử dụng trên Map
GIẢI THUẬT VÀ CHƯƠNG TRÌNH
Mô tả chương trình điều khiển xe tự hành
Chương trình điều khiển xe tự hành gồm 3 phần:
- Phần 1: xử lý ảnh tìm ra lane đường và điều khiển bám đường
- Phần 2: điều khiển tránh vật cản
- Phần 3: nhận diện biển báo giao thông và điều khiển xe đi theo biển báo
Phần thứ nhất và phần thứ hai được lập trình thực hiện song song, giúp chương trình thực hiện được nhanh hơn và tận dụng được tối đa tài nguyên của CPU Hai phần này có các thông tin được truyền từ phần này sang phần kia Trong phần điều khiển tránh vật cản, nó sử dụng một phần kết quả của phần điều khiển bám đường, đều dựa vào đường hồi quy Sơ đồ thực hiện chương trình như hình 4.1:
Hình 4 1 Sơ đồ thực hiện chương trình
Các thuật toán
4.2.1 Xây dựng phần điều khiển bám đường và tránh vật cản
Trong phần này gồm hai nội dung chính là xây dựng thuật toán tìm tâm đường, thuật toán hồi qui dự đoán và thuật toán điều khiển bám đường
4.2.1.1 Thuật toán tìm tâm đường
Thuật toán tìm tâm đường nhóm sử dụng thuật toán xác định lane đường từ hình ảnh thu được và tìm ra tâm của lane đường Sử dụng thuật toán hồi quy để dự đoán các điểm tâm đường và so sánh với đường chính giữa của khung hình từ đó dự đoán được quỹ đạo của đường đi Đường chính giữa của lane đường tập hợp các điểm (x,y) là tâm đường được dự đoán
Sơ đồ thực hiện thuật toán tìm lane và tâm đường như hình dưới
Hình 4 2 Sơ đồ thuật toán tìm tâm đường
Dữ liệu đầu vào là ảnh có kích thước 320x160 thu được từ Picamera Từ ảnh đầu vào ta chuyển đổi ảnh sao cho được góc nhìn vuông góc với mặt đường ( ảnh Bird View)
Hình 4 1Hình ảnh đầu vào từ camera
Hình 4 2 Hình ảnh Bird View
Sau đó lọc ảnh sử dụng bộ lọc màu ( Color Filtering) bằng cách chuyển về khung màu cvtColor(image,cv2.COLOR_BGR2HSV), chỉ định giá trị HSV cho màu cần lọc, lọc ra những pixel có giá trị nằm trong vùng giá trị đã chọn dùng hàm inRange(), cuối cùng là chập ảnh gốc ban đầu và ảnh nhị phân để thu được ảnh màu mới dùng hàm bitwise_and()
Hình 4 3 Hình ảnh sau khi qua bộ lọc
Sau khi xử lý thành ảnh Bird View, chuyển ảnh về ảnh xám với hàm cvtColor(image, cv2.COLOR_RGB2GRAY) sẽ được ảnh xám như hình sau
Tiếp đến là bước phân ngưỡng Đầu tiên là chuyển ảnh về ảnh xám, sau đó lọc ảnh để loại bỏ bớt nhiễu với hàm cv2.bilateraFilter(src=image, d=a, sigmaColor sC, sigmaSpace = ss) và phân ngưỡng ảnh tìm ra ảnh nhị phân với hàm: cv2.threshold(image, thresh, 255, cv2.THRESH_BINARY)
Tiếp theo ta tìm Contour với từng ảnh dùng hàm cv2.findContours Sau đó tính diện tích của các vùng Contour (hay vùng trắng), từ đó lọc các vùng Contour có diện tích nhỏ hơn điều kiện tìm ra được lane đường
Hình 4 5 Hình ảnh sau khi xử lý phân ngưỡng
Sau khi đã xác định được phần lane đường để xe chạy, ta sẽ tìm tọa độ tâm đường Ở bước này nhóm em sử dụng thuật toán hồi quy để tìm và dự đoán tâm đường dựa trên phần lane đường tìm được khi xe di chuyển do ở bước này nhóm không sử dụng xác định line đường Đầu tiên ta xác định các điểm trên ảnh nhị phân lớn hơn không thì cho điểm đó thành 1 để phân vùng tìm ra các điểm ảnh thuộc lane đường và giữ lại phần lane đường
Tiếp theo tạo 2 mảng chưa các giá trị theo trục x và trục y dùng hàm shape[]
Và tạo 2 mảng chứa các giá trị x và giá trị y Để tìm ra phương trình hồi qui ta tính các thông số cần thiết theo công thức bên dưới: x x
Tính độ tương quan giữa x và y:
Sau khi tìm ra được các thông sẽ cần thiết ta sẽ tìm được phương trình hồi qui mẫu của các điểm tâm đường (x,y) như phương trình (4.10) ˆ ˆ x a y b (4.10)
Cuối cùng khi đã tìm được phương trình mẫu ta sẽ vẽ được đường hồi qui trên ảnh đầu vào dùng hàm cv2.line() như hình sau
Hình 4 6 Hình ảnh đường hồi quy
4.2.1.2 Thuật toán điều khiển bám đường Để xe điều khiển bám đường, ta cần phải điều khiển góc của servo để thay đổi góc của hệ thống đánh lái Sau khi tìm được các giá trị (x,y) từ phương trình mẫu hồi qui ta sẽ so sánh với setpoint để tìm ra sai số Từ sai số tìm được áp dụng bộ điều khiển mờ để tìm ra giá trị góc lái của servo và giá trị vận tốc Tổng quan về khối điều khiển như hình 4.7 bên dưới
Hình 4 7 Sơ đồ điều khiển hệ thống a) Định nghĩa các biến ngôn ngữ vào/ra Đại lượng vào của bộ điều khiển mờ là sai số giữa setpoint với điểm chính giữa của đường hồi qui và đạo hàm của sai số Được ký hiệu là e và e setpoint- e x (4.11)
Với x là vị trí của xe và setpoint tùy trường hợp Đại lượng đầu ra của bộ điều khiển mờ là giá trị góc của servo và giá trị vận tốc Ký hiệu là alpha và veloc Hình dưới đây mô tả bộ điều khiển mờ
Hình 4 8 Sơ đồ thực hiện của bộ điều khiển mờ b) Mờ hóa các biến ngôn ngữ vào ra
- Số lượng các giá trị ngôn ngữ cho biến e và e là 7 giá trị: e {NB1, NM1, NS1, ZE1, PS1, PM1, PB1}
NB1 ( Negative Big): Âm nhiều
NM1 ( Negative Medium): Âm trung bình
NS1 ( Negative Small): Âm ít
PS1 (Positive Small): Dương ít
PM1 (Positive Medium): Dương trung bình
PB1 (Positive Big): Dương nhiều
- Miền xác định cho biến ngõ vào e và e của bộ điều khiển mờ được xác định như hình 4.9
Hình 4 9 Miền xác định ngõ vào e
Hình 4 10 Miền xác định của ngõ vào e
- Số lượng các giá trị ngôn ngữ cho biến ngôn ngữ alpha là 7 giá trị:
Alpha, veloc {NB, NH, NS, ZE, PS, PH, PB}
NB ( Negative Big): Lệch trái nhiều
NM ( Negative Medium): Lệch trái vừa
NS ( Negative Small): Lệch trái ít
PS (Positive Small): Lệch phải ít
PM (Positive Medium): Lệch phải vừa
PB (Positive Big): Lệch phải nhiều
- Miền xác định cho biến ngõ ra alpha của bộ điều khiển mờ được xác định như hình 4.11
Hình 4 11 Miền xác định ngõ ra giá trị góc alpha
Các giá trị NB, NM, NS, ZE, PS, PM, PB trong phần chương trình tương ứng với lần lượt các giá trị 150, 130, 110, 90, 70, 50, 30 ( ⁰ ) ứng với vị trí góc lái từ trái sang phải
- Miền xác định cho biến ngõ ra veloc của bộ điều khiển mờ được xác định như hình 4.12
Hình 4 12 Miền xác định ngõ ra giá trị vận tốc
Các giá trị NB, NM, NS, ZE, PS, PM, PB trong phần chương trình tương ứng với lần lượt các giá trị tần số xung 1500, 1510, 1520, 1530, 1540, 1550, 1560 Luật mờ
Các luật của bộ điều khiển được thể hiện trong bảng 4.1 e e
NB NH NS ZE PS PH PB
NB NB NB NH NH NS NS ZE
NH NB NH NH NS NS ZE PS
NS NH NH NS NS ZE PS PS
ZE NH NS NS ZE PS PS PH
PS NS NS ZE PS PS PH PH
PH NS ZE PS PS PH PH PB
PB ZE PS PS PH PH PB PB
Bảng 4 1 Bảng luật mờ của bộ điều khiển c) Bộ điều khiển PID
Bộ điều khiển PID được thiết kế để làm giảm sai số của ngõ vào giúp cho việc điều khiển xe chính xác, thời gian đáp ứng nhanh Việc tinh chỉnh các thông số KP,
KI, KD dựa trên đáp ứng thực tế của hệ thống khi hoạt động Các thông số ảnh hưởng đến độ vọt lố, thời gian xác lập và thời gian tăng của đáp ứng như bảng 4.2
Các giá trị của các thông số độ lợi mà nhóm đã tìm được thông qua việc tinh chỉnh theo thực tế: KP = 5, KD = 0.000001 Độ lợi Thời gian tăng Độ vọt lố Thời gian xác lập
KP Giảm Tăng Thay đổi ít Giảm
KD Thay đổi ít Giảm Giảm Thay đổi ít
Bảng 4 2 Ảnh hưởng của thay đổi các thông số độ lợi của bộ điều khiển PD
4.2.2 Điều khiển tránh vật cản
Phần điều khiển tránh vật cản bao gồm hai nội dung là thuật toán tránh vật cản và điều khiển tránh vật cản
Thuật toán tránh vật cản
Thuật toán tránh vật cản được xử lý dựa theo phần xác định lane đường Nếu có vật cản thì tìm ra phần lane đường với và tìm tâm đường mới dựa vào thuật toán hồi quy ở thuật toán tìm tâm đường
Hình 4 13 Thuật toán tránh vật cản
Các bước thực hiện tương tự như thuật toán tìm lane đường: từ ảnh đầu vào thu từ camera Pi, cắt lấy vùng quan tâm, chuyển ảnh RGB sang ảnh HSV, tiền xử lý loại bỏ nhiễu trong ảnh Sang bước lọc màu em sử dụng hàm inRange để tìm ra phần lane đường có màu sắc nằm trong dải màu chỉ định nên khi có vật cản, phần vật cản sẽ là các pixel bằng 1 Tiếp theo, phần diện tích của những pixel bằng không (vùng trắng) hay phần lane đường sẽ bị thay đổi
Điều khiển tránh vật cản
Thiết kế giao diện GUI
Giao diện GUI được nhóm thiết kế dựa trên thư viện Tkinter được hỗ trợ bởi Python
Giao diện GUI gồm 2 màn hình là màn hình chính và màn hình điều khiển Giao diện màn hình chính sẽ giới thiệu phần thông tin nhóm như hình 4.17
Hình 4 17 Giao diện màn hình chính
Giao diện màn hình điều khiển sẽ gồm hai nút nhấn để bắt đầu cho xe chạy và dừng lại Ở màn hình này sẽ hiển thị ảnh đầu vào từ camera, ảnh nhận diện biển báo và ảnh xử lý lane đường
Hình 4 18 Giao diện màn hình điều khiển
KẾT QUẢ VÀ ĐÁNH GIÁ
Kết quả thực hiện
Phần cứng được thiết kế và lắp ráp chắc chắn, các bo mạch điện cố định trên đế mica Khi xe di chuyển không bị rung lắc, phần hệ thống đánh lái đáp ứng nhanh
Hình 5 1 Mô hình xe hoàn chỉnh
5.1.2 Nhận diện lane và bám đường
- Xe nhận diện được lane đường và di chuyển bám đường theo đúng yêu cầu Đường hồi quy trùng với đường chính giữa khung hình
Hình 5 2 Điều khiển bám đường
- Xe có thể tránh được các vật cản trên đường đi Trong một số trường hợp xe không thể di chuyển tránh vật cản được do phần vật cản quá lớn không thể xác định được vùng lane đường hoặc các vật cản có màu trắng trùng với màu lane đường
- Khi có vật cản vùng hình ảnh vật cản sẽ thành vùng màu đen và đường hồi quy dịch sang phía tay phải khi vật cản nằm bên tay trái lane đường như hình 5.3
Hình 5 3 Vật cản nằm bên trái
- Đường hồi quy sẽ lệch sang trái nếu vật cản nằm bên phải lane đường như hình 5.4
Hình 5 4 Vật cản nằm bên phải
- Đường hồi quy sẽ lệch sang phía có diện tích lane đường lớn khi vật cản nằm ở giữa lane đường như hình 5.5 và 5.6
Hình 5 5 Vật cản nằm giữa lane đường
Hình 5 6 Vật cản nằm giữa lane đường
- Dữ liệu bao gồm 10000 ảnh đầu vào Số lượng dữ liệu train, test (kiểm tra độ chính xác của mô hình sau quá trình huấn luyện), validation (kiểm tra độ chính xác của mô hình trong quá trình huấn luyện) như bảng 5.1
Bảng 5 1 Cơ sở dữ liệu
- Độ chính xác của mô hình sau khi train là mAP = 99.6% Đường màu đỏ biểu diễn trung bình tỷ lệ dự đoán chính xác của mô hình (mAP) với tỉ lệ xấp xỉ là 99.6% Còn đường màu xanh biểu diễn lỗi của việc dự đoán, độ lỗi dự đoán của mô hình là 0.0466
Hình 5 7 Kết quả huấn luyện
- Nhận diện tốt các biển báo đã được train và di chuyển đúng theo các biển báo Độ chính xác của mô hình YOLO sau khi huấn luyện cho từng biển báo có tỷ lệ chính xác trên 90% được thể hiện như bảng 5.1
Bảng 5 2 Tỉ lệ nhận dạng các biển báo
- Biển báo No Turn Left (Cấm rẽ trái)
Khi nhận biển báo No Turn Left xe sẽ điều khiển bám phần đường bên trái Phần diện tích lane đường để thực hiện điều khiển khi nhận được biển là nhỏ hơn
Hình 5 8 Biển báo No Turn Left
Hình 5 9 Nhận dạng biển báo NTL
- Biển báo No Turn Right (Cấm rẽ phải)
Khi nhận biển báo No Turn Right xe sẽ bám lệch sang phía phải của lane Phần diện tích lane đường để thực hiện điều khiển khi nhận được biển là nhỏ hơn 60000
Hình 5 10 Biển báo No Turn Right
Hình 5 11 Nhận dạng biển báo NTR
- Biển báo Turn Right (Rẽ phải)
Khi nhận biển báo Turn Right xe sẽ rẽ phải Phần diện tích lane đường để thực hiện điều khiển khi nhận được biển là nhỏ hơn 60000
Hình 5 12 Biển báo Turn Right
Hình 5 13 Nhận dạng biển báo TR
- Biển báo Turn Left (Rẽ trái)
Khi nhận biển báo Turn Left xe sẽ rẽ trái Phần diện tích lane đường để thực hiện điều khiển khi nhận được biển là nhỏ hơn 60000
Hình 5 14 Biển báo Turn Left
Hình 5 15 Nhận dạng biển báo TL
- Biển báo STOP (Dừng lại)
Khi nhận biển báo STOP xe sẽ dừng lại Phần diện tích lane đường để thực hiện điều khiển khi nhận được biển là nhỏ hơn 60000
Hình 5 17 Nhận dạng biển báo STOP
Kết quả nhận diện biển báo
- Với dữ liệu 2000 ảnh được lấy mẫu (Validation) mô hình cho độ chính xác trung bình 99.6% và độ lỗi trung bình là 0.0466 như hình 5.7
- Sau khi thực hiện train và test mô hình nhận diện biển báo với 1000 dữ liệu ảnh test, tỉ lệ nhận diện các biển báo đều trên 93% cụ thể như bảng 5.1
- Khi hoạt động thực nghiệm trên mô hình xe tự hành, mô hình nhận dạng biển báo hoạt động chính xác, nhận diện được đủ 5 loại biển báo với độ chính xác cao ( hình 5.9, 5.11, 5.13, 5.15, 5.17)
5.1.5 Kết quả chạy thực nghiệm
- Xe được hoạt động dựa theo điều kiện cụ thể:
Độ rộng của lane đường 40-50cm
Biển báo giao thông cao 15cm, bán kính biển 7cm
Tốc độ mạng ổn định
Xe hoạt động với tốc độ thấp (1.5mHz-1.6mHz) khoảng 1m/s Tốc độ trung bình khoảng 0.5m/s
Với điều kiện trên, kết quả xe di chuyển theo từng yêu cầu đạt được kết quả sau:
Trường hợp 1: Xe di chuyển trên map không có biển báo và vật cản
Xe di chuyển bám lane đường và có thể rẽ trái, rẽ phải ở các khúc cua
Hình 5 18 Xe di chuyển bám lane đường
Trường hợp 2: Xe di chuyển trên map không có biển báo và có vật cản
Xe di chuyển tránh các vật cản có vị trí nằm phía bên phải và phía bên trái lane đường
Hình 5 19 Xe di chuyển trán vật cản bên tay phải
Hình 5 20 Xe di chuyển tránh vật cản bên tay trái
Trường hợp 3: Xe di chuyển trên map có biển báo và không có vật cản
Xe khi biển báo No Turn Left xe sẽ đi qua ngã 3 mà không rẽ trái như hình 5.21
Hình 5 21 Xe khi nhận diện được biển No Turn Left
Khi nhận diện được biển Turn Left và Turn Right xe sẽ rẽ sang trái và rẽ sang phải
Hình 5 22 Xe khi nhận diẹne được biển báo Turn Left
Hình 5 23 Xe khi nhận diẹne được biển báo Turn Right
Khi nhận diện được biển báo No Turn Right xe sẽ đi thẳng hoặc rẽ trái, không rẽ phải đúng với tín hiệu của biển báo
Hình 5 24 Xe khi nhận diện được biển báo No Turn Right
Khi nhận diện được biển báo STOP xe sẽ dừng lại
Hình 5 25 Xe khi nhận diện được biển báo STOP
Trường hợp 4: Xe di chuyển trên map có biển báo và vật cản
Hình 5 26 Xe di chuyển khi có biển báo và vật cản
Hình 5 27 Xe di chuyển khi có biển báo và vật cản
Hình 5 28 Xe di chuyển khi có biển báo và vật cản
Đáp ứng của hệ thống khi chạy thực nghiệm Đáp ứng của bộ PID khi xe chạy hết Map như hình 5.29 Với đường màu đỏ là x (vị trí thực tế của xe) và đường màu xanh là setpoint Khi gặp biển báo No Turn Left giá trị setpoint là 110, Turn Left là 180, Turn Right là 120 và No Turn Right là
190 Đáp ứng của bộ điều khiển chưa tốt, xe chạy vẫn còn lắc khi hoạt động trên đường dẫn đến đáp ứng không đạt Setpoint
Hình 5 29 Đáp ứng của xe khi chạy thực tế
Chi tiết kết quả thực nghiệm xem ở link google drive: https://drive.google.com/drive/folders/1B5g9nayXlSePG5GDg4Ia2-
Đánh giá
- Xe hoạt động tốt, các hệ thống trục, hệ thống đánh lái hoạt động ổn định, chính xác, đáp ứng tốt
- Xe nhận diện được lane đường và di chuyển bám đường, tránh vật cản
- Xe nhận diện được biển báo giao thông kết hợp di chuyển bám đường và tránh vật cản
- Trong khi di chuyển ở những nơi có biển báo thiếu ánh sáng thì xe không nhận diện được biển báo
- Xe không thể rẽ các khúc rẽ gấp, không đủ thời gian xử lý để xe hoạt động chính xác
- Khi tốc độ mạng internet không ổn định, xe không thể hoạt động chính xác
- Xe hoạt động theo đáp ứng yêu cầu đề ra Mô hình xe vẫn hoạt động trong điều kiện thí nghiệm, chưa hoạt động được trong mô trường thực tế.