Ditching ROS for Python and AR Glasses: Inside Dimensional OS and the Spectacles Spatial Bridge

Ditching ROS for Python and AR Glasses: Inside Dimensional OS and the Spectacles Spatial Bridge

By Reggi, 10 Sep 2026

Why are robotics engineers still fighting heavy ROS 2 graph setup, complex message transport configuration, and detached 2D monitor UIs just to drive a quadruped across a room?

Dimensional OS (DimOS) takes a direct swing at this legacy burden. By providing an agent-native operating system for physical space, DimOS strips away mandatory ROS dependencies, allowing developers to write physical applications entirely in Python. It abstracts perception streams, spatial RAG, and low-level execution drivers into native modules connected by flexible IPC transports. When paired with the Snap Spectacles 2024 developer kit through the dimos-ar bridge, the platform transforms spatial AI control loops, allowing operators to visualize LiDAR point clouds, issue voice commands via MCP tools, and manipulate navigation goals directly in 3D space using AR.

Here is an architectural deep dive into how Dimensional OS structures its module-driven core, manages real-time transport layers, and solves hardware odometry drift using camera-based AprilTag calibration.


1. The Core Architecture: Stream-Based Modules and Blueprints

Traditional robotics stacks rely on complex XML packages, multi-step build systems, and heavy IPC graphs. DimOS replaces this with a lightweight stream abstraction in Python. The fundamental unit of execution in DimOS is the Module. Modules represent hardware or software subsystems, such as motor control loops, SLAM nodes, or camera streams.

Communication between modules relies on strictly typed input and output data streams defined via In[T] and Out[T] generics. Modules publish and subscribe to these streams without needing to manage low-level networking code directly.

python
import threading, time import numpy as np from dimos.core.coordination.blueprints import autoconnect from dimos.core.core import rpc from dimos.core.module import Module from dimos.core.stream import In, Out from dimos.msgs.geometry_msgs import Twist from dimos.msgs.sensor_msgs import Image, ImageFormat class RobotConnection(Module): cmd_vel: In[Twist] color_image: Out[Image] @rpc def start(self): threading.Thread(target=self._image_loop, daemon=True).start() def _image_loop(self): while True: img = Image.from_numpy( np.zeros((120, 160, 3), np.uint8), format=ImageFormat.RGB, frame_id="camera_optical", ) self.color_image.publish(img) time.sleep(0.2) class Listener(Module): color_image: In[Image] @rpc def start(self): self.color_image.subscribe(lambda img: print(f"image {img.width}x{img.height}")) if __name__ == "__main__": autoconnect( RobotConnection.blueprint(), Listener.blueprint(), ).build().loop()

Decoupled Topology with Blueprints

Blueprints dictate how modules interconnect across the system. The autoconnect(...) function analyzes the signatures of declared In and Out streams, matching streams automatically by (name, type).

If high-frequency sensor streams (such as raw point clouds or uncompressed RGB frames) require specific transport mechanisms, DimOS allows explicit transport overrides. Developers can map individual streams to dynamic backends including:

  • LCM (Lightweight Communications and Marshalling): Low-latency inter-process communication.
  • SHM (Shared Memory): Zero-copy passing for massive data streams on local hardware.
  • DDS / ROS 2 Interop: Native support when bridging to existing ROS infrastructure.
  • Zenoh: Optimized distributed data management across constrained wireless networks.
python
from dimos.core.coordination.blueprints import autoconnect from dimos.core.transport import LCMTransport from dimos.msgs.sensor_msgs import Image from dimos.robot.unitree.go2.connection import go2_connection from dimos.agents.mcp.mcp_client import McpClient from dimos.agents.mcp.mcp_server import McpServer blueprint = autoconnect( go2_connection(), McpServer.blueprint(), McpClient.blueprint(), ).transports({("color_image", Image): LCMTransport("/color_image", Image)}) if __name__ == "__main__": blueprint.build().loop()

2. The Spatial AR Pipeline: Connecting Mac, Robot, and Spectacles

Bringing spatial computing to robotics requires synchronizing spatial state across multiple network hops. The spectacles-dimensional-os integration runs an AR Bridge service on a host Mac, establishing a high-throughput pipeline between the hardware stack and the Snap Spectacles AR glasses.

+-----------------------------------------------------------------------+
|                           Mac Host Environment                        |
|                                                                       |
|  +------------------------+             +--------------------------+  |
|  | DimOS Robot Stack      |             | AR Bridge (dimos-ar)     |  |
|  |                        |  Internal   |                          |  |
|  | SLAM / Mapping         | <---------> | World Frame Alignment    |  |
|  | Path Planning          |    IPC      | WebSocket Server (:8787) |  |
|  | Agent / LLM Services   |             | Telemetry & Goal Routing |  |
|  +------------------------+             +--------------------------+  |
+---------------------------^--------------------------^----------------+
                            |                          |
               WebRTC / DDS |                          | WebSocket
                            v                          v
                  +-------------------+      +-------------------+
                  |  Unitree Go2 / G1 |      | Spectacles Lens   |
                  |  Physical Hardware|      | (Lens Studio App) |
                  +-------------------+      +-------------------+

Layer Responsibilities

  1. Host Launcher & Environment: Runs on the host Mac (UI exposed on port 8790). It manages dependencies, provisions local network socket routes, discovers robot IP addresses, and boots the bridge service on port 8787.
  2. AR Bridge (dimos-ar): Acts as the composition root using ARBridge (found in dimos/ar/bridge/). It isolates networking (network/), tag tracking (tag_tracking/), registration (registration/), and spatial goal handling (navigation/).
  3. Spectacles Lens App: Built in Lens Studio, the client implements PROTOCOL.md via WebSockets. It converts stereo camera frames, hand gesture interactions, and speech inputs into actionable JSON schema events for DimOS.

3. Resolving World Alignment and Dynamic Odometry Drift

Operating an autonomous robot through AR introduces a fundamental frame registration problem: the glasses operate in an arbitrary spatial tracking frame, while the robot moves inside its local odometry frame.

Robot odometry drifts continuously over time due to leg slip, IMU noise, and wheel friction. On hardware like the Unitree Go2 quadruped, odometry error averages approximately 25 cm across a 5-meter travel distance. Without dynamic correction, rendered spatial UI elements (like target waypoints or LiDAR maps) quickly decouple from physical hardware.

[ Uncorrected Frame Drift ]
  Robot Physical Position:   (X = 5.0m, Y = 0.0m)
  Odometry Estimated Pose:   (X = 5.25m, Y = 0.15m) ---> Error: ~25 cm over 5m
  AR Rendered Overlay:       Offset from physical body!

[ Camera Tag Alignment Correction ]
  Spectacles Lens Camera ---> Captures AprilTag Sightings
                                    |
                                    v
  AR Bridge Calculates:      Relative Tag Transformation Vector
                                    |
                                    v
  WorldFrameState Update:    Recalibrates AR <---> Robot Coordinate Frame Matrix

AprilTag Alignment Architecture

To establish and maintain frame alignment, DimOS mounts physical AprilTags to the robot chassis at precisely measured offsets:

Hardware TargetTag ConfigurationMounting Placement & Offset Specs
Unitree Go2 (Quadruped)Single Tag (ID 0, 70 mm)Printed at 100% scale. Placed flat on top of the torso, 18 cm ahead of robot center, 6 cm upward, tilted backward matching body contour.
Unitree G1 (Humanoid)Dual Tag (ID 0 & ID 1, 70 mm)ID 0 mounted flat on the chest panel; ID 1 mounted on the back panel. Dual tags allow registration from either front or rear operator angles.

When the Spectacles camera detects a mounted AprilTag, it transmits image metadata across the WebSocket connection. WorldFrameState processes the sighting, compares the observed tag transformation against the robot's self-reported odometry frame, and applies an alignment offset matrix. While the robot moves out of line-of-sight, odometry drift gradually accumulates; as soon as the operator looks back at the AprilTag, the AR bridge instantly corrects frame offsets.


4. Operational Control: Navigation and Point Cloud Filtering

The AR Lens interface allows seamless switching between manual manipulation and autonomous agent execution via a left-hand wrist menu.

                     +---------------------------------+
                     |    Left Palm Up: Wrist Menu     |
                     +---------------------------------+
                     | [ Mode Select: Manual / Agent ] |
                     | [ Recalibrate Frame Alignment ] |
                     | [ Toggle AR Debug Console    ] |
                     | [ EMERGENCY STOP BUTTON       ] |
                     +---------------------------------+
                                     |
              +----------------------+----------------------+
              |                                             |
              v                                             v
     +-----------------+                           +------------------+
     |   Manual Mode   |                           |    Agent Mode    |
     +-----------------+                           +------------------+
     | - Grab/Drag     |                           | - "Robot" Wake   |
     |   Navigation    |                           | - Speech to Text |
     |   Marker        |                           | - GPT-4o Tool    |
     | - Drag vector   |                           |   Selection      |
     |   sets heading  |                           | - 30s Auto-Close |
     +-----------------+                           +------------------+

LiDAR Visualization Modes

Streaming raw 3D spatial data over wireless links to a wearable device requires strict resource management. The wrist menu provides three distinct rendering pipelines for LiDAR visualization:

  1. Off: Disables point cloud transmission entirely, saving battery life and network throughput.
  2. Obstacles Only: The AR bridge filters point cloud data server-side based on proximity to the robot base. This delivers essential spatial collision boundaries without overloading the Spectacles GPU.
  3. Full Point Cloud: Streams unfiltered spatial point clouds around the robot. While visually detailed, this mode is computationally heavy and can cause thermal throttling on glasses over extended operating sessions.

Agentic Voice Control Layer

In Agent Mode, voice input captured by the Spectacles microphone array is processed via local speech-to-text and forwarded to a hosted host LLM (e.g., GPT-4o) running inside the DimOS agent stack. The model selects and invokes skills via standard tool interfaces:

  • relative_move: Walk or turn by a delta relative to current position.
  • navigate_to_user: Calculates operator coordinates via headset pose (get_user_pose) and dispatches pathing markers to the user's location.
  • cancel_navigation: Immediately halts locomotion loops and purges active waypoint queues.
  • place_marker / draw_line / clear_annotation: Annotates physical room coordinates with 3D spatial vectors.

Manual control always retains precedence: grabbing the NavigationMarker in AR instantly overrides active agent plans and aborts autonomous tool calls.


5. Hardware Ecosystem and Deployment

DimOS targets a broad hardware footprint, abstracting low-level vendor communication protocols into standard high-level driver interfaces.

CategoryTarget HardwareIntegration StatusTransport / Driver Layer
QuadrupedUnitree Go2 Pro / AirStableWebRTC / Native Transport
QuadrupedUnitree B1ExperimentalDirect Network SDK
HumanoidUnitree G1BetaUnitree DDS Integration
Robotic ArmSensable / xArmBetaMock / Direct Serial RPC
Robotic ArmAgileX PiperBetaCAN / Native Driver
DroneMAVLink CompliantAlphaMAVLink Telemetry
DroneDJI Mavic SeriesAlphaMobile SDK Bridge
SensorForce Torque SensorsExperimentalDirect Stream Ingest

Execution Blueprints and Developer Workflow

The CLI utility handles hardware execution, simulations, replay logs, and background daemons:

bash
# Install core DimOS framework with Unitree drivers uv pip install 'dimos[base,unitree]' # Play back a recorded quadruped navigation session (SLAM + A* planning) dimos --replay run unitree-go2 # Boot MuJoCo physics simulation for an agentic quadruped with MCP tool servers dimos --simulation run unitree-go2-agentic # Run background daemon and dispatch direct natural language commands dimos run unitree-go2-agentic --daemon dimos agent-send "explore the room" # Directly invoke an MCP skill via CLI dimos mcp call move_to --arg x=0.5 --arg relative=true

For remote deployment behind complex NAT boundaries, dimTELE provides WebRTC-hosted teleoperation. The robot dials outbound to a hosted broker using a secure API key (TRANSPORTS__BROKER__API_KEY), removing the need to open inbound router ports when controlling hardware over cellular, home Wi-Fi, or enterprise networks.


The Verdict

Dimensional OS paired with dimos-ar offers a compelling alternative to traditional ROS stacks. By dropping heavy ROS graph configurations in favor of native Python streams, integrated spatial RAG, MCP tool execution, and dynamic AR visual feedback, the platform lowers the barrier to deploying spatial AI on complex hardware.

Whether you are controlling quadrupeds in simulation via MuJoCo or driving live humanoids using Snap Spectacles, DimOS delivers a modern blueprint for real-world robotics development.

References


Popular Reads