TwinSight × Open-RMF

Integration Analysis — What to Adopt, What to Build
Apache 2.0 · 81 Repositories · ROS 2 Humble / Jazzy

What is Open-RMF?

Open-RMF (Open Robotics Middleware Framework) is an open-source collection of libraries and tools built on ROS 2 that enables interoperability among heterogeneous robot fleets. It manages shared resources — space, doors, lifts, corridors, dispensers — so that robots from different manufacturers can coexist in the same facility without collisions or deadlocks.

Since 2024, Open-RMF is managed by the Open Source Robotics Alliance (OSRA). It is licensed under Apache 2.0 — fully commercial-friendly, no copyleft, no patent traps.

🚦

Traffic Deconfliction

Centralized schedule database with look-ahead conflict detection. When robots' trajectories intersect, a peer-to-peer negotiation protocol (similar to conflict-based search) proposes alternative routes, speed changes, or pauses.

rmf_traffic
📋

Task Allocation

Competitive bidding system where a Dispatcher broadcasts task requests to all fleet adapters. Each fleet responds with a cost/time bid using rmf_task::agv::TaskPlanner. Best bid wins. Supports composed tasks with phases.

rmf_task
🔌

Fleet Adapters

Translation layer between proprietary robot APIs and standardized Open-RMF protocols. Four control levels: Full Control, Traffic Light, Read Only, and No Interface. Python API via EasyFullControl.

rmf_fleet_adapter
🏗️

Infrastructure Integration

Standardized interfaces for doors, lifts, and dispensers. Robots can request door opens, summon elevators, and trigger dispensing stations through uniform ROS 2 messages — regardless of manufacturer.

rmf_building_map
🗺️

Traffic Editor

GUI tool to annotate building floor plans with navigation graphs, lanes, waypoints, charger locations, doors, and lifts. Exports navigation graphs consumed by fleet adapters for path planning.

rmf_traffic_editor
🌐

Web Dashboard

React 18 + TypeScript frontend with FastAPI backend. Real-time fleet visualization on building maps, task dispatching, infrastructure control. Socket.IO for live updates, Keycloak for auth.

rmf-web

Why This Matters for TwinSight

Open-RMF solves the hardest multi-robot coordination problems — traffic deconfliction, cross-fleet task bidding, and infrastructure arbitration — that TwinSight's proposal currently leaves to custom implementation. Rather than reinventing these algorithms, TwinSight can adopt Open-RMF's battle-tested core and focus engineering effort on its differentiators: the web-native monitoring UX, telemetry analytics pipeline, and business intelligence layer.

Open-RMF Architecture

Open-RMF follows a layered architecture where fleet adapters bridge individual robots to a centralized coordination core. The web layer provides human oversight.

Open-RMF Component Architecture

WEB LAYER — rmf-web React Dashboard FastAPI Server Socket.IO (live) Keycloak Auth ROS 2 Gateway COORDINATION CORE Traffic Schedule rmf_traffic Conflict detect + negotiate Task Dispatcher rmf_task Bid → allocate → monitor Negotiation Engine rmf_traffic_ros2 A* time-extended search Battery Planner rmf_battery Charge scheduling Map Server building_map Nav graphs FLEET ADAPTERS — Translation Layer Full Control Adapter Path + pause + battery + tasks Traffic Light Adapter Status read + pause/resume Read Only Adapter Monitor only, no control Free Fleet (Zenoh) Python + zenoh-bridge-ros2dds PHYSICAL LAYER — Robots + Building Infrastructure AMR Fleet A Nav2 / Custom AGV Fleet B Proprietary API Cleaning Bot C REST API Doors RMF Door API Lifts RMF Lift API Dispensers RMF Dispenser API

Key Insight: Four-Level Adapter Model

Open-RMF's adapter hierarchy (Full Control → Traffic Light → Read Only → No Interface) maps directly to TwinSight's real-world challenge: some robot manufacturers will provide full API access, others will only allow monitoring. The adapter framework gives TwinSight a structured way to handle this heterogeneity without custom code for each integration level.

Components Deep Dive

Understanding what each Open-RMF component actually does at the code level — and how mature it is.

rmf_traffic — Space-Time Conflict Management

The traffic system is the crown jewel of Open-RMF. It maintains a centralized schedule database that stores the predicted trajectories of every robot in the facility — projected into the future.

Schedule Database

A living, dynamic database that stores intended robot trajectories. It changes over time to reflect delays, cancellations, and route changes. Every fleet adapter reports its robots' expected itineraries here.

Conflict Detection

Continuously analyzes the schedule to identify future conflicts — where robot trajectories will intersect in space and time. This is prevention-first: detect before it happens.

Negotiation Protocol

When conflicts are inevitable, a peer-to-peer negotiation begins. Each fleet manager submits preferred itineraries. Others respond with accommodating alternatives. A third-party judge selects the optimal arrangement.

Path Planning

Uses time-dependent A* search that plans through both space and time, accounting for other agents in the schedule. For AGVs on predefined grids. AMR support (ad-hoc paths) is planned for future versions.

Current Limitation

The planner currently works best with AGVs on predefined navigation graphs. For AMRs that navigate freely (like many modern robots), the traffic system can still track their positions and detect conflicts, but the path planning optimization is limited. This is an active area of development.

rmf_task — Competitive Bidding & Task Composition

The task system handles how work gets assigned to robots across multiple fleets.

1

Task Request Submitted

User or system submits a task (patrol, delivery, clean, or composed task) via the web dashboard or API.

2

Dispatcher Broadcasts BidNotice

The rmf_dispatcher_node sends a BidNotice message to all fleet adapters. Any fleet that can handle the task type participates.

3

Fleets Submit BidProposals

Each fleet adapter uses its rmf_task::agv::TaskPlanner instance to calculate the optimal robot, considering current tasks, battery levels, and travel time. Returns a cost estimate.

4

Best Bid Wins

Dispatcher compares proposals (fastest finish, lowest cost, configurable criteria) and sends a DispatchRequest to the winning fleet.

5

Execution & Battery Management

Fleet adapter executes the task. ChargeBattery tasks are automatically injected into the schedule when battery levels are insufficient for the next task.

Native task types include Patrol (loop between waypoints), Delivery (pick-up → drop-off), and Clean (floor cleaning). Custom tasks can be defined via Composed Requests — sequences of phases (navigate, dock, perform action, etc.) chained together.

Fleet Adapters — The Integration Layer

Every robot fleet needs a fleet adapter — this is where the rubber meets the road for any Open-RMF deployment.

Control LevelCapabilitiesAPIWhen to Use
Full Control Complete path direction, pause/resume, battery monitoring, task management, infrastructure interaction C++ with Python bindings (EasyFullControl) Robots with full API access — you can tell them where to go, when to stop, and query their state
Traffic Light Read robot status, pause and resume movement Custom integration via core APIs Robots with their own planner but that accept stop/go commands
Read Only Monitor position and status — no control Preliminary ROS 2 messaging Robots you can observe but not command (e.g., third-party fleets sharing a space)
No Interface None — incompatible with RMF N/A Legacy robots with no external API. Must be handled by safety margins and human oversight.

To build a Full Control fleet adapter, you implement a RobotClientAPI class with methods like navigate(), position(), battery_soc(), is_command_completed(), and stop(). The fleet_adapter_template repo provides a working starting point.

# Simplified fleet adapter structure (Python EasyFullControl API) class RobotClientAPI: def navigate(self, pose, map_name, speed_limit): # Send navigation command to your robot's API """Translate RMF waypoint → robot-specific command""" def position(self): # Returns [x, y, theta] in robot's coordinate frame return [x, y, theta] def battery_soc(self): # Returns battery state of charge (0.0 → 1.0) return 0.85 def stop(self): # Halt the robot immediately ... # Register callbacks with EasyFullControl callbacks = rmf_adapter.RobotCallbacks( navigate_cb, stop_cb, execute_action_cb ) fleet.add_robot(robot_name, callbacks)

Building Infrastructure Integration

Open-RMF provides standardized ROS 2 message interfaces for common building infrastructure elements. This is critical for multi-floor deployments.

Door Supervisor

Publishes DoorState and accepts DoorRequest messages. Supports open/close/hold modes. Fleet adapters automatically request door access when a robot's planned path requires it.

rmf_door_msgs

Lift Supervisor

Manages elevator arbitration between robots and humans. Publishes LiftState (current floor, door status, motion state) and handles LiftRequest for summoning.

rmf_lift_msgs

Dispenser/Ingestor

For automated pickup/dropoff stations. DispenserRequest triggers item release; IngestorRequest triggers item acceptance. Both report state via their respective state messages.

rmf_dispenser_msgs

TwinSight Relevance

If TwinSight is deployed in facilities with shared infrastructure (warehouses with automatic doors, hospitals with elevators, factories with dispensing stations), these interfaces save enormous integration effort. If TwinSight only targets open-floor facilities, this component has lower value — but it's there when you need it.

rmf-web — Dashboard & API Server

The web layer is particularly interesting for TwinSight because it shares many architectural choices.

Componentrmf-webTwinSight (Proposed)Alignment
Frontend React 18 + TypeScript + MUI v5 + Three.js Ionic + Angular + TypeScript Different frameworks
Backend FastAPI v0.109 (Python) FastAPI (Python) Identical choice
Real-time Socket.IO (python-socketio ~5.11) WebSocket (native) Compatible pattern
Auth JWT + Keycloak (OpenID Connect) JWT + RBAC (custom) Similar approach
ORM Tortoise ORM (async, SQLite/PostgreSQL) SQLAlchemy (PostgreSQL) Different but compatible
ROS 2 Bridge RmfGateway class (in-process ROS node) ROS Adapter (separate service) Different topology
Models Auto-generated from ROS IDL via Jinja2 Manual Pydantic models Adopt code generation

Key Takeaway

The backends are nearly identical (FastAPI). The code generation pipeline (ROS IDL → Pydantic models + TypeScript types) is a genuine time-saver TwinSight should adopt. The frontend is different (React vs Angular), so TwinSight should keep its own UI but can use rmf-web's API server as a reference architecture — or even embed it as an internal microservice behind TwinSight's gateway.

TwinSight vs Open-RMF — Feature Overlap

A clear mapping of where the two platforms overlap, complement each other, and where each has unique strengths.

CapabilityTwinSight (Proposed)Open-RMFVerdict
Fleet Visualization Custom web dashboard with map view, real-time robot positions React dashboard with 2D/3D building maps, fleet overlays USE OPENRMF for map rendering, build custom UX on top
Traffic Deconfliction Not specified in proposal Full schedule database + negotiation protocol + A* planner USE OPENRMF — this is 3-6 months of custom work saved
Task Dispatch Mission system (Created → Assigned → Running → Completed/Failed) Competitive bidding, phase-based composition, auto battery scheduling ADAPT — use RMF bidding for allocation, TwinSight for business workflow
Multi-Fleet Support Planned but architecture unclear Core design — every component assumes multiple heterogeneous fleets USE OPENRMF — heterogeneous fleet management is its raison d'être
ROS 2 Bridge Zenoh bridge architecture (designed in previous analysis) Fleet adapters (C++/Python) + free_fleet (Zenoh-based) ADAPT — free_fleet aligns perfectly with TwinSight's Zenoh strategy
Telemetry Storage TimescaleDB (time-series) + Redis (hot) + PostgreSQL (business) Tortoise ORM (SQLite/PostgreSQL) — minimal telemetry focus BUILD IN TWINSIGHT — RMF has no telemetry analytics pipeline
Binary Data (bags, video) ReductStore integration (planned) Not addressed BUILD IN TWINSIGHT — ReductStore fills this gap
Anomaly Detection ML-based anomaly detection on telemetry Not addressed BUILD IN TWINSIGHT — unique differentiator
Alerting & Notifications Kafka events → alert pipeline → UI notifications Basic alert system in rmf-web API BUILD IN TWINSIGHT — need richer pipeline
Reporting / BI Report generation (MinIO storage), GDPR compliance Not addressed BUILD IN TWINSIGHT — business layer is TwinSight's domain
Building Infrastructure Not specified Doors, lifts, dispensers — standardized APIs USE OPENRMF — ready-made for multi-floor deployments
Teleoperation WebRTC-based remote control Not addressed (basic joystick in demos) BUILD IN TWINSIGHT — teleop is TwinSight-specific
Auth & RBAC JWT + custom RBAC (Admin/Operator/Supervisor) JWT + Keycloak + basic RBAC ADAPT — use Keycloak as identity provider, custom roles in TwinSight
Map Editor Not specified (upload-only planned) Full GUI traffic editor with lane/waypoint annotation USE OPENRMF — don't build a map editor from scratch

Integration Architecture

How Open-RMF fits into TwinSight's existing 4-tier architecture without replacing what TwinSight does best.

TwinSight + Open-RMF — Unified Architecture

TWINSIGHT WEB UI (Angular / Ionic) Dashboard Teleop View Fleet Map Alerts & Reports Analytics Admin Replay TWINSIGHT BACKEND (FastAPI Microservices) Telemetry Svc TimescaleDB + Redis Alert & Anomaly ML Pipeline Reports & BI MinIO + GDPR Teleop Svc WebRTC Auth & RBAC JWT + Keycloak Binary Storage ReductStore OPEN-RMF CORE (ROS 2 Nodes) Traffic Schedule Conflict + Negotiate Task Dispatcher Bid + Allocate Battery Planner Auto charge inject Infrastructure Doors / Lifts Map Server Nav Graphs RMF API Server FastAPI bridge KAFKA EVENT BUS — robot.state · mission.* · alert.* · rmf.traffic · rmf.task RMF ↔ KAFKA BRIDGE — Translates ROS 2 topics to Kafka events and vice versa FLEET ADAPTERS (Open-RMF + TwinSight Zenoh Bridge) Free Fleet Adapter Python + Zenoh (Nav2 robots) Custom Fleet Adapter Per-manufacturer API bridge Read-Only Adapter Third-party fleet monitoring Infrastructure Adapters Doors / Lifts / Dispensers ZENOH NETWORK — zenoh-bridge-ros2dds per robot (namespaced) → zenohd router ROBOTS & INFRASTRUCTURE (Zero Software Installed) AMR Fleet A ROS 2 Nav2 AGV Fleet B VDA 5050 API Cleaner Fleet C REST API Delivery Bot D Proprietary SDK Doors Lifts Disp. TwinSight Differentiators Open-RMF Coordination Engine

Architecture Principle: Side-by-Side, Not Replacement

Open-RMF core runs as a set of ROS 2 nodes alongside TwinSight's FastAPI microservices. A lightweight RMF ↔ Kafka bridge translates between the two worlds: RMF publishes fleet states, task updates, and traffic events on ROS 2 topics; the bridge forwards these as Kafka events that TwinSight's services already consume. Commands flow back the same way. This preserves TwinSight's event-driven architecture while gaining RMF's coordination intelligence.

Use from Open-RMF vs Build in TwinSight

The definitive matrix — what to adopt, what to build, and why.

Use from Open-RMF

Traffic Deconfliction Engine USE

The schedule database, conflict detection, and negotiation protocol represent thousands of engineering hours. Building this from scratch would be TwinSight's biggest time sink. Open-RMF's implementation handles multi-fleet conflicts with time-extended A* search and peer-to-peer negotiation.

Saves 3-6 months

Task Bidding & Allocation USE

The competitive bidding system (Dispatcher → BidNotice → BidProposal → DispatchRequest) with automatic battery scheduling. TwinSight's mission system wraps around this — RMF handles "which robot" and "when to charge," TwinSight handles "what business goal."

Saves 2-3 months

Fleet Adapter Framework USE

The EasyFullControl Python API plus the fleet_adapter_template. For each new robot manufacturer, you implement ~5 methods instead of building a complete integration layer. Free Fleet adds Zenoh support for Nav2 robots — perfectly aligned with TwinSight's existing Zenoh bridge strategy.

Saves 1-2 months per fleet integration

Traffic Editor & Map Server USE

GUI for annotating building plans with navigation graphs, waypoints, chargers, doors, and lifts. Exports nav graphs consumed by fleet adapters. Don't build a map editor — this one works.

Saves 1-2 months

Infrastructure Interfaces (Doors/Lifts/Dispensers) USE

Standardized ROS 2 message types for building infrastructure. Ready to use for multi-floor deployments with elevators, secure doors, and automated stations.

Saves 2-4 weeks per deployment

ROS IDL → Code Generation Pipeline USE

The ros_translator tool that generates Pydantic models and TypeScript types from ROS message definitions. Eliminates manual model maintenance and ensures type safety across the stack.

Saves 2-3 weeks + ongoing maintenance

Build in TwinSight

Telemetry Analytics Pipeline BUILD

TimescaleDB for time-series telemetry, Redis for hot state, Kafka for event streaming. Open-RMF has no analytics story — it tracks state but doesn't analyze trends, detect patterns, or generate insights. This is TwinSight's primary differentiator.

Anomaly Detection & ML BUILD

ML-based anomaly detection on telemetry streams, predictive maintenance, performance degradation alerts. Open-RMF doesn't touch this space. Combined with Mosaico for data pipeline and ReductStore for binary data, this is where TwinSight creates unique value.

Web UI / Dashboard BUILD

TwinSight's Angular/Ionic frontend with custom UX for monitoring, teleop, analytics, and reporting. While rmf-web has a React dashboard, TwinSight's UI requirements go far beyond basic fleet visualization. Use RMF's API server data, present it through TwinSight's richer interface.

Teleoperation (WebRTC) BUILD

Real-time remote robot control via WebRTC video streams and command injection. Open-RMF has no teleoperation capability. This requires tight latency control, video streaming, and input handling that's specific to TwinSight's UX.

Business Intelligence & Reporting BUILD

Report generation, KPI dashboards, fleet utilization metrics, GDPR compliance, audit logs. This entire business layer is TwinSight's domain — Open-RMF is an infrastructure project, not a business platform.

Binary Data Storage (ReductStore) BUILD

ROS bag recording, video storage, incident replay — all via ReductStore integration. Open-RMF doesn't address persistent binary data storage at all.

RMF ↔ Kafka Bridge BUILD

A custom bridge service that subscribes to Open-RMF's ROS 2 topics (/fleet_states, /task_states, etc.) and publishes them as Kafka events. Also translates Kafka commands back to RMF ROS 2 actions. This is the glue between the two systems — ~2-3 weeks of work.

The 80/20 Split

Open-RMF handles robot coordination (traffic, tasks, fleet adapters, infrastructure) — roughly 40% of the total platform scope. TwinSight builds business intelligence (telemetry analytics, anomaly detection, reporting, teleop, custom UX) — the other 60%. The estimated total time savings from adopting Open-RMF is 6-12 months of development, depending on how many fleet integrations are needed.

Free Fleet + Zenoh — Perfect Alignment

The free_fleet package deserves special attention because it directly aligns with TwinSight's Zenoh bridge architecture designed in our earlier analysis.

🔗

How Free Fleet Works

Free Fleet is a Python implementation of the Open-RMF Fleet Adapter that uses Zenoh as its communication backbone. Each robot runs a zenoh-bridge-ros2dds process (or has one on a nearby edge device), namespaced by robot name. The central free_fleet_adapter connects to all robots through a Zenoh router.

Python 97.3% Zenoh 1.5.0
🎯

Why This Matters

TwinSight's Zenoh bridge architecture (from our ROS Adapter analysis) uses the exact same pattern: zenoh-bridge-ros2dds on edge devices, Zenoh router centrally, namespaced per robot. Free Fleet provides the fleet adapter layer that sits on top of this — you don't need to write it from scratch.

Direct reuse

TwinSight Zenoh Bridge + Free Fleet Integration

Robot A (Nav2) Non-namespaced topics Robot B (Nav2) Non-namespaced topics Robot C (Nav2) Non-namespaced topics zenoh-bridge-ros2dds namespace: robot_a zenoh-bridge-ros2dds namespace: robot_b zenoh-bridge-ros2dds namespace: robot_c zenohd Router QUIC / TCP Free Fleet Adapter EasyFullControl Python API eclipse-zenoh + pycdr2 + nudged Open-RMF Core Traffic + Tasks + Negotiate → Kafka Bridge → TwinSight Edge (per-robot or per-site) Central Coordination

Architecture Convergence

Free Fleet's architecture is essentially the same as TwinSight's designed Zenoh bridge pattern: non-namespaced robots → namespaced Zenoh bridges → central router → fleet adapter. By adopting Free Fleet, TwinSight gains the fleet adapter logic (navigate, monitor, stop, battery) without writing it. The only addition is the Kafka bridge to connect RMF's output to TwinSight's event-driven backend.

Compatibility Notes

Tested on: Ubuntu 24.04, ROS 2 Jazzy, Cyclone DDS, Zenoh 1.5.0. Also supports ROS 1 Noetic via zenoh-bridge-ros1. For Humble (the other current LTS), community reports indicate it works but isn't the primary test target. The same REP-2016 type hash incompatibility noted in our earlier Zenoh bridge analysis applies here — stick to same-distro deployments or use distro-aware adapter instances.

Web Layer Strategy

How to handle the fact that both TwinSight and Open-RMF have web dashboards.

🔧

Option A: Use RMF API Server as Internal Microservice

Run rmf-web's FastAPI API server as an internal service behind TwinSight's API gateway. TwinSight's frontend calls TwinSight's backend, which proxies fleet coordination requests to the RMF API server. Users never see the RMF dashboard.

Recommended

Pros: Clean separation, single frontend, RMF API server handles ROS 2 ↔ HTTP translation. Cons: Extra network hop for fleet requests.

🔗

Option B: Direct ROS 2 Subscription

Skip rmf-web entirely. TwinSight's ROS Adapter subscribes directly to RMF's ROS 2 topics (/fleet_states, /task_states, etc.) and translates them to Kafka events. Commands go back via ROS 2 action servers.

Alternative

Pros: No extra service to maintain. Cons: Must maintain ROS 2 message schemas manually, lose rmf-web's task dispatch REST API.

🖥️

Option C: Embed RMF Dashboard

Embed rmf-web's React dashboard as an iframe or micro-frontend within TwinSight's Angular shell. Used for the map/traffic visualization component only.

Possible

Pros: Get the traffic visualization for free. Cons: Framework mismatch (React inside Angular), visual inconsistency, harder to maintain.

Recommendation: Option A (API Server as Microservice)

This aligns best with TwinSight's microservices architecture. The RMF API server becomes just another internal service — alongside telemetry, alerts, and reporting services — that TwinSight's gateway routes to. The code generation pipeline (ros_translator) keeps the Pydantic models in sync. TwinSight's Angular frontend renders fleet data using its own components, maintaining visual consistency.

Implementation Roadmap

A phased approach to integrating Open-RMF into TwinSight.

Phase 1 — Foundation (Weeks 1-4)

Infrastructure setup + first fleet adapter

Deploy Open-RMF core nodes (traffic schedule, dispatcher, map server) alongside TwinSight's Docker Compose stack. Build the RMF ↔ Kafka bridge service. Deploy Free Fleet adapter for the first Nav2-based robot fleet. Verify end-to-end: robot state flows from ROS 2 → Zenoh → Free Fleet → RMF → Kafka → TwinSight UI.

Phase 2 — Task Integration (Weeks 5-8)

Connect TwinSight missions to RMF task dispatch

Wire TwinSight's mission creation UI to trigger RMF task requests via the API server. Map TwinSight mission states (Created → Assigned → Running → Completed) to RMF task lifecycle events. Implement composed tasks for multi-step missions. Add battery scheduling visibility to TwinSight dashboard.

Phase 3 — Traffic & Multi-Fleet (Weeks 9-12)

Enable traffic deconfliction + second fleet

Configure navigation graphs via Traffic Editor for the deployment facility. Enable traffic deconfliction between the first fleet and a second fleet (possibly different manufacturer, different adapter type). Visualize traffic schedule and conflict resolution in TwinSight's map view. Add infrastructure integration (doors/lifts) if applicable to the facility.

Phase 4 — Production Hardening (Weeks 13-16)

Failover, monitoring, scaling

Add health monitoring for RMF nodes (integrate with Prometheus/Grafana from TwinSight's observability stack). Implement failover for the RMF ↔ Kafka bridge. Load-test with simulated fleet scaling. Document fleet adapter development workflow for future manufacturers. Run end-to-end integration tests.

Timeline Assessment

16 weeks for full integration is realistic if the team has ROS 2 experience. The hardest part is Phase 1 — getting the first robot fleet talking through the full pipeline. Once that works, subsequent fleet integrations follow the same pattern with the fleet_adapter_template. Budget extra time (2-4 weeks) for the first custom fleet adapter if the robot doesn't use Nav2.

Expert Verdict

Strategic Fit Score

Traffic Deconfliction
9.5/10
Task Allocation
8.5/10
Fleet Adapter Framework
9/10
Web Dashboard
4.5/10
Zenoh Alignment
9.5/10
Telemetry/Analytics
1.5/10
Production Maturity
7/10

Development Impact

Estimated time saved 6-12 months
Integration effort 12-16 weeks
License risk None (Apache 2.0)
Community health Active (OSRA managed)
Production deployments Changi Airport + others
ROS 2 distro support Jazzy (primary) + Humble

Bottom Line

Open-RMF is the strongest open-source complement to TwinSight's architecture. It provides exactly the coordination intelligence (traffic, tasks, fleet adapters) that TwinSight's proposal marks as "to be built," while having zero overlap with TwinSight's actual differentiators (telemetry analytics, anomaly detection, reporting, teleop). The Zenoh alignment via Free Fleet is almost too good to be true — it validates TwinSight's bridge architecture design and provides a ready-made fleet adapter implementation on top of it.

Watch Out For

1. Fleet Adapter Complexity: The fleet adapter is the hardest part of any Open-RMF deployment. For non-Nav2 robots, expect 4-8 weeks per custom adapter. 2. AGV vs AMR: Traffic planning currently optimizes for AGVs on navigation graphs. If TwinSight targets AMRs that navigate freely, the path planning benefit is reduced (conflict detection still works). 3. Team Expertise: The team needs solid ROS 2 experience to operate and debug RMF core nodes. 4. Scalability Ceiling: Current Open-RMF handles tens of robots well; hundreds is being actively developed. The next-generation architecture aims for thousands, but it's not production-ready yet.

What NOT to Use from Open-RMF

rmf-web Dashboard: Don't use the React dashboard as TwinSight's frontend — it's a different framework (React vs Angular), has a simpler UX designed for facility operators rather than fleet analytics, and would create maintenance overhead. Use the API server as an internal microservice instead. Simulation stack: rmf_demos includes Gazebo simulation worlds, but TwinSight should use its own simulation strategy aligned with its specific robot types rather than RMF's demo environments.

TwinSight's Combined Stack (with all integrations)

Taking into account all previous analyses, TwinSight's optimal stack is: Open-RMF for coordination (traffic + tasks + fleet adapters) → Zenoh/Free Fleet for zero-footprint robot connectivity → ReductStore for binary telemetry storage → Mosaico for ML data pipelines → TwinSight custom for web UI, analytics, anomaly detection, teleop, reporting, and business intelligence. This combination leverages ~4 open-source projects to handle infrastructure concerns while TwinSight focuses entirely on its unique business value.

TwinSight × Open-RMF Integration Analysis · Agora Robotics · April 2026