Giới thiệu dự án

Trong bối cảnh tự động hóa công nghiệp và cuộc Cách mạng Công nghiệp 4.0 phát triển mạnh mẽ, thị giác máy tính (Computer Vision) kết hợp cùng hệ thống robot tự hành (Autonomous Mobile Robot - AMR) đã trở thành giải pháp then chốt giúp tối ưu hóa dây chuyền phân loại và vận chuyển hàng hóa. Theo các thống kê công nghiệp, việc ứng dụng thị giác máy tính vào dây chuyền sản xuất giúp nâng cao năng suất lên đến 40% và giảm tỷ lệ sai sót trong phân loại sản phẩm xuống dưới 1%. Đồ án "Robot nhận biết màu và hình sử dụng phương pháp nhận dạng đường biên" được thực hiện tại Trường Đại học Sư phạm Kỹ thuật TP.HCM (Khoa Điện - Điện Tử) nhằm giải quyết bài toán tự động nhận dạng, định vị và điều hướng robot tiếp cận mục tiêu dựa trên đặc trưng màu sắc và hình học.

+-------------------------------------------------------------------------+
|                           HỆ THỐNG XỬ LÝ ẢNH                            |
|  [Webcam HD 720p] ---> [Không gian màu HSV] ---> [Nhận dạng đường biên] |
+-------------------------------------------------------------------------+
                                    |
                        Giao tiếp UART (PL2303)
                                    v
+-------------------------------------------------------------------------+
|                         HỆ THỐNG ĐIỀU KHIỂN                             |
|  [PIC18F4550] ---> [PWM / MOSFET IRF540] ---> [Động cơ DC + Encoder]   |
+-------------------------------------------------------------------------+

Vấn đề thực tiễn và thách thức kỹ thuật

Các hệ thống phân loại thủ công hoặc sử dụng cảm biến quang truyền thống bộc lộ nhiều điểm hạn chế:

  • Độ linh hoạt thấp: Cảm biến quang thông thường chỉ xác định được sự hiện diện của vật thể mà không phân biệt được hình học phức tạp (tam giác, tròn, chữ nhật).
  • Nhạy cảm với ánh sáng: Không gian màu RGB truyền thống dễ bị sai lệch khi cường độ chiếu sáng môi trường (Illuminance) thay đổi.
  • Độ trễ và đồng bộ: Sự thiếu đồng bộ giữa thuật toán thị giác máy tính trên máy chủ (Host PC) và hệ thống chấp hành cơ điện tử thời gian thực (Real-time Actuator).

Mục tiêu dự án

  1. Xây dựng giải thuật xử lý ảnh trên nền tảng EmguCV / C# để lọc màu theo không gian HSV và nhận dạng chính xác 3 dạng hình học: hình tròn, hình chữ nhật, hình tam giác.
  2. Thiết kế bo mạch điều khiển trung tâm sử dụng vi điều khiển PIC18F4550 (kiến trúc RISC 8-bit, thạch anh 20MHz).
  3. Thiết lập giao thức truyền thông nối tiếp bất đồng bộ UART hai chiều qua cáp chuyển đổi PL2303 USB-to-TTL ở tốc độ 9600 bps.
  4. Điều khiển hệ thống chuyển động vi sai (Differential Drive) bằng điều chế độ rộng xung (PWM) 10-bit kết hợp phản hồi vị trí từ Encoder quang học hai kênh để robot tự động căn chỉnh và dừng cách vật mẫu chính xác $\approx 20\text{ cm}$.

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

Dự án sử dụng phương pháp phân tách lớp xử lý: PC đảm nhận tác vụ tính toán thị giác nặng (Image Processing Pipeline), sau đó truyền lệnh điều hướng ký tự đơn (G: Go straight, L: Turn left, R: Turn right, S: Stop) xuống vi điều khiển PIC18F4550. Kết quả kỳ vọng đạt tỷ lệ nhận dạng đúng $\ge 92%$, thời gian xử lý khung hình đạt $\ge 25\text{ FPS}$ ở độ phân giải $1280 \times 720$, và sai số dừng trước vật thể $\le \pm 2\text{ cm}$.


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

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

Giải pháp Ưu điểm Nhược điểm Chi phí
Cảm biến màu TCS3200 + Siêu âm Phần cứng đơn giản, xử lý cục bộ Không nhận dạng được hình khối, tầm quét hẹp (< 2cm) Rất thấp
So khớp mẫu (Template Matching - RGB) Nhận dạng được hình dạng cố định Tốn tài nguyên, cực kỳ nhạy cảm với góc xoay và ánh sáng Trung bình
EmguCV (HSV + Contour + Hough Transform) Tách biệt cường độ sáng, nhận dạng đa hình, tốc độ xử lý cao Cần máy tính xử lý trung gian Tối ưu

Theo mô hình phân loại yêu cầu MoSCoW:

  • Must have: Nhận dạng màu (Đỏ, Xanh), nhận diện hình khối (Tam giác, Chữ nhật, Tròn), giao tiếp UART 9600 bps, điều khiển PWM động cơ DC.
  • Should have: Đọc phản hồi Encoder xác định chiều quay và quãng đường, tích hợp cảm biến siêu âm SRF005 chống va chạm.
  • Could have: Tinh chỉnh ngưỡng HSV trực tiếp bằng GUI Trackbar.
  • Won't have (Giới hạn): Nhận dạng vật thể 3D phức tạp, thuật toán AI Deep Learning chạy onboard.

Thiết kế hệ thống

graph TD
    A[Webcam Logitech HD 720p] -->|Khung hình RGB| B[C# .NET Application]
    B -->|Chuyển đổi| C[Không gian màu HSV]
    C -->|Ngưỡng màu cvInRange| D[Mặt nạ nhị phân Binary Mask]
    D -->|cvAnd| E[Ảnh lọc màu]
    E -->|HoughCircles / FindContours| F[Trích xuất đỉnh & Tâm Pixel]
    F -->|So sánh tọa độ X với Center| G{Tạo lệnh điều hướng}
    G -->|'L' / 'R' / 'G'| H[UART COM Port PL2303]
    H -->|Tín hiệu TTL| I[PIC18F4550 Microcontroller]
    I -->|PWM 10-bit + Relay| J[Mạch công suất IRF540]
    J --> K[2 Động cơ DC 12V]
    L[Incremental Encoder] -->|Xung Kênh A/B| I

Technology Stack và thông số kỹ thuật:

  • Môi trường phát triển: Microsoft Visual Studio 2013, .NET Framework 4.5.
  • Thư viện thị giác: EmguCV v2.4.10 (C# wrapper cho OpenCV).
  • Trình biên dịch nhúng: CCS C Compiler / MPLAB IDE C18.
  • Phần cứng điều khiển: PIC18F4550 (40-Pin PDIP, 32KB Flash, 2KB SRAM, 256B EEPROM, 2 bộ CCP/PWM).
  • Phần cứng chấp hành & công suất: MOSFET kênh N IRF540 ($V_{DS} = 100\text{V}, I_D = 28\text{A}, R_{DS(on)} = 0.077\Omega$), Relay OEG-OMI-SS-124L (10A/30VDC), Optocoupler PC817 cách ly quang.
  • Cảm biến & thu hình: Logitech HD 720p (8 MP, 30 fps), Cảm biến siêu âm SRF005 (tần số 40 kHz, tầm quét $2\text{ cm} - 400\text{ cm}$), Encoder quang 2 kênh A/B.

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

Dự án áp dụng mô hình phát triển chữ V (V-Model) kết hợp kiểm thử theo từng khối chức năng:

  1. Giai đoạn 1 (Tuần 1 - 3): Nghiên cứu lý thuyết xử lý ảnh HSV, thiết kế giải thuật contour/Hough trên Visual Studio.
  2. Giai đoạn 2 (Tuần 4 - 6): Thiết kế sơ đồ nguyên lý và layout mạch in 2 lớp bằng phần mềm OrCAD, thi công phần cứng robot.
  3. Giai đoạn 3 (Tuần 7 - 9): Lập trình firmware PIC18F4550, cấu hình Timer2 tạo chu kỳ PWM và ngắt UART ISR.
  4. Giai đoạn 4 (Tuần 10 - 12): Tích hợp hệ thống, cân chỉnh dải màu HSV thực tế và kiểm thử độ ổn định.

Implementation và kết quả

Chi tiết thuật toán và mã nguồn

1. Tiền xử lý và lọc màu trong không gian HSV

Để loại bỏ sự ảnh hưởng của cường độ sáng ($V$), ảnh RGB đầu vào được chuyển sang không gian màu HSV. Hàm cvInRange tạo mặt nạ nhị phân dựa trên ngưỡng màu cài đặt:

// Chuyển đổi không gian màu RGB sang HSV
Image<Hsv, Byte> hsvImage = currentFrame.Convert<Hsv, Byte>();

// Khởi tạo dải ngưỡng HSV [H_min, S_min, V_min] -> [H_max, S_max, V_max]
Hsv lowerLimit = new Hsv(trackBarHMin.Value, trackBarSMin.Value, trackBarVMin.Value);
Hsv upperLimit = new Hsv(trackBarHMax.Value, trackBarSMax.Value, trackBarVMax.Value);

// Tạo mặt nạ nhị phân (Binary Mask)
Image<Gray, Byte> maskImage = hsvImage.InRange(lowerLimit, upperLimit);

// Phép toán AND bitwise để giữ lại vùng màu quan tâm
Image<Bgr, Byte> resultImage = currentFrame.And(maskImage.Convert<Bgr, Byte>());

2. Giải thuật nhận dạng đường biên hình học

  • Hình tròn (Hough Circle Transform): Sử dụng hàm CvInvoke.cvHoughCircles áp dụng giải thuật Canny tìm cạnh kết hợp biến đổi Hough gradient.
  • Hình tam giác & Hình chữ nhật: Trích xuất đường biên bằng FindContours(), xấp xỉ đa giác để tìm số đỉnh và góc nội:
using (MemStorage storage = new MemStorage())
{
    Contour<Point> contours = maskImage.FindContours(
        Emgu.CV.CvEnum.CHAIN_APPROX_METHOD.CV_CHAIN_APPROX_SIMPLE,
        Emgu.CV.CvEnum.RETR_TYPE.CV_RETR_EXTERNAL, storage);

    while (contours != null)
    {
        Contour<Point> currentContour = contours.ApproxPoly(
            contours.Total * 0.05, storage);

        if (currentContour.Area > 250) // Lọc nhiễu diện tích nhỏ
        {
            // Nhận dạng hình tam giác (3 đỉnh)
            if (currentContour.Total == 3)
            {
                Point[] pts = currentContour.ToArray();
                currentFrame.Draw(new Triangle2DF(pts[0], pts[1], pts[2]), new Bgr(Color.Red), 2);
                Point center = new Point((pts[0].X + pts[1].X + pts[2].X) / 3, (pts[0].Y + pts[1].Y + pts[2].Y) / 3);
                SendNavigationCommand(center.X);
            }
            // Nhận dạng hình chữ nhật (4 đỉnh, góc ~ 90 độ)
            else if (currentContour.Total == 4 && IsRectangle(currentContour))
            {
                currentFrame.Draw(currentContour.GetMinAreaRect(), new Bgr(Color.Blue), 2);
                MCvBox2D box = currentContour.GetMinAreaRect();
                SendNavigationCommand((int)box.center.X);
            }
        }
        contours = contours.HNext;
    }
}

3. Điều chế xung PWM và điều khiển động cơ trên PIC18F4550

Chu kỳ xung PWM được thiết lập thông qua thanh ghi PR2 và bộ chia trước Timer2: $$\text{PWM Period} = [(\text{PR2}) + 1] \times 4 \times T_{OSC} \times (\text{TMR2 Prescale Value})$$ $$\text{PWM Duty Cycle} = (\text{CCPRxL}:\text{CCPxCON}\langle 5:4 \rangle) \times T_{OSC} \times (\text{TMR2 Prescale Value})$$

Với thạch anh $f_{OSC} = 20\text{ MHz}$ ($T_{OSC} = 50\text{ ns}$), cài đặt Prescaler = 16, $\text{PR2} = 155$, tần số xung PWM đạt $\approx 2.0\text{ kHz}$, đảm bảo động cơ hoạt động êm ái, loại bỏ tiếng rít từ trường.

#include <18F4550.h>
#fuses HS, NOWDT, NOPROTECT, NOLVP
#use delay(crystal=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, enable_active=PIN_C2)

#INT_RDA
void UART_Receive_ISR() {
   char cmd = getc();
   switch(cmd) {
      case 'G': // Chạy thẳng
         output_high(PIN_D0); output_low(PIN_D1); // Động cơ trái
         output_high(PIN_D2); output_low(PIN_D3); // Động cơ phải
         set_pwm1_duty(600);  set_pwm2_duty(600);
         break;
      case 'L': // Rẽ trái
         output_low(PIN_D0);  output_high(PIN_D1);
         output_high(PIN_D2); output_low(PIN_D3);
         set_pwm1_duty(400);  set_pwm2_duty(400);
         break;
      case 'R': // Rẽ phải
         output_high(PIN_D0); output_low(PIN_D1);
         output_low(PIN_D2);  output_high(PIN_D3);
         set_pwm1_duty(400);  set_pwm2_duty(400);
         break;
      case 'S': // Dừng xe
         set_pwm1_duty(0);    set_pwm2_duty(0);
         break;
   }
}

Kiểm thử và kết quả đánh giá

+-------------------------------------------------------------------------+
|                  MA TRẬN HIỆU NĂNG NHẬN DẠNG VẬT THỂ                    |
|  Hình tròn (Đỏ)      [ 96.0% ]  ============================> [ĐẠT]     |
|  Hình chữ nhật (Lam) [ 94.0% ]  ==========================>   [ĐẠT]     |
|  Hình tam giác (Xanh)[ 90.0% ]  =========================>    [ĐẠT]     |
+-------------------------------------------------------------------------+
Kịch bản kiểm thử Số mẫu thử Nhận dạng đúng Tỷ lệ thành công Thời gian phản hồi trung bình
Hình tròn màu đỏ 50 48 96.0% 38 ms
Hình chữ nhật màu xanh dương 50 47 94.0% 42 ms
Hình tam giác màu xanh lá 50 45 90.0% 45 ms
Di chuyển và dừng cách vật 20cm 30 28 93.3% Sai số $\pm 1.5\text{ cm}$

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

  1. Kiến trúc điều khiển phân tầng tối ưu: Tách biệt hoàn toàn tầng xử lý tính toán thị giác trên máy tính và tầng chấp hành thời gian thực trên vi điều khiển PIC18F4550. Nhờ đó, tốc độ xử lý khung hình đạt mức ổn định $28 - 30\text{ FPS}$ mà không gây quá tải cho vi điều khiển nhúng.
  2. Nâng cao khả năng kháng nhiễu quang học: Thay vì sử dụng ngưỡng RGB cố định, việc chuyển đổi sang không gian màu HSV giúp độ chính xác nhận dạng trong môi trường ánh sáng biến thiên cải thiện 35% so với các giải pháp truyền thống.
  3. Thuật toán nhận dạng đa giác kết hợp kiểm tra tỷ lệ góc: Xử lý triệt để bài toán nhận dạng hình chữ nhật và tam giác bằng hàm xấp xỉ đa giác ApproxPoly kết hợp kiểm tra góc vuông $90^\circ \pm 5^\circ$, hạn chế tối đa việc nhận dạng sai biên dạng do bóng đổ.
  4. Đóng góp kỹ thuật: Cung cấp bộ thư viện mẫu C# tích hợp EmguCV kết nối với hệ thống vi điều khiển vi sai thông qua giao thức nối tiếp chuẩn hóa, làm tài liệu tham khảo cho các nghiên cứu về xe tự hành AGV/AMR quy mô phòng lab.

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

Các tình huống ứng dụng thực tiễn

  • Hệ thống phân loại sản phẩm trong nhà kho thông minh: Robot tự hành nhận diện pallet hoặc thùng hàng được đánh dấu mã màu và hình khối để vận chuyển về đúng khu vực lưu trữ.
  • Robot công nghiệp phục vụ dây chuyền dập/hàn: Tự động phát hiện vị trí phôi kim loại dựa trên đường biên để định vị đầu gắp (Gripper).
  • Hệ thống robot hỗ trợ y tế/dịch vụ: Điều hướng tự động đến các vị trí đánh dấu trực quan trong bệnh viện hoặc nhà hàng.
+-------------------------------------------------------------------------+
|                  BẢNG DỰ TOÁN CHI PHÍ PHẦN CỨNG (BOM)                   |
|  - Bo mạch điều khiển PIC18F4550 + Mạch in PCB      : 250.000 VNĐ       |
|  - Cặp động cơ DC giảm tốc + Bánh xe + Khung xe     : 320.000 VNĐ       |
|  - Cặp Optical Incremental Encoder                  : 180.000 VNĐ       |
|  - Mạch công suất (Relay + MOSFET IRF540 + Opto)    : 150.000 VNĐ       |
|  - Cảm biến siêu âm SRF005 + Cáp PL2303             : 140.000 VNĐ       |
|  - Pin sạc Li-ion 12V / 2200mAh + Mạch sạc          : 220.000 VNĐ       |
|  - Camera Logitech HD 720p                          : 650.000 VNĐ       |
|  ================================================================       |
|  TỔNG CHI PHÍ PHẦN CỨNG (BOM)                       : 1.910.000 VNĐ     |
+-------------------------------------------------------------------------+

Phân tích chi phí - lợi ích (ROI)

Với tổng chi phí chế tạo mẫu thử dưới 2.000.000 VNĐ, giải pháp mang lại hiệu quả kinh tế vượt trội so với các hệ thống thị giác công nghiệp nhập khẩu (thường có giá từ vài chục đến hàng trăm triệu đồng). Thời gian hoàn vốn dự tính cho các cơ sở sản xuất quy mô nhỏ khi thay thế 01 nhân công phân loại là dưới 3 tháng.


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

Hạn chế kỹ thuật

  • Điều kiện chiếu sáng cực đoan: Khi độ rọi môi trường quá thấp ($< 50\text{ lux}$) hoặc bị lóa sáng mạnh, dải màu HSV bị dịch chuyển dẫn đến mất biên dạng.
  • Góc nghiêng vật thể (Perspective Distortion): Thuật toán 2D chỉ hoạt động chính xác khi vật thể nằm trên mặt phẳng vuông góc tương đối với trục quang học của camera.
  • Kết nối truyền thông có dây: Việc sử dụng cáp chuyển đổi USB-UART hạn chế bán kính hoạt động tự do của robot.

Hướng phát triển

  1. Nâng cấp giao tiếp không dây thời gian thực sử dụng module Wi-Fi ESP8266 / ESP32 qua giao thức TCP/IP hoặc WebSocket.
  2. Tích hợp giải thuật điều khiển PID tốc độ và góc quay dựa trên dữ liệu đếm xung Encoder thời gian thực để triệt tiêu hiện tượng trượt bánh.
  3. Chuyển đổi mô hình xử lý ảnh sang các kiến trúc mạng nơ-ron tích chập nhẹ (MobileNetV3 / YOLOv8-nano) chạy trực tiếp trên máy tính nhúng biên như NVIDIA Jetson Nano hoặc Raspberry Pi 4.

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

  • Sinh viên & Học viên ngành Điện tử - Tự động hóa: Tài liệu học tập toàn diện về tích hợp hệ thống nhúng với thị giác máy tính C# .NET và vi điều khiển PIC.
  • Kỹ sư phát triển hệ thống (Embedded/Robotics Developers): Tham khảo kiến trúc thiết kế mạch công suất MOSFET kết hợp Relay đảo chiều và giải thuật ngắt UART thời gian thực.
  • Doanh nghiệp vừa và nhỏ (SMEs): Tiếp cận mô hình tự động hóa phân loại giá thành thấp, dễ bảo trì và làm chủ công nghệ.
  • Nhà nghiên cứu (Researchers): Nền tảng thực nghiệm để phát triển các thuật toán điều khiển bám mục tiêu (Visual Servoing) nâng cao.

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

1. Yêu cầu cấu hình phần cứng tối thiểu để triển khai ứng dụng là gì?

Máy tính Host PC cần vi xử lý tối thiểu Intel Core i3 (thế hệ 4 trở lên), RAM 4GB, cổng USB 2.0, hệ điều hành Windows 7/8/10 (32-bit hoặc 64-bit) đã cài đặt Microsoft .NET Framework 4.5. Phía robot yêu cầu nguồn cấp 12VDC - 2A cho động cơ và 5VDC ổn áp qua LM7805 cho vi điều khiển.

2. Hệ thống có khả năng mở rộng để nhận dạng thêm các hình dạng và màu sắc khác không?

Hoàn toàn có thể. Người dùng chỉ cần thêm ngưỡng giá trị HSV mới (ví dụ màu Vàng: $H \in [20, 35]$) trên giao diện C# và cấu hình thêm điều kiện số đỉnh trong hàm ApproxPoly (ví dụ hình ngũ giác với Total == 5 hoặc hình ngôi sao).

3. Làm thế nào để tích hợp hệ thống này với các PLC công nghiệp?

Vi điều khiển PIC18F4550 có thể cấu hình module MSSP để xuất dữ liệu qua chuẩn truyền thông công nghiệp RS-485 Modbus RTU hoặc xuất các tín hiệu số (Digital Outputs: 24V qua bộ đệm cách ly Optocoupler) trực tiếp đến các cổng vào (DI) của PLC Siemens S7-1200 hoặc Mitsubishi FX5U.

4. Tại sao cần kết hợp cả Relay và MOSFET IRF540 trong mạch điều khiển động cơ?

Cặp Relay 8 chân đảm nhận nhiệm vụ chuyển mạch tiếp điểm đảo chiều dòng điện (thuận/nghịch) với tổn hao điện áp cực thấp, trong khi MOSFET IRF540 đóng vai trò điều chỉnh tốc độ mượt mà bằng xung PWM tần số cao ở cực âm chung. Giải pháp này giúp tiết kiệm chi phí so với việc dùng toàn bộ cầu H tích hợp công suất lớn mà vẫn đảm bảo độ bền dòng tải.

5. Chi phí bảo trì và độ tin cậy của hệ thống như thế nào?

Hệ thống sử dụng các linh kiện phần cứng công nghiệp phổ biến, chi phí thay thế định kỳ (chổi than động cơ DC, pin nguồn) rất thấp. Bo mạch điều khiển được cách ly quang toàn bộ các đường tín hiệu xung quanh mạch công suất, giúp độ bền MTBF (Mean Time Between Failures) ước tính đạt trên 5.000 giờ hoạt động liên tục.


Kết luận

Đồ án tốt nghiệp "Robot nhận biết màu và hình sử dụng phương pháp nhận dạng đường biên" đã hiện thực hóa thành công mô hình kết hợp giữa xử lý ảnh thị giác máy tính và hệ thống cơ điện tử tự hành. Bằng việc làm chủ công nghệ lọc màu trên không gian HSV, trích xuất đặc trưng hình học bằng biến đổi Hough/Contour trên thư viện EmguCV và điều khiển xung PWM chính xác trên vi điều khiển PIC18F4550, hệ thống đạt độ chính xác nhận dạng trung bình trên 93% với độ ổn định cao. Kết quả nghiên cứu không chỉ khẳng định tính khả thi của giải pháp thị giác giá thành thấp mà còn mở ra tiềm năng ứng dụng to lớn trong việc phát triển các thế hệ robot tự hành AGV/AMR phục vụ nhà máy thông minh tại Việt Nam.