Skip to content

Latest commit

 

History

History
115 lines (78 loc) · 3.23 KB

File metadata and controls

115 lines (78 loc) · 3.23 KB

Viewer Backends

Dimos supports three visualization backends: Rerun (web or native) and Foxglove.

Quick Start

Choose your viewer backend via the CLI (preferred):

# Rerun web viewer (default) - Full vis dashboard and teleop panel in browser
dimos run unitree-go2

# Explicitly select the viewer backend:
dimos --viewer-backend rerun run unitree-go2
dimos --viewer-backend rerun-web run unitree-go2
dimos --viewer-backend foxglove run unitree-go2

Alternative (environment variable):

# Rerun web viewer - Full dashboard in browser
VIEWER_BACKEND=rerun-web dimos run unitree-go2

# Rerun native viewer - native Rerun window + teleop panel at http://localhost:7779
VIEWER_BACKEND=rerun dimos run unitree-go2

# Foxglove - Use Foxglove Studio instead of Rerun
VIEWER_BACKEND=foxglove dimos run unitree-go2

Viewer Modes Explained

Rerun Web (rerun-web)

What you get:

  • Full dashboard at http://localhost:7779
  • Rerun 3D viewer + command center sidebar in one page
  • Works in browser, no display required (headless-friendly)

Rerun Native (rerun)

What you get:

  • Native Rerun application (separate window opens automatically)
  • Command center at http://localhost:7779
  • Better performance with larger maps/higher resolution

Foxglove (foxglove)

What you get:

  • Foxglove bridge on ws://localhost:8765
  • No Rerun (saves resources)
  • Better performance with larger maps/higher resolution
  • Open layout: assets/foxglove_dashboards/old/foxglove_unitree_lcm_dashboard.json

Rendering with Custom Blueprints

To enable rerun within your own blueprint simply include RerunBridgeModule:

from dimos.visualization.rerun.bridge import RerunBridgeModule
from dimos.hardware.sensors.camera.module import CameraModule
from dimos.protocol.pubsub.impl.lcmpubsub import LCM

camera_demo = autoconnect(
    CameraModule.blueprint(),
    RerunBridgeModule.blueprint(
        viewer_mode="native", # native (desktop), web (browser), none (headless)
    ),
)

if __name__ == "__main__":
    camera_demo.build().loop()

Every LCM stream, such as color_image (output by CameraModule), that uses a data type (like Image) that has a .to_rerun method will get rendered (rr.log) using the LCM topic as the rerun entity path. In other words: to render something, simply log it to a stream and it will automatically be available in rerun.

Performance Tuning

Symptom: Slow Map Updates

If you notice:

  • Robot appears to "walk across empty space"
  • Costmap updates lag behind the robot
  • Visualization stutters or freezes

This happens on lower-end hardware (NUC, older laptops) with large maps.

Increase Voxel Size

Edit dimos/robot/unitree/go2/blueprints/__init__.py line 82:

# Before (high detail, slower on large maps)
voxel_mapper(voxel_size=0.05),  # 5cm voxels

# After (lower detail, 8x faster)
voxel_mapper(voxel_size=0.1),   # 10cm voxels

Trade-off:

  • Larger voxels = fewer voxels = faster updates
  • But slightly less detail in the map

How to use Rerun on dev (and the TF/entity nuances)

Rerun on dev is module-driven: modules decide what to log, and Blueprint.build() sets up the shared viewer + default layout.