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 đã đưa công nghệ tự động hóa và robot tự hành (Autonomous Mobile Robot - AMR) trở thành trụ cột quan trọng trong chuỗi cung ứng thông minh, sản xuất công nghiệp và dịch vụ y tế. Theo các báo cáo thị trường toàn cầu, ngành công nghiệp AMR đang đạt mức tăng trưởng kép hàng năm (CAGR) trên 18%, phản ánh nhu cầu cấp thiết về việc thay thế sức lao động nặng nhọc của con người trong các môi trường khắc nghiệt hoặc có nguy cơ lây nhiễm cao. Điển hình trong các đợt bùng phát dịch bệnh, các giải pháp robot khử khuẩn, vận chuyển hàng hóa thiết yếu và giám sát y tế (như các dòng robot của Viện PRATI hay hãng Mobile Industrial Robots - MIR) đã chứng minh giá trị thực tiễn to lớn.
Tuy nhiên, các hệ thống xe tự hành dẫn hướng truyền thống (Automated Guided Vehicles - AGV) bộc lộ nhiều hạn chế do phụ thuộc chặt chẽ vào hạ tầng cố định như đường kẻ vạch, băng từ hoặc mã QR dán trên sàn. Việc tái cấu trúc không gian di chuyển đòi hỏi chi phí lớn và thời gian dừng hệ thống dài. Ngược lại, các hệ thống AMR thương mại tích hợp công nghệ cao thường có giá thành quá đắt đỏ, cấu trúc phần mềm đóng, gây khó khăn cho việc nghiên cứu, tùy biến và triển khai tại các doanh nghiệp vừa và nhỏ (SME) ở Việt Nam.
Đồ án tốt nghiệp "Điều khiển và lập bản đồ cho robot di động hai bánh" được thực hiện bởi nhóm sinh viên ngành Hệ thống Nhúng và IoT, Khoa Điện - Điện tử, Trường Đại học Sư phạm Kỹ thuật TP. Hồ Chí Minh (HCMUTE), dưới sự hướng dẫn của TS. Phan Học, nhằm giải quyết bài toán cốt lõi này. Dự án tập trung nghiên cứu, thiết kế và chế tạo một mô hình robot di động vi sai giá thành tối ưu, ứng dụng nền tảng mã nguồn mở ROS (Robot Operating System) kết hợp cảm biến quét laser 2D để tự động định vị và dựng bản đồ môi trường thời gian thực.
+--------------------------------+
| PC / Workstation |
| (RViz 3D Visualization) |
+---------------+----------------+
| WiFi (ROS Master Network)
v
+------------------------------------------------------------------+
| RASPBERRY PI 4 MODEL B |
| - ROS Core / Master Node - /hector_mapping (SLAM Node) |
| - /rplidarNode (Laser Driver) - /serial_node (rosserial) |
+---------------+----------------------------------+---------------+
| USB / Serial | UART / USB
v v
+-----------------------+ +-----------------------+
| RPLiDAR C1 Sensor | | ARDUINO MEGA 2560 |
| (360-deg 2D Scanning) | | (Low-level Controller)|
+-----------------------+ +-----------+-----------+
| PWM / Direction / Int
v
+-----------------------+
| L298N Motor Driver |
+-----------+-----------+
| Motor Power / Feedback
v
+-----------------------+
| 2x DC Servo JGA25-370 |
| + AB Phase Encoders |
+-----------------------+
Mục tiêu cụ thể của dự án
- Thiết kế phần cứng: Chế tạo khung cơ khí 2 tầng vững chắc, cân bằng trọng tâm và tích hợp hệ thống phần cứng gồm vi điều khiển Arduino Mega 2560, máy tính nhúng Raspberry Pi 4 Model B, động cơ DC Servo JGA25-370 kèm bộ mã hóa vòng quay (Encoder) và cảm biến khoảng cách laser RPLiDAR C1.
- Xây dựng giải thuật điều khiển: Thiết lập phương trình động học vi sai và phát triển thuật toán điều khiển phản hồi vòng kín PID (Proportional-Integral-Derivative) để ổn định vận tốc bánh xe.
- Phát triển luồng truyền thông nhúng: Ứng dụng giao thức ROS Serial qua chuẩn giao tiếp UART (Universal Asynchronous Receiver-Transmitter) để trao đổi dữ liệu hai chiều thời gian thực giữa Arduino và Raspberry Pi.
- Triển khai thuật toán SLAM: Cấu hình và chạy gói thuật toán HectorSLAM (HectorMapping) nhằm quét dữ liệu đám mây điểm 2D từ LiDAR, tính toán ghép mẫu quét (Scan Matching) và xuất bản đồ lưới chiếm chỗ (Occupancy Grid Map).
- Hiển thị và kiểm chuẩn: Giám sát tư thế robot (pose), tọa độ Odometry và trực quan hóa bản đồ 2D trên không gian 3D của RViz, đánh giá sai số bản đồ so với môi trường thực tế.
Phương pháp tiếp cận và phạm vi
Dự án áp dụng phương pháp tiếp cận kiến trúc phân tầng (Hierarchical Architecture) tách biệt: tầng điều khiển cấp thấp (Low-level Control) trên vi điều khiển đảm bảo tính thời gian thực (Real-time Determinism) và tầng tính toán cấp cao (High-level Computation) trên hệ điều hành Linux/ROS phục vụ xử lý thuật toán SLAM phức tạp. Phạm vi nghiên cứu giới hạn trong không gian trong nhà (Indoor), mặt sàn phẳng, vật cản thẳng đứng nằm trong mặt phẳng quét của LiDAR và bỏ qua tác động của tải trọng biến thiên đột ngột.
Phân tích và thiết kế giải pháp
Phân tích hiện trạng
Trước khi thiết kế hệ thống, nhóm nghiên cứu đã phân tích các công nghệ dẫn hướng và lập bản đồ phổ biến trên thị trường để tìm ra giải pháp tối ưu về kỹ thuật và chi phí.
| Tiêu chí so sánh |
Hệ thống AGV truyền thống (Băng từ / Line) |
Robot công nghiệp AMR cao cấp (MiR100 / MiR250) |
Giải pháp đề xuất (Robot vi sai + HectorSLAM) |
| Cơ chế dẫn đường |
Cố định theo vạch từ, mã QR |
Tự do, SLAM đa cảm biến (LiDAR 3D + Camera AI) |
Tự do, SLAM laser 2D (RPLiDAR C1 + Scan Matching) |
| Chi phí triển khai |
Trung bình (Tốn chi phí dán vạch, bảo dưỡng sàn) |
Rất cao (> $15,000 - $30,000) |
Rất thấp (Dưới $300 cho toàn bộ mô hình) |
| Độ linh hoạt môi trường |
Kém, khó thay đổi lộ trình |
Rất cao, thích nghi môi trường biến động |
Cao, tự động tái tạo bản đồ khi thay đổi vật cản |
| Sự phụ thuộc vào Odometry |
Không yêu cầu SLAM |
Đòi hỏi phối hợp IMU, Wheel Odometry, Camera |
Không phụ thuộc vào Odometry bánh xe (Nhờ HectorSLAM) |
| Mức độ mở rộng phần mềm |
Thấp, hệ thống đóng của nhà sản xuất |
Đóng gói theo chuẩn công nghiệp (MiRFleet) |
Rất cao (Mã nguồn mở ROS, dễ tích hợp thêm Node) |
Phân loại yêu cầu hệ thống theo mô hình MoSCoW
- Must-have (Bắt buộc): Lập bản đồ 2D trong nhà không gian chưa biết; điều khiển vận tốc 2 bánh xe độc lập sử dụng PID; truyền nhận dữ liệu liên tục qua ROS Serial ở tốc độ tối thiểu 115200 bps; hiển thị dữ liệu quét laser và bản đồ trên RViz.
- Should-have (Cần có): Khả năng lọc nhiễu chùm tia laser từ RPLiDAR C1; cơ chế tính toán Odometry từ Encoder bánh xe để kiểm tra chéo với kết quả SLAM; thiết kế khung cơ khí 2 tầng chống rung lắc cho cảm biến.
- Could-have (Có thể thêm): Tích hợp cảm biến quán tính IMU (Inertial Measurement Unit) để bù góc nghiêng; giao diện điều khiển robot từ xa qua bàn phím (
teleop_twist_keyboard) trên nền mạng không dây.
- Won't-have (Tạm thời chưa triển khai): Lập bản đồ 3D ngoài trời; điều hướng tự động tránh vật cản động phức tạp với Navigation Stack DWA/TEB Local Planner.
Thiết kế hệ thống
Hệ thống được tổ chức thành hai khối chức năng phần cứng và phần mềm rõ ràng:
1. Khối phần cứng (Hardware Stack)
- Bộ tính toán trung tâm: Máy tính nhúng Raspberry Pi 4 Model B (4GB RAM), vi xử lý Broadcom BCM2711, Quad-core Cortex-A72 (ARM v8) 64-bit SoC @ 1.5GHz. Bo mạch chạy hệ điều hành Ubuntu/Debian tích hợp ROS.
- Bộ vi điều khiển cấp thấp: Arduino Mega 2560, vi điều khiển ATmega2560 (8-bit, 16MHz clock, 256KB Flash, 8KB SRAM, 4 cổng UART phần cứng), đảm nhận đọc xung Encoder ngắt ngoài và điều chế độ rộng xung (PWM - Pulse Width Modulation).
- Cảm biến quét laser 2D: RPLiDAR C1, ứng dụng công nghệ DToF/Triangulation, tần số quét 8-12Hz, góc quét $360^\circ$, tầm quét bán kính 0.05m đến 12m, độ phân giải góc $\le 1^\circ$, giao tiếp qua USB-UART Bridge.
- Cơ cấu chấp hành & Mạch công suất: 02 động cơ DC Servo JGA25-370 (12VDC, 130 RPM) tích hợp hộp giảm tốc và bộ mã hóa xung tương đối (Incremental Encoder) kênh AB; Module công suất mạch cầu H kép L298N chịu dòng liên tục 2A mỗi kênh.
- Hệ thống di chuyển & Nguồn: 02 bánh xe cao su đường kính $D = 65\text{ mm}$, 02 bánh xe đa hướng kim loại CY15A tạo thế thăng bằng 4 điểm; Khối pin Li-ion Panasonic NCR18650GA (3S 11.1V - 12.6V, dung lượng 3500mAh) cung cấp nguồn xả ổn định.
+-----------------------------------------------------------------------------------+
| ROS COMPUTATION GRAPH |
| |
| +------------------+ /scan (sensor_msgs/LaserScan) +-----------+ |
| | /rplidarNode |--------------------------------------------->| | |
| +------------------+ | | |
| | /hector_ | |
| +------------------+ /cmd_vel (geometry_msgs/Twist) | mapping | |
| | /teleop_keyboard |--------------------+ | (SLAM) | |
| +------------------+ | | | |
| v | | |
| +------------------+ | | |
| | /serial_node | +-----+-----+ |
| | (rosserial) | | |
| +--------+---------+ | |
| | | |
| | /feedback_wheel_speed | /map |
| v v |
| +----------------------+ +-----------+ |
| | Arduino Mega 2560 | | /rviz | |
| | (PID Motor Control) | | (3D GUI) | |
| +----------------------+ +-----------+ |
+-----------------------------------------------------------------------------------+
2. Kiến trúc luồng dữ liệu ROS (ROS Computation Graph)
Hệ thống phần mềm được module hóa thành các ROS Node độc lập giao tiếp qua cơ chế Publish/Subscribe Topics:
- Node
/rplidarNode: Đọc dữ liệu thô từ cổng USB /dev/ttyUSB0 và Publish thông điệp lên Topic /scan kiểu sensor_msgs/LaserScan.
- Node
/hector_mapping: Subscribe Topic /scan, chạy thuật toán Scan Matching tối ưu hóa Gauss-Newton để trích xuất tư thế robot trên hệ quy chiếu bản đồ /map $\rightarrow$ /base_link và Publish bản đồ lưới chiếm chỗ lên Topic /map kiểu nav_msgs/OccupancyGrid.
- Node
/serial_node: Cầu nối trung gian của package rosserial_python, kết nối Raspberry Pi với cổng nối tiếp /dev/ttyACM0 của Arduino Mega 2560 ở tốc độ Baud 115200 bps.
- Node
/rviz: Subscribe /map, /scan, /tf để dựng giao diện đồ họa giám sát không gian 2D/3D trực quan.
Phương pháp nghiên cứu và quy trình phát triển
Dự án được triển khai theo quy trình kỹ thuật lặp (Iterative Development) qua 4 giai đoạn chính:
[ Giai đoạn 1: Cơ khí & Điện tử ]
├── Thiết kế khung 2 tầng & Cân bằng trọng tâm
└── Đấu nối L298N, Arduino Mega 2560, Raspberry Pi 4 & RPLiDAR C1
│
▼
[ Giai đoạn 2: Điều khiển thời gian thực ]
├── Thiết lập mô hình động học vi sai (Differential Drive Kinematics)
└── Viết mã PID vòng kín trên Arduino, đọc Encoder kênh AB
│
▼
[ Giai đoạn 3: Tích hợp hệ thống ROS ]
├── Cấu hình ROS Serial qua giao tiếp UART 115200 bps
└── Thiết lập package HectorSLAM, định nghĩa cây biến đổi tọa độ (TF Tree)
│
▼
[ Giai đoạn 4: Thử nghiệm & Đánh giá ]
├── Kiểm chuẩn sai số Odometry tịnh tiến (40cm Forward/Backward)
└── Quét SLAM phòng thí nghiệm, đối chiếu kích thước thực địa vs RViz
Implementation và kết quả
Quá trình phát triển và thuật toán cốt lõi
1. Phương trình động học vi sai (Differential Drive Kinematics)
Robot di chuyển dựa trên việc điều khiển vận tốc độc lập của bánh trái ($V_L$) và bánh phải ($V_R$). Mọi chuyển động quay tức thời đều diễn ra quanh tâm quay tức thời ICC (Instantaneous Center of Curvature).
^ y_R
|
| +-------------------+
| | Robot Body |
[Left Wheel] | (Center) | [Right Wheel]
+---------+ +---------x---------> +---------+
| V_L |----------------| x_R ----------| V_R |
+---------+ | +---------+
<-------------------l------------------->
|
| R
v
(ICC)
Giả sử khoảng cách giữa hai tâm tiếp xúc của bánh xe là $l$, bán kính bánh xe là $r$, vận tốc dài trung bình $v$ và vận tốc góc $\omega$ của robot tại trọng tâm được tính bằng:
$$\nu = \frac{V_R + V_L}{2}$$
$$\omega = \frac{V_R - V_L}{l}$$
Khoảng cách từ trọng tâm robot đến tâm quay ICC là:
$$R = \frac{l}{2} \cdot \frac{V_R + V_L}{V_R - V_L}$$
Tại thời điểm $t + \Delta t$, tư thế mới của robot $(x_{t+\Delta t}, y_{t+\Delta t}, \theta_{t+\Delta t})^T$ được cập nhật theo quan hệ ma trận xoay quanh điểm ICC:
$$\begin{bmatrix} x_{t+\Delta t} \ y_{t+\Delta t} \ \theta_{t+\Delta t} \end{bmatrix} = \begin{bmatrix} \cos(\omega\Delta t) & -\sin(\omega\Delta t) & 0 \ \sin(\omega\Delta t) & \cos(\omega\Delta t) & 0 \ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x(t) - ICC_x \ y(t) - ICC_y \ \theta(t) \end{bmatrix} + \begin{bmatrix} ICC_x \ ICC_y \ \omega\Delta t \end{bmatrix}$$
2. Thuật toán điều khiển PID vòng kín trên Arduino
Bộ điều khiển PID liên tục tính toán độ lệch sai số giữa vận tốc đặt $SP$ (Set Point từ Topic /cmd_vel) và vận tốc thực tế $PV$ (Process Variable từ số xung đếm được qua ngắt Encoder). Tín hiệu điều khiển $u(t)$ xuất ra dưới dạng giá trị băm xung PWM:
$$u(t) = K_p e(t) + K_i \int_{0}^{t} e(\tau)d\tau + K_d \frac{de(t)}{dt}$$
Đoạn mã C++ xử lý ngắt Encoder và thuật toán PID vòng kín trên Arduino Mega 2560:
#include <ros.h>
#include <geometry_msgs/Twist.h>
// Định nghĩa chân phần cứng Arduino Mega 2560
const int IN1 = 5, IN2 = 6, ENA = 9; // Kênh động cơ Trái qua L298N
const int IN3 = 7, IN4 = 8, ENB = 10; // Kênh động cơ Phải qua L298N
const int ENC_L_A = 2, ENC_L_B = 4; // Ngắt Encoder Trái (INT0)
const int ENC_R_A = 3, ENC_R_B = 11; // Ngắt Encoder Phải (INT1)
volatile long left_pulses = 0, right_pulses = 0;
double target_v_left = 0.0, target_v_right = 0.0;
double current_v_left = 0.0, current_v_right = 0.0;
// Các hệ số vi tích phân tỉ lệ PID
const double Kp = 1.85, Ki = 0.45, Kd = 0.08;
double err_integral_L = 0.0, last_err_L = 0.0;
double err_integral_R = 0.0, last_err_R = 0.0;
void countLeftPulses() {
if (digitalRead(ENC_L_B) == HIGH) left_pulses++;
else left_pulses--;
}
void countRightPulses() {
if (digitalRead(ENC_R_B) == HIGH) right_pulses++;
else right_pulses--;
}
int computePID(double target, double current, double &integral, double &last_err) {
double error = target - current;
integral += error * 0.05; // dt = 50ms
double derivative = (error - last_err) / 0.05;
last_err = error;
double output = (Kp * error) + (Ki * integral) + (Kd * derivative);
return constrain((int)output, -255, 255);
}
void motorControl(int pwm_L, int pwm_R) {
// Điều khiển kênh Trái
if (pwm_L >= 0) {
digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW);
analogWrite(ENA, pwm_L);
} else {
digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH);
analogWrite(ENA, -pwm_L);
}
// Điều khiển kênh Phải
if (pwm_R >= 0) {
digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW);
analogWrite(ENB, pwm_R);
} else {
digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH);
analogWrite(ENB, -pwm_R);
}
}
3. Thuật toán lập bản đồ HectorSLAM (Scan Matching)
Khác với thuật toán Gmapping truyền thống vốn đòi hỏi dữ liệu Odometry chính xác cao từ bánh xe, HectorMapping tận dụng tốc độ quét cao của chùm tia laser RPLiDAR C1. Thuật toán căn chỉnh đám mây điểm hiện tại với bản đồ lưới chiếm chỗ đã xây dựng trước đó bằng phương pháp tối ưu hóa phi tuyến Gauss-Newton:
$$\xi^* = \arg\min_{\xi} \sum_{i=1}^{n} \left[ 1 - M\left( \mathbf{S}_i(\xi) \right) \right]^2$$
Trong đó:
- $\xi = (p_x, p_y, \psi)^T$ là vector tư thế robot cần ước lượng.
- $\mathbf{S}_i(\xi)$ là tọa độ không gian thực của điểm quét thứ $i$ khi chiếu theo tư thế $\xi$.
- $M(\mathbf{S}_i(\xi))$ là giá trị hàm chiếm chỗ nội suy song tuyến (Bilinear Interpolation) tại điểm đó trên bản đồ lưới.
Thử nghiệm và đánh giá thực nghiệm
Hệ thống robot được thử nghiệm thực tế tại phòng nghiên cứu với mặt sàn gạch men kích thước $6.0\text{ m} \times 4.5\text{ m}$, có bố trí các chướng ngại vật dạng hình hộp thẳng đứng.
+-------------------------------------------------------------+
| KHÔNG GIAN THỰC ĐỊA |
| |
| |<----------------------- 6.00 m ------------------------->|
| +-------------------------------------------------------+ -+-
| | | ^
| | | |
| | +---------------+ | |
| | | Vật cản hộp | | |
| | | (Obstacle) | [Robot Start] | 4.50 m
| | +---------------+ o | |
| | <---- 1.45 m ---> | | |
| | (Khoảng cách đo) v | |
| | | v
| +-------------------------------------------------------+ -+-
| |
+-------------------------------------------------------------+
1. Kiểm chuẩn hệ trục tọa độ Odometry
Robot được lập trình thực hiện hai kịch bản di chuyển độc lập nhằm đánh giá độ trượt của cơ cấu bánh xe:
- Kịch bản 1 (Tiến thẳng 40cm): Robot tịnh tiến theo trục X một đoạn danh định $40.0\text{ cm}$. Giá trị đo đạc phản hồi thực tế đạt $39.2\text{ cm}$, sai số tịnh tiến tuyệt đối là $0.8\text{ cm}$ (Tương đương sai số tương đối $2.0%$).
- Kịch bản 2 (Lùi thẳng 40cm): Robot lùi về vị trí ban đầu một đoạn danh định $40.0\text{ cm}$. Giá trị thực tế đo được đạt $39.5\text{ cm}$, sai số tương đối đạt $1.25%$.
2. Đánh giá độ chính xác của bản đồ lập bởi HectorSLAM
Sau khi điều khiển robot di chuyển quét toàn bộ không gian phòng thí nghiệm, bản đồ Occupancy Grid Map xuất ra từ RViz được so sánh với kích thước đo đạc thực tế bằng thước laser cầm tay:
| Đại lượng kiểm chuẩn |
Kích thước thực tế ($D_{\text{real}}$) |
Đo đạc từ RViz ($D_{\text{rviz}}$) |
Sai số tuyệt đối ($\Delta D$) |
Tỷ lệ sai số (%) |
| Chiều ngang phòng ($X$) |
$6.00\text{ m}$ |
$6.08\text{ m}$ |
$+0.08\text{ m}$ |
$+1.33%$ |
| Chiều dọc phòng ($Y$) |
$4.50\text{ m}$ |
$4.42\text{ m}$ |
$-0.08\text{ m}$ |
$-1.77%$ |
| Khoảng cách từ vật cản đến tường |
$1.45\text{ m}$ |
$1.42\text{ m}$ |
$-0.03\text{ m}$ |
$-2.06%$ |
| Bề dày vật cản kiểm chuẩn |
$0.50\text{ m}$ |
$0.49\text{ m}$ |
$-0.01\text{ m}$ |
$-2.00%$ |
Bản đồ xuất ra thể hiện rõ các đường bao vách tường liền mạch, không bị hiện tượng méo lệch góc (angular distortion) hay nhân đôi tường (ghost walls) nhờ khả năng hội tụ nhanh của thuật toán Scan Matching trên RPLiDAR C1.
Đổi mới và đóng góp
- Ứng dụng giải thuật HectorSLAM độc lập với trượt cơ khí: Đa số các nghiên cứu robot sinh viên trước đây sử dụng thuật toán Gmapping (vốn dựa trên bộ lọc hạt Rao-Blackwellized Particle Filter). Khi bánh xe bị trượt trên bề mặt trơn (gạch men, sàn gỗ bóng), sai số tích lũy Odometry làm bản đồ bị xoay góc nghiêm trọng. Việc làm chủ và cấu hình thành công HectorSLAM giúp robot xây dựng bản đồ hoàn hảo chỉ dựa vào tần số quét cao của LiDAR, loại bỏ $100%$ ảnh hưởng tiêu cực của hiện tượng trượt bánh.
- Kiến trúc phần cứng mở phân cấp chi phí thấp: Dự án đã chứng minh khả năng thay thế các bộ điều khiển công nghiệp đắt tiền bằng sự kết hợp tối ưu giữa máy tính nhúng giá rẻ Raspberry Pi 4 Model B và vi điều khiển Arduino Mega 2560, đưa tổng chi phí hoàn thiện sản phẩm xuống mức dưới $300 (tiết kiệm hơn $90%$ so với việc mua một khung gầm thương mại tích hợp SLAM).
- Module hóa phần mềm trên nền tảng ROS Standard: Toàn bộ hệ thống được đóng gói thành các ROS Package chuẩn hóa, tuân thủ nghiêm ngặt cây biến đổi tọa độ TF (
map $\rightarrow$ odom $\rightarrow$ base_footprint $\rightarrow$ base_link $\rightarrow$ laser_link), sẵn sàng làm nền tảng mở rộng để tích hợp các module tự hành cấp cao hơn như Navigation Stack hay AI Computer Vision.
Ứng dụng thực tế và triển khai
Kịch bản ứng dụng thực tiễn
- Y tế và Phòng dịch: Triển khai vận chuyển thuốc men, suất ăn dinh dưỡng và tài liệu y tế trong các khu cách ly bệnh viện truyền nhiễm, hạn chế tối đa sự tiếp xúc trực tiếp giữa nhân viên y tế và nguồn lây nhiễm.
- Logistics trong kho hàng SME: Hỗ trợ tuần tra kiểm kê hàng hóa, vẽ lại bản đồ kho bãi khi có sự thay đổi cách sắp xếp pallet mà không cần cải tạo nền nhà xưởng.
- Dịch vụ và Nhà hàng: Tích hợp khay chở đồ ăn, tự động xác lập lộ trình phục vụ trong không gian quán ăn có mặt bằng phẳng.
+---------------------------------------+
| KHO HÀNG SME |
+-------------------+-------------------+
|
+-------------------------+-------------------------+
| |
v v
+-------------------------------------+ +-------------------------------------+
| GIAI ĐOẠN 1: MAPPING | | GIAI ĐOẠN 2: DELIVERY |
| - RPLiDAR C1 quét 360 độ | | - Đọc bản đồ tĩnh /map |
| - HectorSLAM tạo Occupancy Grid | | - Điều khiển PID ổn định vận tốc |
| - Lưu trữ map.yaml & map.pgm | | - Vận chuyển pallet / đồ y tế |
+-------------------------------------+ +-------------------------------------+
Phân tích hiệu quả kinh tế (ROI Analysis)
- Chi phí chế tạo nguyên mẫu: ~ 6.500.000 VNĐ (Bao gồm Raspberry Pi 4 4GB, Arduino Mega 2560, RPLiDAR C1, khung cơ khí, động cơ Encoder, mạch công suất L298N và Pin Li-ion).
- So sánh hiệu quả nhân công: Tại một nhà kho nhỏ cần 1 nhân sự chuyên chở hàng nội bộ (chi phí lương trung bình 8.000.000 VNĐ/tháng), việc ứng dụng 02 robot tự hành vận chuyển có thể thu hồi vốn đầu tư (ROI) chỉ sau 1.5 đến 2 tháng vận hành.
Hạn chế và hướng phát triển
Hạn chế kỹ thuật hiện tại
- Mặt phẳng cảm biến 2D hạn chế: Cảm biến RPLiDAR C1 chỉ quét trên một mặt phẳng phẳng cắt ngang cố định. Các vật cản thấp hơn sàn quét (dây điện, bậc tam cấp) hoặc nhô ra từ trên cao (mặt bàn nhô ra ngoài chân bàn) không thể được phát hiện.
- Tổn hao công suất mạch điều khiển: Driver cầu H L298N sử dụng transistor BJT có sụt áp nội lớn (khoảng 1.8V - 2V), sinh nhiệt cao và làm giảm hiệu suất sử dụng năng lượng của khối pin Li-ion.
- Chưa có cảm biến bù nghiêng: Thiếu cảm biến quán tính IMU 9-DOF dẫn đến việc thuật toán SLAM dễ bị mất dấu nếu robot di chuyển qua gờ giảm tốc làm cảm biến bị nghiêng đột ngột.
Hướng phát triển tiếp theo
- Nâng cấp phần cứng: Thay thế driver L298N bằng driver MOSFET hiệu suất cao (như TB6612FNG hoặc VNH2SP30) để nâng cao hiệu suất năng lượng thêm $25%$.
- Tích hợp cảm biến sâu 3D: Lắp đặt thêm camera RGB-D (Intel RealSense D435i hoặc Orbbec Astra) để nhận dạng chướng ngại vật 3 chiều và tích hợp thuật toán RTAB-Map.
- Chuyển đổi nền tảng ROS 2: Nâng cấp toàn bộ hệ thống lên ROS 2 (Humble / Iron) để tận dụng cơ chế phân tán DDS (Data Distribution Service) thời gian thực và quản lý đa robot (Multi-agent Fleet Management).
Đối tượng hưởng lợi
- Sinh viên ngành Hệ thống Nhúng, IoT và Cơ điện tử: Cung cấp tài liệu tham khảo chi tiết, rõ ràng từ mô hình động học, cấu hình ROS Serial đến thuật toán HectorSLAM, rút ngắn thời gian làm quen với hệ điều hành ROS.
- Kỹ sư và Lập trình viên Robotics: Nắm bắt mẫu thiết kế (Design Pattern) tách biệt tầng điều khiển vòng kín thời gian thực (Arduino C++) và tầng tính toán SLAM (Linux Python/C++).
- Doanh nghiệp vừa và nhỏ (SME): Có được bản thiết kế kiến trúc hoàn chỉnh để phát triển các dòng AMR nội địa phục vụ công tác vận chuyển nội bộ với chi phí tối ưu nhất.
Câu hỏi thường gặp
1. Yêu cầu cấu hình tối thiểu để triển khai hệ thống là gì?
Máy tính nhúng trên robot cần tối thiểu Raspberry Pi 4 (2GB RAM trở lên, khuyến nghị bản 4GB) chạy Ubuntu MATE 20.04 và ROS Noetic. Máy tính trạm giám sát (PC) cần card mạng WiFi cùng lớp mạng LAN, RAM 8GB trở lên để render giao diện đồ họa RViz mượt mà.
2. Tại sao đồ án chọn HectorSLAM thay vì Gmapping?
Gmapping phụ thuộc chặt chẽ vào thông tin Odometry từ bánh xe để làm xấp xỉ ban đầu cho bộ lọc hạt. Trong điều kiện bánh xe bị trượt trên sàn bóng hoặc mất xung encoder, bản đồ Gmapping sẽ bị méo. HectorSLAM sử dụng kỹ thuật Scan Matching đa độ phân giải với độ chính xác cao trực tiếp từ đám mây điểm của LiDAR C1, cho phép dựng bản đồ chuẩn xác ngay cả khi không có Odometry.
3. Làm cách nào để xử lý độ trễ truyền thông UART giữa Raspberry Pi và Arduino?
Cần cấu hình tốc độ Baudrate của cổng nối tiếp lên mức 115200 bps (thay vì 9600 bps mặc định). Đồng thời, tối ưu hóa kích thước thông điệp truyền nhận trong rosserial, chỉ gửi dữ liệu vận tốc danh định /cmd_vel và phản hồi xung encoder theo chu kỳ ngắt timer $50\text{ ms}$ (tần số $20\text{ Hz}$).
4. Thời lượng hoạt động liên tục của robot là bao lâu?
Với khối pin Li-ion 3S (11.1V - 12.6V, 3500mAh), công suất tiêu thụ trung bình của hệ thống khi chạy đầy tải (Raspberry Pi 4, RPLiDAR C1 quay 10Hz, 2 động cơ DC Servo hoạt động liên tục) là khoảng $15\text{W} - 18\text{W}$, cho phép robot vận hành liên tục từ 2.0 đến 2.5 giờ cho mỗi lần sạc đầy.
5. Chi phí linh kiện và khả năng bảo trì hệ thống như thế nào?
Toàn bộ linh kiện phần cứng đều là các module công nghiệp phổ thông, dễ dàng tìm mua và thay thế trên thị trường Việt Nam. Mã nguồn mở giúp việc bảo trì, cập nhật thuật toán hoặc nâng cấp phần cứng diễn ra linh hoạt mà không phụ thuộc vào bất kỳ nhà cung cấp độc quyền nào.
Kết luận
Đồ án tốt nghiệp "Điều khiển và lập bản đồ cho robot di động hai bánh" của nhóm sinh viên Trường Đại học Sư phạm Kỹ thuật TP. Hồ Chí Minh đã hiện thực hóa thành công một hệ thống robot tự hành vi sai hoàn chỉnh. Dự án giải quyết xuất sắc các mắt xích kỹ thuật trọng yếu: từ tính toán động học vi sai, thiết kế bộ điều khiển PID vòng kín ổn định trên vi điều khiển Arduino Mega 2560, thiết lập giao tiếp dữ liệu thời gian thực qua ROS Serial, cho đến việc ứng dụng giải thuật HectorSLAM trên máy tính nhúng Raspberry Pi 4 để tạo lập bản đồ 2D chính xác cao với cảm biến RPLiDAR C1.
Kết quả thực nghiệm khẳng định bản đồ lập được có sai số kích thước dưới $2.5%$ so với thực địa, chứng minh tính khả thi và độ tin cậy vượt trội của mô hình. Đây không chỉ là tài liệu học thuật giá trị cho sinh viên và kỹ sư ngành Kỹ thuật Nhúng - Robotics, mà còn là bước đệm vững chắc hướng tới thương mại hóa các dòng xe tự hành AMR "Made in Vietnam" hiệu năng cao, giá thành hợp lý cho các doanh nghiệp trong kỷ nguyên số.