Spaces:
Sleeping
Sleeping
Updated run_tray_simulation() (safe for HuggingFace Spaces)
Browse files- Renderer(model, width, height) initializes a headless framebuffer — safe for use in headless environments like HuggingFace Spaces.
- renderer.update_scene(data) prepares the rendering scene.
- renderer.render() returns a NumPy array image (H x W x 3).
- Make sure to renderer.close() when done to release GPU/GL resources.
- tray_sim.py +7 -3
tray_sim.py
CHANGED
|
@@ -3,7 +3,6 @@ import numpy as np
|
|
| 3 |
import imageio
|
| 4 |
import os
|
| 5 |
import tempfile
|
| 6 |
-
from mujoco import viewer
|
| 7 |
|
| 8 |
MODEL_PATH = "assets/tray.xml"
|
| 9 |
|
|
@@ -16,13 +15,18 @@ def run_tray_simulation(seed=0):
|
|
| 16 |
data.qpos[:3] = [0.0, 0.0, 0.3 + 0.2 * np.random.rand()] # x, y, z
|
| 17 |
data.qvel[:] = 0
|
| 18 |
|
| 19 |
-
#
|
|
|
|
|
|
|
| 20 |
frames = []
|
| 21 |
for _ in range(200):
|
| 22 |
mujoco.mj_step(model, data)
|
| 23 |
-
|
|
|
|
| 24 |
frames.append(img)
|
| 25 |
|
|
|
|
|
|
|
| 26 |
# Save as GIF to temp file
|
| 27 |
gif_path = os.path.join(tempfile.gettempdir(), f"tray_sim_{seed}.gif")
|
| 28 |
imageio.mimsave(gif_path, frames, fps=20)
|
|
|
|
| 3 |
import imageio
|
| 4 |
import os
|
| 5 |
import tempfile
|
|
|
|
| 6 |
|
| 7 |
MODEL_PATH = "assets/tray.xml"
|
| 8 |
|
|
|
|
| 15 |
data.qpos[:3] = [0.0, 0.0, 0.3 + 0.2 * np.random.rand()] # x, y, z
|
| 16 |
data.qvel[:] = 0
|
| 17 |
|
| 18 |
+
# Use mujoco.Renderer for offscreen rendering
|
| 19 |
+
renderer = mujoco.Renderer(model, width=480, height=480)
|
| 20 |
+
|
| 21 |
frames = []
|
| 22 |
for _ in range(200):
|
| 23 |
mujoco.mj_step(model, data)
|
| 24 |
+
renderer.update_scene(data)
|
| 25 |
+
img = renderer.render()
|
| 26 |
frames.append(img)
|
| 27 |
|
| 28 |
+
renderer.close()
|
| 29 |
+
|
| 30 |
# Save as GIF to temp file
|
| 31 |
gif_path = os.path.join(tempfile.gettempdir(), f"tray_sim_{seed}.gif")
|
| 32 |
imageio.mimsave(gif_path, frames, fps=20)
|