Interactive Gizmos#
A Gizmo is a transform control for manipulating a simulation target. Native
windows use DexSim’s entity and robot IK controllers. Viser uses registered
controls whose callbacks enqueue requested poses for SimulationManager to
apply on the simulation thread.
Native entity interaction is enabled by default when the first native window
opens. Select an object and press G to attach its gizmo. Set
SimulationManagerCfg(enable_entity_gizmo=False) or call
sim.disable_entity_gizmo() to opt out; reopening preserves that choice.
Robot IK controls are discovered automatically from configured control parts
and their solver’s root link, end link, and TCP.
See native window controls for native entity configuration.
Supported Targets#
Target |
Gizmo behavior |
|---|---|
Robot |
Moves the selected control part through native DexSim IK by default, or its configured EmbodiChain solver. |
Rigid object |
Sets the object’s local arena pose. |
Camera |
Sets the camera’s local pose. |
Registered Viser controls and robot IK controls currently require num_envs=1.
Automatic discovery requires robot solver metadata for each supported control
part. IK computation still defaults to DexSim. Robots without this metadata
can use explicit GizmoCfg chain settings instead; no end link or TCP is guessed.
Quick Start#
Run the robot Gizmo tutorial in the native window:
python scripts/tutorials/sim/gizmo_robot.py
Use the same target through Viser:
python scripts/tutorials/sim/gizmo_robot.py --viser
The tutorial opts into immediate native activation with
robot_ik_gizmo=GizmoCfg(ik_start_enabled=True). It sets the initial robot pose
before opening the window, then its ordinary manual-physics loop creates and
updates the controller:
sim.open_window() # Safely skipped when Viser is configured.
while True:
sim.update(step=1)
By default, the first I press creates eligible native robot IK controllers.
With ik_start_enabled=True, the first update with an open window activates
them from the current robot pose; I then toggles their visibility. Opening a window alone
does not construct an IK solver or change existing drive targets. Viser displays
the TCP handles and constructs the solver on the first drag. Both paths update
through SimulationManager.update().
The default SimulationManagerCfg.robot_ik_gizmo is GizmoCfg(). To use each
control part’s configured solver (including Pink), or disable automatic setup:
SimulationManagerCfg(robot_ik_gizmo=GizmoCfg(ik_solver="embodichain"))
SimulationManagerCfg(robot_ik_gizmo=None)
Gym JSON/YAML deployments accept the same robot_ik_gizmo mapping or null.
sim.enable_gizmo(uid, control_part, gizmo_cfg) provides an explicit per-part
override. sim.disable_gizmo(uid, control_part) prevents automatic recreation,
including across window reopen; omit the part to disable all parts of a robot.
Use set_gizmo_visibility() and toggle_gizmo_visibility() for visibility.
Activated native controls retain their IK and visibility state across window
close/reopen. Removing a robot or destroying the manager releases their input
handlers and native target nodes.
Frontend Behavior#
Native entity interaction starts with the first native window; pure headless and Viser runs do not automatically create native controllers. Native robot targets activate on I without a script-level controller call.
Viser exports browser-native transform controls when
VisualizationCfg.allow_commands=True; otherwise it shows read-only frames.The standard
--viserlauncher enables registered commands for trusted clients. EmbodiChain does not add authentication to the Viser endpoint.A Viser Gizmo is owned by one browser client from drag start until drag end or disconnect. Other clients continue receiving authoritative poses.
Advanced callers may still use create_robot_ik_gizmo_controller() directly
and retain/update its returned objects. Automatic setup detects an existing
factory-created controller and does not create or update a duplicate.
For the complete robot setup and IK walkthrough, continue with the Gizmo tutorial. See Viser browser visualization for server configuration and remote-access guidance.