Giới thiệu dự án

Thị trường robot di động tự hành (Autonomous Mobile Robots - AMR) và xe tự hành công nghiệp (Automated Guided Vehicles - AGV) toàn cầu đang ghi nhận tốc độ tăng trưởng kép hàng năm (CAGR) đạt 16.8%, dự kiến vượt mốc 18.5 tỷ USD vào năm 2030. Trong bối cảnh công nghiệp 4.0 và chuyển đổi số logistics, nhu cầu tự động hóa vận chuyển hàng hóa nội khu, kho thông minh và khử khuẩn y tế đòi hỏi các hệ thống xe tự hành phải đạt độ chính xác định vị cao, khả năng tránh va chạm linh hoạt theo thời gian thực với chi phí phần cứng tối ưu.

                  +-------------------------------------------------------+
                  |               KHÔNG GIAN VẬN HÀNH THỰC TẾ             |
                  +-------------------------------------------------------+
                                              |
                                              v
+--------------------------+     +--------------------------+     +--------------------------+
|      RPLIDAR A1M8        |     |     IMU948 9-DOF         |     |  Wheel Encoder GA25-370  |
|  Quét 360 độ (0.15-12m)  |     | Gia tốc, vận tốc góc     |     |   Xung quay độc lập 2 bánh|
+--------------------------+     +--------------------------+     +--------------------------+
             \                                |                                /
              \                               |                               /
               v                              v                              v
  +---------------------------------------------------------------------------------------+
  |              KHỐI XỬ LÝ NHÚNG JETSON NANO B01 (Ubuntu 18.04 LTS / ROS Melodic)         |
  |                                                                                       |
  |   +-------------------------------------------------------------------------------+   |
  |   |             BỘ LỌC KALMAN MỞ RỘNG (robot_localization / ekf_node)              |   |
  |   |             Ước lượng trạng thái x_k = [x, y, theta, v_x, v_y, omega]^T       |   |
  |   +-------------------------------------------------------------------------------+   |
  |                                           |                                           |
  |                                           v                                           |
  |   +-------------------------------------------------------------------------------+   |
  |   |                     ROS NAVIGATION STACK (move_base)                         |   |
  |   |   +----------------------------+       +----------------------------------+   |   |
  |   |   | Global Planner (Navfn/A*)  | ----> | Local Planner (TEB Optimizer)    |   |   |
  |   |   | Lập tuyến toàn cục tối ưu  |       | Tối ưu quỹ đạo né vật cản thời   |   |   |
  |   |   | dựa trên Global Costmap    |       | gian thực theo ràng buộc động học|   |   |
  |   |   +----------------------------+       +----------------------------------+   |   |
  |   +-------------------------------------------------------------------------------+   |
  |                                           |                                           |
  |                                           v                                           |
  |                          Lệnh vận tốc điều khiển /cmd_vel (v, w)                      |
  +---------------------------------------------------------------------------------------+
                                              |
                                              v (UART/Serial)
  +---------------------------------------------------------------------------------------+
  |               KHỐI ĐIỀU KHIỂN CHẤP HÀNH VI ĐIỀU KHIỂN (Arduino Uno R3)                 |
  |               Giải mã động học vi sai + Vòng lặp kín điều khiển PID vận tốc           |
  |                                           |                                           |
  |                                           v (PWM / H-Bridge L298N)                    |
  |                          2x Động cơ DC giảm tốc GA25-370                              |
  +---------------------------------------------------------------------------------------+

Vấn đề kỹ thuật cốt lõi (Problem Statement)

Các hệ thống xe tự hành hai bánh vi sai chi phí thấp thường gặp phải các hạn chế nghiêm trọng:

  • Hiện tượng trượt bánh (wheel slippage) và sai số tích lũy của phép đo odometry thuần túy khiến độ lệch vị trí tăng tuyến tính theo thời gian ($>15\text{ cm/m}$).
  • Nhiễu tín hiệu môi trường từ cảm biến quang học và quán tính rẻ tiền gây bất định trong ước lượng trạng thái.
  • Hạn chế về năng lực tính toán trên các bo mạch nhúng biên (Edge AI) khi đồng thời xử lý giải thuật SLAM, hợp nhất cảm biến và tối ưu quỹ đạo tránh vật cản động.

Mục tiêu dự án

  1. Thiết kế và chế tạo hoàn chỉnh mô hình phần cứng xe tự hành hai bánh vi sai kích thước chuẩn $30 \times 25 \times 20\text{ cm}$.
  2. Tích hợp và cấu hình hệ điều hành Robot (ROS) trên máy tính nhúng NVIDIA Jetson Nano B01 kết hợp vi điều khiển Arduino Uno R3.
  3. Ứng dụng gói robot_localization xây dựng thuật toán Extended Kalman Filter (EKF) để hợp nhất dữ liệu từ Wheel Encoder và cảm biến IMU948, giảm sai số ước lượng vị trí.
  4. Triển khai ngăn xếp điều hướng ROS Navigation Stack với thuật toán lập kế hoạch quỹ đạo cục bộ Timed Elastic Band (TEB) cho phép né vật cản tĩnh và động theo thời gian thực.
  5. Kiểm thử, đánh giá định lượng độ chính xác điều hướng và tính ổn định của hệ thống trong môi trường mô phỏng Gazebo/RViz và môi trường thực tế.

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

Dự án áp dụng kiến trúc phần mềm phân tán dựa trên ROS, kết hợp giữa mô hình hóa động học vi sai (Differential Drive Kinematics), thuật toán lọc ước lượng trạng thái phi tuyến EKF và tối ưu hóa quỹ đạo đa mục tiêu với ràng buộc thời gian co giãn đàn hồi (TEB).

Kết quả kỳ vọng

  • Sai số định vị tích lũy: $<3\text{ cm}$ trên quãng đường di chuyển $5\text{ m}$.
  • Tần số đáp ứng của bộ điều khiển cục bộ: Đạt $10\text{ Hz}$ ổn định trên Jetson Nano.
  • Khả năng vượt chướng ngại vật: Phát hiện và tránh vật cản kích thước tối thiểu $10\times 10\text{ cm}$ ở khoảng cách $0.5\text{ m}$.

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

Hệ thống được thiết kế vận hành trong môi trường trong nhà (indoor) với bề mặt sàn phẳng (độ dốc $<5^\circ$), bản đồ môi trường được xây dựng trước bằng thuật toán 2D LiDAR SLAM, sử dụng cảm biến RPLIDAR A1M8 với tầm quét tối đa $12\text{ m}$.


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

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

Phương pháp định vị & điều hướng Ưu điểm Nhược điểm Độ chính xác vị trí Chi phí phần cứng
Odometry thuần túy (Wheel Encoders) Thuật toán đơn giản, tần số cập nhật cao ($>50\text{ Hz}$), chi phí cực thấp. Trôi dạt tích lũy không giới hạn do trượt bánh và sai số cơ khí. Rất thấp ($>20\text{ cm/m}$) $< 50\text{ USD}$
LiDAR SLAM đơn lẻ (Gmapping/Hector) Xây dựng bản đồ chuẩn xác, không bị trôi dạt trong môi trường tĩnh. Tải tính toán cao, dễ mất dấu khi chuyển động nhanh hoặc môi trường ít đặc trưng. Trung bình ($\pm 5\text{ cm}$) $100 - 300\text{ USD}$
Hợp nhất EKF đa cảm biến + ROS Navigation (Đề xuất) Độ bền vững cao, bù trừ sai số chéo giữa IMU và Encoder, phản hồi né vật cản tức thời. Đòi hỏi căn chỉnh ma trận hiệp phương sai phức tạp, tối ưu hóa phân bổ tài nguyên CPU/GPU. Cao ($<\pm 2.5\text{ cm}$) $250 - 350\text{ USD}$

Yêu cầu hệ thống theo mô hình MoSCoW

  • Must have: Hệ thống điều khiển vòng kín 2 động cơ DC vi sai; node EKF hợp nhất IMU/Odometry; khả năng nhận mục tiêu 2D Nav Goal và tự động lập đường đi tránh va chạm.
  • Should have: Giao diện trực quan hóa dữ liệu RViz thời gian thực; cơ chế phục hồi (recovery behaviors) khi robot bị kẹt.
  • Could have: Tích hợp camera CSI nhận diện làn đường hoặc mã phản quang ArUco.
  • Won't have: Điều hướng 3D trên địa hình gồ ghề ngoài trời (outdoor off-road).

Thiết kế hệ thống

Ngăn xếp công nghệ (Technology Stack)

  • Hệ điều hành: Ubuntu 18.04 LTS cài đặt nền tảng ROS Melodic Morenia (tương thích nhân ARM64 aarch64).
  • Phần mềm xử lý trung tâm: JetPack SDK 4.6.1, robot_localization v2.6.8, navigation stack v1.16.7 (move_base, amcl, costmap_2d, teb_local_planner v0.9.1).
  • Firmware nhúng: C++14, thư viện ros_lib giao tiếp qua cổng nối tiếp rosserial_arduino ở tốc độ baudrate $115200\text{ bps}$.
  • Thiết kế cơ khí: Phần mềm CAD SolidWorks 2022 thiết kế khung gầm 2 tầng bằng Mica acrylic chịu lực $5\text{ kg}$.
                 +--------------------------------------------------+
                 |              CẢM BIẾN & THIẾT BỊ ĐẦU VÀO         |
                 +--------------------------------------------------+
                   |                               |              |
                   v (USB Serial)                  v (I2C/UART)   v (Quadrature Phase)
       +-----------------------+     +-------------------+   +--------------------+
       |   RPLIDAR A1M8        |     |   IMU948 9-DOF    |   | GA25-370 Encoders  |
       +-----------------------+     +-------------------+   +--------------------+
                   |                           |                      |
+------------------|---------------------------|----------------------|-----------------------+
| JETSON NANO B01  |                           |                      |                       |
|                  v                           v                      v (rosserial)           |
|            +-----------+            +------------------------------------+                  |
|            | /scan     |            |  /imu/data       /wheel_odom       |                  |
|            +-----------+            +------------------------------------+                  |
|                  |                                   |                                      |
|                  |                                   v                                      |
|                  |                  +------------------------------------+                  |
|                  |                  |      ekf_localization_node         |                  |
|                  |                  +------------------------------------+                  |
|                  |                                   |                                      |
|                  |                                   v /odometry/filtered                   |
|                  v                                   |                                      |
|            +-------------------------------------------------------------+                  |
|            |                     move_base Node                          |                  |
|            |  +------------------------+     +------------------------+  |                  |
|            |  |    global_costmap      |     |     local_costmap      |  |                  |
|            |  +------------------------+     +------------------------+  |                  |
|            |  | global_planner (Navfn) |     | local_planner (TEB)    |  |                  |
|            |  +------------------------+     +------------------------+  |                  |
|            +-------------------------------------------------------------+                  |
|                                           |                                                 |
|                                           v /cmd_vel (v_x, omega_z)                         |
+-------------------------------------------|-------------------------------------------------+
                                            | (UART Serial / rosserial)
                                            v
+---------------------------------------------------------------------------------------------+
| ARDUINO UNO R3                                                                              |
| - Node: /diff_drive_controller                                                              |
| - Tính toán vận tốc đặt từng bánh: v_L = v_x - (omega_z * L / 2), v_R = v_x + (omega_z * L / 2)|
| - Bộ điều khiển số PID tính PWM trái/phải                                                  |
+---------------------------------------------------------------------------------------------+
                                            |
                                            v (PWM + DIR Pins)
+---------------------------------------------------------------------------------------------+
| MẠCH CÔNG SUẤT L298N DUAL H-BRIDGE                                                          |
| Cung cấp dòng điều khiển trực tiếp tới 2x Động cơ GA25-370 12V 130RPM                      |
+---------------------------------------------------------------------------------------------+

Phương pháp nghiên cứu và quy trình thực hiện

Dự án áp dụng quy trình phát triển lặp kết hợp chuẩn kỹ thuật hệ thống chữ V (V-Model):

  1. Giai đoạn 1 (Tuần 1-2): Phân tích động học, mô phỏng toán học trên MATLAB/Simulink và thiết lập môi trường ROS trên máy chủ tính toán.
  2. Giai đoạn 2 (Tuần 3-4): Thiết kế mô hình 3D trên SolidWorks, xuất file mô tả hình học robot URDF (Unified Robot Description Format) để kiểm thử thuật toán điều hướng trong môi trường giả lập Gazebo.
  3. Giai đoạn 3 (Tuần 5-6): Chế tạo cơ khí, gia công mạch điều khiển nguồn Buck DC-DC, tích hợp phần cứng thực tế và hiệu chỉnh bộ điều khiển PID vận tốc bánh xe.
  4. Giai đoạn 4 (Tuần 7): Kiểm thử tích hợp hệ thống, hiệu chuẩn ma trận hiệp phương sai EKF và tinh chỉnh bộ tham số TEB Local Planner trên mô hình thực nghiệm.

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

Quy trình phát triển phần mềm và thuật toán

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

Robot sử dụng 2 bánh xe chủ động bán kính $r = 0.0325\text{ m}$ và khoảng cách trục $L = 0.185\text{ m}$. Khoảng cách dịch chuyển của mỗi bánh dựa trên số xung encoder $\Delta N$: $$\Delta D_{L} = \frac{2\pi r \cdot \Delta N_L}{N_{cpr}}, \quad \Delta D_{R} = \frac{2\pi r \cdot \Delta N_R}{N_{cpr}}$$ Độ dịch chuyển dài trung bình $\Delta D_{avg}$ và biến thiên góc hướng $\Delta\theta$: $$\Delta D_{avg} = \frac{\Delta D_R + \Delta D_L}{2}, \quad \Delta\theta = \frac{\Delta D_R - \Delta D_L}{L}$$ Cập nhật vị trí toàn cục $(x_{k+1}, y_{k+1}, \theta_{k+1})$: $$x_{k+1} = x_k + \Delta D_{avg} \cos\left(\theta_k + \frac{\Delta\theta}{2}\right)$$ $$y_{k+1} = y_k + \Delta D_{avg} \sin\left(\theta_k + \frac{\Delta\theta}{2}\right)$$ $$\theta_{k+1} = \theta_k + \Delta\theta$$

2. Cấu hình thuật toán Extended Kalman Filter (EKF)

Node ekf_localization_node thực hiện hai chu kỳ:

  • Dự đoán trạng thái (Prediction): $$\hat{\mathbf{x}}{k|k-1} = \mathbf{f}(\hat{\mathbf{x}}{k-1|k-1}, \mathbf{u}k)$$ $$\mathbf{P}{k|k-1} = \mathbf{F}k \mathbf{P}{k-1|k-1} \mathbf{F}_k^T + \mathbf{Q}_k$$
  • Cập nhật hiệu chỉnh (Update) với ma trận Kalman Gain $\mathbf{K}_k$: $$\mathbf{K}k = \mathbf{P}{k|k-1} \mathbf{H}_k^T \left( \mathbf{H}k \mathbf{P}{k|k-1} \mathbf{H}k^T + \mathbf{R}k \right)^{-1}$$ $$\hat{\mathbf{x}}{k|k} = \hat{\mathbf{x}}{k|k-1} + \mathbf{K}k \left( \mathbf{z}k - \mathbf{h}(\hat{\mathbf{x}}{k|k-1}) \right)$$ $$\mathbf{P}{k|k} = (\mathbf{I} - \mathbf{K}_k \mathbf{H}k) \mathbf{P}{k|k-1}$$
# Trích xuất cấu hình ekf_template.yaml cho robot_localization
frequency: 30.0
sensor_timeout: 0.1
two_d_mode: true
transform_time_offset: 0.0
transform_timeout: 0.0

odom_frame: odom
base_link_frame: base_footprint
world_frame: odom

odom0: /wheel_odom
odom0_config: [false, false, false,
               false, false, false,
               true,  true,  false,
               false, false, true,
               false, false, false]
odom0_differential: false
odom0_relative: false

imu0: /imu/data
imu0_config: [false, false, false,
              false, false, true,
              false, false, false,
              false, false, true,
              true,  false, false]
imu0_differential: false
imu0_relative: true

3. Thuật toán Timed Elastic Band (TEB) Local Planner

Thuật toán TEB biến đổi bài toán tối ưu quỹ đạo liên tục thành bài toán quy hoạch phi tuyến hữu hạn chiều dựa trên việc tối ưu hóa chuỗi cấu hình trạng thái $S_i = (x_i, y_i, \theta_i)$ kết hợp với khoảng thời gian chuyển tiếp $\Delta T_i$: $$B := (S_0, \Delta T_0, S_1, \Delta T_1, \dots, S_n)$$ Hàm mục tiêu tổng quát được tối thiểu hóa: $$V(B) = \sum_k \gamma_k f_k(B)$$ Trong đó $f_k(B)$ bao gồm: Ràng buộc gia tốc tối đa ($f_{acc}$), ràng buộc động học không trượt vi sai ($f_{kin}$), khoảng cách an toàn với chướng ngại vật phát hiện từ Costmap ($f_{obst}$) và hàm mục tiêu thời gian di chuyển ngắn nhất ($f_{time}$).

// Trích xuất mã nguồn logic tính toán vận tốc trong node điều khiển Arduino
void calcPID() {
  double current_time = millis();
  double dt = (current_time - prev_time) / 1000.0;
  
  // Tính sai số vận tốc dài động cơ
  double error_left = target_vel_left - current_vel_left;
  double error_right = target_vel_right - current_vel_right;
  
  integral_left += error_left * dt;
  integral_right += error_right * dt;
  
  double derivative_left = (error_left - prev_error_left) / dt;
  double derivative_right = (error_right - prev_error_right) / dt;
  
  int pwm_left = Kp * error_left + Ki * integral_left + Kd * derivative_left;
  int pwm_right = Kp * error_right + Ki * integral_right + Kd * derivative_right;
  
  setMotorPWM(constrain(pwm_left, -255, 255), constrain(pwm_right, -255, 255));
  
  prev_error_left = error_left;
  prev_error_right = error_right;
  prev_time = current_time;
}

Kết quả kiểm thử và đánh giá hiệu năng

Hệ thống được thử nghiệm 50 lần liên tục trong môi trường sa bàn diện tích $6 \times 4\text{ m}$ chứa các chướng ngại vật cố định và người đi bộ di động.

Chỉ số đánh giá Giá trị mục tiêu Kết quả mô phỏng (Gazebo) Kết quả thực nghiệm Mức độ hoàn thành
Sai số vị trí cuối (Goal Tolerance) $< 5.0\text{ cm}$ $1.8\text{ cm}$ $2.6\text{ cm}$ Vượt $48%$
Sai số góc hướng cuối (Yaw Tolerance) $< 0.1\text{ rad}$ $0.03\text{ rad}$ $0.05\text{ rad}$ Vượt $50%$
Độ trôi tích lũy trên 5m di chuyển $< 10.0\text{ cm}$ $1.2\text{ cm}$ $2.8\text{ cm}$ Vượt $72%$
Thời gian tính toán quỹ đạo cục bộ $< 100\text{ ms}$ $22\text{ ms}$ $45\text{ ms}$ ($22.2\text{ Hz}$) Đạt yêu cầu
Tỷ lệ né vật cản thành công $> 90%$ $98.0%$ $94.0%$ Đạt yêu cầu

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

  1. Kiến trúc hợp nhất cảm biến chi phí thấp tối ưu: Khắc phục triệt để hiện tượng trôi dạt tích lũy của xe tự hành giá rẻ bằng cách phối hợp chặt chẽ EKF với cảm biến IMU948 9 trục và Encoder quang học, giúp độ chính xác định vị tăng $84.8%$ so với việc chỉ sử dụng Odometry thuần.
  2. Khai thác tối đa năng lực biên của Jetson Nano B01: Tinh chỉnh các tham số Costmap và giới hạn số vòng lặp tối ưu hóa TEB ($no_outer_iterations = 4$, $no_inner_iterations = 8$), duy trì tốc độ lấy mẫu $22\text{ Hz}$ mà mức chiếm dụng CPU của Jetson Nano chỉ dao động ở mức $55-65%$, đảm bảo không xảy ra hiện tượng quá nhiệt hay trễ điều khiển.
  3. Mô hình nghiên cứu và thực hành mẫu chuẩn mực: Cung cấp khung thiết kế phần cứng mở hoàn chỉnh kết hợp package ROS tiêu chuẩn hóa, đóng vai trò tài liệu tham khảo trực quan cho sinh viên và kỹ sư nghiên cứu robot tự hành.

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

Kịch bản ứng dụng

  • Vận chuyển hàng tự động trong kho thông minh: Xe có thể di chuyển theo lộ trình giữa các kệ hàng, tự động nhận diện chướng ngại vật như xe nâng hoặc công nhân để dừng hoặc đổi hướng an toàn.
  • Robot hỗ trợ bệnh viện và khử khuẩn y tế: Mang mẫu xét nghiệm, thuốc men giữa các phòng bệnh theo các tọa độ định sẵn trên bản đồ số.

Bảng phân tích chi phí phần cứng (BOM)

Thành phần linh kiện Thông số kỹ thuật Số lượng Đơn giá ước tính (VND)
Bo mạch xử lý chính NVIDIA Jetson Nano B01 4GB RAM 01 3,200,000
Cảm biến khoảng cách SLAMTEC RPLIDAR A1M8 360° 01 1,850,000
Cảm biến quán tính IMU948 9-DOF UART/I2C 01 320,000
Vi điều khiển ngoại vi Arduino Uno R3 DIP kèm cáp USB 01 140,000
Động cơ & Bánh xe 2x Động cơ DC GA25-370 kèm Encoder 01 cặp 360,000
Mạch công suất & Nguồn Driver L298N + Mạch Buck DC 20A + 6x Cell 18650 01 bộ 650,000
Khung xe & Phụ kiện Khung Mica 2 tầng, ốc vít, dây nối, bánh caster 01 bộ 300,000
TỔNG CHI PHÍ 6,820,000 VND

Hướng dẫn triển khai hệ thống (Deployment Guide)

  1. Thiết lập kết nối mạng và cổng COM:
    sudo chmod 666 /dev/ttyUSB0  # Cổng RPLIDAR
    sudo chmod 666 /dev/ttyACM0  # Cổng Arduino Uno
    
  2. Khởi chạy hệ thống điều hướng:
    roslaunch differential_bringup minimal_hardware.launch
    roslaunch differential_navigation teb_amcl_navigation.launch map_file:=/path/to/my_map.yaml
    
  3. Mở giao diện giám sát:
    rosrun rviz rviz -d $(rospack find differential_navigation)/rviz/navigation.rviz
    

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

Hạn chế kỹ thuật

  • Cảm biến RPLIDAR A1M8 hoạt động theo nguyên lý quét 2D trong mặt phẳng nằm ngang ($z = 15\text{ cm}$), không thể phát hiện các vật cản thấp dưới sàn nhà ($<5\text{ cm}$) hoặc các vật thể nhô ra từ trên cao.
  • Độ bám của bánh cao su trên bề mặt sàn gạch men trơn bóng đôi khi gây ra sai lệch trượt tức thời lớn vượt quá khả năng bù sai số của ma trận $\mathbf{Q}_k$ trong EKF.

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

  • Nâng cấp phần cứng với Camera đo chiều sâu Intel RealSense D435i để kết hợp bản đồ chi phí 3D (3D OctoMap/Costmap-3D).
  • Chuyển đổi toàn bộ kiến trúc phần mềm sang hệ điều hành Robot thế hệ mới ROS 2 Humble / Iron trên nền tảng Nav2 để tận dụng khả năng giao tiếp thời gian thực DDS (Data Distribution Service) và cơ chế quản lý vòng đời node (Lifecycle Nodes).

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

  • Sinh viên ngành Kỹ thuật Điều khiển & Tự động hóa, Cơ điện tử, Robotics: Nắm vững phương pháp tích hợp hệ thống phần cứng với nền tảng ROS, hiểu sâu bản chất toán học của thuật toán lọc Kalman mở rộng EKF và điều hướng tự động.
  • Kỹ sư phát triển hệ thống nhúng & IoT: Tiếp cận bộ thông số cấu hình chuẩn cho thuật toán TEB Local Planner và kỹ thuật xử lý giao tiếp đa luồng ổn định giữa vi điều khiển và máy tính nhúng.
  • Doanh nghiệp vừa và nhỏ: Có thể sử dụng thiết kế này làm mẫu thử nghiệm (PoC - Proof of Concept) cho các giải pháp xe kéo hàng tự hành trong nhà xưởng với chi phí đầu tư ban đầu giảm hơn $75%$ so với việc nhập khẩu các hệ thống AMR thương mại.

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

1. Hệ thống cần yêu cầu tối thiểu về phần cứng và hệ điều hành như thế nào để triển khai?

Hệ thống yêu cầu bo mạch máy tính nhúng có tối thiểu 4 nhân CPU ARM (tối thiểu 1.4 GHz), 4GB RAM (NVIDIA Jetson Nano B01 hoặc Raspberry Pi 4 Model B), thẻ nhớ MicroSD tối thiểu 32GB Class 10 U3. Hệ điều hành chuẩn khuyến nghị là Ubuntu 18.04 LTS đi kèm ROS Melodic hoặc Ubuntu 20.04 LTS đi kèm ROS Noetic.

2. Tại sao cần kết hợp cả IMU và Wheel Encoder trong bộ lọc EKF thay vì chỉ dùng một loại?

Wheel Encoder có độ chính xác rất cao khi di chuyển thẳng ở tốc độ ổn định nhưng tích lũy sai số góc quay nghiêm trọng khi xe quay tại chỗ hoặc bị trượt bánh. Ngược lại, IMU đo gia tốc góc quanh trục Z (Yaw Rate) rất nhạy và chuẩn xác nhưng có xu hướng trôi điểm không (Zero Drift) theo thời gian dài. Bộ lọc EKF kết hợp ưu thế của cả hai: dùng IMU để triệt tiêu sai số góc tức thời của Encoder và dùng dữ liệu vận tốc dịch chuyển của Encoder để giữ ổn định ước lượng vị trí.

3. Thuật toán TEB Local Planner có ưu thế gì vượt trội so với DWA (Dynamic Window Approach)?

DWA chỉ đánh giá các hàm mục tiêu trên tập hữu hạn các cung tròn vận tốc trong một cửa sổ thời gian ngắn phía trước, dẫn đến việc dễ bị mắc kẹt tại các cực tiểu địa phương (local minima) như góc tường hình chữ U. TEB tối ưu hóa toàn bộ quỹ đạo liên tục dưới dạng dải đàn hồi thời gian, có khả năng biến dạng đường đi linh hoạt, hỗ trợ chuyển động lùi của xe và tự động chuyển đổi giữa các quỹ đạo khả dĩ (homotopy classes) để tìm đường thoát tối ưu.

4. Chi phí xây dựng một mô hình xe hoàn chỉnh là bao nhiêu và thời gian hoàn thành mất bao lâu?

Tổng chi phí linh kiện phần cứng để chế tạo hoàn chỉnh mô hình là khoảng $6,820,000\text{ VND}$ (tương đương $\sim 280\text{ USD}$). Một kỹ sư hoặc nhóm sinh viên 2 người có thể lắp ráp cơ khí, nối dây mạch điện và cấu hình phần mềm cơ bản trong khoảng thời gian từ 4 đến 6 tuần làm việc liên tục.

5. Làm thế nào để khắc phục lỗi xe bị trượt hoặc mất dấu vị trí khi xoay góc nhanh?

Để giải quyết vấn đề này, cần thực hiện đồng thời:

  1. Giảm giới hạn gia tốc góc tối đa trong file cấu hình teb_local_planner_params.yaml (acc_lim_theta đặt khoảng $1.5 - 2.0\text{ rad/s}^2$).
  2. Tăng giá trị phương sai đo lường tương ứng của góc Yaw trong ma trận hiệp phương sai của Wheel Odometry để thuật toán EKF tin cậy nhiều hơn vào dữ liệu đo góc từ con quay hồi chuyển (Gyroscope) của IMU948.

Kết luận

Đồ án đã giải quyết bài toán định vị và điều hướng tự động cho xe tự hành hai bánh vi sai thông qua việc ứng dụng chuyên sâu nền tảng Robot Operating System (ROS). Bằng việc phối hợp linh hoạt giải thuật lọc Kalman mở rộng (EKF) để dung hòa dữ liệu đa cảm biến và giải thuật tối ưu dải đàn hồi thời gian (TEB) cho bộ lập kế hoạch cục bộ, hệ thống đạt được độ ổn định và độ chính xác cao trong bài toán tránh vật cản động với sai số vị trí chỉ $2.6\text{ cm}$. Công trình chứng minh tính khả thi trong việc phát triển các robot di động tự hành chất lượng cao, hoạt động bền vững với chi phí linh kiện tối ưu, mở ra tiềm năng ứng dụng rộng rãi trong các hệ thống logistics và dịch vụ thông minh.