Bối cảnh và vấn đề nghiên cứu
Trong xu hướng phát triển của ngành công nghiệp ô tô thế giới và sự bùng nổ của các dòng xe điện, xe tự hành, công nghệ phần mềm ô tô (Automotive) đóng vai trò trung tâm trong việc quản lý, vận hành và nâng cao tiện ích cho người sử dụng. Hệ thống thông tin giải trí trên xe (In-Vehicle Infotainment - IVI) cùng màn hình điều khiển thông minh không chỉ thay thế các cụm đồng hồ cơ truyền thống mà còn tích hợp các chức năng kiểm soát an toàn, định vị dẫn đường, điều khiển tiện nghi và kết nối đa phương tiện. Tại Việt Nam, nhu cầu trang bị màn hình thông minh trên ô tô cá nhân và xe dịch vụ ngày càng gia tăng nhằm khắc phục sự đơn điệu trong các hành trình dài và hỗ trợ lái xe an toàn.
Đề tài "Xây dựng ứng dụng CarPlay cho ô tô" được tác giả thực hiện trong quá trình thực tập tại Công ty TNHH Phần mềm FPT, dưới sự hướng dẫn của giảng viên Vũ Thị Thương và đội ngũ kỹ sư dự án, nhằm giải quyết bài toán thiết kế và phát triển giao diện điều khiển trung tâm tích hợp các dịch vụ trên xe.
Văn bản xác định 4 mục tiêu nghiên cứu và triển khai cụ thể:
- Xây dựng tài liệu trải nghiệm người dùng (User Experience - UX).
- Xây dựng tài liệu giao diện người dùng (User Interface - UI).
- Xây dựng hệ thống giải trí đa phương tiện hỗ trợ nghe nhạc và xem video.
- Xây dựng hệ thống điều hòa không khí, hỗ trợ kết nối và điều chỉnh thông qua điện thoại thông minh.
- Đối tượng nghiên cứu: Ứng dụng điều khiển giao diện trung tâm CarPlay và các dịch vụ tích hợp trên màn hình thông minh ô tô (hệ thống giải trí âm thanh, video, bản đồ, kiểm soát điều hòa).
- Phạm vi nghiên cứu: Mô hình phần mềm Automotive chạy trên nền tảng hệ điều hành nhúng Linux, tập trung vào tầng giao diện đồ họa (GUI), cơ chế giao tiếp liên tiến trình (IPC) và mô hình quản lý dữ liệu cấu hình cục bộ; dữ liệu và thử nghiệm được tiến hành trong khuôn khổ đồ án tốt nghiệp ngành Công nghệ thông tin năm 2023 tại Hà Nội.
Cơ sở lý thuyết và phương pháp
Đề tài áp dụng các công nghệ lập trình phần mềm hệ thống và phát triển giao diện nhúng tiêu chuẩn trong ngành công nghiệp Automotive:
- Ngôn ngữ lập trình C++: Sử dụng chuẩn C++ (tiêu chuẩn ISO/IEC 14882:2017) với mô hình lập trình hướng đối tượng (OOP: đóng gói, kế thừa, đa hình, trừu tượng hóa), quản trị bộ nhớ qua con trỏ và tối ưu hóa hiệu năng xử lý tác vụ mức thấp.
- Framework Qt và ngôn ngữ QML: Sử dụng framework Qt đa nền tảng (bao gồm các mô-đun QtCore, QtGui, QtWidgets, QtQuick, QtQuickControls, QtMultimedia, QtDBus, QtTest). Ngôn ngữ khai báo QML kết hợp động cơ JavaScript V4 engine được dùng để xây dựng giao diện động, quản lý thuộc tính (Property Bindings), trạng thái (States), chuyển cảnh (Transitions) và hoạt ảnh (Animations).
- Cơ chế Signal & Slot: Cơ chế giao tiếp giữa các đối tượng trong Qt, áp dụng cú pháp mới từ Qt5 (
QObject::connect) hỗ trợ kiểm tra kiểu dữ liệu tại thời điểm biên dịch (compile-time checking).
- Hệ thống liên lạc D-Bus (Desktop Bus): Cơ chế truyền thông liên tiến trình (IPC) và gọi thủ tục từ xa (RPC) trên môi trường Linux, sử dụng cả Daemon hệ thống (System Bus) và Daemon phiên (Session Bus) cùng bộ chuyển đổi thích ứng (
appsxml.xml / Qt D-Bus Adaptor) để đồng bộ dữ liệu giữa ứng dụng giao diện và dịch vụ điều hòa.
- Phương pháp nghiên cứu và phát triển:
- Phương pháp phân tích yêu cầu: Xây dựng tài liệu đặc tả yêu cầu phần mềm (SRS) với hệ thống mã định danh chuẩn hóa cho từng màn hình chức năng.
- Phương pháp thiết kế hướng đối tượng và kiến trúc Model-View-Controller (MVC): Tách biệt tầng hiển thị QML (View), tầng xử lý nghiệp vụ C++ (Controller) và tầng quản lý dữ liệu (Model kế thừa từ
QAbstractListModel).
- Phương pháp kiểm thử phần mềm: Áp dụng kiểm thử hộp đen thực nghiệm đánh giá chức năng (SRS), giao diện (UI) và trải nghiệm thao tác (UX) với chu trình lặp 3 lần trên mỗi ca kiểm thử.
- Nguồn dữ liệu: Cấu hình danh mục ứng dụng được đọc, ghi động từ tệp tin cấu hình định dạng XML; dữ liệu đa phương tiện lấy từ hệ thống tệp cục bộ (.mp3, .mp4); dữ liệu trạng thái điều hòa nhận qua giao tiếp bus D-Bus.
Thiết kế và triển khai hệ thống
Kiến trúc tổng thể và mô hình tương tác
Hệ thống được thiết kế theo mô hình phân lớp kết hợp kiến trúc MVC và giao tiếp hướng thông điệp D-Bus:
| Thành phần |
Công nghệ / Lớp thực hiện |
Chức năng chính |
| View |
QML / Qt Quick 2.9 |
Xây dựng giao diện hiển thị, tiếp nhận sự kiện cảm ứng/chuột, điều khiển chuyển đổi màn hình bằng StackView. |
| Model |
ApplicationsModel, MediaModel, VideoModel |
Kế thừa QAbstractListModel, ánh xạ dữ liệu từ C++ sang QML thông qua bảng roleNames(), cung cấp dữ liệu danh sách ứng dụng, bài hát, video. |
| Controller |
ApplicationsController, ClimateController, MediaController, VideoController |
Cài đặt mẫu thiết kế Singleton (getInstance), quản lý vòng đời đối tượng, điều phối nghiệp vụ và kết nối tầng dữ liệu với tầng hiển thị. |
| Engine |
AppEngine, QQmlApplicationEngine |
Khởi tạo môi trường ứng dụng, khởi tạo toàn bộ Controller, nạp ngữ cảnh C++ vào QML bằng setContextProperty. |
| IPC Bus |
Qt D-Bus Adaptor (QDBusConnection, QDBusMessage) |
Cung cấp kênh truyền thông điệp không đồng bộ giữa tiến trình CarPlay và dịch vụ điều khiển phần cứng điều hòa xe hơi. |
| Data Layer |
XmlReader (QDomDocument) |
Đọc, phân tích cú pháp và ghi cấu hình danh sách ứng dụng ra tệp XML cục bộ. |
+-----------------------------------+
| View (QML / UI) |
+-----------------------------------+
| (Property Binding / Signal-Slot)
v
+-----------------------------------+
| Model & Controller |
| (ApplicationsModel, AppEngine...) |
+-----------------------------------+
/ \
(DOM / File I/O) / \ (Qt D-Bus IPC)
v v
+---------------------+ +---------------------+
| Data Layer (.xml) | | Climate Service |
+---------------------+ +---------------------+
Thiết kế cấu trúc các lớp phần mềm chính
-
Lớp xử lý cấu hình và danh mục ứng dụng:
XmlReader: Chịu trách nhiệm đọc đường dẫn (ReadXmlFile(QString filePath)), phân tích cú pháp (PaserXml(ApplicationsModel &model)), bổ sung bản ghi (addItemtoList) và lưu cấu hình (xmlWriter).
ApplicationsModel: Cung cấp danh sách các mục ứng dụng (ApplicationItem), cài đặt các phương thức nạp dữ liệu chuẩn rowCount(), data() và định danh vai trò roleNames().
ApplicationsController: Khởi tạo môi trường điều khiển danh mục và gắn kết ngữ cảnh QQmlContext.
-
Lớp điều khiển hệ thống điều hòa (ClimateController):
- Quản lý các biến trạng thái: Nhiệt độ ghế lái
m_D_Temp (mặc định 23.5°C), quạt gió ghế lái m_D_Wind (mặc định mức 8), hướng gió thổi đầu m_D_onHEAD, hướng gió thổi chân m_D_onFOOT; các biến tương ứng cho ghế hành khách (m_P_Temp, m_P_Wind, m_P_onHEAD, m_P_onFOOT); chế độ tự động m_C_AUTO và đồng bộ m_C_SYNC.
- Kết nối với D-Bus qua
QDBusConnection::sessionBus().call() với thời gian chờ 1000ms nhằm chống treo luồng giao diện khi dịch vụ nền gặp sự cố.
-
Lớp điều khiển giải trí Media và Video:
MediaController & MediaModel: Sử dụng QMediaPlayer và QMediaPlaylist, quét tệp âm thanh .mp3, bóc tách ảnh bìa bài hát (getAlbumArt(QUrl url)), cung cấp thông tin thời lượng (getTimeInfo(qint64 currentInfo)).
VideoController & VideoModel: Sử dụng QAbstractVideoSurface để kết xuất luồng hình ảnh tệp .mp4 lên bề mặt hiển thị của Qt Quick.
Bố cục không gian giao diện (UI Layout)
Khuôn hình giao diện tổng thể được thiết kế trên độ phân giải chiều ngang 1920 pixel, phân chia thành 4 khu vực chức năng:
- Thanh trạng thái (Status Bar Area): Chiều cao 55px, hiển thị đồng hồ định dạng 12 giờ (AM/PM), thứ/ngày/tháng và nút Quay lại (Back button kích thước tương tác, hiển thị khi rời khỏi màn hình Home).
- Khu vực tiện ích nhỏ (Widget Area): Kích thước 1500 x 455px, hiển thị tiện ích bản đồ (Map Widget) với vị trí định vị kinh độ, vĩ độ của xe.
- Khu vực danh mục ứng dụng (Application Menu Area): Kích thước chiều cao 210px, sắp xếp 6 nút ứng dụng nằm ngang, mỗi nút có kích thước tiêu chuẩn 235 x 210px, khoảng cách giữa các biểu tượng là 5px (lề trái 35px, lề phải 30px).
- Khu vực cảm biến áp suất lốp (Tire Pressure Sensor Area): Chiều rộng 420px, hiển thị các thông số áp suất và nhiệt độ lốp theo thời gian thực.
Nội dung chính theo từng chương
Chương I: Tổng quan phân tích, mục tiêu của đề tài
Chương này tập trung phân tích nhu cầu trang bị màn hình thông minh trên ô tô. Tác giả khảo sát các thông số kỹ thuật phần cứng cốt lõi của màn hình ô tô gồm: dung lượng RAM/ROM, kích thước vật lý màn hình (phổ biến từ 7 inch, 9 inch đến 11 inch), hệ điều hành (chủ đạo là Android) và bộ xử lý tín hiệu âm thanh kỹ thuật số (DSP). Đồng thời, chương I phân tích chi tiết các nhóm tính năng an toàn (cảm biến áp suất lốp, hệ thống camera hành trình, camera lùi, camera 360 độ hỗ trợ triệt tiêu điểm mù theo góc đánh lái), điều khiển giọng nói rảnh tay, định vị dẫn đường đa bản đồ (Vietmap, Navitel, Google Maps) và các ứng dụng giải trí chạy ẩn (YouTube). Trên cơ sở đó, tác giả xác định 4 mục tiêu phát triển sản phẩm hướng tới khả năng thương mại hóa.
Chương II: Tổng quan các công nghệ
Chương II trình bày hệ thống lý thuyết về các công nghệ nền tảng được lựa chọn:
- Ngôn ngữ C++: Lịch sử phát triển, chuẩn ISO/IEC 14882:2017, các đặc trưng hướng đối tượng, con trỏ quản lý bộ nhớ, ưu thế tốc độ thực thi và thư viện thuật toán hỗ trợ.
- Ngôn ngữ đánh dấu QML & Qt Quick: Cú pháp khai báo phân cấp cây đối tượng, cơ chế liên kết dữ liệu động (Property Bindings), quản lý chuyển trạng thái và hệ thống hoạt ảnh (PropertyAnimation, SequentialAnimation).
- Cơ chế Signal & Slot: So sánh cú pháp kết nối cũ (Old syntax qua chuỗi macro
SIGNAL/SLOT) và cú pháp mới (New syntax từ Qt5 dựa trên con trỏ hàm), phân tích ưu điểm kiểm tra lỗi tại thời điểm biên dịch.
- Hệ thống D-Bus IPC: Cấu trúc System Bus và Session Bus, 4 phương thức sử dụng D-Bus trên Linux (phát tín hiệu
createSignal, kết nối connect, gọi phương thức createMethodCall và tạo bộ chuyển đổi DBUS_ADAPTORS từ tệp XML).
- Bộ khung Qt Framework: Quá trình phát triển từ Trolltech, Nokia, Digia đến Qt Company; phân tích cấu trúc 14 mô-đun chức năng chính phục vụ phát triển ứng dụng nhúng đa nền tảng.
Chương III: Phương pháp, quy trình triển khai ứng dụng CarPlay
Nội dung chương III chi tiết hóa toàn bộ quy trình phát triển sản phẩm:
- Đặc tả yêu cầu phần mềm (SRS): Xây dựng danh mục các ca sử dụng (Use Case Diagrams cho Home Screen, Climate Screen, Media Screen, Video Screen) và 48 yêu cầu chức năng/phi chức năng mã hóa từ
Home_SRS_01.1 đến Home_SRS_08.3.
- Thiết kế kiến trúc và mô hình dữ liệu: Lập sơ đồ lớp chi tiết cho 8 lớp thực thi trong C++ và ánh xạ sang ngữ cảnh QML.
- Sơ đồ thuật toán quy trình: Đặc tả 5 quy trình thao tác cốt lõi gồm: quy trình khởi động màn hình chính liên kết QAbstractListModel; quy trình điều hướng mở ứng dụng qua StackView; quy trình xử lý nút Back; quy trình kéo thả hoán đổi vị trí biểu tượng và cập nhật tệp XML; quy trình giao tiếp IPC D-Bus đồng bộ trạng thái điều hòa.
- Thiết kế UI/UX: Xây dựng bản vẽ bố cục kích thước chi tiết (pixel) và kịch bản tương tác người dùng cho thanh trạng thái, tiện ích bản đồ, danh mục ứng dụng và bộ điều khiển điều hòa.
- Kiểm thử và đánh giá: Xây dựng hệ thống bảng kiểm thử cho từng yêu cầu, tiến hành chạy thử nghiệm và tổng hợp kết quả.
Kết quả và đóng góp
Kết quả thực nghiệm và số liệu kiểm thử
Đề tài đã hoàn thành toàn diện 4/4 mục tiêu đề ra ban đầu. Kết quả kiểm thử thực nghiệm được tổng hợp qua 63 ca kiểm thử (Test Case), tất cả đều đạt yêu cầu (Pass) qua 3 lần kiểm tra lặp:
| Nhóm nội dung kiểm thử |
Số ca kiểm thử (Test Cases) |
Số ca đạt (Pass) |
Số ca thất bại (Fail) |
Tỷ lệ thành công |
| Kiểm thử phân tích yêu cầu (SRS) |
48 |
48 |
0 |
100% |
| Kiểm thử giao diện người dùng (UI) |
11 |
11 |
0 |
100% |
| Kiểm thử trải nghiệm người dùng (UX) |
4 |
4 |
0 |
100% |
| TỔNG CỘNG |
63 |
63 |
0 |
100% |
Các kết quả chức năng chi tiết bao gồm:
- Màn hình chính (Home Screen): Khởi tạo thành công 4 khu vực giao diện trong thời gian dưới 1 giây; hiển thị tối đa 6 biểu tượng ứng dụng từ tệp cấu hình XML; hỗ trợ thao tác chạm, giữ, kéo thả hoán đổi vị trí ứng dụng và tự động ghi đè thứ tự mới vào tệp XML.
- Phân hệ điều hòa (Climate Application): Hiển thị và điều chỉnh dải nhiệt độ độc lập cho tài xế và hành khách từ 16°C đến 31°C (bước nhảy 0.5°C, mặc định 23.5°C); cấp độ quạt gió từ 1 đến 16 (mặc định mức 8); hỗ trợ chuyển đổi chế độ hướng gió (thổi đầu
HEAD, thổi chân FOOT), chế độ tự động AUTO và chế độ đồng bộ hai vùng SYNC. Giao tiếp IPC qua D-Bus phản hồi trạng thái hai chiều theo thời gian thực và đồng bộ với giao diện điều khiển trên điện thoại thông minh.
- Phân hệ giải trí đa phương tiện (Media & Video): Tự động quét và lập danh sách bài hát/video từ bộ nhớ; trích xuất chính xác thông tin tiêu đề, ca sĩ, album, ảnh bìa và thanh tiến trình thời gian thực; hỗ trợ chuyển bài, tua nhanh/lùi, phát lặp (Repeat) và phát ngẫu nhiên (Random).
- Phân hệ bản đồ (Map Widget): Cập nhật tọa độ kinh độ, vĩ độ của phương tiện theo thời gian thực và điều hướng toàn màn hình khi nhấp chọn.
Đóng góp của đồ án
- Chuẩn hóa quy trình phân tích và tài liệu hóa hoàn chỉnh cho một ứng dụng màn hình ô tô thông minh theo tiêu chuẩn công nghiệp (từ SRS, UI Layout, UX Flow đến Test Sheet chi tiết).
- Hiện thực hóa thành công mô hình tích hợp hệ thống nhúng giữa tầng giao diện người dùng động (QML) với logic xử lý hiệu năng cao (C++) và cơ chế truyền thông điệp liên tiến trình (D-Bus IPC) trên nền tảng Linux.
Hạn chế và hướng nghiên cứu tiếp
Theo tự đánh giá của tác giả trong phần kết luận đồ án, hệ thống vẫn tồn tại các hạn chế kỹ thuật:
- Một số màn hình ứng dụng phụ (như Phone, Setting) mới dừng lại ở mức giao diện khung, chưa hoàn thiện toàn bộ tính năng bên trong.
- Tính thẩm mỹ của giao diện đồ họa còn ở mức cơ bản, chưa đạt độ trau chuốt cao của sản phẩm thương mại hoàn chỉnh.
- Kết nối D-Bus mới chỉ được triển khai cho dịch vụ điều hòa ở cấp độ cơ bản, chưa mở rộng cho toàn bộ các cảm biến và dịch vụ ngoại vi khác trên xe.
- Bố cục mã nguồn cần tiếp tục được tối ưu hóa và tái cấu trúc nhằm tăng tính thẩm mỹ và khả năng bảo trì.
Hướng phát triển tiếp theo được xác định:
- Nâng cấp và thương mại hóa toàn diện gói phần mềm.
- Xây dựng và tích hợp hệ thống hiển thị camera lùi và camera 360 độ trực tiếp trên giao diện.
- Nghiên cứu phát triển giao diện hiển thị cho công nghệ thực tế tăng cường (AR) và màn hình hiển thị trên kính lái (HUD - Head-Up Display).
- Tích hợp ngăn xếp kết nối không dây Bluetooth phục vụ đồng bộ cuộc gọi và danh bạ điện thoại.
Giá trị tham khảo
Đồ án là tài liệu tham khảo kỹ thuật hữu ích cho:
- Sinh viên ngành Công nghệ thông tin, Kỹ thuật phần mềm, Hệ thống nhúng và Kỹ thuật Ô tô: Cung cấp bức tranh thực tế về việc áp dụng C++ và Qt/QML trong mảng công nghệ phần mềm ô tô (Automotive Software Engineering).
- Lập trình viên và kỹ sư phát triển phần mềm nhúng Linux: Tham khảo phương thức xây dựng kiến trúc Model-View kết hợp
QAbstractListModel và giải pháp giao tiếp IPC qua D-Bus Session Bus có cơ chế chống nghẽn luồng.
- Kỹ sư kiểm thử (Tester) và kỹ sư cầu nối (BrSE): Tham khảo cấu trúc tài liệu đặc tả yêu cầu phần mềm (SRS), tài liệu thiết kế UI/UX theo pixel và ma trận ca kiểm thử hộp đen tiêu chuẩn.
Câu hỏi thường gặp
1. Cơ chế liên tiến trình D-Bus được ứng dụng như thế nào trong phân hệ điều hòa của đồ án?
D-Bus đóng vai trò cầu nối IPC giữa ứng dụng giao diện CarPlay và tiến trình dịch vụ điều khiển phần cứng điều hòa. Tác giả sử dụng tệp định nghĩa appsxml.xml để tạo bộ chuyển đổi thích ứng (DBUS_ADAPTORS), áp dụng lệnh gọi phương thức QDBusMessage::createMethodCall() qua QDBusConnection::sessionBus() kèm thời gian chờ 1000ms nhằm cập nhật hai chiều các thông số nhiệt độ, cấp gió, hướng gió và chế độ AUTO/SYNC.
2. Dữ liệu danh mục ứng dụng trên màn hình Home được lưu trữ và cập nhật thứ tự bằng cách nào?
Danh mục ứng dụng được lưu trữ trong một tệp tin cấu hình XML cục bộ. Khi ứng dụng khởi động, lớp XmlReader phân tích tệp XML và nạp vào ApplicationsModel. Khi người dùng thao tác nhấn giữ và kéo thả biểu tượng sang vị trí mới, hàm move() được kích hoạt để hoán đổi vị trí trong model, đồng thời gọi xmlWriter ghi đè trực tiếp cấu hình mới vào tệp XML để bảo lưu thứ tự cho các lần khởi động tiếp theo.
3. Giao diện chính của ứng dụng được phân chia kích thước theo tỷ lệ không gian như thế nào?
Giao diện được thiết kế trên độ phân giải chiều rộng 1920 pixel, bao gồm: Thanh trạng thái (Status Bar) phía trên cao 55px; Khu vực Widget bản đồ kích thước 1500 x 455px; Khu vực danh mục ứng dụng phía dưới cao 210px (chứa tối đa 6 nút kích thước 235 x 210px); và Khu vực cảm biến áp suất lốp có chiều rộng 420px.
4. Toàn bộ quá trình kiểm thử phần mềm đạt kết quả định lượng như thế nào?
Đồ án đã thiết kế và thực thi tổng cộng 63 ca kiểm thử (bao gồm 48 ca kiểm thử đặc tả yêu cầu SRS, 11 ca kiểm thử giao diện UI và 4 ca kiểm thử trải nghiệm UX). Mỗi ca kiểm thử được tiến hành lặp lại qua 3 chu kỳ độc lập và đạt tỷ lệ thành công tuyệt đối 100% (63/63 ca Pass, 0 ca Fail).
Kết luận
Đồ án "Xây dựng ứng dụng CarPlay cho ô tô" của sinh viên Nguyễn Hữu Kiên đã hoàn thành đầy đủ 4 mục tiêu nghiên cứu và phát triển phần mềm giao diện điều khiển trung tâm trên ô tô. Tác giả đã kết hợp hiệu quả nền tảng ngôn ngữ C++, bộ khung Qt/QML, cơ chế truyền thông D-Bus trên hệ điều hành Linux và cấu trúc dữ liệu XML để hiện thực hóa các phân hệ chức năng từ giao diện Home, giải trí đa phương tiện đến điều hòa không khí. Toàn bộ 63 ca kiểm thử chức năng, UI và UX đều đạt kết quả nghiệm thu tuyệt đối, tạo tiền đề vững chắc cho việc tiếp tục mở rộng các tính năng camera, AR/HUD và thương mại hóa sản phẩm.