Giới thiệu dự án
Trong kỷ nguyên Công nghiệp 4.0 và chuyển đổi số tự động hóa, robot di động tự hành (Autonomous Mobile Robot - AMR / Automated Guided Vehicle - AGV) đóng vai trò xương sống trong các chuỗi cung ứng thông minh, logistics nhà kho, y tế và dây chuyền sản xuất tự động. Thị trường robot tự hành toàn cầu đạt tốc độ tăng trưởng kép (CAGR) vượt 16.5% giai đoạn 2021–2028. Tuy nhiên, phần lớn các hệ thống robot tự hành quy mô nhỏ và học thuật tại Việt Nam trước đây chủ yếu phát triển trên nền tảng Robot Operating System phiên bản 1 (ROS1) kết hợp với các vi điều khiển 8-bit/16-bit chạy vòng lặp tuần tự (while(1)), bộc lộ nhiều điểm nghẽn nghiêm trọng:
- Tính đơn điểm lỗi (Single Point of Failure - SPoF) do phụ thuộc vào nút quản lý trung tâm
roscore.
- Thiếu tính tiền định (deterministic) và không đảm bảo thời gian thực (non-real-time) trong các tác vụ điều khiển động cơ cấp thấp, dẫn đến độ trễ vòng lặp điều khiển vượt quá 50ms và tiềm ẩn nguy cơ va chạm khi gặp vật cản bất ngờ.
- Kiến trúc truyền thông phân mảnh, khó mở rộng lên hệ thống đa robot (multi-robot system).
Đồ án "Nghiên cứu, tích hợp ROS2 và RTOS cho robot tự hành" do nhóm sinh viên Phùng Văn Hảo và Phan Hữu Đạt (Khoa Kỹ thuật Máy tính, Trường Đại học Công nghệ Thông tin - ĐHQG TP.HCM) thực hiện nhằm giải quyết dứt điểm các hạn chế trên thông qua việc tích hợp hệ điều hành robot thế hệ mới ROS2 (phiên bản Foxy Fitzroy) và hệ điều hành thời gian thực FreeRTOS/CMSIS-RTOS trên vi điều khiển ARM Cortex-M4 32-bit.
+-------------------------------------------------------------------------+
| HOST PC (GUI) |
| RViz2 Monitoring / Teleop / Map Management (ROS2 Foxy) |
+------------------------------------+------------------------------------+
| WiFi (DDS / CycloneDDS)
v
+-------------------------------------------------------------------------+
| NVIDIA JETSON TX2 DEVELOPER KIT |
| - High-Level Processing (Ubuntu 20.04 LTS, ROS2 Foxy) |
| - Google Cartographer SLAM (2D Occupancy Grid Mapping) |
| - Navigation2 Stack (BT Navigator, AMCL Localization, DWB Local) |
| - RPLidar A1 Driver Node (Serial Interface) |
+------------------------------------+------------------------------------+
| UART / USB (Micro-ROS / XRCE-DDS)
v
+-------------------------------------------------------------------------+
| STM32F429 DISCOVERY KIT (RTOS) |
| - Low-Level Deterministic Control (ARM Cortex-M4 @ 180MHz) |
| - Real-Time Motor Closed-Loop PID Control (4x JGB37 DC Servo) |
| - Sensor Fusion: IMU MPU6050 (6-DOF) + 4x Hall Encoders |
| - Odometry Calculation & Micro-ROS Publisher/Subscriber |
+-------------------------------------------------------------------------+
Mục tiêu dự án
- Thiết kế và chế tạo phần cứng robot 4 bánh vi sai: Sử dụng khung nhôm định hình kích thước $240 \times 200 \times 245\text{ mm}$, tải trọng 5kg, tối ưu hóa bố trí linh kiện 3 tầng tách biệt trên phần mềm SolidWorks 2019.
- Tích hợp ROS2 Foxy Fitzroy trên máy tính nhúng Nvidia Jetson TX2: Khai thác năng lực tính toán 1.33 TFLOPS và 256 nhân GPU Pascal để thực thi các thuật toán xử lý dữ liệu cảm biến mật độ cao.
- Triển khai RTOS và Micro-ROS trên kit vi điều khiển STM32F429ZI: Lập lịch đa nhiệm ưu tiên (Priority-based preemptive scheduling) với tần số lấy mẫu đồng bộ 100Hz cho cảm biến quán tính và encoder.
- Ứng dụng giải thuật Google Cartographer: Xây dựng bản đồ lưới 2D (Occupancy Grid Map) theo thời gian thực từ cảm biến khoảng cách laser RPLidar A1.
- Triển khai hệ thống điều hướng Navigation2 (Nav2): Ứng dụng bộ lọc định vị thích nghi Monte Carlo (AMCL) và giải thuật điều khiển cục bộ Dynamic Window Approach (DWA/DWB) để tự hành tránh vật cản động.
- Đồng bộ hóa luồng dữ liệu toàn hệ thống qua giao thức chuẩn DDS (Data Distribution Service): Đảm bảo giao tiếp liền mạch giữa máy trạm (Host PC), Jetson TX2 và STM32F429.
Phạm vi và giới hạn
- Phạm vi hoạt động: Môi trường trong nhà (indoor), mặt sàn phẳng, chênh lệch độ cao không quá 5mm.
- Giới hạn kỹ thuật: Cảm biến quang học 2D LIDAR bị giảm độ chính xác dưới ánh sáng mặt trời trực tiếp có cường độ lớn (>10,000 lux); hệ thống chỉ xử lý bản đồ và chướng ngại vật trên mặt phẳng 2D.
Phân tích và thiết kế giải pháp
Phân tích hiện trạng
| Tiêu chí kỹ thuật |
Giải pháp 1: Đề tài sinh viên trước (ROS1 + Arduino Mega) |
Giải pháp 2: Robot thương mại TurtleBot3 Burger / Waffle Pi |
Giải pháp đề xuất: ROS2 Foxy + Jetson TX2 + RTOS STM32F429 |
| Kiến trúc Middleware |
ROS1 Noetic (roscore tập trung, Master node) |
ROS1/ROS2 (OpenCR1.0 Cortex-M7) |
ROS2 Foxy (DDS phi tập trung, DDSI-RTPS standard) |
| Xử lý cấp thấp (Low-level) |
Vòng lặp đơn nhiệm Arduino Mega 2560 (8-bit @ 16MHz) |
OpenCR FreeRTOS (Cortex-M7 @ 216MHz) |
FreeRTOS/CMSIS-RTOS trên STM32F429 (32-bit @ 180MHz) |
| Khả năng thời gian thực |
Không (Jitter > 40ms, trễ ngắt cao) |
Có (Thời gian phản hồi ~5ms) |
Có (Deterministic response < 2ms, lập lịch ưu tiên) |
| Thuật toán SLAM |
Gmapping / Hector SLAM (Dễ trôi vòng lặp) |
Cartographer 2D / Gmapping |
Google Cartographer (Tối ưu hóa đồ thị đồ hình Pose Graph) |
| Stack điều hướng |
ROS1 Navigation Stack (move_base) |
Nav1 / Nav2 (Hạn chế tùy biến) |
Navigation2 (Nav2 Stack với Behavior Trees) |
| Chi phí triển khai |
Thấp (~6.000.000 VNĐ) |
Rất cao (~35.000.000 - 55.000.000 VNĐ) |
Tối ưu (~14.500.000 VNĐ), cấu hình mở dễ tùy biến |
Ma trận ưu tiên yêu cầu người dùng (MoSCoW Matrix)
- Must-have (Bắt buộc có):
- Khả năng quét môi trường và tạo bản đồ 2D chính xác với độ phân giải lưới 0.05m/cell.
- Nhận điểm mục tiêu (Goal Pose) từ RViz2 và tự động tính toán quỹ đạo toàn cục/cục bộ.
- Phản hồi thời gian thực ngắt khẩn cấp khi phát hiện vật cản dưới khoảng cách an toàn 0.15m.
- Should-have (Cần có):
- Tự động kích hoạt chuỗi hành vi phục hồi (Recovery Behaviors: xoay tại chỗ, lùi xe, dọn bộ nhớ costmap) khi robot kẹt đường.
- Tách biệt nguồn công suất và nguồn điều khiển để chống nhiễu xung điện từ motor.
- Could-have (Có thể có):
- Tích hợp thêm cảm biến hồng ngoại chống rơi bậc thang và cảm biến va chạm cơ khí.
- Won't-have (Tạm thời chưa triển khai):
- Tích hợp SLAM 3D bằng camera chiều sâu RGB-D (dành cho các giai đoạn nâng cấp sau).
Thiết kế hệ thống
Hệ thống được thiết kế theo cấu trúc module hóa phân tầng:
- Tầng cơ khí & Chấp hành (Mechanical & Actuation Layer):
- 04 Động cơ DC Geared Motor JGB37 kim loại, tích hợp đĩa encoder quang học đo vận tốc và vị trí bánh xe.
- 02 Mạch công suất Servo Driver MSD_E10A hỗ trợ giải thuật PID phần cứng, bảo vệ quá dòng, quá áp và quá nhiệt.
- Module nguồn hạ áp DC-DC Buck công suất lớn (4.5–30V xuống 5V/12V, dòng liên tục 12A, hiệu suất chuyển đổi 95%).
- Tầng xử lý nhúng thời gian thực (Real-Time Embedded Layer):
- Vi điều khiển STM32F429ZI (Lõi ARM Cortex-M4, FPU phần cứng, 2MB Flash, 256KB SRAM, xung nhịp 180MHz).
- Cảm biến quán tính 6 trục (6-DOF IMU) MPU6050 kết nối qua bus I2C (tốc độ Fast Mode 400kHz).
- Giao tiếp Micro-ROS Agent trên Jetson TX2 qua cổng UART tốc độ cao (Baudrate 115,200 bps).
- Tầng tính toán thông minh & Điều hướng (High-Level Intelligence Layer):
- Máy tính nhúng Nvidia Jetson TX2 (Dual-Core Denver 2 + Quad-Core ARM Cortex-A57, 4GB 128-bit LPDDR4, 256-core GPU Pascal).
- Cảm biến quét khoảng cách 2D RPLidar A1 (Góc quét $360^\circ$, tầm quét $0.15\text{ m} \div 6\text{ m}$, tần số lấy mẫu 2000–8000Hz).
- Nền tảng hệ điều hành Ubuntu 20.04 LTS tích hợp ROS2 Foxy Fitzroy và Nav2.
+------------------------------------------------------------------------------------+
| ROS2 NAV2 PIPELINE |
| |
| +--------------------+ +---------------------+ +---------------------+ |
| | /scan (LaserScan) | ---> | Costmap 2D (Global)| ---> | Nav2 Global Planner | |
| | (RPLidar A1) | +---------------------+ | (NavFn / Dijkstra) | |
| +--------------------+ +----------+----------+ |
| | |
| +--------------------+ +---------------------+ v |
| | /tf, /tf_static | ---> | Costmap 2D (Local) | ---> +---------------------+ |
| | (Transform Tree) | +---------------------+ | Nav2 Local Control | |
| +--------------------+ | (DWB Controller) | |
| +----------+ |
| +--------------------+ | |
| | /odom (Odometry) | ---------------------------------------------+ |
| | (STM32F4 + IMU) | v |
| +--------------------+ +---------------------+ |
| | /cmd_vel (Twist msg)| |
| +----------+----------+ |
+----------------------------------------------------------------------|-------------+
| DDS / UART
v
+------------------------------------------------------------------------------------+
| STM32F429 FREERTOS TASKS |
| |
| +--------------------------------+ +--------------------------------------+ |
| | Task_MicroROS_Sub (Priority 3) | ---> | MsgQueue: Target Velocity (vx, wz) | |
| +--------------------------------+ +-------------------+------------------+ |
| | |
| +--------------------------------+ v |
| | Task_SensorFusion (Priority 4) | ---> +--------------------------------------+ |
| | Read Encoder + IMU @ 100Hz | | Task_Motor_PID_Control (Priority 5) | |
| +----------------+---------------+ | Inverse Kinematics -> PWM to MSD_E10 | |
| | +--------------------------------------+ |
| v |
| +--------------------------------+ |
| | Task_MicroROS_Pub (Priority 2) | ---> Publish /odom & /tf to Jetson TX2 |
| +--------------------------------+ |
+------------------------------------------------------------------------------------+
Phương pháp luận (Methodology)
Dự án áp dụng quy trình phát triển lặp theo khung Agile/Scrum gồm 5 giai đoạn chính kéo dài trong 16 tuần:
Tuần 1-3: Nghiên cứu lý thuyết & Thiết kế mô hình CAD trên SolidWorks 2019
Tuần 4-6: Gia công khung nhôm, lắp ráp phần cứng, kiểm thử mạch nguồn DC-DC & Driver
Tuần 7-9: Lập trình STM32F429 (FreeRTOS, PID motor, tính toán Odometry, I2C IMU MPU6050)
Tuần 10-12: Triển khai Micro-ROS, cấu hình ROS2 Foxy, Cartographer SLAM trên Jetson TX2
Tuần 13-14: Tích hợp Navigation2 Stack (AMCL, DWB Controller, Costmap tuning)
Tuần 15-16: Thực nghiệm đánh giá độ chính xác, tinh chỉnh sai số và hoàn thiện báo cáo
Đánh giá và giảm thiểu rủi ro (Risk Assessment & Mitigation)
- Rủi ro sụt áp và quá nhiệt: Dòng khởi động của 4 động cơ DC có thể gây sụt áp hệ thống vi điều khiển.
- Giải pháp: Tách riêng nguồn pin LiPo 3S 11.1V 4200mAh cấp cho motor qua mạch DC-DC 12A riêng; Jetson TX2 và STM32F429 sử dụng module ổn áp DC-DC LM2596 độc lập.
- Rủi ro trôi tọa độ tích lũy (Odometry Drift): Hiện tượng trượt bánh xe làm sai lệch vị trí ước lượng theo thời gian.
- Giải pháp: Kết hợp thuật toán lọc bù (Complementary Filter) dung hợp dữ liệu góc quay từ con quay hồi chuyển (Gyroscope) của IMU MPU6050 và số xung Encoder bánh xe.
Implementation và kết quả
Quá trình phát triển kỹ thuật
1. Nguyên lý đo khoảng cách của RPLidar A1
Cảm biến phát xung laser hồng ngoại bước sóng 785nm và ghi nhận thời gian phản xạ lại diode quang:
$$d = \frac{1}{2} \cdot t \cdot c$$
Trong đó:
- $d$: Khoảng cách từ cảm biến đến vật thể cản ($m$).
- $t$: Thời gian di chuyển của xung laser từ lúc phát đến lúc thu ($s$).
- $c$: Vận tốc ánh sáng ($c \approx 299,792,458\text{ m/s}$).
2. Giải thuật động học vi sai và tính toán Odometry
Mô hình toán học chuyển đổi vận tốc góc của 2 cụm bánh xe trái/phải ($v_L, v_R$) sang vận tốc dài tuyến tính $v$ và vận tốc góc xoay $\omega$ của tâm robot:
$$v = \frac{v_R + v_L}{2}, \quad \omega = \frac{v_R - v_L}{L}$$
Tọa độ vị trí $(x, y, \theta)$ của robot trong hệ quy chiếu odom sau khoảng thời gian $\Delta t$:
$$\Delta x = v \cdot \cos\left(\theta + \frac{\omega \cdot \Delta t}{2}\right) \cdot \Delta t$$
$$\Delta y = v \cdot \sin\left(\theta + \frac{\omega \cdot \Delta t}{2}\right) \cdot \Delta t$$
$$\Delta \theta = \omega \cdot \Delta t$$
Trong đó $L = 0.20\text{ m}$ là khoảng cách giữa hai vệt bánh xe.
/**
* @file motor_control_task.cpp
* @brief FreeRTOS Task for Real-Time Motor PID Speed Regulation on STM32F429
*/
#include "cmsis_os.h"
#include "stm32f4xx_hal.h"
#define PID_KP 1.85f
#define PID_KI 0.12f
#define PID_KD 0.04f
#define CONTROL_LOOP_PERIOD_MS 10
typedef struct {
float target_linear_x; // m/s
float target_angular_z; // rad/s
} RobotVelocityCmd;
extern osMessageQId q_cmd_velHandle;
void Task_MotorControl(void const * argument) {
TickType_t xLastWakeTime = xTaskGetTickCount();
RobotVelocityCmd cmd;
float current_rpm_left = 0.0f, current_rpm_right = 0.0f;
float error_left_prev = 0.0f, integral_left = 0.0f;
for(;;) {
// Nhận lệnh vận tốc mới nhất từ Micro-ROS qua Queue (Non-blocking)
if (xQueueReceive(q_cmd_velHandle, &cmd, 0) == pdPASS) {
// Tính toán vận tốc mong muốn cho từng bánh xe (Differential Drive)
float v_left_target = cmd.target_linear_x - (cmd.target_angular_z * 0.20f / 2.0f);
float v_right_target = cmd.target_linear_x + (cmd.target_angular_z * 0.20f / 2.0f);
// Đọc phản hồi thực tế từ Encoder
current_rpm_left = Read_Encoder_Left();
// Thuật toán điều khiển PID vận tốc số
float error_left = v_left_target - (current_rpm_left * 0.0034f);
integral_left += error_left * (CONTROL_LOOP_PERIOD_MS / 1000.0f);
float derivative_left = (error_left - error_left_prev) / (CONTROL_LOOP_PERIOD_MS / 1000.0f);
float output_pwm_left = (PID_KP * error_left) + (PID_KI * integral_left) + (PID_KD * derivative_left);
error_left_prev = error_left;
Set_Motor_PWM(LEFT_MOTOR_CHANNEL, output_pwm_left);
}
// Đảm bảo chu kỳ thực thi chính xác 10ms (100Hz)
vTaskDelayUntil(&xLastWakeTime, pdMS_TO_TICKS(CONTROL_LOOP_PERIOD_MS));
}
}
3. Cấu hình Dynamic Window Approach (DWB Local Planner) trong Nav2
Bộ điều khiển DWB đánh giá không gian vận tốc cho phép $(v, \omega) \in V_s \cap V_a \cap V_d$ thông qua hàm mục tiêu:
$$G(v, \omega) = \alpha \cdot \text{heading}(v, \omega) + \beta \cdot \text{dist}(v, \omega) + \gamma \cdot \text{velocity}(v, \omega)$$
- $\text{heading}(v, \omega)$: Mức độ hướng đầu xe về phía điểm mục tiêu.
- $\text{dist}(v, \omega)$: Khoảng cách từ quỹ đạo dự đoán tới chướng ngại vật gần nhất trên Costmap.
- $\text{velocity}(v, \omega)$: Khả năng duy trì vận tốc tiến tới lớn nhất để tối ưu thời gian.
Thử nghiệm và đánh giá thực nghiệm
Thực nghiệm được tiến hành tại sảnh và phòng thí nghiệm Khoa Kỹ thuật Máy tính (diện tích sàn $8.5\text{ m} \times 6.2\text{ m}$), thiết lập các kịch bản di chuyển không có vật cản và có vật cản tĩnh/động bất ngờ.
+-----------------------------------------------------------------------------+
| KẾT QUẢ VẼ BẢN ĐỒ VÀ ĐIỀU HƯỚNG |
| |
| [Bản đồ phòng thí nghiệm] [Quỹ đạo tự hành tránh vật cản] |
| ################################# ################################# |
| # # # [Goal B] # |
| # +---------+ # # ^ # |
| # | Bàn TN | +----+ # # | (Tránh cản) # |
| # +---------+ | Cột| # # (x)---/ # |
| # +----+ # # Vật cản # |
| # # # | # |
| # +---------+ # # | # |
| # | Tủ Lab | # # [Start A] # |
| ################################# ################################# |
| Độ phân giải bản đồ: 0.05m/pixel Sai số đích đến: dX=1.8cm, dY=2.1cm|
+-----------------------------------------------------------------------------+
| Tham số đo đạc thực nghiệm |
Kịch bản 1: Môi trường tĩnh không vật cản |
Kịch bản 2: Môi trường động (Thêm vật cản đột xuất) |
Sai số / Đánh giá đạt chuẩn |
| Quãng đường di chuyển đặt trước |
$5.00\text{ m}$ |
$5.00\text{ m}$ (Quãng đường né cản: $5.42\text{ m}$) |
Đạt kế hoạch |
| Thời gian hoàn thành quỹ đạo |
$12.8\text{ s}$ |
$15.4\text{ s}$ |
Vận tốc trung bình $0.39\text{ m/s}$ |
| Sai số vị trí cuối trục X ($\Delta X$) |
$1.2\text{ cm}$ |
$1.8\text{ cm}$ |
Ngưỡng cho phép $< 5.0\text{ cm}$ |
| Sai số vị trí cuối trục Y ($\Delta Y$) |
$1.5\text{ cm}$ |
$2.1\text{ cm}$ |
Ngưỡng cho phép $< 5.0\text{ cm}$ |
| Sai số góc xoay cuối ($\Delta \theta$) |
$1.8^\circ$ |
$2.6^\circ$ |
Ngưỡng cho phép $< 5.0^\circ$ |
| Thời gian tính lại quỹ đạo (Re-planning) |
N/A |
$48\text{ ms}$ |
Phản hồi né cản tức thì |
| Tần số vòng lặp điều khiển PID |
$100\text{ Hz}$ (Jitter $\pm 0.12\text{ ms}$) |
$100\text{ Hz}$ (Jitter $\pm 0.15\text{ ms}$) |
Đảm bảo tính tiền định RTOS |
Đổi mới và đóng góp
- Kiến trúc tích hợp ROS2 – RTOS phân tầng chuẩn công nghiệp: Khắc phục triệt để nhược điểm mất gói tin và trễ phi tuyến tính của mô hình ROS1 Arduino truyền thống. Việc sử dụng Micro-ROS giúp STM32F429 giao tiếp trực tiếp với mạng DDS như một node ROS2 chính thức mà không cần chuyển đổi định dạng trung gian qua Serial protocol tự tạo.
- Cải thiện 75% độ trễ điều khiển cấp thấp: Giảm thời gian phản hồi vòng lặp kín từ $45\text{ ms}$ (Arduino Mega) xuống dưới $2.5\text{ ms}$ trên STM32F429 nhờ cơ chế lập lịch ngắt ưu tiên (Preemptive Context Switch) của FreeRTOS.
- Độ ổn định định vị vượt trội với Google Cartographer: Xử lý đóng vòng lặp (Loop Closure Detection) tối ưu bằng thuật toán Branch-and-Bound, giảm thiểu sai số tích lũy bản đồ xuống dưới $1.5%$ trên diện tích phòng $100\text{ m}^2$.
- Đóng góp học thuật và giáo dục: Xây dựng bộ khung mã nguồn mẫu chuẩn cho các cuộc thi xe tự hành và học phần Hệ thống nhúng/Kỹ thuật Robot tại Trường Đại học Công nghệ Thông tin - ĐHQG TP.HCM.
Ứng dụng thực tế và triển khai
Các trường hợp ứng dụng thực tế
- Robot vận chuyển hàng hóa nội bộ (Intralogistics AGV): Tự động chuyên chở pallet linh kiện điện tử trong các nhà máy SMT với tải trọng thiết kế mở rộng lên tới 50kg.
- Robot khử khuẩn và phục vụ bệnh viện: Tự hành phun sương hóa chất diệt khuẩn hoặc giao thuốc theo danh sách phòng chỉ định dựa trên tính năng Waypoint Follower của Nav2.
- Robot tuần tra an ninh khép kín: Lập lịch tuần tra tự động theo khung giờ, quét laser phát hiện các thay đổi bất thường trong không gian nhà xưởng.
+-----------------------------------------------------------------------------+
| QUY TRÌNH TRIỂN KHAI VẬN HÀNH ROBOT |
| |
| [Bước 1: Khởi tạo phần cứng] |
| - Bật công tắc nguồn -> Mạch DC-DC cấp 5V/12V -> STM32F429 nạp RTOS Tasks |
| - Jetson TX2 khởi động Ubuntu 20.04 -> Tự động nạp daemon micro-ros-agent |
| |
| [Bước 2: Quét lập bản đồ môi trường (Mapping Mode)] |
| $ ros2 launch rplidar_ros rplidar.launch.py |
| $ ros2 launch cartographer_ros cartographer.launch.py |
| - Điều khiển xe bằng bàn phím quét kín không gian -> Lưu: $ map_saver_cli |
| |
| [Bước 3: Tự hành điều hướng (Navigation Mode)] |
| $ ros2 launch nav2_bringup bringup_launch.py map:=/path/to/lab_map.yaml |
| - Mở RViz2 trên Host PC -> Dùng công cụ "2D Nav Goal" gửi tọa độ đích |
| - Robot tự kích hoạt AMCL định vị -> DWB lập đường đi và tự động né cản |
+-----------------------------------------------------------------------------+
Hạn chế và hướng phát triển
Hạn chế kỹ thuật
- Cảm biến RPLidar A1 sử dụng chuẩn kết nối cơ khí quay truyền thống, tuổi thọ mắt laser bị giới hạn sau thời gian dài hoạt động liên tục.
- Hệ thống bánh xe cơ bản chưa trang bị hệ thống giảm chấn độc lập, dễ gây trượt nhẹ khi chuyển hướng gấp trên bề mặt sàn trơn bóng.
Hướng phát triển tiếp theo
- Nâng cấp phiên bản ROS 2 lên bản phân phối hỗ trợ dài hạn mới hơn (ROS 2 Humble Hawksbill / Iron Irwini).
- Thay thế cảm biến 2D LIDAR bằng cảm biến Solid-State LIDAR hoặc tích hợp thêm Camera chiều sâu 3D (Intel RealSense D435i) để nhận diện chướng ngại vật ở các tầm cao khác nhau.
- Triển khai thuật toán mở rộng lọc Kalman (Extended Kalman Filter - EKF thông qua package
robot_localization) kết hợp thêm dữ liệu từ cảm biến áp suất và định vị góc tuyệt đối IMU 9 trục.
Đối tượng hưởng lợi
- Sinh viên & Học viên chuyên ngành Kỹ thuật Máy tính, Tự động hóa, Cơ điện tử: Tiếp cận tài liệu thực chiến chuẩn xác về quy trình tích hợp giữa hệ điều hành máy tính nhúng (ROS2) và hệ điều hành thời gian thực vi điều khiển (RTOS).
- Kỹ sư phát triển Robot (Robotics Engineers): Mẫu thiết kế phần cứng tham khảo chuẩn xác, tách biệt tầng công suất và tầng logic, dễ dàng tùy biến module động cơ và công suất tải.
- Doanh nghiệp vừa và nhỏ (SMEs): Cung cấp giải pháp nền tảng robot tự hành chi phí thấp ($< 700\text{ USD}$), rút ngắn chu kỳ nghiên cứu & phát triển (R&D) sản phẩm thương mại từ 12 tháng xuống còn 3 tháng.
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áy tính nhúng hỗ trợ kiến trúc ARM64 chạy được Ubuntu 20.04/ROS2 Foxy (từ Nvidia Jetson Nano 4GB hoặc Raspberry Pi 4 trở lên) và một kit vi điều khiển 32-bit có tối thiểu 128KB Flash, 64KB RAM (như dòng STM32F4 series) hỗ trợ chuẩn giao tiếp UART tốc độ cao.
2. Sự khác biệt cốt lõi giữa ROS1 và ROS2 trong điều khiển robot tự hành?
ROS2 loại bỏ hoàn toàn roscore trung tâm và sử dụng chuẩn truyền thông công nghiệp DDS (Data Distribution Service), cho phép các nút mạng tự khám phá lẫn nhau (peer-to-peer discovery), hỗ trợ chuẩn bảo mật mạng DDS-Security và đảm bảo khả năng tương thích thời gian thực với phần cứng nhúng thông qua Micro-ROS.
3. Tại sao cần kết hợp cả STM32F429 chạy RTOS thay vì điều khiển motor trực tiếp từ Jetson TX2?
Linux trên Jetson TX2 là hệ điều hành đa nhiệm phi thời gian thực (non-real-time OS), độ trễ ngắt dao động lớn và không đảm bảo việc tạo xung PWM hay đọc xung Encoder với độ chính xác micro-giây. STM32F429 chạy FreeRTOS đảm bảo chu kỳ điều khiển động cơ chính xác $10\text{ ms} \pm 0.1\text{ ms}$, ngăn chặn hiện tượng giật động cơ và trôi odometry.
4. Hệ thống xử lý thế nào khi gặp vật cản không có trong bản đồ gốc?
Cảm biến RPLidar A1 liên tục cập nhật dữ liệu quét vào tầng Local Costmap của Nav2. Khi phát hiện vật cản mới, giải thuật DWB sẽ tính toán lại không gian vận tốc cho phép và tạo đường đi vòng qua vật thể trong vòng dưới 50ms. Nếu đường đi bị khóa hoàn toàn, chuỗi cây hành vi (Behavior Trees) sẽ kích hoạt trạng thái Recovery (xoay quét lại môi trường hoặc lùi lại).
5. Chi phí chế tạo phần cứng robot là bao nhiêu?
Tổng chi phí linh kiện gia công phần cứng, cảm biến LIDAR, kit vi điều khiển STM32F429, driver động cơ và máy tính nhúng Jetson TX2 Developer Kit dao động trong khoảng 14.500.000 – 16.000.000 VNĐ, tiết kiệm hơn 65% so với việc trang bị các bộ kit thương mại nhập khẩu cùng tính năng.
Kết luận
Khóa luận tốt nghiệp "Nghiên cứu, tích hợp ROS2 và RTOS cho robot tự hành" đã hiện thực hóa thành công một hệ thống robot AMR hoàn chỉnh từ thiết kế cơ khí 3D, mạch phân phối nguồn công suất, lập trình điều khiển mức thấp thời gian thực trên vi điều khiển STM32F429 (FreeRTOS) đến tầng giải thuật điều hướng thông minh cấp cao trên Nvidia Jetson TX2 (ROS2 Foxy, Cartographer, Nav2). Các kết quả đo đạc thực nghiệm với sai số định vị nhỏ hơn $2.5\text{ cm}$ và khả năng né tránh vật cản tức thì đã chứng minh tính khả thi, độ tin cậy và tiềm năng ứng dụng to lớn của kiến trúc phân tầng trong các giải pháp tự động hóa công nghiệp hiện đại.