Open-RMF là gì?
Open-RMF (Open Robotics Middleware Framework) là framework mã nguồn mở để quản lý fleet robot đa hãng trong cùng một cơ sở. Được phát triển bởi Open Source Robotics Alliance (OSRA), Open-RMF giải quyết bài toán khó nhất trong robot fleet management: làm sao để robot từ nhiều nhà sản xuất khác nhau — mỗi hãng có giao thức riêng, navigation stack riêng — hoạt động phối hợp trong cùng một nhà máy mà không va chạm, không tranh giành tài nguyên.
Trong thực tế, một nhà máy sản xuất điện tử điển hình có thể sử dụng AMR của MiR cho vận chuyển linh kiện, robot Locus cho picking trong kho, và AGV tùy chỉnh cho dây chuyền lắp ráp. Không có Open-RMF, mỗi fleet chạy hệ thống quản lý riêng biệt — dẫn đến xung đột đường đi, deadlock tại cửa thang máy, và lãng phí tài nguyên.
Kiến trúc Open-RMF
Open-RMF được thiết kế theo kiến trúc module, mỗi thành phần đảm nhiệm một chức năng cụ thể:
┌─────────────────────────────────────────────────┐
│ Open-RMF Core │
│ ┌─────────────┐ ┌──────────────┐ │
│ │ Task │ │ Traffic │ │
│ │ Dispatcher │ │ Manager │ │
│ └──────┬──────┘ └──────┬───────┘ │
│ │ │ │
│ ┌──────┴────────────────┴───────┐ │
│ │ Schedule Database │ │
│ └──────┬────────────────┬───────┘ │
│ │ │ │
│ ┌──────┴──────┐ ┌─────┴───────┐ │
│ │Fleet Adapter│ │Fleet Adapter│ ... │
│ │ (MiR) │ │ (Custom) │ │
│ └──────┬──────┘ └──────┬──────┘ │
└─────────┼────────────────┼──────────────────────┘
│ │
┌────┴────┐ ┌────┴────┐
│ MiR AMR │ │ Custom │
│ Fleet │ │ AGV │
└─────────┘ └─────────┘
Fleet Adapter — Cầu nối giữa robot và hệ thống
Fleet Adapter là thành phần quan trọng nhất, đóng vai trò "phiên dịch" giữa giao thức riêng của từng hãng robot và API chuẩn của Open-RMF. Mỗi loại robot cần một fleet adapter riêng. Open-RMF cung cấp sẵn fleet_adapter_template bằng Python để bạn nhanh chóng viết adapter cho robot của mình.
Adapter chịu trách nhiệm:
- Nhận lệnh từ Open-RMF (di chuyển đến waypoint X, dock tại trạm Y)
- Chuyển đổi sang lệnh mà robot hiểu (REST API, MQTT, DDS, hoặc ROS 2 Action)
- Báo cáo trạng thái ngược lại: vị trí hiện tại, mức pin, trạng thái task
Traffic Manager — Quản lý giao thông
Traffic Manager giải quyết xung đột đường đi giữa các robot (kể cả khác hãng). Nó sử dụng thuật toán schedule-based conflict resolution: mỗi robot phải "đặt lịch" sử dụng các đoạn đường, và Traffic Manager đảm bảo không có hai robot nào chiếm cùng một lane tại cùng một thời điểm.
Task Dispatcher — Phân công nhiệm vụ
Task Dispatcher nhận yêu cầu task từ operator (qua dashboard hoặc API) và phân công cho robot phù hợp nhất dựa trên:
- Khoảng cách đến điểm pickup
- Mức pin còn lại
- Loại robot (không phải robot nào cũng làm được mọi task)
- Lịch trình hiện tại
Tại sao multi-vendor fleet khó?
Mỗi hãng robot sử dụng giao thức giao tiếp khác nhau. MiR dùng REST API, Fetch Robotics dùng MQTT, nhiều AGV Trung Quốc dùng giao thức Modbus TCP tùy chỉnh. Ngay cả khi tất cả đều chạy ROS 2, mỗi hãng cũng đặt tên topic, action khác nhau.
Vấn đề cốt lõi:
- Xung đột đường đi: Robot hãng A không biết robot hãng B đang đi đâu
- Tài nguyên chia sẻ: Thang máy, cửa tự động, hành lang hẹp — ai đi trước?
- Task allocation: Dispatch hệ thống nào gán task khi có nhiều fleet manager?
- Monitoring: Mỗi hãng có dashboard riêng, operator phải nhìn 3-4 màn hình
Open-RMF giải quyết tất cả bằng cách tạo một lớp trừu tượng phía trên mỗi fleet.
Cài đặt Open-RMF với ROS 2
Yêu cầu hệ thống
- Ubuntu 22.04 hoặc 24.04
- ROS 2 Humble hoặc Jazzy
- Python 3.10+
Cài đặt từ binary packages
# Cài ROS 2 Humble (nếu chưa có)
sudo apt update && sudo apt install -y ros-humble-desktop
# Cài Open-RMF packages
sudo apt install -y \
ros-humble-rmf-fleet-adapter \
ros-humble-rmf-task-ros2 \
ros-humble-rmf-traffic-ros2 \
ros-humble-rmf-visualization
# Source environment
source /opt/ros/humble/setup.bash
Build từ source (cho development)
mkdir -p ~/rmf_ws/src
cd ~/rmf_ws/src
# Clone core repos
git clone https://github.com/open-rmf/rmf.git
git clone https://github.com/open-rmf/rmf_demos.git
git clone https://github.com/open-rmf/free_fleet.git
# Install dependencies
cd ~/rmf_ws
rosdep install --from-paths src --ignore-src -r -y
# Build
colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release
source install/setup.bash
Chạy demo simulation
Open-RMF cung cấp sẵn các demo scenario với Gazebo:
# Demo nhà máy với 2 fleet robot khác nhau
ros2 launch rmf_demos_gz office.launch.xml
# Mở dashboard web (mặc định port 3000)
# Truy cập http://localhost:3000 để xem bản đồ real-time
Demo office bao gồm:
- 2 fleet robot:
tinyRobot(delivery) vàdeliveryRobot(heavy payload) - Traffic lanes được định nghĩa sẵn
- Doors và lifts tương tác được
- API endpoint để dispatch task
Viết Fleet Adapter cho robot tùy chỉnh
import rclpy
from rclpy.node import Node
from rmf_fleet_adapter import adpt
import rmf_adapter.vehicletraits as traits
import rmf_adapter.geometry as geometry
class MyFleetAdapter(Node):
def __init__(self):
super().__init__('my_fleet_adapter')
# Định nghĩa đặc tính robot
profile = traits.Profile(
footprint=geometry.make_final_convex_circle(0.3),
vicinity=geometry.make_final_convex_circle(0.5)
)
vehicle_traits = traits.VehicleTraits(
linear=traits.Limits(0.7, 0.5), # max vel, max accel
angular=traits.Limits(0.6, 0.8),
profile=profile
)
# Đăng ký fleet với Open-RMF
self.adapter = adpt.Adapter.make('my_fleet_adapter')
self.fleet_handle = self.adapter.add_fleet(
'my_custom_fleet',
vehicle_traits,
self.navigation_graph
)
self.get_logger().info('Fleet adapter initialized!')
def navigate(self, robot_name, destination):
"""Gửi lệnh di chuyển đến robot thực tế"""
# Thay thế bằng API call đến robot controller
self.get_logger().info(
f'Navigating {robot_name} to {destination}'
)
def main():
rclpy.init()
adapter = MyFleetAdapter()
rclpy.spin(adapter)
if __name__ == '__main__':
main()
So sánh với giải pháp proprietary
| Tiêu chí | Open-RMF | VDA5050 | MiR Fleet |
|---|---|---|---|
| License | Apache 2.0 (miễn phí) | Tiêu chuẩn mở (miễn phí spec) | Proprietary (trả phí) |
| Multi-vendor | Native support | Chuẩn giao tiếp, cần thêm orchestrator | Chỉ MiR robot |
| ROS 2 integration | Native | Cần bridge | Không hỗ trợ |
| Traffic management | Schedule-based, built-in | Không có (chỉ là giao thức) | Zone-based, basic |
| Task dispatch | Built-in, configurable | Không có | Built-in cho MiR |
| Community | GitHub active, OSRA backing | VDA consortium | MiR support team |
| Customization | Hoàn toàn tùy chỉnh | Theo spec | Hạn chế |
VDA5050 — Tiêu chuẩn giao tiếp châu Âu
VDA5050 là chuẩn giao tiếp giữa AGV/AMR và master controller, phát triển bởi Hiệp hội Công nghiệp Ô tô Đức (VDA) và VDMA. Nó định nghĩa giao thức MQTT chuẩn để robot từ nhiều hãng giao tiếp với một master controller duy nhất. Tuy nhiên, VDA5050 chỉ là giao thức — bạn vẫn cần tự xây dựng traffic manager và task dispatcher, trong khi Open-RMF cung cấp toàn bộ.
MiR Fleet — Chỉ cho hệ sinh thái MiR
MiR Fleet Manager là giải pháp thương mại của Mobile Industrial Robots (thuộc Teradyne). Mạnh mẽ và dễ cài đặt, nhưng chỉ quản lý được robot MiR. Nếu nhà máy bạn có thêm AGV từ hãng khác, MiR Fleet không giúp được.
Tài nguyên học tập
Open-RMF có tài liệu phong phú và cộng đồng active:
- GitHub chính: github.com/open-rmf/rmf — root repo với hướng dẫn cài đặt
- Free Fleet: github.com/open-rmf/free_fleet — Python fleet adapter sử dụng zenoh
- Demo: github.com/open-rmf/rmf_demos — các scenario mô phỏng sẵn
- Sách online: osrf.github.io/ros2multirobotbook — hướng dẫn chi tiết từ A-Z
Khi nào nên dùng Open-RMF?
Nên dùng khi:
- Nhà máy có robot từ 2+ nhà sản xuất khác nhau
- Bạn cần traffic management tự động tại các nút giao
- Team có kinh nghiệm ROS 2 và muốn toàn quyền kiểm soát
Cân nhắc thêm khi:
- Chỉ có robot từ một hãng — dùng fleet manager của hãng đó có thể đủ
- Không có kỹ sư ROS 2 — đường cong học tập khá dốc
- Cần support 24/7 — giải pháp thương mại có SLA rõ ràng hơn
VnRobo đang tích hợp Open-RMF vào giải pháp fleet management, kết hợp với dashboard giám sát real-time để tạo ra sản phẩm phù hợp cho nhà máy Việt Nam — nơi multi-vendor fleet đang trở thành tiêu chuẩn.
Bài viết liên quan
- Quản lý đội robot trong nhà máy thông minh — Tổng quan về Robot Fleet Management
- Kubernetes cho Robot Fleet: Orchestration ở quy mô lớn — Deploy và quản lý phần mềm fleet với K3s
- Multi-robot Coordination: Thuật toán phân công task — Các thuật toán allocation từ Hungarian đến RL