Mình đã lập trình một chiếc “Xe tự hành” đơn giản như thế nào?

  1. Trí tuệ nhân tạo

Đôi nét về Xe tự hành


Chắc hẳn những cụm từ như “Xe tự hành” (hay “Xe tự lái”) đã không còn xa lạ đối với những người quan tâm tới công nghệ trong suốt thời gian qua. Đã có rất nhiều tập đoàn, công ty lớn tham gia vào vào cuộc đua nghiên cứu xe tự hành này, tiêu biểu có thể kể tới như Uber, Apple, Ford, Honda, BWM, Liên minh Renault – Nissan – Mitsubishi,….Theo số liệu báo cáo từ KPMG thì tổng số tiền đầu tư vào lĩnh vực này trong 05 năm vừa qua đã đạt tới con số hơn

50 tỷ USD

(woww)

Cho những bạn chưa biết, thì “xe tự hành” có thể hiểu là ôtô có khả năng hoạt động mà không cần đến sự điều khiển hay can thiệp của con người.

Nếu xe tự hành được nghiên cứu và áp dụng thành công thì những lợi ích mà nó đem lại sẽ có tác động rất tích cực đến chất lượng đời sống của con người như: giảm tỷ lệ tai nạn giao thông do bất cẩn của người lái, giảm thiểu chi phí sửa chữa ô tô; hỗ trợ người tàn tật, người già di chuyển dễ dàng, chủ động hơn….


Hành trình đáng nhớ với “Cuộc đua số”


Bản thân là một sinh viên CNTT thích mày mò công nghệ mới, khi biết được thông tin về cuộc thi “

Cuộc đua số 2018

” với chủ đề “

Xe tự hành

” được Tập đoàn FPT tổ chức và phát động, mình và nhóm bạn có cùng đam mê trí tuệ nhân tạo đã ngay lập tức ghi danh tham gia :D

Team mình may mắn (đương nhiên là cũng có nỗ lực “khá” nhiều :P) vượt qua được vòng loại đánh giá kiến thức, năng lực lập trình, xử lý hình ảnh và lọt được vào vòng Bán kết.

Tại vòng này, bọn mình đã được Ban tổ chức cung cấp một xe mô hình để thiết lập hệ thống điều khiển tự động và chạy đua trên sa hình mô phỏng. Đội nào có xe chạy nhanh và mượt mà nhất sẽ là winner.


Mình đã được tự tay lập trình “xe tự hành” như thế nào?


Đây là chân dung chiếc xe tự hành mini của chúng mình. Xe được xây dựng trên tỉ lệ 1:20 so với xe thật, có kích thước chiều dài khoảng 40cm và chiều cao 30cm. 

Em xe này có tốc độ chạy tối đa 25 km/h, có thể leo trèo bãi đất, bãi cát, leo dốc 45 độ, lội nước sâu tầm 10 cm, lội tuyết, sình lầy (cũng khá ngầu phải không :P)


Chi tiết hơn thì chiếc xe gồm có:

Động cơ điều khiển bánh

Vi mạch Jetson TX1 

Camera

  • Cảm biến vật cản
  • Màn hình led và các phím chức năng
  • Dây nối tín hiệu cho mạch và dây nguồn cho động cơ/mạch


Sau đây, mình sẽ chia sẻ qua một chút về quá trình team mình lập trình chiếc xe này và đi vào từng bài toán mà bọn mình cần giải quyết:

1. Xác định 2 biên đường


Để xe có thể đi đúng thì cần xác định 2 biên đường để đảm bảo xe luôn đi trong đó. Đây là một bài toán

xử lý ảnh

cơ bản vì 2 làn đường có màu trắng trên nền đen và bỏ qua yếu tố ngoại cảnh như nhiễu hạt hay vật cản.

Ngoài ra, xe chỉ cần xác định đoạn đường trước nó không xa, nên mình cắt 1 nửa ảnh, lấy đoạn đường phía dưới để xử lý. Mình đã sử dụng lọc màu trên kênh HSV để làm nổi bật các đường màu trắng, sau đó sử dụng thuật toán canny để cho ra biên ảnh. Từ canny mình có thể xác định được các đường thẳng trong ảnh => đây chính là các làn đường trong ảnh.

2. Xác định tâm đường


Khi đã xác định được 2 làn đường, việc xác định tâm đường sẽ đơn giản với đoạn đường thẳng đó là lấy trung điểm của 2 làn đường.

Tại mỗi lần di chuyển, tâm đường sẽ bị dịch chuyển, nhưng phải nằm trong giới hạn thay đổi nhất định, tâm đường mới không được quá lệch với tâm đường trước, thuật toán của bọn mình sẽ đặt ra 1 giới hạn để tránh tâm đường thay đổi đột ngột.

Tuy nhiên, có trường hợp đặc biệt là đoạn đường cong. Sẽ không thể lấy trung điểm nữa mà phải sử dụng

thuật toán hồi quy

để suy diễn từ các tâm đường trước đó.

3. Xe di chuyển


Cho xe di chuyển dựa trên tâm đường. Bọn mình sẽ cố để xe luôn đi theo tâm đường, và khi rẽ sẽ phải điều chỉnh góc nghiêng bánh trước theo tâm đường nhưng sẽ bẻ 1 góc mạnh hơn lúc đi thẳng khoảng 1,2 lần

4. Xác định biển báo rẽ đường


Trong phần xác định biển báo rẽ trái hoặc rẽ phải. Mình sẽ dụng màu xanh nước biển là bộ lọc, sau đó xác định contour và bao viền biển báo.

Khi đã biết được biển báo ở đâu, mình sẽ sử dụng

thuật toán trích đặc trưng

của biển báo là HOG và đưa vào một bộ nhận dạng đã được huấn luyện từ trước là SVM để xác định xem biển báo là gì => Lúc này sẽ biết được biển báo đó là rẽ trái hay rẽ phải và điều khiển xe theo hướng đó


====> Trên đây là toàn bộ những chia sẻ của mình về việc mình đã được tham gia lập trình một chiếc Xe tự hành ở level “đơn giản” như thế nào. Hy vọng là trong tương lai sẽ không còn là dạng “mô hình” hay “level đơn giản” nữa :D

Do thời gian có hạn, và bài viết dài quá thì cũng không hay, nên nếu bạn nào có những thắc mắc cần mình chia sẻ chi tiết hơn, hoặc những bạn bạn đã có những trải nghiệm tương tự thì hãy comment nhé :D Chúng ta cùng giao lưu học hỏi, nâng cao trình độ trên tinh thần

know one – teach one – get one

:D Cảm ơn mọi người đã đọc! 


P/S: Khá đáng tiếc do không có nhiều thời gian chuẩn bị và luyện tập, nên bọn mình đã phải tạm dừng chân tại vòng Bán kết. Rất hy vọng sẽ được nghe những chia sẻ kinh nghiệm từ các đội bạn đang chuẩn bị cho vòng Chung kết sắp tới! :D


Update video chạy thử tại:

Từ khóa: 

ai

,

artificial intelligence

,

xử lý ảnh

,

trí tuệ nhân tạo

,

lập trình nhúng

,

xe tự hành

,

trí tuệ nhân tạo

vip pro vậy

Trả lời

vip pro vậy

Bản thân mình cũng áp dụng cách lập trình xe tự lái tương tự như thế này, và đang thấy nó còn khá là thủ công, rule-based.

Không biết có phương pháp nào giúp cho xe có thể tự học được từ các lỗi của mình trong quá trình chạy không nhỉ?

Không biết anh còn giữ tài liệu về lập trình xe tự hành không ạ, nếu còn thì cho em xin với, em cảm ơn

het bao tien lam 1 xe vay

Mình là thành viên team alpha one thi CDS 2016-2017 và hỗ trợ cho 2 team prototype và win win sprial.

2 đội năm nay của DH FPT sử dụng nhiều thuật toán khá hay.

Kế thừa Source Code từ đội đua năm ngoái. Tích hợp thêm CNN và vài thuật toán khác vào nên mới có thành tích như vậy.

Bên FPT hình như cũng có dự án này. Để anh liên hệ mời thử vài bạn đang làm vào trao đổi xem sao?

Đang cần áp dụng vào thực tế, liên hệ giúp mình 0914792937

Hình như Board này là jetson tk1 mà bạn. Mà như trên theo mình nghĩ còn hard code. Góc ra sao bẻ liền, ko dự tính đường cong.