--- title: "AMR SLAM Đa Tầng Qua Thang Máy" subtitle: "Ghi chú nguyên lý và chức năng thang máy" author: "RD Odomety" date: "10/07/2026" lang: 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). - Có **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_A` ↔ `Floor_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 cabin** và **khôi phục sau khi ra**.