Atlas Robotics
Điều khiển RobotCơ bản

Điều khiển vòng kín (Closed-loop): nguyên lý chung đứng sau PID, Nav2, AMCL

Atlasbot · 17/8/2026 · 11 phút đọc

Điều khiển vòng kín (Closed-loop): nguyên lý chung đứng sau PID, Nav2, AMCL
So sánh sơ đồ khối open-loop và closed-loop

Các bài trước trong chuyên mục này — PID, Điều khiển tốc độ — đều là ứng dụng cụ thể của một nguyên lý duy nhất: điều khiển vòng kín (closed-loop control). Bài này lùi lại một bước, nhìn nguyên lý đó ở dạng tổng quát nhất, để thấy nó lặp lại ở mọi tầng của một hệ thống robot.

Khái niệm chính

Open-loop (vòng hở) là điều khiển không có phản hồi — ra lệnh một lần, tin tưởng hệ thống sẽ thực hiện đúng, không bao giờ kiểm tra lại kết quả thực tế:

lệnh → hệ thống → kết quả (không đo lại, không so sánh với mục tiêu)

Ví dụ: đặt hẹn giờ lò vi sóng 2 phút mà không có cảm biến nhiệt độ — lò chạy đúng 2 phút bất kể thức ăn đã đủ nóng hay chưa. Đơn giản, rẻ, nhưng không tự sửa sai khi điều kiện thực tế khác giả định.

Nguyên lý hoạt động

Closed-loop (vòng kín) thêm một đường phản hồi (feedback loop): đo kết quả thực tế, so sánh với mục tiêu, dùng sai lệch đó để điều chỉnh lệnh tiếp theo:

lệnh → hệ thống → kết quả thực tế
   ↑                    │
   └──── so sánh với mục tiêu, sinh lệnh mới ────┘

Tóm lại: Sự khác biệt cốt lõi không nằm ở độ phức tạp thuật toán — một PID đơn giản vẫn là closed-loop, một hệ thống phức tạp không đo lại kết quả vẫn là open-loop. Câu hỏi duy nhất cần trả lời: hệ thống có tự kiểm tra và sửa sai dựa trên kết quả thực tế hay không?

Cùng một nguyên lý xuất hiện ở nhiều tầng khác nhau:

TầngĐo gì (feedback)So sánh với gìSửa sai bằng gì
Điều khiển tốc độ động cơEncoderTốc độ mong muốnPID chỉnh PWM
Bám đường đi (Nav2 controller)Vị trí thực tế (odometry/AMCL)Path đã lập kế hoạchĐiều chỉnh v, ω
Định vị (AMCL)Scan LiDAR thực tếScan dự đoán theo bản đồĐiều chỉnh ước lượng vị trí
Sạc pin tự độngĐiện áp pin đo đượcNgưỡng pin đầyĐiều chỉnh dòng sạc

Kiến thức kỹ thuật

Công thức

Với một vòng phản hồi tỷ lệ đơn giản (proportional feedback), sai số ở trạng thái ổn định giảm theo hệ số gain của vòng lặp — công thức đơn giản hoá minh hoạ vì sao tăng gain giúp giảm sai số nhưng không phải "càng cao càng tốt":

Sai_so_on_dinh = Sai_so_open_loop / (1 + Gain_vong_lap)

VD: sai số open-loop giả định 10 đơn vị, gain vòng lặp = 9
Sai_so_on_dinh = 10 / (1 + 9) = 1 đơn vị (giảm 10 lần)

Gain càng cao, sai số càng giảm — NHƯNG gain quá cao kết hợp với độ trễ hệ thống
lớn là công thức kinh điển gây dao động mất ổn định (đã cảnh báo ở phần dưới)

Thông số

Độ trễ cảm biến (sensor latency) là một phần của độ trễ toàn vòng lặp, khác nhau lớn tuỳ loại cảm biến — đây là lý do các tầng closed-loop khác nhau phải chạy ở tần số khác nhau tương ứng:

Cảm biến feedbackĐộ trễ điển hình
Encoder (đọc trực tiếp qua GPIO/timer)Dưới 1ms
1 lần quét LiDAR đầy đủ~50-100ms (tuỳ tần số quét)
Suy luận AI trên ảnh camera~30-100ms tuỳ mô hình/phần cứng

Ứng dụng thực tế

Một hệ thống robot ROS2 hoàn chỉnh thực chất là một chuỗi các vòng closed-loop lồng nhau và phụ thuộc lẫn nhau — khi 1 tầng "gãy" (VD: encoder hỏng khiến vòng PID tốc độ mất feedback, tự động rơi về hành vi giống open-loop), mọi tầng closed-loop xây bên trên nó (bám path, AMCL định vị) đều bị ảnh hưởng dây chuyền dù bản thân chúng vẫn hoạt động đúng logic — vì đầu vào chúng nhận (dữ liệu odometry từ vòng bên dưới) đã không còn đáng tin cậy. Thiết kế hệ thống robot tốt cần tính tới khả năng phát hiện khi 1 tầng feedback bị mất/suy giảm (VD: giám sát sai số PID bất thường kéo dài) và có phản ứng an toàn tương ứng (giảm tốc độ, dừng, báo lỗi), thay vì để lỗi âm thầm lan truyền qua toàn bộ chuỗi các vòng lặp lồng nhau.

Ví dụ thực tế

# So sánh open-loop vs closed-loop khi có nhiễu (disturbance) tác động giữa chừng
target = 10.0

# Open-loop: cứ theo lệnh ban đầu, không đo lại
open_loop_output = target  # luôn = 10, bất kể nhiễu gì xảy ra

# Closed-loop: đo lại, sửa sai mỗi bước
actual = 0.0
gain = 0.5
disturbance = -3.0  # nhiễu kéo giá trị thực tế xuống ở bước giữa

for step in range(6):
    if step == 3:
        actual += disturbance  # nhiễu xảy ra
    error = target - actual
    actual += gain * error

    print(f"Step {step}: open_loop={open_loop_output}, closed_loop_actual={actual:.2f}")
Output:
Step 0: open_loop=10.0, closed_loop_actual=5.00
Step 1: open_loop=10.0, closed_loop_actual=7.50
Step 2: open_loop=10.0, closed_loop_actual=8.75
Step 3: open_loop=10.0, closed_loop_actual=2.94
Step 4: open_loop=10.0, closed_loop_actual=6.47
Step 5: open_loop=10.0, closed_loop_actual=8.23

open_loop luôn báo "10" không đổi (chỉ là con số lệnh, không phản ánh thực tế) — trong khi closed_loop_actual cho thấy đúng giá trị thực, tụt xuống khi nhiễu xảy ra ở bước 3 rồi tự động phục hồi dần ở các bước sau, đúng bản chất "đo → so sánh → sửa sai" của closed-loop.

Lỗi thường gặp

  • Nhầm hệ thống "phức tạp" với hệ thống "closed-loop" — như đã nói ở phần Nguyên lý hoạt động, độ phức tạp thuật toán không quyết định open-loop hay closed-loop — chỉ việc có đo lại kết quả thực tế hay không mới quyết định.
  • Gain quá cao kết hợp độ trễ lớn gây dao động — đúng công thức đã nêu ở mục Công thức, gain cao giảm sai số nhưng nếu độ trễ hệ thống lớn, vòng lặp "sửa sai" dựa trên thông tin đã cũ, dễ sửa quá tay theo cả 2 hướng gây dao động thay vì hội tụ.
  • Bỏ qua độ trễ cảm biến khi tune gain — tune gain chỉ dựa trên mô phỏng lý tưởng (không có độ trễ) rồi áp thẳng lên hệ thống thật (có độ trễ cảm biến thực tế) thường gây mất ổn định không lường trước.
  • Thêm closed-loop cho mọi thứ "cho chắc" — không phải hệ thống nào cũng cần feedback; thêm cảm biến và vòng lặp phản hồi cho những đại lượng ít biến động hoặc không quan trọng gây tốn kém phần cứng/độ phức tạp không cần thiết — cân nhắc open-loop có đủ dùng hay không trước khi mặc định chọn closed-loop.

Kết luận

Closed-loop control là nguyên lý thống nhất đứng sau mọi cơ chế điều khiển đã học trong chuyên mục — từ PID tốc độ động cơ, giới hạn gia tốc, trajectory tracking, tới AMCL định vị — tất cả đều là "đo → so sánh → sửa sai" ở các tầng và tần số khác nhau. Hiểu rõ đánh đổi giữa gain, độ trễ, và độ ổn định là chìa khoá thiết kế hệ thống điều khiển robot đáng tin cậy. Đây cũng là bài cuối cùng của chuyên mục Điều khiển Robot — bài học closed-loop vừa tổng hợp áp dụng trực tiếp vào chuyên mục tiếp theo: Localization, nơi robot dùng đúng nguyên lý này để liên tục sửa sai vị trí ước lượng của chính mình.

Điều khiển vòng kín (Closed-loop): nguyên lý chung đứng sau PID, Nav2, AMCL — Atlasbot