mjlab.viewer#

Viewer module for environment visualization.

Classes

Protocols

ViewerConfig#

class mjlab.viewer.ViewerConfig[source]#
lookat: tuple[float, float, float] = (0.0, 0.0, 0.0)#
distance: float = 5.0#
fovy: float | None = None#
elevation: float = -45.0#
azimuth: float = 90.0#
class OriginType[source]#

The frame in which the camera position and target are defined.

WORLD = 1#

The origin of the world.

ASSET_ROOT = 2#

The center of the asset defined by entity_name.

ASSET_BODY = 3#

The center of the body defined by body_name in asset defined by entity_name.

origin_type: OriginType = 1#
entity_name: str | None = None#
body_name: str | None = None#
env_idx: int = 0#
enable_reflections: bool = True#
enable_shadows: bool = True#
height: int = 240#
width: int = 320#

BaseViewer#

class mjlab.viewer.BaseViewer[source]#

Bases: ABC

Abstract base class for environment viewers.

__init__(env: EnvProtocol, policy: PolicyProtocol, frame_rate: float = 30.0, verbosity: int = VerbosityLevel.SILENT)[source]#
tick() bool[source]#

Advance one tick: drain actions, step physics, maybe render.

Returns True when a render frame was produced, False otherwise.

NativeMujocoViewer#

class mjlab.viewer.NativeMujocoViewer[source]#

Bases: BaseViewer

__init__(env: EnvProtocol, policy: PolicyProtocol, frame_rate: float = 60.0, key_callback: Callable[[int], None] | None = None, plot_cfg: PlotCfg | None = None, enable_perturbations: bool = True, verbosity: VerbosityLevel = VerbosityLevel.SILENT)[source]#
setup() None[source]#

Setup MuJoCo viewer resources.

sync_env_to_viewer() None[source]#

Copy env state to viewer; update reward figures; render other envs.

sync_viewer_to_env() None[source]#

Copy perturbation forces from viewer to env.

close() None[source]#

Close viewer and cleanup.

reset_environment() None[source]#

Extend BaseViewer.reset_environment to clear reward histories.

ViserPlayViewer#

class mjlab.viewer.ViserPlayViewer[source]#

Bases: BaseViewer

Interactive Viser-based viewer with playback controls.

__init__(env: EnvProtocol, policy: PolicyProtocol, frame_rate: float = 60.0, verbosity: VerbosityLevel = VerbosityLevel.SILENT) None[source]#
setup() None[source]#

Setup the viewer resources.

sync_env_to_viewer() None[source]#

Synchronize environment state to viewer.

sync_viewer_to_env() None[source]#

Synchronize viewer state to environment (e.g., perturbations).

reset_environment() None[source]#

Extend BaseViewer.reset_environment to clear reward and metrics histories.

close() None[source]#

Close the viewer and cleanup resources.

is_running() bool[source]#

Check if viewer is running.

OffscreenRenderer#

class mjlab.viewer.OffscreenRenderer[source]#

Bases: object

__init__(model: MjModel, cfg: ViewerConfig, scene: Scene) None[source]#
update(data: Any, debug_vis_callback: Callable[[MujocoNativeDebugVisualizer], None] | None = None, camera: str | None = None) None[source]#

Update renderer with simulation data.

Protocols#

class mjlab.viewer.EnvProtocol[source]#

Interface we expect from RL environments, which can be either vanilla ManagerBasedRlEnv objects or wrapped with VideoRecorder, RslRlVecEnvWrapper, etc.

__init__(*args, **kwargs)#
class mjlab.viewer.PolicyProtocol[source]#
__init__(*args, **kwargs)#
class mjlab.viewer.VerbosityLevel[source]#
__new__(value)#