Merge pull request #1769 from fanminshi:renderer_context

PiperOrigin-RevId: 648508835
Change-Id: Ice87cd1221723ed44ba0ddca97b6aac245dd8975
This commit is contained in:
Copybara-Service
2024-07-01 15:48:41 -07:00
+43 -22
View File
@@ -420,7 +420,7 @@
"data = mujoco.MjData(model)\n", "data = mujoco.MjData(model)\n",
"\n", "\n",
"# Make renderer, render and show the pixels\n", "# Make renderer, render and show the pixels\n",
"renderer = mujoco.Renderer(model)\n", "with mujoco.Renderer(model) as renderer:\n",
" media.show_image(renderer.render())" " media.show_image(renderer.render())"
] ]
}, },
@@ -445,6 +445,7 @@
}, },
"outputs": [], "outputs": [],
"source": [ "source": [
"with mujoco.Renderer(model) as renderer:\n",
" mujoco.mj_forward(model, data)\n", " mujoco.mj_forward(model, data)\n",
" renderer.update_scene(data)\n", " renderer.update_scene(data)\n",
"\n", "\n",
@@ -480,7 +481,7 @@
"model = mujoco.MjModel.from_xml_string(xml)\n", "model = mujoco.MjModel.from_xml_string(xml)\n",
"data = mujoco.MjData(model)\n", "data = mujoco.MjData(model)\n",
"\n", "\n",
"renderer = mujoco.Renderer(model)\n", "with mujoco.Renderer(model) as renderer:\n",
" mujoco.mj_forward(model, data)\n", " mujoco.mj_forward(model, data)\n",
" renderer.update_scene(data)\n", " renderer.update_scene(data)\n",
"\n", "\n",
@@ -508,6 +509,7 @@
"source": [ "source": [
"# Run this cell multiple times for different colors\n", "# Run this cell multiple times for different colors\n",
"model.geom('red_box').rgba[:3] = np.random.rand(3)\n", "model.geom('red_box').rgba[:3] = np.random.rand(3)\n",
"with mujoco.Renderer(model) as renderer:\n",
" renderer.update_scene(data)\n", " renderer.update_scene(data)\n",
"\n", "\n",
" media.show_image(renderer.render())" " media.show_image(renderer.render())"
@@ -540,6 +542,7 @@
"# Simulate and display video.\n", "# Simulate and display video.\n",
"frames = []\n", "frames = []\n",
"mujoco.mj_resetData(model, data) # Reset state and time.\n", "mujoco.mj_resetData(model, data) # Reset state and time.\n",
"with mujoco.Renderer(model) as renderer:\n",
" while data.time < duration:\n", " while data.time < duration:\n",
" mujoco.mj_step(model, data)\n", " mujoco.mj_step(model, data)\n",
" if len(frames) < data.time * framerate:\n", " if len(frames) < data.time * framerate:\n",
@@ -583,7 +586,6 @@
"\"\"\"\n", "\"\"\"\n",
"model = mujoco.MjModel.from_xml_string(xml)\n", "model = mujoco.MjModel.from_xml_string(xml)\n",
"data = mujoco.MjData(model)\n", "data = mujoco.MjData(model)\n",
"renderer = mujoco.Renderer(model)\n",
"\n", "\n",
"# enable joint visualization option:\n", "# enable joint visualization option:\n",
"scene_option = mujoco.MjvOption()\n", "scene_option = mujoco.MjvOption()\n",
@@ -595,6 +597,7 @@
"# Simulate and display video.\n", "# Simulate and display video.\n",
"frames = []\n", "frames = []\n",
"mujoco.mj_resetData(model, data)\n", "mujoco.mj_resetData(model, data)\n",
"with mujoco.Renderer(model) as renderer:\n",
" while data.time < duration:\n", " while data.time < duration:\n",
" mujoco.mj_step(model, data)\n", " mujoco.mj_step(model, data)\n",
" if len(frames) < data.time * framerate:\n", " if len(frames) < data.time * framerate:\n",
@@ -651,6 +654,7 @@
"# Simulate and display video.\n", "# Simulate and display video.\n",
"frames = []\n", "frames = []\n",
"mujoco.mj_resetData(model, data)\n", "mujoco.mj_resetData(model, data)\n",
"with mujoco.Renderer(model) as renderer:\n",
" while data.time < duration:\n", " while data.time < duration:\n",
" mujoco.mj_step(model, data)\n", " mujoco.mj_step(model, data)\n",
" if len(frames) < data.time * framerate:\n", " if len(frames) < data.time * framerate:\n",
@@ -760,9 +764,9 @@
"\"\"\"\n", "\"\"\"\n",
"model = mujoco.MjModel.from_xml_string(tippe_top)\n", "model = mujoco.MjModel.from_xml_string(tippe_top)\n",
"data = mujoco.MjData(model)\n", "data = mujoco.MjData(model)\n",
"renderer = mujoco.Renderer(model)\n",
"\n", "\n",
"mujoco.mj_forward(model, data)\n", "mujoco.mj_forward(model, data)\n",
"with mujoco.Renderer(model) as renderer:\n",
" renderer.update_scene(data, camera=\"closeup\")\n", " renderer.update_scene(data, camera=\"closeup\")\n",
"\n", "\n",
" media.show_image(renderer.render())" " media.show_image(renderer.render())"
@@ -821,6 +825,7 @@
"# Simulate and display video.\n", "# Simulate and display video.\n",
"frames = []\n", "frames = []\n",
"mujoco.mj_resetDataKeyframe(model, data, 0) # Reset the state to keyframe 0\n", "mujoco.mj_resetDataKeyframe(model, data, 0) # Reset the state to keyframe 0\n",
"with mujoco.Renderer(model) as renderer:\n",
" while data.time < duration:\n", " while data.time < duration:\n",
" mujoco.mj_step(model, data)\n", " mujoco.mj_step(model, data)\n",
" if len(frames) < data.time * framerate:\n", " if len(frames) < data.time * framerate:\n",
@@ -939,8 +944,10 @@
"\"\"\"\n", "\"\"\"\n",
"model = mujoco.MjModel.from_xml_string(chaotic_pendulum)\n", "model = mujoco.MjModel.from_xml_string(chaotic_pendulum)\n",
"data = mujoco.MjData(model)\n", "data = mujoco.MjData(model)\n",
"renderer = mujoco.Renderer(model, 480, 640)\n", "height = 480\n",
"width = 640\n",
"\n", "\n",
"with mujoco.Renderer(model, height, width) as renderer:\n",
" mujoco.mj_forward(model, data)\n", " mujoco.mj_forward(model, data)\n",
" renderer.update_scene(data, camera=\"fixed\")\n", " renderer.update_scene(data, camera=\"fixed\")\n",
"\n", "\n",
@@ -970,7 +977,8 @@
"framerate = 30 # Hz\n", "framerate = 30 # Hz\n",
"n_frames = int(n_seconds * framerate)\n", "n_frames = int(n_seconds * framerate)\n",
"frames = []\n", "frames = []\n",
"renderer = mujoco.Renderer(model, 240, 320)\n", "height = 240\n",
"width = 320\n",
"\n", "\n",
"# set initial state\n", "# set initial state\n",
"mujoco.mj_resetData(model, data)\n", "mujoco.mj_resetData(model, data)\n",
@@ -981,6 +989,7 @@
"sim_time = 0\n", "sim_time = 0\n",
"render_time = 0\n", "render_time = 0\n",
"n_steps = 0\n", "n_steps = 0\n",
"with mujoco.Renderer(model, height, width) as renderer:\n",
" for i in range(n_frames):\n", " for i in range(n_frames):\n",
" while data.time * framerate < i:\n", " while data.time * framerate < i:\n",
" tic = time.time()\n", " tic = time.time()\n",
@@ -1233,8 +1242,10 @@
"\"\"\"\n", "\"\"\"\n",
"model = mujoco.MjModel.from_xml_string(free_body_MJCF)\n", "model = mujoco.MjModel.from_xml_string(free_body_MJCF)\n",
"data = mujoco.MjData(model)\n", "data = mujoco.MjData(model)\n",
"renderer = mujoco.Renderer(model, 400, 600)\n", "height = 400\n",
"width = 600\n",
"\n", "\n",
"with mujoco.Renderer(model, height, width) as renderer:\n",
" mujoco.mj_forward(model, data)\n", " mujoco.mj_forward(model, data)\n",
" renderer.update_scene(data, \"fixed\")\n", " renderer.update_scene(data, \"fixed\")\n",
"\n", "\n",
@@ -1262,7 +1273,6 @@
"height = 240\n", "height = 240\n",
"width = 320\n", "width = 320\n",
"frames = []\n", "frames = []\n",
"renderer = mujoco.Renderer(model, height, width)\n",
"\n", "\n",
"# visualize contact frames and forces, make body transparent\n", "# visualize contact frames and forces, make body transparent\n",
"options = mujoco.MjvOption()\n", "options = mujoco.MjvOption()\n",
@@ -1282,6 +1292,7 @@
"data.qvel[3:6] = 5*np.random.randn(3)\n", "data.qvel[3:6] = 5*np.random.randn(3)\n",
"\n", "\n",
"# Simulate and display video.\n", "# Simulate and display video.\n",
"with mujoco.Renderer(model, height, width) as renderer:\n",
" for i in range(n_frames):\n", " for i in range(n_frames):\n",
" while data.time < i/120.0: #1/4x real time\n", " while data.time < i/120.0: #1/4x real time\n",
" mujoco.mj_step(model, data)\n", " mujoco.mj_step(model, data)\n",
@@ -1440,9 +1451,9 @@
"# load\n", "# load\n",
"model = mujoco.MjModel.from_xml_string(MJCF)\n", "model = mujoco.MjModel.from_xml_string(MJCF)\n",
"data = mujoco.MjData(model)\n", "data = mujoco.MjData(model)\n",
"renderer = mujoco.Renderer(model, height, width)\n",
"\n", "\n",
"# Simulate and display video.\n", "# Simulate and display video.\n",
"with mujoco.Renderer(model, height, width) as renderer:\n",
" mujoco.mj_resetData(model, data)\n", " mujoco.mj_resetData(model, data)\n",
" for i in range(n_frames):\n", " for i in range(n_frames):\n",
" while data.time < i/30.0:\n", " while data.time < i/30.0:\n",
@@ -1520,12 +1531,14 @@
"\"\"\"\n", "\"\"\"\n",
"model = mujoco.MjModel.from_xml_string(MJCF)\n", "model = mujoco.MjModel.from_xml_string(MJCF)\n",
"data = mujoco.MjData(model)\n", "data = mujoco.MjData(model)\n",
"renderer = mujoco.Renderer(model, 480, 480)\n", "height = 480\n",
"width = 480\n",
"\n", "\n",
"with mujoco.Renderer(model, height, width) as renderer:\n",
" mujoco.mj_forward(model, data)\n", " mujoco.mj_forward(model, data)\n",
" renderer.update_scene(data, \"fixed\")\n", " renderer.update_scene(data, \"fixed\")\n",
"\n", "\n",
"media.show_image(renderer.render())\n" " media.show_image(renderer.render())"
] ]
}, },
{ {
@@ -1553,13 +1566,12 @@
"times = []\n", "times = []\n",
"sensordata = []\n", "sensordata = []\n",
"\n", "\n",
"renderer = mujoco.Renderer(model, height, width)\n",
"\n",
"# constant actuator signal\n", "# constant actuator signal\n",
"mujoco.mj_resetData(model, data)\n", "mujoco.mj_resetData(model, data)\n",
"data.ctrl = 20\n", "data.ctrl = 20\n",
"\n", "\n",
"# Simulate and display video.\n", "# Simulate and display video.\n",
"with mujoco.Renderer(model, height, width) as renderer:\n",
" for i in range(n_frames):\n", " for i in range(n_frames):\n",
" while data.time < i/fps:\n", " while data.time < i/fps:\n",
" mujoco.mj_step(model, data)\n", " mujoco.mj_step(model, data)\n",
@@ -1644,9 +1656,9 @@
"</mujoco>\n", "</mujoco>\n",
"\"\"\"\n", "\"\"\"\n",
"model = mujoco.MjModel.from_xml_string(xml)\n", "model = mujoco.MjModel.from_xml_string(xml)\n",
"renderer = mujoco.Renderer(model)\n",
"data = mujoco.MjData(model)\n", "data = mujoco.MjData(model)\n",
"\n", "\n",
"with mujoco.Renderer(model) as renderer:\n",
" mujoco.mj_forward(model, data)\n", " mujoco.mj_forward(model, data)\n",
" renderer.update_scene(data)\n", " renderer.update_scene(data)\n",
" media.show_image(renderer.render())" " media.show_image(renderer.render())"
@@ -1664,6 +1676,7 @@
"\n", "\n",
"scene_option.frame = mujoco.mjtFrame.mjFRAME_GEOM\n", "scene_option.frame = mujoco.mjtFrame.mjFRAME_GEOM\n",
"scene_option.flags[mujoco.mjtVisFlag.mjVIS_TRANSPARENT] = True\n", "scene_option.flags[mujoco.mjtVisFlag.mjVIS_TRANSPARENT] = True\n",
"with mujoco.Renderer(model) as renderer:\n",
" renderer.update_scene(data, scene_option=scene_option)\n", " renderer.update_scene(data, scene_option=scene_option)\n",
" frame = renderer.render()\n", " frame = renderer.render()\n",
" media.show_image(frame)" " media.show_image(frame)"
@@ -1679,6 +1692,7 @@
"source": [ "source": [
"#@title Depth rendering {vertical-output: true}\n", "#@title Depth rendering {vertical-output: true}\n",
"\n", "\n",
"with mujoco.Renderer(model) as renderer:\n",
" # update renderer to render depth\n", " # update renderer to render depth\n",
" renderer.enable_depth_rendering()\n", " renderer.enable_depth_rendering()\n",
"\n", "\n",
@@ -1695,9 +1709,7 @@
" # Scale to [0, 255]\n", " # Scale to [0, 255]\n",
" pixels = 255*np.clip(depth, 0, 1)\n", " pixels = 255*np.clip(depth, 0, 1)\n",
"\n", "\n",
"media.show_image(pixels.astype(np.uint8))\n", " media.show_image(pixels.astype(np.uint8))"
"\n",
"renderer.disable_depth_rendering()"
] ]
}, },
{ {
@@ -1710,6 +1722,9 @@
"source": [ "source": [
"#@title Segmentation rendering {vertical-output: true}\n", "#@title Segmentation rendering {vertical-output: true}\n",
"\n", "\n",
"with mujoco.Renderer(model) as renderer:\n",
" renderer.disable_depth_rendering()\n",
"\n",
" # update renderer to render segmentation\n", " # update renderer to render segmentation\n",
" renderer.enable_segmentation_rendering()\n", " renderer.enable_segmentation_rendering()\n",
"\n", "\n",
@@ -1726,9 +1741,7 @@
" # Scale to [0, 1]\n", " # Scale to [0, 1]\n",
" geom_ids = geom_ids / geom_ids.max()\n", " geom_ids = geom_ids / geom_ids.max()\n",
" pixels = 255*geom_ids\n", " pixels = 255*geom_ids\n",
"media.show_image(pixels.astype(np.uint8))\n", " media.show_image(pixels.astype(np.uint8))"
"\n",
"renderer.disable_segmentation_rendering()"
] ]
}, },
{ {
@@ -1792,6 +1805,8 @@
"source": [ "source": [
"#@title Project from world to camera coordinates {vertical-output: true}\n", "#@title Project from world to camera coordinates {vertical-output: true}\n",
"\n", "\n",
"with mujoco.Renderer(model) as renderer:\n",
" renderer.disable_segmentation_rendering()\n",
" # reset the scene\n", " # reset the scene\n",
" renderer.update_scene(data)\n", " renderer.update_scene(data)\n",
"\n", "\n",
@@ -1894,6 +1909,7 @@
"mujoco.mj_resetData(model, data)\n", "mujoco.mj_resetData(model, data)\n",
"mujoco.mj_forward(model, data)\n", "mujoco.mj_forward(model, data)\n",
"\n", "\n",
"with mujoco.Renderer(model) as renderer:\n",
" while data.time < duration:\n", " while data.time < duration:\n",
" # append data to the traces\n", " # append data to the traces\n",
" positions.append(data.geom_xpos[data.geom(\"green_sphere\").id].copy())\n", " positions.append(data.geom_xpos[data.geom(\"green_sphere\").id].copy())\n",
@@ -2018,8 +2034,7 @@
"</mujoco>\n", "</mujoco>\n",
"\"\"\"\n", "\"\"\"\n",
"model = mujoco.MjModel.from_xml_string(dominos_xml)\n", "model = mujoco.MjModel.from_xml_string(dominos_xml)\n",
"data = mujoco.MjData(model)\n", "data = mujoco.MjData(model)\n"
"renderer = mujoco.Renderer(model, height=1024, width=1440)"
] ]
}, },
{ {
@@ -2035,10 +2050,13 @@
"\n", "\n",
"duration = 2.5 # (seconds)\n", "duration = 2.5 # (seconds)\n",
"framerate = 60 # (Hz)\n", "framerate = 60 # (Hz)\n",
"height = 1024\n",
"width = 1440\n",
"\n", "\n",
"# Simulate and display video.\n", "# Simulate and display video.\n",
"frames = []\n", "frames = []\n",
"mujoco.mj_resetData(model, data) # Reset state and time.\n", "mujoco.mj_resetData(model, data) # Reset state and time.\n",
"with mujoco.Renderer(model, height, width) as renderer:\n",
" while data.time < duration:\n", " while data.time < duration:\n",
" mujoco.mj_step(model, data)\n", " mujoco.mj_step(model, data)\n",
" if len(frames) < data.time * framerate:\n", " if len(frames) < data.time * framerate:\n",
@@ -2061,6 +2079,8 @@
"#@title Render from moving camera\n", "#@title Render from moving camera\n",
"\n", "\n",
"duration = 3 # (seconds)\n", "duration = 3 # (seconds)\n",
"height = 1024\n",
"width = 1440\n",
"\n", "\n",
"# find time when box is thrown (speed > 2cm/s)\n", "# find time when box is thrown (speed > 2cm/s)\n",
"throw_time = 0.0\n", "throw_time = 0.0\n",
@@ -2115,6 +2135,7 @@
"slowdown = 4 # 4x slow-down\n", "slowdown = 4 # 4x slow-down\n",
"mujoco.mj_resetData(model, data)\n", "mujoco.mj_resetData(model, data)\n",
"frames = []\n", "frames = []\n",
"with mujoco.Renderer(model, height, width) as renderer:\n",
" while data.time < duration:\n", " while data.time < duration:\n",
" mujoco.mj_step(model, data)\n", " mujoco.mj_step(model, data)\n",
" if len(frames) < data.time * framerate * slowdown:\n", " if len(frames) < data.time * framerate * slowdown:\n",