Giới thiệu dự án

Trong kỷ nguyên công nghiệp 4.0, các hệ thống tự hành (Autonomous Systems) và xe tự hành dẫn đường tự động (Automated Guided Vehicles - AGV / Autonomous Mobile Robots - AMR) đang trở thành trụ cột của các dây chuyền sản xuất và kho vận thông minh. Theo các báo cáo thị trường tự động hóa toàn cầu, nhu cầu triển khai AMR trong logistics và nhà máy sản xuất tăng trưởng với tốc độ tăng trưởng kép hàng năm (CAGR) đạt trên 18.5%. Một trong những năng lực cốt lõi quyết định độ linh hoạt của robot di động là khả năng tự nhận thức không gian và bám theo mục tiêu di động trong môi trường thực tế.

Đề tài "Thiết kế, chế tạo Robot bám theo đối tượng di động dựa trên màu sắc" của tác giả Phạm Xuân Kiệt, chuyên ngành Điện tự động, Khoa Điện – Điện tử thuộc Trường Đại học Duy Tân (dưới sự hướng dẫn của TS. Trần Thuận Hoàng) đã tập trung giải quyết bài toán định vị và bám mục tiêu thời gian thực bằng thị giác máy tính kết hợp hệ thống nhúng điều khiển chuyển động vi sai.

                  +--------------------------+
                  |  Camera Thu Nhận Ảnh     |
                  |  (HD 1280x720 @ 30 FPS)  |
                  +-------------+------------+
                                |
                                v
                  +--------------------------+
                  |  PC Xử Lý Ảnh (OpenCV)   |
                  |  RGB -> HSV -> Tracking  |
                  +-------------+------------+
                                |
                                | UART (9600 bps, 8N1)
                                v
                  +--------------------------+
                  |  Vi Điều Khiển ATmega328 |
                  |  (Arduino UNO R3 16MHz)  |
                  +-------------+------------+
                                |
                                v
                  +--------------------------+
                  |  Driver Động Cơ L298N    |
                  |  (Dual H-Bridge, 2A/Cầu) |
                  +-------------+------------+
                                |
                                v
                  +--------------------------+
                  | 2x DC Servo 24V 4400RPM  |
                  | + Bánh Xe PU (Tỷ Số 4:1) |
                  +--------------------------+

Vấn đề thực tiễn và bài toán kỹ thuật

Các giải pháp robot bám mục tiêu truyền thống thường phụ thuộc vào đường line cố định (Magnetic/Optical Line Tracking) hoặc các cảm biến siêu âm, hồng ngoại cự ly gần. Những phương pháp này bộc lộ nhược điểm lớn: thiếu tính linh hoạt khi mục tiêu thay đổi quỹ đạo tự do và dễ bị nhiễu do vật cản xung quanh. Ngược lại, các hệ thống cảm biến LiDAR hoặc thị giác 3D AI cao cấp lại đòi hỏi chi phí phần cứng đắt đỏ và cấu hình tính toán phức tạp.

Bài toán đặt ra cho đề tài là: Xây dựng một mô hình robot di động tự trị chi phí tối ưu, có khả năng phát hiện liên tục một vật thể hình học (hình tròn) mang màu sắc chỉ định (màu xanh lá), ước lượng khoảng cách không gian thực và truyền lệnh điều hướng động cơ để duy trì cự ly an toàn cố định.

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

  1. Thiết kế và thi công hoàn thiện phần cứng khung cơ khí robot di động 3 bánh (2 bánh chủ động độc lập, 1 bánh thụ động đa hướng).
  2. Xây dựng thuật toán xử lý ảnh thời gian thực trên nền tảng OpenCV: chuyển đổi không gian màu RGB sang HSV, phân đoạn nhị phân, lọc nhiễu hình thái học (Morphology) và trích xuất đặc trưng hình học.
  3. Ứng dụng công thức quang học xác định tọa độ tâm $(x, y)$ và tính toán khoảng cách thực tế $D$ từ camera đến đối tượng.
  4. Thiết kế giao thức truyền thông nối tiếp UART tốc độ 9600 bps giữa máy tính xử lý trung tâm và vi điều khiển ATmega328P.
  5. Lập trình vi điều khiển điều chế độ rộng xung (PWM) thông qua mạch cầu H L298N để điều khiển chính xác hướng quay và tốc độ động cơ DC Servo.

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

  • Phạm vi đối tượng: Mục tiêu theo dõi là vật thể hình tròn đơn sắc (xanh lá cây), chuyển động trong phạm vi cự ly từ 0.5 m đến 1.5 m.
  • Phạm vi môi trường: Vận hành trong môi trường phòng thí nghiệm/trong nhà với điều kiện ánh sáng ổn định, bề mặt sàn phẳng.
  • Giới hạn kỹ thuật: Hệ thống sử dụng một camera đơn (Monocular Vision), chưa tích hợp cảm biến độ sâu chuyên dụng (Stereo/Depth Camera) và điều khiển vòng hở (chưa gắn encoder phản hồi tốc độ thực tế).

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

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

Để lựa chọn giải pháp phù hợp cho bài toán bám mục tiêu di động, đồ án đã tiến hành đánh giá so sánh ba giải pháp công nghệ phổ biến hiện nay:

Tiêu chí Cảm biến Siêu âm / Hồng ngoại Thị giác máy tính cổ điển (OpenCV / HSV) (Giải pháp của đề tài) Học sâu (Deep Learning - YOLO / SSD)
Chi phí phần cứng Rất thấp (< 20 USD) Trung bình (50 - 150 USD) Cao (> 300 USD, cần GPU/NPU)
Độ phức tạp tính toán Thấp (chạy trên vi điều khiển 8-bit) Trung bình (CPU đa nhân phổ thông) Rất cao (yêu cầu Tensor Core / CUDA)
Độ tin cậy nhận diện Thấp, dễ nhầm lẫn góc phản xạ Cao với đối tượng màu sắc xác định Rất cao, nhận diện đa lớp đối tượng
Độ trễ xử lý (Latency) < 10 ms ~ 30 - 35 ms (30 FPS) 50 - 120 ms (tùy phần cứng Edge)
Khả năng ước lượng cự ly Trực tiếp qua Time-of-Flight Tính toán hình học qua bán kính điểm ảnh Ước lượng qua Bounding Box / Depth Model

Ma trận ưu tiên yêu cầu hệ thống (MoSCoW)

  • Must-have (Bắt buộc): Nhận diện chính xác màu xanh lá trong không gian HSV; tính toán tâm và bán kính đối tượng; truyền dữ liệu UART 9600 bps; điều khiển 5 trạng thái vận động (Tiến, Lùi, Trái, Phải, Dừng).
  • Should-have (Cần có): Lọc nhiễu hình thái học Morph Close; thuật toán xấp xỉ đa giác để xác thực hình tròn; ngưỡng khoảng cách an toàn $d_{min} = 700\text{ mm}, d_{max} = 1500\text{ mm}$.
  • Could-have (Có thể mở rộng): Tự động bám theo đối tượng có màu sắc khác thông qua cấu hình ngưỡng; cảnh báo mất dấu đối tượng.
  • Won't-have (Chưa thực hiện): Nhận diện đa mục tiêu cùng lúc; tránh vật cản động trên đường di chuyển.

Thiết kế hệ thống

Kiến trúc tổng thể của robot được chia thành 3 phân hệ chính: Phân hệ Thị giác (Vision Subsystem), Phân hệ Điều khiển trung tâm (Embedded Processing Subsystem), và Phân hệ Cơ khí - Chấp hành (Actuation Subsystem).

+------------------------------------------------------------------------------------------------+
|                                    HỆ THỐNG ROBOT TỰ HÀNH                                      |
|                                                                                                |
|  +----------------------------+                     +---------------------------------------+  |
|  |     PHÂN HỆ THỊ GIÁC       |                     |           PHÂN HỆ ĐIỀU KHIỂN          |  |
|  |  +----------------------+  |                     |  +---------------------------------+  |  |
|  |  | Webcam HD 1280x720   |  |                     |  | Arduino UNO (ATmega328P @16MHz) |  |  |
|  |  +-----------+----------+  |                     |  +----------------+----------------+  |  |
|  |              |             |                     |                   |                   |  |
|  |              v             |                     |                   v                   |  |
|  |  +----------------------+  |  UART (COM5, 9600)  |  +---------------------------------+  |  |
|  |  | Laptop CPU 2.4GHz    |=======================>|  | Mạch Cầu H L298N Dual 2A        |  |  |
|  |  | Python + OpenCV 4.1  |  | ASCII Commands      |  +----------------+----------------+  |  |
|  |  +----------------------+  |  ('f','b','l','r','s')                  |                   |  |
|  +----------------------------+                     +-------------------|-------------------+  |
|                                                                         |                      |
|                                                                         v                      |
|  +------------------------------------------------------------------------------------------+  |
|  |                                PHÂN HỆ CƠ KHÍ & CHẤP HÀNH                                |  |
|  |  +------------------------+  +------------------------+  +----------------------------+  |  |
|  |  | Động cơ DC Servo Trái  |  | Động cơ DC Servo Phải  |  | Nguồn Pin 6x 18650 Li-ion  |  |  |
|  |  | 24V DC, 4400 RPM       |  | 24V DC, 4400 RPM       |  | 2600mAh (~22.2V - 24V)     |  |  |
|  |  +-----------+------------+  +-----------+------------+  +----------------------------+  |  |
|  |              | Dây curoa (4:1)           | Dây curoa (4:1)                               |  |
|  |              v                           v                                               |  |
|  |  +------------------------+  +------------------------+  +----------------------------+  |  |
|  |  | Bánh xe PU phi 45mm    |  | Bánh xe PU phi 45mm    |  | Khung Mica phi 350mm x 70mm|  |  |
|  |  +------------------------+  +------------------------+  +----------------------------+  |  |
|  +------------------------------------------------------------------------------------------+  |
+------------------------------------------------------------------------------------------------+

Thông số kỹ thuật chi tiết của các phần tử phần cứng

+------------------------------------+--------------------------------------------------+
| Phần tử phần cứng                  | Thông số kỹ thuật & Phiên bản                    |
+------------------------------------+--------------------------------------------------+
| Vi điều khiển trung tâm nhúng      | ATmega328P (Arduino Uno R3), Flash 32KB, 16 MHz  |
| Mạch lái công suất (Motor Driver)  | Module L298N Dual H-Bridge, 2A/kênh, P_max = 25W |
| Động cơ chấp hành                  | 2x DC Servo SE38BE27-001 (24VDC, 4400 RPM)       |
| Hệ truyền động                     | Dây curoa răng (Timing belt) tỷ số truyền 4:1    |
| Bánh xe chủ động                   | Polyurethane (PU) lõi thép, đường kính 45 mm     |
| Bánh xe thụ động                   | Bánh xe cầu xoay đa hướng, đường kính 25 mm      |
| Nguồn cấp động lực                 | 6 cell pin 18650 Li-ion nối tiếp (2600 mAh)      |
| Cảm biến hình ảnh                  | Webcam HD (1280x720 @ 30fps, FOV tiêu cự F=600)  |
| Khung thân robot                   | Nhựa Mica chịu lực 4 mm, đường kính 350 mm       |
+------------------------------------+--------------------------------------------------+

Thiết kế ngăn xếp công nghệ (Technology Stack)

  • Hệ điều hành: Microsoft Windows 11 (64-bit).
  • Môi trường phát triển: JetBrains PyCharm 2021 & Arduino IDE 2.1.
  • Thư viện thị giác máy tính: OpenCV 4.1.0 & NumPy 1.21.
  • Thư viện truyền thông: pySerial 3.5 (Python) & HardwareSerial (AVR C++).
  • Ngôn ngữ lập trình: Python 3.9 (Xử lý ảnh cấp cao) và C/C++ (Nhúng vi điều khiển).

Phương pháp luận phát triển (Methodology)

Dự án áp dụng quy trình phát triển kỹ thuật cơ điện tử lặp (Iterative Mechatronics Engineering) kết hợp mô hình kiểm thử V-Model:

[Phân tích yêu cầu] -----------------------------------------> [Nghiệm thu toàn hệ thống]
       \                                                                ^
   [Thiết kế kiến trúc] --------------------------------> [Kiểm thử tích hợp Vision-Motion]
          \                                                      ^
      [Lập trình module OpenCV / Firmware] --------> [Kiểm thử đơn vị Unit Test]
             \                                              ^
              +------> [Thi công phần cứng & Nạp mã] ------+

Quản trị rủi ro và biện pháp khắc phục

  1. Nhiễu ánh sáng môi trường (Ambient Lighting): Không gian màu RGB rất nhạy cảm với cường độ sáng thay đổi. Giải pháp: Chuyển đổi toàn bộ sang không gian HSV, chỉ lọc theo sắc thái (Hue: 55-70) kết hợp phép giãn nở/co ảnh (Dilation/Erosion).
  2. Quá tải dòng khởi động động cơ: Động cơ 24V khi đảo chiều đột ngột dễ gây sụt áp vi điều khiển. Giải pháp: Tách riêng nguồn động lực (Pin 6S) và nguồn điều khiển (USB 5V), tích hợp tụ lọc và diode bảo vệ trên driver L298N.
  3. Mất kết nối dữ liệu Serial: Khi đường truyền UART bị gián đoạn, robot có thể giữ nguyên trạng thái di chuyển nguy hiểm. Giải pháp: Lập trình cơ chế Timeout tự động ngắt PWM và đưa robot về trạng thái 's' (Stop).

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 máy tính được thực thi qua các công đoạn tuần tự khép kín trong mỗi khung hình:

+-------------------+      +-------------------+      +-------------------+
|  Ảnh RGB từ Cam   | ---> |  Chuyển sang HSV  | ---> | Lọc ngưỡng màu    |
|  (640 x 368 px)   |      |  cv2.cvtColor()   |      | cv2.inRange()     |
+-------------------+      +-------------------+      +---------+---------+
                                                                |
                                                                v
+-------------------+      +-------------------+      +-------------------+
| Phân tích hình học| <--- | Tìm đường bao     | <--- | Đóng ảnh khử nhiễu|
| cv2.approxPolyDP()|      | cv2.findContours()|      | cv2.morphologyEx()|
+---------+---------+      +-------------------+      +-------------------+
          |
          v
+----------------------------------------------+
| Tính bán kính r, tâm (x,y) & Khoảng cách D   |
| D = (F * W) / (2 * r)                        |
+----------------------+-----------------------+
                       |
                       v
+----------------------------------------------+
| Quyết định điều hướng: Phân vùng X & Cự ly D |
| Gửi mã ASCII ('f', 'b', 'l', 'r', 's') qua COM|
+----------------------------------------------+

Cơ sở toán học của thuật toán

  1. Lọc không gian màu HSV: $$\text{Mask}(x,y) = \begin{cases} 255 & \text{nếu } H \in [55, 70] \land S \in [50, 255] \land V \in [50, 255] \ 0 & \text{ngược lại} \end{cases}$$

  2. Khử nhiễu hình thái học (Morphological Closing): Thực hiện giãn ảnh ($\text{Dilation} \oplus$) trước rồi co ảnh ($\text{Erosion} \ominus$) sau với phần tử cấu trúc kernel kích thước $3 \times 3$: $$A \bullet B = (A \oplus B) \ominus B$$

  3. Xấp xỉ đa giác nhận diện hình tròn: Sử dụng thuật toán Douglas-Peucker với khoảng cách $\epsilon = 0.02 \times \text{Perimeter}$. Khi số đỉnh của đa giác xấp xỉ $\ge 8$, đối tượng được phân loại là hình tròn: $$\text{IsCircle} = \text{True} \iff (\text{VertexCount} \ge 8) \land (\text{ContourArea} > 100)$$

  4. Ước lượng khoảng cách từ camera đến vật thể: Dựa trên nguyên lý hình học tam giác đồng dạng với tiêu cự camera $F = 600\text{ px}$, đường kính thực của đối tượng $W = 55\text{ mm}$ và bán kính phát hiện trên ảnh $r$ (pixels): $$D = \frac{F \times W}{2 \times r}$$

Mã nguồn xử lý ảnh trên máy tính (Python + OpenCV)

# Kích thước khung hình: 640 x 368
# Phân vùng điều hướng: [0, 250] -> Left | [250, 390] -> Center | [390, 640] -> Right
import cv2
import numpy as np
import serial
import time

d_min = 700   # Khoảng cách tối thiểu (mm)
d_max = 1500  # Khoảng cách tối đa (mm)
F = 600       # Tiêu cự hiệu chuẩn của Camera
W = 55        # Đường kính thực tế của vật thể (mm)

# Khởi tạo kết nối Serial với Arduino Uno
arduino = serial.Serial(port='COM5', baudrate=9600, timeout=5)
cap = cv2.VideoCapture(0)

if not cap.isOpened():
    print("Lỗi: Không thể kết nối Webcam!")
    exit()

def write_data(cmd):
    """Gửi ký tự điều khiển xuống vi điều khiển qua cổng nối tiếp"""
    arduino.write(cmd.encode())

while True:
    ret, frame = cap.read()
    if not ret:
        break

    # 1. Chuyển đổi không gian màu sang HSV
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
    lower_green = np.array([55, 50, 50])
    upper_green = np.array([70, 255, 255])
    
    # 2. Tạo Mask nhị phân và lọc nhiễu Morphology
    mask = cv2.inRange(hsv, lower_green, upper_green)
    kernel = np.ones((3, 3), np.uint8)
    mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel)

    # 3. Tìm Contour đối tượng
    contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    
    D = 0
    radius = 0
    center = (0, 0)
    text_result = "Result: Stop"

    if contours:
        contour = max(contours, key=cv2.contourArea)
        perimeter = cv2.arcLength(contour, True)
        approx = cv2.approxPolyDP(contour, 0.02 * perimeter, True)

        # Kiểm tra hình tròn qua số đỉnh xấp xỉ và diện tích contour
        if len(approx) >= 8 and cv2.contourArea(contour) > 100:
            ((x, y), radius) = cv2.minEnclosingCircle(contour)
            center = (int(x), int(y))
            
            # Tính toán khoảng cách quang học
            if radius > 0:
                D = round((F * W) / (2 * radius), 0)

            # Vẽ trực quan hóa lên khung hình
            cv2.circle(frame, center, int(radius), (0, 0, 255), 2)
            cv2.circle(frame, center, 2, (0, 0, 255), 3)

    # 4. Quyết định hướng di chuyển dựa trên tọa độ X và khoảng cách D
    if d_min <= D <= d_max:
        if center[0] < 250:
            text_result = "Result: Right"
            write_data('r')
        elif 250 <= center[0] <= 390:
            text_result = "Result: Forward"
            write_data('f')
        elif center[0] > 390:
            text_result = "Result: Left"
            write_data('l')
    elif 0 < D < d_min:
        text_result = "Result: Back"
        write_data('b')
    else:
        text_result = "Result: Stop"
        write_data('s')

    # Hiển thị thông số OSD (On-Screen Display)
    cv2.putText(frame, text_result, (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 255, 0), 2)
    cv2.putText(frame, f"D: {D} mm", (10, 60), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255, 0, 0), 2)
    cv2.imshow('Green Object Tracking', frame)

    if cv2.waitKey(10) & 0xFF == ord('q'):
        write_data('s')
        break

cap.release()
cv2.destroyAllWindows()
arduino.close()

Mã nguồn điều khiển nhúng trên ATmega328P (Arduino C/C++)

// Cấu hình chân điều khiển Driver L298N
const int enA = 5;  // PWM Động cơ Phải
const int in1 = 2;  // Hướng quay Motor Phải
const int in2 = 4;
const int enB = 6;  // PWM Động cơ Trái
const int in3 = 7;  // Hướng quay Motor Trái
const int in4 = 8;

const int motor_speed = 110; // Tốc độ cơ sở (PWM 0-255, tương đương ~43% công suất)

void setup() {
  Serial.begin(9600); // Khởi tạo UART baudrate 9600 bps
  pinMode(enA, OUTPUT);
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(enB, OUTPUT);
  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);
  stop_robot();
}

void loop() {
  if (Serial.available() > 0) {
    char command = Serial.read();
    switch (command) {
      case 'f': move_forward();  break;
      case 'b': move_backward(); break;
      case 'l': turn_left();     break;
      case 'r': turn_right();    break;
      case 's': stop_robot();    break;
      default:  stop_robot();    break;
    }
  }
}

void stop_robot() {
  digitalWrite(in1, LOW); digitalWrite(in2, LOW);
  digitalWrite(in3, LOW); digitalWrite(in4, LOW);
  analogWrite(enA, 0);    analogWrite(enB, 0);
}

void move_forward() {
  analogWrite(enA, motor_speed);
  analogWrite(enB, motor_speed);
  digitalWrite(in1, HIGH); digitalWrite(in2, LOW);
  digitalWrite(in3, HIGH); digitalWrite(in4, LOW);
}

void move_backward() {
  analogWrite(enA, motor_speed);
  analogWrite(enB, motor_speed);
  digitalWrite(in1, LOW);  digitalWrite(in2, HIGH);
  digitalWrite(in3, LOW);  digitalWrite(in4, HIGH);
}

void turn_left() {
  analogWrite(enA, motor_speed);
  analogWrite(enB, motor_speed);
  digitalWrite(in1, LOW);  digitalWrite(in2, LOW);
  digitalWrite(in3, HIGH); digitalWrite(in4, LOW);
}

void turn_right() {
  analogWrite(enA, motor_speed);
  analogWrite(enB, motor_speed);
  digitalWrite(in1, HIGH); digitalWrite(in2, LOW);
  digitalWrite(in3, LOW);  digitalWrite(in4, LOW);
}

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

Quá trình thực nghiệm được tiến hành trên 5 bài test độc lập với mục tiêu di động ở các quỹ đạo ziczac, tịnh tiến và xoay tròn trong môi trường trong nhà.

+---------------+------------------------------+--------------------+
| Lần thử nghiệm | Thời gian xử lý & bám đuổi (s)| Đánh giá kết quả   |
+---------------+------------------------------+--------------------+
| Lần 1         | 8.0 s                        | ĐẠT                |
| Lần 2         | 7.5 s                        | ĐẠT                |
| Lần 3         | 10.0 s                       | ĐẠT                |
| Lần 4         | 7.5 s                        | ĐẠT                |
| Lần 5         | 8.5 s                        | KHÔNG ĐẠT (Mất dấu)|
+---------------+------------------------------+--------------------+
| TRUNG BÌNH    | 8.3 s                        | Tỷ lệ ĐẠT: 80%     |
+---------------+------------------------------+--------------------+

Phân tích nguyên nhân và hạn chế phát hiện qua thực nghiệm

  • Tỷ lệ thành công 80%: Trong 4/5 lần thử nghiệm, robot duy trì bám đuổi ổn định theo mục tiêu di động ở vận tốc trung bình $0.25\text{ m/s}$.
  • Trường hợp thất bại (Lần 5): Xảy ra khi mục tiêu di chuyển vào vùng có nguồn sáng chiếu trực tiếp gây lóa (glare), làm thay đổi giá trị sắc thái (Hue) ra ngoài dải ngưỡng $[55, 70]$ khiến thuật toán đánh mất đường bao contour.
  • Thời gian phản hồi: Thời gian trung bình để robot tái định vị và điều hướng khi mục tiêu đổi góc là $8.3\text{ giây}$.

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

  1. Tối ưu hóa pipeline xử lý ảnh thời gian thực trên CPU thông thường: Bằng cách kết hợp phép lọc màu HSV, lọc đóng ảnh Morph Close kernel $3 \times 3$ và xấp xỉ đa giác nhanh (Polygon Approximation), hệ thống đạt tốc độ xử lý ổn định 30 FPS mà không cần phần cứng GPU rời chuyên dụng.
  2. Cơ chế đo khoảng cách quang học không cần cảm biến độ sâu: Sử dụng quan hệ tỷ lệ nghịch giữa bán kính điểm ảnh $r$ và khoảng cách vật lý $D = \frac{F \cdot W}{2r}$, giúp cắt giảm 100% chi phí cảm biến LiDAR/Stereo Camera mà vẫn đảm bảo độ chính xác trong cự ly hoạt động $0.7\text{ m} - 1.5\text{ m}$.
  3. Kiến trúc phần cứng cơ điện tử độ bền cao: Khung robot tròn Mica đường kính 350 mm kết hợp cặp bánh xe vật liệu đàn hồi Polyurethane (PU) lõi thép và hệ truyền động dây đai răng (timing belt) tỷ số 4:1 giúp tăng mô-men xoắn lên 4 lần, chống trượt bánh và đảm bảo chuyển động mượt mà.
+------------------------------------------------------------------------------------------------+
|                         SO SÁNH CÁC CHỈ SỐ KỸ THUẬT VỚI CÁC MÔ HÌNH KHÁC                       |
|                                                                                                |
|  [Đề tài (OpenCV HSV + ATmega328)]  -------------------------> Chi phí: ~80 USD | FPS: 30      |
|  [Mô hình dùng Cảm biến Siêu âm]    ---------> Chi phí: ~30 USD | Không nhận dạng được hình học|
|  [Mô hình AI Jetson Nano + YOLO]    ------------------------------------> Chi phí: >250 USD    |
+------------------------------------------------------------------------------------------------+

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

+------------------------------------------------------------------------------------------+
|                          KỊCH BẢN ỨNG DỤNG THỰC TẾ CỦA ROBOT                             |
|                                                                                          |
|  [Nhà Máy / Kho Bãi]  ====>  Robot kéo hàng tự động bám theo công nhân kho (Follow-me)   |
|  [Bệnh Viện Dã Chiến] ====>  Xe vận chuyển thuốc/vật tư y tế bám theo bác sĩ điều trị    |
|  [An Ninh / Tòa Nhà]  ====>  Robot tuần tra tự động bám theo đối tượng mang thẻ nhận diện|
|  [Sân Bay / Nhà Ga]   ====>  Xe đẩy hành lý thông minh tự bám theo hành khách            |
+------------------------------------------------------------------------------------------+

Hiệu quả kinh tế và phân tích chi phí (BOM - Bill of Materials)

+---------------------------------------------+---------------+
| Hạng mục linh kiện                          | Đơn giá (VNĐ) |
+---------------------------------------------+---------------+
| Bo mạch Arduino Uno R3 (ATmega328P)         | 120.000       |
| Mạch điều khiển động cơ L298N Dual H-Bridge | 45.000        |
| 2x Động cơ DC Servo SE38BE27-001 24V        | 350.000       |
| Khung xe Mica phi 350mm + Bánh xe PU + Curoa| 300.000       |
| Bộ 6 cell Pin 18650 (2600mAh) + Khay pin    | 240.000       |
| Webcam HD + Cáp kết nối phụ trợ             | 250.000       |
+---------------------------------------------+---------------+
| TỔNG CHI PHÍ PHẦN CỨNG                      | 1.305.000 VNĐ |
+---------------------------------------------+---------------+

Với tổng chi phí chế tạo dưới 1.5 triệu VNĐ, hệ thống mang lại hiệu quả đầu tư vượt trội so với các kit robot thương mại có tính năng tương đương (thường có giá từ 5 – 10 triệu VNĐ), tạo điều kiện thuận lợi cho việc ứng dụng rộng rãi trong giáo dục và công nghiệp nhẹ.


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 chiếu sáng: Thuật toán ngưỡng cố định dễ bị sai lệch khi môi trường có bóng râm hoặc ánh sáng mặt trời chiếu trực tiếp.
  • Điều khiển vòng hở (Open-loop Control): Động cơ DC chưa có encoder hồi tiếp vận tốc góc thực tế, dẫn đến sai số trôi khi bề mặt sàn có hệ số ma sát không đồng đều.
  • Vấn đề kết nối vật lý: Việc sử dụng cáp Serial nối trực tiếp từ laptop xuống Arduino hạn chế bán kính và độ cơ động của khung xe.

Hướng nghiên cứu và phát triển tiếp theo

  1. Nâng cấp phần cứng xử lý nhúng: Chuyển đổi toàn bộ chương trình Python lên máy tính đơn bo (SBC) như Raspberry Pi 4 Model B hoặc NVIDIA Jetson Nano để biến robot thành hệ thống độc lập không dây hoàn toàn.
  2. Thuật toán ước lượng chuyển động nâng cao: Tích hợp bộ lọc Kalman Filter (cv2.KalmanFilter) để dự đoán quỹ đạo mục tiêu khi bị che khuất tạm thời (Occlusion).
  3. Cân bằng ánh sáng thích nghi: Ứng dụng kỹ thuật cân bằng biểu đồ mức xám cục bộ thích nghi tương phản (CLAHE) hoặc thuật toán phân đoạn màu thích nghi (Adaptive Thresholding).
  4. Hệ thống điều khiển vòng kín: Bổ sung encoder quang học trên 2 bánh chủ động và xây dựng bộ điều khiển PID vận tốc nhằm tối ưu chuyển động bám mượt mà.

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

+-------------------+----------------------------------------------------------------------+
| Nhóm đối tượng    | Giá trị và lợi ích thực tiễn mang lại                                |
+-------------------+----------------------------------------------------------------------+
| Sinh viên kỹ thuật| Cung cấp mã nguồn mẫu chuẩn và tài liệu tích hợp liên ngành Cơ -     |
| (Cơ điện tử/Tự động)| Điện tử - Thị giác máy tính; làm nền tảng cho đồ án môn học.        |
+-------------------+----------------------------------------------------------------------+
| Kỹ sư phần mềm    | Nắm vững kỹ thuật lập trình pySerial, tối ưu hóa OpenCV và xử lý ảnh |
| nhúng & Robot     | luồng thời gian thực trên phần cứng cấu hình giới hạn.               |
+-------------------+----------------------------------------------------------------------+
| Doanh nghiệp SME  | Tham khảo mô hình xe AGV "Follow-me" chi phí siêu thấp (<60 USD)     |
|                   | để ứng dụng trong tự động hóa kho hàng nội bộ.                       |
+-------------------+----------------------------------------------------------------------+
| Nhà nghiên cứu    | Khung thực nghiệm (Testbed) mở để thử nghiệm các giải pháp lọc       |
|                   | chuyển động (Kalman Filter, Particle Filter) và bám đối tượng mới.   |
+-------------------+----------------------------------------------------------------------+

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

1. Yêu cầu cấu hình phần cứng và môi trường để triển khai hệ thống là gì?

Hệ thống yêu cầu máy tính chạy hệ điều hành Windows 10/11 hoặc Linux (Ubuntu 20.04/22.04 LTS), cài đặt Python phiên bản $\ge 3.8$, thư viện opencv-python phiên bản $\ge 4.1.0$, numpy và pyserial. Phía nhúng yêu cầu bo mạch tương thích Arduino UNO (ATmega328P) kết nối qua cổng USB-UART và nguồn pin cấp dòng tối thiểu 2A cho động cơ 24V.

2. Giới hạn khoảng cách và khả năng mở rộng thuật toán bám theo đối tượng?

Khoảng cách bám tối ưu của hệ thống là $0.7\text{ m} - 1.5\text{ m}$ với độ phân giải camera HD 720p. Để mở rộng cự ly bám lên $3 - 5\text{ m}$, cần nâng cấp camera có ống kính tiêu cự lớn hơn hoặc tăng độ phân giải lên Full HD 1080p, đồng thời điều chỉnh lại hằng số tiêu cự hiệu chuẩn $F$ trong phương trình đo cự ly.

3. Cách thức tích hợp module xử lý ảnh này vào các hệ thống robot tự hành công nghiệp hiện có?

Module xử lý ảnh có thể đóng gói thành một ROS Node (Robot Operating System) xuất bản (publish) chủ đề tọa độ và vận tốc điều khiển /cmd_vel dạng geometry_msgs/Twist. Vi điều khiển hoặc PLC công nghiệp chỉ cần đăng ký (subscribe) nhận dữ liệu qua chuẩn Modbus-RTU hoặc CAN bus để điều khiển hệ truyền động.

4. Quy trình bảo trì phần cứng và hiệu chuẩn quang học định kỳ?

Cần định kỳ kiểm tra độ căng của dây curoa răng truyền động sau mỗi 50 giờ hoạt động để tránh hiện tượng trượt bước. Về mặt quang học, cần hiệu chuẩn lại tiêu cự $F$ và ma trận dải màu HSV khi chuyển đổi sang môi trường làm việc có hệ thống chiếu sáng mới bằng cách chụp vật thể chuẩn ở khoảng cách xác định trước ($1\text{ m}$).

5. Dự toán chi phí chế tạo và thời gian thu hồi vốn (ROI) khi ứng dụng thực tế?

Với tổng chi phí linh kiện khoảng 1.3 - 1.5 triệu VNĐ cho một đơn vị robot, nếu ứng dụng làm xe kéo tự động hỗ trợ vận chuyển trong các xưởng gia công nhỏ thay thế công việc bốc dỡ thủ công, thời gian thu hồi vốn ước tính chỉ từ 1 đến 2 tháng hoạt động.


Kết luận

Đồ án tốt nghiệp "Thiết kế, chế tạo Robot bám theo đối tượng di động dựa trên màu sắc" của sinh viên Phạm Xuân Kiệt (Đại học Duy Tân) đã hoàn thành xuất sắc các mục tiêu nghiên cứu đề ra. Đề tài đã xây dựng thành công một hệ thống cơ điện tử hoàn chỉnh từ cấu trúc cơ khí, mạch công suất đến thuật toán thị giác máy tính thời gian thực.

Với tốc độ đáp ứng 30 FPS, tỷ lệ bám mục tiêu thành công đạt 80% và chi phí chế tạo tối ưu, đồ án không chỉ có giá trị học thuật cao trong đào tạo chuyên ngành Kỹ thuật Điện tự động và Cơ điện tử, mà còn mở ra tiềm năng ứng dụng thực tiễn to lớn trong việc phát triển các dòng xe tự hành thông minh phục vụ sản xuất và đời sống.