Giới thiệu dự án

Thị trường robot dịch vụ thông minh phục vụ đời sống gia đình và vệ sinh công nghiệp đang trải qua sự tăng trưởng vượt bậc với tốc độ tăng trưởng kép hàng năm (CAGR) đạt hơn 18.5% trong giai đoạn 2020–2025. Tuy nhiên, phần lớn các thiết bị tự hành dọn dẹp phân khúc giá rẻ hiện nay trên thị trường vẫn dựa vào thuật toán di chuyển ngẫu nhiên (random bounce) hoặc cảm biến va chạm cơ học thô sơ. Cơ chế này dẫn đến việc bỏ sót rác, tiêu tốn năng lượng tại các khu vực sạch và không có khả năng chủ động tìm kiếm các điểm bẩn tập trung.

Ở chiều ngược lại, các dòng robot cao cấp sử dụng cảm biến laser quét 2D/3D (LiDAR) và hệ thống định vị bản đồ đồng thời (SLAM) lại có giá thành cao, khó tiếp cận đại trà và cấu trúc tính toán phức tạp.

Đề tài tốt nghiệp "Thiết kế Robot dọn rác ứng dụng xử lý ảnh" của tác giả Hoàng Văn Lâm, dưới sự hướng dẫn của PGS. TS. Nguyễn Minh Tâm tại Trường Đại học Sư phạm Kỹ thuật TP. Hồ Chí Minh (Khoa Điện - Điện tử, Ngành CNKT Điều khiển và Tự động hóa) giải quyết bài toán cốt lõi: Tạo ra một mô hình robot di động 3 bánh tự hành nhỏ gọn, chi phí thấp, có khả năng phân tích thị giác máy tính theo thời gian thực để tự động nhận dạng, định vị tọa độ và di chuyển đến vị trí có rác/vết bẩn để tiến hành thu gom.

+-------------------------------------------------------------------------+
|                            HỆ THỐNG ROBOT TỰ HÀNH                       |
|                                                                         |
|  [Picamera V2 8MP]                                                      |
|         │                                                               |
|         ▼ (Khung hình RAW RGB 640x480 @ 30fps)                         |
|  [Raspberry Pi 3 Model B] ──> (Chuyển đổi HSV, Phân ngưỡng, Contours)   |
|         │                                                               |
|         ▼ (Giao tiếp UART: Tọa độ Δx, Δy, Góc quay θ)                  |
|  [Arduino Pro Mini ATmega328P] ──> (Tạo xung Step/Dir tần số cao)      |
|         │                                                               |
|         ├───────────────────────────────┬────────────────────────────┐  |
|         ▼                               ▼                            ▼  |
|  [Driver A4988 (Trái)]          [Driver A4988 (Phải)]        [Relay 5VDC]
|         │                               │                            │  |
|         ▼                               ▼                            ▼  |
|  [Động cơ bước NEMA 17]         [Động cơ bước NEMA 17]     [Động cơ hút rác]
+-------------------------------------------------------------------------+

Mục tiêu dự án

  1. Nghiên cứu và triển khai giải thuật thị giác máy tính: Xây dựng luồng tiền xử lý ảnh và trích xuất đặc trưng đối tượng (vật thể rác) dựa trên thư viện mã nguồn mở OpenCV và ngôn ngữ Python 3.
  2. Thiết kế kiến trúc điều khiển phân tầng (Master - Slave): Kết hợp năng lực tính toán phần mềm của máy tính nhúng Raspberry Pi 3 Model B và năng lực điều khiển thời gian thực chính xác của vi điều khiển Arduino Pro Mini (ATmega328P).
  3. Chế tạo phần cứng robot di động 3 bánh: Tích hợp động cơ bước (Stepper Motor) điều khiển qua driver A4988, cơ cấu truyền động vi sai kết hợp bánh dẫn hướng tự do (caster wheel), mạch ổn áp DC-DC LM2596 và module nguồn Pin LiPo.
  4. Định vị và làm sạch mục tiêu tự động: Xác định chính xác vùng hoạt động (Clean Zone), điều hướng robot bám sát đối tượng với sai số định vị trong phạm vi dung sai cho phép.

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

  • Môi trường hoạt động: Mặt phẳng phẳng trong nhà (sàn gạch, sàn gỗ), điều kiện ánh sáng ổn định (300 – 800 Lux).
  • Phạm vi nhận diện: Nhận dạng phân đoạn đối tượng đơn sắc/tương phản cao bằng không gian màu HSV và bộ lọc hình thái học.
  • Cơ cấu chấp hành: Sử dụng động cơ bước công suất nhỏ, tốc độ di chuyển mô hình từ 0.1 – 0.25 m/s nhằm tối ưu hóa độ chính xác dừng và gom rác.

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

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

Tiêu chí so sánh Robot di chuyển ngẫu nhiên (Random Walk) Robot quét Laser SLAM (LiDAR) Robot thị giác nhúng (Đề tài đề xuất)
Cảm biến chính Cảm biến chạm cơ học, hồng ngoại LiDAR 2D/3D + Cảm biến Encoder Picamera V2 8MP (Sony IMX219)
Khả năng thấy rác Không (chỉ chạy phủ kín sàn) Không (chỉ nhận diện vật cản/tường) Có (phân đoạn chính xác vị trí rác)
Độ phức tạp phần cứng Thấp Rất cao Trung bình (Tối ưu vi xử lý nhúng)
Giá thành chế tạo Rất thấp ($20 – $40) Rất cao ($250 – $800) Tối ưu ($60 – $85)
Hiệu suất quét điểm bẩn Thấp (lãng phí thời gian) Trung bình (quét theo đường zíc zắc) Cao (di chuyển thẳng tới mục tiêu)

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

  • Must have (Bắt buộc): Thu nhận khung hình thời gian thực qua Picamera; xử lý không gian màu HSV; trích xuất đường biên vật thể (cv2.findContours); truyền tọa độ qua giao thức nối tiếp UART; điều khiển động cơ bước quay chính xác góc và số bước.
  • Should have (Nên có): Lọc nhiễu trung vị (Median Filter) để loại bỏ nhiễu muối tiêu; cân bằng lược đồ màu (Histogram Equalization); cơ chế tự kích hoạt động cơ hút rác qua Relay khi đối tượng vào vùng Clean Zone.
  • Could have (Có thể mở rộng): Tự động điều chỉnh dải ngưỡng nhị phân theo cường độ ánh sáng môi trường; bổ sung cảm biến siêu âm HC-SR04 dự phòng tránh vật cản đột ngột.
  • Won't have (Chưa thực hiện trong pha này): Nhận diện đa chủng loại rác bằng mạng nơ-ron học sâu (Deep Learning/YOLO); quét tạo bản đồ phòng 3D.

Thiết kế hệ thống

Kiến trúc hệ thống được thiết kế theo mô hình lai (Hybrid Control Architecture):

graph TD
    A[Camera Raspberry Pi V2] -->|CSI-2 Bus / Raw Frame| B(Raspberry Pi 3 Model B)
    B -->|Tiền xử lý: BGR -> HSV| C{Trích xuất ngưỡng & Biên dạng}
    C -->|Tính tâm: cx, cy| D[Bộ điều hướng Vision Node]
    D -->|Khung dữ liệu UART 9600 bps| E(Arduino Pro Mini 5V/16MHz)
    E -->|Xung Step / Chiều Dir| F[Driver A4988 Master/Slave]
    E -->|Tín hiệu kích Digital| G[Module Relay 5V]
    F --> H[2x Động cơ bước NEMA 17]
    G --> I[Quạt hút lốc xoáy Mini 12V]
    J[Nguồn LiPo 3S 11.1V 2200mAh] -->|Qua LM2596 DC-DC| B
    J -->|Cấp trực tiếp Vmot| F
    J -->|Qua Relay| I

Danh mục công nghệ và linh kiện phần cứng

  • Bộ xử lý trung tâm (High-Level Vision): Raspberry Pi 3 Model B (Broadcom BCM2837 64-bit Quad-Core ARM Cortex-A53 @ 1.2GHz, 1GB LPDDR2 SDRAM, GPU VideoCore IV).
  • Vi điều khiển chấp hành (Low-Level Real-time): Arduino Pro Mini (ATmega328P 8-bit, xung nhịp 16MHz, điện áp hoạt động 5V logic).
  • Cảm biến thị giác: Camera Module Raspberry Pi V2 (Cảm biến Sony IMX219 8-Megapixel, khẩu độ f/2.0, hỗ trợ chụp ảnh tĩnh $3280 \times 2464$ pixel và quay video 1080p30).
  • Mạch điều khiển động cơ: 2x Module Driver A4988 với công nghệ ngắt vi bước (Microstepping up to 1/16 step), tích hợp bảo vệ quá dòng và quá nhiệt.
  • Động cơ truyền động: 2x Động cơ bước lưỡng cực 4 dây (NEMA 17 Stepper Motor, góc bước cơ bản $1.8^\circ \pm 5%$, tức 200 bước/vòng).
  • Khối nguồn và chuyển đổi điện áp:
    • Nguồn chính: Pin LiPo 3S 11.1V 2200mAh 25C xả dòng cao.
    • Mạch hạ áp Buck DC-DC LM2596 (Hiệu suất chuyển đổi ~92%, dải hạ áp từ 11.1V xuống 5.0V $\pm 0.05\text{V}$, dòng định mức 3A phục vụ riêng Raspberry Pi).
    • Bộ pin phụ trợ: Raspberry Pi Lithium Battery Power Pack 3800mAh.

Phương pháp nghiên cứu và phát triển (Methodology)

Dự án áp dụng quy trình phát triển lặp kết hợp phần cứng và phần mềm (Hardware-Software Co-design Lifecycle):

+-----------------------------------------------------------------------------------+
|                           LỘ TRÌNH TRIỂN KHAI DỰ ÁN                               |
+-------------------+---------------------------------------------------------------+
| Tuần 01 - Tuần 04 | Khảo sát lý thuyết, thiết kế cơ khí 3D và sơ đồ nguyên lý     |
| Tuần 05 - Tuần 08 | Xây dựng thuật toán xử lý ảnh trên máy trạm (OpenCV / Python) |
| Tuần 09 - Tuần 12 | Porting mã nguồn sang Raspbian, tích hợp giao tiếp UART      |
| Tuần 13 - Tuần 16 | Thử nghiệm thực địa, tinh chỉnh PID, đo lường và đánh giá     |
+-------------------+---------------------------------------------------------------+
  • Đánh giá rủi ro và giải pháp khắc phục:
    • Rủi ro sụt áp vi xử lý: Động cơ bước khi khởi động rút dòng đột ngột khiến Raspberry Pi khởi động lại (brownout reset). Giải pháp: Tách biệt hoàn toàn bus nguồn động cơ (11.1V trực tiếp từ LiPo) và nguồn logic (5V sau mạch Buck LM2596 có tụ lọc chống nhiễu $1000\mu\text{F}$).
    • Rủi ro trễ xử lý khung hình (Frame latency): Giải pháp: Giảm độ phân giải frame capture xuống $640 \times 480$ pixel và xử lý đa lõi trên Raspberry Pi (-j4).

Triển khai thực nghiệm và Kết quả

Quá trình phát triển phần mềm

1. Luồng thuật toán xử lý ảnh (Python 3 & OpenCV)

Toàn bộ chu trình thị giác được thực hiện qua các bước tính toán hình thái học liên tục:

$$\text{Chuyển đổi sang mức xám theo độ nhạy quang học: } Y = 0.299R + 0.587G + 0.114B$$

Để loại bỏ sự phụ thuộc vào sự biến thiên ánh sáng môi trường, ảnh BGR được chuyển sang không gian màu HSV ($Hue, Saturation, Value$):

$$V = \max(R, G, B)$$

$$S = \begin{cases} 0 & \text{nếu } V = 0 \ \frac{V - \min(R,G,B)}{V} & \text{ngược lại} \end{cases}$$

$$H = \begin{cases} 0 & \text{nếu } S = 0 \ 60^\circ \times \frac{G - B}{V - \min(R,G,B)} & \text{nếu } V = R \text{ và } G \ge B \ 60^\circ \times \left(\frac{G - B}{V - \min(R,G,B)} + 6\right) & \text{nếu } V = R \text{ và } G < B \ 60^\circ \times \left(\frac{B - R}{V - \min(R,G,B)} + 2\right) & \text{nếu } V = G \ 60^\circ \times \left(\frac{R - G}{V - \min(R,G,B)} + 4\right) & \text{nếu } V = B \end{cases}$$

import cv2
import numpy as np
import serial
import time

# Khởi tạo giao tiếp UART với Arduino Pro Mini
ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=1)
time.sleep(2)

# Khởi tạo Camera
cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)

# Định nghĩa dải màu HSV cho vật thể mục tiêu (Ví dụ: Rác màu đỏ)
lower_red1 = np.array([0, 120, 70])
upper_red1 = np.array([10, 255, 255])
lower_red2 = np.array([170, 120, 70])
upper_red2 = np.array([180, 255, 255])

# Vùng làm sạch mục tiêu (Clean Zone Center)
CLEAN_ZONE_Y_MIN = 380
CLEAN_ZONE_Y_MAX = 460
CLEAN_ZONE_X_MIN = 280
CLEAN_ZONE_X_MAX = 360

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)

    # 2. Phân ngưỡng nhị phân theo dải màu
    mask1 = cv2.inRange(hsv, lower_red1, upper_red1)
    mask2 = cv2.inRange(hsv, lower_red2, upper_red2)
    mask = mask1 | mask2

    # 3. Lọc nhiễu muối tiêu bằng Median Filter
    mask_filtered = cv2.medianBlur(mask, 5)

    # 4. Trích xuất đường bao (Contours)
    contours, _ = cv2.findContours(mask_filtered, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

    if contours:
        # Lấy contour có diện tích lớn nhất
        largest_contour = max(contours, key=cv2.contourArea)
        area = cv2.contourArea(largest_contour)

        if area > 150:  # Loại bỏ nhiễu kích thước nhỏ
            M = cv2.moments(largest_contour)
            if M["m00"] != 0:
                cx = int(M["m10"] / M["m00"])
                cy = int(M["m01"] / M["m00"])

                # Kiểm tra tọa độ với Clean Zone
                if CLEAN_ZONE_X_MIN <= cx <= CLEAN_ZONE_X_MAX and cy >= CLEAN_ZONE_Y_MIN:
                    ser.write(b'CLEAN\n')  # Dừng và kích hoạt hút rác
                elif cx < CLEAN_ZONE_X_MIN:
                    ser.write(b'LEFT\n')   # Quay trái hướng về rác
                elif cx > CLEAN_ZONE_X_MAX:
                    ser.write(b'RIGHT\n')  # Quay phải hướng về rác
                else:
                    ser.write(b'FORWARD\n')# Tiến thẳng
    else:
        ser.write(b'SEARCH\n')  # Chế độ quay chậm tìm kiếm

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

2. Giải thuật điều khiển chấp hành vi bước trên Arduino Pro Mini

Vi điều khiển tiếp nhận các mã lệnh điều hướng qua cổng Serial và thực hiện phát chuỗi xung chuyển mạch cho các chân STEPDIR của Driver A4988:

// Cấu hình chân điều khiển Driver A4988
const int stepPinL = 3;
const int dirPinL  = 4;
const int stepPinR = 5;
const int dirPinR  = 6;
const int relayPin = 7;

void setup() {
  Serial.begin(9600);
  pinMode(stepPinL, OUTPUT);
  pinMode(dirPinL, OUTPUT);
  pinMode(stepPinR, OUTPUT);
  pinMode(dirPinR, OUTPUT);
  pinMode(relayPin, OUTPUT);
  digitalWrite(relayPin, LOW); // Tắt relay ban đầu
}

void stepMotors(boolean dirL, boolean dirR, int steps, int stepDelayMicrosec) {
  digitalWrite(dirPinL, dirL);
  digitalWrite(dirPinR, dirR);
  for (int i = 0; i < steps; i++) {
    digitalWrite(stepPinL, HIGH);
    digitalWrite(stepPinR, HIGH);
    delayMicroseconds(stepDelayMicrosec);
    digitalWrite(stepPinL, LOW);
    digitalWrite(stepPinR, LOW);
    delayMicroseconds(stepDelayMicrosec);
  }
}

void loop() {
  if (Serial.available() > 0) {
    String command = Serial.readStringUntil('\n');
    command.trim();

    if (command == "FORWARD") {
      digitalWrite(relayPin, LOW);
      stepMotors(HIGH, HIGH, 100, 1200);
    } else if (command == "LEFT") {
      digitalWrite(relayPin, LOW);
      stepMotors(LOW, HIGH, 50, 1500);
    } else if (command == "RIGHT") {
      digitalWrite(relayPin, LOW);
      stepMotors(HIGH, LOW, 50, 1500);
    } else if (command == "CLEAN") {
      digitalWrite(relayPin, HIGH); // Bật quạt hút
      delay(2000);                  // Thời gian hút 2 giây
      stepMotors(HIGH, HIGH, 40, 1200); // Nhích tới gom rác
      digitalWrite(relayPin, LOW);
    } else if (command == "SEARCH") {
      stepMotors(LOW, HIGH, 30, 2000);  // Xoay trục tự tìm
    }
  }
}

Thử nghiệm và đánh giá định lượng

Hệ thống được tiến hành đo kiểm thực tế qua 100 chu kỳ thử nghiệm với các biến thể môi trường:

+-----------------------------------------------------------------------------------+
|                        KẾT QUẢ ĐO KIỂM HIỆU NĂNG THỰC NGHIỆM                      |
+-----------------------+---------------------+-------------------+-----------------+
| Điều kiện ánh sáng    | Khoảng cách phát hiện| Tỷ lệ nhận diện   | Độ trễ phản hồi |
+-----------------------+---------------------+-------------------+-----------------+
| Sáng tiêu chuẩn (500L)| 0.2m - 1.5m         | 94.6%             | 58 ms           |
| Ánh sáng yếu (200 Lux)| 0.2m - 1.0m         | 86.2%             | 64 ms           |
| Ánh sáng gắt (900 Lux)| 0.2m - 1.2m         | 89.1%             | 59 ms           |
+-----------------------+---------------------+-------------------+-----------------+

Phân tích độ trễ xử lý (End-to-End Latency Breakdown)

  • Thu nhận hình ảnh từ Picamera V2: $18\text{ ms}$
  • Tiền xử lý BGR sang HSV + Phân ngưỡng (Thresholding): $22\text{ ms}$
  • Lọc nhiễu Median + Trích xuất Contours: $12\text{ ms}$
  • Truyền gói tin UART Raspberry Pi $\rightarrow$ Arduino: $4\text{ ms}$
  • Kích hoạt xung Driver A4988 & Đáp ứng cơ khí: $10\text{ ms}$
  • $\rightarrow$ Tổng thời gian đáp ứng: $\approx 66\text{ ms}$ (Tương đương tốc độ cập nhật xấp xỉ $15\text{ FPS}$, hoàn toàn đáp ứng vận hành thời gian thực cho robot di động dưới $0.5\text{ m/s}$).

Đổi mới và Đóng góp khoa học

  1. Kiến trúc điện toán phân tán chi phí thấp: Thay vì dồn tải toàn bộ xung động cơ bước tần số cao lên hệ điều hành Linux (vốn không phải là Real-Time OS và dễ sinh hiện tượng giật xung Jitter), đề tài tách biệt hoàn toàn tầng thị giác (Raspberry Pi) và tầng chuyển động vi bước (Arduino Pro Mini). Giải pháp này giảm tải CPU của Raspberry Pi xuống $38%$.
  2. Kỹ thuật định vị dựa trên khái niệm Clean Zone động: Thay vì điều khiển robot bám điểm liên tục bằng các phép biến đổi hình học phức tạp, thuật toán phân chia khung hình camera thành các phân vùng logic (Search Zone, Alignment Zone, Clean Zone). Khi tâm vật thể $(c_x, c_y)$ rơi vào Clean Zone, robot tự động chuyển trạng thái hút mà không cần thêm cảm biến tiệm cận phụ trợ.
  3. Tối ưu hóa khả năng chống nhiễu quang học: Kết hợp đồng thời không gian màu HSV và bộ lọc phi tuyến Median Filter kích thước $5 \times 5$, giúp triệt tiêu $98%$ hiện tượng nhiễu muối tiêu (salt-and-pepper noise) phát sinh từ camera trong môi trường thiếu sáng.
Đặc tính kỹ thuật Đồ án đề tài HCMUTE Nghiên cứu xe dò line truyền thống Robot hút bụi thương mại cấp thấp
Cơ chế thu thập dữ liệu Xử lý ảnh 2D không gian thực Dãy LED quang trở hồng ngoại Cảm biến va chạm công tắc hành trình
Tính linh hoạt mục tiêu Bám đối tượng tự do trên mặt phẳng Bắt buộc có đường line cố định Di chuyển ngẫu nhiên trong phòng
Khả năng mở rộng AI Dễ dàng nâng cấp mạng nơ-ron Không thể Giới hạn bởi vi điều khiển cố định
Chi phí phần cứng $\approx 1.800.000\text{ VNĐ}$ $\approx 600.000\text{ VNĐ}$ $\approx 3.500.000 - 5.000.000\text{ VNĐ}$

Ứng dụng thực tế và Hướng dẫn triển khai

Kịch bản ứng dụng thực tiễn

  • Vệ sinh thông minh trong nhà máy sản xuất linh kiện: Tự động phát hiện và nhặt các ốc vít, mẩu dây điện rơi vãi trên hành lang kỹ thuật mà không làm cản trở công nhân.
  • Hỗ trợ khử khuẩn môi trường y tế: Tích hợp đèn UV-C hoặc cơ cấu phun khử khuẩn tại các điểm phát hiện dịch bẩn trên sàn bệnh viện.
  • Mô hình phục vụ đào tạo STEM / Nghiên cứu học thuật: Làm nền tảng tiêu chuẩn cho sinh viên chuyên ngành Cơ điện tử, Tự động hóa tiếp cận các bài toán Robot di động (Mobile Robot) kết hợp thị giác máy tính.

Hướng dẫn cài đặt và cấu hình phần mềm

# 1. Cập nhật hệ thống trên Raspbian Buster / Bullseye
sudo apt-get update && sudo apt-get upgrade -y

# 2. Cài đặt các thư viện phụ trợ cho hình ảnh và video I/O
sudo apt-get install build-essential cmake pkg-config -y
sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng-dev -y
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev -y
sudo apt-get install libxvidcore-dev libx264-dev -y

# 3. Cài đặt thư viện đồ họa GUI và tối ưu hóa toán học
sudo apt-get install libgtk-3-dev libatlas-base-dev gfortran -y

# 4. Cài đặt Python 3, pip và OpenCV
sudo apt-get install python3-dev python3-pip -y
pip3 install numpy
pip3 install opencv-python==3.4.18.65
pip3 install pyserial

# 5. Kích hoạt giao tiếp Camera Module và Serial Port
sudo raspi-config
# Chọn Interfacing Options -> Camera -> Enable -> Yes
# Chọn Interfacing Options -> Serial -> Disable Shell / Enable Hardware -> Yes
sudo reboot

Bảng tra cứu sự cố phần cứng & phần mềm (Troubleshooting Guide)

+------------------------------------------------------------------------------------+
|                         CẨM NANG XỬ LÝ SỰ CỐ HỆ THỐNG                             |
+----------------------------+-----------------------------+-------------------------+
| Hiện tượng lỗi             | Nguyên nhân cốt lõi         | Biện pháp khắc phục     |
+----------------------------+-----------------------------+-------------------------+
| Picamera báo "No MMAL"     | Cáp FPC cắm ngược hoặc lỏng | Đảo chiều cáp dẹt 15-pin|
| Động cơ bước rít, không quay| Vref trên driver A4988 sai  | Chỉnh chiết áp Vref=0.6V|
| Sai lệch màu phân ngưỡng   | Ánh sáng phòng đổi nhiệt độ | Dùng trackbar cân lại HSV|
| Raspberry Pi tự khởi động lại| Sụt áp khi bật quạt hút     | Tách nguồn pin riêng    |
+----------------------------+-----------------------------+-------------------------+

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

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

  • Độ nhạy phân ngưỡng màu sắc: Phương pháp phân ngưỡng HSV tĩnh yêu cầu hiệu chỉnh thông số khi chuyển đổi giữa các phòng có nguồn sáng khác nhau (đèn huỳnh quang vs ánh sáng tự nhiên).
  • Nhận dạng đối tượng đơn lớp: Hệ thống chỉ mới theo dõi một loại rác mục tiêu có màu sắc định trước, chưa phân biệt được giữa rác mềm (giấy, lá) và vật cản tĩnh (chân bàn, thảm).
  • Hạn chế cơ khí: Cơ cấu hút dùng động cơ cánh quạt DC mini chưa đủ lực hút chân không để thu gom các loại rác có khối lượng lớn hơn 50 gram.

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

  • Tích hợp Deep Learning Edge AI: Ứng dụng mô hình mạng nơ-ron tích chập tối ưu nhẹ như MobileNetV2-SSD hoặc YOLOv5-Nano chạy thông qua bộ tăng tốc phần cứng USB Coral Edge TPU hoặc nâng cấp lên Raspberry Pi 4/5 để nhận diện đa chủng loại rác.
  • Bổ sung cảm biến đo sâu (RGB-D): Thay thế Picamera bằng camera stereo hoặc Intel RealSense D435 để thu nhận bản đồ độ sâu (Depth Map), hỗ trợ tính toán khoảng cách thực tế chính xác đến từng milimét.
  • Xây dựng bản đồ phòng SLAM: Kết hợp cảm biến quán tính 6 bậc tự do (IMU MPU6050) và encoder bánh xe để lập quỹ đạo đường đi tối ưu bao phủ toàn bộ diện tích sàn.

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

+-----------------------------------------------------------------------------------+
|                            ĐỐI TƯỢNG HƯỞNG LỢI DỰ ÁN                              |
|                                                                                   |
|  [Sinh viên & Người học] ──> Tiếp cận giáo trình thực hành OpenCV & Robotics      |
|  [Kỹ sư Lập trình]       ──> Tham khảo mô hình Master-Slave đa vi xử lý          |
|  [Doanh nghiệp R&D]      ──> Tối ưu hóa BOM phần cứng cho robot dịch vụ giá rẻ   |
|  [Nhà nghiên cứu]        ──> Dữ liệu thực nghiệm về thị giác máy tính nhúng       |
+-----------------------------------------------------------------------------------+
  • Sinh viên ngành Kỹ thuật Điều khiển, Tự động hóa và Cơ điện tử: Cung cấp tài liệu tham khảo chi tiết từ khâu thiết kế cơ khí, sơ đồ đấu nối vi mạch đến giải thuật lập trình điều khiển động cơ bước và xử lý ảnh trên máy tính nhúng.
  • Kỹ sư nhúng và Robotics: Nắm bắt mô hình kiến trúc phân tầng xử lý (Task-Separated Architecture) giữa Linux SBC và Vi điều khiển thời gian thực (Microcontroller).
  • Các doanh nghiệp sản xuất thiết bị gia dụng: Cơ sở để nghiên cứu dòng sản phẩm robot vệ sinh thế hệ mới có tính năng phát hiện điểm bẩn với mức chi phí sản xuất (BOM cost) thấp.

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

1. Cấu hình phần cứng tối thiểu để hệ thống chạy mượt mà xử lý ảnh là gì?

Hệ thống yêu cầu tối thiểu một máy tính nhúng Raspberry Pi 3 Model B (hoặc Raspberry Pi Zero 2W, Raspberry Pi 4), thẻ nhớ microSD dung lượng tối thiểu 16GB Class 10 (tốc độ đọc/ghi từ $48\text{MB/s}$ trở lên) và Camera tương thích giao tiếp CSI-2 hoặc USB Camera có độ phân giải từ 720p.

2. Tại sao lại lựa chọn không gian màu HSV thay vì RGB để phân đoạn đối tượng?

Trong không gian màu RGB, thông tin về màu sắc và cường độ sáng bị trộn lẫn trong cả 3 kênh (R, G, B). Khi độ sáng môi trường thay đổi, giá trị của cả 3 kênh đều biến thiên, gây khó khăn cho việc đặt ngưỡng. Ngược lại, không gian màu HSV tách biệt hoàn toàn giữa sắc thái màu ($Hue$), độ bão hòa ($Saturation$) và độ sáng ($Value$), cho phép lọc màu ổn định trước sự thay đổi của ánh sáng.

3. Có thể thay thế vi điều khiển Arduino Pro Mini bằng mạch khác không?

Hoàn toàn có thể. Người phát triển có thể thay thế Arduino Pro Mini bằng các dòng vi điều khiển khác như STM32F103C8T6 (Blue Pill), ESP32 hoặc Arduino Nano. Yêu cầu duy nhất là vi điều khiển mới phải hỗ trợ giao tiếp UART để nhận lệnh từ Raspberry Pi và đủ số chân I/O tạo xung điều khiển Driver A4988.

4. Thời lượng hoạt động của robot với pin LiPo 3S 2200mAh là bao lâu?

Với tổng công suất tiêu thụ của Raspberry Pi 3 ($\approx 2.5\text{W}$), 2 động cơ bước ($\approx 6\text{W}$ khi di chuyển liên tục) và động cơ quạt hút ($\approx 4\text{W}$), robot có thể vận hành liên tục trong khoảng thời gian từ $45 - 60\text{ phút}$.

5. Chi phí tự chế tạo mô hình robot này là bao nhiêu?

Tổng kinh phí linh kiện phần cứng dao động trong khoảng $1.600.000 - 1.900.000\text{ VNĐ}$ (tương đương khoảng $$70 - $80\text{ USD}$), thấp hơn $60%$ so với việc trang bị cảm biến quét laser LiDAR chuyên dụng.


Kết luận

Đồ án tốt nghiệp "Thiết kế Robot dọn rác ứng dụng xử lý ảnh" đã giải quyết thành công bài toán tự động hóa quá trình nhận diện và dọn dẹp rác thải trên bề mặt phẳng. Thông qua việc phối hợp nhịp nhàng giữa nền tảng phần mềm mã nguồn mở OpenCV, hệ điều hành Raspbian trên Raspberry Pi 3 Model B cùng vi điều khiển Arduino Pro Mini điều khiển động cơ bước qua driver A4988, mô hình đã chứng minh tính khả thi vượt trội về độ chính xác nhận diện ($>90%$), phản hồi thời gian thực ($15\text{ FPS}$) và tối ưu hóa chi phí sản xuất.

Thành công của đề tài mở ra tiềm năng ứng dụng rộng rãi trong việc thương mại hóa các dòng robot gia dụng thông minh thế hệ mới cũng như làm nền tảng tham khảo học thuật giá trị cho cộng đồng sinh viên, kỹ sư đam mê lĩnh vực Robotics và Thị giác máy tính. Bạn có thể áp dụng ngay kiến trúc này để phát triển các dự án tự hành thông minh theo nhu cầu thực tiễn của mình.