diff --git a/tools/machine-learning/mujoco/packages/mujoco-interactive-viewer/src/mujoco_interactive_viewer/viewer.py b/tools/machine-learning/mujoco/packages/mujoco-interactive-viewer/src/mujoco_interactive_viewer/viewer.py index 4665f7d695..ea92c9570f 100644 --- a/tools/machine-learning/mujoco/packages/mujoco-interactive-viewer/src/mujoco_interactive_viewer/viewer.py +++ b/tools/machine-learning/mujoco/packages/mujoco-interactive-viewer/src/mujoco_interactive_viewer/viewer.py @@ -589,6 +589,12 @@ def _handle_perturbation(self, mods: int) -> None: ) self.perturbation.active = perturbation_kind + def track_with_camera(self, body: int | str) -> None: + bodyid = self.model.body(body).id + self.camera.type = mujoco.mjtCamera.mjCAMERA_TRACKING.value + self.camera.trackbodyid = bodyid + self.camera.fixedcamid = -1 + def _handle_selection(self, mods: int) -> None: class Mode(Enum): Select = 1 @@ -603,7 +609,10 @@ class Mode(Enum): mode = None if self._interaction_state.left_double_click_pressed: mode = Mode.Select - elif self._interaction_state.right_double_click_pressed: + elif ( + self._interaction_state.right_double_click_pressed + and mods != glfw.MOD_CONTROL + ): mode = Mode.LookAt elif ( self._interaction_state.right_double_click_pressed diff --git a/tools/machine-learning/mujoco/scripts/mujoco-walking.py b/tools/machine-learning/mujoco/scripts/mujoco-walking.py index c28507374e..d5297e040a 100644 --- a/tools/machine-learning/mujoco/scripts/mujoco-walking.py +++ b/tools/machine-learning/mujoco/scripts/mujoco-walking.py @@ -53,7 +53,7 @@ def main(*, throw_tomatoes: bool, load_policy: str | None) -> None: while viewer.is_alive: start_time = time.time() - # viewer.camera.lookat[:] = env.data.site("Robot").xpos + viewer.track_with_camera("Nao") observation, reward, _terminated, _truncated, infos = env.step(action) if model: action, _ = model.predict(observation, deterministic=True)