Files
App/docs/AMR_SLAM_Thang_May.md
2026-07-24 09:07:54 +07:00

16 KiB

title, subtitle, author, date, lang
title subtitle author date lang
AMR SLAM Đa Tầng Qua Thang Máy Ghi chú nguyên lý và chức năng thang máy RD Odomety 10/07/2026 vi

Tổng quan

Tài liệu này tổng hợp nguyên lý điều hướng AMR (Autonomous Mobile Robot) sử dụng SLAM để di chuyển giữa các tầng thông qua thang máy, và vai trò/chức năng của thang máy trong hệ thống.

Đây là bài toán điều hướng đa tầng (multi-floor navigation) — không chỉ là SLAM thuần túy. SLAM giải quyết "robot đang ở đâu trên bản đồ", còn thang máy thêm lớp điều phối hệ thống tòa nhà + chuyển đổi ngữ cảnh giữa các tầng.


Phần 1: Nguyên lý AMR SLAM di chuyển qua thang máy

1.1 Kiến trúc tổng quan

Các thành phần chính trong hệ thống:

Thành phần Vai trò
SLAM / Localization Định vị trên bản đồ từng tầng
Global planner Lập kế hoạch đường đi xuyên tầng
Elevator interface Gọi thang, mở cửa, giữ cửa, nhận trạng thái
Mission / State machine Điều phối toàn bộ quy trình lên/xuống tầng
Map management Quản lý nhiều bản đồ, chuyển tầng

Luồng tương tác:

AMR + SLAM → Navigation / Mission → Elevator Manager
                                      ↓
                              Elevator Controller / BMS
                              Map Switch / Relocalization

1.2 Cách biểu diễn bản đồ đa tầng

A. Nhiều bản đồ độc lập (phổ biến nhất)

  • Mỗi tầng một map riêng (2D occupancy grid hoặc graph).
  • Các map không nối liên tục về mặt hình học — chỉ liên kết qua elevator node.
  • Ví dụ: Floor_1.map, Floor_2.map, mỗi map có điểm elevator_A_in, elevator_A_out.

B. Một bản đồ 3D / multi-layer

  • Một map chứa nhiều "layer" (mỗi layer = một tầng).
  • Phù hợp khi dùng SLAM 3D hoặc hệ thống thương mại (MiR, Omron, Geek+…).

C. Topological graph (đồ thị)

  • Node = điểm quan trọng (phòng, thang máy, cửa).
  • Edge = đường đi hoặc kết nối thang máy giữa các tầng.
  • Global planner chạy trên graph, local planner chạy trên map 2D từng tầng.

1.3 Quy trình điển hình (State Machine)

[Tầng nguồn]                    [Thang máy]                    [Tầng đích]
     |                               |                               |
  Navigate --> Wait at door --> Call elevator --> Enter --> Ride -->
  Align in cabin --> Door close --> Moving --> Door open --> Exit -->
  Relocalize on new floor --> Navigate to goal

Các trạng thái chi tiết

  1. Navigate to elevator waiting point — Robot đi đến vị trí chờ trước cửa thang.
  2. Request elevator — Gửi yêu cầu qua API/BMS: tầng đích, ID thang, ưu tiên.
  3. Wait for arrival — Chờ thang đến đúng tầng, cửa mở, cabin trống.
  4. Enter elevator — Local navigation vào cabin (line following, QR marker, hoặc map nhỏ trong cabin).
  5. Inside cabin — localization bị "mù" — Điểm then chốt kỹ thuật (xem mục 1.4).
  6. Ride to target floor — Robot đứng yên; hệ thống theo dõi trạng thái thang.
  7. Exit elevator — Ra khỏi cabin, đến điểm relocalization đã định sẵn.
  8. Relocalize on new floor — Xác định lại vị trí trên map tầng mới.
  9. Continue mission — Điều hướng bình thường trên tầng đích.

1.4 Thách thức SLAM / Localization trong thang máy

Vấn đề cốt lõi

Trong cabin, môi trường thay đổi liên tục (cửa đóng/mở, cabin di chuyển, người vào ra). LiDAR scan matching dễ drift hoặc nhảy pose sai.

Cách xử lý thực tế

Giai đoạn Chiến lược
Trước khi vào Localization bình thường (AMCL, Cartographer, SLAM Toolbox…)
Trong cabin Tắt hoặc "đóng băng" SLAM; chỉ dùng odometry ngắn hoặc IMU
Khi ra cabin Relocalization bằng scan matching với map tầng mới
Backup QR / AprilTag / UWB tại cửa thang hai đầu

Vai trò của Odometry

Trong cabin, wheel odometry + IMU giữ ước lượng tương đối ngắn (vài mét). Tuy nhiên odometry không đủ để biết đã lên tầng nào — cần tín hiệu từ thang máy (floor reached).

Luồng điển hình:

SLAM (tin cậy) → Odom only (trong thang) → SLAM relocalize (tầng mới)

1.5 Tích hợp thang máy (Elevator Integration)

Mức độ tích hợp

Mức 1 — Passive (đơn giản)

  • Robot chỉ chờ cửa mở (sensor hoặc camera), không điều khiển thang.
  • Phù hợp thang công cộng, khó triển khai công nghiệp.

Mức 2 — API với BMS / EMS (phổ biến)

  • Giao thức: Modbus, BACnet, OPC-UA, REST API, MQTT.
  • Robot gửi: call(floor=5), hold_door(), release().
  • Thang trả: current_floor, door_open, moving, fault.

Mức 3 — Dedicated robot elevator

  • Thang riêng cho robot (Kone, Otis, Schindler có giải pháp robot elevator).
  • robot mode: giữ cửa lâu hơn, điều khiển từng bước.

Tín hiệu thường cần

Robot → Elevator:  call_floor, destination_floor, hold_door, cancel
Elevator → Robot:  current_floor, door_status, ready, in_service, fault_code

1.6 Global planning xuyên tầng

Planner không tính đường liên tục 3D. Thường là 2 tầng lập kế hoạch:

  1. Topological planner (đồ thị):

    Room_A (F1) → Elevator_1_wait (F1) → [elevator_edge] → Elevator_1_exit (F3) → Room_B (F3)
    
  2. Local planner (từng tầng): DWA, TEB, Nav2 trên map 2D của tầng đó.

Elevator edge là "cạnh ảo": chi phí = thời gian chờ thang + thời gian di chuyển + rủi ro lỗi.

1.7 Relocalization khi sang tầng mới

Sau khi ra khỏi thang, robot không biết chính xác pose trên map tầng mới (drift trong cabin).

Phương pháp Mô tả
Scan matching So khớp LiDAR với map tầng mới (AMCL global localization)
Known exit pose Điểm ra cố định; initial pose gần đúng
Fiducial marker QR/AprilTag tại cửa thang
Feature matching Đặc trưng quanh khu vực cửa thang

Quy trình an toàn: robot ra đến relocalization zone → dừng → xác nhận pose (confidence > ngưỡng) → mới tiếp tục.

1.8 Luồng dữ liệu tổng thể

Mission: "Deliver to Room 502 (Floor 5)"
        |
        v
+------------------+
| Task Scheduler   | --> Chọn route: F1 -> Elevator B -> F5
+--------+---------+
         |
    +----+----+
    v         v
+--------+ +--------------+
| Nav2   | | Elevator FSM |
| (local)| | (call/wait/  |
|        | |  enter/exit) |
+---+----+ +------+-------+
    |             |
    v             v
+--------+   +-----------+
| SLAM / |   | Elevator  |
| AMCL   |   | API/BMS   |
+---+----+   +-----------+
    |
    v
+----------+
| Odometry |  <- dung khi SLAM khong tin cay (trong cabin)
| + IMU    |
+----------+

1.9 Các vấn đề thực tế cần lưu ý

  1. An toàn: E-stop, phát hiện người trong cabin, không chen khi cửa sắp đóng.
  2. Đồng bộ thời gian: Timestamp map, odometry và trạng thái thang phải nhất quán.
  3. Nhiều robot: Queue thang, tránh hai robot cùng gọi một cabin.
  4. Map maintenance: Thay đổi nội thất từng tầng → cập nhật map riêng.
  5. Khe cửa thang / ngưỡng: Robot phải vượt qua được; thường cần map chi tiết vùng cửa.
  6. Mất mạng: Timeout khi gọi thang; retry và fallback.
  7. Chuẩn hóa tọa độ: Mỗi tầng một hệ tọa độ; chỉ nối qua elevator node, không cộng trực tiếp tọa độ giữa các tầng.

Phần 2: Chức năng thang máy trong điều hướng AMR đa tầng

2.1 Vai trò vật lý vs vai trò logic

Lớp Thang máy làm gì
Vật lý Chuyển robot từ tầng A sang tầng B
Logic (navigation) Cạnh nối giữa hai map độc lập (Floor_AFloor_B)
Điều phối Tài nguyên dùng chung — nhiều robot có thể tranh nhau
An toàn Vùng nguy hiểm: cửa, khe, cabin chuyển động

Với SLAM: thang máy là ranh giới mà localization không còn đáng tin. Robot "nhảy" từ một không gian định vị được sang không gian khác, còn thang đảm nhiệm phần ở giữa.

2.2 Chức năng theo góc nhìn hệ thống

A. Vận chuyển (Transport)

Chức năng cơ bản: đưa cabin từ tầng nguồn đến tầng đích.

Robot không tự biết đã lên tầng nào nếu không có tín hiệu từ thang (current_floor, arrived_at_destination).

B. Cửa và vùng truy cập (Access control)

Thang quyết định khi nào robot được vào/ra:

  • Cửa mở đủ lâu để robot vào (thường cần hold door)
  • Cabin dừng đúng tầng, không lệch sàn quá ngưỡng
  • Không đóng cửa khi có vật cản (light curtain, cảm biến cửa)

C. Đồng bộ với robot (Synchronization)

Robot FSM                    Elevator FSM
-----------                  --------------
GO_TO_ELEVATOR               IDLE
WAIT_CALL          -->       RECEIVE_CALL
WAIT_DOOR_OPEN     <--       ARRIVED + DOOR_OPEN
ENTERING           <->       DOOR_HELD
INSIDE             -->       GO_TO_DEST_FLOOR
WAIT_EXIT          <--       ARRIVED + DOOR_OPEN
EXITING            <->       DOOR_HELD
RELOCALIZE                   RELEASE / IDLE

D. Tài nguyên dùng chung (Resource management)

  • Queue yêu cầu
  • Reservation (giữ thang cho robot)
  • Priority (robot giao hàng vs robot dọn phòng)

2.3 Interface: Robot ↔ Thang

Robot → Thang (Commands)

Lệnh Mục đích
call_elevator(floor) Gọi thang đến tầng robot đang đứng
request_ride(dest_floor) Đặt đích sau khi đã vào cabin
hold_door() Giữ cửa mở khi robot đang vào/ra
release_door() Cho phép đóng cửa
cancel() Hủy khi nhiệm vụ thất bại
ping / heartbeat Giữ session, phát hiện mất kết nối

Thang → Robot (Status / Events)

Tín hiệu Robot dùng để
current_floor Biết thang đang ở đâu
door_open / door_closed Quyết định vào/ra
moving / stopped Biết cabin đang chạy hay dừng
at_destination Xác nhận đã đến tầng đích
ready_for_robot Cabin sẵn sàng (trống, không lỗi)
fault / maintenance Dừng mission, chọn thang khác
passenger_present Có người — có thể chờ hoặc hủy

2.4 Các chế độ vận hành thang với robot

Chế độ Mô tả
Thang công cộng Robot chỉ quan sát, khó triển khai công nghiệp
Robot mode API với BMS, giữ cửa lâu, ưu tiên cabin trống — phổ biến nhất
Thang chuyên dụng Chỉ robot dùng, điều khiển hoàn toàn qua API

2.5 Chức năng thang tại từng giai đoạn mission

Giai đoạn 1: Trước cửa thang (tầng nguồn)

Thang: Nhận call, di chuyển cabin, mở cửa, báo ready.

Robot: Đi đến elevator_wait_point, chờ door_open + current_floor == my_floor.

Giai đoạn 2: Vào cabin

Thang: hold_door trong khi robot vào.

Robot: Tắt/hạ độ tin cậy SLAM, dùng odometry ngắn, gửi request_ride(dest_floor) khi vào xong.

Giai đoạn 3: Trong cabin (đang chạy)

Thang: Báo moving, current_floor, at_destination + door_open.

Robot: Đứng yên, không cố SLAM, chờ tín hiệu thang.

Giai đoạn 4: Ra cabin (tầng đích)

Thang: Giữ cửa mở cho đến khi robot báo exited.

Robot: Ra đến relocalization zone, load map tầng đích, relocalize, sau đó release_door.

2.6 Thang như "cạnh" trong đồ thị điều hướng

Floor 1:  [Room] --- [Elev1_Wait] ====ELEVATOR==== [Elev1_Exit]
                                                      |
Floor 3:  [Room] --- [Elev1_Wait] ====ELEVATOR==== [Elev1_Exit]
                                                      |
Floor 5:  [Room] --- [Elev1_Wait] ====ELEVATOR==== [Elev1_Exit]

Thuộc tính của cạnh thang:

  • Cost = thời gian chờ + thời gian chạy + độ tin cậy
  • Constraint = chỉ đi được khi elevator.available == true
  • Precondition = robot tại wait_point, thang ready
  • Postcondition = robot tại exit_point tầng đích, đã relocalize

2.7 Chức năng phụ quan trọng

  • Timeout & retry — Gọi thang quá lâu → đổi thang hoặc hủy mission
  • Interlock an toàn — Robot trong cabin, thang fault, lệch inside_pose
  • Multi-robot coordination — Queue, gán elevator_id, tránh tranh cabin
  • Ghi log / audit — Debug khi SLAM lệch sau khi ra thang

2.8 Phân chia trách nhiệm

Việc Ai làm
Biết vị trí trên hành lang từng tầng Robot (SLAM/AMCL)
Lập đường trong tầng Robot (local planner)
Vào/ra cabin không va chạm Robot (local nav + odometry)
Relocalize sau khi ra Robot
Chọn thang nào trong tòa nhà Fleet / mission manager
Mở cửa, chạy tầng, báo trạng thái Thang (qua BMS/API)

2.9 Ví dụ luồng sự kiện đầy đủ

1.  Mission: F2 → F5 qua Elevator B
2.  Robot nav đến Elev_B_wait (F2)          [SLAM hoạt động]
3.  Robot → Elev: call(2)
4.  Elev → Robot: moving_to_2
5.  Elev → Robot: arrived, door_open
6.  Robot → Elev: hold_door
7.  Robot nav vào cabin (2m)                 [odom chính, SLAM phụ]
8.  Robot → Elev: entered, ride_to(5)
9.  Robot → Elev: release_door (cho đóng)
10. Elev: moving 2→5
11. Elev → Robot: floor=3,4... (optional)
12. Elev → Robot: arrived_5, door_open
13. Robot → Elev: hold_door
14. Robot nav ra + relocalize (F5)          [SLAM bật lại]
15. Robot → Elev: exited, release_door
16. Robot nav đến đích trên map F5

Tóm tắt

Ba trụ cột của hệ thống

  1. Perception / Localization — biết vị trí trên từng tầng
  2. Building integration — điều khiển và đọc trạng thái thang máy
  3. Mission orchestration — quy trình vào/ra thang và chuyển map

Sáu chức năng cốt lõi của thang máy

  1. Transport — chuyển tầng vật lý
  2. Gateway — nối hai không gian/map SLAM tách biệt
  3. Access — kiểm soát cửa và thời điểm vào/ra
  4. Signaling — cung cấp trạng thái mà SLAM không suy ra được
  5. Resource — tài nguyên dùng chung cần đặt chỗ và xếp hàng
  6. Safety envelope — vùng vận hành có rủi ro cao, cần interlock

Kết luận

AMR multi-floor không phải một SLAM map khổng lồ 3D, mà là nhiều map 2D + đồ thị kết nối qua thang máy + state machine điều phối thang + relocalization khi đổi tầng.

Thang máy là cầu nối có điều kiện giữa các map — robot SLAM điều hướng trong từng tầng, còn thang đảm nhiệm chuyển tầng + đồng bộ trạng thái + kiểm soát cửa; localization được tạm ngưng trong cabinkhôi phục sau khi ra.