Giới thiệu dự án

Sự phát triển mạnh mẽ của cuộc Cách mạng Công nghiệp 4.0 và làn sóng tự động hóa trong logistics đã thúc đẩy nhu cầu ứng dụng robot di động tự hành (Autonomous Mobile Robot - AMR). Theo các báo cáo phân tích thị trường công nghiệp, thị trường robot di động toàn cầu đạt tốc độ tăng trưởng kép hàng năm (CAGR) trên 16.5%, trong đó nhu cầu tối ưu hóa vận chuyển nhà kho và giám sát thông minh chiếm tỷ trọng lớn. Tuy nhiên, các dòng xe tự hành truyền thống (AGV - Automated Guided Vehicle) phụ thuộc vào đường ray từ hoặc vạch kẻ (line-following) bộc lộ sự kém linh hoạt khi thay đổi layout vận hành.

+-----------------------------------------------------------------------+
|                 HỆ THỐNG ROBOT DI ĐỘNG VI SAI TÍCH HỢP                 |
+-----------------------------------------------------------------------+
|  [Thu thập Dữ liệu]      [Xử lý Trung tâm & Điều hướng]   [Thực thi]  |
|  - 2D LiDAR (Laser scan) -> Hector SLAM / Dijkstra / DWA   -> STM32   |
|  - Intel RealSense D435i -> YOLOv8 Detection & 3D Depth    -> Driver  |
|  - Encoder / IMU         -> Odometry Estimation Node       -> DC Motor|
+-----------------------------------------------------------------------+

Đồ án tốt nghiệp ngành Công nghệ Kỹ thuật Cơ điện tử (Trường Cơ khí - Ô tô, Đại học Công nghiệp Hà Nội) tập trung giải quyết bài toán: Nghiên cứu, thiết kế và chế tạo robot di động dạng vi sai tích hợp camera 3D xử lý ảnh. Hệ thống khắc phục tình trạng thiếu nhận thức ngữ cảnh môi trường (semantic awareness) của các robot chỉ dùng cảm biến khoảng cách đơn thuần bằng cách kết hợp cảm biến 2D LiDAR và Camera 3D RealSense.

Các mục tiêu cụ thể của dự án:

  1. Thiết kế và chế tạo hoàn chỉnh kết cấu cơ khí robot 3 bánh (2 bánh chủ động dẫn động vi sai phía sau, 1 bánh caster tự lựa phía trước).
  2. Xây dựng mạch điều khiển nhúng thời gian thực sử dụng vi điều khiển ARM Cortex-M4 STM32F407VET6 kết hợp máy tính nhúng Raspberry Pi 4.
  3. Ứng dụng hệ điều hành Robot Operating System (ROS Noetic) để ánh xạ môi trường qua thuật toán Hector SLAM và điều hướng thông minh bằng Dijkstra kết hợp Dynamic Window Approach (DWA).
  4. Tích hợp thị giác máy tính với mô hình học sâu YOLOv8 kết hợp trích xuất bản đồ độ sâu từ Camera Intel RealSense D435i nhằm nhận dạng vật thể và đo khoảng cách chính xác theo thời gian thực.

Dự án đạt được các chỉ số vận hành mục tiêu: tải trọng vận chuyển 10 kg, vận tốc di chuyển 0.5 m/s, thời gian phản hồi nhận dạng vật thể dưới 65 ms, sai số định vị bản đồ dưới 2.5 cm trong không gian trong nhà kiểm soát. Phạm vi áp dụng giới hạn trong môi trường mặt sàn phẳng công nghiệp hoặc dân dụng, không hỗ trợ leo dốc vượt quá 10 độ hoặc địa hình gồ ghề ngoài trời.


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

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

Tiêu chí AGV bám vạch từ / QR code Robot AMR LiDAR 2D đơn thuần Robot Vi sai tích hợp LiDAR + Camera 3D (Đề tài)
Độ linh hoạt layout Kém (phải sửa hạ tầng sàn) Cao (dựng bản đồ số SLAM) Rất cao (SLAM + hiểu ngữ cảnh môi trường)
Nhận diện vật thể Không có (chỉ né chướng ngại) Cảm biến mặt phẳng đơn, điểm mù cao Nhận dạng phân loại (YOLOv8) + đo khoảng cách 3D
Chi phí đầu tư Trung bình Khá cao Tối ưu hóa (linh kiện mở, mã nguồn mở)
Khả năng thích ứng Cố định trên quỹ đạo sẵn Né vật cản 2D tại độ cao quét Né vật cản tĩnh, động và vật cản treo/thấp

Yêu cầu người dùng được phân loại theo mô hình MoSCoW:

  • Must-have: Khả năng tự xây dựng bản đồ 2D (Hector SLAM); điều hướng tự hành không va chạm (Dijkstra + DWA); nhận diện đối tượng và tính khoảng cách 3D.
  • Should-have: Giao diện trực quan hóa dữ liệu bản đồ và camera trên RViz; truyền thông tin cậy giữa STM32 và ROS qua giao thức Serial.
  • Could-have: Lưu trữ lịch sử hành trình, cảnh báo sớm đối tượng di động bằng âm thanh/visual GUI.
  • Won't-have: Khả năng leo cầu thang hoặc di chuyển trên địa hình phi tiêu chuẩn.

Thiết kế hệ thống

Kiến trúc phần cứng và phần mềm của robot phân tầng theo mô hình Master-Slave:

  • Tầng xử lý cấp cao (High-level Controller): Máy tính nhúng Raspberry Pi 4 (ARM Cortex-A72 @ 1.5GHz, 4GB RAM) chạy Ubuntu 20.04 LTS và ROS Noetic Ninjemys. Phụ trách chạy Hector SLAM, Global/Local Navigation Stack, và Node xử lý ảnh YOLOv8.
  • Tầng điều khiển cấp thấp (Low-level Controller): Vi điều khiển STM32F407VET6 (ARM Cortex-M4 32-bit @ 168MHz). Phụ trách đọc Encoder 2 kênh (Quadrature Encoder Interface), đọc La bàn số/IMU, tính toán giải thuật điều khiển PID vận tốc vòng kín và xuất xung PWM điều khiển Driver Smart PID cho động cơ DC.
  • Tầng cảm biến & Chấp hành:
    • Cảm biến 2D LiDAR quét 360 độ (tần số lấy mẫu 10Hz, tầm đo 0.15m – 12m).
    • Cảm biến chiều sâu Intel® RealSense™ Depth Camera D435i (Stereo Vision kết hợp cảm biến hồng ngoại chủ động).
    • 2 Động cơ DC Servo giảm tốc kèm Encoder quang học độ phân giải cao.
graph TD
    subgraph Master_RaspberryPi4 [Raspberry Pi 4 - ROS Noetic]
        A[LiDAR 2D Node] -->|/scan| D[Hector SLAM Node]
        D -->|/map| E[Move Base Navigation]
        B[Intel RealSense D435i] -->|/camera/depth| F[YOLOv8 + Depth Estimator]
        F -->|/detected_objects| E
        E -->|/cmd_vel| G[Serial Bridge Node]
    end
    
    subgraph Slave_STM32 [STM32F407VET6]
        G <-->|UART / Serial Packet| H[Main Firmware Loop]
        H -->|PID Control + PWM| I[Driver Smart PID]
        I --> J[DC Gear Motors]
        J -->|Feedback| K[Optical Encoders]
        K -->|Pulse Count| H
        L[Digital Compass / IMU] -->|I2C| H
    end

Thiết kế giao tiếp ROS Topic & Service:

  • /scan (sensor_msgs/LaserScan): Cung cấp mảng giá trị khoảng cách quét 2D.
  • /cmd_vel (geometry_msgs/Twist): Chứa vận tốc dài tuyến tính $v_x$ và vận tốc góc quay $\omega_z$.
  • /odom (nav_msgs/Odometry): Dữ liệu tọa độ $x, y, \theta$ ước tính từ tích phân encoder và IMU.
  • /camera/color/image_raw & /camera/aligned_depth_to_color/image_raw: Luồng dữ liệu RGB và ma trận độ sâu (Depth Frame).

Phương pháp luậ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ử xoay vòng:

  1. Giai đoạn 1 (Tuần 1 - 3): Tính toán động học, động lực học Lagrange, mô phỏng cơ khí trên Autodesk Inventor và Siemens NX.
  2. Giai đoạn 2 (Tuần 4 - 7): Gia công khung vỏ hợp kim nhôm, tiện bánh xe, thi công mạch điều khiển STM32 và tích hợp nguồn Pin Li-ion 12V/24V.
  3. Giai đoạn 3 (Tuần 8 - 11): Phát triển firmware nhúng (PID motor, giao thức truyền thông gói tin UART), thiết lập ROS workspace, cấu hình Hector SLAM và Navigation Stack.
  4. Giai đoạn 4 (Tuần 12 - 14): Tích hợp mô hình YOLOv8n, hiệu chỉnh căn chỉnh trục camera (extrinsic calibration) và tính toán tọa độ vật thể theo ma trận chiều sâu.
  5. Giai đoạn 5 (Tuần 15 - 16): Thử nghiệm thực địa, đo đạc sai số, đánh giá rủi ro trượt bánh và hoàn thiện tài liệu kỹ thuật.

Implementation và kết quả

Quá trình phát triển và thuật toán cốt lõi

1. Mô hình Động học vi sai (Kinematics)

Xét bán kính bánh xe $R$, khoảng cách giữa hai bánh xe dẫn động $2L$. Vận tốc dài của robot $V_A$ và vận tốc góc $\omega = \dot{\theta}$ được xác định từ tốc độ quay của bánh trái $\dot{\varphi}_l$ và bánh phải $\dot{\varphi}_r$:

$$\begin{bmatrix} \dot{x}_I \ \dot{y}_I \ \dot{\theta} \end{bmatrix} = \begin{bmatrix} \frac{R}{2}\cos\theta & \frac{R}{2}\cos\theta \ \frac{R}{2}\sin\theta & \frac{R}{2}\sin\theta \ -\frac{R}{2L} & \frac{R}{2L} \end{bmatrix} \begin{bmatrix} \dot{\varphi}_l \ \dot{\varphi}_r \end{bmatrix}$$

Phương trình động học nghịch giúp bộ điều khiển tính toán tốc độ quay từng bánh từ lệnh điều khiển $\begin{bmatrix} V_A & \dot{\theta} \end{bmatrix}^T$:

$$\dot{\varphi}_r = \frac{V_A + L\dot{\theta}}{R}, \quad \dot{\varphi}_l = \frac{V_A - L\dot{\theta}}{R}$$

2. Thuật toán Dynamic Window Approach (DWA) cho điều hướng cục bộ

Không gian vận tốc khả dĩ $V_s$ bị giới hạn bởi khả năng gia tốc của động cơ trong cửa sổ thời gian $\Delta t$:

$$V_d = {(v, \omega) \mid v \in [v_c - \dot{v}{max}\Delta t, v_c + \dot{v}{max}\Delta t] \cap [v_{min}, v_{max}], \omega \in [\omega_c - \dot{\omega}{max}\Delta t, \omega_c + \dot{\omega}{max}\Delta t] \cap [\omega_{min}, \omega_{max}]}$$

Hàm mục tiêu đánh giá quỹ đạo tối ưu:

$$G(v, \omega) = \alpha \cdot \text{heading}(v, \omega) + \beta \cdot \text{dist}(v, \omega) + \gamma \cdot \text{velocity}(v, \omega)$$

3. Nhận dạng vật thể và trích xuất khoảng cách 3D

Mô hình YOLOv8n được tối ưu hóa để chạy trên nền tảng CPU/GPU nhúng. Sau khi xác định Bounding Box $[u_{min}, v_{min}, u_{max}, v_{max}]$, tọa độ tâm $(u_c, v_c)$ được tính để truy xuất độ sâu từ ma trận chiều sâu:

import rospy
import pyrealsense2 as rs
import numpy as np
from ultralytics import YOLO
from sensor_msgs.msg import Image
from cv_bridge import CvBridge

class ObjectDistanceDetector:
    def __init__(self):
        self.model = YOLO('yolov8n.pt') # Khởi tạo mạng YOLOv8 Nano
        self.bridge = CvBridge()
        self.depth_image = None
        self.sub_rgb = rospy.Subscriber("/camera/color/image_raw", Image, self.rgb_callback)
        self.sub_depth = rospy.Subscriber("/camera/aligned_depth_to_color/image_raw", Image, self.depth_callback)

    def depth_callback(self, data):
        # Trích xuất ma trận độ sâu 16-bit (milimet)
        self.depth_image = self.bridge.imgmsg_to_cv2(data, desired_encoding="passthrough")

    def rgb_callback(self, data):
        if self.depth_image is None:
            return
        cv_image = self.bridge.imgmsg_to_cv2(data, desired_encoding="bgr8")
        results = self.model(cv_image, verbose=False)
        
        for r in results:
            boxes = r.boxes
            for box in boxes:
                x1, y1, x2, y2 = map(int, box.xyxy[0])
                cls_id = int(box.cls[0])
                conf = float(box.conf[0])
                
                # Tính toán tâm đối tượng (u_c, v_c)
                u_c, v_c = int((x1 + x2) / 2), int((y1 + y2) / 2)
                
                # Lấy khoảng cách độ sâu Z (chống nhiễu bằng vùng trung vị 5x5)
                depth_roi = self.depth_image[max(0, v_c-2):min(self.depth_image.shape[0], v_c+3),
                                             max(0, u_c-2):min(self.depth_image.shape[1], u_c+3)]
                valid_depths = depth_roi[depth_roi > 0]
                if len(valid_depths) > 0:
                    distance_m = np.median(valid_depths) / 1000.0
                    rospy.loginfo(f"Detected {self.model.names[cls_id]} ({conf:.2f}) at distance: {distance_m:.2f}m")

Thử nghiệm và đánh giá kết quả

Hệ thống được đưa vào kiểm thử thực tế trong môi trường phòng thí nghiệm diện tích $80\text{ m}^2$ với các chướng ngại vật tĩnh (bàn ghế, vách ngăn) và chướng ngại vật động (người di chuyển).

+-------------------------------------------------------------------------+
|                  KẾT QUẢ THỰC NGHIỆM VẬN HÀNH HỆ THỐNG                  |
+-------------------------------------------------------------------------+
|  Mục tiêu kiểm thử         | Giá trị thiết kế | Kết quả đạt được (Thực tế)|
+----------------------------+------------------+-------------------------+
|  Tốc độ xử lý YOLOv8       | >= 15 FPS        | 18.5 FPS (NCNN/TensorRT)|
|  Độ trễ phản hồi tránh vật | < 100 ms         | 72 ms                   |
|  Sai số đo khoảng cách 3D  | < 5.0 %          | 2.1 % trong dải 0.5-3.5m|
|  Sai số khép góc SLAM Loop | < 3.0 deg        | 1.4 deg                 |
|  Độ ổn định bám quỹ đạo DWA| Độ lệch < 5 cm   | Độ lệch cực đại 3.2 cm  |
+-------------------------------------------------------------------------+
  1. Hiệu năng thuật toán SLAM và Navigation: Bản đồ 2D dựng bằng Hector SLAM có độ sắc nét cao, không bị trôi điểm (drift) nhờ tần số quét cao của LiDAR và thuật toán scan-matching dựa trên phép lặp Gauss-Newton. Robot tự tìm đường bằng Dijkstra và linh hoạt đổi hướng né người đi ngang nhờ thuật toán DWA với thời gian trễ dưới 75 ms.
  2. Độ chính xác nhận diện và đo khoảng cách: YOLOv8n đạt độ chính xác trung bình mAP@0.5 là 89.4% trên tập các đối tượng thông dụng trong nhà. Độ sâu đo được từ cụm RealSense D435i cho sai số trung bình chỉ 2.1 cm ở cự ly 1.5 mét.

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

  • Hợp nhất dữ liệu cảm biến đa phương thức (Multi-modal Sensor Fusion): Khắc phục nhược điểm "mù ngữ cảnh" của LiDAR 2D thông thường. Robot không chỉ biết có vật cản phía trước mà còn phân loại được đó là người, kiện hàng hay xe nâng, từ đó đưa ra chiến lược ứng xử phù hợp.
  • Tối ưu hóa kiến trúc nhúng phân tán: Sử dụng STM32 chuyên trách điều khiển phần cứng cấp thấp đảm bảo tính tiền định thời gian thực (real-time determinism), giúp máy tính nhúng tập trung toàn bộ tài nguyên cho thị giác máy tính và xử lý thuật toán SLAM.
  • Tăng hiệu suất tránh vật cản động: So với hệ thống AGV truyền thống dừng khẩn cấp khi gặp vật cản, giải pháp kết hợp Dijkstra và DWA giúp giảm 42% thời gian chết nhờ khả năng tính toán quỹ đạo vòng tránh mượt mà ngay khi vật cản xuất hiện.

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

  • Nhà kho thông minh và Trung tâm Logistics (Intralogistics): Robot vận chuyển linh kiện giữa các chuyền sản xuất hoặc các pallet hàng nhỏ trong nhà kho với khả năng tự điều hướng không cần dán line định vị.
  • Robot phục vụ và khử khuẩn y tế: Tích hợp module mang khay đồ ăn/thuốc hoặc đèn cực tím UV-C phục vụ trong khu vực cách ly, bệnh viện, nhà hàng.
  • Tuần tra giám sát an ninh: Tận dụng camera 3D và YOLOv8 để tuần tra tự động, phát hiện người xâm nhập trái phép trong các tòa nhà, xưởng sản xuất vào ban đêm.

Yêu cầu triển khai: Bề mặt sàn bằng phẳng với hệ số ma sát $\mu \ge 0.4$, mạng Wi-Fi nội bộ băng tần 5GHz phục vụ truyền phát dữ liệu giám sát lên máy chủ trung tâm.


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

  • Hạn chế kỹ thuật: Hệ thống vi sai 2 bánh chủ động nhạy cảm với hiện tượng trượt bánh khi di chuyển trên sàn trơn hoặc có dầu mỡ, dẫn đến sai lệch tích lũy của Odometry. Camera RealSense D435i bị suy giảm chất lượng dữ liệu chiều sâu dưới ánh sáng mặt trời cường độ cao ngoài trời.
  • Hướng phát triển:
    1. Tích hợp bộ lọc Kalman mở rộng (Extended Kalman Filter - EKF) để hợp nhất dữ liệu từ IMU 9 bậc tự do, Encoder và Visual Odometry.
    2. Nâng cấp lên thuật toán 3D SLAM (như RTAB-Map hoặc Cartographer 3D) tận dụng tối đa Point Cloud từ camera chiều sâu.
    3. Bổ sung trạm sạc tự động (Auto-docking station) sử dụng bộ phát hồng ngoại kết hợp định vị mã ArUco.

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

  • Sinh viên ngành Cơ điện tử / Tự động hóa / CNTT: Nắm vững tài liệu mẫu chuẩn mực về tích hợp hệ thống nhúng STM32, hệ điều hành ROS và AI thị giác máy tính.
  • Kỹ sư R&D Robot: Cung cấp mã nguồn tham khảo, sơ đồ khối phần cứng và phương pháp tính toán động học vi sai đã được kiểm chứng bằng thực nghiệm.
  • Doanh nghiệp vừa và nhỏ (SMEs): Mô hình nghiên cứu khả thi với chi phí vật tư phần cứng tối ưu, mở ra cơ hội nội địa hóa các dòng robot tự hành AMR cho nhà xưởng tại Việt Nam.

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

1. Cấu hình phần cứng tối thiểu để triển khai hệ thống là gì?

Hệ thống yêu cầu tối thiểu một mạch vi điều khiển 32-bit (STM32F4/ESP32) để điều khiển động cơ PID, một máy tính nhúng (Raspberry Pi 4 4GB hoặc NVIDIA Jetson Nano), một cảm biến LiDAR 2D và Camera RealSense D435i/D415.

2. Tại sao lại chọn thuật toán Hector SLAM thay vì Gmapping?

Hector SLAM không bắt buộc phải có dữ liệu Odometry chính xác từ bánh xe để xây dựng bản đồ mà dựa trực tiếp vào đối sánh tia laser (scan matching) ở tốc độ cao, giảm thiểu tác động của hiện tượng trượt bánh xe đối với việc dựng bản đồ ban đầu.

3. Hệ thống xử lý thế nào khi đối tượng chuyển động cắt ngang đột ngột?

Cảm biến LiDAR và Camera 3D quét liên tục với chu kỳ < 100 ms. Cửa sổ động DWA cập nhật không gian vận tốc khả dĩ ngay trong chu kỳ điều khiển kế tiếp để lập tức giảm tốc hoặc bẻ lái theo quỹ đạo né tránh an toàn.

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

Chi phí hoàn thiện nguyên mẫu dao động từ 15 đến 25 triệu VNĐ, thấp hơn từ 60-70% so với việc nhập khẩu các bộ kit AMR nghiên cứu tương đương từ nước ngoài.

5. Robot có thể hoạt động liên tục trong bao lâu?

Sử dụng khối pin Lithium-ion 12V - 10Ah, robot có khả năng hoạt động liên tục từ 3.5 đến 4.5 giờ ở chế độ tải định mức và vận tốc tiêu chuẩn 0.3 m/s.


Kết luận

Đề tài "Nghiên cứu, thiết kế và chế tạo robot di động dạng vi sai tích hợp camera 3D xử lý ảnh" đã thực hiện trọn vẹn từ khâu mô hình hóa lý thuyết động học, động lực học đến chế tạo cơ khí chính xác và phát triển hệ thống điều khiển nhúng phân tầng. Việc kết hợp thành công công nghệ quét bản đồ Hector SLAM trên ROS với mô hình học sâu YOLOv8 và Camera chiều sâu Intel RealSense D435i mang lại giải pháp robot di động tự hành thông minh, có khả năng nhận biết ngữ cảnh sâu sắc và điều hướng an toàn trong môi trường thực tế. Đây là nền tảng kỹ thuật vững chắc để tiếp tục mở rộng quy mô phát triển thành các sản phẩm thương mại phục vụ logistics và sản xuất tự động.