Giới thiệu dự án

Bối cảnh và thực trạng ngành ô tô

Theo thống kê từ Tổ chức Y tế Thế giới (WHO) và Cục Quản lý An toàn Giao thông Đường cao tốc Quốc gia Hoa Kỳ (NHTSA), tình trạng buồn ngủ và mất tập trung của người lái xe là nguyên nhân trực tiếp dẫn đến hơn 20% tổng số các vụ tai nạn giao thông nghiêm trọng trên toàn cầu. Trong bối cảnh ngành công nghiệp ô tô đang chuyển mình mạnh mẽ sang kỷ nguyên xe thông minh và xe tự hành (Autonomous Vehicles), hệ thống giám sát người lái (Driver Monitoring System - DMS) đã trở thành tiêu chuẩn an toàn bắt buộc tại nhiều thị trường khắt khe như Euro NCAP từ năm 2024.

Tại Việt Nam, các hãng xe lớn như VinFast cũng đã tiên phong tích hợp công nghệ AI nhận diện khuôn mặt và hành vi tài xế. Tuy nhiên, phần lớn các giải pháp DMS hiện nay trên thị trường thương mại là các hệ thống đóng (closed-source), chi phí trang bị cao, hoặc chỉ dừng lại ở các ứng dụng cảnh báo hình ảnh độc lập mà không tích hợp sâu vào hệ thống mạng nội bộ của phương tiện.

Vấn đề nghiên cứu (Problem Statement)

Đề tài "Nghiên cứu, thiết kế và chế tạo hệ thống giám sát người lái" giải quyết bài toán phát hiện trạng thái mệt mỏi (ngủ gật, ngáp) và mất tập trung (quay đầu sang trái/phải, nhìn lên/xuống) của tài xế theo thời gian thực (Real-time). Thách thức cốt lõi nằm ở việc tối ưu hóa các thuật toán thị giác máy tính phức tạp để có thể vận hành ổn định trên các nền tảng phần cứng nhúng biên (Edge Computing) có tài nguyên giới hạn, đồng thời phải đồng bộ hóa dữ liệu trạng thái xe từ mạng truyền thông CAN (Controller Area Network) để loại trừ các cảnh báo sai khi xe đang dừng đỗ.

Mục tiêu của đề tài

  1. Xây dựng hệ thống thị giác máy tính nhúng: Phát triển mô hình nhận diện khuôn mặt, trích xuất 68 điểm đặc trưng (68 Facial Landmarks) để tính toán tỷ lệ mở mắt EAR (Eye Aspect Ratio) và tỷ lệ mở miệng MAR (Mouth Aspect Ratio) đạt tốc độ xử lý trên 20 khung hình/giây (FPS).
  2. Ước lượng tư thế đầu (Head Pose Estimation): Ứng dụng giải thuật Perspective-n-Point (PnP) nhằm xác định góc quay đầu 3 chiều (Yaw, Pitch, Roll) của tài xế.
  3. Thu thập và giải mã dữ liệu mạng CAN: Thiết kế module trung gian đọc dữ liệu tốc độ xe (Vehicle Speed PID: 0x0D) qua cổng OBD-II bằng vi điều khiển và chuẩn giao tiếp SPI.
  4. Tích hợp hệ thống hỗ trợ định vị và điều hướng: Xử lý dữ liệu GPS từ module SIM808 để tự động đề xuất điểm dừng nghỉ an toàn trong bán kính 5 km khi phát hiện mức độ buồn ngủ nguy hiểm.
  5. Chế tạo mô hình thực nghiệm hoàn chỉnh: Đóng gói phần cứng và phần mềm thành một thiết bị độc lập, có màn hình hiển thị trực quan và cảnh báo âm thanh/hình ảnh tức thời.

Phương pháp tiếp cận và kết quả kỳ vọng

Nhóm tác giả lựa chọn phương pháp xử lý đa tầng (Multi-tier Architecture): tầng xử lý hình ảnh và logic trung tâm chạy trên máy tính nhúng Raspberry Pi 4 Model B (4GB RAM) trên nền hệ điều hành Linux/Raspberry Pi OS; tầng thu thập tín hiệu ngoại vi và giao tiếp CAN đảm nhiệm bởi vi điều khiển Arduino Uno R3 kết hợp CAN Shield MCP2515. Kết quả kỳ vọng là hệ thống đạt độ chính xác phát hiện buồn ngủ trên 92%, độ trễ phản hồi dưới 150 ms và kích hoạt cảnh báo tương thích với trạng thái vận hành thực tế của xe.

Phạm vi và giới hạn đề tài

  • Phạm vi: Thử nghiệm trên mô hình giả lập và xe ô tô thực tế thông qua cổng kết nối chuẩn OBD-II (chân CANH và CANL), camera USB độ phân giải Full HD đặt tại táp-lô theo góc nhìn trực diện người lái.
  • Giới hạn: Hệ thống sử dụng camera ánh sáng khả kiến (RGB), do đó hiệu suất nhận diện trong điều kiện ban đêm phụ thuộc vào nguồn sáng trong cabin; hệ thống định vị sử dụng dữ liệu GSM/GPS dân dụng.

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

Phân tích hiện trạng và khoảng trống công nghệ

Tiêu chí Giải pháp OEM (Subaru DriverFocus, VinFast DMS) Ứng dụng Smartphone (Camera AI App) Hệ thống nghiên cứu của đề tài
Cơ chế thu thập dữ liệu Camera hồng ngoại NIR chuyên dụng + ECU tích hợp Chỉ sử dụng Camera trước điện thoại Camera USB Full HD + Đọc mạng CAN (OBD-II)
Liên kết trạng thái xe Đồng bộ toàn diện qua CAN bus/FlexRay Hoàn toàn không liên kết Đồng bộ tốc độ xe thực tế qua CAN Bus Shield
Hỗ trợ sau cảnh báo Rung vô lăng, phanh khẩn cấp tự động Phát âm thanh chuông báo Cảnh báo đa tầng + Tự động tìm trạm dừng qua GPS
Khả năng tùy biến Hệ thống đóng, độc quyền theo hãng Hạn chế, phụ thuộc pin và nhiệt điện thoại Mã nguồn mở, dễ dàng mở rộng và tích hợp
Chi phí triển khai Rất cao (> 1.500 USD) Thấp (Miễn phí / Phí duy trì) Chi phí phần cứng tối ưu (~120 - 150 USD)

Phân tích yêu cầu theo mô hình MoSCoW

  • Must Have (Bắt buộc): Nhận diện 68 điểm mốc khuôn mặt; tính toán EAR để phát hiện nhắm mắt; trích xuất dữ liệu vận tốc xe qua chuẩn OBD-II CAN bus; cảnh báo âm thanh khi phát hiện buồn ngủ quá 2 giây.
  • Should Have (Nên có): Ước lượng tư thế đầu (Head Pose) bằng PnP để phát hiện mất tập trung; tích hợp định vị GPS qua module SIM808; tự động định tuyến điểm nghỉ trong bán kính 5 km trên bản đồ.
  • Could Have (Có thể có): Tính toán MAR để phát hiện hành vi ngáp liên tục; giao diện cảm ứng 7 inch tùy chỉnh hiển thị thông số thời gian thực.
  • Won't Have (Chưa thực hiện): Can thiệp trực tiếp vào hệ thống phanh/lái tự động của xe; tích hợp cảm biến sóng milimet (mmWave Radar).

Thiết kế kiến trúc hệ thống

Kiến trúc hệ thống được phân tách thành 3 khối chức năng liên kết chặt chẽ:

+-------------------------------------------------------------------------+
|                              SENSOR INPUTS                              |
|  +---------------------------+       +-------------------------------+  |
|  | USB Camera PC-LM1E (1080p)|       |  Vehicle OBD-II (CANH / CANL) |  |
|  +-------------+-------------+       +---------------+---------------+  |
+----------------|-------------------------------------|------------------+
                 |                                     |
                 | (MJPEG Stream)                      | (Differential CAN)
                 v                                     v
+------------------------------------+   +--------------------------------+
|      CENTRAL PROCESSING UNIT       |   |       CAN ACQUISITION NODE     |
|       (Raspberry Pi 4 Model B)     |   |       (Arduino Uno R3)         |
| - OS: Raspberry Pi OS 64-bit       |   | - Transceiver: MCP2515 (SPI)   |
| - Vision: OpenCV + Dlib (EAR, PnP) |   | - Parsing PID: 0x0D (Speed)    |
| - GPS Routing & UI Management      |   +----------------+---------------+
+----------------+-------------------+                    |
                 ^                                        | (UART Protocol)
                 |========================================+
                 |
                 v
+------------------------------------+   +--------------------------------+
|       OUTPUT & USER INTERFACE      |   |       TELEMETRY & LOCATION     |
| - 7-inch Capacitive Touch LCD      |   | - SIMCOM SIM808 Module         |
| - Audio Warning Alarm (Speaker)    |   | - GPS/A-GPS UART NMEA Stream   |
+------------------------------------+   +--------------------------------+

Tech Stack và phiên bản công nghệ

  • Phần cứng xử lý chính: Raspberry Pi 4 Model B (Broadcom BCM2711 Quad-core Cortex-A72 1.5GHz, 4GB LPDDR4).
  • Phần cứng thu thập dữ liệu: Arduino Uno R3 (ATmega328P, 16MHz), MCP2515 CAN Bus Shield (SPI 10MHz, CAN V2.0B 1Mbps), Module SIMCOM SIM808 (GSM/GPRS/GPS 22 tracking channels).
  • Môi trường và ngôn ngữ: Python 3.9 trên hệ điều hành Linux (Raspberry Pi OS), C/C++ trên Arduino IDE v1.8.19.
  • Thư viện thị giác máy tính: OpenCV v4.5.3, Dlib v19.24 (shape_predictor_68_face_landmarks.dat), MediaPipe-rpi4.
  • Giao thức liên kết: UART (Baudrate 9600/115200 bps) giữa Arduino và Raspberry Pi; SPI giữa ATmega328P và MCP2515; ISO 15765-4 CAN 500kbps 11-bit ID chuẩn OBD-II.

Implementation và kết quả

Chi tiết thuật toán và mã nguồn thực thi

Hệ thống ứng dụng thuật toán tính toán tỷ lệ khung hình mắt EAR dựa trên khoảng cách Euclid giữa 6 điểm mốc tọa độ của mỗi bên mắt được trích xuất từ Dlib 68 Facial Landmarks:

$$\text{EAR} = \frac{||p_2 - p_6|| + ||p_3 - p_5||}{2 \cdot ||p_1 - p_4||}$$

Khi mắt mở bình thường, giá trị EAR dao động trong khoảng $0.28 - 0.35$. Khi tài xế nhắm mắt, EAR tụt xuống dưới ngưỡng $\text{EAR}_{\text{threshold}} = 0.22$. Nếu giá trị này duy trì liên tục vượt quá 48 khung hình (tương đương ~2 giây ở 24 FPS), trạng thái buồn ngủ cấp độ cao sẽ được xác lập.

import cv2
import dlib
import numpy as np
from scipy.spatial import distance as dist

def calculate_ear(eye):
    # Tinh khoang cach Euclid theo truc doc
    A = dist.euclidean(eye[1], eye[5])
    B = dist.euclidean(eye[2], eye[4])
    # Tinh khoang cach Euclid theo truc ngang
    C = dist.euclidean(eye[0], eye[3])
    # Tinh ti le EAR
    ear = (A + B) / (2.0 * C)
    return ear

EYE_AR_THRESH = 0.22
EYE_AR_CONSEC_FRAMES = 48
COUNTER = 0

# Khoi tao Dlib Face Detector va Shape Predictor
detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")

Ở tầng thu thập mạng CAN, Arduino Uno liên tục gửi khung yêu cầu chuẩn OBD-II PID 0x0D (Vehicle Speed) qua chip MCP2515 và phân tích byte phản hồi từ ECU động cơ:

#include <SPI.h>
#include <mcp_can.h>

const int SPI_CS_PIN = 10;
MCP_CAN CAN(SPI_CS_PIN);

void setup() {
    Serial.begin(115200);
    while (CAN_OK != CAN.begin(CAN_500KBPS)) {
        delay(100);
    }
}

void loop() {
    unsigned char pidRequest[8] = {0x02, 0x01, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00};
    CAN.sendMsgBuf(0x7DF, 0, 8, pidRequest);
    delay(50);
    
    unsigned char len = 0;
    unsigned char buf[8];
    if (CAN_MSGAVAIL == CAN.checkReceive()) {
        CAN.readMsgBuf(&len, buf);
        if (buf[1] == 0x41 && buf[2] == 0x0D) {
            unsigned char vehicleSpeed = buf[3]; // Gia tri van toc (km/h)
            Serial.print("SPEED:");
            Serial.println(vehicleSpeed);
        }
    }
}

Thử nghiệm và đánh giá thực nghiệm

Hệ thống đã trải qua quá trình kiểm thử thực tế trên 5 đối tượng tài xế với các điều kiện môi trường ánh sáng và tư thế khác nhau, thu được các số liệu định lượng chi tiết:

Kịch bản kiểm thử Số mẫu thử (Frames) Tốc độ xử lý trung bình (FPS) Độ trễ cảnh báo (ms) Độ chính xác nhận diện (%)
Ban ngày (Ánh sáng thuận) 5.000 25.4 FPS 85 ms 96.8%
Ban ngày (Ngược sáng mạnh) 3.500 24.1 FPS 92 ms 91.2%
Ban đêm (Đèn cabin bật) 3.000 23.8 FPS 105 ms 89.5%
Đeo kính râm / Kính cận 2.500 22.6 FPS 120 ms 84.6%
Quay đầu lệch góc > 45 độ 2.000 24.5 FPS 95 ms 93.4%
Đồng bộ tín hiệu CAN ($V > 20\text{ km/h}$) 1.000 chu kỳ 20 Hz (CAN Polling) 45 ms 99.1%

Hệ thống đạt tỷ lệ nhận diện buồn ngủ tổng thể đạt 92.4% trong điều kiện tiêu chuẩn và thời gian kích hoạt điều hướng khẩn cấp qua module SIM808 đạt trung bình 1.2 giây sau khi xác nhận trạng thái mệt mỏi nguy hiểm.


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

  1. Kiến trúc dung hợp đa cảm biến (Multi-sensor Fusion): Không chỉ dựa vào camera đơn thuần như các ứng dụng di động, hệ thống kết hợp thông minh giữa thị giác máy tính và tín hiệu vi sai của mạng CAN bus từ ECU xe, giúp giảm thiểu 85% các cảnh báo sai (False Positives) khi xe dừng đèn đỏ hoặc đỗ xe.
  2. Cơ chế phản ứng sau cảnh báo chủ động (Active Assistance): Khác biệt hoàn toàn với các thiết bị cảnh báo chuông đơn thuần, hệ thống tích hợp Module GPS SIM808 tự động định vị vị trí hiện tại của xe và truy vấn OpenStreetMap/Google Maps để dẫn đường tài xế đến trạm dừng chân hoặc quán cà phê gần nhất trong phạm vi 5 km.
  3. Tối ưu hóa tài nguyên phần cứng nhúng biên: Phân bổ tải công việc chuyên biệt: Arduino đảm nhiệm polling mạng CAN tần số cao theo thời gian thực (Hard Real-Time), giải phóng 100% năng lực tính toán của CPU Cortex-A72 trên Raspberry Pi 4 để tập trung xử lý ma trận hình ảnh và suy luận mạng nơ-ron.

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

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

  • Doanh nghiệp vận tải và logistics đường dài: Lắp đặt trên các xe tải nặng, xe container, xe khách liên tỉnh chạy đêm – phân khúc có tỷ lệ tai nạn do ngủ gật cao nhất.
  • Dịch vụ taxi công nghệ và vận tải hành khách: Giám sát liên tục hành vi tài xế, nâng cao chất lượng dịch vụ và bảo vệ an toàn cho hành khách.
  • Nâng cấp (Retrofit) cho các dòng xe phổ thông: Trang bị tính năng an toàn cao cấp của các dòng xe sang cho các phương tiện thương mại tầm trung với chi phí thấp.

Hướng dẫn lắp đặt và triển khai phần cứng

  1. Kết nối cổng chẩn đoán: Cắm đầu cáp OBD-II vào cổng chẩn đoán tiêu chuẩn của xe, kết nối 2 dây tín hiệu CAN_H (Chân 6) và CAN_L (Chân 14) vào mạch CAN Bus Shield MCP2515.
  2. Cố định vị trí Camera: Gắn Camera PC-LM1E tại vị trí chính giữa táp-lô hoặc ốp cột A, hướng trực diện vào vùng mặt của tài xế ở khoảng cách $50 - 70\text{ cm}$, góc nghiêng $15^{\circ}$.
  3. Cấp nguồn hệ thống: Sử dụng mạch hạ áp Buck DC-DC chuyển đổi nguồn $12\text{V}$ trên ô tô xuống $5\text{V}/3\text{A}$ chuẩn cấp qua cổng USB Type-C của Raspberry Pi 4.

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

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

  • Phụ thuộc điều kiện ánh sáng: Do sử dụng cảm biến CMOS ánh sáng khả kiến (RGB), hệ thống gặp khó khăn khi nhận diện mắt nếu tài xế đeo kính râm màu tối hoặc cabin xe hoàn toàn không có ánh sáng.
  • Nhiệt độ hoạt động của phần cứng: Raspberry Pi 4 khi xử lý đồ họa liên tục ở mức tải cao có nhiệt độ dao động $65 - 72^{\circ}\text{C}$, đòi hỏi phải trang bị quạt tản nhiệt chủ động trong môi trường nhiệt đới kín trên ô tô.

Hướng phát triển tiếp theo

  • Nâng cấp Camera hồng ngoại NIR (Near-Infrared): Trang bị cụm camera có đèn LED hồng ngoại bước sóng $850\text{ nm}/940\text{ nm}$ để đảm bảo độ chính xác nhận diện tuyệt đối vào ban đêm mà không làm chói mắt tài xế.
  • Tích hợp phần cứng tăng tốc AI: Bổ sung thanh tăng tốc xử lý thần kinh Google Coral USB Accelerator hoặc nâng cấp lên Raspberry Pi 5 kết hợp chip Hailo-8 AI NPU để tăng tốc độ xử lý lên trên 45 FPS với mức tiêu thụ điện năng thấp hơn.
  • Giao tiếp hai chiều với ECU: Mở rộng giao thức điều khiển CAN để gửi lệnh kích hoạt hệ thống làm mát cabin, tự động hạ cửa kính hoặc phát tín hiệu cảnh báo nguy hiểm (Hazard Lights) ra bên ngoài xe.

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

  • Sinh viên ngành Kỹ thuật Ô tô & Cơ điện tử: Cung cấp tài liệu tham khảo thực tế về cách giao tiếp và đọc dữ liệu mạng CAN Bus thực tế, lập trình nhúng và thiết kế hệ thống IoT trên ô tô.
  • Lập trình viên và kỹ sư AI/Embedded: Nắm bắt được quy trình tối ưu hóa các mô hình Dlib/OpenCV trên vi xử lý ARM Linux và kỹ thuật giao tiếp liên kết vi điều khiển (Inter-Processor Communication) qua UART/SPI.
  • Doanh nghiệp vận tải & Chủ xe cá nhân: Sở hữu một giải pháp công nghệ an toàn có chi phí đầu tư linh kiện chỉ bằng $1/10$ so với hệ thống OEM chính hãng nhưng mang lại hiệu quả bảo vệ tính mạng và tài sản vượt trội.
  • Các nhà nghiên cứu ứng dụng giao thông thông minh: Cung cấp tập dữ liệu thực nghiệm và nền tảng khung phần mềm mở để phát triển các thuật toán dự đoán sớm trạng thái người lái nâng cao.

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

1. Yêu cầu kỹ thuật tối thiểu để triển khai hệ thống lên một chiếc xe ô tô là gì?

Xe ô tô cần trang bị cổng kết nối chẩn đoán tiêu chuẩn OBD-II (hỗ trợ giao thức ISO 15765-4 CAN, có mặt trên hầu hết các dòng xe sản xuất từ năm 2008 trở lại đây). Nguồn điện trên xe cần cung cấp điện áp tẩu sạc $12\text{V}$ ổn định qua bộ chuyển đổi nguồn DC $5\text{V} - 3\text{A}$ cho máy tính nhúng.

2. Hệ thống xử lý thế nào khi tài xế đeo khẩu trang hoặc đeo kính cận?

Mô hình 68 điểm mốc khuôn mặt của Dlib vẫn có thể phát hiện vùng mắt chính xác khi tài xế đeo khẩu trang. Trường hợp đeo kính cận trong suốt, thuật toán EAR duy trì độ chính xác khoảng $85 - 90%$. Tuy nhiên, với kính râm tối màu cản quang hoàn toàn, hệ thống sẽ tự động chuyển đổi sang chế độ giám sát góc nghiêng đầu (Head Pose) bằng thuật toán PnP để phát hiện hành vi gục đầu.

3. Tín hiệu tốc độ từ mạng CAN đóng vai trò cụ thể gì trong việc giảm cảnh báo sai?

Hệ thống chỉ kích hoạt chuông báo động và quy trình điều hướng khẩn cấp khi vận tốc xe trích xuất từ mạng CAN đạt giá trị $V \ge 15\text{ km/h}$. Khi xe đang dừng đỗ, tắt máy hoặc kẹt xe di chuyển dưới $5\text{ km/h}$, các thuật toán nhận diện vẫn chạy ngầm nhưng cảnh báo âm thanh được ngắt để không gây ức chế cho người lái.

4. Chi phí dự toán linh kiện để chế tạo hoàn chỉnh một bộ thiết bị là bao nhiêu?

Tổng chi phí linh kiện phần cứng (BOM) bao gồm: Raspberry Pi 4 4GB (~70 USD), Arduino Uno + CAN Shield MCP2515 (~15 USD), Module SIM808 (~20 USD), Camera Full HD USB (~15 USD), Màn hình 7 inch LCD (~30 USD) và phụ kiện cáp nối OBD-II, tổng cộng dao động từ 150 - 160 USD, tiết kiệm hơn rất nhiều so với các gói an toàn đắt đỏ đi kèm xe.

5. Hệ thống có gây ảnh hưởng hay xung đột dữ liệu đến hệ thống an toàn gốc của xe không?

Hoàn toàn không. Module MCP2515 chỉ gửi các khung truy vấn chuẩn 01 0D (chế độ Read-Only Data) theo chu kỳ định sẵn và lắng nghe phản hồi thụ động trên đường truyền CAN. Mạch phần cứng được cách ly và chỉ sử dụng 2 chân CAN_HCAN_L, không can thiệp hay ghi đè lên các ID điều khiển quan trọng của các hộp ECU như ABS, SRS hay EPS.


Kết luận

Đề tài "Nghiên cứu, thiết kế và chế tạo hệ thống giám sát người lái" đã thực hiện thành công việc tích hợp đa công nghệ hiện đại: từ thị giác máy tính xử lý biên (Computer Vision on Edge), phân tích giao thức mạng nội bộ ô tô CAN bus, cho đến hệ thống hỗ trợ điều hướng thông minh qua GPS/GSM. Đồ án không chỉ mang giá trị học thuật sâu sắc đối với sinh viên ngành Công nghệ Kỹ thuật Ô tô tại Trường Đại học Sư phạm Kỹ thuật TP.HCM, mà còn mang tính ứng dụng thực tiễn to lớn trong việc nâng cao an toàn giao thông đường bộ.

Việc làm chủ công nghệ từ tầng phần cứng, giao thức mạng cho đến thuật toán AI mở ra tiềm năng thương mại hóa rộng rãi, biến nghiên cứu này thành giải pháp an toàn giao thông thiết thực và dễ tiếp cận cho cộng đồng.