Giới thiệu dự án

Trong bối cảnh ngành công nghiệp ô tô toàn cầu đang chuyển dịch mạnh mẽ sang tự động hóa và phát triển xe tự hành (Autonomous Vehicles - AV), an toàn giao thông đường bộ vẫn là thách thức hàng đầu. Theo thống kê của Tổ chức Y tế Thế giới (WHO), vi phạm giới hạn tốc độ và sự thiếu tập trung của người lái xe là nguyên nhân trực tiếp dẫn đến hơn 30% số vụ tai nạn giao thông nghiêm trọng hàng năm. Các phương thức kiểm soát tốc độ truyền thống phụ thuộc hoàn toàn vào biển báo tĩnh và ý thức quan sát của tài xế – yếu tố rất dễ bị suy giảm do mệt mỏi, thời tiết xấu hoặc điểm mù.

Đồ án "Nghiên cứu mô phỏng hệ thống nhận diện biển báo tốc độ xe tự lái" (Research and Simulate Speed Sign Recognition System in Self-Driving Car) của tác giả Nguyễn Anh Huy, dưới sự hướng dẫn của TS. Vũ Quang Huy tại Trường Đại học Sư phạm Kỹ thuật TP.HCM (HCMUTE), tập trung giải quyết bài toán cốt lõi: Xây dựng một hệ thống thị giác máy tính biên (Edge Computer Vision) có khả năng tự động phát hiện, phân loại biển báo giới hạn tốc độ theo thời gian thực và đồng bộ phản hồi về hệ thống điều khiển vận hành xe (tốc độ động cơ, hệ thống phanh và hộp số).

graph LR
    A["Camera CSI 5MP (OV5647)"] --> B["Bộ xử lý biên Raspberry Pi 4"]
    B -->|"Sliding Window + CNN"| C["Phát hiện & Phân loại Biển báo"]
    C -->|"I2C Protocol (Level Shifter)"| D["LCD 1602 Hiển thị"]
    C -->|"UART / Wi-Fi Webserver"| E["ESP8266 NodeMCU"]
    E -->|"HTTP / WebSocket"| F["Cơ sở dữ liệu & Giao diện Giám sát"]
    C -->|"Tín hiệu điều khiển CAN/PWM"| G["Bộ chấp hành mô phỏng (Phanh/Tốc độ)"]

Mục tiêu cụ thể của dự án:

  1. Phát triển thuật toán thị giác máy tính kết hợp: Tích hợp kỹ thuật Sliding Window tối ưu hóa đa tỷ lệ (Multi-Scale Analysis) với mạng nơ-ron tích chập (Convolutional Neural Networks - CNN) để định vị và phân loại chính xác các biển báo tốc độ.
  2. Thiết kế phần cứng nhúng tích hợp: Xây dựng mô-đun phần cứng gọn nhẹ (160 x 170 x 80 mm, khối lượng 0.7 kg) sử dụng máy tính nhúng Raspberry Pi 4 Model B kết hợp camera Arducam 5MP OV5647 và vi điều khiển ESP8266 NodeMCU.
  3. Mô phỏng điều chỉnh thông số xe tự động: Chuyển đổi dữ liệu tốc độ nhận diện thành lệnh điều khiển can thiệp vào tham số vận hành xe (giảm ga, kích hoạt phanh, giới hạn dải số).
  4. Xây dựng hệ thống IoT giám sát thời gian thực: Đồng bộ dữ liệu tốc độ và trạng thái cảnh báo lên máy chủ web cục bộ thông qua giao thức TCP/IP của ESP8266.

Phạm vi và giới hạn:

  • Phạm vi nghiên cứu: Nhận diện các biển báo tốc độ tiêu chuẩn đường bộ ban ngày và ban đêm trong điều kiện ánh sáng kiểm soát; mô phỏng phản hồi động cơ trên mô hình cơ điện tử.
  • Giới hạn kỹ thuật: Hệ thống chưa tích hợp cảm biến LiDAR để quét bản đồ 3D trong điều kiện sương mù dày đặc hoặc mưa bão lớn làm che khuất hoàn toàn bề mặt biển báo.

Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Hiện nay, các giải pháp kiểm soát tốc độ trên xe thương mại được chia thành nhiều phân khúc với các ưu nhược điểm rõ rệt:

Giải pháp Cơ chế hoạt động Ưu điểm Nhược điểm
Định vị GPS / Bản đồ số (ADAS cơ bản) Đối chiếu tọa độ xe với cơ sở dữ liệu biển báo tĩnh nạp sẵn. Không phụ thuộc camera, chi phí phần cứng thấp. Không cập nhật được biển báo công trường di động hoặc thay đổi quy hoạch mới.
Hệ thống Cloud Vision tập trung Truyền video stream lên Server/Cloud để xử lý AI. Xử lý được các mô hình AI khổng lồ (LLMs, Vision Transformer). Độ trễ cao (>300ms), phụ thuộc hoàn toàn vào băng thông mạng 4G/5G.
Giải pháp Edge-AI Hybrid (Đồ án đề xuất) Nhận diện cục bộ trên Raspberry Pi 4 kết hợp truyền dữ liệu qua ESP8266 IoT. Độ trễ cực thấp (<40ms), hoạt động offline, chi phí dưới 100 USD. Cần tối ưu hóa mô hình AI để chạy mượt trên phần cứng nhúng giới hạn tài nguyên.

Yêu cầu hệ thống (Mô hình MoSCoW)

  • Must have (Bắt buộc): Nhận diện chính xác biển báo giới hạn tốc độ (30, 50, 60, 80 km/h) với độ chính xác >95%; hiển thị tức thời lên màn hình LCD1602 qua giao tiếp I2C.
  • Should have (Nên có): Giao diện Webserver trích xuất log lịch sử vận tốc và hình ảnh biển báo; tự động gửi lệnh giảm xung PWM điều khiển động cơ khi vượt tốc độ.
  • Could have (Có thể mở rộng): Nhận diện biển báo hết hạn chế tốc độ, biển báo cấm vượt.
  • Won't have (Chưa thực hiện): Tích hợp Radar sóng milimet (mmWave Radar) để tự động phanh khẩn cấp ở khoảng cách xa.

Thiết kế hệ thống

Hệ thống được thiết kế theo cấu trúc phân tầng cơ điện tử chặt chẽ:

classDiagram
    class PowerBlock {
        +Adapter 12V 4A
        +MP2307 Buck Converter (5V/3A)
        +AMS1117 Regulator (3.3V)
        +Diode Schottky 1N5819
    }
    class ProcessingUnit {
        +Raspberry Pi 4 (Quad-Core Cortex-A72 @ 1.5GHz)
        +Camera OV5647 5MP (MIPI CSI)
        +Python 3.10 / OpenCV / TensorFlow Lite
    }
    class IoTAndDisplay {
        +ESP8266 NodeMCU (Tensilica L106 @ 80MHz)
        +LCD1602 via PCF8574 (I2C)
        +Level Shifter 8-channel (3.3V - 5V)
    }
    PowerBlock --> ProcessingUnit : Cấp nguồn 5V
    PowerBlock --> IoTAndDisplay : Cấp nguồn 5V / 3.3V
    ProcessingUnit --> IoTAndDisplay : Giao tiếp I2C / UART Level-Shifted

Technology Stack & Phần cứng chi tiết:

  • Bộ xử lý trung tâm: Raspberry Pi 4 Model B (Broadcom BCM2711, 4 nhân Cortex-A72 64-bit @ 1.5GHz, 4GB LPDDR4 SDRAM, hệ điều hành Raspberry Pi OS Linux).
  • Cảm biến hình ảnh: Arducam 5MP OV5647, độ phân giải gốc 2592 x 1944 pixels, ống kính ngàm M12x0.5 với góc nhìn FOV 56°, kết nối trực tiếp qua bus MIPI CSI-2.
  • Mạch nguồn & Chuyển đổi mức logic:
    • Mô-đun hạ áp Buck DC-DC MP2307 Mini 360: Hiệu suất chuyển đổi đạt 93%, dải điện áp vào 4.75V–23V, điện áp ra ổn định 5V/3.3V, dòng tải định mức 1.8A (đỉnh 3A).
    • Mạch đệm chuyển mức logic 8 kênh 2 chiều (Bidirectional Level Shifter) và transistor NPN SMD S8050 ($V_{CBO}=40\text{V}, I_C=500\text{mA}$) đảm bảo tương thích tín hiệu 3.3V (ESP8266/RPI) và 5V (Arduino/LCD1602) trên đường bus I2C tốc độ 400 kHz.
  • Môi trường lập trình: Python 3.10, OpenCV 4.8.0, TensorFlow/Keras 2.14, PlatformIO IDE cho vi điều khiển nhúng C/C++.

Phương pháp nghiên cứu (Methodology)

Quy trình phát triển áp dụng mô hình Agile lai V-Model trong kỹ thuật cơ điện tử:

  1. Giai đoạn 1 (Milestone 1 - Tuần 1-3): Thu thập và gán nhãn tập dữ liệu biển báo giao thông đa dạng góc nghiêng, ánh sáng; thiết kế cơ khí khung vỏ Mica 6 tấm bằng CAD/CAM.
  2. Giai đoạn 2 (Milestone 2 - Tuần 4-7): Huấn luyện mô hình CNN phân loại; tích hợp thuật toán trích xuất đặc trưng và lọc Non-Maximum Suppression (NMS).
  3. Giai đoạn 3 (Milestone 3 - Tuần 8-10): Thiết kế mạch in, tích hợp MP2307, Raspberry Pi 4, ESP8266 và LCD1602; lập trình firmware Webserver Station Mode.
  4. Giai đoạn 4 (Milestone 4 - Tuần 11-14): Thử nghiệm mô phỏng trên sa bàn di động, đo đạc thông số đáp ứng phanh và độ trễ khung hình.

Implementation và kết quả

Quy trình phát triển và thuật toán cốt lõi

Quy trình xử lý ảnh trên Raspberry Pi 4 được thực hiện theo chuỗi đường ống (pipeline):

  1. Thu nhận ảnh (Image Ingestion): Khung hình kích thước $640 \times 480$ pixels được đọc từ camera OV5647 qua giao diện CSI.
  2. Quét cửa sổ trượt đa tỷ lệ (Multi-Scale Sliding Window): Xây dựng kim tự tháp ảnh (Image Pyramid) với tỷ lệ thu phóng (scale factor) $\lambda = 1.2$.
  3. Phân loại bằng mạng CNN: Các vùng ảnh trích xuất kích thước chuẩn $32 \times 32$ pixels được đưa qua mạng tích chập để dự đoán nhãn tốc độ.
  4. Triệt tiêu phi cực đại (Non-Maximum Suppression - NMS): Loại bỏ các khung bao (bounding box) trùng lặp dựa trên chỉ số giao nhau trên hợp (Intersection over Union - IoU $> 0.45$).
import cv2
import numpy as np

def non_max_suppression_fast(boxes, overlap_thresh=0.45):
    """
    Thuật toán NMS tối ưu hóa tính toán ma trận với NumPy
    """
    if len(boxes) == 0:
        return []

    if boxes.dtype.kind == "i":
        boxes = boxes.astype("float")

    pick = []
    x1 = boxes[:, 0]
    y1 = boxes[:, 1]
    x2 = boxes[:, 2]
    y2 = boxes[:, 3]
    scores = boxes[:, 4]

    area = (x2 - x1 + 1) * (y2 - y1 + 1)
    idxs = np.argsort(scores)

    while len(idxs) > 0:
        last = len(idxs) - 1
        i = idxs[last]
        pick.append(i)

        xx1 = np.maximum(x1[i], x1[idxs[:last]])
        yy1 = np.maximum(y1[i], y1[idxs[:last]])
        xx2 = np.minimum(x2[i], x2[idxs[:last]])
        yy2 = np.minimum(y2[i], y2[idxs[:last]])

        w = np.maximum(0, xx2 - xx1 + 1)
        h = np.maximum(0, yy2 - yy1 + 1)

        overlap = (w * h) / area[idxs[:last]]
        idxs = np.delete(idxs, np.concatenate(([last], np.where(overlap > overlap_thresh)[0])))

    return boxes[pick].astype("int")

Kiến trúc mạng CNN phân loại biển báo:

Mạng CNN được xây dựng với cấu trúc gọn nhẹ nhằm tối ưu hóa bộ nhớ RAM và băng thông GPU Broadcom VideoCore VI:

  • Layer 1: Conv2D (32 filters, kernel $3 \times 3$, padding='same') + Batch Normalization + ReLU.
  • Layer 2: MaxPooling2D (pool size $2 \times 2$, stride 2).
  • Layer 3: Conv2D (64 filters, kernel $3 \times 3$) + ReLU + Dropout(0.25).
  • Layer 4: MaxPooling2D (pool size $2 \times 2$).
  • Layer 5: Flatten + Dense (128 units, ReLU) + Dropout(0.5).
  • Output Layer: Dense (Số lớp biển báo tốc độ, Softmax).
# Cấu hình giao tiếp I2C gửi tốc độ nhận diện từ RPi sang LCD1602
import smbus2

I2C_BUS = 1
LCD_I2C_ADDR = 0x27  # Địa chỉ PCF8574
bus = smbus2.SMBus(I2C_BUS)

def send_speed_alert(speed_limit, current_speed):
    status_msg = f"LIMIT:{speed_limit} SPD:{current_speed}"
    # Ghi chuỗi ký tự qua đường truyền I2C
    data = [ord(char) for char in status_msg]
    try:
        bus.write_i2c_block_data(LCD_I2C_ADDR, 0x40, data)
    except Exception as e:
        print(f"Lỗi giao tiếp I2C: {e}")

Thử nghiệm và đánh giá kết quả (Testing & Benchmarks)

Hệ thống đã trải qua hơn 500 lượt kiểm thử trong nhiều kịch bản vận hành thực tế:

Kịch bản kiểm thử Khoảng cách nhận diện Tỷ lệ nhận diện chính xác (%) Tốc độ xử lý (FPS) Độ trễ can thiệp (ms)
Ban ngày (Ánh sáng tiêu chuẩn 500-1000 lux) 3m – 12m 97.8% 28.5 FPS 35 ms
Điều kiện ngược sáng / Chói nắng 2m – 8m 92.4% 27.2 FPS 38 ms
Ban đêm (Chiếu sáng bằng đèn pha xe) 2m – 7m 90.6% 26.8 FPS 41 ms
Biển báo bị nghiêng góc 15°–30° 3m – 9m 94.1% 28.0 FPS 36 ms
pie title Tỷ lệ phân bố kết quả nhận diện trên 500 mẫu
    "Nhận diện đúng hoàn toàn" : 476
    "Phát hiện đúng - Sai loại biển" : 14
    "Bỏ sót (False Negative)" : 7
    "Báo sai vật thể khác (False Positive)" : 3

So sánh kết quả thực tế với mục tiêu ban đầu:

  • Độ chính xác trung bình: Đạt 95.2% (vượt chỉ tiêu ban đầu là 90%).
  • Tần số lấy mẫu: Đạt xấp xỉ 28 FPS, hoàn toàn đáp ứng yêu cầu xử lý thời gian thực của phương tiện di chuyển ở dải tốc độ 30–60 km/h trong khu đô thị.
  • Tiêu thụ năng lượng: Toàn bộ khối phần cứng tiêu thụ trung bình $5\text{V} \times 1.4\text{A} \approx 7.0\text{W}$, đảm bảo an toàn tuyệt đối khi sử dụng nguồn điện từ cổng tẩu sạc ô tô.

Đổi mới và đóng góp

  1. Kiến trúc luồng xử lý phân tán (Edge-IoT Decoupling): Thay vì để Raspberry Pi xử lý cả nhận diện AI lẫn phục vụ Webserver (gây nghẽn CPU và giật khung hình), hệ thống phân tách tải: RPi 4 chuyên tâm tính toán Tensor hình ảnh, còn vi điều khiển ESP8266 đảm nhận toàn bộ stack mạng TCP/IP và lưu trữ dữ liệu lịch sử.
  2. Cải tiến tốc độ quét Sliding Window: Áp dụng phương pháp lấy mẫu trước gradient màu và lược bỏ các vùng ảnh không có cấu trúc hình tròn/tam giác của biển báo, giúp tăng tốc độ trích xuất đặc trưng lên 34% so với quét toàn phần truyền thống.
  3. Mạch ghép nối mức logic đa kênh tối ưu: Thiết kế tích hợp cụm Level Shifter 8 kênh và mạch hạ áp MP2307 mini giúp loại bỏ triệt để xung nhiễu trên đường truyền I2C/UART giữa các linh kiện 3.3V và 5V, đạt chuẩn ổn định công nghiệp.

Ứng dụng thực tế và triển khai

Kịch bản ứng dụng thực tế:

  • Hệ thống hỗ trợ lái xe nâng cao (ADAS Aftermarket): Lắp đặt như một thiết bị phụ trợ (Dashcam thông minh) gắn trên kính chắn gió cho các dòng xe phổ thông chưa có tính năng TSR (Traffic Sign Recognition).
  • Hệ thống xe tự hành AGV trong nhà xưởng/cảng biển: Hướng dẫn và tự động hạn chế tốc độ xe tự hành vận chuyển pallet trong các khu vực có công nhân qua lại.
sequenceDiagram
    autonumber
    actor Driver as Người lái xe / Xe tự hành
    participant Cam as Camera OV5647
    participant RPi as Raspberry Pi 4 (AI Core)
    participant ESP as ESP8266 (Webserver)
    participant Actuator as Bộ điều khiển Động cơ/Phanh

    Cam->>RPi: Truyền luồng ảnh CSI (640x480)
    RPi->>RPi: Sliding Window + CNN phân loại
    alt Phát hiện biển báo tốc độ (Ví dụ: 40 km/h)
        RPi->>ESP: Gửi dữ liệu qua UART/I2C
        ESP->>ESP: Cập nhật Web Dashboard & Lưu Database
        RPi->>Actuator: Xuất xung PWM giảm ga / hãm phanh
        RPi->>Driver: Hiển thị cảnh báo LCD1602 & Bíp âm thanh
    end

Ước tính chi phí sản xuất phần cứng (BOM):

  • Raspberry Pi 4 Model B (4GB RAM): ~$55
  • Cảm biến Camera Arducam 5MP OV5647: ~$20
  • Mô-đun ESP8266 NodeMCU V3: ~$3.5
  • Màn hình LCD1602 + I2C Backpack: ~$2.5
  • Mô-đun hạ áp Buck MP2307 + Phụ kiện vỏ Mica: ~$6
  • Tổng chi phí phần cứng: Dưới $90 USD, chỉ bằng khoảng 1/10 chi phí tích hợp gói ADAS chính hãng từ các nhà sản xuất ô tô.

Hạn chế và hướng phát triển

Hạn chế kỹ thuật hiện tại:

  • Điều kiện thời tiết khắc nghiệt: Độ chính xác giảm xuống dưới 80% khi gặp trời mưa rất to hoặc ống kính camera bị mờ sương.
  • Tập dữ liệu giới hạn: Hiện mô hình mới tập trung nhận diện các biển báo tốc độ dạng số tròn viền đỏ tiêu chuẩn (30, 50, 60, 80 km/h), chưa bao gồm biển báo dạng chữ điện tử LED thay đổi liên tục trên cao tốc.

Hướng phát triển trong tương lai:

  1. Chuyển đổi sang kiến trúc YOLOv8-Nano / MobileNetV4: Tối ưu hóa mô hình với công cụ OpenVINO / TensorRT để triển khai trên các kit phần cứng tăng tốc AI chuyên dụng như NVIDIA Jetson Orin Nano hoặc Raspberry Pi AI Kit (Hailo-8L).
  2. Tích hợp cảm biến IMU và GPS: Tự động đối chiếu thông tin biển báo nhận diện được với vị trí bản đồ số vệ tinh nhằm tạo cơ chế kiểm tra chéo (Double-Check Validation).

Đối tượng hưởng lợi

  • Sinh viên và Người tự học Cơ điện tử / IoT: Nguồn tài liệu thực tế về cách tích hợp hệ thống đa vi điều khiển (Raspberry Pi + ESP8266 + Arduino), thiết kế mạch đệm logic và lập trình I2C.
  • Kỹ sư và Lập trình viên Computer Vision: Bộ khung chuẩn (Framework) về tối ưu hóa mô hình học sâu CNN trên phần cứng nhúng biên với tài nguyên hạn chế.
  • Doanh nghiệp vận tải & Hãng sản xuất thiết bị phụ trợ ô tô: Tham khảo kiến trúc giải pháp thiết bị giám sát hành trình thông minh với chi phí R&D thấp, khả năng thương mại hóa cao.

Câu hỏi thường gặp

1. Yêu cầu cấu hình phần cứng tối thiểu để triển khai lại hệ thống là gì?

Hệ thống yêu cầu tối thiểu một bo mạch Raspberry Pi 3 Model B+ (hoặc Raspberry Pi 4/5), thẻ nhớ MicroSD 16GB Class 10 (tốc độ đọc >80MB/s), Camera giao tiếp MIPI CSI 5MP và nguồn cấp 5V/3A chuẩn ổn áp để tránh hiện tượng sụt áp (Undervoltage).

2. Làm thế nào để giải quyết vấn đề trễ khung hình khi xe di chuyển ở tốc độ cao (>80 km/h)?

Ở dải tốc độ cao, có thể giảm độ phân giải xử lý đầu vào xuống $320 \times 240$ pixels và áp dụng kỹ thuật bám vết đối tượng bằng Kalman Filter hoặc KCF Tracker giữa các frame thay vì chạy inference toàn phần ở mỗi khung hình, giúp nâng tốc độ xử lý lên trên 45 FPS.

3. Tại sao cần mạch Level Shifter giữa Raspberry Pi và ESP8266/LCD1602?

Raspberry Pi và ESP8266 hoạt động ở mức điện áp logic 3.3V, trong khi một số cảm biến và LCD1602 hoạt động ở mức 5V. Mạch Level Shifter 8 kênh ngăn ngừa dòng điện 5V rò rỉ làm cháy các chân GPIO nhạy cảm của chip Broadcom và Tensilica.

4. Hệ thống kết nối cơ sở dữ liệu trên ESP8266 bằng cách nào khi xe đang chạy?

ESP8266 được cấu hình ở chế độ Station (STA Mode) kết nối với mạng Wi-Fi phát ra từ trạm phát 4G trên xe hơi. Dữ liệu được đẩy lên cloud/webserver thông qua giao thức RESTful HTTP POST hoặc WebSocket với kích thước gói tin rút gọn định dạng JSON.

5. Khả năng bảo trì và cập nhật mô hình AI từ xa (OTA) như thế nào?

Nhờ kiến trúc Linux trên Raspberry Pi và mạng không dây, kỹ sư có thể nạp trọng số mô hình mới (weights file dạng .tflite hoặc .onnx) thông qua giao thức SSH/SCP hoặc tích hợp quy trình CI/CD tự động mà không cần can thiệp phần cứng.


Kết luận

Đồ án "Nghiên cứu mô phỏng hệ thống nhận diện biển báo tốc độ xe tự lái" đã chứng minh tính khả thi vượt trội của việc kết hợp trí tuệ nhân tạo biên (Edge AI) với công nghệ IoT nhúng nhằm giải quyết vấn đề cấp bách trong an toàn giao thông đường bộ. Dự án đã hoàn thiện trọn vẹn từ khâu thiết kế cơ cấu vỏ máy, thi công mạch điện tử công suất, tối ưu hóa thuật toán nhận diện CNN/Sliding Window cho đến xây dựng nền tảng giám sát thời gian thực. Kết quả này đặt nền móng vững chắc cho các nghiên cứu chuyên sâu tiếp theo về xe tự hành thông minh và các hệ thống hỗ trợ lái xe thương mại trong tương lai.