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

Discussion in 'Kiến thức' started by Nguyen Hoang Tung, Dec 4, 2018.

  1. Nguyen Hoang Tung

    Nguyen Hoang Tung New Member

    Joined:
    Nov 16, 2018
    Messages:
    7
    Likes Received:
    10
    Đô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)

    [​IMG]

    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ưngcủ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!
    Nguồn: https://ereka.vn/post/minh-da-lap-trinh-mot-chiec-xe-tu-hanh-don-gian-nhu-the-nao-529827132087868900
     
    tamtrungnguyen likes this.
  2. tamtrungnguyen

    tamtrungnguyen Member

    Joined:
    Nov 23, 2018
    Messages:
    20
    Likes Received:
    37
    thank bạn nha
     

Share This Page

Users Viewing Thread (Users: 0, Guests: 0)

Loading...