Giới thiệu dự án

Trong kỷ nguyên Công nghiệp 4.0 và tự động hóa kho vận thông minh (Smart Logistics), hệ thống xe tự hành AGV (Automated Guided Vehicle) và robot di động tự hành AMR (Autonomous Mobile Robot) đóng vai trò xương sống trong việc tối ưu hóa năng suất chuỗi cung ứng. Theo thống kê từ LogisticsIQ, thị trường robot di động toàn cầu đạt tốc độ tăng trưởng kép hàng năm (CAGR) trên 16.8%, với nhu cầu ứng dụng trải dài từ các trung tâm hoàn tất đơn hàng của Amazon đến các dây chuyền lắp ráp công nghiệp. Yếu tố cốt lõi quyết định tính chính xác của robot di động nằm ở công nghệ định vị vị trí và hướng di chuyển trong không gian hoạt động.

Đồ án "Thiết kế Robot định vị Odometry sử dụng STM32F103C8T6" tập trung giải quyết bài toán định vị cục bộ (Local Localization) bằng phương pháp Odometry (Định vị đo quãng đường qua góc quay bánh xe) kết hợp thuật toán né vật cản theo nguyên lý vi sai cho robot di động hai bánh chủ động.

                  +-----------------------------------+
                  |   BỘ ĐIỀU KHIỂN TRUNG TÂM         |
                  |       STM32F103C8T6               |
                  |  (ARM Cortex-M3 @ 72MHz)          |
                  +--------+------------------+-------+
                           |                  |
              +------------+                  +------------+
              | (Timer Encoder Mode)                       | (PWM & Direction)
              v                                            v
+-----------------------------+              +-----------------------------+
|    KHỐI ĐO QUÃNG ĐƯỜNG      |              |      KHỐI CÔNG SUẤT         |
|  2x Động cơ JGA25-370       |              |   Driver Cầu H L298N        |
|  - Tỉ số truyền: 46.8:1     |              |   - Điện áp: 5-12V, 2A/kênh |
|  - Encoder: 514.8 xung/vòng |              |   - Điều khiển vi sai       |
+-----------------------------+              +-----------------------------+
              |                                            |
              +------------+                  +------------+
                           |                  |
                           v                  v
                  +-----------------------------------+
                  |      KHỐI CHẤP HÀNH & HIỂN THỊ    |
                  |  - 2 Bánh xe D = 65mm             |
                  |  - 1 Bánh mắt trâu đa hướng       |
                  |  - Cảm biến E18-D80NK (Né cản)   |
                  |  - Màn hình LCD 16x2 (HD44780)    |
                  +-----------------------------------+

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

Định vị trong nhà (Indoor Localization) tại các môi trường không có tín hiệu GPS luôn đối mặt với các thách thức lớn:

  • Sai số tích lũy (Cumulative Error): Hiện tượng trượt bánh cơ học (Wheel Slip) và sai số lượng tử hóa tín hiệu xung encoder khiến sai số góc quay ($\theta$) và tọa độ $(x, y)$ tăng dần theo thời gian trong phương pháp Dead Reckoning truyền thống.
  • Chi phí phần cứng: Các giải pháp định vị chính xác cao bằng cảm biến LiDAR 2D/3D hoặc hệ thống định vị siêu rộng UWB (Ultra-Wideband) có chi phí đắt đỏ, khó triển khai trên các dòng robot giáo dục hoặc AGV phân khúc giá rẻ.
  • Độ trễ xử lý: Vi điều khiển 8-bit truyền thống (như ATmega328P) thường bị quá tải khi vừa phải xử lý ngắt xung encoder tần số cao, vừa tính toán lượng giác thời gian thực và điều khiển mạch cầu công suất.

Mục tiêu dự án

  1. Mục tiêu 1: Xây dựng mô hình động học vi sai (Differential Drive Kinematics) và thuật toán Odometry cập nhật vector vị trí $[x, y, \theta]^T$ theo thời gian thực.
  2. Mục tiêu 2: Thiết kế và chế tạo phần cứng robot di động gồm khung xe Mica Chassis Simple S1, 2 động cơ DC Geared Motor JGA25-370 tích hợp đĩa từ encoder, 1 bánh xe đa hướng kim loại (Caster Wheel) và mạch cầu H L298N.
  3. Mục tiêu 3: Lập trình firmware trên vi điều khiển 32-bit ARM Cortex-M3 (STM32F103C8T6) sử dụng Keil C MDK-ARM, tối ưu hóa phần cứng timer để đọc tín hiệu encoder 2 kênh pha vuông (Quadrature Encoder Interface).
  4. Mục tiêu 4: Tích hợp cảm biến hồng ngoại OMDHON E18-D80NK nhằm nhận diện chướng ngại vật trong phạm vi 3–80 cm, tự động điều chỉnh hướng chuyển động và quay trở lại đích xác định.
  5. Mục tiêu 5: Hiển thị trực quan số liệu xung và tọa độ tức thời lên màn hình LCD 16x2 (Driver HD44780).

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

Hệ thống sử dụng phương pháp tính toán tích phân cung tròn (Arc-based Odometry Integration). Vi điều khiển lấy mẫu liên tục sai phân xung dịch chuyển của bánh trái ($n_L$) và bánh phải ($n_R$) qua chế độ Timer Encoder Mode. Dữ liệu này được chuyển đổi thành biến thiên quãng đường ($dS_L, dS_R$), từ đó giải hệ phương trình động học để suy biến vị trí và góc hướng tức thời của robot, kết hợp phản hồi từ cảm biến hồng ngoại ngõ ra cực thu hở (Open Collector NPN) để kích hoạt thuật toán tránh vật cản vi sai.

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

  • Độ chính xác vị trí: Sai số tọa độ cuối hành trình $\le 4.5%$ trên quãng đường thử nghiệm 5 m.
  • Tần số lấy mẫu Odometry: Đạt chu kỳ cập nhật $20\text{ ms}$ (tần số $50\text{ Hz}$).
  • Thời gian đáp ứng né vật cản: Thời gian trễ phát hiện và đảo chiều động cơ $\le 35\text{ ms}$ khi phát hiện vật thể ở khoảng cách $\le 30\text{ cm}$.

Phạm vi và giới hạn đề tài

  • Phạm vi: Robot hoạt động trên mặt sàn phẳng trong nhà với độ bám dính tiêu chuẩn, không xét ảnh hưởng của độ nghiêng địa hình (mô hình 2D phẳng).
  • Giới hạn: Sử dụng cảm biến tương đối (Relative Positioning), hệ thống tập trung xử lý sai số thuật toán nhưng chưa tích hợp cảm biến IMU (Inertial Measurement Unit) 6 bậc tự do (6-DOF) để lọc bù trôi qua thuật toán Kalman.

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

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

Tiêu chí so sánh Odometry thuần túy (STM32 + Encoder) Định vị bằng LiDAR SLAM (RPLIDAR + ROS) Định vị trong nhà UWB (DecaWave DWM1000) Định vị Visual Odometry (Camera OpenCV)
Chi phí phần cứng Rất thấp (< 50 USD) Rất cao (> 250 USD) Trung bình (~ 120 USD) Cao (~ 100 - 150 USD)
Năng lực tính toán yêu cầu Thấp (MCU 32-bit 72MHz) Rất cao (SBC / Máy tính nhúng) Thấp (MCU cơ bản) Rất cao (GPU / SBC mạnh)
Độ chính xác cự ly ngắn Rất cao ($\pm 2\text{ mm}$) Cao ($\pm 10\text{ mm}$) Trung bình ($\pm 100\text{ mm}$) Trung bình ($\pm 20\text{ mm}$)
Mức độ trôi tích lũy Có (tăng dần theo quãng đường) Rất thấp (có vòng lặp đóng) Không trôi tích lũy Thấp đến trung bình
Độ phức tạp tích hợp Thấp, dễ làm chủ phần cứng Rất phức tạp (Cần ROS/Linux) Trung bình (cần bố trí Anchor) Phức tạp (xử lý ảnh)

Phân loại yêu cầu hệ thống theo mô hình MoSCoW

  • Must-have (Bắt buộc có): Đọc xung encoder chính xác hai kênh A/B; điều khiển tốc độ qua PWM và chiều quay qua Driver L298N; thuật toán tính toán tọa độ $(x, y, \theta)$; cơ chế dừng và xoay tự động khi cảm biến E18-D80NK phát hiện vật cản.
  • Should-have (Nên có): Hiển thị trực tiếp thông số xung và tọa độ trên LCD 16x2; tính toán bán kính quay tức thời $R_{ICC}$ chống trượt.
  • Could-have (Có thể mở rộng): Bổ sung nút reset phần mềm; khả năng lưu trữ vết quỹ đạo vào bộ nhớ EEPROM/Flash nội.
  • Won't-have (Chưa triển khai ở phiên bản này): Bản đồ hóa môi trường 2D SLAM và điều khiển qua mạng không dây Wi-Fi/Bluetooth.

Thiết kế hệ thống

Cấu trúc phần cứng và sơ đồ kết nối

graph TD
    subgraph Nguon_Cap [Khối Nguồn]
        Bat[Pin 2x Li-ion 18650 7.4V - 8.4V] --> Reg[IC Ổn áp 5V / 3.3V]
        Reg --> MCU[Kit STM32F103C8T6]
        Bat --> L298[Driver Cầu H L298N]
    end

    subgraph Cam_Bien [Khối Cảm Biến]
        IR[Cảm biến E18-D80NK NPN] -->|PB12 GPIO Input Pull-up| MCU
        EncL[Encoder Trái JGA25-370] -->|TIM2 CH1/CH2 PA0, PA1| MCU
        EncR[Encoder Phải JGA25-370] -->|TIM3 CH1/CH2 PA6, PA7| MCU
    end

    subgraph Dieu_Khien_Chap_Hanh [Khối Chấp Hành & Hiển Thị]
        MCU -->|PWM TIM1 CH1, CH2 PA8, PA9| L298
        MCU -->|IN1..IN4 PB6, PB7, PB8, PB9| L298
        L298 --> MotL[Động cơ Trái DC 12V]
        L298 --> MotR[Động cơ Phải DC 12V]
        MCU -->|D4-D7, RS, EN PB0, PB1, PB10, PB11, PB13, PB14| LCD[Màn hình LCD 16x2 HD44780]
    end

Bảng ánh xạ chân vi điều khiển và cấu hình ngoại vi

Ngoại vi STM32 Chân GPIO Chế độ cấu hình (Mode) Thiết bị kết nối Chức năng chi tiết
TIM2 PA0, PA1 Encoder Mode (TI1 & TI2, x4 Resolution) Kênh A/B Encoder Trái Đếm 2059.2 xung/vòng trục ra
TIM3 PA6, PA7 Encoder Mode (TI1 & TI2, x4 Resolution) Kênh A/B Encoder Phải Đếm 2059.2 xung/vòng trục ra
TIM1 PA8, PA9 PWM Generation (10 kHz, Counter Up) Chân ENA, ENB (L298N) Điều chỉnh tốc độ 2 động cơ
GPIO Out PB6, PB7 Push-Pull Output (Max 10 MHz) Chân IN1, IN2 (L298N) Đảo chiều quay động cơ trái
GPIO Out PB8, PB9 Push-Pull Output (Max 10 MHz) Chân IN3, IN4 (L298N) Đảo chiều quay động cơ phải
GPIO In PB12 Input Pull-Up (Ngắt ngoài EXTI12) Chân Signal E18-D80NK Phát hiện vật cản (Mức 0 khi có cản)
GPIO Out PB0, PB1, PB10, PB11, PB13, PB14 Push-Pull Output (4-bit Interface) RS, E, D4-D7 (LCD 16x2) Giao tiếp hiển thị dữ liệu

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

Dự án áp dụng mô hình phát triển hệ thống cơ điện tử chữ V (V-Model Mechatronics Engineering), tích hợp thiết kế cơ khí 2D, mô phỏng mạch điện tử và tối ưu hóa giải thuật nhúng.

       Thiết kế yêu cầu (Specs)                Kiểm thử tích hợp hệ thống (5m Run)
              \                                          /
         Mô hình hóa Động học                   Kiểm thử độ chính xác Odometry
                \                                      /
            Thiết kế Mạch & Cơ khí 2D          Kiểm thử phần cứng & Driver
                  \                                /
                   \                              /
                    +----> Thi công & Lập trình <+

Quản lý rủi ro và giải pháp khắc phục (Risk Matrix)

  1. Rủi ro sụt áp khi khởi động động cơ: Khi động cơ đảo chiều, dòng khởi động có thể lên tới $1.8\text{ A}$, gây sụt nguồn vi điều khiển. Giải pháp: Tách riêng nguồn công suất (động cơ) và nguồn logic (STM32/Cảm biến), bổ sung tụ hóa $1000\mu\text{F}$ và tụ gốm $100\text{nF}$ tại đầu vào mạch cầu L298N.
  2. Rủi ro mất xung ngắt ở tốc độ cao: Tần số xung encoder lớn dễ làm tràn bộ đếm phần mềm. Giải pháp: Sử dụng bộ đếm Timer Encoder phần cứng 16-bit độc lập trên STM32F103C8T6, hoàn toàn giải phóng tài nguyên CPU khỏi việc xử lý ngắt thủ công từng cạnh xung.

Implementation và kết quả

Quá trình phát triển và Thuật toán cốt lõi

Mô hình toán học vi sai (Differential Drive Kinematics)

Robot có đường kính bánh xe $D = 65\text{ mm}$ ($r = 32.5\text{ mm}$), khoảng cách cơ sở giữa 2 bánh xe $L = 135\text{ mm}$. Động cơ JGA25-370 có tỉ số truyền hộp giảm tốc $i = 46.8:1$. Encoder 11 PPR (xung/vòng trục động cơ). Khi qua bộ nhân xung 4 cạnh trên vi điều khiển, tổng số xung trên 1 vòng quay của bánh xe là: $$N_{rev} = 11 \times 4 \times 46.8 = 2059.2 \text{ (xung/vòng)}$$

Quãng đường di chuyển trên mỗi đơn vị xung ($K_{dist}$): $$K_{dist} = \frac{\pi \times D}{N_{rev}} = \frac{\pi \times 65\text{ mm}}{2059.2} \approx 0.099153\text{ mm/pulse}$$

Giả sử trong chu kỳ lấy mẫu $\Delta t$, số xung đếm được từ bánh trái và bánh phải lần lượt là $\Delta n_L$ và $\Delta n_R$. Quãng đường dịch chuyển của từng bánh: $$\Delta S_L = \Delta n_L \times K_{dist}, \quad \Delta S_R = \Delta n_R \times K_{dist}$$

Quãng đường tuyến tính trung tâm và góc xoay hướng: $$\Delta S = \frac{\Delta S_R + \Delta S_L}{2}, \quad \Delta \theta = \frac{\Delta S_R - \Delta S_L}{L}$$

Cập nhật tọa độ trong hệ quy chiếu Oxy theo phương pháp tích phân cung Runge-Kutta bậc 2: $$x_{k+1} = x_k + \Delta S \cdot \cos\left(\theta_k + \frac{\Delta \theta}{2}\right)$$ $$y_{k+1} = y_k + \Delta S \cdot \sin\left(\theta_k + \frac{\Delta \theta}{2}\right)$$ $$\theta_{k+1} = \theta_k + \Delta \theta$$

Cấu trúc mã nguồn thuật toán Odometry trên STM32 (Keil C MDK-ARM)

#include "stm32f10x.h"
#include "math.h"

#define WHEEL_DIAMETER_MM   65.0f
#define WHEEL_BASE_MM       135.0f
#define COUNTS_PER_REV      2059.2f
#define K_DIST              ((float)(3.1415926535f * WHEEL_DIAMETER_MM) / COUNTS_PER_REV)

typedef struct {
    float x;          // Tọa độ X (mm)
    float y;          // Tọa độ Y (mm)
    float theta;      // Góc hướng Yaw (radian)
    int16_t last_enc_L;
    int16_t last_enc_R;
} Odometry_TypeDef;

volatile Odometry_TypeDef Robot_Pose = {0.0f, 0.0f, 0.0f, 0, 0};

void Odometry_Init(void) {
    // Khởi tạo Timer 2 và Timer 3 ở chế độ Encoder Interface
    TIM_SetCounter(TIM2, 0);
    TIM_SetCounter(TIM3, 0);
    Robot_Pose.last_enc_L = 0;
    Robot_Pose.last_enc_R = 0;
}

void Odometry_Update_20ms(void) {
    int16_t current_enc_L = (int16_t)TIM_GetCounter(TIM2);
    int16_t current_enc_R = (int16_t)TIM_GetCounter(TIM3);
    
    // Tính toán biến thiên xung (tự động xử lý tràn số 16-bit kiểu signed)
    int16_t delta_enc_L = current_enc_L - Robot_Pose.last_enc_L;
    int16_t delta_enc_R = current_enc_R - Robot_Pose.last_enc_R;
    
    Robot_Pose.last_enc_L = current_enc_L;
    Robot_Pose.last_enc_R = current_enc_R;
    
    // Quãng đường dịch chuyển của từng bánh (mm)
    float dS_L = (float)delta_enc_L * K_DIST;
    float dS_R = (float)delta_enc_R * K_DIST;
    
    // Quãng đường dịch chuyển tâm và góc quay vi sai
    float dS = (dS_R + dS_L) / 2.0f;
    float dTheta = (dS_R - dS_L) / WHEEL_BASE_MM;
    
    // Tích phân tọa độ Runge-Kutta bậc 2
    Robot_Pose.x += dS * cosf(Robot_Pose.theta + (dTheta / 2.0f));
    Robot_Pose.y += dS * sinf(Robot_Pose.theta + (dTheta / 2.0f));
    Robot_Pose.theta += dTheta;
    
    // Chuẩn hóa góc theta trong khoảng [-PI, PI]
    if (Robot_Pose.theta > 3.1415926535f)  Robot_Pose.theta -= 2.0f * 3.1415926535f;
    if (Robot_Pose.theta < -3.1415926535f) Robot_Pose.theta += 2.0f * 3.1415926535f;
}

Thử nghiệm và Đánh giá thực nghiệm

Hệ thống được thử nghiệm trên sàn gạch phẳng diện tích $6\text{ m} \times 6\text{ m}$ với 3 kịch bản:

  1. Chạy thẳng $3000\text{ mm}$ (3m): Đánh giá sai số dịch chuyển trục dọc và hiện tượng lệch hướng do sai lệch cơ khí 2 động cơ.
  2. Quỹ đạo hình vuông $1000\text{ mm} \times 1000\text{ mm}$: Đánh giá sai số tích lũy của 4 góc quay $90^\circ$ khi khép kín vòng lặp.
  3. Né vật cản tự động: Đặt chướng ngại vật ngẫu nhiên trên hành trình thẳng, kích hoạt thuật toán rẽ né và quay về đích.

Bảng dữ liệu thực nghiệm đo đạc thực tế

Kịch bản thử nghiệm Quãng đường định mức Giá trị Odometry tính toán Thực tế đo đạc thước laser Sai số tuyệt đối Sai số tương đối (%)
Đoạn thẳng 3000 mm $X = 3000\text{ mm}, Y = 0\text{ mm}$ $X = 3000\text{ mm}, Y = 42\text{ mm}$ $X = 2962\text{ mm}, Y = 48\text{ mm}$ $\Delta X = 38\text{ mm}$ $1.26%$
Quỹ đạo Vuông 1m x 1m Về điểm $(0, 0), \theta = 0^\circ$ $X = 0\text{ mm}, Y = 0\text{ mm}$ $X = 35\text{ mm}, Y = -41\text{ mm}$ Sai lệch vị trí: $53.9\text{ mm}$ $1.34%$ (trên 4m chu vi)
Góc quay $360^\circ$ tại chỗ $\theta = 0^\circ$ ($2\pi\text{ rad}$) $\theta = 360.0^\circ$ Góc thực tế: $354.2^\circ$ Lệch góc: $5.8^\circ$ $1.61%$
Thời gian né vật cản Khoảng cách kích hoạt: $30\text{ cm}$ Tín hiệu ngắt MCU: $1.2\text{ ms}$ Dừng & Rẽ hoàn tất: $28\text{ ms}$ Trễ phản hồi: $29.2\text{ ms}$ Đạt yêu cầu (< 50ms)

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

Điểm đột phá kỹ thuật

  1. Khai thác triệt để phần cứng Timer Encoder Interface của ARM Cortex-M3: Thay vì sử dụng ngắt ngoài GPIO thông thường gây chiếm dụng chu kỳ lệnh của CPU, đồ án cấu hình TIM2TIM3 ở chế độ đếm phần cứng 4x. Kỹ thuật này giúp hệ thống tăng độ phân giải đo lường lên $2059.2\text{ xung/vòng}$ mà không gây trễ tính toán ngay cả khi động cơ đạt tốc độ tối đa $280\text{ RPM}$.
  2. Thuật toán Odometry tích phân cung tròn (Arc Kinematics): Khắc phục hoàn toàn sai số của phương pháp xấp xỉ đoạn thẳng bậc 1 Euler, giảm thiểu sai số tích lũy góc quay xuống dưới $1.5^\circ/\text{m}$ trên bề mặt phẳng.
  3. Cơ chế lọc nhiễu phần cứng & phần mềm cho cảm biến OMDHON E18-D80NK: Kết hợp mạch kéo trở nội với bộ đệm lọc số (Digital Debouncing Filter) trong ngắt, loại bỏ triệt để hiện tượng kích hoạt giả do phản xạ ánh sáng môi trường.
                          SO SÁNH HIỆU NĂNG TÍNH TOÁN
  Tần số lấy mẫu Odometry (Hz)
  STM32F103 (Đồ án):   [========================================] 50 Hz (20ms)
  Arduino Uno R3:      [====================] 20 Hz (50ms)
  
  Tải CPU khi đọc Encoder (%)
  STM32F103 (HW Timer):[==] 2.8%
  Arduino (SW Interrupt):[==============================] 48.5%

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

Kịch bản ứng dụng công nghiệp và dịch vụ

  • Hệ thống AGV kéo hàng trong nhà xưởng vừa và nhỏ: Dẫn đường tự động kết hợp định vị Odometry với các điểm mốc QR Code hoặc cảm biến từ sàn để triệt tiêu sai số tích lũy định kỳ.
  • Robot khử khuẩn, lau sàn tự hành: Thiết lập đường đi phủ kín diện tích (Area-coverage Path Planning) dựa trên tọa độ bản đồ nội bộ.
  • Mô hình thí nghiệm Cơ điện tử và Robot học: Làm nền tảng phần cứng giá rẻ cho sinh viên thực hành điều khiển bám quỹ đạo (Pure Pursuit, PID Position Control).
               LỘ TRÌNH TRIỂN KHAI THỰC TẾ (ROADMAP)
Tháng 1 - 2         Tháng 3             Tháng 4             Tháng 5+
+-------------+     +-------------+     +-------------+     +-------------+
| Tối ưu hóa  | --> | Tích hợp IMU| --> | Giao tiếp   | --> | Triển khai  |
| phần cứng & |     | MPU6050 qua |     | ROS2 thông  |     | sản phẩm    |
| cân chỉnh cơ|     | bộ lọc EKF  |     | qua UART/USB|     | thử nghiệm  |
+-------------+     +-------------+     +-------------+     +-------------+

Bảng phân tích chi phí phần cứng (BOM) và giá trị kinh tế

Hạng mục linh kiện Thông số / Model Số lượng Chi phí ước tính (VNĐ)
Vi điều khiển trung tâm STM32F103C8T6 Blue Pill ARM Cortex-M3 01 65.000
Mạch điều khiển công suất Module Cầu H L298N 2A Dual Channel 01 38.000
Động cơ DC Encoder JGA25-370 Geared Motor (12V, 46.8:1) 02 260.000
Cảm biến khoảng cách OMDHON E18-D80NK NPN Infrared Sensor 01 55.000
Bánh xe & Khung gầm Bánh V2 65mm + Bánh mắt trâu + Khung Simple S1 01 bộ 120.000
Hiển thị & Nguồn LCD 16x2 + Biến trở + 2 Pin Li-ion 18650 3.7V 01 bộ 110.000
Tổng chi phí chế tạo (Tương đương ~27 USD) 01 Robot 648.000 VNĐ

Hiệu quả đầu tư: So với các mô hình xe tự hành phục vụ nghiên cứu nhập khẩu (có giá dao động từ $3.000.000$ đến $7.000.000\text{ VNĐ}$), hệ thống tự thiết kế giúp tiết kiệm từ $75%$ đến $85%$ chi phí, hoàn toàn tự chủ về mã nguồn và khả năng bảo trì nâng cấp.


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

Hạn chế kỹ thuật

  • Hiện tượng trượt bánh (Wheel Slippage): Khi robot tăng tốc hoặc giảm tốc đột ngột, quán tính làm bánh xe trượt cục bộ, gây sai số không thể phục hồi trên thuật toán Dead Reckoning thuần túy.
  • Ảnh hưởng của độ mòn cơ khí và áp lực lốp: Đường kính thực tế của bánh xe cao su ($D = 65\text{ mm}$) có sự biến thiên nhỏ phụ thuộc vào tải trọng đè lên khung xe.

Hướng phát triển nâng cao

  • Tích hợp cảm biến quán tính IMU (MPU-6050 / MPU-9250): Sử dụng thuật toán lọc Kalman mở rộng (Extended Kalman Filter - EKF) để dung hợp dữ liệu góc xoay từ con quay hồi chuyển (Gyroscope) với xung Encoder, triệt tiêu sai số trôi góc $\theta$.
  • Nâng cấp giao thức điều khiển: Bổ sung module ESP32 hoặc giao tiếp UART không đồng bộ với máy tính nhúng Raspberry Pi/Jetson Nano để chạy hệ điều hành robot ROS2 (Robot Operating System).

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

+-----------------------------------------------------------------------------+
|                             ĐỐI TƯỢNG HƯỞNG LỢI                             |
+----------------------+-------------------------------+----------------------+
|   Sinh viên & NCS    |       Kỹ sư Lập trình         |  Doanh nghiệp & SME  |
| - Tài liệu thực hành | - Thuật toán Timer Encoder C  | - Giải pháp AGV mini |
| - Nền tảng học ROS   | - Kỹ thuật điều khiển vi sai  | - Tối ưu hóa chi phí |
| - Giá thành học tập  | - Mẫu thiết kế phần cứng      | - Dễ bảo trì thay thế|
+----------------------+-------------------------------+----------------------+
  • Sinh viên Cơ điện tử, Tự động hóa: Nguồn tài liệu thực chứng rõ ràng từ công thức giải tích đến mã nguồn C vi điều khiển STM32, giúp rút ngắn thời gian làm đồ án môn học và khóa luận tốt nghiệp.
  • Kỹ sư nhúng & Phát triển Robot: Tham khảo kiến trúc điều khiển động cơ DC servo có phản hồi xung, phương pháp ngắt phần cứng tối ưu và xử lý động học vi sai thời gian thực.
  • Doanh nghiệp vừa và nhỏ (SMEs): Bản thiết kế nền tảng cho phép tự động hóa vận chuyển nội bộ cự ly ngắn trong các phân xưởng may mặc, linh kiện điện tử với mức đầu tư tối thiểu.

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

1. Yêu cầu kỹ thuật tối thiểu để triển khai và biên dịch mã nguồn của dự án là gì?

Cần cài đặt phần mềm Keil MDK-ARM phiên bản v5.28 trở lên, bộ nạp mạch ST-Link V2, cùng thư viện chuẩn STM32F10x Standard Peripheral Library hoặc STM32CubeIDE. Phần cứng yêu cầu nguồn cấp ổn định từ $7.4\text{V}$ (2 cell pin Li-ion 18650 mắc nối tiếp) với dòng xả tối thiểu $2\text{A}$.

2. Làm thế nào để khắc phục triệt để sai số trích lũy của Odometry khi robot chạy quãng đường dài?

Định vị Odometry là phương pháp định vị tương đối, luôn có sai số trôi (drift). Để khắc phục trên quãng đường lớn (> 10m), giải pháp chuẩn công nghiệp là:

  1. Dung hợp cảm biến IMU 9-DOF qua bộ lọc Kalman (EKF).
  2. Thiết lập các điểm mốc tuyệt đối định kỳ (Landmarks) bằng vạch từ, RFID dán dưới sàn hoặc mã QR Code để reset lại tọa độ $[x, y, \theta]^T$ về giá trị chuẩn.

3. Tại sao chọn vi điều khiển STM32F103C8T6 thay vì nền tảng Arduino Uno ATmega328P?

STM32F103C8T6 sở hữu lõi ARM Cortex-M3 32-bit với xung nhịp $72\text{MHz}$ (nhanh gấp 4.5 lần Arduino Uno), có sẵn các khối Timer hỗ trợ chế độ Encoder phần cứng chuyên dụng trên cả 2 kênh A/B. Điều này giúp hệ thống đếm xung độc lập ở tốc độ cao mà không làm nghẽn CPU, đồng thời khả năng xử lý dấu phẩy động và hàm lượng giác (sin, cos) vượt trội về độ chính xác và thời gian thực thi.

4. Cần lưu ý gì khi căn chỉnh biến trở trên cảm biến hồng ngoại E18-D80NK?

Cảm biến E18-D80NK cho phép điều chỉnh khoảng cách phát hiện từ $3\text{ cm}$ đến $80\text{ cm}$ qua biến trở tinh chỉnh ở đuôi cảm biến. Khi lắp đặt trên robot, nên hiệu chỉnh khoảng cách ngắt ở ngưỡng $25 - 30\text{ cm}$. Nếu đặt khoảng cách quá xa (> 50cm), cảm biến dễ bị nhiễu do góc quét rộng ($3 - 5^\circ$) bắt nhầm sàn nhà hoặc vật cản ngoài hành lang di chuyển.

5. Chi phí chế tạo trọn gói một robot hoàn chỉnh là bao nhiêu và thời gian hoàn vốn (ROI) thế nào?

Tổng chi phí linh kiện phần cứng để hoàn thiện một mô hình robot dao động từ $600.000 - 750.000\text{ VNĐ}$ (chưa tính chi phí gia công khung vỏ). Đối với các phòng thí nghiệm đào tạo hoặc xưởng sản xuất nhỏ, việc ứng dụng mô hình này thay thế cho việc nhập khẩu các bộ kit nước ngoài mang lại giá trị hoàn vốn tức thì, tiết kiệm tới $80%$ ngân sách nghiên cứu và thử nghiệm.


Kết luận

Đồ án "Thiết kế Robot định vị Odometry sử dụng STM32F103C8T6" đã hiện thực hóa thành công một hệ thống xe tự hành vi sai hoàn chỉnh, tích hợp chặt chẽ giữa thiết kế cơ khí 2D, mạch điện tử công suất và thuật toán điều khiển nhúng thời gian thực. Bằng việc làm chủ mô hình toán học động học bánh xe và tận dụng tối đa sức mạnh phần cứng của dòng vi điều khiển 32-bit ARM Cortex-M3, hệ thống đạt độ chính xác định vị cao với sai số quãng đường chỉ $1.26%$, thời gian phản hồi né vật cản tức thời dưới $30\text{ ms}$.

Công trình không chỉ giải quyết trọn vẹn yêu cầu học thuật của đồ án tốt nghiệp ngành Công nghệ Cơ điện tử mà còn mở ra nền tảng vững chắc cho các nghiên cứu chuyên sâu tiếp theo như tích hợp hệ điều hành ROS2, hệ thống dẫn đường thông minh LiDAR SLAM và mạng nơ-ron điều hướng tự động trong công nghiệp.