Merge pull request #1769 from fanminshi:renderer_context
PiperOrigin-RevId: 648508835 Change-Id: Ice87cd1221723ed44ba0ddca97b6aac245dd8975
This commit is contained in:
+43
-22
@@ -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",
|
||||||
|
|||||||
Reference in New Issue
Block a user