diff --git a/python/tutorial.ipynb b/python/tutorial.ipynb index 3c6e4643..1e2528bc 100644 --- a/python/tutorial.ipynb +++ b/python/tutorial.ipynb @@ -479,8 +479,8 @@ "\"\"\"\n", "model = mujoco.MjModel.from_xml_string(xml)\n", "data = mujoco.MjData(model)\n", - "renderer = mujoco.Renderer(model)\n", "\n", + "renderer = mujoco.Renderer(model)\n", "mujoco.mj_forward(model, data)\n", "renderer.update_scene(data)\n", "\n", @@ -509,6 +509,7 @@ "# Run this cell multiple times for different colors\n", "model.geom('red_box').rgba[:3] = np.random.rand(3)\n", "renderer.update_scene(data)\n", + "\n", "media.show_image(renderer.render())" ] }, @@ -545,6 +546,7 @@ " renderer.update_scene(data)\n", " pixels = renderer.render()\n", " frames.append(pixels)\n", + "\n", "media.show_video(frames, fps=framerate)" ] }, @@ -590,6 +592,7 @@ "duration = 3.8 # (seconds)\n", "framerate = 60 # (Hz)\n", "\n", + "# Simulate and display video.\n", "frames = []\n", "mujoco.mj_resetData(model, data)\n", "while data.time < duration:\n", @@ -599,7 +602,6 @@ " pixels = renderer.render()\n", " frames.append(pixels)\n", "\n", - "# Simulate and display video.\n", "media.show_video(frames, fps=framerate)" ] }, @@ -646,6 +648,7 @@ "model.opt.gravity = (0, 0, 10)\n", "print('flipped gravity', model.opt.gravity)\n", "\n", + "# Simulate and display video.\n", "frames = []\n", "mujoco.mj_resetData(model, data)\n", "while data.time < duration:\n", @@ -756,10 +759,12 @@ "\n", "\"\"\"\n", "model = mujoco.MjModel.from_xml_string(tippe_top)\n", - "renderer = mujoco.Renderer(model)\n", "data = mujoco.MjData(model)\n", + "renderer = mujoco.Renderer(model)\n", + "\n", "mujoco.mj_forward(model, data)\n", "renderer.update_scene(data, camera=\"closeup\")\n", + "\n", "media.show_image(renderer.render())" ] }, @@ -933,10 +938,12 @@ "\n", "\"\"\"\n", "model = mujoco.MjModel.from_xml_string(chaotic_pendulum)\n", - "renderer = mujoco.Renderer(model, 480, 640)\n", "data = mujoco.MjData(model)\n", + "renderer = mujoco.Renderer(model, 480, 640)\n", + "\n", "mujoco.mj_forward(model, data)\n", "renderer.update_scene(data, camera=\"fixed\")\n", + "\n", "media.show_image(renderer.render())" ] }, @@ -965,12 +972,10 @@ "frames = []\n", "renderer = mujoco.Renderer(model, 240, 320)\n", "\n", - "\n", "# set initial state\n", "mujoco.mj_resetData(model, data)\n", "data.joint('root').qvel = 10\n", "\n", - "\n", "# simulate and record frames\n", "frame = 0\n", "sim_time = 0\n", @@ -1176,14 +1181,13 @@ " ax.plot(sim_time, energy, label='timestep = {:2.2g}ms'.format(1000*dt))\n", " ax.set_yscale('log')\n", "\n", - "\n", "# finalize plot\n", "ax.set_ybound(1, 1e3)\n", "ax.set_title('energy')\n", "ax.set_ylabel('Joule')\n", "ax.set_xlabel('second')\n", "ax.legend(frameon=True, loc='lower right');\n", - "plt.tight_layout()\n" + "plt.tight_layout()" ] }, { @@ -1228,10 +1232,12 @@ "\n", "\"\"\"\n", "model = mujoco.MjModel.from_xml_string(free_body_MJCF)\n", - "renderer = mujoco.Renderer(model, 400, 600)\n", "data = mujoco.MjData(model)\n", + "renderer = mujoco.Renderer(model, 400, 600)\n", + "\n", "mujoco.mj_forward(model, data)\n", "renderer.update_scene(data, \"fixed\")\n", + "\n", "media.show_image(renderer.render())" ] }, @@ -1275,7 +1281,7 @@ "mujoco.mj_resetData(model, data)\n", "data.qvel[3:6] = 5*np.random.randn(3)\n", "\n", - "# simulate and render\n", + "# Simulate and display video.\n", "for i in range(n_frames):\n", " while data.time < i/120.0: #1/4x real time\n", " mujoco.mj_step(model, data)\n", @@ -1283,7 +1289,6 @@ " frame = renderer.render()\n", " frames.append(frame)\n", "\n", - "# show video\n", "media.show_video(frames, fps=30)" ] }, @@ -1437,7 +1442,7 @@ "data = mujoco.MjData(model)\n", "renderer = mujoco.Renderer(model, height, width)\n", "\n", - "# simulate and render\n", + "# Simulate and display video.\n", "mujoco.mj_resetData(model, data)\n", "for i in range(n_frames):\n", " while data.time < i/30.0:\n", @@ -1445,6 +1450,7 @@ " renderer.update_scene(data, \"y\")\n", " frame = renderer.render()\n", " frames.append(frame)\n", + "\n", "media.show_video(frames, fps=30)" ] }, @@ -1513,10 +1519,12 @@ "\n", "\"\"\"\n", "model = mujoco.MjModel.from_xml_string(MJCF)\n", - "renderer = mujoco.Renderer(model, 480, 480)\n", "data = mujoco.MjData(model)\n", + "renderer = mujoco.Renderer(model, 480, 480)\n", + "\n", "mujoco.mj_forward(model, data)\n", "renderer.update_scene(data, \"fixed\")\n", + "\n", "media.show_image(renderer.render())\n" ] }, @@ -1551,7 +1559,7 @@ "mujoco.mj_resetData(model, data)\n", "data.ctrl = 20\n", "\n", - "# simulate and render\n", + "# Simulate and display video.\n", "for i in range(n_frames):\n", " while data.time < i/fps:\n", " mujoco.mj_step(model, data)\n", @@ -1783,10 +1791,10 @@ "outputs": [], "source": [ "#@title Project from world to camera coordinates {vertical-output: true}\n", + "\n", "# reset the scene\n", "renderer.update_scene(data)\n", "\n", - "\n", "# Get the world coordinates of the box corners\n", "box_pos = data.geom_xpos[model.geom('red_box').id]\n", "box_mat = data.geom_xmat[model.geom('red_box').id].reshape(3, 3)\n", @@ -1897,6 +1905,7 @@ " modify_scene(renderer.scene)\n", " pixels = renderer.render()\n", " frames.append(pixels)\n", + "\n", "media.show_video(frames, fps=framerate)" ] }, @@ -1923,6 +1932,7 @@ "outputs": [], "source": [ "#@title Load the \"dominos\" model\n", + "\n", "dominos_xml = \"\"\"\n", "\n", " \n", @@ -2022,6 +2032,7 @@ "outputs": [], "source": [ "#@title Render from fixed camera\n", + "\n", "duration = 2.5 # (seconds)\n", "framerate = 60 # (Hz)\n", "\n", @@ -2034,6 +2045,7 @@ " renderer.update_scene(data, camera='top')\n", " pixels = renderer.render()\n", " frames.append(pixels)\n", + "\n", "media.show_video(frames, fps=framerate)" ] }, @@ -2047,6 +2059,7 @@ "outputs": [], "source": [ "#@title Render from moving camera\n", + "\n", "duration = 3 # (seconds)\n", "\n", "# find time when box is thrown (speed > 2cm/s)\n", @@ -2109,6 +2122,7 @@ " renderer.update_scene(data, cam)\n", " pixels = renderer.render()\n", " frames.append(pixels)\n", + "\n", "media.show_video(frames, fps=framerate)" ] }