From 9c2313f5c85df3b3d3fa3f1c32e9f8b534173363 Mon Sep 17 00:00:00 2001 From: David Cavazos Date: Tue, 29 Sep 2020 08:30:36 -0700 Subject: [PATCH 1/3] Add documentation Adds documentation to explain each step and have links to useful pages to improve the onboarding experience. --- .../pybullet/notebooks/HelloPyBullet.ipynb | 692 ++++++++++++------ 1 file changed, 451 insertions(+), 241 deletions(-) diff --git a/examples/pybullet/notebooks/HelloPyBullet.ipynb b/examples/pybullet/notebooks/HelloPyBullet.ipynb index e31775fe7..a9c424329 100644 --- a/examples/pybullet/notebooks/HelloPyBullet.ipynb +++ b/examples/pybullet/notebooks/HelloPyBullet.ipynb @@ -1,254 +1,464 @@ { - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "import pybullet as p" - ] + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "colab": { + "name": "HelloPyBullet.ipynb", + "provenance": [], + "toc_visible": true, + "include_colab_link": true + } }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ + "cells": [ { - "data": { - "text/plain": [ - "0" + "cell_type": "markdown", + "metadata": { + "id": "view-in-github" + }, + "source": [ + "\"Open" ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "p.connect(p.DIRECT)" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ + }, { - "data": { - "text/plain": [ - "0" + "cell_type": "markdown", + "metadata": { + "id": "NTwYntjmAJOg" + }, + "source": [ + "# Hello PyBullet!\n", + "\n", + "This notebook shows how to install and create a simple application on PyBullet." ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "p.loadURDF(\"plane.urdf\")" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "r2d2=p.loadURDF(\"r2d2.urdf\",[0,0,0.5])" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ + }, { - "data": { - "text/plain": [ - "2" + "cell_type": "markdown", + "metadata": { + "id": "AAAUJ8y0BjBs" + }, + "source": [ + "## Setup\n", + "\n", + "First, let's install the [PyBullet](https://pybullet.org/wordpress/) module.\n", + "\n", + "> ℹ️ The installer has to build the library so please be patient.\n", + "> It takes around 5 minutes for the installation to complete." ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "p.getNumBodies()" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ + }, { - "name": "stdout", - "output_type": "stream", - "text": [ - "joint 0 name= base_to_right_leg\n", - "joint 1 name= right_base_joint\n", - "joint 2 name= right_front_wheel_joint\n", - "joint 3 name= right_back_wheel_joint\n", - "joint 4 name= base_to_left_leg\n", - "joint 5 name= left_base_joint\n", - "joint 6 name= left_front_wheel_joint\n", - "joint 7 name= left_back_wheel_joint\n", - "joint 8 name= gripper_extension\n", - "joint 9 name= left_gripper_joint\n", - "joint 10 name= left_tip_joint\n", - "joint 11 name= right_gripper_joint\n", - "joint 12 name= right_tip_joint\n", - "joint 13 name= head_swivel\n", - "joint 14 name= tobox\n" - ] - } - ], - "source": [ - "for i in range (p.getNumJoints(r2d2)):\n", - " jointInfo=p.getJointInfo(r2d2,i)\n", - " print(\"joint\",jointInfo[0],\"name=\",jointInfo[1].decode('ascii'))" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ + "cell_type": "code", + "metadata": { + "id": "xyDqmV_YitDg" + }, + "source": [ + "# Install the PyBullet module.\n", + "!pip install -U pybullet" + ], + "execution_count": null, + "outputs": [] + }, { - "name": "stdout", - "output_type": "stream", - "text": [ - "pos = 0.00000,0.00000,0.50000 \n", - "pos = 0.00000,-0.00000,0.49983 \n", - "pos = 0.00000,-0.00000,0.49948 \n", - "pos = 0.00000,-0.00000,0.49896 \n", - "pos = 0.00000,-0.00000,0.49826 \n", - "pos = 0.00000,-0.00000,0.49740 \n", - "pos = 0.00000,-0.00000,0.49636 \n", - "pos = 0.00000,-0.00000,0.49514 \n", - "pos = 0.00000,-0.00000,0.49375 \n", - "pos = 0.00000,-0.00000,0.49219 \n" - ] - } - ], - "source": [ - "p.setGravity(0,0,-10)\n", - "precision=5\n", - "for i in range (10):\n", - " pos,orn = p.getBasePositionAndOrientation(r2d2)\n", - " posmsg='pos = {posx:.{prec}f},{posy:.{prec}f},{posz:.{prec}f} '.format(posx=pos[0],posy=pos[1],posz=pos[2], prec=precision)\n", - " print(posmsg)\n", - " p.stepSimulation()" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [], - "source": [ - "p.stepSimulation()" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "%matplotlib inline\n", - "\n", - "import matplotlib\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [], - "source": [ - "camTargetPos = [0,0,0]\n", - "cameraUp = [0,0,1]\n", - "cameraPos = [1,1,1]\n", - "\n", - "pitch = -10.0\n", - "yaw = 60\n", - "roll=0\n", - "upAxisIndex = 2\n", - "camDistance = 4\n", - "pixelWidth = 320\n", - "pixelHeight = 200\n", - "nearPlane = 0.01\n", - "farPlane = 100\n", - "fov = 60\n", - "viewMatrix = p.computeViewMatrixFromYawPitchRoll(camTargetPos, camDistance, yaw, pitch, roll, upAxisIndex)\n", - "aspect = pixelWidth / pixelHeight;\n", - "projectionMatrix = p.computeProjectionMatrixFOV(fov, aspect, nearPlane, farPlane);\n", - "img_arr = p.getCameraImage(pixelWidth, pixelHeight, viewMatrix,projectionMatrix, shadow=1,lightDirection=[1,1,1])\n" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" + "cell_type": "markdown", + "metadata": { + "id": "INLvCOjvEfSl" + }, + "source": [ + "## Hello PyBullet World!\n", + "\n", + "This is based on the\n", + "[PyBullet Quickstart Guide](https://docs.google.com/document/d/10sXEhzFRSnvFcl3XxNGhnD4N2SedqwdAvK3dsihxVUA/edit?usp=sharing).\n", + "\n", + "After importing the PyBullet module, the first thing to do is 'connecting' to the physics simulation.\n", + "PyBullet is designed around a client-server driven API, with a client sending commands and a physics server returning the status.\n", + "\n", + "PyBullet has some built-in physics servers: `DIRECT` and `GUI`.\n", + "Both `GUI` and `DIRECT` connections will execute the physics simulation and rendering in the same process as PyBullet.\n", + "\n", + "In this example, we'll use the `DIRECT` mode to do the calculations independently of rendering." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "ZgNi0AkOipoQ", + "outputId": "0504f7c7-b028-4388-a2d0-7b224d348561", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + } + }, + "source": [ + "import pybullet as p\n", + "\n", + "p.connect(p.DIRECT)" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "0" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 3 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "V1nNu07MG7kR" + }, + "source": [ + "We want to access the example\n", + "[Bullet data](https://github.com/bulletphysics/bullet3/tree/master/data)\n", + "files.\n", + "Fortunately, we can specify a new search path in PyBullet and point it to the `py_bullet_data.getDataPath()`." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "FW-AXeioHrU4" + }, + "source": [ + "import pybullet_data\n", + "\n", + "p.setAdditionalSearchPath(pybullet_data.getDataPath())" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "6fb-HzCsH6Fs" + }, + "source": [ + "Now, we can load models from the example data in the\n", + "[Unified Robot Description Format (URDF)](https://wiki.ros.org/urdf) format.\n", + "\n", + "Let's load a `plane` to serve as our simulation floor plane,\n", + "and an [R2D2 droid](https://en.wikipedia.org/wiki/R2-D2).\n", + "\n", + "In Bullet Physics, you can use whatever units you want as long as you are consistent.\n", + "For this example, we'll use the\n", + "[metric system](https://en.wikipedia.org/wiki/Metric_system)." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "4UHhYcEgipoX", + "outputId": "eff70421-0b77-4ba0-e8a9-5777e1519f5c", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + } + }, + "source": [ + "# First, let's make sure we start with a fresh new simulation.\n", + "# Otherwise, we can keep adding objects by running this cell over again.\n", + "p.resetSimulation()\n", + "\n", + "# Load our simulation floor plane at the origin (0, 0, 0).\n", + "p.loadURDF('plane.urdf')\n", + "\n", + "# Load an R2D2 droid at the position at 0.5 meters height in the z-axis.\n", + "r2d2 = p.loadURDF('r2d2.urdf', [0, 0, 0.5])\n", + "\n", + "# We can check the number of bodies we have in the simulation.\n", + "p.getNumBodies()" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "2" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 5 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "5mafnqVkJu67" + }, + "source": [ + "### Joint information\n", + "\n", + "Now that we've populated our simulation with those two objects,\n", + "we can analyze them to see what's inside.\n", + "\n", + "The [`getJointInfo()`](https://docs.google.com/document/d/10sXEhzFRSnvFcl3XxNGhnD4N2SedqwdAvK3dsihxVUA/edit?usp=sharing#heading=h.la294ocbo43o)\n", + "function returns a list of all the information from the selected joint." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "TkIm1cG-ipof", + "outputId": "7d4c394c-2f1c-437f-d836-4c370b9a45a1", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 309 + } + }, + "source": [ + "# First let's define a class for the JointInfo.\n", + "from dataclasses import dataclass\n", + "\n", + "@dataclass\n", + "class Joint:\n", + " index: int\n", + " name: str\n", + " type: int\n", + " gIndex: int\n", + " uIndex: int\n", + " flags: int\n", + " damping: float\n", + " friction: float\n", + " lowerLimit: float\n", + " upperLimit: float\n", + " maxForce: float\n", + " maxVelocity: float\n", + " linkName: str\n", + " axis: tuple\n", + " parentFramePosition: tuple\n", + " parentFrameOrientation: tuple\n", + " parentIndex: int\n", + "\n", + " def __post_init__(self):\n", + " self.name = str(self.name, 'utf-8')\n", + " self.linkName = str(self.linkName, 'utf-8')\n", + "\n", + "# Let's analyze the R2D2 droid!\n", + "print(f\"r2d2 unique ID: {r2d2}\")\n", + "for i in range(p.getNumJoints(r2d2)):\n", + " joint = Joint(*p.getJointInfo(r2d2, i))\n", + " print(joint)" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "text": [ + "r2d2 unique ID: 1\n", + "Joint(index=0, name='base_to_right_leg', type=4, gIndex=-1, uIndex=-1, flags=0, damping=0.0, friction=0.0, lowerLimit=0.0, upperLimit=-1.0, maxForce=0.0, maxVelocity=0.0, linkName='right_leg', axis=(0.0, 0.0, 0.0), parentFramePosition=(0.22, 0.0, 0.25), parentFrameOrientation=(0.0, -0.7070904020014416, 0.0, 0.7071231599922604), parentIndex=-1)\n", + "Joint(index=1, name='right_base_joint', type=4, gIndex=-1, uIndex=-1, flags=0, damping=0.0, friction=0.0, lowerLimit=0.0, upperLimit=-1.0, maxForce=0.0, maxVelocity=0.0, linkName='right_base', axis=(0.0, 0.0, 0.0), parentFramePosition=(0.2999999996780742, 0.0, -1.3898038463944216e-05), parentFrameOrientation=(0.0, 0.7070904020014416, 0.0, 0.7071231599922604), parentIndex=0)\n", + "Joint(index=2, name='right_front_wheel_joint', type=0, gIndex=7, uIndex=6, flags=1, damping=0.0, friction=0.0, lowerLimit=0.0, upperLimit=-1.0, maxForce=100.0, maxVelocity=100.0, linkName='right_front_wheel', axis=(0.0, 0.0, 1.0), parentFramePosition=(0.0, 0.133333333333, -0.085), parentFrameOrientation=(0.0, -0.7070904020014416, 0.0, 0.7071231599922604), parentIndex=1)\n", + "Joint(index=3, name='right_back_wheel_joint', type=0, gIndex=8, uIndex=7, flags=1, damping=0.0, friction=0.0, lowerLimit=0.0, upperLimit=-1.0, maxForce=100.0, maxVelocity=100.0, linkName='right_back_wheel', axis=(0.0, 0.0, 1.0), parentFramePosition=(0.0, -0.133333333333, -0.085), parentFrameOrientation=(0.0, -0.7070904020014416, 0.0, 0.7071231599922604), parentIndex=1)\n", + "Joint(index=4, name='base_to_left_leg', type=4, gIndex=-1, uIndex=-1, flags=0, damping=0.0, friction=0.0, lowerLimit=0.0, upperLimit=-1.0, maxForce=0.0, maxVelocity=0.0, linkName='left_leg', axis=(0.0, 0.0, 0.0), parentFramePosition=(-0.22, 0.0, 0.25), parentFrameOrientation=(0.0, -0.7070904020014416, 0.0, 0.7071231599922604), parentIndex=-1)\n", + "Joint(index=5, name='left_base_joint', type=4, gIndex=-1, uIndex=-1, flags=0, damping=0.0, friction=0.0, lowerLimit=0.0, upperLimit=-1.0, maxForce=0.0, maxVelocity=0.0, linkName='left_base', axis=(0.0, 0.0, 0.0), parentFramePosition=(0.2999999996780742, 0.0, -1.3898038463944216e-05), parentFrameOrientation=(0.0, 0.7070904020014416, 0.0, 0.7071231599922604), parentIndex=4)\n", + "Joint(index=6, name='left_front_wheel_joint', type=0, gIndex=9, uIndex=8, flags=1, damping=0.0, friction=0.0, lowerLimit=0.0, upperLimit=-1.0, maxForce=100.0, maxVelocity=100.0, linkName='left_front_wheel', axis=(0.0, 0.0, 1.0), parentFramePosition=(0.0, 0.133333333333, -0.085), parentFrameOrientation=(0.0, -0.7070904020014416, 0.0, 0.7071231599922604), parentIndex=5)\n", + "Joint(index=7, name='left_back_wheel_joint', type=0, gIndex=10, uIndex=9, flags=1, damping=0.0, friction=0.0, lowerLimit=0.0, upperLimit=-1.0, maxForce=100.0, maxVelocity=100.0, linkName='left_back_wheel', axis=(0.0, 0.0, 1.0), parentFramePosition=(0.0, -0.133333333333, -0.085), parentFrameOrientation=(0.0, -0.7070904020014416, 0.0, 0.7071231599922604), parentIndex=5)\n", + "Joint(index=8, name='gripper_extension', type=1, gIndex=11, uIndex=10, flags=1, damping=0.0, friction=0.0, lowerLimit=-0.38, upperLimit=0.0, maxForce=1000.0, maxVelocity=0.5, linkName='gripper_pole', axis=(1.0, 0.0, 0.0), parentFramePosition=(0.0, 0.19, 0.2), parentFrameOrientation=(0.0, 0.0, -0.7070904020014416, 0.7071231599922604), parentIndex=-1)\n", + "Joint(index=9, name='left_gripper_joint', type=0, gIndex=12, uIndex=11, flags=1, damping=0.0, friction=0.0, lowerLimit=0.0, upperLimit=0.548, maxForce=1000.0, maxVelocity=0.5, linkName='left_gripper', axis=(0.0, 0.0, 1.0), parentFramePosition=(0.2, 0.02, 0.0), parentFrameOrientation=(0.0, 0.0, 0.0, 1.0), parentIndex=8)\n", + "Joint(index=10, name='left_tip_joint', type=4, gIndex=-1, uIndex=-1, flags=0, damping=0.0, friction=0.0, lowerLimit=0.0, upperLimit=-1.0, maxForce=0.0, maxVelocity=0.0, linkName='left_tip', axis=(0.0, 0.0, 0.0), parentFramePosition=(0.0, 0.0, 0.0), parentFrameOrientation=(0.0, 0.0, 0.0, 1.0), parentIndex=9)\n", + "Joint(index=11, name='right_gripper_joint', type=0, gIndex=13, uIndex=12, flags=1, damping=0.0, friction=0.0, lowerLimit=0.0, upperLimit=0.548, maxForce=1000.0, maxVelocity=0.5, linkName='right_gripper', axis=(0.0, 0.0, -1.0), parentFramePosition=(0.2, -0.02, 0.0), parentFrameOrientation=(0.0, 0.0, 0.0, 1.0), parentIndex=8)\n", + "Joint(index=12, name='right_tip_joint', type=4, gIndex=-1, uIndex=-1, flags=0, damping=0.0, friction=0.0, lowerLimit=0.0, upperLimit=-1.0, maxForce=0.0, maxVelocity=0.0, linkName='right_tip', axis=(0.0, 0.0, 0.0), parentFramePosition=(0.0, 0.0, 0.0), parentFrameOrientation=(0.0, 0.0, 0.0, 1.0), parentIndex=11)\n", + "Joint(index=13, name='head_swivel', type=0, gIndex=14, uIndex=13, flags=1, damping=0.0, friction=0.0, lowerLimit=-0.38, upperLimit=0.0, maxForce=1000.0, maxVelocity=0.5, linkName='head', axis=(0.0, 0.0, 1.0), parentFramePosition=(0.0, 0.0, 0.3), parentFrameOrientation=(0.0, 0.0, 0.0, 1.0), parentIndex=-1)\n", + "Joint(index=14, name='tobox', type=4, gIndex=-1, uIndex=-1, flags=0, damping=0.0, friction=0.0, lowerLimit=0.0, upperLimit=-1.0, maxForce=0.0, maxVelocity=0.0, linkName='box', axis=(0.0, 0.0, 0.0), parentFramePosition=(0.0, 0.1214, 0.1214), parentFrameOrientation=(0.0, 0.0, 0.0, 1.0), parentIndex=13)\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "lTxQQmc_Vrue" + }, + "source": [ + "To start the simulation, first we must set the gravity.\n", + "We'll use [Earth's gravity](http://www.geophys.ac.cn/infowin/Gravity.asp) for convenience, so we'll set it up to `-9.807` m/s2." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "RMZKELbripoh", + "outputId": "83e73cf7-05d0-48bc-ca81-43ecee066918", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 357 + } + }, + "source": [ + "# Set the gravity to Earth's gravity.\n", + "p.setGravity(0, 0, -9.807)\n", + "\n", + "# Run the simulation for a fixed amount of steps.\n", + "for i in range(20):\n", + " position, orientation = p.getBasePositionAndOrientation(r2d2)\n", + " x, y, z = position\n", + " roll, pitch, yaw = p.getEulerFromQuaternion(orientation)\n", + " print(f\"{i:3}: x={x:0.10f}, y={y:0.10f}, z={z:0.10f}), roll={roll:0.10f}, pitch={pitch:0.10f}, yaw={yaw:0.10f}\")\n", + " p.stepSimulation()" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "text": [ + " 0: x=0.0000000000, y=0.0000000000, z=0.5000000000), roll=0.0000000000, pitch=-0.0000000000, yaw=0.0000000000\n", + " 1: x=-0.0000000000, y=0.0000000000, z=0.4998297396), roll=0.0000000000, pitch=-0.0000000000, yaw=-0.0000000000\n", + " 2: x=-0.0000000000, y=0.0000000000, z=0.4994892187), roll=0.0000000000, pitch=-0.0000000000, yaw=-0.0000000000\n", + " 3: x=-0.0000000000, y=0.0000000000, z=0.4989784375), roll=0.0000000000, pitch=-0.0000000000, yaw=-0.0000000000\n", + " 4: x=-0.0000000000, y=0.0000000000, z=0.4982973958), roll=0.0000000000, pitch=-0.0000000000, yaw=-0.0000000000\n", + " 5: x=-0.0000000000, y=0.0000000000, z=0.4974460937), roll=0.0000000000, pitch=-0.0000000000, yaw=-0.0000000000\n", + " 6: x=-0.0000000000, y=0.0000000000, z=0.4964245312), roll=0.0000000000, pitch=-0.0000000000, yaw=-0.0000000000\n", + " 7: x=-0.0000000000, y=0.0000000000, z=0.4952327083), roll=0.0000000000, pitch=-0.0000000000, yaw=-0.0000000000\n", + " 8: x=-0.0000000000, y=0.0000000000, z=0.4938706250), roll=0.0000000000, pitch=-0.0000000000, yaw=-0.0000000000\n", + " 9: x=-0.0000000000, y=0.0000000000, z=0.4923382813), roll=0.0000000000, pitch=-0.0000000000, yaw=-0.0000000000\n", + " 10: x=-0.0000000000, y=0.0000000000, z=0.4906356771), roll=0.0000000000, pitch=-0.0000000000, yaw=-0.0000000000\n", + " 11: x=-0.0000000000, y=0.0000000000, z=0.4887628125), roll=0.0000000000, pitch=-0.0000000000, yaw=-0.0000000000\n", + " 12: x=-0.0000000000, y=0.0000000000, z=0.4867196875), roll=0.0000000000, pitch=-0.0000000000, yaw=-0.0000000000\n", + " 13: x=-0.0000000000, y=0.0000000000, z=0.4845063021), roll=0.0000000000, pitch=-0.0000000000, yaw=-0.0000000000\n", + " 14: x=-0.0000000000, y=0.0000000000, z=0.4821226563), roll=0.0000000000, pitch=-0.0000000000, yaw=-0.0000000000\n", + " 15: x=-0.0000000000, y=0.0000000000, z=0.4795687500), roll=0.0000000000, pitch=-0.0000000000, yaw=-0.0000000000\n", + " 16: x=-0.0000000000, y=0.0000000000, z=0.4768445833), roll=0.0000000000, pitch=-0.0000000000, yaw=-0.0000000000\n", + " 17: x=-0.0000000000, y=0.0000000000, z=0.4739501562), roll=0.0000000000, pitch=-0.0000000000, yaw=-0.0000000000\n", + " 18: x=-0.0000000000, y=0.0000000000, z=0.4708854687), roll=0.0000000000, pitch=-0.0000000000, yaw=-0.0000000000\n", + " 19: x=0.0000001305, y=-0.0000077238, z=0.4708941546), roll=0.0000021144, pitch=0.0000002247, yaw=0.0000001176\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "y8fiKPz8-aOp" + }, + "source": [ + "### Rendering\n", + "\n", + "The [`getCameraImage`](https://docs.google.com/document/d/10sXEhzFRSnvFcl3XxNGhnD4N2SedqwdAvK3dsihxVUA/edit?usp=sharing#heading=h.u1jisfnt6984)\n", + "API will return a RGB image, a depth buffer and a segmentation mask buffer with body unique ids of visible objects for each pixel" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "tHb7uAveipon", + "outputId": "a24111c3-a1da-4bf3-b3f0-403661114c7d", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 685 + } + }, + "source": [ + "import numpy as np\n", + "from PIL import Image\n", + "from IPython.display import display\n", + "\n", + "width = 320\n", + "height = 200\n", + "img_arr = p.getCameraImage(\n", + " width,\n", + " height,\n", + " viewMatrix=p.computeViewMatrixFromYawPitchRoll(\n", + " cameraTargetPosition=[0, 0, 0],\n", + " distance=4,\n", + " yaw=60,\n", + " pitch=-10,\n", + " roll=0,\n", + " upAxisIndex=2,\n", + " ),\n", + " projectionMatrix=p.computeProjectionMatrixFOV(\n", + " fov=60,\n", + " aspect=width/height,\n", + " nearVal=0.01,\n", + " farVal=100,\n", + " ),\n", + " shadow=True,\n", + " lightDirection=[1, 1, 1],\n", + ")\n", + "\n", + "width, height, rgba, depth, mask = img_arr\n", + "print(f\"rgba shape={rgba.shape}, dtype={rgba.dtype}\")\n", + "display(Image.fromarray(rgba, 'RGBA'))\n", + "print(f\"depth shape={depth.shape}, dtype={depth.dtype}, as values from 0.0 (near) to 1.0 (far)\")\n", + "display(Image.fromarray((depth*255).astype('uint8')))\n", + "print(f\"mask shape={mask.shape}, dtype={mask.dtype}, as unique values from 0 to N-1 entities, and -1 as None\")\n", + "display(Image.fromarray(np.interp(mask, (-1, mask.max()), (0, 255)).astype('uint8')))" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "text": [ + "image size: 320x200\n", + "rgba shape=(200, 320, 4) dtype=uint8\n" + ], + "name": "stdout" + }, + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": { + "tags": [] + } + }, + { + "output_type": "stream", + "text": [ + "depth shape=(200, 320) dtype=float32 as values from 0.0 (near) to 1.0 (far)\n" + ], + "name": "stdout" + }, + { + "output_type": "display_data", + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAUAAAADICAAAAAC8b2d3AAACIUlEQVR4nO3bwWqDQBRAUS35/0+u\nXQQKxYaWXInPcM7CrcPlzcgsXLeF4uPsBVydgJGAkYCRgJGAkYCRgJGAkYCRgJGAkYCRgJGAkYCR\ngJGAkYCRgJGAkYCRgJGAkYCRgJGAkYCRgJGAkYCRgJGAkYCRgJGAkYCRgJGAkYCRgJGAkYCRgJGA\nkYCRgJGAkYCRgJGAkYCRgJGAkYCRgJGA0e3sBfxhW5Z1W5ZlWc9eyQOzA27fj7FGb+HZ6e4mB7xC\nv8kBf/SbegRODngNAkbr1INmv66Zu9gERtcJOHMAxwbc7+Bt5mEz+yayM+9WN3UCfzdwCK81gaNm\n7+5aEziQgNG1tvB/D8EXbvXzbiJnvfjguIcEHPhxfM4TcfcB36bGwR7EXT9fu4y34yscCRgJGAkY\nCRgJGAkYCRgJGAkYCRgJGAkYCRgJGAkYCRgJGAkYCRgJGAkYCRgJGAkYCRgJGAkYCRgJGAkYCRgJ\nGAkYCRgJGAkYCRgJGN38V9OYwEjASMBIwEjASMBIwEjASMBIwEjASMBIwEjASMBIwEjASMBIwEjA\nSMBIwEjASMBIwEjASMBIwEjASMBIwEjASMBIwEjASMBIwEjASMBIwEjASMBIwEjASMBIwEjAyP/C\nkQmMBIwEjASMBIwEjASMBIwEjASMBIwEjASMBIwEjASMBIwEjASMBIwEjASMBIwEjASMBIwEjASM\nBIwEjASMBIwEjL4AhNEaimX6vcQAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": { + "tags": [] + } + }, + { + "output_type": "stream", + "text": [ + "mask shape=(200, 320) dtype=int32 as unique values from 0 to N-1 entities, and -1 as None\n" + ], + "name": "stdout" + }, + { + "output_type": "display_data", + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAUAAAADICAAAAAC8b2d3AAACCElEQVR4nO3Z0UobURRA0Wvxvzv9\n8vRBtC1p1LhT5ly61oMRmcBhc4+ZJGsBAAAAAAAAAAAAAAAAAAAAAAB81tPZA3zgstbTZa25g06d\n68Xl169TB/129gDvuXx8yekmB9yh3+SAf/SbusGTA+5BwGjsalz/A5w5qhMY7RNw5gGcOtZfb2FG\nzvp89gD3mfeubp8VXmvkrfVeJ3DU2Xux1wkcSMBorxVe3z932Y9/O8Xvzgv4yRZfesZ7Vz447kMC\n3t/iRA+Oex1wqxoP9oW4z/9zr7vcCOVVOBIwEjASMBIwEjASMBIwEjASMBIwEjCa+IHqcfYA95h4\nAo87/36qiQFvOo6zJ7i2VcCJBIxGBjzWWuuYuLDXRga86Th7gGsTb2PeXi1eH95+DDQz4GuuDbZ4\nmxWe2vJp+teax9jlfTE+4HTbrPBUAkYCRgJGAkYCRgJGAkYCRgJGAkYCRgJGAkYCRgJGAkYCRgJG\nAkYCRgJGAkYCRgJGAkYCRgJGAkYCRgJGAkYCRgJGAkYCRgJGAkYCRgJGAkYCRgJGAkYCRgJGAkYC\nRgJGAkYCRgJGAkYCRgJGAkYCRgJGAkYCRgJGAkYCRgJGAkYCRgJGAkYCRgJGAkYCRgJGAkYCRgJG\nAkYCRgJGAkYCRgJGAkYCRgJGAkYCRgJGAkYCRgJGAkYCRgJGAkYCRgJGPwGEfx6iKd+uFgAAAABJ\nRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": { + "tags": [] + } + } ] - }, - "metadata": {}, - "output_type": "display_data" } - ], - "source": [ - "w=img_arr[0] #width of the image, in pixels\n", - "h=img_arr[1] #height of the image, in pixels\n", - "rgb=img_arr[2] #color data RGB\n", - "plt.imshow(rgb,interpolation='none')\n", - "plt.draw()\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.1" - } - }, - "nbformat": 4, - "nbformat_minor": 2 + ] } From e78d31171b0dcb2d1bf0351b52bf065e7047a438 Mon Sep 17 00:00:00 2001 From: David Cavazos Date: Tue, 29 Sep 2020 08:32:48 -0700 Subject: [PATCH 2/3] Fix Colab link --- examples/pybullet/notebooks/HelloPyBullet.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/pybullet/notebooks/HelloPyBullet.ipynb b/examples/pybullet/notebooks/HelloPyBullet.ipynb index a9c424329..68118536b 100644 --- a/examples/pybullet/notebooks/HelloPyBullet.ipynb +++ b/examples/pybullet/notebooks/HelloPyBullet.ipynb @@ -20,7 +20,7 @@ "id": "view-in-github" }, "source": [ - "\"Open" + "\"Open" ] }, { From 656a1e74725933e947e5f64d465b62d6f9af683b Mon Sep 17 00:00:00 2001 From: David Cavazos Date: Tue, 13 Oct 2020 15:34:33 -0700 Subject: [PATCH 3/3] Removed notice on slow installation --- examples/pybullet/notebooks/HelloPyBullet.ipynb | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/examples/pybullet/notebooks/HelloPyBullet.ipynb b/examples/pybullet/notebooks/HelloPyBullet.ipynb index 68118536b..70c676541 100644 --- a/examples/pybullet/notebooks/HelloPyBullet.ipynb +++ b/examples/pybullet/notebooks/HelloPyBullet.ipynb @@ -42,10 +42,7 @@ "source": [ "## Setup\n", "\n", - "First, let's install the [PyBullet](https://pybullet.org/wordpress/) module.\n", - "\n", - "> ℹ️ The installer has to build the library so please be patient.\n", - "> It takes around 5 minutes for the installation to complete." + "First, let's install the [PyBullet](https://pybullet.org/wordpress/) module.\n" ] }, {