Giới thiệu dự án

Trong kỷ nguyên Công nghiệp 4.0 và tự động hóa thông minh, giao diện tương tác người - máy không chạm (Touchless Human-Machine Interface - HMI) đang trở thành một trong những lĩnh vực mũi nhọn của ngành Công nghệ Kỹ thuật Máy tính và Hệ thống Nhúng. Theo các báo cáo thị trường thị giác máy tính công nghiệp, nhu cầu xử lý dữ liệu hình ảnh theo thời gian thực (Real-Time Image Processing) tại biên (Edge Computing) tăng trưởng hơn 22.5% mỗi năm. Các hệ thống thị giác truyền thống thường phụ thuộc vào máy tính cá nhân (PC/IPC) cồng kềnh, tiêu hao nhiều năng lượng (từ 150W đến 350W) và kém tin cậy trong môi trường rung lắc công nghiệp. Ngược lại, các vi điều khiển cấp thấp (như STM32, PIC, Arduino) lại thiếu năng lực tính toán dấu phẩy động và băng thông để xử lý luồng ảnh 3D hoặc ảnh độ sâu tốc độ cao.

Đề tài khóa luận "Xử lý ảnh trên Kit myRIO" giải quyết bài toán cốt lõi: Thiết kế, xây dựng và tối ưu hóa hệ thống xử lý thị giác máy tính thời gian thực trên nền tảng phần cứng nhúng tích hợp vi xử lý kép và cổng logic lập trình được, ứng dụng giải thuật nhận dạng cử chỉ bàn tay (Fast Hand Gesture) để điều khiển thiết bị ngoại vi không tiếp xúc.

+-----------------------------------------------------------------------------+
|                          HỆ THỐNG XỬ LÝ ẢNH MYRIO                           |
|                                                                             |
|  [ Microsoft Kinect v1 ] --(USB 2.0)--> [ NI myRIO-1900 Embedded RTOS ]   |
|     - RGB Stream (640x480)                 - Dual ARM Cortex-A9 @ 667MHz    |
|     - Depth Stream (640x480)               - Xilinx Artix-7 FPGA (28k LC)   |
|                                            - NI Linux Real-Time             |
|                                                         |                   |
|                                        (DIO / MSP / MXP Connector)          |
|                                                         v                   |
|                                            [ Peripheral Control Board ]     |
|                                               - Relay / Actuator / LED      |
+-----------------------------------------------------------------------------+

Mục tiêu nghiên cứu cụ thể

  1. Làm chủ kiến trúc phần cứng hệ thống trên chip (System-on-Chip - SoC) Xilinx Zynq-7010 trên kit NI myRIO-1900 của National Instruments.
  2. Thiết lập cơ chế giao tiếp, trích xuất dữ liệu ảnh màu (RGB) và ảnh độ sâu (Depth Map) từ cảm biến Microsoft Kinect v1 qua cổng USB sử dụng thư viện NI-IMAQdx.
  3. Nghiên cứu và hiện thực hóa thuật toán phân đoạn ảnh chiều sâu, tách tiền cảnh, xác định trọng tâm lòng bàn tay và đếm số lượng ngón tay xòe (1 đến 5 ngón) theo phương pháp Fast Hand Gesture Recognition.
  4. Thiết kế khối điều khiển xuất tín hiệu số (Digital I/O) qua các cổng mở rộng myRIO Expansion Port (MXP)Mini System Port (MSP) để kích hoạt thiết bị điện thế thời gian thực.
  5. Đánh giá hiệu năng hệ thống về độ trễ xử lý (Latency), thông lượng khung hình (Frame Rate - FPS) và độ chính xác nhận dạng trong các điều kiện môi trường khác nhau.

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

  • Phần cứng thu nhận: Cảm biến quang học Microsoft Kinect v1 (công nghệ Structured Light IR), khoảng cách nhận dạng hiệu quả từ $0.6,\text{m}$ đến $1.8,\text{m}$.
  • Nền tảng nhúng: Kit phát triển NI myRIO-1900 chạy hệ điều hành NI Linux Real-Time.
  • Môi trường lập trình: Ngôn ngữ lập trình đồ họa LabVIEW tích hợp Vision Development ModuleLabVIEW Real-Time Module.
  • Phạm vi nhận dạng: Cử chỉ bàn tay tĩnh và động cơ bản đơn lẻ trong góc nhìn trực diện của camera độ sâu.

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

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

Trước khi xây dựng hệ thống trên myRIO, các giải pháp thị giác nhúng trên thị trường bộc lộ nhiều điểm hạn chế khi cân đối giữa hiệu năng xử lý, khả năng can thiệp phần cứng và tính tất định (Determinism).

Tiêu chí kỹ thuật Giải pháp PC + OpenCV Giải pháp Raspberry Pi 3 Giải pháp NI myRIO-1900
Kiến trúc phần cứng x86_64 Intel/AMD Broadcom BCM2837 (ARM) SoC Xilinx Zynq-7010 (ARM + FPGA)
Tính tất định (RTOS) Kém (Windows/Standard Linux) Kém (Raspbian non-RTOS) Rất cao (NI Linux Real-Time)
Xử lý I/O phần cứng Phụ thuộc card giao tiếp phụ GPIO phần mềm, độ trễ không đều 40 lines DIO/FPGA tốc độ cao, DMA I/O
Công suất tiêu thụ Lớn ($100\text{W} - 300\text{W}$) Thấp ($5\text{W} - 8\text{W}$) Tối ưu ($10\text{W} - 14\text{W}$)
Thời gian phát triển (Time-to-market) Trung bình (Viết mã C++/Python dài) Trung bình (Dễ gặp xung đột driver) Cực nhanh (Dataflow G-code LabVIEW)

Phân loại yêu cầu hệ thống theo mô hình MoSCoW

  • Must-Have (Bắt buộc): Đọc luồng Depth từ Kinect; Phân ngưỡng nhị phân độ sâu bằng IMAQ ColorThreshold / IMAQ Threshold; Xác định vòng tròn bao phủ lòng bàn tay bằng IMAQ Overlay Oval; Đếm thành phần liên thông ngón tay bằng IMAQ Count Objects 2; Xuất tín hiệu điều khiển qua cổng DIO.
  • Should-Have (Nên có): Tối ưu bộ nhớ đệm (Image Buffer) tránh rò rỉ RAM; Truyền dữ liệu trạng thái lên giao diện Front Panel máy tính qua giao thức mạng Wi-Fi (TiWi-BLE 802.11 b/g/n).
  • Could-Have (Có thể có): Nhúng khối mã C vào LabVIEW thông qua Call Library Function Node để tối ưu các phép toán ma trận phức tạp.
  • Won't-Have (Chưa thực hiện): Theo dõi đồng thời cử chỉ hai bàn tay hoặc phân tích khung xương toàn thân (Full Skeleton Tracking).

Thiết kế hệ thống

Kiến trúc hệ thống được phân tầng rõ ràng từ tầng thu nhận dữ liệu, tầng tiền xử lý, tầng nhận dạng cử chỉ cho đến tầng chấp hành I/O phần cứng:

graph TD
    A["Microsoft Kinect v1<br/>(IR Depth + RGB)"] -->|USB 2.0 / NI-IMAQdx| B["NI myRIO ARM Cortex-A9<br/>(NI Linux Real-Time)"]
    subgraph "LabVIEW Real-Time Processing Pipeline"
        B --> C["Kinect Initialize & Read Depth.vi"]
        C --> D["IMAQ Cast Image<br/>(U16 to U8 Grayscale)"]
        D --> E["Depth Slicing Threshold<br/>(Tách bàn tay theo dải khoảng cách)"]
        E --> F["Morphological Filtering<br/>(Lọc nhiễu & Điền đầy lỗ)"]
        F --> G["Palm Circle Fitting<br/>(IMAQ Overlay Oval)"]
        G --> H["Hand Subtraction & Finger Blobs"]
        H --> I["IMAQ Count Objects 2<br/>(Đếm số ngón tay)"]
    end
    I --> J{"Gesture Decision Node<br/>(Case Structure: 1..5)"}
    J -->|Pin 0..3 MXP Port A| K["Driver Relay / Optocoupler"]
    J -->|MSP Connector| L["LED Indicators"]
    K --> M["Thiết bị chấp hành công suất<br/>(Quạt, Đèn, Động cơ)"]

Bảng thông số phần cứng và công nghệ sử dụng

  • Thiết bị xử lý trung tâm: NI myRIO-1900 SoC:
    • CPU: Dual-Core ARM Cortex-A9 tốc độ $667,\text{MHz}$.
    • FPGA: Xilinx Artix-7 với $28.000$ tế bào logic lập trình được (Logic Cells).
    • Bộ nhớ: $512,\text{MB}$ DDR3 RAM, $256,\text{MB}$ Nonvolatile Flash.
    • Cổng mở rộng: 02 cổng MXP (34 chân/cổng), 01 cổng MSP (20 chân), USB 2.0 Host/Device.
  • Cảm biến đầu vào: Microsoft Kinect for Windows / Xbox 360:
    • Camera màu: Độ phân giải $640 \times 480,\text{pixels}$ @ $30,\text{FPS}$.
    • Cảm biến độ sâu: Công nghệ hồng ngoại (IR Astigmatism), dải đo $11\text{-bit}$ ($0 - 2047$).
  • Hệ thống phần mềm:
    • NI LabVIEW 2014/2015 Real-Time Module.
    • NI Vision Development Module (VDM) 2014.
    • Trình quản trị hệ thống NI Measurement & Automation Explorer (NI-MAX v14.0).

Phương pháp nghiên cứu và quy trình phát triển

Dự án áp dụng mô hình phát triển tích hợp phần cứng - phần mềm lặp nhanh (Agile Hardware-Software Co-design) qua 4 giai đoạn:

[Giai đoạn 1: W1-W4]  -> Nghiên cứu kiến trúc Zynq-7010, cấu hình Linux RT, cài driver Kinect.
[Giai đoạn 2: W5-W9]  -> Xây dựng thuật toán Fast Hand Gesture trên LabVIEW Host PC.
[Giai đoạn 3: W10-W14] -> Triển khai mã nguồn xuống myRIO Real-Time target, tối ưu bộ nhớ.
[Giai đoạn 4: W15-W18] -> Đóng gói Standalone Application (.rtexe), kiểm thử tải và tích hợp I/O.

Implementation và kết quả

Quy trình phát triển và hiện thực hóa giải thuật

Thuật toán nhận dạng cử chỉ bàn tay nhanh (Fast Hand Gesture Recognition) trên ảnh độ sâu được xây dựng trên môi trường sơ đồ khối (Block Diagram) của LabVIEW với các bước xử lý liên tiếp:

Bước 1: Khởi tạo và đọc luồng ảnh độ sâu

Sử dụng các SubVI chuyên dụng Kinect Initialize System.viRead Depth.vi để cấu hình khung truyền USB Isochronous từ cảm biến Kinect, thu về ma trận điểm ảnh chứa giá trị khoảng cách nguyên không dấu $16\text{-bit}$ (Grayscale U16).

Bước 2: Chuyển đổi định dạng và phân ngưỡng cắt lớp khoảng cách (Depth Slicing)

Ảnh độ sâu được ép kiểu sang định dạng $8\text{-bit}$ (Grayscale U8) thông qua hàm IMAQ Cast Image với hệ số dịch bit để giữ lại thông tin đối tượng gần camera nhất. Quá trình phân ngưỡng nhị phân được thực hiện để loại bỏ hoàn toàn nhiễu nền hậu cảnh:

$$I_{\text{binary}}(x, y) = \begin{cases} 1 & \text{nếu } D_{\min} \le I_{\text{depth}}(x, y) \le D_{\max} \ 0 & \text{ngược lại} \end{cases}$$

Trong đó khoảng cách ngưỡng tối ưu được thiết lập: $D_{\min} = 500,\text{mm}$ và $D_{\max} = 900,\text{mm}$.

// Đoạn mã C minh họa thuật toán phân ngưỡng lát cắt độ sâu (Depth Slicing)
// Được tích hợp qua Call Library Function Node trong LabVIEW
void depth_slicing_threshold(const uint16_t* src_depth, uint8_t* dst_binary, 
                             int width, int height, uint16_t d_min, uint16_t d_max) {
    int total_pixels = width * height;
    for (int i = 0; i < total_pixels; ++i) {
        uint16_t depth_val = src_depth[i];
        if (depth_val >= d_min && depth_val <= d_max) {
            dst_binary[i] = 255; // Tiền cảnh (Bàn tay)
        } else {
            dst_binary[i] = 0;   // Hậu cảnh loại bỏ
        }
    }
}
+-----------------------------------------------------------------------------------+
|               LABVIEW BLOCK DIAGRAM LOGIC - XỬ LÝ ẢNH NHẬN DẠNG                   |
|                                                                                   |
|  [IMAQ Create] -> [Read Depth] -> [IMAQ Cast Image] -> [IMAQ ColorThreshold]     |
|         |                                                      |                  |
|         v                                                      v                  |
|  (Buffer "Hand")                                      (Binary Mask 0/255)         |
|                                                                |                  |
|  [IMAQ Count Objects 2] <- [Subtract Mask] <- [IMAQ Overlay Oval (Palm Circle)]   |
|         |                                                                         |
|         v (Detected Blobs = 1..5)                                                 |
|  [Case Structure]                                                                 |
|     |-- Case 1: DIO 0 = HIGH (Bật Đèn 1)                                          |
|     |-- Case 2: DIO 1 = HIGH (Bật Đèn 2)                                          |
|     |-- Case 3: DIO 2 = HIGH (Bật Động cơ)                                        |
|     |-- Case 4: DIO 3 = HIGH (Đảo chiều quay)                                     |
|     +-- Case 5: All DIO = LOW (Tắt toàn bộ hệ thống)                              |
+-----------------------------------------------------------------------------------+

Bước 3: Tách lòng bàn tay và đếm ngón tay

  1. Áp dụng phép biến đổi khoảng cách (Distance Transform) để tìm điểm ảnh có giá trị lớn nhất trong vùng nhị phân; điểm này chính là tâm lòng bàn tay $(X_c, Y_c)$ với bán kính nội tiếp cực đại $R_{\text{palm}}$.
  2. Gọi hàm IMAQ Overlay Oval để vẽ và phủ mặt nạ hình tròn tâm $(X_c, Y_c)$ bán kính $R_{\text{mask}} = 1.35 \times R_{\text{palm}}$ lên ảnh nhị phân nhằm xóa sạch phần lòng bàn tay.
  3. Phần còn lại sau phép trừ mặt nạ chính là các thành phần liên thông độc lập tương ứng với các ngón tay xòe ra.
  4. Sử dụng hàm IMAQ Count Objects 2 để đếm số lượng đối tượng (blobs) thỏa mãn diện tích tối thiểu ($A_{\text{min}} > 80,\text{pixels}$) nhằm loại bỏ nhiễu biên.

Thử nghiệm và đánh giá chất lượng (Testing & Validation)

Hệ thống được kiểm thử thực nghiệm qua 500 lần thử nghiệm với 5 mẫu cử chỉ bàn tay (tương ứng từ 1 đến 5 ngón tay) tại các khoảng cách và điều kiện môi trường ánh sáng khác nhau:

Cử chỉ (Số ngón tay) Số lần thử nghiệm Nhận dạng đúng (True Positive) Nhận dạng sai / Trượt Độ chính xác trung bình (%) Thời gian xử lý TB (ms)
1 Ngón (Trỏ) 100 96 4 96.0% 36.2 ms
2 Ngón (Chữ V) 100 95 5 95.0% 37.8 ms
3 Ngón 100 92 8 92.0% 38.5 ms
4 Ngón 100 90 10 90.0% 39.4 ms
5 Ngón (Xòe bàn tay) 100 94 6 94.0% 40.1 ms
Tổng thể hệ thống 500 467 33 93.4% 38.4 ms (~26 FPS)

Đánh giá tài nguyên thực thi trên NI Linux Real-Time

  • Mức độ chiếm dụng CPU (ARM Cortex-A9): $48.2%$ (khi luồng video chạy liên tục ở $640 \times 480$).
  • Dung lượng RAM tiêu thụ: $118,\text{MB} / 512,\text{MB}$ ($23.0%$).
  • Độ trễ kích hoạt phần cứng DIO: $< 1.8,\text{ms}$ từ khi hoàn tất frame xử lý ảnh.

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

  1. Khắc phục triệt để điểm yếu phụ thuộc ánh sáng của thị giác RGB truyền thống: Bằng cách ứng dụng kênh dữ liệu độ sâu (Depth Map) của Kinect trên kit myRIO, giải thuật miễn nhiễm hoàn toàn với sự thay đổi cường độ sáng môi trường ($0,\text{lux}$ trong bóng tối hoàn toàn đến $1000,\text{lux}$ dưới ánh sáng đèn phòng), giải quyết triệt để lỗi mất dấu màu da (Skin Color Segmentation) thường gặp trong không gian màu RGB/HSV.

  2. Tối ưu hóa pipeline xử lý ảnh trên hệ điều hành thời gian thực (NI Linux RT): Không giống các nghiên cứu chạy trên máy tính Windows thông thường có độ trễ không dự đoán được do cơ chế lập lịch của OS, hệ thống trên myRIO tận dụng cấu trúc song song của LabVIEW Real-Time, phân bổ luồng thu nhận ảnh (Producer Loop) và luồng xử lý nhận dạng - xuất I/O (Consumer Loop) qua cấu trúc FIFO hàng đợi, giảm tỷ lệ rớt khung hình (Frame Drop) xuống dưới $0.2%$.

+-----------------------------------------------------------------------------+
|               SO SÁNH CÁC PHƯƠNG PHÁP NHẬN DẠNG CỬ CHỈ BÀN TAY              |
|                                                                             |
|  [Độ chính xác]                                                             |
|   100% |                                      * myRIO + Kinect Depth        |
|        |                                        (Độ chính xác 93.4%)        |
|    80% |                 * OpenCV + Web RGB                                 |
|        |                   (Độ chính xác 76.5%)                             |
|    60% |                                                                    |
|    40% |  * Cảm biến uốn Flex Sensor                                       |
|        |    (Tiếp xúc cơ học, vướng víu)                                    |
|     0% +------------------------------------------------------------>       |
|            Môi trường tối / Ánh sáng thay đổi phức tạp                      |
+-----------------------------------------------------------------------------+
  1. Tài liệu hóa quy trình tích hợp thiết bị USB phức tạp trên myRIO: Khóa luận tiên phong xây dựng tài liệu kỹ thuật hoàn chỉnh tại Việt Nam về việc kết nối, cấu hình driver tầng thấp và đọc luồng camera độ sâu Kinect trên nền tảng NI myRIO-1900 thông qua LabVIEW, tạo tiền đề vững chắc cho các nghiên cứu tiếp theo về Robot tự hành và HMI công nghiệp.

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

Tình huống ứng dụng thực tế

  • Hệ thống điều khiển trong phòng phẫu thuật y tế: Cho phép bác sĩ điều chỉnh thông số máy nội soi, xem phim chụp X-quang/CT mà không cần chạm tay vào thiết bị, bảo đảm môi trường vô trùng tuyệt đối.
  • Giao diện HMI trong môi trường công nghiệp độc hại/phòng sạch: Người vận hành điều khiển dây chuyền đóng gói, phân loại sản phẩm mà không cần tiếp xúc nút bấm vật lý trong môi trường nhiều hóa chất, dầu mỡ hoặc phòng sạch bán dẫn Class 100.
  • Hệ thống Smart Home & Tự động hóa tòa nhà: Điều khiển bật/tắt thiết bị chiếu sáng, quạt thông gió, đóng mở rèm cửa thông qua cử chỉ trực quan.

Hướng dẫn triển khai hệ thống (Deployment Guide)

# 1. Kết nối myRIO với máy tính qua cáp USB và mở terminal SSH
ssh admin@172.22.11.2

# 2. Kiểm tra thông tin phần cứng Zynq-7010 và nhân Linux Real-Time
uname -a
# Output: Linux NI-myRIO-1900 3.14.40-rt37-ni-3.0.0f0 #1 SMP PREEMPT RT armv7l GNU/Linux

# 3. Kiểm tra thiết bị Kinect USB đã được nhận diện
lsusb
# Bus 001 Device 003: ID 045e:02bf Microsoft Corp. Xbox NUI Camera
# Bus 001 Device 004: ID 045e:02c2 Microsoft Corp. Xbox NUI Motor
# Bus 001 Device 005: ID 045e:02ae Microsoft Corp. Xbox NUI Audio

Các bước cấu hình triển khai phần mềm độc lập (Standalone RT Application)

  1. Trong cửa sổ Project Explorer của LabVIEW, nhấp chuột phải vào mục Build Specifications dưới nhánh myRIO Target $\rightarrow$ Chọn New $\rightarrow$ Real-Time Application.
  2. Chọn Main_Gesture_Control.vi làm Top-level VI.
  3. Nhấn Build để biên dịch sơ đồ khối G-code thành tập tin thực thi nhúng .rtexe.
  4. Nhấp chuột phải vào bản build vừa tạo $\rightarrow$ Chọn Set as startupRun as startup để nạp chương trình vào bộ nhớ flash ROM của kit myRIO. Hệ thống sẽ tự động khởi động và xử lý ảnh ngay khi cấp nguồn mà không cần kết nối máy tính.

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

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

  • Giới hạn băng thông chuẩn USB 2.0: Cổng USB Host trên myRIO-1900 chia sẻ băng thông với các ngoại vi khác, khiến độ phân giải ảnh độ sâu bị giới hạn ở $640 \times 480$ pixels @ $30,\text{FPS}$, chưa tận dụng được các cảm biến 3D độ phân giải cao hơn.
  • Chưa khai thác khối logic FPGA cho xử lý ảnh điểm: Toàn bộ thuật toán lọc và phân ngưỡng hiện tại đang chạy trên vi xử lý ARM Cortex-A9 (LabVIEW Real-Time); khối logic FPGA Artix-7 mới chỉ dừng lại ở vai trò định tuyến I/O.
  • Góc quét giới hạn: Khi người dùng đưa tay quá gần ($< 0.5,\text{m}$) hoặc ngón tay bị che khuất theo phương vuông góc với tia IR (Occlusion), tỷ lệ đếm sai tăng lên $15%$.

Hướng phát triển và mở rộng

  1. Chuyển dịch các thuật toán lọc hình thái học (Morphology) xuống FPGA: Sử dụng LabVIEW FPGA Module kết hợp NI Vision RIO để thực hiện phép tích chập (Convolution), lọc median và nhị phân hóa trực tiếp trên $28.000$ tế bào logic của Xilinx Zynq FPGA, nâng tốc độ xử lý lên $> 100,\text{FPS}$ với độ trễ tính bằng micro-giây ($\mu\text{s}$).
  2. Tích hợp mạng nơ-ron học sâu (Deep Learning / TinyML): Ứng dụng các mô hình mạng nơ-ron tích chập thu nhỏ (như MobileNetV2, Tiny-YOLO) để nhận dạng cử chỉ bàn tay phức tạp (nắm, xoay, vuốt 3D) thay vì giải thuật đếm hình học truyền thống.
  3. Mở rộng truyền thông công nghiệp: Đóng gói dữ liệu cử chỉ thành các gói tin chuẩn Modbus TCP/IP hoặc OPC UA để kết nối trực tiếp với PLC S7-1200/1500 trong mạng tự động hóa xí nghiệp.

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

+-----------------------------------------------------------------------------+
|                             GIÁ TRỊ MANG LẠI                                |
|                                                                             |
|  [Sinh viên & Giảng viên]  ---> Giáo trình, mã nguồn mẫu trực quan LabVIEW. |
|  [Kỹ sư Hệ thống Nhúng]   ---> Kiến trúc mẫu SoC Zynq (ARM + FPGA) + RTOS.  |
|  [Doanh nghiệp Tự động hóa] ---> Giải pháp HMI không chạm, tiết kiệm điện.   |
|  [Nhà nghiên cứu]          ---> Nền tảng Benchmark thuật toán thị giác 3D.   |
+-----------------------------------------------------------------------------+
  • Sinh viên ngành Kỹ thuật Máy tính, Tự động hóa, Cơ điện tử: Tiếp cận phương pháp lập trình đồ họa trực quan LabVIEW, hiểu sâu kiến trúc hệ thống nhúng lai ghép SoC (ARM + FPGA) và nguyên lý xử lý ảnh số thời gian thực.
  • Kỹ sư phát triển sản phẩm nhúng: Nắm vững kỹ thuật triển khai ứng dụng độc lập (Standalone RT Application) trên Linux Real-Time, kỹ thuật giao tiếp cảm biến quang học qua USB và quản lý bộ nhớ đệm hình ảnh an toàn.
  • Doanh nghiệp và cơ sở sản xuất: Sở hữu giải pháp công nghệ HMI không chạm chi phí thấp, giảm thiểu nguy cơ lây nhiễm chéo vi sinh vật trong sản xuất y dược, thực phẩm và tối ưu hóa thời gian thao tác cho công nhân.

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

1. Yêu cầu phần cứng và phần mềm tối thiểu để vận hành hệ thống này là gì?

Về phần cứng, cần 01 kit NI myRIO-1900 (đi kèm nguồn cấp $12,\text{V}/1.5,\text{A}$), 01 cảm biến Microsoft Kinect v1 (kèm adapter nguồn $12,\text{V}$ riêng cho Kinect), board mạch đệm relay điều khiển thiết bị. Về phần mềm trên máy tính lập trình: Hệ điều hành Windows 7/8/10 (32-bit hoặc 64-bit), NI LabVIEW 2014 trở lên, LabVIEW Real-Time Module, NI Vision Development Module, NI-IMAQdx driver và trình tiện ích NI-MAX.

2. Tại sao lại chọn thuật toán Fast Hand Gesture trên ảnh độ sâu thay vì xử lý ảnh màu RGB thông thường?

Ảnh màu RGB rất dễ bị ảnh hưởng bởi sự thay đổi của ánh sáng môi trường, bóng đổ và màu sắc hậu cảnh tương đồng với màu da tay. Trong khi đó, cảm biến độ sâu Kinect phát chùm tia hồng ngoại cấu trúc (Structured Light), cho ra giá trị khoảng cách vật lý của từng pixel độc lập với ánh sáng khả kiến. Nhờ đó, việc phân đoạn bàn tay bằng kỹ thuật cắt lát độ sâu (Depth Slicing) đạt độ chính xác gần như tuyệt đối với độ phức tạp thuật toán cực thấp ($O(N)$), cho phép chạy mượt mà trên chip nhúng công suất thấp ARM Cortex-A9.

3. Có thể nạp mã nguồn C/C++ thuần vào kit myRIO thay cho LabVIEW được không?

Hoàn toàn được. Kit myRIO chạy hệ điều hành NI Linux Real-Time hỗ trợ bộ công cụ biên dịch chéo GNU C/C++ Compiler (gcc-arm-linux-gnueabi) thông qua môi trường Eclipse. Ngoài ra, trong LabVIEW, bạn có thể nhúng trực tiếp các hàm C biên dịch dưới dạng thư viện liên kết động (.so trên Linux) thông qua khối chức năng Call Library Function Node.

4. Hệ thống xử lý thế nào để tránh hiện tượng tràn bộ nhớ (Memory Leak) khi camera chạy liên tục nhiều giờ?

Trong LabVIEW Vision, mỗi biến ảnh được tạo ra bằng hàm IMAQ Create sẽ cấp phát một vùng nhớ heap cố định. Để tránh rò rỉ RAM, chương trình chỉ khởi tạo các bộ đệm ảnh (Image Buffers) một lần duy nhất ở giai đoạn khởi động bên ngoài vòng lặp While Loop. Trong thân vòng lặp, dữ liệu ảnh mới sẽ ghi đè lên bộ đệm có sẵn. Khi kết thúc chương trình, toàn bộ bộ đệm phải được giải phóng tường minh thông qua hàm IMAQ Dispose.

5. Chi phí đầu tư phần cứng và khả năng ứng dụng thực tế trong công nghiệp ra sao?

Kit NI myRIO được thiết kế chuyên biệt cho nghiên cứu và đào tạo với độ bền công nghiệp, khả năng chống nhiễu EMC tốt và MTBF (Mean Time Between Failures) cao. Chi phí cho một hệ thống hoàn chỉnh (myRIO + Kinect + mạch điều khiển) thấp hơn nhiều so với việc đầu tư một máy tính công nghiệp (IPC) gắn card frame grabber chuyên dụng, trong khi mức tiêu thụ điện năng chỉ khoảng $12\text{W}$, giúp tiết kiệm chi phí vận hành và phù hợp triển khai bền bỉ $24/7$.


Kết luận

Đề tài "Xử lý ảnh trên Kit myRIO" đã nghiên cứu thành công và làm chủ công nghệ xử lý thị giác máy tính trên nền tảng phần cứng nhúng tiên tiến NI myRIO-1900. Bằng việc kết hợp sức mạnh tính toán của vi xử lý lõi kép ARM Cortex-A9, hệ điều hành thời gian thực NI Linux Real-Time và cảm biến độ sâu Kinect, hệ thống đã hiện thực hóa thuật toán nhận dạng cử chỉ bàn tay nhanh với độ chính xác trung bình đạt $93.4%$, thời gian đáp ứng đạt $38.4,\text{ms}$ (~$26,\text{FPS}$) và kích hoạt các thiết bị chấp hành ngoại vi tức thời.

Kết quả của đề tài không chỉ khẳng định tính khả thi của việc đưa các giải thuật xử lý ảnh phức tạp lên các kit nhúng SoC công suất thấp mà còn mở ra hướng ứng dụng thực tiễn to lớn trong việc xây dựng các hệ thống điều khiển không tiếp xúc an toàn, thông minh cho y tế, công nghiệp tự động hóa và nhà thông minh.