Giới thiệu dự án

Bối cảnh và thực trạng ngành

Sự bùng nổ của Công nghiệp 4.0 và làn sóng tự động hóa logistics đã thúc đẩy thị trường Robot Di động Tự hành (Autonomous Mobile Robots - AMR) và Xe tự hành trong nhà (Automated Guided Vehicles - AGV) tăng trưởng vượt bậc với tốc độ tăng trưởng kép hàng năm (CAGR) đạt trên 18.5%. Trong môi trường khép kín (indoor) như nhà xưởng thông minh, kho bãi kho vận, bệnh viện và tòa nhà thương mại, hệ thống định vị vệ tinh toàn cầu (GNSS/GPS) hoàn toàn bị vô hiệu hóa do hiện tượng suy hao và phản xạ tín hiệu đa đường (multipath fading).

Thực trạng này đặt ra yêu cầu cấp thiết về các giải pháp tự định vị và tái tạo không gian môi trường cục bộ mà không phụ thuộc vào hạ tầng dẫn đường cố định (như băng từ, mã QR sàn hay beacon ngoại vi).

graph TD
    A[Môi trường Indoor: Mất tín hiệu GNSS/GPS] --> B[Yêu cầu định vị tự trị & Lập bản đồ]
    B --> C[Công nghệ SLAM - Simultaneous Localization and Mapping]
    C --> D[Phần cứng biên: NVIDIA Jetson Nano B01 + ESP32]
    C --> E[Cảm biến: RPLIDAR A1M8 + IMU MPU6050 + Encoders]
    D & E --> F[Hệ điều hành Robot: ROS Melodic / Ubuntu 18.04 LTS]
    F --> G[AMR tự hành: Khám phá, Tránh vật cản & Điều hướng thời gian thực]

Vấn đề cốt lõi (Problem Statement)

Các hệ thống robot tự hành hiện nay đối mặt với ba rào cản kỹ thuật lớn:

  1. Hiện tượng trượt bánh và tích lũy sai số trôi dạt (Drift error): Dữ liệu Odometry thuần túy từ bánh xe suy giảm độ chính xác nhanh chóng theo thời gian do hiện tượng trượt cơ học và ma sát không đều.
  2. Chi phí phần cứng công nghiệp đắt đỏ: Các hệ thống LiDAR công nghiệp 3D hoặc bộ điều khiển thời gian thực chuyên dụng (dSPACE, Industrial PC) có giá thành vượt quá khả năng tiếp cận của các doanh nghiệp vừa và nhỏ cũng như các đơn vị nghiên cứu ứng dụng.
  3. Cân bằng tải tính toán và độ trễ điều khiển: Thuật toán SLAM và hoạch định đường đi cục bộ (Local Path Planning) đòi hỏi năng lực tính toán song song mạnh mẽ, trong khi việc lấy mẫu cảm biến xung encoder và điều khiển vòng kín động cơ yêu cầu đáp ứng thời gian thực nghiêm ngặt (deterministic real-time response).

Mục tiêu của đề tài

  1. Thiết kế và chế tạo khung gầm robot vi sai 3 tầng tối ưu trọng tâm: Đảm bảo độ ổn định cơ học, chống nhiễu điện từ (EMI) và tối ưu hóa chuyển động xoay tại chỗ trong không gian hẹp.
  2. Xây dựng kiến trúc điều khiển nhúng phân tán hai cấp (Dual-tier architecture): Tích hợp máy tính biên NVIDIA Jetson Nano B01 và vi điều khiển 32-bit ESP32 NodeMCU-32S.
  3. Hiện thực hóa thuật toán SLAM 2D: Sử dụng cảm biến Laser RPLIDAR A1M8 kết hợp gói thuật toán Gmapping (Rao-Blackwellized Particle Filter) để xây dựng bản đồ lưới chiếm chỗ (Occupancy Grid Map) chính xác.
  4. Hợp nhất dữ liệu cảm biến đa luồng (Sensor Fusion): Kết hợp Wheel Odometry và IMU 6-DOF qua Bộ lọc Kalman mở rộng (Extended Kalman Filter - EKF) để triệt tiêu sai số định vị tích lũy.
  5. Triển khai ngăn xếp điều hướng tự trị (ROS Navigation Stack) và Frontier Exploration: Hiện thực hóa khả năng tự động khám phá không gian chưa biết và hoạch định quỹ đạo tránh vật cản động thời gian thực.

Phương pháp tiếp cận giải pháp

Đề tài áp dụng phương pháp thiết kế hệ thống nhúng phân lớp trên nền tảng Robot Operating System (ROS Melodic/Noetic):

  • Tầng chấp hành và cảm biến sơ cấp (Low-level Hardware Layer): ESP32 đảm nhiệm việc giải mã tín hiệu Quadrature Encoder từ động cơ DC Servo JGB37-520 với tần số ngắt 1ms, thu thập dữ liệu gia tốc và vận tốc góc từ IMU MPU6050 qua bus I2C, thực thi thuật toán điều khiển PID vận tốc vòng kín ở tần số 100Hz.
  • Tầng tính toán biên và thuật toán cao cấp (High-level Compute Layer): NVIDIA Jetson Nano đảm nhiệm vai trò ROS Master, thu nhận luồng dữ liệu quét 360° từ RPLIDAR A1M8 qua UART, chạy các node xử lý EKF Localization, Gmapping SLAM, Global Planner (thuật toán Dijkstra/A*) và Local Planner (thuật toán Dynamic Window Approach - DWA).
  • Cơ chế giao tiếp đồng bộ: Sử dụng giao thức rosserial kết nối UART vật lý giữa ESP32 và Jetson Nano, chuẩn hóa dữ liệu dưới dạng các ROS Topics chuẩn (/odom_noisy, /imu, /cmd_vel, /joint_states).

Kết quả kỳ vọng và chỉ số đo lường

  • Độ chính xác lập bản đồ: Bản đồ 2D dạng Occupancy Grid tái tạo không gian phòng và hành lang với độ phân giải lưới 0.05m/pixel, sai số kích thước biên học $< 2.5%$.
  • Độ chính xác định vị: Sai số vị trí tuyến tính trung bình $< 3.5\text{ cm}$ trên quãng đường di chuyển 10m; sai số góc quay $< 2.0^{\circ}$.
  • Thời gian trễ đáp ứng điều hướng: Tần số cập nhật Local Costmap $\ge 5\text{ Hz}$, tần số xuất lệnh điều khiển /cmd_vel đạt 10Hz.
  • Khả năng tự trị: Tự động khám phá 100% diện tích không gian không có vật cản cô lập thông qua gói frontier_exploration.

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

  • Môi trường hoạt động: Không gian nội thất có mặt sàn phẳng, độ nghiêng mặt sàn $< 3^{\circ}$, không có bậc thang.
  • Cảm biến LiDAR 2D: Mặt phẳng quét cắt ngang ở độ cao 22cm; các vật thể nằm hoàn toàn dưới hoặc trên mặt phẳng quét 2D sẽ không được phát hiện trực tiếp nếu không nằm trong cấu hình costmap mở rộng.

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 Dẫn đường AGV truyền thống (Line từ/QR Code) Visual SLAM (Camera RGB-D / Stereo) LiDAR 2D SLAM trên ROS (Giải pháp đồ án)
Chi phí triển khai hạ tầng Rất cao (yêu cầu dán sàn, lắp đặt tag định vị cố định) Thấp (không cần cải tạo hạ tầng) Thấp (không cần can thiệp hạ tầng hiện hữu)
Độ nhạy với ánh sáng Không bị ảnh hưởng Rất cao (dễ mất dấu tính năng khi thiếu/chói sáng) Miễn nhiễm hoàn toàn với điều kiện chiếu sáng môi trường
Độ phức tạp tính toán Thấp Cực kỳ cao (yêu cầu GPU xử lý ma trận ảnh lớn) Tối ưu, chạy mượt mà trên SBC biên (Jetson Nano)
Độ chính xác biên bản đồ Phụ thuộc độ chính xác thi công dán line Trung bình ($\pm 5 - 10\text{ cm}$ do trôi mốc thị giác) Cao ($\pm 1 - 3\text{ cm}$ trong phạm vi quét $< 5\text{m}$)
Tính linh hoạt lộ trình Cố định, khó thay đổi layout nhà xưởng Linh hoạt Linh hoạt, tự động tính toán lại quỹ đạo theo thời gian thực

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

  • Must-have (Bắt buộc có):
    • Khả năng quét 360° phát hiện vật cản trong phạm vi 0.15m – 12m.
    • Vòng lặp điều khiển PID vận tốc động cơ độc lập trên 2 bánh vi sai.
    • Chuyển đổi hệ tọa độ động học thuận/nghịch (Kinematics TF tree: map $\rightarrow$ odom $\rightarrow$ base_footprint $\rightarrow$ base_link $\rightarrow$ laser).
    • Giao tiếp ổn định giữa Jetson Nano và ESP32 qua UART ở baudrate 115200 bps.
  • Should-have (Cần có):
    • Sensor fusion EKF kết hợp IMU MPU6050 và Wheel Odometry.
    • Phục hồi vị trí tự động (Recovery Behaviors: Clearing Costmap, Rotate Recovery) khi robot bị kẹt.
  • Could-have (Có thể mở rộng):
    • Giao diện trực quan hóa dữ liệu Rviz hiển thị bản đồ trực tiếp trên màn hình 7-inch HDMI LCD.
  • Won't-have (Chưa thực hiện trong giai đoạn này):
    • Tích hợp cánh tay robot gắp sản phẩm; nhận dạng vật thể 3D bằng mạng nơ-ron tích chập (CNN).

Thiết kế hệ thống

flowchart TB
    subgraph SENSING_ACTUATION ["Tầng Cảm Biến & Chấp Hành"]
        LIDAR["RPLIDAR A1M8 (Laser Scanner)"]
        IMU["MPU6050 (6-DOF IMU)"]
        ENC["Optical/Magnetic Encoders (990 PPR)"]
        MOT["2x DC JGB37-520 Motors + L298N"]
    end

    subgraph ESP32_LAYER ["Tầng Xử Lý Thời Gian Thực (ESP32 NodeMCU-32S)"]
        ISR_ENC["Timer Interrupt 1ms: Đọc xung Encoder"]
        PID_CTRL["PID Controller Loop 10ms (100Hz)"]
        RAW_ODO["Tính toán Odometry thô (Kinematics)"]
        ROSSERIAL["rosserial_arduino Client"]
    end

    subgraph JETSON_LAYER ["Tầng Tính Toán Biên (NVIDIA Jetson Nano B01 - ROS Melodic)"]
        SER_NODE["serial_node (/odom_noisy, /imu)"]
        EKF_NODE["ekf_localization_node (/odom, /tf)"]
        RPLIDAR_NODE["rplidarNode (/scan)"]
        SLAM_NODE["slam_gmapping (/map, /map_metadata)"]
        MOVE_BASE["move_base (Global & Local Planner)"]
        EXPLORE_NODE["frontier_exploration"]
    end

    ENC --> ISR_ENC
    ISR_ENC --> PID_CTRL
    PID_CTRL --> RAW_ODO
    IMU --> RAW_ODO
    PID_CTRL --> MOT
    
    RAW_ODO --> ROSSERIAL
    ROSSERIAL <== "UART 115200 bps" ==> SER_NODE
    
    LIDAR --> RPLIDAR_NODE
    RPLIDAR_NODE --> SLAM_NODE
    RPLIDAR_NODE --> MOVE_BASE
    
    SER_NODE --> EKF_NODE
    EKF_NODE --> SLAM_NODE
    EKF_NODE --> MOVE_BASE
    
    SLAM_NODE --> MOVE_BASE
    EXPLORE_NODE --> MOVE_BASE
    MOVE_BASE -->|/cmd_vel| SER_NODE

Bảng đặc tả ngăn xếp công nghệ (Technology Stack)

Thành phần Công nghệ / Thiết bị Phiên bản / Thông số kỹ thuật Vai trò chức năng
SBC (Máy tính biên) NVIDIA Jetson Nano B01 Quad-core ARM A57 @ 1.43GHz, 128 Maxwell GPU, 4GB LPDDR4 Chạy ROS Master, SLAM, EKF, Navigation stack
Hệ điều hành SBC Ubuntu Linux / JetPack Ubuntu 18.04 LTS / JetPack 4.6 Nền tảng hệ điều hành cho SBC
Robot Middleware ROS 1 Melodic Morenia (C++11 / Python 2.7 & 3) Quản lý nodes, topics, services, transforms
Microcontroller ESP32 NodeMCU-32S Tensilica Xtensa Dual-Core 32-bit @ 240MHz, 4MB Flash Điều khiển PID vòng kín, tính odometry thô
LiDAR Sensor Slamtec RPLIDAR A1M8 Quét 360°, 0.15 - 12m, 5.5Hz (8000 mẫu/giây), DTOE Thu thập đám mây điểm 2D LaserScan phục vụ SLAM
Inertial Sensor InvenSense MPU6050 6-DOF (3-axis Accel $\pm 2g$, 3-axis Gyro $\pm 250^{\circ}/s$) Cung cấp dữ liệu vận tốc góc $\omega_z$ chống trôi
Động cơ & Encoder JGB37-520 DC Geared Motor 12VDC, 110 RPM, Tỷ số truyền 90:1, Hall Encoder 11 PPR Động lực di chuyển vi sai, hồi tiếp 990 xung/vòng
Mạch công suất L298N Dual H-Bridge Driver Cầu H đôi, dòng cực đại 2A/kênh, cách ly quang Điều chế độ rộng xung (PWM) điều khiển tốc độ động cơ
Hệ thống nguồn LiPo 3S + 3S UPS Module Pin LiPo 11.1V 1500mAh 35C + UPS 3x 18650 (5V/5A) Cấp nguồn tách biệt: LiPo cho Motor, UPS cho Jetson
Vật liệu khung Tấm Formex (Foam PVC) Kích thước $20 \times 20 \times 22\text{ cm}$, dày 5mm Giảm trọng lượng, triệt tiêu nhiễu điện từ (EMI)

Methodology

Quy trình phát triển dự án tuân thủ mô hình Agile V-Model cải tiến cho hệ thống điều khiển cơ điện tử nhúng:

[Phân tích yêu cầu] ------------------------------------> [Kiểm thử tích hợp hệ thống]
       \                                                               /
   [Thiết kế kiến trúc 3 tầng] ---------------------> [Đánh giá độ chính xác SLAM/Nav]
           \                                                 /
      [Thiết kế phần cứng & CAD] --------------> [Kiểm định phần cứng & Calib]
               \                                 /
          [Lập trình nhúng ESP32 & ROS Nodes] ---

Kế hoạch thực hiện và các mốc chuyển giao (Milestones)

gantt
    title TIẾN ĐỘ THỰC HIỆN DỰ ÁN (TUẦN 1 - TUẦN 16)
    dateFormat  X
    axisFormat W%W
    
    section Giai đoạn 1: Khảo sát & Phần cứng
    Nghiên cứu lý thuyết SLAM & ROS           :active, m1, 0, 3
    Thiết kế CAD & Chế tạo khung xe Formex    :m2, 2, 4
    Thiết kế mạch nguồn phân chia LiPo/UPS    :m3, 3, 5
    
    section Giai đoạn 2: Lập trình nhúng & Driver
    Lập trình firmware ESP32 (PID, Encoder)   :m4, 4, 8
    Cấu hình giao tiếp I2C IMU MPU6050        :m5, 6, 9
    Tích hợp rosserial giao tiếp UART         :m6, 7, 10
    
    section Giai đoạn 3: Tích hợp ROS & SLAM
    Cấu hình URDF & Thiết lập cây TF          :m7, 9, 12
    Hiệu chuẩn Sensor Fusion EKF Localization :m8, 10, 13
    Thực thi Gmapping tạo bản đồ 2D           :m9, 11, 14
    
    section Giai đoạn 4: Điều hướng & Tối ưu
    Cấu hình move_base & DWA Local Planner    :m10, 12, 15
    Thực nghiệm tránh vật cản & Đo đạc sai số :m11, 13, 16

Đánh giá rủi ro và chiến lược giảm thiểu

Rủi ro kỹ thuật Mức độ Tác động Giải pháp khắc phục
Sụt áp Jetson Nano khi Motor khởi động Cao Jetson Nano bị reset đột ngột do dòng khởi động của motor đạt đỉnh ($> 2.3\text{A}$) Tách biệt hoàn toàn nguồn động lực (Pin LiPo 3S 11.1V qua L298N) và nguồn tính toán (UPS Module 3S cấp 5V/5A ổn định qua cổng Jack DC Jetson)
Trôi dạt góc xoay của IMU MPU6050 Trung bình Bản đồ SLAM bị méo mó khi robot xoay góc Lập trình lọc bù (Complementary Filter) kết hợp ước lượng sai số thông qua ekf_localization_node
Quá tải buffer UART trên ESP32 Trung bình Mất gói tin Odometry gửi lên Jetson Nano Thiết lập kích thước buffer SERIAL_BUFFER_SIZE = 512 bytes, tối ưu hóa tần số publish các topic nhúng
Nhiễu điện từ từ động cơ quét vào cảm biến Thấp Sai lệch số đọc la bàn/gia tốc Sử dụng khung vật liệu Formex phi kim loại, bố trí khoảng cách tầng 1 (động cơ) cách xa tầng 2 và 3 $\ge 8\text{ cm}$

Implementation và kết quả

Development process

1. Tính toán động học robot vi sai (Differential Drive Kinematics)

Xét khoảng cách giữa hai bánh chủ động là $d_{\text{baseline}}$, bán kính bánh xe $R = 32.5\text{ mm}$. Khi bánh trái di chuyển một đoạn $d_{\text{left}}$ và bánh phải di chuyển $d_{\text{right}}$ trong chu kỳ lấy mẫu $\Delta t$:

$$\Delta d_{\text{center}} = \frac{d_{\text{left}} + d_{\text{right}}}{2}$$

$$\Delta \theta = \frac{d_{\text{right}} - d_{\text{left}}}{d_{\text{baseline}}}$$

Tọa độ vị trí mới $(x', y', \theta')$ của robot trong hệ quy chiếu odom được tính tích phân số:

$$x' = x + \Delta d_{\text{center}} \cdot \cos\left(\theta + \frac{\Delta \theta}{2}\right)$$

$$y' = y + \Delta d_{\text{center}} \cdot \sin\left(\theta + \frac{\Delta \theta}{2}\right)$$

$$\theta' = \theta + \Delta \theta$$

Trong đó, quãng đường mỗi bánh xe thu được từ số xung Encoder hồi tiếp:

$$d_{\text{wheel}} = 2\pi R \cdot \frac{\text{Pulses}}{\text{PPR}} = 2\pi (0.0325) \cdot \frac{\text{Pulses}}{990} \quad (\text{m})$$

2. Firmware điều khiển thời gian thực trên ESP32 (C++/FreeRTOS)

Dưới đây là đoạn mã thực thi ngắt Timer đọc xung Encoder và thuật toán PID rời rạc trên ESP32:

#include <Arduino.h>
#include <ros.h>
#include <geometry_msgs/Twist.h>
#include <nav_msgs/Odometry.h>

// Thông số cấu hình động học
const float WHEEL_RADIUS = 0.0325;   // Bán kính bánh xe (m)
const float BASELINE     = 0.165;    // Khoảng cách 2 bánh (m)
const int   PPR          = 990;      // Tổng số xung trên 1 vòng bánh

volatile long left_pulses = 0, right_pulses = 0;
float setpoint_v_left = 0.0, setpoint_v_right = 0.0;
float kp = 2.8, ki = 0.45, kd = 0.08;
float err_left_prev = 0, integral_left = 0;

void IRAM_ATTR left_encoder_isr() {
    if (digitalRead(PIN_ENC_L_B) == HIGH) left_pulses++;
    else left_pulses--;
}

void compute_pid_motor_left(float current_v, float target_v) {
    float error = target_v - current_v;
    integral_left += error * 0.01;
    float derivative = (error - err_left_prev) / 0.01;
    float output_pwm = kp * error + ki * integral_left + kd * derivative;
    err_left_prev = error;
    
    output_pwm = constrain(output_pwm, -255, 255);
    set_motor_left_direction_pwm(output_pwm);
}

// Ngắt định thời 10ms (100Hz) thực thi vòng lặp vận tốc
void IRAM_ATTR on_timer_10ms() {
    float v_left_actual = ((float)left_pulses / PPR) * (2 * PI * WHEEL_RADIUS) / 0.01;
    left_pulses = 0;
    compute_pid_motor_left(v_left_actual, setpoint_v_left);
}

3. Cấu hình Sensor Fusion với Extended Kalman Filter (robot_localization)

Gói ekf_localization_node cấu hình lọc và hợp nhất 15 trạng thái:

# Cấu hình ekf_template.yaml
frequency: 30.0
sensor_timeout: 0.1
two_d_mode: true
publish_tf: true
map_frame: map
odom_frame: odom
base_link_frame: base_footprint
world_frame: odom

# Nguồn 1: Wheel Odometry
odom0: /odom_noisy
odom0_config: [true,  true,  false,   # X, Y, Z
               false, false, false,   # roll, pitch, yaw
               true,  false, false,   # vx, vy, vz
               false, false, true,    # vroll, vpitch, vyaw
               false, false, false]   # ax, ay, az
odom0_differential: false

# Nguồn 2: IMU MPU6050
imu0: /imu
imu0_config: [false, false, false,
              false, false, true,    # Yaw
              false, false, false,
              false, false, true,    # Yaw rate (Angular velocity Z)
              true,  false, false]   # Linear acceleration X
imu0_differential: false

Testing và validation

1. Kiểm chuẩn sai số Odometry cơ học

Thực nghiệm robot di chuyển thẳng một khoảng cách chuẩn $L_{\text{target}} = 3000\text{ mm}$ trên bề mặt sàn gạch men, thực hiện 5 lần lặp lại:

Lần thử Khoảng cách thực tế (mm) Khoảng cách đo từ Odometry thô (mm) Sai số khoảng cách (%) Khoảng cách qua EKF (mm) Sai số qua EKF (%)
Lần 1 3000 3125 +4.16% 3028 +0.93%
Lần 2 3000 3140 +4.66% 3035 +1.16%
Lần 3 3000 3110 +3.66% 3018 +0.60%
Lần 4 3000 3155 +5.16% 3042 +1.40%
Lần 5 3000 3130 +4.33% 3025 +0.83%
Trung bình 3000 3132 +4.39% 3029.6 +0.98%

Nhận xét: Việc áp dụng bộ lọc EKF kết hợp IMU giúp giảm sai số đo khoảng cách từ 4.39% xuống còn 0.98%, loại bỏ đáng kể hiện tượng trượt vi mô của bánh xe.

Sai số định vị tích lũy (Quãng đường 3000mm):
Odometry thô : [████████████████████] +4.39% (+132mm)
Sau lọc EKF  : [████] +0.98% (+29.6mm)
--> Mức độ cải thiện độ chính xác: 77.6%

2. Đánh giá khả năng điều hướng Navigation (Có và Không có vật cản)

Tham số kiểm thử Môi trường không vật cản Môi trường có vật cản tĩnh & động
Khoảng cách mục tiêu (m) 8.50 8.50
Thời gian hoàn thành (s) 28.4 36.2
Vận tốc trung bình (m/s) 0.30 0.23
Sai số vị trí điểm đích ($e_x, e_y$) $\Delta x = 1.8\text{ cm}, \Delta y = 2.1\text{ cm}$ $\Delta x = 2.6\text{ cm}, \Delta y = 3.2\text{ cm}$
Sai số góc hướng đích ($e_\theta$) $1.4^{\circ}$ $2.8^{\circ}$
Tỷ lệ va chạm (Collision rate) 0% (0/10 lần thử) 0% (0/10 lần thử)

Kết quả đạt được

+-------------------------------------------------------------------+
|               KẾT QUẢ ĐẠT ĐƯỢC CỦA HỆ THỐNG ROBOT                |
+-------------------------------------------------------------------+
|  1. Tái tạo bản đồ 2D Occupancy Grid kích thước 15m x 25m         |
|  2. Tần số quét LiDAR 5.5Hz, xử lý 8000 điểm đo/giây              |
|  3. Thuật toán DWA phản ứng tránh vật cản động trong < 120ms      |
|  4. Tải CPU Jetson Nano trung bình: 62% (4 Cores ARM @ 1.43GHz)  |
|  5. Tiêu thụ công suất hệ thống tính toán: 6.8W (Chế độ 10W Mode) |
|  6. Thời lượng vận hành liên tục: 2.5 giờ (Pin LiPo + 3x 18650)   |
+-------------------------------------------------------------------+

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

Các đổi mới kỹ thuật nổi bật

  1. Thiết kế bố trí trọng tâm lệch trục hình học (Center of Gravity Offset): Thay vì đặt khối tâm ở trung tâm khung xe hình chữ nhật, hệ thống bố trí trục hai bánh chủ động và khối pin LiPo lùi về phía trước, đưa trọng tâm rơi chính xác vào điểm giữa của đoạn nối hai bánh dẫn động. Cải tiến này giúp loại bỏ mô-men quán tính cản khi xoay tại chỗ, cho phép robot quay tròn trơn tru trong các góc hành lang hẹp chỉ $45\text{ cm}$.
  2. Khung vỏ Formex chống nhiễu đa tầng: Loại bỏ hoàn toàn khung nhôm định hình truyền thống để giảm trọng lượng khung xe xuống $650\text{g}$, đồng thời vật liệu phi kim loại triệt tiêu hiện tượng méo từ trường cục bộ, nâng cao độ tin cậy của cảm biến quán tính IMU.
  3. Cơ chế phân tách luồng điều khiển thời gian thực: Tách rời hoàn toàn bài toán điều khiển cơ cấu chấp hành (chạy trên RTOS nhúng của ESP32) và bài toán xử lý dữ liệu nặng (chạy trên hệ điều hành ROS/Linux của Jetson Nano), loại bỏ hiện tượng giật cục của động cơ khi SBC bị quá tải tính toán.

So sánh với các giải pháp hiện hữu

Đặc tính kỹ thuật Robot Đồ án TurtleBot3 Burger (Robotis) Robot hút bụi thương mại (Ecovacs/Roborock)
Vi xử lý trung tâm NVIDIA Jetson Nano B01 (128-core GPU) Raspberry Pi 3/4 (Broadcom ARM) SoC ARM chuyên dụng (Allwinner/Rockchip)
Nền tảng phần mềm ROS Melodic / Mã nguồn mở hoàn toàn ROS Kinetic/Noetic Firmware đóng (Proprietary RTOS/Linux)
Khả năng nâng cấp AI Hỗ trợ TensorRT, phát hiện vật thể YOLO Hạn chế (chỉ chạy inference cơ bản) Không thể tùy biến thuật toán
Cơ cấu truyền động Động cơ JGB37-520 kim loại (15 kg.cm) Động cơ Dynamixel XL430 thông minh Động cơ DC không chổi than tích hợp
Chi phí chế tạo ~ 6.500.000 VNĐ (~ $260) ~ 16.000.000 VNĐ (~ $650) ~ 9.000.000 – 18.000.000 VNĐ
Mức độ mở của hệ thống Can thiệp 100% mã nguồn và phần cứng Mã nguồn mở phần mềm Hệ thống đóng

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

Các kịch bản ứng dụng thực tế

  • Vận chuyển hàng hóa nội bộ (Intralogistics): Triển khai trong các xưởng lắp ráp linh kiện điện tử, tự động vận chuyển khay linh kiện nặng đến 5kg giữa các trạm làm việc theo lịch trình được cấu hình sẵn.
  • Tuần tra an ninh và kiểm tra môi trường: Tích hợp camera giám sát và cảm biến khí gas/nhiệt độ để đi tuần tra tự động trong các kho hàng vào ban đêm, lập bản đồ nhiệt và cảnh báo cháy sớm.
  • Nền tảng nghiên cứu và đào tạo Robotics: Làm mô hình chuẩn cho các trường đại học chuyên ngành Cơ điện tử, Kỹ thuật Máy tính và Tự động hóa để giảng dạy các môn học ROS, SLAM và Điều khiển tự động.

Phân tích chi phí - lợi ích (Cost-Benefit Analysis)

ƯỚC TÍNH CHI PHÍ VẬN HÀNH CHO NHÀ XƯỞNG 500M2:
+------------------------------------+-----------------------+
| Hạng mục chi phí                   | Giá trị (VNĐ)         |
+------------------------------------+-----------------------+
| Chi phí nhân công vận chuyển tay   | 96.000.000 VNĐ/năm    |
| (1 nhân công x 8.000.000 VNĐ/tháng)|                       |
| Chi phí đầu tư 2 Robot AMR tự hành | 15.000.000 VNĐ (1 lần)|
| Chi phí bảo trì, sạc điện/năm      | 3.000.000 VNĐ/năm     |
+------------------------------------+-----------------------+
| TIẾT KIỆM NĂM ĐẦU TIÊN             | 78.000.000 VNĐ        |
| THỜI GIAN HOÀN VỐN (ROI)           | ~ 2.3 THÁNG           |
+------------------------------------+-----------------------+

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

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

  • Hạn chế của mặt phẳng quét 2D: RPLIDAR A1M8 chỉ quét trên một mặt phẳng phẳng 2D song song mặt đất. Các chướng ngại vật nhô ra từ trên cao (như mép bàn, giá treo) hoặc bậc thụt xuống (hố, cầu thang) không thể phát hiện được nếu không bổ sung cảm biến siêu âm hoặc cảm biến chống rơi (cliff sensor).
  • Hiện tượng trượt khi chuyển mặt sàn: Khi di chuyển từ mặt sàn gạch bóng sang mặt thảm có ma sát cao, hệ số ma sát thay đổi đột ngột khiến bộ điều khiển PID cần 0.5s – 1.0s để thích nghi, gây ra sai số vận tốc tức thời.

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

  1. Nâng cấp lên ROS 2 (Humble Hawksbill / Iron Irwini): Chuyển dịch toàn bộ kiến trúc sang ROS 2 để tận dụng giao thức truyền thông thời gian thực DDS (Data Distribution Service), tăng cường tính an toàn và bảo mật cho môi trường công nghiệp.
  2. Tích hợp cảm biến thị giác sâu (RGB-D Camera Intel RealSense D435i): Triển khai thuật toán RTAB-Map SLAM để hợp nhất dữ liệu đám mây điểm 3D (3D Point Cloud) với dữ liệu LiDAR 2D, giải quyết triệt để bài toán nhận diện vật thể phức tạp đa tầng.
  3. Triển khai nhận diện đối tượng bằng Deep Learning: Tận dụng 128 lõi GPU Maxwell trên Jetson Nano để chạy mô hình YOLOv8-nano qua TensorRT, nhận dạng và phân loại người đi bộ, biển báo chỉ dẫn để đưa ra hành vi nhường đường thông minh.

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

+---------------------------------------------------------------------------------------+
|                           ĐỐI TƯỢNG HƯỞNG LỢI & GIÁ TRỊ                               |
+---------------------------------------------------------------------------------------+
| 🎓 SINH VIÊN & NGHIÊN CỨU SINH:                                                      |
|    - Tiếp cận tài liệu kiến trúc phần cứng - phần mềm mở, có code mẫu hoàn chỉnh.     |
|    - Nắm vững quy trình cấu hình ROS Navigation Stack và điều khiển nhúng chuyên sâu. |
+---------------------------------------------------------------------------------------+
| 💻 KỸ SƯ PHÁT TRIỂN (DEVELOPERS):                                                    |
|    - Tiết kiệm 60% thời gian R&D hệ thống điều hướng và giao tiếp vi điều khiển.      |
|    - Thiết kế hệ thống dạng module hóa cao, dễ dàng tùy biến cho khung gầm khác.      |
+---------------------------------------------------------------------------------------+
| 🏭 DOANH NGHIỆP & NHÀ XƯỞNG SẢN XUẤT:                                                |
|    - Sở hữu giải pháp AMR chi phí cực thấp (giảm 60-70% so với thiết bị nhập khẩu).   |
|    - Khả năng tự chủ bảo trì, mở rộng tính năng mà không phụ thuộc nhà cung cấp.     |
+---------------------------------------------------------------------------------------+

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

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

Hệ thống yêu cầu một máy tính nhúng có tối thiểu 4GB RAM và hỗ trợ nền tảng Linux (khuyến nghị NVIDIA Jetson Nano B01, Jetson Orin Nano hoặc Raspberry Pi 4 Model B 4GB/8GB) chạy hệ điều hành Ubuntu 18.04/20.04 cài đặt ROS Melodic/Noetic. Vi điều khiển tầng dưới yêu cầu tối thiểu 2 bộ đếm xung phần cứng (Hardware Timer/Counter) tốc độ cao như ESP32 hoặc STM32F4.

2. Giới hạn không gian tối đa mà robot có thể lập bản đồ là bao nhiêu?

Với cảm biến RPLIDAR A1M8 (tầm đo tối đa 12m, tầm đo hiệu quả ổn định 6m - 8m) và bộ nhớ RAM 4GB trên Jetson Nano, gói slam_gmapping có thể xử lý mượt mà bản đồ lưới 2D có diện tích lên đến $3.000\text{ m}^2$ với độ phân giải lưới tiêu chuẩn 0.05m (5cm/ô). Với không gian lớn hơn, có thể chuyển sang thuật toán Cartographer của Google để tối ưu hóa bộ nhớ và vòng lặp đóng (Loop Closure).

3. Làm thế nào để tích hợp robot vào hệ thống quản lý kho (WMS/MES) hiện có?

Do ROS hỗ trợ giao thức mạng TCP/IP và hệ thống WebSockets (rosbridge_suite), robot có thể dễ dàng kết nối với máy chủ quản lý trung tâm thông qua mạng Wi-Fi cục bộ. Máy chủ WMS có thể gửi các mục tiêu tọa độ di chuyển (geometry_msgs/PoseStamped) thông qua API RESTful hoặc giao thức MQTT trực tiếp đến node move_base của robot.

4. Chi phí bảo dưỡng và tuổi thọ linh kiện như thế nào?

Cảm biến RPLIDAR A1M8 có cơ cấu quét quang học không tiếp xúc (OPTMAG) cho tuổi thọ hoạt động lên đến 5.000 giờ liên tục. Động cơ DC Servo JGB37-520 với bánh răng kim loại có độ bền cao, chỉ cần bảo dưỡng chổi than và tra dầu mỡ định kỳ sau mỗi 2.000 giờ vận hành. Khung Formex dễ dàng thay thế với chi phí gia công cắt CNC dưới 200.000 VNĐ.

5. Tại sao không sử dụng Raspberry Pi mà lại lựa chọn NVIDIA Jetson Nano?

Mặc dù Raspberry Pi 4 có hiệu năng CPU tốt, NVIDIA Jetson Nano sở hữu 128 nhân GPU kiến trúc Maxwell hỗ trợ tăng tốc phần cứng thông qua CUDA và TensorRT. Điều này mở ra khả năng nâng cấp hệ thống trong tương lai để chạy đồng thời các thuật toán SLAM phức tạp và các mạng nơ-ron nhận diện đối tượng hình ảnh (Vision AI) với độ trễ thấp mà Raspberry Pi không đáp ứng được.


Kết luận

Đồ án "Ứng dụng công nghệ định vị đồng thời lập bản đồ trên Robot (SLAM in Mobile Robots)" đã giải quyết toàn diện bài toán tự động hóa dẫn đường cho robot di động trong môi trường trong nhà. Thông qua việc làm chủ kiến trúc điều khiển phân tán trên nền tảng ROS, tích hợp cảm biến Laser RPLIDAR A1M8, IMU 6-DOF và vi điều khiển ESP32, nhóm tác giả đã xây dựng thành công một mẫu robot AMR có khả năng tự lập bản đồ, tự định vị triệt tiêu trôi dạt và hoạch định đường đi tránh vật cản chính xác cao với chi phí tối ưu.

Thành công của đề tài khẳng định tính khả thi của việc nội địa hóa các giải pháp robot công nghiệp thông minh, mở ra tiềm năng ứng dụng to lớn trong tự động hóa kho vận, dịch vụ tòa nhà và các dây chuyền sản xuất hiện đại tại Việt Nam.