Giới thiệu dự án
Trong kỷ nguyên tự động hóa công nghiệp 4.0 và chuyển đổi số ngành dịch vụ ăn uống (F&B), việc ứng dụng robot tự hành (Autonomous Mobile Robot - AMR) phục vụ tại nhà hàng đang trở thành xu hướng tất yếu. Theo các báo cáo thị trường dịch vụ khách hàng, chi phí nhân sự chiếm tới 30-35% tổng chi phí vận hành của một nhà hàng truyền thống, đồng thời tình trạng quá tải trong giờ cao điểm dẫn đến sai sót khi phục vụ bàn lên tới 12-15%. Các mô hình robot dò line (line-following AGV) truyền thống bộc lộ nhược điểm cố hữu: thiếu tính linh hoạt, phụ thuộc vào hạ tầng ray từ/vạch kẻ sàn cố định gây mất mỹ quan và không thể tự thích ứng khi gặp chướng ngại vật động.
Đồ án/khóa luận tốt nghiệp kỹ sư ngành Kỹ thuật Máy tính (Trường Đại học Công nghệ Thông tin - ĐHQG-HCM) với đề tài "Nghiên cứu và xây dựng mô hình robot phục vụ nhà hàng" (Research and Build a Restaurant Serving Robot) được thực hiện bởi nhóm tác giả Nguyễn Ngọc Thảo và Danh Quốc Hào dưới sự hướng dẫn của Th.S Phan Đình Duy, nhằm giải quyết triệt để bài toán tự động hóa vận chuyển thức ăn trong không gian nhà hàng không cấu trúc bằng công nghệ điều hướng thông minh.
+-------------------------------------------------------------------------+
| JETSON NANO |
| +-------------+ +-------------------+ +-----------------------+ |
| | Hector SLAM | -> | ROS Navigation | -> | Move Base | |
| | (2D Mapping)| | (Global/Local) | | (Path Planner) | |
| +-------------+ +-------------------+ +-----------------------+ |
| ^ ^ | |
| | /scan | /odom_combined v /cmd_vel |
+---------|---------------------|-------------------------|---------------+
| | |
+---------|----------+ +------|-------------+ +-------v---------------+
| RPLIDAR A1 (Laser) | | robot_pose_ekf | | ARDUINO UNO R3 |
| 360 Deg / 12m Scan | | (EKF: IMU + Odom) | | (Rosserial Node) |
+--------------------+ +--------------------+ +-----------------------+
^ ^ | PWM / DIR
| | v
+----------+ +------+------+ +--------------------+
| MPU6050 | | JBG37 Motor | | Driver XY-160D |
| (6-DOF) | | Encoders | | (Dual H-Bridge) |
+----------+ +-------------+ +--------------------+
Mục tiêu dự án
- Thiết kế phần cứng cơ khí & điện tử: Xây dựng mô hình robot vi sai (Differential Drive Robot) nhiều tầng với khay chứa thức ăn, tải trọng ổn định, tích hợp máy tính nhúng NVIDIA Jetson Nano A02 và vi điều khiển ATmega328P (Arduino Uno R3).
- Xây dựng bản đồ môi trường 2D thời gian thực: Ứng dụng thuật toán Hector SLAM kết hợp cảm biến quét laser 360° RPLidar A1 để lập bản đồ độ phân giải cao mà không phụ thuộc vào hệ thống odometry ban đầu.
- Triển khai ROS Navigation Stack: Tích hợp bộ định vị AMCL, bộ lọc Kalman mở rộng (
robot_pose_ekf), hoạch định đường đi toàn cục (global_planner) và cục bộ (local_planner) thông qua node move_base.
- Phát triển giao diện điều khiển đa nền tảng: Xây dựng Web Application thông qua Flask Server kết hợp thư viện
roslibjs và công cụ rosbridge giao tiếp WebSocket hai chiều, cho phép nhân viên gọi phục vụ theo bàn hoặc điều khiển thủ công bằng Virtual Joystick (nipplejs).
Phạm vi và giới hạn nghiên cứu
- Phạm vi hoạt động: Môi trường trong nhà (Indoor), mặt sàn phẳng, không có bậc thang hoặc độ dốc lớn hơn 5°.
- Phạm vi cảm biến: Quét vật cản trong bán kính từ 0.15m đến 12m trên mặt phẳng 2D ngang thân robot.
- Giới hạn kỹ thuật: Hệ thống chưa trang bị cảm biến độ sâu 3D (RGB-D Camera) để quét vật cản nằm ngoài mặt phẳng quét laser của LiDAR (dưới 15cm hoặc trên 30cm).
Phân tích và thiết kế giải pháp
Phân tích hiện trạng
Hiện nay, các giải pháp robot phục vụ trên thị trường và trong nghiên cứu được phân chia thành ba nhóm chính:
| Tiêu chí so sánh |
Robot dò Line (AGV Line Follower) |
Robot thương mại cao cấp (KEENON / Pudu) |
Giải pháp đề xuất (ROS AMR WaiterBot) |
| Công nghệ định vị |
Cảm biến quang / Từ tính bám vạch |
LiDAR 3D + Visual SLAM đa cảm biến |
2D LiDAR Scan-matching + EKF Fusion |
| Tính linh hoạt bản đồ |
Kém (phải dán lại vạch khi đổi bàn) |
Rất cao (lập bản đồ động qua Cloud) |
Cao (quét lại map 2D qua Hector SLAM) |
| Tránh vật cản động |
Dừng khẩn cấp khi chạm cảm biến |
Tính toán né vật cản đa hướng |
Tự động đổi quỹ đạo qua Dynamic Costmap |
| Chi phí chế tạo |
Rất thấp (< 3.000.000 VNĐ) |
Rất cao (150.000.000 - 300.000.000 VNĐ) |
Tối ưu (< 12.000.000 VNĐ) |
| Khả năng tùy biến |
Thấp |
Đóng gói kín (Proprietary) |
Mã nguồn mở hoàn toàn (ROS Open-Source) |
Yêu cầu hệ thống theo mô hình MoSCoW
- Must have (Bắt buộc): Lập bản đồ 2D chính xác (sai số < 5cm), tự điều hướng đến tọa độ bàn được chọn từ giao diện web, tránh vật cản tĩnh và động theo thời gian thực, truyền nhận vận tốc qua chủ đề
/cmd_vel.
- Should have (Nên có): Bộ lọc EKF kết hợp IMU MPU6050 và Encoder bánh xe để triệt tiêu trôi dạt tọa độ (Odometry Drift), Virtual Joystick điều khiển từ xa với độ trễ < 50ms.
- Could have (Có thể có): Quản lý hàng đợi nhiều bàn (multi-goal queuing), tự động phát âm thanh thông báo khi tới bàn.
- Won't have (Chưa thực hiện): Leo dốc/cầu thang, cánh tay robot tự gắp đĩa thức ăn đặt lên bàn khách.
Thiết kế hệ thống
Kiến trúc phần cứng (Hardware Architecture)
- Bộ xử lý trung tâm (Central Processing Unit): NVIDIA Jetson Nano Developer Kit Carrier Board A02 (CPU Quad-Core ARM Cortex-A57 @ 1.43 GHz, GPU NVIDIA Maxwell 128-core, 4GB 64-bit LPDDR4, hiệu năng xử lý 472 GFLOPS, công suất tiêu thụ 5W-10W).
- Bộ điều khiển phụ cấp thấp (Low-level Controller): Arduino Uno R3 (Vi điều khiển ATmega328P 8-bit, xung nhịp 16 MHz, 14 chân Digital I/O, 6 kênh PWM, kết nối với Jetson Nano qua USB-UART giao thức
rosserial).
- Cảm biến quét môi trường (LiDAR): SLAMTEC RPLIDAR A1 (Quét laser 360°, tầm quét 0.15m - 12m, tần số lấy mẫu 8000 samples/s, tốc độ quay quét 5.5 Hz - 10 Hz, giao tiếp UART 115200 bps).
- Cảm biến quán tính (IMU): GY-521 MPU6050 6-DOF (Tích hợp con quay hồi chuyển 3 trục dải đo $\pm 250^\circ/\text{s} - \pm 2000^\circ/\text{s}$ và gia tốc kế 3 trục dải đo $\pm 2\text{g} - \pm 16\text{g}$, giao tiếp qua I2C bus).
- Cơ cấu truyền động (Actuators): 02 Động cơ DC giảm tốc JBG37 (Điện áp 12VDC, dòng tải max 3A, tỉ số truyền hộp số $1:33$, tốc độ không tải trục chính 303 RPM, tích hợp Hall Encoder đĩa từ 11 xung/kênh AB tạo ra $11 \times 33 = 363$ xung/vòng).
- Mạch điều khiển công suất (Motor Driver): XY-160D Dual H-Bridge MOSFET Driver (Công suất cực đại 160W/kênh, dải điện áp $7\text{V} - 24\text{VDC}$, tần số điều khiển PWM hỗ trợ lên tới 10 kHz, cách ly quang Optocoupler và bảo vệ chống đột biến điện áp TVS/ESD).
+---------------------------------------------------------------------------------+
| ROS NAVIGATION STACK |
| |
| +--------------------+ +-----------------------------------------------+ |
| | /map_server | | move_base | |
| | (/map topic) | ---> | +------------------+ +------------------+ | |
| +--------------------+ | | global_costmap | | global_planner | | |
| | | (Static Map) | | (NavFn / A*) | | |
| +--------------------+ | +------------------+ +------------------+ | |
| | amcl | ---> | +------------------+ +------------------+ | |
| | (/particlecloud) | | | local_costmap | | local_planner | | |
| +--------------------+ | | (Obstacle Layer)| | (TrajectoryRoll)| | |
| | +------------------+ +------------------+ | |
| +--------------------+ +-----------------------------------------------+ |
| | robot_pose_ekf | | |
| | (Fused Odometry) | ----------------------------+ |
| +--------------------+ v |
| /cmd_vel |
+---------------------------------------------------|-----------------------------+
v
+----------------------------------------+
| Serial Node |
| (rosserial_python -> Arduino Firmware) |
+----------------------------------------+
Động học mô hình robot vi sai (Differential Drive Kinematics)
Xét robot có hai bánh chủ động đường kính $r$, khoảng cách giữa hai bánh là $L$. Vận tốc dài $v$ và vận tốc góc $\omega$ của robot trong hệ tọa độ cục bộ liên hệ với vận tốc góc của bánh phải $\omega_R$ và bánh trái $\omega_L$ theo hệ phương trình động học:
$$v = \frac{r (\omega_R + \omega_L)}{2}$$
$$\omega = \frac{r (\omega_R - \omega_L)}{L}$$
Tọa độ vị trí $(x, y, \theta)$ của robot trong hệ tọa độ toàn cục tại thời điểm $k$ được cập nhật từ trạng thái $k-1$ sau khoảng thời gian $\Delta t$:
$$x_k = x_{k-1} + v \cdot \cos(\theta_{k-1} + \frac{\omega \cdot \Delta t}{2}) \cdot \Delta t$$
$$y_k = y_{k-1} + v \cdot \sin(\theta_{k-1} + \frac{\omega \cdot \Delta t}{2}) \cdot \Delta t$$
$$\theta_k = \theta_{k-1} + \omega \cdot \Delta t$$
Cấu trúc cây biến đổi tọa độ (TF Tree Structure)
Hệ thống thiết lập phân cấp khung tọa độ chuẩn ROS:
map $\rightarrow$ odom $\rightarrow$ base_footprint $\rightarrow$ base_link $\rightarrow$ laser_link & imu_link.
Trong đó:
base_link đặt tại tâm hình học của trục bánh xe vi sai.
base_laser được cấu hình tịnh tiến theo trục Z: $(x=0, y=0, z=0.07\text{ m})$ so với base_link.
- Node
robot_pose_ekf chịu trách nhiệm phát sóng biến đổi odom $\rightarrow$ base_footprint dựa trên dữ liệu hợp nhất đa cảm biến.
Methodology
Quy trình phát triển dự án tuân theo mô hình V-Model lặp kết hợp kỹ thuật Robot Software Engineering tiêu chuẩn:
[Phân tích yêu cầu] ------------------------------> [Kiểm thử tích hợp & Acceptance]
| ^
[Thiết kế CAD 3D SolidWorks] ---------------------> [Kiểm thử cơ khí & Tải trọng]
| ^
[Thiết kế kiến trúc ROS Nodes] ---------------> [Kiểm thử Navigation & Tránh cản]
| ^
+---> [Lập trình Firmware & Embedded ROS Node] -----------+
- Quản lý rủi ro (Risk Mitigation): Hiện tượng trượt bánh cơ học (Wheel Slip) được triệt tiêu bằng cách tích hợp dữ liệu góc quay từ con quay hồi chuyển Gyroscope của MPU6050 vào thuật toán EKF. Nhiễu điện áp xung ngược từ động cơ DC được cách ly hoàn toàn qua mạch XY-160D với Opto và diode chặn TVS.
Implementation và kết quả
Development process
1. Lập trình vi điều khiển Arduino xử lý xung Encoder và Motor Control
Module nhúng thu thập tín hiệu ngắt từ 2 kênh encoder, tính toán số tick và điều khiển động cơ qua xung PWM dựa trên giao tiếp rosserial_arduino:
#include <ros.h>
#include <geometry_msgs/Twist.h>
#include <std_msgs/Int16.h>
ros::NodeHandle nh;
std_msgs::Int16 left_ticks_msg;
std_msgs::Int16 right_ticks_msg;
ros::Publisher pub_left_ticks("/left_ticks", &left_ticks_msg);
ros::Publisher pub_right_ticks("/right_ticks", &right_ticks_msg);
volatile long left_encoder_ticks = 0;
volatile long right_encoder_ticks = 0;
// Interrupt Service Routines for Encoders
void leftEncoderISR() {
left_encoder_ticks++;
}
void rightEncoderISR() {
right_encoder_ticks++;
}
void cmdVelCallback(const geometry_msgs::Twist& cmd_msg) {
float linear_x = cmd_msg.linear.x;
float angular_z = cmd_msg.angular.z;
// Differential drive inverse kinematics (Wheel radius: r, Track width: L)
float r = 0.0325; // 65mm diameter
float L = 0.22; // 220mm track
float v_right = linear_x + (angular_z * L / 2.0);
float v_left = linear_x - (angular_z * L / 2.0);
// Convert velocity to PWM (0 - 255)
int pwm_right = constrain(abs(v_right * 255.0 / 0.5), 0, 255);
int pwm_left = constrain(abs(v_left * 255.0 / 0.5), 0, 255);
// Write directional signals & PWM to XY-160D Driver
analogWrite(5, pwm_left);
analogWrite(6, pwm_right);
}
ros::Subscriber<geometry_msgs::Twist> sub_cmd_vel("/cmd_vel", cmdVelCallback);
void setup() {
nh.initNode();
nh.advertise(pub_left_ticks);
nh.advertise(pub_right_ticks);
nh.subscribe(sub_cmd_vel);
attachInterrupt(digitalPinToInterrupt(2), leftEncoderISR, RISING);
attachInterrupt(digitalPinToInterrupt(3), rightEncoderISR, RISING);
}
void loop() {
left_ticks_msg.data = left_encoder_ticks;
right_ticks_msg.data = right_encoder_ticks;
pub_left_ticks.publish(&left_ticks_msg);
pub_right_ticks.publish(&right_ticks_msg);
nh.spinOnce();
delay(20);
}
2. Cấu hình tầng điều phối di chuyển (Costmap & Move Base Parameters)
Hệ thống cấu hình 4 file tham số YAML cho move_base:
# costmap_common_params.yaml
obstacle_range: 2.5
raytrace_range: 3.0
footprint: [[-0.15, -0.15], [-0.15, 0.15], [0.15, 0.15], [0.15, -0.15]]
inflation_radius: 0.35
cost_scaling_factor: 5.0
observation_sources: laser_scan_sensor
laser_scan_sensor: {
sensor_frame: laser,
data_type: LaserScan,
topic: /scan,
marking: true,
clearing: true
}
# base_local_planner_params.yaml
TrajectoryPlannerROS:
max_vel_x: 0.35
min_vel_x: 0.05
max_vel_theta: 1.0
min_vel_theta: -1.0
min_in_place_vel_theta: 0.4
acc_lim_x: 1.0
acc_lim_theta: 1.5
xy_goal_tolerance: 0.08
yaw_goal_tolerance: 0.10
meter_scoring: true
3. Xây dựng giao diện Web điều khiển qua Rosbridge WebSocket
Frontend sử dụng JavaScript kết nối rosbridge_server (Port 9090) cho phép điều phối các điểm bàn ăn thông qua nút bấm:
// Khởi tạo kết nối ROSBridge WebSocket
const ros = new ROSLIB.Ros({
url: 'ws://' + window.location.hostname + ':9090'
});
// Khởi tạo Topic Publisher cho Goal Pose
const goalTopic = new ROSLIB.Topic({
ros: ros,
name: '/move_base_simple/goal',
messageType: 'geometry_msgs/PoseStamped'
});
// Hàm điều hướng robot tới vị trí Bàn chỉ định
function sendGoalToTable(x_pos, y_pos, z_orient, w_orient) {
const goalMessage = new ROSLIB.Message({
header: {
stamp: { secs: Math.floor(Date.now() / 1000), nsecs: 0 },
frame_id: 'map'
},
pose: {
position: { x: x_pos, y: y_pos, z: 0.0 },
orientation: { x: 0.0, y: 0.0, z: z_orient, w: w_orient }
}
});
goalTopic.publish(goalMessage);
console.log("Goal sent to Table coordinate: (" + x_pos + ", " + y_pos + ")");
}
Testing và validation
1. Kiểm thử tần số cập nhật dữ liệu khung tọa độ (TF Broadcaster Benchmark)
Hệ thống đo đạc tần số cập nhật thực tế các broadcaster trên nền tảng Jetson Nano đạt độ ổn định cao:
/map_to_odom: $39.890\text{ Hz}$ (Buffer length: 4.888 sec)
/base_link_broadcaster: $33.259\text{ Hz}$ (Buffer length: 4.901 sec)
/base_link_to_laser: $33.070\text{ Hz}$ (Buffer length: 4.907 sec)
/imu_broadcaster: $33.219\text{ Hz}$ (Buffer length: 4.907 sec)
/robot_pose_ekf: $25.273\text{ Hz}$ (Buffer length: 4.867 sec)
2. Đánh giá sai số vị trí thực nghiệm (Navigation Accuracy Benchmarking)
Thực nghiệm 1: Môi trường tĩnh không có vật cản đột xuất (20 lần chạy/loại quỹ đạo)
| Kịch bản quỹ đạo |
Số lần thử nghiệm |
Tọa độ mục tiêu $(X_g, Y_g)$ (m) |
Tọa độ thực tế trung bình $(\bar{X}, \bar{Y})$ (m) |
Sai số khoảng cách Euclid trung bình $e_d$ (m) |
| Đường thẳng |
20 |
$(2.34, 1.20)$ |
$(2.32, 1.18)$ |
$0.028\text{ m} \pm 0.008$ |
| Đường có góc rẽ |
20 |
$(2.85, 2.10)$ |
$(2.81, 2.05)$ |
$0.064\text{ m} \pm 0.012$ |
Thực nghiệm 2: Môi trường động có chướng ngại vật xuất hiện đột ngột (Người di chuyển/Đồ vật mới)
| Kịch bản thực nghiệm |
Số lần thử nghiệm |
Tọa độ mục tiêu $(X_g, Y_g)$ (m) |
Tọa độ thực tế trung bình $(\bar{X}, \bar{Y})$ (m) |
Sai số khoảng cách Euclid trung bình $e_d$ (m) |
Tỷ lệ tránh cản thành công (%) |
| Vật cản tĩnh phát sinh |
20 |
$(2.98, 1.55)$ |
$(2.91, 1.49)$ |
$0.092\text{ m}$ |
$100%$ |
| Vật cản động (Người cắt ngang) |
20 |
$(2.98, 1.55)$ |
$(2.89, 1.48)$ |
$0.114\text{ m}$ |
$90%$ |
Sai số được tính theo công thức khoảng cách Euclid:
$$e_d = \sqrt{(X_g - \bar{X})^2 + (Y_g - \bar{Y})^2}$$
Kết quả đạt được
- Lập bản đồ 2D chính xác: Quét hoàn chỉnh bản đồ diện tích $150\text{ m}^2$ bằng Hector SLAM với kích thước map $2048 \times 2048$ pixels, độ phân giải lưới đạt $0.05\text{ m/pixel}$ (5cm/cell).
- Khả năng tự hành hoàn chỉnh: Robot tự động hoạch định quỹ đạo tránh vật cản động theo thời gian thực với tần số xử lý local planner đạt $10\text{ Hz}$ trên máy tính nhúng Jetson Nano.
- Giao diện Web mượt mà: Máy chủ Flask phối hợp cùng
rosbridge_websocket truyền nhận gói tin JSON qua mạng nội bộ không dây với thời gian đáp ứng lệnh chỉ $28\text{ ms} - 45\text{ ms}$.
Đổi mới và đóng góp
Các cải tiến kỹ thuật nổi bật
- Kiến trúc hợp nhất Odometry - IMU qua EKF phi tuyến: Thay vì chỉ dựa vào odometry động cơ vốn dễ bị sai lệch do trượt bánh, đề tài ứng dụng node
robot_pose_ekf kết hợp ma trận hiệp phương sai của MPU6050 ($3\text{ trục Gyro} + 3\text{ trục Accel}$) và bộ đếm tick Encoder $363\text{ PPR}$. Kết quả giúp giảm độ trôi dạt góc xoay (Yaw Drift) từ $14.2^\circ/\text{phút}$ xuống còn dưới $1.8^\circ/\text{phút}$ khi di chuyển liên tục.
- Khai thác Hector SLAM độc lập: Cho phép tạo bản đồ chất lượng cao dựa hoàn toàn trên thuật toán đối sánh mẫu quét laser (Scan-Matching) mà không cần cấu hình odometry trước thời điểm lập bản đồ, tối ưu hóa quy trình triển khai thực tế.
- Mô hình phần mềm phi tập trung (Decentralized Software Pattern): Tách biệt tầng điều khiển giao tiếp phần cứng (Arduino C++ Firmware) và tầng tính toán thuật toán nặng (Jetson Nano ROS Melodic), đảm bảo tần số điều khiển PWM động cơ không bị gián đoạn khi thuật toán SLAM chiếm dụng tài nguyên tính toán cao.
+-----------------------------------------------------------------------------------+
| SO SÁNH VỚI CÁC CÔNG TRÌNH LIÊN QUAN |
+-----------------------------------------------------------------------------------+
| Cheong et al. (2016) [1] | Giao tiếp RF chuyên dụng, thiếu giao diện Web mở rộng|
| Cerbaro et al. (2020) [2] | Fuzzy Logic tránh cản thuần túy, chưa có SLAM động |
| Đề tài tốt nghiệp (2023) | Hector SLAM + ROS Nav Stack + EKF + Web App WebSocket |
+-----------------------------------------------------------------------------------+
Đề tài đóng góp một thiết kế kỹ thuật mẫu (Reference Design Architecture) hoàn chỉnh, từ bản vẽ CAD SolidWorks, sơ đồ mạch điện tử công nghiệp đến mã nguồn ROS cho sinh viên và kỹ sư ứng dụng trong lĩnh vực robot dịch vụ.
Ứng dụng thực tế và triển khai
Kịch bản vận hành trong nhà hàng (Operational Workflow)
- Bước 1 (Lập bản đồ hạ tầng): Kỹ thuật viên dùng bàn phím máy tính hoặc joystick trên web lái robot một vòng quanh nhà hàng. Thuật toán Hector SLAM tự động sinh file ảnh
map.pgm và file cấu hình map.yaml.
- Bước 2 (Gán nhãn bàn): Các tọa độ mục tiêu $(x, y, z, w)$ tương ứng với từng vị trí bàn ăn được cấu hình cố định trên giao diện Web Flask.
- Bước 3 (Giao đồ ăn tự động): Đầu bếp đặt đĩa thức ăn lên khay tầng trên của robot, bấm chọn "Bàn số 2" trên Web App. Robot tự tính toán đường đi ngắn nhất, tránh thực khách đang di chuyển trong hành lang và dừng chính xác tại bàn. Sau khi khách nhận món, robot tự nhận lệnh quay về quầy bếp (Home Station).
[Đầu bếp đặt món] --> [Bấm "Bàn số 2" trên Web] --> [Robot hoạch định A* Path]
|
[Robot về Bếp] <--- [Khách lấy món] <--- [Robot tránh cản & tới bàn số 2]
Phân tích hiệu quả kinh tế (Cost-Benefit & ROI Analysis)
- Chi phí phần cứng chế tạo mẫu: ~11.500.000 VNĐ (Jetson Nano: 3.2M, RPLidar A1: 2.8M, Động cơ + Khung cơ khí + Driver: 3.5M, Arduino + MPU6050 + Pin: 2.0M).
- So sánh nhân sự: Một nhân viên phục vụ bàn có mức lương trung bình 6.500.000 VNĐ/tháng. Một robot phục vụ thay thế được khối lượng vận chuyển của 01 nhân sự trong giờ cao điểm.
- Thời gian hoàn vốn (Payback Period):
$$\text{ROI Time} = \frac{11.500.000\text{ VNĐ}}{6.500.000\text{ VNĐ/tháng}} \approx 1.77\text{ tháng}$$
Một tỷ suất hoàn vốn cực kỳ hấp dẫn cho các chuỗi nhà hàng vừa và 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 đơn kênh: RPLidar A1 quét trên mặt phẳng 2D cố định nên không phát hiện được các vật cản thấp dưới sàn (như đồ chơi, chân ghế nghiêng) hoặc vật thể treo lơ lửng ngang tầm khay thức ăn.
- Tải trọng cơ khí: Bộ khung composite/mica hiện tại chỉ hỗ trợ tải trọng vận chuyển tối đa 3-5 kg, chưa đáp ứng được việc bưng bê nhiều món ăn nặng cùng lúc.
- Hành vi né tránh khi nghẽn đường: Trong hành lang hẹp có người đứng chặn, robot liên tục tính toán tìm đường vòng (re-planning) dẫn đến giật cục, thay vì dừng lại chờ đợi (wait-and-resume).
Hướng phát triển trong tương lai
- Tích hợp Camera chiều sâu 3D (RGB-D Camera): Bổ sung Intel RealSense D435i để xây dựng 3D Voxel Grid Costmap (OctoMap), quét toàn diện không gian 3 chiều.
- Nâng cấp thuật toán hành vi xã hội (Social Navigation): Cải tiến Local Planner theo hướng tuân thủ phép tắc lịch sự trong nhà hàng (nhường đường cho người già/trẻ em, giữ khoảng cách an toàn $0.5\text{ m}$ với khách).
- Quản lý hạm đội đa robot (Multi-Robot Fleet Management): Sử dụng giao thức Zenoh hoặc ROS2 Nav2 để điều phối nhiều robot cùng phục vụ mà không bị xung đột đường đi (Deadlock Resolution).
Đối tượng hưởng lợi
+---------------------------------------------------------------------------------------+
| ĐỐI TƯỢNG HƯỞNG LỢI |
+---------------------------------------------------------------------------------------+
| Sinh viên CNTT / Cơ điện tử : Tài liệu thực hành chi tiết về ROS, TF, SLAM & EKF. |
| Kỹ sư phần mềm Robotic : Mã nguồn tham khảo kết nối Rosbridge, WebSocket, Vue. |
| Chủ doanh nghiệp F&B : Giải pháp AMR tự động hóa chi phí thấp, thu hồi vốn nhanh|
| Nhà nghiên cứu Ứng dụng : Nền tảng thực nghiệm thuật toán Navigation môi trường động|
+---------------------------------------------------------------------------------------+
- Sinh viên và Học viên nghiên cứu: Tiếp cận trọn vẹn quy trình xây dựng robot tự hành từ thiết kế 2D/3D SolidWorks, giải tích động học bánh xe vi sai đến lập trình hệ thống phân tán với ROS.
- Kỹ sư phát triển Robot: Nắm vững cấu hình bộ tham số Costmap, thuật toán EKF đa cảm biến và giải pháp xây dựng Web UI điều khiển robot qua giao thức mạng nhẹ WebSocket.
- Doanh nghiệp kinh doanh F&B: Sở hữu bản mẫu khả thi để thương mại hóa thành sản phẩm robot phục vụ với chi phí chỉ bằng 1/15 so với các dòng robot nhập khẩu.
Câu hỏi thường gặp
1. Yêu cầu phần cứng tối thiểu để triển khai hệ thống ROS Navigation trên robot là gì?
Hệ thống yêu cầu một máy tính nhúng có kiến trúc tối thiểu ARMv8 64-bit hoặc x86_64, RAM tối thiểu 4GB (như NVIDIA Jetson Nano, Raspberry Pi 4 Model B 4GB/8GB), 01 cảm biến Laser LiDAR 360° giao tiếp UART/USB và 01 bo mạch vi điều khiển hỗ trợ ngắt ngoài (External Interrupt) để đọc xung Encoder tần số cao.
2. Tại sao đồ án sử dụng Hector SLAM thay vì Gmapping hay Cartographer?
Hector SLAM sử dụng phương pháp tối ưu hóa Gauss-Newton để giải bài toán Scan-Matching trực tiếp từ dữ liệu LiDAR tần số quét cao mà không bắt buộc phải có nguồn dữ liệu Odometry chính xác ngay từ đầu. Điều này giúp nhóm quét bản đồ ban đầu cực kỳ nhanh chóng và tránh được sai số tích lũy do trượt bánh xe khi chưa tinh chỉnh tham số PID.
3. Làm cách nào để robot xử lý khi gặp người đi bộ bất ngờ băng qua đường?
Tầng local_costmap liên tục cập nhật dữ liệu từ /scan theo thời gian thực ($10\text{ Hz}$). Khi phát hiện chướng ngại vật mới xuất hiện trên quỹ đạo toàn cục (global_plan), TrajectoryPlannerROS sẽ gán chi phí cao vào ô lưới tương ứng, ngay lập tức tính toán vận tốc góc $\omega$ và vận tốc dài $v$ mới để lái robot vòng qua vật cản, hoặc giảm tốc dừng lại nếu không còn khoảng trống an toàn ($> 0.35\text{ m}$).
4. Giao diện Web giao tiếp với Robot thông qua cơ chế nào?
Giao diện Web chạy trên nền trình duyệt kết nối với server WebSocket chạy trên Jetson Nano thông qua công cụ rosbridge_server (Port 9090). Thư viện roslibjs sẽ đóng gói các hành động của người dùng (bấm nút chọn bàn, kéo joystick) thành các tin nhắn JSON-RPC chuẩn ROS và publish trực tiếp vào các topic như /move_base_simple/goal hoặc /cmd_vel.
5. Chi phí duy trì và bảo trì hệ thống định kỳ bao gồm những gì?
Chi phí vận hành định kỳ bao gồm: thay thế cell pin Lithium-ion sau 500-800 chu kỳ sạc-xả (~800.000 VNĐ), vệ sinh bụi bẩn mắt kính quét quang học của LiDAR RPLidar A1 (3 tháng/lần) và bảo dưỡng chổi than/bánh răng hộp số động cơ DC JBG37.
Kết luận
Khóa luận tốt nghiệp "Nghiên cứu và xây dựng mô hình robot phục vụ nhà hàng" đã chứng minh tính khả thi vượt trội của việc kết hợp phần cứng nhúng chi phí thấp (NVIDIA Jetson Nano, Arduino Uno, RPLidar A1) với nền tảng phần mềm mã nguồn mở chuẩn công nghiệp ROS Navigation Stack. Dự án không chỉ hoàn thành xuất sắc các mục tiêu kỹ thuật về tự động lập bản đồ 2D qua Hector SLAM, dung hợp cảm biến thông minh qua Extended Kalman Filter, tự hành định tuyến thông qua Move Base, mà còn mang lại giá trị thực tiễn cao với giao diện điều khiển Web thân thiện qua Rosbridge. Đây là bước đệm vững chắc mở ra hướng nghiên cứu ứng dụng sâu rộng trong tự động hóa dịch vụ thông minh và robot phục vụ tại Việt Nam.