From 46519720eb75a1d914fbe20443305d8c4da8aa3c Mon Sep 17 00:00:00 2001 From: Nan Jiang Date: Tue, 15 Sep 2020 12:39:31 -0400 Subject: [PATCH 01/36] Update README.md --- README.md | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index e0fb2af97..90f13cffa 100644 --- a/README.md +++ b/README.md @@ -63,7 +63,7 @@ You can download and install Bullet using the [vcpkg](https://github.com/Microso cd vcpkg ./bootstrap-vcpkg.sh ./vcpkg integrate install - vcpkg install bullet3 + ./vcpkg install bullet3 The Bullet port in vcpkg is kept up to date by Microsoft team members and community contributors. If the version is out of date, please [create an issue or pull request](https://github.com/Microsoft/vcpkg) on the vcpkg repository. @@ -91,9 +91,9 @@ p.connect(p.SHARED_MEMORY) #or (p.TCP, "localhost", 6667) or (p.UDP, "192.168.86 Make sure cmake is installed (sudo apt-get install cmake, brew install cmake, or https://cmake.org) In a terminal type: - - ./build_cmake_pybullet_double.sh - +``` +./build_cmake_pybullet_double.sh +``` This script will invoke cmake and build in the build_cmake directory. You can find pybullet in Bullet/examples/pybullet. The BulletExampleBrowser binary will be in Bullet/examples/ExampleBrowser. @@ -101,15 +101,15 @@ You can also build Bullet using premake. There are premake executables in the bu Depending on your system (Linux 32bit, 64bit or Mac OSX) use one of the following lines Using premake: ``` - cd build3 - ./premake4_linux --double gmake - ./premake4_linux64 --double gmake - ./premake4_osx --double --enable_pybullet gmake +cd build3 +./premake4_linux --double gmake +./premake4_linux64 --double gmake +./premake4_osx --double --enable_pybullet gmake ``` Then ``` - cd gmake - make +cd gmake +make ``` Note that on Linux, you need to use cmake to build pybullet, since the compiler has issues of mixing shared and static libraries. @@ -117,9 +117,9 @@ Note that on Linux, you need to use cmake to build pybullet, since the compiler **Mac OSX Xcode** Click on build3/xcode4.command or in a terminal window execute - - ./premake_osx xcode4 - +``` +./premake_osx xcode4 +``` ## Usage The App_ExampleBrowser executables will be located in the bin folder. From c0d9553d6521d1528ac44fb2a0eb5edbacbb5895 Mon Sep 17 00:00:00 2001 From: yycho0108 Date: Wed, 20 Jan 2021 14:58:44 +0900 Subject: [PATCH 02/36] add link names args to CreateMultibody --- examples/SharedMemory/PhysicsClientC_API.cpp | 4 ++- examples/SharedMemory/PhysicsClientC_API.h | 3 +- .../PhysicsServerCommandProcessor.cpp | 10 ++++++ examples/SharedMemory/SharedMemoryCommands.h | 1 + .../b3RobotSimulatorClientAPI_NoDirect.cpp | 3 +- examples/pybullet/pybullet.c | 31 ++++++++++++++++--- 6 files changed, 45 insertions(+), 7 deletions(-) diff --git a/examples/SharedMemory/PhysicsClientC_API.cpp b/examples/SharedMemory/PhysicsClientC_API.cpp index 829eeca56..466eeb293 100644 --- a/examples/SharedMemory/PhysicsClientC_API.cpp +++ b/examples/SharedMemory/PhysicsClientC_API.cpp @@ -2052,7 +2052,8 @@ B3_SHARED_API int b3CreateMultiBodyLink(b3SharedMemoryCommandHandle commandHandl const double linkInertialFrameOrientation[4], int linkParentIndex, int linkJointType, - const double linkJointAxis[3]) + const double linkJointAxis[3], + const char* const linkName) { struct SharedMemoryCommand* command = (struct SharedMemoryCommand*)commandHandle; b3Assert(command); @@ -2097,6 +2098,7 @@ B3_SHARED_API int b3CreateMultiBodyLink(b3SharedMemoryCommandHandle commandHandl command->m_createMultiBodyArgs.m_linkJointAxis[3 * linkIndex + 2] = linkJointAxis[2]; command->m_createMultiBodyArgs.m_linkMasses[linkIndex] = linkMass; + command->m_createMultiBodyArgs.m_linkNames[linkIndex] = linkName; command->m_createMultiBodyArgs.m_numLinks++; return numLinks; } diff --git a/examples/SharedMemory/PhysicsClientC_API.h b/examples/SharedMemory/PhysicsClientC_API.h index 318263b2d..7c7ac1442 100644 --- a/examples/SharedMemory/PhysicsClientC_API.h +++ b/examples/SharedMemory/PhysicsClientC_API.h @@ -552,7 +552,8 @@ extern "C" const double linkInertialFrameOrientation[/*4*/], int linkParentIndex, int linkJointType, - const double linkJointAxis[/*3*/]); + const double linkJointAxis[/*3*/], + const char* const linkName); //batch creation is an performance feature to create a large number of multi bodies in one command B3_SHARED_API int b3CreateMultiBodySetBatchPositions(b3PhysicsClientHandle physClient, b3SharedMemoryCommandHandle commandHandle, double* batchPositions, int numBatchObjects); diff --git a/examples/SharedMemory/PhysicsServerCommandProcessor.cpp b/examples/SharedMemory/PhysicsServerCommandProcessor.cpp index 295e202c5..f358b5d23 100644 --- a/examples/SharedMemory/PhysicsServerCommandProcessor.cpp +++ b/examples/SharedMemory/PhysicsServerCommandProcessor.cpp @@ -2232,6 +2232,11 @@ struct ProgrammaticUrdfInterface : public URDFImporterInterface ///pure virtual interfaces, precondition is a valid linkIndex (you can assert/terminate if the linkIndex is out of range) virtual std::string getLinkName(int linkIndex) const { + // Allow user overrides on default-created link names. + if(m_createBodyArgs.m_linkNames[linkIndex] != nullptr + && strlen(m_createBodyArgs.m_linkNames[linkIndex]) > 0){ + return std::string(m_createBodyArgs.m_linkNames[linkIndex]); + } std::string linkName = "link"; char numstr[21]; // enough to hold all numbers up to 64-bits sprintf(numstr, "%d", linkIndex); @@ -2309,6 +2314,11 @@ struct ProgrammaticUrdfInterface : public URDFImporterInterface virtual std::string getJointName(int linkIndex) const { + // Allow user overrides on default-created joint names. + if(m_createBodyArgs.m_linkNames[linkIndex] != nullptr + && strlen(m_createBodyArgs.m_linkNames[linkIndex]) > 0){ + return std::string(m_createBodyArgs.m_linkNames[linkIndex]); + } std::string jointName = "joint"; char numstr[21]; // enough to hold all numbers up to 64-bits sprintf(numstr, "%d", linkIndex); diff --git a/examples/SharedMemory/SharedMemoryCommands.h b/examples/SharedMemory/SharedMemoryCommands.h index a019a58ca..311379d79 100644 --- a/examples/SharedMemory/SharedMemoryCommands.h +++ b/examples/SharedMemory/SharedMemoryCommands.h @@ -1057,6 +1057,7 @@ struct b3CreateMultiBodyArgs int m_flags; int m_numBatchObjects; + const char* m_linkNames[MAX_CREATE_MULTI_BODY_LINKS]; }; struct b3CreateMultiBodyResultArgs diff --git a/examples/SharedMemory/b3RobotSimulatorClientAPI_NoDirect.cpp b/examples/SharedMemory/b3RobotSimulatorClientAPI_NoDirect.cpp index f2777e129..4eb95c4b3 100644 --- a/examples/SharedMemory/b3RobotSimulatorClientAPI_NoDirect.cpp +++ b/examples/SharedMemory/b3RobotSimulatorClientAPI_NoDirect.cpp @@ -2431,7 +2431,8 @@ int b3RobotSimulatorClientAPI_NoDirect::createMultiBody(struct b3RobotSimulatorC doubleLinkInertialFrameOrientation, linkParentIndex, linkJointType, - doubleLinkJointAxis); + doubleLinkJointAxis, + 0); } statusHandle = b3SubmitClientCommandAndWaitStatus(sm, command); diff --git a/examples/pybullet/pybullet.c b/examples/pybullet/pybullet.c index 56b5f7511..b6387f3c6 100644 --- a/examples/pybullet/pybullet.c +++ b/examples/pybullet/pybullet.c @@ -128,6 +128,24 @@ static int pybullet_internalGetIntFromSequence(PyObject* seq, int index) return v; } +static const char* pybullet_internalGetCStringFromSequence(PyObject* seq, int index) +{ + const char* v = 0; + PyObject* item; + + if (PyList_Check(seq)) + { + item = PyList_GET_ITEM(seq, index); + v = PyUnicode_AsUTF8(item); + } + else + { + item = PyTuple_GET_ITEM(seq, index); + v = PyUnicode_AsUTF8(item); + } + return v; +} + // internal function to set a float matrix[16] // used to initialize camera position with // a view and projection matrix in renderImage() @@ -9350,18 +9368,19 @@ static PyObject* pybullet_createMultiBody(PyObject* self, PyObject* args, PyObje PyObject* linkInertialFramePositionObj = 0; PyObject* linkInertialFrameOrientationObj = 0; PyObject* objBatchPositions = 0; + PyObject* linkNamesObj = 0; static char* kwlist[] = { "baseMass", "baseCollisionShapeIndex", "baseVisualShapeIndex", "basePosition", "baseOrientation", "baseInertialFramePosition", "baseInertialFrameOrientation", "linkMasses", "linkCollisionShapeIndices", "linkVisualShapeIndices", "linkPositions", "linkOrientations", "linkInertialFramePositions", "linkInertialFrameOrientations", "linkParentIndices", - "linkJointTypes", "linkJointAxis", "useMaximalCoordinates", "flags", "batchPositions", "physicsClientId", NULL}; + "linkJointTypes", "linkJointAxis", "useMaximalCoordinates", "flags", "batchPositions", "linkNames", "physicsClientId", NULL}; - if (!PyArg_ParseTupleAndKeywords(args, keywds, "|diiOOOOOOOOOOOOOOiiOi", kwlist, + if (!PyArg_ParseTupleAndKeywords(args, keywds, "|diiOOOOOOOOOOOOOOiiOOi", kwlist, &baseMass, &baseCollisionShapeIndex, &baseVisualShapeIndex, &basePosObj, &baseOrnObj, &baseInertialFramePositionObj, &baseInertialFrameOrientationObj, &linkMassesObj, &linkCollisionShapeIndicesObj, &linkVisualShapeIndicesObj, &linkPositionsObj, &linkOrientationsObj, &linkInertialFramePositionObj, &linkInertialFrameOrientationObj, &linkParentIndicesObj, - &linkJointTypesObj, &linkJointAxisObj, &useMaximalCoordinates, &flags, &objBatchPositions, &physicsClientId)) + &linkJointTypesObj, &linkJointAxisObj, &useMaximalCoordinates, &flags, &objBatchPositions, &linkNamesObj, &physicsClientId)) { return NULL; } @@ -9398,6 +9417,7 @@ static PyObject* pybullet_createMultiBody(PyObject* self, PyObject* args, PyObje PyObject* seqLinkInertialFrameOrientations = linkInertialFrameOrientationObj ? PySequence_Fast(linkInertialFrameOrientationObj, "expected a sequence") : 0; PyObject* seqBatchPositions = objBatchPositions ? PySequence_Fast(objBatchPositions, "expected a sequence") : 0; + PyObject* seqLinkNames = linkNamesObj ? PySequence_Fast(linkNamesObj, "expected a sequence") : 0; if ((numLinkMasses == numLinkCollisionShapes) && (numLinkMasses == numLinkVisualShapes) && @@ -9448,6 +9468,7 @@ static PyObject* pybullet_createMultiBody(PyObject* self, PyObject* args, PyObje double linkInertialFrameOrientation[4]; int linkParentIndex; int linkJointType; + const char* linkName; pybullet_internalGetVector3FromSequence(seqLinkInertialFramePositions, i, linkInertialFramePosition); pybullet_internalGetVector4FromSequence(seqLinkInertialFrameOrientations, i, linkInertialFrameOrientation); @@ -9456,6 +9477,7 @@ static PyObject* pybullet_createMultiBody(PyObject* self, PyObject* args, PyObje pybullet_internalGetVector3FromSequence(seqLinkJoinAxis, i, linkJointAxis); linkParentIndex = pybullet_internalGetIntFromSequence(seqLinkParentIndices, i); linkJointType = pybullet_internalGetIntFromSequence(seqLinkJointTypes, i); + linkName = seqLinkNames? pybullet_internalGetCStringFromSequence(seqLinkNames, i) : 0; b3CreateMultiBodyLink(commandHandle, linkMass, @@ -9467,7 +9489,8 @@ static PyObject* pybullet_createMultiBody(PyObject* self, PyObject* args, PyObje linkInertialFrameOrientation, linkParentIndex, linkJointType, - linkJointAxis); + linkJointAxis, + linkName); } if (seqLinkMasses) From 6f65a12b3aa4a811010007ceba203e71b5a7f824 Mon Sep 17 00:00:00 2001 From: yycho0108 Date: Wed, 20 Jan 2021 16:45:23 +0900 Subject: [PATCH 03/36] no nullptr --- examples/SharedMemory/PhysicsServerCommandProcessor.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/SharedMemory/PhysicsServerCommandProcessor.cpp b/examples/SharedMemory/PhysicsServerCommandProcessor.cpp index f358b5d23..8eae3eaa2 100644 --- a/examples/SharedMemory/PhysicsServerCommandProcessor.cpp +++ b/examples/SharedMemory/PhysicsServerCommandProcessor.cpp @@ -2233,7 +2233,7 @@ struct ProgrammaticUrdfInterface : public URDFImporterInterface virtual std::string getLinkName(int linkIndex) const { // Allow user overrides on default-created link names. - if(m_createBodyArgs.m_linkNames[linkIndex] != nullptr + if(m_createBodyArgs.m_linkNames[linkIndex] != 0 && strlen(m_createBodyArgs.m_linkNames[linkIndex]) > 0){ return std::string(m_createBodyArgs.m_linkNames[linkIndex]); } @@ -2315,7 +2315,7 @@ struct ProgrammaticUrdfInterface : public URDFImporterInterface virtual std::string getJointName(int linkIndex) const { // Allow user overrides on default-created joint names. - if(m_createBodyArgs.m_linkNames[linkIndex] != nullptr + if(m_createBodyArgs.m_linkNames[linkIndex] != 0 && strlen(m_createBodyArgs.m_linkNames[linkIndex]) > 0){ return std::string(m_createBodyArgs.m_linkNames[linkIndex]); } From f719c27b04ed754f61e3a356eaf18bb11fb9abbc Mon Sep 17 00:00:00 2001 From: "daniel.ordonez" Date: Wed, 27 Jan 2021 21:59:49 -0500 Subject: [PATCH 04/36] Fix Stable PD bug on First Order Taylor approximation of next q state --- .../pybullet/examples/pdControllerStable.py | 93 +++++++++---------- 1 file changed, 46 insertions(+), 47 deletions(-) diff --git a/examples/pybullet/examples/pdControllerStable.py b/examples/pybullet/examples/pdControllerStable.py index 250a4f56b..bec3356c4 100644 --- a/examples/pybullet/examples/pdControllerStable.py +++ b/examples/pybullet/examples/pdControllerStable.py @@ -70,43 +70,34 @@ class PDControllerStableMultiDof(object): Kp = np.diagflat(kps) Kd = np.diagflat(kds) - p = Kp.dot(qError) + # Compute -Kp(q + qdot - qdes) + p_term = Kp.dot(qError - qdot*timeStep) + # Compute -Kd(qdot - qdotdes) + d_term = Kd.dot(qdoterr) - #np.savetxt("pb_qError.csv", qError, delimiter=",") - #np.savetxt("pb_p.csv", p, delimiter=",") - - d = Kd.dot(qdoterr) - - #np.savetxt("pb_d.csv", d, delimiter=",") - #np.savetxt("pbqdoterr.csv", qdoterr, delimiter=",") - - M1 = self._pb.calculateMassMatrix(bodyUniqueId, q1, flags=1) - - M2 = np.array(M1) - #np.savetxt("M2.csv", M2, delimiter=",") - - M = (M2 + Kd * timeStep) - - #np.savetxt("pbM_tKd.csv",M, delimiter=",") - - c1 = self._pb.calculateInverseDynamics(bodyUniqueId, q1, qdot1, zeroAccelerations, flags=1) - - c = np.array(c1) - #np.savetxt("pbC.csv",c, delimiter=",") - A = M - #p = [0]*43 - b = p + d - c - #np.savetxt("pb_acc.csv",b, delimiter=",") - qddot = np.linalg.solve(A, b) - tau = p + d - Kd.dot(qddot) * timeStep - #print("len(tau)=",len(tau)) + # Compute Inertia matrix M(q) + M = self._pb.calculateMassMatrix(bodyUniqueId, q1, flags=1) + M = np.array(M) + # Given: M(q) * qddot + C(q, qdot) = T_ext + T_int + # Compute Coriolis and External (Gravitational) terms G = C - T_ext + G = self._pb.calculateInverseDynamics(bodyUniqueId, q1, qdot1, zeroAccelerations, flags=1) + G = np.array(G) + # Obtain estimated generalized accelerations, considering Coriolis and Gravitational forces, and stable PD actions + qddot = np.linalg.solve(a=(M + Kd * timeStep), + b=p_term + d_term - G) + # Compute control generalized forces (T_int) + tau = p_term + d_term - Kd.dot(qddot) * timeStep + # Clip generalized forces to actuator limits maxF = np.array(maxForces) - forces = np.clip(tau, -maxF, maxF) - return forces + generalized_forces = np.clip(tau, -maxF, maxF) + return generalized_forces class PDControllerStable(object): - + """ + Implementation based on: Tan, J., Liu, K., & Turk, G. (2011). "Stable proportional-derivative controllers" + DOI: 10.1109/MCG.2011.30 + """ def __init__(self, pb): self._pb = pb @@ -121,28 +112,36 @@ class PDControllerStable(object): q1.append(jointStates[i][0]) qdot1.append(jointStates[i][1]) zeroAccelerations.append(0) + q = np.array(q1) qdot = np.array(qdot1) qdes = np.array(desiredPositions) qdotdes = np.array(desiredVelocities) + qError = qdes - q qdotError = qdotdes - qdot + Kp = np.diagflat(kps) Kd = np.diagflat(kds) - p = Kp.dot(qError) - d = Kd.dot(qdotError) - forces = p + d - M1 = self._pb.calculateMassMatrix(bodyUniqueId, q1) - M2 = np.array(M1) - M = (M2 + Kd * timeStep) - c1 = self._pb.calculateInverseDynamics(bodyUniqueId, q1, qdot1, zeroAccelerations) - c = np.array(c1) - A = M - b = -c + p + d - qddot = np.linalg.solve(A, b) - tau = p + d - Kd.dot(qddot) * timeStep + # Compute -Kp(q + qdot - qdes) + p_term = Kp.dot(qError - qdot*timeStep) + # Compute -Kd(qdot - qdotdes) + d_term = Kd.dot(qdotError) + + # Compute Inertia matrix M(q) + M = self._pb.calculateMassMatrix(bodyUniqueId, q1) + M = np.array(M) + # Given: M(q) * qddot + C(q, qdot) = T_ext + T_int + # Compute Coriolis and External (Gravitational) terms G = C - T_ext + G = self._pb.calculateInverseDynamics(bodyUniqueId, q1, qdot1, zeroAccelerations) + G = np.array(G) + # Obtain estimated generalized accelerations, considering Coriolis and Gravitational forces, and stable PD actions + qddot = np.linalg.solve(a=(M + Kd * timeStep), + b=(-G + p_term + d_term)) + # Compute control generalized forces (T_int) + tau = p_term + d_term - (Kd.dot(qddot) * timeStep) + # Clip generalized forces to actuator limits maxF = np.array(maxForces) - forces = np.clip(tau, -maxF, maxF) - #print("c=",c) - return tau + generalized_forces = np.clip(tau, -maxF, maxF) + return generalized_forces From 97add36b9fda8d76396ff84a9cf1567cfb508b30 Mon Sep 17 00:00:00 2001 From: Erwin Coumans Date: Thu, 25 Feb 2021 16:32:39 -0800 Subject: [PATCH 05/36] update bullet_client.py to accept options p.connect(p.GUI, options="--background_color_red=1 --background_color_blue=1 --background_color_green=1") If you use bullet_client.py, you can use: p = bc.BulletClient(connection_mode=pybullet.GUI,options="--background_color_red=1 --background_color_blue=1 --background_color_green=1") --mouse_move_multiplier=0.4 --mouse_wheel_multiplier=0.01 --mp4=moviename.mp4 --- examples/pybullet/gym/pybullet_utils/bullet_client.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/pybullet/gym/pybullet_utils/bullet_client.py b/examples/pybullet/gym/pybullet_utils/bullet_client.py index f4995d3b5..6543313d0 100644 --- a/examples/pybullet/gym/pybullet_utils/bullet_client.py +++ b/examples/pybullet/gym/pybullet_utils/bullet_client.py @@ -9,7 +9,7 @@ import pybullet class BulletClient(object): """A wrapper for pybullet to manage different clients.""" - def __init__(self, connection_mode=None, hostName=None): + def __init__(self, connection_mode=None, hostName=None, options=''): """Creates a Bullet client and connects to a simulation. Args: @@ -22,15 +22,15 @@ class BulletClient(object): """ self._shapes = {} if connection_mode is None: - self._client = pybullet.connect(pybullet.SHARED_MEMORY) + self._client = pybullet.connect(pybullet.SHARED_MEMORY, options=options) if self._client >= 0: return else: connection_mode = pybullet.DIRECT if hostName is None: - self._client = pybullet.connect(connection_mode) + self._client = pybullet.connect(connection_mode, options=options) else: - self._client = pybullet.connect(connection_mode, hostName=hostName) + self._client = pybullet.connect(connection_mode, hostName=hostName, options=options) def __del__(self): """Clean up connection if not already done.""" From 782f14caa15bcdd803655ff743647075ff7ef231 Mon Sep 17 00:00:00 2001 From: Gleb Mazovetskiy Date: Sun, 28 Feb 2021 15:15:07 +0000 Subject: [PATCH 06/36] heightfield processAllTriangles: Copy 1 less vertex The 2 triangles of a heightfield quad share 2 vertices. Co-authored-by: Andrew Shulaev --- .../btHeightfieldTerrainShape.cpp | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/src/BulletCollision/CollisionShapes/btHeightfieldTerrainShape.cpp b/src/BulletCollision/CollisionShapes/btHeightfieldTerrainShape.cpp index cab6980b6..8aafc0505 100644 --- a/src/BulletCollision/CollisionShapes/btHeightfieldTerrainShape.cpp +++ b/src/BulletCollision/CollisionShapes/btHeightfieldTerrainShape.cpp @@ -349,27 +349,32 @@ void btHeightfieldTerrainShape::processAllTriangles(btTriangleCallback* callback if (m_flipQuadEdges || (m_useDiamondSubdivision && !((j + x) & 1)) || (m_useZigzagSubdivision && !(j & 1))) { - //first triangle getVertex(x, j, vertices[indices[0]]); getVertex(x, j + 1, vertices[indices[1]]); getVertex(x + 1, j + 1, vertices[indices[2]]); callback->processTriangle(vertices, 2 * x, j); - //second triangle - // getVertex(x,j,vertices[0]);//already got this vertex before, thanks to Danny Chapman - getVertex(x + 1, j + 1, vertices[indices[1]]); + + // already set: getVertex(x, j, vertices[indices[0]]) + + // equivalent to: getVertex(x + 1, j + 1, vertices[indices[1]]); + vertices[indices[1]] = vertices[indices[2]]; + getVertex(x + 1, j, vertices[indices[2]]); + callback->processTriangle(vertices, 2 * x+1, j); } else { - //first triangle getVertex(x, j, vertices[indices[0]]); getVertex(x, j + 1, vertices[indices[1]]); getVertex(x + 1, j, vertices[indices[2]]); callback->processTriangle(vertices, 2 * x, j); - //second triangle - getVertex(x + 1, j, vertices[indices[0]]); - //getVertex(x,j+1,vertices[1]); + + // already set: getVertex(x, j + 1, vertices[indices[1]]); + + // equivalent to: getVertex(x + 1, j, vertices[indices[0]]); + vertices[indices[0]] = vertices[indices[2]]; + getVertex(x + 1, j + 1, vertices[indices[2]]); callback->processTriangle(vertices, 2 * x+1, j); } @@ -846,4 +851,4 @@ void btHeightfieldTerrainShape::buildAccelerator(int chunkSize) void btHeightfieldTerrainShape::clearAccelerator() { m_vboundsGrid.clear(); -} \ No newline at end of file +} From e7e28bebf8eb639702ea4315b3aeb730a7356e9f Mon Sep 17 00:00:00 2001 From: Gleb Mazovetskiy Date: Sun, 28 Feb 2021 15:39:36 +0000 Subject: [PATCH 07/36] heightfield processAllTriangles: Skip triangle processing if the triangle is out-of-AABB Skips triangle processing if the triangle is out-of-AABB on the up axis. This massively improves OpenMW performance on my test machine. Co-authored-by: Andrew Shulaev --- .../btHeightfieldTerrainShape.cpp | 29 +++++++++++++++---- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/src/BulletCollision/CollisionShapes/btHeightfieldTerrainShape.cpp b/src/BulletCollision/CollisionShapes/btHeightfieldTerrainShape.cpp index 8aafc0505..3acfa79b7 100644 --- a/src/BulletCollision/CollisionShapes/btHeightfieldTerrainShape.cpp +++ b/src/BulletCollision/CollisionShapes/btHeightfieldTerrainShape.cpp @@ -352,7 +352,13 @@ void btHeightfieldTerrainShape::processAllTriangles(btTriangleCallback* callback getVertex(x, j, vertices[indices[0]]); getVertex(x, j + 1, vertices[indices[1]]); getVertex(x + 1, j + 1, vertices[indices[2]]); - callback->processTriangle(vertices, 2 * x, j); + + // Skip triangle processing if the triangle is out-of-AABB. + btScalar minUp = btMin(vertices[0][m_upAxis], btMin(vertices[1][m_upAxis], vertices[2][m_upAxis])); + btScalar maxUp = btMax(vertices[0][m_upAxis], btMax(vertices[1][m_upAxis], vertices[2][m_upAxis])); + + if (!(minUp > aabbMax[m_upAxis] || maxUp < aabbMin[m_upAxis])) + callback->processTriangle(vertices, 2 * x, j); // already set: getVertex(x, j, vertices[indices[0]]) @@ -360,15 +366,24 @@ void btHeightfieldTerrainShape::processAllTriangles(btTriangleCallback* callback vertices[indices[1]] = vertices[indices[2]]; getVertex(x + 1, j, vertices[indices[2]]); - - callback->processTriangle(vertices, 2 * x+1, j); + minUp = btMin(minUp, vertices[indices[2]][m_upAxis]); + maxUp = btMax(maxUp, vertices[indices[2]][m_upAxis]); + + if (!(minUp > aabbMax[m_upAxis] || maxUp < aabbMin[m_upAxis])) + callback->processTriangle(vertices, 2 * x+1, j); } else { getVertex(x, j, vertices[indices[0]]); getVertex(x, j + 1, vertices[indices[1]]); getVertex(x + 1, j, vertices[indices[2]]); - callback->processTriangle(vertices, 2 * x, j); + + // Skip triangle processing if the triangle is out-of-AABB. + btScalar minUp = btMin(vertices[0][m_upAxis], btMin(vertices[1][m_upAxis], vertices[2][m_upAxis])); + btScalar maxUp = btMax(vertices[0][m_upAxis], btMax(vertices[1][m_upAxis], vertices[2][m_upAxis])); + + if (!(minUp > aabbMax[m_upAxis] || maxUp < aabbMin[m_upAxis])) + callback->processTriangle(vertices, 2 * x, j); // already set: getVertex(x, j + 1, vertices[indices[1]]); @@ -376,7 +391,11 @@ void btHeightfieldTerrainShape::processAllTriangles(btTriangleCallback* callback vertices[indices[0]] = vertices[indices[2]]; getVertex(x + 1, j + 1, vertices[indices[2]]); - callback->processTriangle(vertices, 2 * x+1, j); + minUp = btMin(minUp, vertices[indices[2]][m_upAxis]); + maxUp = btMax(maxUp, vertices[indices[2]][m_upAxis]); + + if (!(minUp > aabbMax[m_upAxis] || maxUp < aabbMin[m_upAxis])) + callback->processTriangle(vertices, 2 * x+1, j); } } } From bb838dbec08cbf1b7c1460899dd1f8d4af606ddc Mon Sep 17 00:00:00 2001 From: Gleb Mazovetskiy Date: Mon, 1 Mar 2021 09:57:08 +0000 Subject: [PATCH 08/36] heightfield up axis: Use Range Reads a bit better than using individual min/max scalars. --- .../btHeightfieldTerrainShape.cpp | 66 ++++++++++++++----- 1 file changed, 51 insertions(+), 15 deletions(-) diff --git a/src/BulletCollision/CollisionShapes/btHeightfieldTerrainShape.cpp b/src/BulletCollision/CollisionShapes/btHeightfieldTerrainShape.cpp index 3acfa79b7..74a2a327b 100644 --- a/src/BulletCollision/CollisionShapes/btHeightfieldTerrainShape.cpp +++ b/src/BulletCollision/CollisionShapes/btHeightfieldTerrainShape.cpp @@ -232,6 +232,43 @@ getQuantized( return (int)(x + 0.5); } +static btHeightfieldTerrainShape::Range makeRange(btScalar min, btScalar max) +{ + btHeightfieldTerrainShape::Range result; + result.min = min; + result.max = max; + return result; +} + +static bool rangesHaveOverlap(const btHeightfieldTerrainShape::Range& a, const btHeightfieldTerrainShape::Range& b) +{ + return !(a.min > b.max || a.max < b.min); +} + +// Equivalent to std::minmax({a, b, c}). +// Performs at most 3 comparisons. +static btHeightfieldTerrainShape::Range minmaxRange(btScalar a, btScalar b, btScalar c) +{ + if (a > b) + { + if (b > c) + return makeRange(c, a); + else if (a > c) + return makeRange(b, a); + else + return makeRange(b, c); + } + else + { + if (a > c) + return makeRange(c, b); + else if (b > c) + return makeRange(a, b); + else + return makeRange(a, c); + } +} + /// given input vector, return quantized version /** This routine is basically determining the gridpoint indices for a given @@ -334,7 +371,8 @@ void btHeightfieldTerrainShape::processAllTriangles(btTriangleCallback* callback } // TODO If m_vboundsGrid is available, use it to determine if we really need to process this area - + + const Range aabbUpRange = makeRange(aabbMin[m_upAxis], aabbMax[m_upAxis]); for (int j = startJ; j < endJ; j++) { for (int x = startX; x < endX; x++) @@ -354,10 +392,9 @@ void btHeightfieldTerrainShape::processAllTriangles(btTriangleCallback* callback getVertex(x + 1, j + 1, vertices[indices[2]]); // Skip triangle processing if the triangle is out-of-AABB. - btScalar minUp = btMin(vertices[0][m_upAxis], btMin(vertices[1][m_upAxis], vertices[2][m_upAxis])); - btScalar maxUp = btMax(vertices[0][m_upAxis], btMax(vertices[1][m_upAxis], vertices[2][m_upAxis])); + Range upRange = minmaxRange(vertices[0][m_upAxis], vertices[1][m_upAxis], vertices[2][m_upAxis]); - if (!(minUp > aabbMax[m_upAxis] || maxUp < aabbMin[m_upAxis])) + if (rangesHaveOverlap(upRange, aabbUpRange)) callback->processTriangle(vertices, 2 * x, j); // already set: getVertex(x, j, vertices[indices[0]]) @@ -366,11 +403,11 @@ void btHeightfieldTerrainShape::processAllTriangles(btTriangleCallback* callback vertices[indices[1]] = vertices[indices[2]]; getVertex(x + 1, j, vertices[indices[2]]); - minUp = btMin(minUp, vertices[indices[2]][m_upAxis]); - maxUp = btMax(maxUp, vertices[indices[2]][m_upAxis]); + upRange.min = btMin(upRange.min, vertices[indices[2]][m_upAxis]); + upRange.max = btMax(upRange.max, vertices[indices[2]][m_upAxis]); - if (!(minUp > aabbMax[m_upAxis] || maxUp < aabbMin[m_upAxis])) - callback->processTriangle(vertices, 2 * x+1, j); + if (rangesHaveOverlap(upRange, aabbUpRange)) + callback->processTriangle(vertices, 2 * x + 1, j); } else { @@ -379,10 +416,9 @@ void btHeightfieldTerrainShape::processAllTriangles(btTriangleCallback* callback getVertex(x + 1, j, vertices[indices[2]]); // Skip triangle processing if the triangle is out-of-AABB. - btScalar minUp = btMin(vertices[0][m_upAxis], btMin(vertices[1][m_upAxis], vertices[2][m_upAxis])); - btScalar maxUp = btMax(vertices[0][m_upAxis], btMax(vertices[1][m_upAxis], vertices[2][m_upAxis])); + Range upRange = minmaxRange(vertices[0][m_upAxis], vertices[1][m_upAxis], vertices[2][m_upAxis]); - if (!(minUp > aabbMax[m_upAxis] || maxUp < aabbMin[m_upAxis])) + if (rangesHaveOverlap(upRange, aabbUpRange)) callback->processTriangle(vertices, 2 * x, j); // already set: getVertex(x, j + 1, vertices[indices[1]]); @@ -391,11 +427,11 @@ void btHeightfieldTerrainShape::processAllTriangles(btTriangleCallback* callback vertices[indices[0]] = vertices[indices[2]]; getVertex(x + 1, j + 1, vertices[indices[2]]); - minUp = btMin(minUp, vertices[indices[2]][m_upAxis]); - maxUp = btMax(maxUp, vertices[indices[2]][m_upAxis]); + upRange.min = btMin(upRange.min, vertices[indices[2]][m_upAxis]); + upRange.max = btMax(upRange.max, vertices[indices[2]][m_upAxis]); - if (!(minUp > aabbMax[m_upAxis] || maxUp < aabbMin[m_upAxis])) - callback->processTriangle(vertices, 2 * x+1, j); + if (rangesHaveOverlap(upRange, aabbUpRange)) + callback->processTriangle(vertices, 2 * x + 1, j); } } } From e4963f73f230cbb594c553864b2d61f6e410c236 Mon Sep 17 00:00:00 2001 From: vabr-g Date: Mon, 1 Mar 2021 21:21:11 +0100 Subject: [PATCH 09/36] Fix a null dereference in UrdfParser When the parser sees no tag inside a , it logs an error but does not return false. So in the next step, a null pointer is dereferenced. This can be tested with loading the following URDF: ``` ``` --- examples/Importers/ImportURDFDemo/UrdfParser.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/Importers/ImportURDFDemo/UrdfParser.cpp b/examples/Importers/ImportURDFDemo/UrdfParser.cpp index 3348665d5..235e6ee8c 100644 --- a/examples/Importers/ImportURDFDemo/UrdfParser.cpp +++ b/examples/Importers/ImportURDFDemo/UrdfParser.cpp @@ -1132,6 +1132,7 @@ bool UrdfParser::parseDeformable(UrdfModel& model, tinyxml2::XMLElement* config, if (!i) { logger->reportError("expected an inertial element"); + return false; } UrdfInertia inertia; if (!parseInertia(inertia, i, logger)) From adcaa75777f09ddc018a168416a0b391a2e2cf52 Mon Sep 17 00:00:00 2001 From: Erwin Coumans Date: Mon, 1 Mar 2021 14:03:48 -0800 Subject: [PATCH 10/36] enable v-hacd in cmake for BulletRobotics and pybullet build (use cmake -DENABLE_VHACD=OFF .. to disable) cmake: enable stable PD plugin (-DDSTATIC_LINK_SPD_PLUGIN) btMultibody, make some args const in mulMatrix --- CMakeLists.txt | 2 ++ Extras/BulletRobotics/CMakeLists.txt | 21 +++++++++++++++++++ examples/pybullet/CMakeLists.txt | 14 ++++++++----- .../Featherstone/btMultiBody.cpp | 2 +- src/BulletDynamics/Featherstone/btMultiBody.h | 2 +- 5 files changed, 34 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7860f1552..d2a0c2556 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -30,6 +30,8 @@ OPTION(BUILD_SHARED_LIBS "Use shared libraries" OFF) OPTION(USE_SOFT_BODY_MULTI_BODY_DYNAMICS_WORLD "Use btSoftMultiBodyDynamicsWorld" ON) OPTION(USE_OPENVR "Use OpenVR for virtual reality" OFF) +OPTION(ENABLE_VHACD "Use VHACD in BulletRobotics and pybullet" ON) + OPTION(BULLET2_MULTITHREADING "Build Bullet 2 libraries with mutex locking around certain operations (required for multi-threading)" OFF) IF (BULLET2_MULTITHREADING) OPTION(BULLET2_USE_OPEN_MP_MULTITHREADING "Build Bullet 2 with support for multi-threading with OpenMP (requires a compiler with OpenMP support)" OFF) diff --git a/Extras/BulletRobotics/CMakeLists.txt b/Extras/BulletRobotics/CMakeLists.txt index 2442f6efc..641300fb1 100644 --- a/Extras/BulletRobotics/CMakeLists.txt +++ b/Extras/BulletRobotics/CMakeLists.txt @@ -7,6 +7,9 @@ INCLUDE_DIRECTORIES( ${BULLET_PHYSICS_SOURCE_DIR}/examples/ThirdPartyLibs/enet/include ${BULLET_PHYSICS_SOURCE_DIR}/examples/ThirdPartyLibs/clsocket/src ) +ADD_DEFINITIONS(-DSTATIC_LINK_SPD_PLUGIN) + + SET(BulletRobotics_INCLUDES ../../examples/CommonInterfaces/Common2dCanvasInterface.h @@ -156,8 +159,26 @@ SET(BulletRobotics_SRCS ${BulletRobotics_INCLUDES} ../../examples/MultiThreading/b3PosixThreadSupport.cpp ../../examples/MultiThreading/b3Win32ThreadSupport.cpp ../../examples/MultiThreading/b3ThreadSupportInterface.cpp + + ) +IF(ENABLE_VHACD) +ADD_DEFINITIONS(-DBT_ENABLE_VHACD) +SET(BulletRobotics_SRCS ${BulletRobotics_SRCS} + ../../Extras/VHACD/test/src/main_vhacd.cpp + ../../Extras/VHACD/src/VHACD.cpp + ../../Extras/VHACD/src/vhacdICHull.cpp + ../../Extras/VHACD/src/vhacdManifoldMesh.cpp + ../../Extras/VHACD/src/vhacdMesh.cpp + ../../Extras/VHACD/src/vhacdVolume.cpp +) +INCLUDE_DIRECTORIES( + ../../Extras/VHACD/inc + ../../Extras/VHACD/public +) +ENDIF(ENABLE_VHACD) + IF(BUILD_CLSOCKET) ADD_DEFINITIONS(-DBT_ENABLE_CLSOCKET) ENDIF(BUILD_CLSOCKET) diff --git a/examples/pybullet/CMakeLists.txt b/examples/pybullet/CMakeLists.txt index 1a7f0d5f2..5ee71645e 100644 --- a/examples/pybullet/CMakeLists.txt +++ b/examples/pybullet/CMakeLists.txt @@ -13,15 +13,19 @@ IF(BUILD_PYBULLET_NUMPY) ) ENDIF() -ADD_DEFINITIONS(-DSTATIC_LINK_SPD_PLUGIN) +ADD_DEFINITIONS(-DSTATIC_LINK_SPD_PLUGIN ) -SET(pybullet3_SRCS - pybullet.c - ) +IF(ENABLE_VHACD) +ADD_DEFINITIONS(-DBT_ENABLE_VHACD) + +INCLUDE_DIRECTORIES( + ../../Extras/VHACD/inc + ../../Extras/VHACD/public +) +ENDIF(ENABLE_VHACD) SET(pybullet_SRCS pybullet.c - ) IF(BUILD_CLSOCKET) diff --git a/src/BulletDynamics/Featherstone/btMultiBody.cpp b/src/BulletDynamics/Featherstone/btMultiBody.cpp index 7cb92fa3b..dfc4f92a3 100644 --- a/src/BulletDynamics/Featherstone/btMultiBody.cpp +++ b/src/BulletDynamics/Featherstone/btMultiBody.cpp @@ -1411,7 +1411,7 @@ void btMultiBody::solveImatrix(const btSpatialForceVector &rhs, btSpatialMotionV } } -void btMultiBody::mulMatrix(btScalar *pA, btScalar *pB, int rowsA, int colsA, int rowsB, int colsB, btScalar *pC) const +void btMultiBody::mulMatrix(const btScalar *pA, const btScalar *pB, int rowsA, int colsA, int rowsB, int colsB, btScalar *pC) const { for (int row = 0; row < rowsA; row++) { diff --git a/src/BulletDynamics/Featherstone/btMultiBody.h b/src/BulletDynamics/Featherstone/btMultiBody.h index 5a3efc941..9cf1ceb5a 100644 --- a/src/BulletDynamics/Featherstone/btMultiBody.h +++ b/src/BulletDynamics/Featherstone/btMultiBody.h @@ -745,7 +745,7 @@ private: } } - void mulMatrix(btScalar * pA, btScalar * pB, int rowsA, int colsA, int rowsB, int colsB, btScalar *pC) const; + void mulMatrix(const btScalar *pA, const btScalar *pB, int rowsA, int colsA, int rowsB, int colsB, btScalar *pC) const; private: btMultiBodyLinkCollider *m_baseCollider; //can be NULL From 390eeb111b9404f1cba5dd4eabc77592bdb78763 Mon Sep 17 00:00:00 2001 From: vabr-g Date: Tue, 2 Mar 2021 11:55:19 +0100 Subject: [PATCH 11/36] Fix stack overflow in parsing URDF files in Bullet When reading response from the Bullet server after a "load URDF" command, the client code allocated and zeroed buffers for the data chunks with a "+1" to account for the terminating zero. This was when the buffer pointer was interpreted as a `char *`, so it meant "+ 1 byte". When reading those buffers, however, the associated pointer was a `void *`, so reading `sizeof(void*)` (8 on my machine) bytes at a time. Therefore it was reading up to 7 bytes past the allocated (and zeroed) memory. The change fixes that by changing the "+ 1" to "+ sizeof(void*)". At one place it also extends the zeroing to the final buffer position (missing "+ 1" in the original). --- Extras/Serialize/BulletFileLoader/bFile.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Extras/Serialize/BulletFileLoader/bFile.cpp b/Extras/Serialize/BulletFileLoader/bFile.cpp index da9f65f20..5c8f54fe3 100644 --- a/Extras/Serialize/BulletFileLoader/bFile.cpp +++ b/Extras/Serialize/BulletFileLoader/bFile.cpp @@ -643,8 +643,8 @@ char *bFile::readStruct(char *head, bChunkInd &dataChunk) if ((strcmp(oldType, "btShortIntIndexData") == 0)) { int allocLen = 2; - char *dataAlloc = new char[(dataChunk.nr * allocLen) + 1]; - memset(dataAlloc, 0, (dataChunk.nr * allocLen) + 1); + char *dataAlloc = new char[(dataChunk.nr * allocLen) + sizeof(void*)]; + memset(dataAlloc, 0, (dataChunk.nr * allocLen) + sizeof(void*)); short *dest = (short *)dataAlloc; const short *src = (short *)head; for (int i = 0; i < dataChunk.nr; i++) @@ -682,8 +682,8 @@ char *bFile::readStruct(char *head, bChunkInd &dataChunk) // numBlocks * length int allocLen = (curLen); - char *dataAlloc = new char[(dataChunk.nr * allocLen) + 1]; - memset(dataAlloc, 0, (dataChunk.nr * allocLen)); + char *dataAlloc = new char[(dataChunk.nr * allocLen) + sizeof(void*)]; + memset(dataAlloc, 0, (dataChunk.nr * allocLen) + sizeof(void*)); // track allocated addDataBlock(dataAlloc); @@ -719,8 +719,8 @@ char *bFile::readStruct(char *head, bChunkInd &dataChunk) #endif // } - char *dataAlloc = new char[(dataChunk.len) + 1]; - memset(dataAlloc, 0, dataChunk.len + 1); + char *dataAlloc = new char[(dataChunk.len) + sizeof(void*)]; + memset(dataAlloc, 0, dataChunk.len + sizeof(void*)); // track allocated addDataBlock(dataAlloc); From 364e98c92d6e4c15b67b6c66256810f2f98b412a Mon Sep 17 00:00:00 2001 From: Vaclav Brozek Date: Tue, 2 Mar 2021 18:59:31 +0100 Subject: [PATCH 12/36] Optimize calls to find*() for a single char. The character literal overload is more efficient. --- examples/ThirdPartyLibs/cpp_base64/base64.cpp | 2 +- examples/TinyRenderer/model.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/ThirdPartyLibs/cpp_base64/base64.cpp b/examples/ThirdPartyLibs/cpp_base64/base64.cpp index 40b555c44..b0c002783 100644 --- a/examples/ThirdPartyLibs/cpp_base64/base64.cpp +++ b/examples/ThirdPartyLibs/cpp_base64/base64.cpp @@ -136,7 +136,7 @@ std::string base64_decode(std::string const& encoded_string, bool remove_linebre std::string copy(encoded_string); size_t pos=0; - while ((pos = copy.find("\n", pos)) != std::string::npos) { + while ((pos = copy.find('\n', pos)) != std::string::npos) { copy.erase(pos, 1); } diff --git a/examples/TinyRenderer/model.cpp b/examples/TinyRenderer/model.cpp index 1f5bebc1b..d0a009130 100644 --- a/examples/TinyRenderer/model.cpp +++ b/examples/TinyRenderer/model.cpp @@ -149,7 +149,7 @@ Vec3f Model::vert(int iface, int nthvert) void Model::load_texture(std::string filename, const char *suffix, TGAImage &img) { std::string texfile(filename); - size_t dot = texfile.find_last_of("."); + size_t dot = texfile.find_last_of('.'); if (dot != std::string::npos) { texfile = texfile.substr(0, dot) + std::string(suffix); From 8f5a00dd1e3b6ad4815eee2bf5c2987ce7a0b1d6 Mon Sep 17 00:00:00 2001 From: Gleb Mazovetskiy Date: Wed, 3 Mar 2021 00:07:51 +0000 Subject: [PATCH 13/36] heightfield: Add range constructor and `overlaps` --- .../btHeightfieldTerrainShape.cpp | 35 ++++++------------- .../btHeightfieldTerrainShape.h | 10 +++++- 2 files changed, 20 insertions(+), 25 deletions(-) diff --git a/src/BulletCollision/CollisionShapes/btHeightfieldTerrainShape.cpp b/src/BulletCollision/CollisionShapes/btHeightfieldTerrainShape.cpp index 74a2a327b..4ab9795d8 100644 --- a/src/BulletCollision/CollisionShapes/btHeightfieldTerrainShape.cpp +++ b/src/BulletCollision/CollisionShapes/btHeightfieldTerrainShape.cpp @@ -232,19 +232,6 @@ getQuantized( return (int)(x + 0.5); } -static btHeightfieldTerrainShape::Range makeRange(btScalar min, btScalar max) -{ - btHeightfieldTerrainShape::Range result; - result.min = min; - result.max = max; - return result; -} - -static bool rangesHaveOverlap(const btHeightfieldTerrainShape::Range& a, const btHeightfieldTerrainShape::Range& b) -{ - return !(a.min > b.max || a.max < b.min); -} - // Equivalent to std::minmax({a, b, c}). // Performs at most 3 comparisons. static btHeightfieldTerrainShape::Range minmaxRange(btScalar a, btScalar b, btScalar c) @@ -252,20 +239,20 @@ static btHeightfieldTerrainShape::Range minmaxRange(btScalar a, btScalar b, btSc if (a > b) { if (b > c) - return makeRange(c, a); + return btHeightfieldTerrainShape::Range(c, a); else if (a > c) - return makeRange(b, a); + return btHeightfieldTerrainShape::Range(b, a); else - return makeRange(b, c); + return btHeightfieldTerrainShape::Range(b, c); } else { if (a > c) - return makeRange(c, b); + return btHeightfieldTerrainShape::Range(c, b); else if (b > c) - return makeRange(a, b); + return btHeightfieldTerrainShape::Range(a, b); else - return makeRange(a, c); + return btHeightfieldTerrainShape::Range(a, c); } } @@ -372,7 +359,7 @@ void btHeightfieldTerrainShape::processAllTriangles(btTriangleCallback* callback // TODO If m_vboundsGrid is available, use it to determine if we really need to process this area - const Range aabbUpRange = makeRange(aabbMin[m_upAxis], aabbMax[m_upAxis]); + const Range aabbUpRange(aabbMin[m_upAxis], aabbMax[m_upAxis]); for (int j = startJ; j < endJ; j++) { for (int x = startX; x < endX; x++) @@ -394,7 +381,7 @@ void btHeightfieldTerrainShape::processAllTriangles(btTriangleCallback* callback // Skip triangle processing if the triangle is out-of-AABB. Range upRange = minmaxRange(vertices[0][m_upAxis], vertices[1][m_upAxis], vertices[2][m_upAxis]); - if (rangesHaveOverlap(upRange, aabbUpRange)) + if (upRange.overlaps(aabbUpRange)) callback->processTriangle(vertices, 2 * x, j); // already set: getVertex(x, j, vertices[indices[0]]) @@ -406,7 +393,7 @@ void btHeightfieldTerrainShape::processAllTriangles(btTriangleCallback* callback upRange.min = btMin(upRange.min, vertices[indices[2]][m_upAxis]); upRange.max = btMax(upRange.max, vertices[indices[2]][m_upAxis]); - if (rangesHaveOverlap(upRange, aabbUpRange)) + if (upRange.overlaps(aabbUpRange)) callback->processTriangle(vertices, 2 * x + 1, j); } else @@ -418,7 +405,7 @@ void btHeightfieldTerrainShape::processAllTriangles(btTriangleCallback* callback // Skip triangle processing if the triangle is out-of-AABB. Range upRange = minmaxRange(vertices[0][m_upAxis], vertices[1][m_upAxis], vertices[2][m_upAxis]); - if (rangesHaveOverlap(upRange, aabbUpRange)) + if (upRange.overlaps(aabbUpRange)) callback->processTriangle(vertices, 2 * x, j); // already set: getVertex(x, j + 1, vertices[indices[1]]); @@ -430,7 +417,7 @@ void btHeightfieldTerrainShape::processAllTriangles(btTriangleCallback* callback upRange.min = btMin(upRange.min, vertices[indices[2]][m_upAxis]); upRange.max = btMax(upRange.max, vertices[indices[2]][m_upAxis]); - if (rangesHaveOverlap(upRange, aabbUpRange)) + if (upRange.overlaps(aabbUpRange)) callback->processTriangle(vertices, 2 * x + 1, j); } } diff --git a/src/BulletCollision/CollisionShapes/btHeightfieldTerrainShape.h b/src/BulletCollision/CollisionShapes/btHeightfieldTerrainShape.h index 2cf3c0072..987ea324f 100644 --- a/src/BulletCollision/CollisionShapes/btHeightfieldTerrainShape.h +++ b/src/BulletCollision/CollisionShapes/btHeightfieldTerrainShape.h @@ -75,6 +75,14 @@ btHeightfieldTerrainShape : public btConcaveShape public: struct Range { + Range() {} + Range(btScalar min, btScalar max) : min(min), max(max) {} + + bool overlaps(const Range& other) const + { + return !(min > other.max || max < other.min); + } + btScalar min; btScalar max; }; @@ -218,4 +226,4 @@ public: } }; -#endif //BT_HEIGHTFIELD_TERRAIN_SHAPE_H \ No newline at end of file +#endif //BT_HEIGHTFIELD_TERRAIN_SHAPE_H From 40a9584ccbe36b61e7ec7a4809e6f9ef5707ce51 Mon Sep 17 00:00:00 2001 From: Gleb Mazovetskiy Date: Wed, 3 Mar 2021 00:38:21 +0000 Subject: [PATCH 14/36] heightfield: Add a test for processAllTriangles up-axis filtering --- test/collision/CMakeLists.txt | 3 +++ test/collision/main.cpp | 47 +++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/test/collision/CMakeLists.txt b/test/collision/CMakeLists.txt index b36c151be..ba6c783b4 100644 --- a/test/collision/CMakeLists.txt +++ b/test/collision/CMakeLists.txt @@ -24,10 +24,13 @@ ENDIF() ../../src/BulletCollision/CollisionShapes/btSphereShape.cpp ../../src/BulletCollision/CollisionShapes/btMultiSphereShape.cpp ../../src/BulletCollision/CollisionShapes/btPolyhedralConvexShape.cpp + ../../src/BulletCollision/CollisionShapes/btConcaveShape.cpp ../../src/BulletCollision/CollisionShapes/btConvexShape.cpp ../../src/BulletCollision/CollisionShapes/btConvexInternalShape.cpp ../../src/BulletCollision/CollisionShapes/btCollisionShape.cpp ../../src/BulletCollision/CollisionShapes/btConvexPolyhedron.cpp + ../../src/BulletCollision/CollisionShapes/btHeightfieldTerrainShape.cpp + ../../src/BulletCollision/CollisionShapes/btTriangleCallback.cpp ) ADD_TEST(Test_Collision_PASS Test_Collision) diff --git a/test/collision/main.cpp b/test/collision/main.cpp index 8f85873ff..5be7a91f7 100644 --- a/test/collision/main.cpp +++ b/test/collision/main.cpp @@ -20,9 +20,12 @@ subject to the following restrictions: ///Todo: the test needs proper coverage and using a convex hull point cloud ///Also the GJK, EPA and MPR should be improved, both quality and performance +#include + #include #include "SphereSphereCollision.h" +#include "BulletCollision/CollisionShapes/btHeightfieldTerrainShape.h" #include "BulletCollision/CollisionShapes/btSphereShape.h" #include "BulletCollision/CollisionShapes/btMultiSphereShape.h" @@ -30,6 +33,8 @@ subject to the following restrictions: #include "BulletCollision/NarrowPhaseCollision/btGjkEpa3.h" #include "BulletCollision/NarrowPhaseCollision/btMprPenetration.h" +namespace { + btVector3 MyBulletShapeSupportFunc(const void* shapeAptr, const btVector3& dir, bool includeMargin) { btConvexShape* shape = (btConvexShape*)shapeAptr; @@ -249,6 +254,48 @@ TEST(BulletCollisionTest, AnalyticSphereSphereDistance) testSphereSphereDistance(SSTM_ANALYTIC, 0.00001); } +class TriangleCollector : public btTriangleCallback +{ +public: + std::vector *triangles; + + explicit TriangleCollector(std::vector* triangles) : triangles(triangles) {} + virtual ~TriangleCollector() {} + + virtual void processTriangle(btVector3* triangle, int partId, int triangleIndex) + { + triangles->push_back(*triangle); + } +}; + +TEST(BulletCollisionTest, Heightfield_ProcessAllTriangles_FiltersByUpAxis) +{ + // A flat 2x2 heightfield. + const btScalar heightFieldData[] = { + 10.0, 10.0, + 10.0, 10.0, + }; + btHeightfieldTerrainShape shape( + /*heightStickWidth=*/2, /*heightStickLength=*/2, + &heightFieldData[0], /*heightScale=*/1, + /*minHeight=*/-10.0, /*maxHeight=*/10.0, + /*upAxis=*/2, PHY_FLOAT, /*flipQuadEdges=*/false); + + std::vector triangles; + TriangleCollector collector(&triangles); + + // AABB overlaps with the heightfield on upAxis. + shape.processAllTriangles(&collector, btVector3(0, 0, 0), btVector3(20, 20, 20)); + EXPECT_EQ(triangles.size(), 2); + + // AABB does not overlap with the heightfield on upAxis. + triangles.clear(); + shape.processAllTriangles(&collector, btVector3(0, 0, 0), btVector3(20, 20, 5)); + EXPECT_EQ(triangles.size(), 0); +} + +} // namespace + int main(int argc, char** argv) { #if _MSC_VER From 89c76981fcb70b3788f9c0742f2ad49d7e3046b0 Mon Sep 17 00:00:00 2001 From: Gleb Mazovetskiy Date: Wed, 3 Mar 2021 13:52:49 +0000 Subject: [PATCH 15/36] heightfield: Better support for float/double data Previously, the heightfield constructor always assumed `PHY_FLOAT` meant `btScalar`, contrary to documentation and other usages of `PHY_FLOAT`. Adds new constructors that distinguish between `float` and `double`. The legacy constructor is still there for backwards compatibility. This allows the client to use `float` or `double` regardless of `BT_USE_DOUBLE_PRECISION`. --- .../btHeightfieldTerrainShape.cpp | 62 +++++++++++++++++-- .../btHeightfieldTerrainShape.h | 39 +++++++++--- 2 files changed, 88 insertions(+), 13 deletions(-) diff --git a/src/BulletCollision/CollisionShapes/btHeightfieldTerrainShape.cpp b/src/BulletCollision/CollisionShapes/btHeightfieldTerrainShape.cpp index cab6980b6..44ad69f0a 100644 --- a/src/BulletCollision/CollisionShapes/btHeightfieldTerrainShape.cpp +++ b/src/BulletCollision/CollisionShapes/btHeightfieldTerrainShape.cpp @@ -17,6 +17,47 @@ subject to the following restrictions: #include "LinearMath/btTransformUtil.h" +btHeightfieldTerrainShape::btHeightfieldTerrainShape( + int heightStickWidth, int heightStickLength, + const float* heightfieldData, btScalar minHeight, btScalar maxHeight, + int upAxis, bool flipQuadEdges) + : m_userValue3(0), m_triangleInfoMap(0) +{ + initialize(heightStickWidth, heightStickLength, heightfieldData, + /*heightScale=*/1, minHeight, maxHeight, upAxis, PHY_FLOAT, + flipQuadEdges); +} + +btHeightfieldTerrainShape::btHeightfieldTerrainShape( + int heightStickWidth, int heightStickLength, const double* heightfieldData, + btScalar minHeight, btScalar maxHeight, int upAxis, bool flipQuadEdges) + : m_userValue3(0), m_triangleInfoMap(0) +{ + initialize(heightStickWidth, heightStickLength, heightfieldData, + /*heightScale=*/1, minHeight, maxHeight, upAxis, PHY_DOUBLE, + flipQuadEdges); +} + +btHeightfieldTerrainShape::btHeightfieldTerrainShape( + int heightStickWidth, int heightStickLength, const short* heightfieldData, btScalar heightScale, + btScalar minHeight, btScalar maxHeight, int upAxis, bool flipQuadEdges) + : m_userValue3(0), m_triangleInfoMap(0) +{ + initialize(heightStickWidth, heightStickLength, heightfieldData, + heightScale, minHeight, maxHeight, upAxis, PHY_SHORT, + flipQuadEdges); +} + +btHeightfieldTerrainShape::btHeightfieldTerrainShape( + int heightStickWidth, int heightStickLength, const unsigned char* heightfieldData, btScalar heightScale, + btScalar minHeight, btScalar maxHeight, int upAxis, bool flipQuadEdges) + : m_userValue3(0), m_triangleInfoMap(0) +{ + initialize(heightStickWidth, heightStickLength, heightfieldData, + heightScale, minHeight, maxHeight, upAxis, PHY_UCHAR, + flipQuadEdges); +} + btHeightfieldTerrainShape::btHeightfieldTerrainShape( int heightStickWidth, int heightStickLength, const void* heightfieldData, btScalar heightScale, btScalar minHeight, btScalar maxHeight, int upAxis, @@ -24,6 +65,10 @@ btHeightfieldTerrainShape::btHeightfieldTerrainShape( :m_userValue3(0), m_triangleInfoMap(0) { + // legacy constructor: Assumes PHY_FLOAT means btScalar. +#ifdef BT_USE_DOUBLE_PRECISION + if (hdt == PHY_FLOAT) hdt = PHY_DOUBLE; +#endif initialize(heightStickWidth, heightStickLength, heightfieldData, heightScale, minHeight, maxHeight, upAxis, hdt, flipQuadEdges); @@ -33,9 +78,12 @@ btHeightfieldTerrainShape::btHeightfieldTerrainShape(int heightStickWidth, int h : m_userValue3(0), m_triangleInfoMap(0) { - // legacy constructor: support only float or unsigned char, - // and min height is zero + // legacy constructor: support only btScalar or unsigned char data, + // and min height is zero. PHY_ScalarType hdt = (useFloatData) ? PHY_FLOAT : PHY_UCHAR; +#ifdef BT_USE_DOUBLE_PRECISION + if (hdt == PHY_FLOAT) hdt = PHY_DOUBLE; +#endif btScalar minHeight = 0.0f; // previously, height = uchar * maxHeight / 65535. @@ -59,7 +107,7 @@ void btHeightfieldTerrainShape::initialize( // btAssert(heightScale) -- do we care? Trust caller here btAssert(minHeight <= maxHeight); // && "bad min/max height"); btAssert(upAxis >= 0 && upAxis < 3); // && "bad upAxis--should be in range [0,2]"); - btAssert(hdt != PHY_UCHAR || hdt != PHY_FLOAT || hdt != PHY_SHORT); // && "Bad height data type enum"); + btAssert(hdt != PHY_UCHAR || hdt != PHY_FLOAT || hdt != PHY_DOUBLE || hdt != PHY_SHORT); // && "Bad height data type enum"); // initialize member variables m_shapeType = TERRAIN_SHAPE_PROXYTYPE; @@ -152,6 +200,12 @@ btHeightfieldTerrainShape::getRawHeightFieldValue(int x, int y) const break; } + case PHY_DOUBLE: + { + val = m_heightfieldDataDouble[(y * m_heightStickWidth) + x]; + break; + } + case PHY_UCHAR: { unsigned char heightFieldValue = m_heightfieldDataUnsignedChar[(y * m_heightStickWidth) + x]; @@ -846,4 +900,4 @@ void btHeightfieldTerrainShape::buildAccelerator(int chunkSize) void btHeightfieldTerrainShape::clearAccelerator() { m_vboundsGrid.clear(); -} \ No newline at end of file +} diff --git a/src/BulletCollision/CollisionShapes/btHeightfieldTerrainShape.h b/src/BulletCollision/CollisionShapes/btHeightfieldTerrainShape.h index 2cf3c0072..d1cf43408 100644 --- a/src/BulletCollision/CollisionShapes/btHeightfieldTerrainShape.h +++ b/src/BulletCollision/CollisionShapes/btHeightfieldTerrainShape.h @@ -50,17 +50,15 @@ subject to the following restrictions: The heightfield heights are determined from the data type used for the heightfieldData array. - - PHY_UCHAR: height at a point is the uchar value at the + - unsigned char: height at a point is the uchar value at the grid point, multipled by heightScale. uchar isn't recommended because of its inability to deal with negative values, and low resolution (8-bit). - - PHY_SHORT: height at a point is the short int value at that grid + - short: height at a point is the short int value at that grid point, multipled by heightScale. - - PHY_FLOAT: height at a point is the float value at that grid - point. heightScale is ignored when using the float heightfield - data type. + - float or dobule: height at a point is the value at that grid point. Whatever the caller specifies as minHeight and maxHeight will be honored. The class will not inspect the heightfield to discover the actual minimum @@ -95,7 +93,8 @@ protected: union { const unsigned char* m_heightfieldDataUnsignedChar; const short* m_heightfieldDataShort; - const btScalar* m_heightfieldDataFloat; + const float* m_heightfieldDataFloat; + const double* m_heightfieldDataDouble; const void* m_heightfieldDataUnknown; }; @@ -135,11 +134,33 @@ protected: public: BT_DECLARE_ALIGNED_ALLOCATOR(); - /// preferred constructor + /// preferred constructors + btHeightfieldTerrainShape( + int heightStickWidth, int heightStickLength, + const float* heightfieldData, btScalar minHeight, btScalar maxHeight, + int upAxis, bool flipQuadEdges); + btHeightfieldTerrainShape( + int heightStickWidth, int heightStickLength, + const double* heightfieldData, btScalar minHeight, btScalar maxHeight, + int upAxis, bool flipQuadEdges); + btHeightfieldTerrainShape( + int heightStickWidth, int heightStickLength, + const short* heightfieldData, btScalar heightScale, btScalar minHeight, btScalar maxHeight, + int upAxis, bool flipQuadEdges); + btHeightfieldTerrainShape( + int heightStickWidth, int heightStickLength, + const unsigned char* heightfieldData, btScalar heightScale, btScalar minHeight, btScalar maxHeight, + int upAxis, bool flipQuadEdges); + + /// legacy constructor /** This constructor supports a range of heightfield data types, and allows for a non-zero minimum height value. heightScale is needed for any integer-based heightfield data types. + + This legacy constructor considers `PHY_FLOAT` to mean `btScalar`. + With `BT_USE_DOUBLE_PRECISION`, it will expect `heightfieldData` + to be double-precision. */ btHeightfieldTerrainShape(int heightStickWidth, int heightStickLength, const void* heightfieldData, btScalar heightScale, @@ -150,7 +171,7 @@ public: /// legacy constructor /** The legacy constructor assumes the heightfield has a minimum height - of zero. Only unsigned char or floats are supported. For legacy + of zero. Only unsigned char or btScalar data are supported. For legacy compatibility reasons, heightScale is calculated as maxHeight / 65535 (and is only used when useFloatData = false). */ @@ -218,4 +239,4 @@ public: } }; -#endif //BT_HEIGHTFIELD_TERRAIN_SHAPE_H \ No newline at end of file +#endif //BT_HEIGHTFIELD_TERRAIN_SHAPE_H From 3963f077fc4e36809eed33b65117315d9610e3aa Mon Sep 17 00:00:00 2001 From: erwin coumans Date: Thu, 4 Mar 2021 09:13:22 -0800 Subject: [PATCH 16/36] Fix memory leak in EGL / GUI mode, resetSimulation with textures in GUI mode. Fixes Issue #3285 --- examples/OpenGLWindow/GLInstancingRenderer.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/examples/OpenGLWindow/GLInstancingRenderer.cpp b/examples/OpenGLWindow/GLInstancingRenderer.cpp index 3754c4a9e..81f9ec8c6 100644 --- a/examples/OpenGLWindow/GLInstancingRenderer.cpp +++ b/examples/OpenGLWindow/GLInstancingRenderer.cpp @@ -397,6 +397,15 @@ void GLInstancingRenderer::removeAllInstances() m_graphicsInstances.clear(); m_data->m_publicGraphicsInstances.exitHandles(); m_data->m_publicGraphicsInstances.initHandles(); + + for (int i=0;im_textureHandles.size();i++) + { + InternalTextureHandle& h = m_data->m_textureHandles[i]; + glDeleteTextures(1, &h.m_glTexture); + } + + m_data->m_textureHandles.clear(); + } GLInstancingRenderer::~GLInstancingRenderer() From 201f3dd7d81a694f12af8616ef9b8a844c81aae5 Mon Sep 17 00:00:00 2001 From: erwin coumans Date: Thu, 4 Mar 2021 09:55:35 -0800 Subject: [PATCH 17/36] cmake: move stable pd files from BulletRoboticsGUI to BulletRobotics. --- Extras/BulletRobotics/CMakeLists.txt | 127 +++++++++++++----------- Extras/BulletRoboticsGUI/CMakeLists.txt | 15 --- 2 files changed, 71 insertions(+), 71 deletions(-) diff --git a/Extras/BulletRobotics/CMakeLists.txt b/Extras/BulletRobotics/CMakeLists.txt index 641300fb1..7287c1437 100644 --- a/Extras/BulletRobotics/CMakeLists.txt +++ b/Extras/BulletRobotics/CMakeLists.txt @@ -97,68 +97,83 @@ SET(BulletRobotics_INCLUDES ) SET(BulletRobotics_SRCS ${BulletRobotics_INCLUDES} - ../../examples/OpenGLWindow/SimpleCamera.cpp + ../../examples/SharedMemory/plugins/stablePDPlugin/SpAlg.cpp + ../../examples/SharedMemory/plugins/stablePDPlugin/SpAlg.h + ../../examples/SharedMemory/plugins/stablePDPlugin/Shape.cpp + ../../examples/SharedMemory/plugins/stablePDPlugin/Shape.h + ../../examples/SharedMemory/plugins/stablePDPlugin/RBDUtil.cpp + ../../examples/SharedMemory/plugins/stablePDPlugin/RBDUtil.h + ../../examples/SharedMemory/plugins/stablePDPlugin/RBDModel.cpp + ../../examples/SharedMemory/plugins/stablePDPlugin/RBDModel.h + ../../examples/SharedMemory/plugins/stablePDPlugin/MathUtil.cpp + ../../examples/SharedMemory/plugins/stablePDPlugin/MathUtil.h + ../../examples/SharedMemory/plugins/stablePDPlugin/KinTree.cpp + ../../examples/SharedMemory/plugins/stablePDPlugin/KinTree.h + ../../examples/SharedMemory/plugins/stablePDPlugin/BulletConversion.cpp + ../../examples/SharedMemory/plugins/stablePDPlugin/BulletConversion.h + + ../../examples/OpenGLWindow/SimpleCamera.cpp - ../../examples/TinyRenderer/geometry.cpp - ../../examples/TinyRenderer/model.cpp - ../../examples/TinyRenderer/tgaimage.cpp - ../../examples/TinyRenderer/our_gl.cpp - ../../examples/TinyRenderer/TinyRenderer.cpp + ../../examples/TinyRenderer/geometry.cpp + ../../examples/TinyRenderer/model.cpp + ../../examples/TinyRenderer/tgaimage.cpp + ../../examples/TinyRenderer/our_gl.cpp + ../../examples/TinyRenderer/TinyRenderer.cpp - ../../examples/SharedMemory/plugins/collisionFilterPlugin/collisionFilterPlugin.cpp - ../../examples/SharedMemory/plugins/pdControlPlugin/pdControlPlugin.cpp - ../../examples/SharedMemory/b3RobotSimulatorClientAPI_NoGUI.cpp - ../../examples/SharedMemory/b3RobotSimulatorClientAPI_NoDirect.cpp - ../../examples/SharedMemory/IKTrajectoryHelper.cpp - ../../examples/SharedMemory/plugins/tinyRendererPlugin/tinyRendererPlugin.cpp - ../../examples/SharedMemory/plugins/tinyRendererPlugin/TinyRendererVisualShapeConverter.cpp - ../../examples/SharedMemory/InProcessMemory.cpp - ../../examples/SharedMemory/PhysicsClient.cpp - ../../examples/SharedMemory/PhysicsServer.cpp - ../../examples/SharedMemory/PhysicsServerSharedMemory.cpp - ../../examples/SharedMemory/PhysicsDirect.cpp - ../../examples/SharedMemory/PhysicsDirectC_API.cpp - ../../examples/SharedMemory/PhysicsServerCommandProcessor.cpp - ../../examples/SharedMemory/b3PluginManager.cpp - ../../examples/SharedMemory/PhysicsClientSharedMemory.cpp - ../../examples/SharedMemory/PhysicsClientSharedMemory_C_API.cpp - ../../examples/SharedMemory/PhysicsClientC_API.cpp - ../../examples/SharedMemory/Win32SharedMemory.cpp - ../../examples/SharedMemory/PosixSharedMemory.cpp + ../../examples/SharedMemory/plugins/collisionFilterPlugin/collisionFilterPlugin.cpp + ../../examples/SharedMemory/plugins/pdControlPlugin/pdControlPlugin.cpp + ../../examples/SharedMemory/b3RobotSimulatorClientAPI_NoGUI.cpp + ../../examples/SharedMemory/b3RobotSimulatorClientAPI_NoDirect.cpp + ../../examples/SharedMemory/IKTrajectoryHelper.cpp + ../../examples/SharedMemory/plugins/tinyRendererPlugin/tinyRendererPlugin.cpp + ../../examples/SharedMemory/plugins/tinyRendererPlugin/TinyRendererVisualShapeConverter.cpp + ../../examples/SharedMemory/InProcessMemory.cpp + ../../examples/SharedMemory/PhysicsClient.cpp + ../../examples/SharedMemory/PhysicsServer.cpp + ../../examples/SharedMemory/PhysicsServerSharedMemory.cpp + ../../examples/SharedMemory/PhysicsDirect.cpp + ../../examples/SharedMemory/PhysicsDirectC_API.cpp + ../../examples/SharedMemory/PhysicsServerCommandProcessor.cpp + ../../examples/SharedMemory/b3PluginManager.cpp + ../../examples/SharedMemory/PhysicsClientSharedMemory.cpp + ../../examples/SharedMemory/PhysicsClientSharedMemory_C_API.cpp + ../../examples/SharedMemory/PhysicsClientC_API.cpp + ../../examples/SharedMemory/Win32SharedMemory.cpp + ../../examples/SharedMemory/PosixSharedMemory.cpp - ../../examples/Utils/b3ResourcePath.cpp - ../../examples/Utils/RobotLoggingUtil.cpp - ../../examples/Utils/b3Clock.cpp - ../../examples/Utils/b3ResourcePath.cpp - ../../examples/Utils/ChromeTraceUtil.cpp + ../../examples/Utils/b3ResourcePath.cpp + ../../examples/Utils/RobotLoggingUtil.cpp + ../../examples/Utils/b3Clock.cpp + ../../examples/Utils/b3ResourcePath.cpp + ../../examples/Utils/ChromeTraceUtil.cpp - ../../examples/ThirdPartyLibs/tinyxml2/tinyxml2.cpp - ../../examples/ThirdPartyLibs/Wavefront/tiny_obj_loader.cpp - ../../examples/ThirdPartyLibs/stb_image/stb_image.cpp - ../../examples/ThirdPartyLibs/BussIK/Jacobian.cpp - ../../examples/ThirdPartyLibs/BussIK/LinearR2.cpp - ../../examples/ThirdPartyLibs/BussIK/LinearR3.cpp - ../../examples/ThirdPartyLibs/BussIK/LinearR4.cpp - ../../examples/ThirdPartyLibs/BussIK/MatrixRmn.cpp - ../../examples/ThirdPartyLibs/BussIK/Misc.cpp - ../../examples/ThirdPartyLibs/BussIK/Node.cpp - ../../examples/ThirdPartyLibs/BussIK/Tree.cpp - ../../examples/ThirdPartyLibs/BussIK/VectorRn.cpp + ../../examples/ThirdPartyLibs/tinyxml2/tinyxml2.cpp + ../../examples/ThirdPartyLibs/Wavefront/tiny_obj_loader.cpp + ../../examples/ThirdPartyLibs/stb_image/stb_image.cpp + ../../examples/ThirdPartyLibs/BussIK/Jacobian.cpp + ../../examples/ThirdPartyLibs/BussIK/LinearR2.cpp + ../../examples/ThirdPartyLibs/BussIK/LinearR3.cpp + ../../examples/ThirdPartyLibs/BussIK/LinearR4.cpp + ../../examples/ThirdPartyLibs/BussIK/MatrixRmn.cpp + ../../examples/ThirdPartyLibs/BussIK/Misc.cpp + ../../examples/ThirdPartyLibs/BussIK/Node.cpp + ../../examples/ThirdPartyLibs/BussIK/Tree.cpp + ../../examples/ThirdPartyLibs/BussIK/VectorRn.cpp - ../../examples/Importers/ImportColladaDemo/LoadMeshFromCollada.cpp - ../../examples/Importers/ImportObjDemo/LoadMeshFromObj.cpp - ../../examples/Importers/ImportObjDemo/Wavefront2GLInstanceGraphicsShape.cpp - ../../examples/Importers/ImportMJCFDemo/BulletMJCFImporter.cpp - ../../examples/Importers/ImportURDFDemo/BulletUrdfImporter.cpp - ../../examples/Importers/ImportURDFDemo/MyMultiBodyCreator.cpp - ../../examples/Importers/ImportURDFDemo/URDF2Bullet.cpp - ../../examples/Importers/ImportURDFDemo/UrdfParser.cpp - ../../examples/Importers/ImportURDFDemo/urdfStringSplit.cpp - ../../examples/Importers/ImportMeshUtility/b3ImportMeshUtility.cpp + ../../examples/Importers/ImportColladaDemo/LoadMeshFromCollada.cpp + ../../examples/Importers/ImportObjDemo/LoadMeshFromObj.cpp + ../../examples/Importers/ImportObjDemo/Wavefront2GLInstanceGraphicsShape.cpp + ../../examples/Importers/ImportMJCFDemo/BulletMJCFImporter.cpp + ../../examples/Importers/ImportURDFDemo/BulletUrdfImporter.cpp + ../../examples/Importers/ImportURDFDemo/MyMultiBodyCreator.cpp + ../../examples/Importers/ImportURDFDemo/URDF2Bullet.cpp + ../../examples/Importers/ImportURDFDemo/UrdfParser.cpp + ../../examples/Importers/ImportURDFDemo/urdfStringSplit.cpp + ../../examples/Importers/ImportMeshUtility/b3ImportMeshUtility.cpp - ../../examples/MultiThreading/b3PosixThreadSupport.cpp - ../../examples/MultiThreading/b3Win32ThreadSupport.cpp - ../../examples/MultiThreading/b3ThreadSupportInterface.cpp + ../../examples/MultiThreading/b3PosixThreadSupport.cpp + ../../examples/MultiThreading/b3Win32ThreadSupport.cpp + ../../examples/MultiThreading/b3ThreadSupportInterface.cpp ) diff --git a/Extras/BulletRoboticsGUI/CMakeLists.txt b/Extras/BulletRoboticsGUI/CMakeLists.txt index 9926f14b6..8537b57d8 100644 --- a/Extras/BulletRoboticsGUI/CMakeLists.txt +++ b/Extras/BulletRoboticsGUI/CMakeLists.txt @@ -94,21 +94,6 @@ SET(BulletRoboticsGUI_INCLUDES ) SET(BulletRoboticsGUI_SRCS ${BulletRoboticsGUI_INCLUDES} - - ../../examples/SharedMemory/plugins/stablePDPlugin/SpAlg.cpp - ../../examples/SharedMemory/plugins/stablePDPlugin/SpAlg.h - ../../examples/SharedMemory/plugins/stablePDPlugin/Shape.cpp - ../../examples/SharedMemory/plugins/stablePDPlugin/Shape.h - ../../examples/SharedMemory/plugins/stablePDPlugin/RBDUtil.cpp - ../../examples/SharedMemory/plugins/stablePDPlugin/RBDUtil.h - ../../examples/SharedMemory/plugins/stablePDPlugin/RBDModel.cpp - ../../examples/SharedMemory/plugins/stablePDPlugin/RBDModel.h - ../../examples/SharedMemory/plugins/stablePDPlugin/MathUtil.cpp - ../../examples/SharedMemory/plugins/stablePDPlugin/MathUtil.h - ../../examples/SharedMemory/plugins/stablePDPlugin/KinTree.cpp - ../../examples/SharedMemory/plugins/stablePDPlugin/KinTree.h - ../../examples/SharedMemory/plugins/stablePDPlugin/BulletConversion.cpp - ../../examples/SharedMemory/plugins/stablePDPlugin/BulletConversion.h ../../examples/ExampleBrowser/InProcessExampleBrowser.cpp ../../examples/SharedMemory/GraphicsServerExample.cpp ../../examples/SharedMemory/GraphicsClientExample.cpp From 57c9e66ea97d21b048777e2474762dc88579d38c Mon Sep 17 00:00:00 2001 From: Erwin Coumans Date: Thu, 4 Mar 2021 11:31:17 -0800 Subject: [PATCH 18/36] bump up PyBullet to 3.09 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 602244f25..97447c9ec 100644 --- a/setup.py +++ b/setup.py @@ -501,7 +501,7 @@ if 'BT_USE_EGL' in EGL_CXX_FLAGS: setup( name='pybullet', - version='3.0.8', + version='3.0.9', description= 'Official Python Interface for the Bullet Physics SDK specialized for Robotics Simulation and Reinforcement Learning', long_description= From 237843b93a9ed34050df45f9c751084661abc8e1 Mon Sep 17 00:00:00 2001 From: mbennice Date: Fri, 5 Mar 2021 09:52:10 -0800 Subject: [PATCH 19/36] Default user data text to empty string when null. --- examples/Importers/ImportURDFDemo/UrdfParser.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/examples/Importers/ImportURDFDemo/UrdfParser.cpp b/examples/Importers/ImportURDFDemo/UrdfParser.cpp index 235e6ee8c..672b44835 100644 --- a/examples/Importers/ImportURDFDemo/UrdfParser.cpp +++ b/examples/Importers/ImportURDFDemo/UrdfParser.cpp @@ -94,7 +94,8 @@ static void ParseUserData(const XMLElement* element, btHashMapreportError("User data tag must have a key attribute."); } - user_data.insert(key_attr, user_data_xml->GetText()); + const char* text = user_data_xml->GetText(); + user_data.insert(key_attr, text ? text : ""); } } } From 296cd85f607acdd9fbece2106d66a62bab3c7240 Mon Sep 17 00:00:00 2001 From: mbennice Date: Fri, 5 Mar 2021 09:54:53 -0800 Subject: [PATCH 20/36] Fix tab/spaces --- examples/Importers/ImportURDFDemo/UrdfParser.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/Importers/ImportURDFDemo/UrdfParser.cpp b/examples/Importers/ImportURDFDemo/UrdfParser.cpp index 672b44835..23f36a5e6 100644 --- a/examples/Importers/ImportURDFDemo/UrdfParser.cpp +++ b/examples/Importers/ImportURDFDemo/UrdfParser.cpp @@ -95,7 +95,7 @@ static void ParseUserData(const XMLElement* element, btHashMapreportError("User data tag must have a key attribute."); } const char* text = user_data_xml->GetText(); - user_data.insert(key_attr, text ? text : ""); + user_data.insert(key_attr, text ? text : ""); } } } From 5864901a2e2ece8276a036b099184c65402c1ab5 Mon Sep 17 00:00:00 2001 From: Erwin Coumans Date: Mon, 8 Mar 2021 09:32:43 -0800 Subject: [PATCH 21/36] bump up pybullet to 3.1.0, wheels are using numpy 1.19.5 (to be colab compatible) --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 97447c9ec..077f697c7 100644 --- a/setup.py +++ b/setup.py @@ -501,7 +501,7 @@ if 'BT_USE_EGL' in EGL_CXX_FLAGS: setup( name='pybullet', - version='3.0.9', + version='3.1.0', description= 'Official Python Interface for the Bullet Physics SDK specialized for Robotics Simulation and Reinforcement Learning', long_description= From 5cf8ee3360e2c9e87fd791378fd72e268f967f1f Mon Sep 17 00:00:00 2001 From: erwin coumans Date: Mon, 15 Mar 2021 22:44:55 -0700 Subject: [PATCH 22/36] Allow to compile pybullet using btDiscreteDynamicsWorld (no multibodies and no deformables), this allows to create Jacobian and Mass matrix (and A=J*M-1*J_transpose) with MLCP solvers Add examples/pybullet/gym/pybullet_utils/readwriteurdf.py, this allows to read a URDF and write the URDF with more reasonable inertia tensors (based on mass and collision volumes) --- .../DeformableSelfCollision.cpp | 4 +- .../GwenGUISupport/GwenParameterInterface.cpp | 10 +- .../Importers/ImportURDFDemo/URDF2Bullet.cpp | 26 ++++- .../Importers/ImportURDFDemo/URDF2Bullet.h | 14 ++- .../SharedMemory/PhysicsClientExample.cpp | 8 +- .../PhysicsServerCommandProcessor.cpp | 104 ++++++++++++++++-- .../gym/pybullet_utils/readwriteurdf.py | 25 +++++ .../pybullet/gym/pybullet_utils/urdfEditor.py | 1 + .../MLCPSolvers/btMLCPSolver.cpp | 4 +- .../btDeformableMousePickingForce.h | 2 +- 10 files changed, 177 insertions(+), 21 deletions(-) create mode 100644 examples/pybullet/gym/pybullet_utils/readwriteurdf.py diff --git a/examples/DeformableDemo/DeformableSelfCollision.cpp b/examples/DeformableDemo/DeformableSelfCollision.cpp index 99180ea0c..45f19bd40 100644 --- a/examples/DeformableDemo/DeformableSelfCollision.cpp +++ b/examples/DeformableDemo/DeformableSelfCollision.cpp @@ -55,7 +55,7 @@ public: m_dynamicsWorld->stepSimulation(deltaTime, 4, internalTimeStep); } - void addCloth(btVector3 origin); + void addCloth(const btVector3& origin); virtual void renderScene() { @@ -126,7 +126,7 @@ void DeformableSelfCollision::initPhysics() getDeformableDynamicsWorld()->setLineSearch(false); m_guiHelper->autogenerateGraphicsObjects(m_dynamicsWorld); } -void DeformableSelfCollision::addCloth(btVector3 origin) +void DeformableSelfCollision::addCloth(const btVector3& origin) // create a piece of cloth { const btScalar s = 0.6; diff --git a/examples/ExampleBrowser/GwenGUISupport/GwenParameterInterface.cpp b/examples/ExampleBrowser/GwenGUISupport/GwenParameterInterface.cpp index b3b6923f0..d6fd7e0b4 100644 --- a/examples/ExampleBrowser/GwenGUISupport/GwenParameterInterface.cpp +++ b/examples/ExampleBrowser/GwenGUISupport/GwenParameterInterface.cpp @@ -1,7 +1,11 @@ #include "GwenParameterInterface.h" #include "gwenInternalData.h" #include - +#ifdef _WIN32 +#define safe_printf _snprintf +#else +#define safe_printf snprintf +#endif struct MyButtonEventHandler : public Gwen::Event::Handler { Gwen::Controls::Button* m_buttonControl; @@ -85,7 +89,7 @@ struct MySliderEventHandler : public Gwen::Event::Handler if (m_showValue) { char txt[1024]; - snprintf(txt, sizeof(txt), "%s : %.3f", m_variableName, val); + safe_printf(txt, sizeof(txt), "%s : %.3f", m_variableName, val); m_label->SetText(txt); } } @@ -231,7 +235,7 @@ void GwenParameterInterface::registerSliderFloatParameter(SliderParams& params) } pSlider->SetValue(*params.m_paramValuePointer); //dimensions[i] ); char labelName[1024]; - snprintf(labelName, sizeof(labelName), "%s", params.m_name); //axisNames[0]); + safe_printf(labelName, sizeof(labelName), "%s", params.m_name); //axisNames[0]); MySliderEventHandler* handler = new MySliderEventHandler(labelName, label, pSlider, params.m_paramValuePointer, params.m_callback, params.m_userPointer); handler->m_showValue = params.m_showValues; m_paramInternalData->m_sliderEventHandlers.push_back(handler); diff --git a/examples/Importers/ImportURDFDemo/URDF2Bullet.cpp b/examples/Importers/ImportURDFDemo/URDF2Bullet.cpp index c21e7fc9a..907ed55be 100644 --- a/examples/Importers/ImportURDFDemo/URDF2Bullet.cpp +++ b/examples/Importers/ImportURDFDemo/URDF2Bullet.cpp @@ -199,7 +199,15 @@ btScalar tmpUrdfScaling = 2; btTransform ConvertURDF2BulletInternal( const URDFImporterInterface& u2b, MultiBodyCreationInterface& creation, URDF2BulletCachedData& cache, int urdfLinkIndex, - const btTransform& parentTransformInWorldSpace, btMultiBodyDynamicsWorld* world1, + const btTransform& parentTransformInWorldSpace, + +#ifdef USE_DISCRETE_DYNAMICS_WORLD + btDiscreteDynamicsWorld* world1, +#else + btMultiBodyDynamicsWorld* world1, +#endif + + bool createMultiBody, const char* pathPrefix, int flags, UrdfVisualShapeCache* cachedLinkGraphicsShapesIn, UrdfVisualShapeCache* cachedLinkGraphicsShapesOut, bool recursive) { @@ -505,6 +513,7 @@ btTransform ConvertURDF2BulletInternal( creation.addLinkMapping(urdfLinkIndex, mbLinkIndex); if (createMultiBody) { +#ifndef USE_DISCRETE_DYNAMICS_WORLD cache.m_bulletMultiBody->setupRevolute(mbLinkIndex, mass, localInertiaDiagonal, mbParentIndex, parentRotToThis, quatRotate(offsetInB.getRotation(), jointAxisInJointSpace), @@ -519,8 +528,10 @@ btTransform ConvertURDF2BulletInternal( btMultiBodyConstraint* con = new btMultiBodyJointLimitConstraint(cache.m_bulletMultiBody, mbLinkIndex, jointLowerLimit, jointUpperLimit); world1->addMultiBodyConstraint(con); } +#endif } else + { btGeneric6DofSpring2Constraint* dof6 = 0; if (jointType == URDFRevoluteJoint && jointLowerLimit <= jointUpperLimit) @@ -560,6 +571,7 @@ btTransform ConvertURDF2BulletInternal( if (createMultiBody) { +#ifndef USE_DISCRETE_DYNAMICS_WORLD cache.m_bulletMultiBody->setupPrismatic(mbLinkIndex, mass, localInertiaDiagonal, mbParentIndex, parentRotToThis, quatRotate(offsetInB.getRotation(), jointAxisInJointSpace), offsetInA.getOrigin(), //parent2joint.getOrigin(), -offsetInB.getOrigin(), @@ -574,6 +586,7 @@ btTransform ConvertURDF2BulletInternal( world1->addMultiBodyConstraint(con); } //printf("joint lower limit=%d, upper limit = %f\n", jointLowerLimit, jointUpperLimit); +#endif } else { @@ -775,10 +788,18 @@ bool MyIntCompareFunc(childParentIndex a, childParentIndex b) } + + + void ConvertURDF2Bullet( const URDFImporterInterface& u2b, MultiBodyCreationInterface& creation, const btTransform& rootTransformInWorldSpace, + +#ifdef USE_DISCRETE_DYNAMICS_WORLD + btDiscreteDynamicsWorld* world1, +#else btMultiBodyDynamicsWorld* world1, +#endif bool createMultiBody, const char* pathPrefix, int flags, UrdfVisualShapeCache* cachedLinkGraphicsShapes) { URDF2BulletCachedData cache; @@ -829,7 +850,7 @@ void ConvertURDF2Bullet( { *cachedLinkGraphicsShapes = cachedLinkGraphicsShapesOut; } - +#ifndef USE_DISCRETE_DYNAMICS_WORLD if (world1 && cache.m_bulletMultiBody) { B3_PROFILE("Post process"); @@ -855,4 +876,5 @@ void ConvertURDF2Bullet( world1->addMultiBody(mb); } + #endif } diff --git a/examples/Importers/ImportURDFDemo/URDF2Bullet.h b/examples/Importers/ImportURDFDemo/URDF2Bullet.h index 233091c1e..5fe290e86 100644 --- a/examples/Importers/ImportURDFDemo/URDF2Bullet.h +++ b/examples/Importers/ImportURDFDemo/URDF2Bullet.h @@ -8,6 +8,7 @@ class btVector3; class btTransform; class btMultiBodyDynamicsWorld; +class btDiscreteDynamicsWorld; class btTransform; class URDFImporterInterface; @@ -20,7 +21,18 @@ struct UrdfVisualShapeCache btAlignedObjectArray m_cachedUrdfLinkColors; btAlignedObjectArray m_cachedUrdfLinkVisualShapeIndices; }; +//#define USE_DISCRETE_DYNAMICS_WORLD +#ifdef USE_DISCRETE_DYNAMICS_WORLD + void ConvertURDF2Bullet(const URDFImporterInterface& u2b, + MultiBodyCreationInterface& creationCallback, + const btTransform& rootTransformInWorldSpace, + btDiscreteDynamicsWorld* world, + bool createMultiBody, + const char* pathPrefix, + int flags = 0, + UrdfVisualShapeCache* cachedLinkGraphicsShapes = 0); +#else void ConvertURDF2Bullet(const URDFImporterInterface& u2b, MultiBodyCreationInterface& creationCallback, const btTransform& rootTransformInWorldSpace, @@ -29,5 +41,5 @@ void ConvertURDF2Bullet(const URDFImporterInterface& u2b, const char* pathPrefix, int flags = 0, UrdfVisualShapeCache* cachedLinkGraphicsShapes = 0); - +#endif #endif //_URDF2BULLET_H diff --git a/examples/SharedMemory/PhysicsClientExample.cpp b/examples/SharedMemory/PhysicsClientExample.cpp index a55729eaf..491ac7a74 100644 --- a/examples/SharedMemory/PhysicsClientExample.cpp +++ b/examples/SharedMemory/PhysicsClientExample.cpp @@ -13,6 +13,12 @@ #include "PhysicsDirectC_API.h" #include "PhysicsClientC_API.h" #include "PhysicsServerSharedMemory.h" +#include +#ifdef _WIN32 +#define safe_printf _snprintf +#else +#define safe_printf snprintf +#endif struct MyMotorInfo2 { btScalar m_velTarget; @@ -655,7 +661,7 @@ void PhysicsClientExample::createButtons() if (m_numMotors < MAX_NUM_MOTORS) { char motorName[1026]; - snprintf(motorName, sizeof(motorName), "%s q", info.m_jointName); + safe_printf(motorName, sizeof(motorName), "%s q", info.m_jointName); // MyMotorInfo2* motorInfo = &m_motorTargetVelocities[m_numMotors]; MyMotorInfo2* motorInfo = &m_motorTargetPositions[m_numMotors]; motorInfo->m_velTarget = 0.f; diff --git a/examples/SharedMemory/PhysicsServerCommandProcessor.cpp b/examples/SharedMemory/PhysicsServerCommandProcessor.cpp index 295e202c5..684fd555b 100644 --- a/examples/SharedMemory/PhysicsServerCommandProcessor.cpp +++ b/examples/SharedMemory/PhysicsServerCommandProcessor.cpp @@ -12,10 +12,15 @@ #include "../Importers/ImportMeshUtility/b3ImportMeshUtility.h" #include "BulletDynamics/MLCPSolvers/btDantzigSolver.h" #include "BulletDynamics/MLCPSolvers/btSolveProjectedGaussSeidel.h" +#include "BulletDynamics/MLCPSolvers/btMLCPSolver.h" + #include "BulletDynamics/Featherstone/btMultiBodyMLCPConstraintSolver.h" #include "BulletDynamics/Featherstone/btMultiBodySphericalJointMotor.h" #include "BulletDynamics/Featherstone/btMultiBodyJointLimitConstraint.h" +//#define USE_DISCRETE_DYNAMICS_WORLD +//#define SKIP_DEFORMABLE_BODY +//#define SKIP_SOFT_BODY_MULTI_BODY_DYNAMICS_WORLD #include "../Utils/b3BulletDefaultFileIO.h" #include "BulletCollision/CollisionShapes/btHeightfieldTerrainShape.h" @@ -1626,7 +1631,11 @@ struct PhysicsServerCommandProcessorInternalData b3AlignedObjectArray m_saveWorldBodyData; +#ifdef USE_DISCRETE_DYNAMICS_WORLD + btAlignedObjectArray m_worldImporters; +#else btAlignedObjectArray m_worldImporters; +#endif btAlignedObjectArray m_strings; @@ -1641,8 +1650,12 @@ struct PhysicsServerCommandProcessorInternalData btHashedOverlappingPairCache* m_pairCache; btBroadphaseInterface* m_broadphase; btCollisionDispatcher* m_dispatcher; - + +#ifdef USE_DISCRETE_DYNAMICS_WORLD + btSequentialImpulseConstraintSolver* m_solver; +#else btMultiBodyConstraintSolver* m_solver; +#endif btDefaultCollisionConfiguration* m_collisionConfiguration; @@ -1654,7 +1667,12 @@ struct PhysicsServerCommandProcessorInternalData btAlignedObjectArray m_lf; #endif +#ifdef USE_DISCRETE_DYNAMICS_WORLD + btDiscreteDynamicsWorld* m_dynamicsWorld; +#else btMultiBodyDynamicsWorld* m_dynamicsWorld; +#endif + int m_constraintSolverType; SharedMemoryDebugDrawer* m_remoteDebugDrawer; @@ -2714,18 +2732,30 @@ void PhysicsServerCommandProcessor::createEmptyDynamicsWorld(int flags) if ((0 == m_data->m_dynamicsWorld) && (0 == (flags & RESET_USE_DISCRETE_DYNAMICS_WORLD))) { - m_data->m_solver = new btMultiBodyConstraintSolver; + #ifndef SKIP_SOFT_BODY_MULTI_BODY_DYNAMICS_WORLD m_data->m_dynamicsWorld = new btSoftMultiBodyDynamicsWorld(m_data->m_dispatcher, m_data->m_broadphase, m_data->m_solver, m_data->m_collisionConfiguration); #else +#ifdef USE_DISCRETE_DYNAMICS_WORLD + m_data->m_solver = new btSequentialImpulseConstraintSolver; + m_data->m_dynamicsWorld = new btDiscreteDynamicsWorld(m_data->m_dispatcher, m_data->m_broadphase, m_data->m_solver, m_data->m_collisionConfiguration); +#else + m_data->m_solver = new btMultiBodyConstraintSolver; m_data->m_dynamicsWorld = new btMultiBodyDynamicsWorld(m_data->m_dispatcher, m_data->m_broadphase, m_data->m_solver, m_data->m_collisionConfiguration); + #endif #endif } if (0 == m_data->m_dynamicsWorld) { +#ifdef USE_DISCRETE_DYNAMICS_WORLD + m_data->m_solver = new btSequentialImpulseConstraintSolver; + m_data->m_dynamicsWorld = new btDiscreteDynamicsWorld(m_data->m_dispatcher, m_data->m_broadphase, m_data->m_solver, m_data->m_collisionConfiguration); +#else + m_data->m_solver = new btMultiBodyConstraintSolver; m_data->m_dynamicsWorld = new btMultiBodyDynamicsWorld(m_data->m_dispatcher, m_data->m_broadphase, m_data->m_solver, m_data->m_collisionConfiguration); +#endif } //Workaround: in a VR application, where we avoid synchronizing between GFX/Physics threads, we don't want to resize this array, so pre-allocate it @@ -2860,13 +2890,14 @@ void PhysicsServerCommandProcessor::deleteDynamicsWorld() constraints.push_back(constraint); m_data->m_dynamicsWorld->removeConstraint(constraint); } +#ifndef USE_DISCRETE_DYNAMICS_WORLD for (i = m_data->m_dynamicsWorld->getNumMultiBodyConstraints() - 1; i >= 0; i--) { btMultiBodyConstraint* mbconstraint = m_data->m_dynamicsWorld->getMultiBodyConstraint(i); mbconstraints.push_back(mbconstraint); m_data->m_dynamicsWorld->removeMultiBodyConstraint(mbconstraint); } - +#endif for (i = m_data->m_dynamicsWorld->getNumCollisionObjects() - 1; i >= 0; i--) { btCollisionObject* obj = m_data->m_dynamicsWorld->getCollisionObjectArray()[i]; @@ -2878,12 +2909,14 @@ void PhysicsServerCommandProcessor::deleteDynamicsWorld() m_data->m_dynamicsWorld->removeCollisionObject(obj); delete obj; } +#ifndef USE_DISCRETE_DYNAMICS_WORLD for (i = m_data->m_dynamicsWorld->getNumMultibodies() - 1; i >= 0; i--) { btMultiBody* mb = m_data->m_dynamicsWorld->getMultiBody(i); m_data->m_dynamicsWorld->removeMultiBody(mb); delete mb; } +#endif #ifndef SKIP_DEFORMABLE_BODY for (int j = 0; j < m_data->m_lf.size(); j++) { @@ -3052,14 +3085,18 @@ void PhysicsServerCommandProcessor::createJointMotors(btMultiBody* mb) //motor->setRhsClamp(gRhsClamp); //motor->setMaxAppliedImpulse(0); mb->getLink(mbLinkIndex).m_userPtr = motor; +#ifndef USE_DISCRETE_DYNAMICS_WORLD m_data->m_dynamicsWorld->addMultiBodyConstraint(motor); +#endif motor->finalizeMultiDof(); } if (mb->getLink(mbLinkIndex).m_jointType == btMultibodyLink::eSpherical) { btMultiBodySphericalJointMotor* motor = new btMultiBodySphericalJointMotor(mb, mbLinkIndex, 1000 * maxMotorImpulse); mb->getLink(mbLinkIndex).m_userPtr = motor; +#ifndef USE_DISCRETE_DYNAMICS_WORLD m_data->m_dynamicsWorld->addMultiBodyConstraint(motor); +#endif motor->finalizeMultiDof(); } } @@ -3166,11 +3203,15 @@ bool PhysicsServerCommandProcessor::processImportedObjects(const char* fileName, } } UrdfVisualShapeCache* cachedVisualShapesPtr = m_data->m_cachedVUrdfisualShapes[fileName]; + ConvertURDF2Bullet(u2b, creation, rootTrans, m_data->m_dynamicsWorld, useMultiBody, u2b.getPathPrefix(), flags, cachedVisualShapesPtr); + } else { + ConvertURDF2Bullet(u2b, creation, rootTrans, m_data->m_dynamicsWorld, useMultiBody, u2b.getPathPrefix(), flags); + } mb = creation.getBulletMultiBody(); @@ -3788,9 +3829,10 @@ bool PhysicsServerCommandProcessor::processStateLoggingCommand(const struct Shar } } } - +#ifndef USE_DISCRETE_DYNAMICS_WORLD if (clientCmd.m_stateLoggingArguments.m_logType == STATE_LOGGING_GENERIC_ROBOT) { + std::string fileName = clientCmd.m_stateLoggingArguments.m_fileName; int loggerUid = m_data->m_stateLoggersUniqueId++; @@ -3848,6 +3890,7 @@ bool PhysicsServerCommandProcessor::processStateLoggingCommand(const struct Shar serverStatusOut.m_type = CMD_STATE_LOGGING_START_COMPLETED; serverStatusOut.m_stateLoggingResultArgs.m_loggingUniqueId = loggerUid; } +#endif if (clientCmd.m_stateLoggingArguments.m_logType == STATE_LOGGING_VR_CONTROLLERS) { std::string fileName = clientCmd.m_stateLoggingArguments.m_fileName; @@ -4733,7 +4776,11 @@ bool PhysicsServerCommandProcessor::processCreateCollisionShapeCommand(const str bool hasStatus = true; serverStatusOut.m_type = CMD_CREATE_COLLISION_SHAPE_FAILED; +#ifdef USE_DISCRETE_DYNAMICS_WORLD + btWorldImporter* worldImporter = new btWorldImporter(m_data->m_dynamicsWorld); +#else btMultiBodyWorldImporter* worldImporter = new btMultiBodyWorldImporter(m_data->m_dynamicsWorld); +#endif btCollisionShape* shape = 0; b3AlignedObjectArray urdfCollisionObjects; @@ -9444,6 +9491,7 @@ bool PhysicsServerCommandProcessor::processForwardDynamicsCommand(const struct S b3Printf("Step simulation request"); b3Printf("CMD_STEP_FORWARD_SIMULATION clientCmd = %d\n", clientCmd.m_sequenceNumber); } +#ifndef USE_DISCRETE_DYNAMICS_WORLD ///todo(erwincoumans) move this damping inside Bullet for (int i = 0; i < m_data->m_dynamicsWorld->getNumMultibodies(); i++) { @@ -9458,7 +9506,7 @@ bool PhysicsServerCommandProcessor::processForwardDynamicsCommand(const struct S } } } - + #endif btScalar deltaTimeScaled = m_data->m_physicsDeltaTime * simTimeScalingFactor; int numSteps = 0; @@ -9483,8 +9531,9 @@ bool PhysicsServerCommandProcessor::processForwardDynamicsCommand(const struct S serverCmd.m_forwardDynamicsAnalyticsArgs.m_numSteps = numSteps; btAlignedObjectArray islandAnalyticsData; - +#ifndef USE_DISCRETE_DYNAMICS_WORLD m_data->m_dynamicsWorld->getAnalyticsData(islandAnalyticsData); +#endif serverCmd.m_forwardDynamicsAnalyticsArgs.m_numIslands = islandAnalyticsData.size(); int numIslands = btMin(islandAnalyticsData.size(), MAX_ISLANDS_ANALYTICS); @@ -9555,7 +9604,7 @@ bool PhysicsServerCommandProcessor::processChangeDynamicsInfoCommand(const struc if (bodyUniqueId >= 0) { InternalBodyData* body = m_data->m_bodyHandles.getHandle(bodyUniqueId); - +#ifndef USE_DISCRETE_DYNAMICS_WORLD if (body && body->m_multiBody) { btMultiBody* mb = body->m_multiBody; @@ -9741,6 +9790,7 @@ bool PhysicsServerCommandProcessor::processChangeDynamicsInfoCommand(const struc } } } + if (clientCmd.m_updateFlags & CHANGE_DYNAMICS_INFO_SET_JOINT_LIMITS) { @@ -9875,6 +9925,7 @@ bool PhysicsServerCommandProcessor::processChangeDynamicsInfoCommand(const struc } } else +#endif { btRigidBody* rb = 0; if (body && body->m_rigidBody) @@ -10401,7 +10452,11 @@ bool PhysicsServerCommandProcessor::processSendPhysicsParametersCommand(const st btConstraintSolver* oldSolver = m_data->m_dynamicsWorld->getConstraintSolver(); +#ifdef USE_DISCRETE_DYNAMICS_WORLD + btSequentialImpulseConstraintSolver* newSolver = 0; +#else btMultiBodyConstraintSolver* newSolver = 0; +#endif switch (clientCmd.m_physSimParamArgs.m_constraintSolverType) { @@ -10414,7 +10469,12 @@ bool PhysicsServerCommandProcessor::processSendPhysicsParametersCommand(const st case eConstraintSolverLCP_PGS: { btSolveProjectedGaussSeidel* mlcp = new btSolveProjectedGaussSeidel(); +#ifdef USE_DISCRETE_DYNAMICS_WORLD + newSolver = new btMLCPSolver(mlcp); +#else newSolver = new btMultiBodyMLCPConstraintSolver(mlcp); +#endif + b3Printf("PyBullet: Constraint Solver: MLCP + PGS\n"); break; } @@ -10438,7 +10498,11 @@ bool PhysicsServerCommandProcessor::processSendPhysicsParametersCommand(const st { delete oldSolver; +#ifdef USE_DISCRETE_DYNAMICS_WORLD + m_data->m_dynamicsWorld->setConstraintSolver(newSolver); +#else m_data->m_dynamicsWorld->setMultiBodyConstraintSolver(newSolver); +#endif m_data->m_solver = newSolver; printf("switched solver\n"); } @@ -10840,7 +10904,11 @@ bool PhysicsServerCommandProcessor::processCreateRigidBodyCommand(const struct S shapeType = clientCmd.m_createBoxShapeArguments.m_collisionShapeType; } +#ifdef USE_DISCRETE_DYNAMICS_WORLD + btWorldImporter* worldImporter = new btWorldImporter(m_data->m_dynamicsWorld); +#else btMultiBodyWorldImporter* worldImporter = new btMultiBodyWorldImporter(m_data->m_dynamicsWorld); +#endif m_data->m_worldImporters.push_back(worldImporter); btCollisionShape* shape = 0; @@ -11585,6 +11653,7 @@ bool PhysicsServerCommandProcessor::processRemoveBodyCommand(const struct Shared InternalBodyHandle* bodyHandle = m_data->m_bodyHandles.getHandle(bodyUniqueId); if (bodyHandle) { +#ifndef USE_DISCRETE_DYNAMICS_WORLD if (bodyHandle->m_multiBody) { serverCmd.m_removeObjectArgs.m_bodyUniqueIds[serverCmd.m_removeObjectArgs.m_numBodies++] = bodyUniqueId; @@ -11654,6 +11723,7 @@ bool PhysicsServerCommandProcessor::processRemoveBodyCommand(const struct Shared bodyHandle->m_multiBody = 0; serverCmd.m_type = CMD_REMOVE_BODY_COMPLETED; } +#endif if (bodyHandle->m_rigidBody) { if (m_data->m_pluginManager.getRenderInterface()) @@ -11731,7 +11801,11 @@ bool PhysicsServerCommandProcessor::processRemoveBodyCommand(const struct Shared for (int i = 0; i < m_data->m_worldImporters.size(); i++) { +#ifdef USE_DISCRETE_DYNAMICS_WORLD + btWorldImporter* importer = m_data->m_worldImporters[i]; +#else btMultiBodyWorldImporter* importer = m_data->m_worldImporters[i]; +#endif for (int c = 0; c < importer->getNumCollisionShapes(); c++) { if (importer->getCollisionShapeByIndex(c) == handle->m_collisionShape) @@ -11747,7 +11821,11 @@ bool PhysicsServerCommandProcessor::processRemoveBodyCommand(const struct Shared } if (foundIndex >= 0) { +#ifdef USE_DISCRETE_DYNAMICS_WORLD + btWorldImporter* importer = m_data->m_worldImporters[foundIndex]; +#else btMultiBodyWorldImporter* importer = m_data->m_worldImporters[foundIndex]; +#endif m_data->m_worldImporters.removeAtIndex(foundIndex); importer->deleteAllData(); delete importer; @@ -11901,6 +11979,7 @@ bool PhysicsServerCommandProcessor::processCreateUserConstraintCommand(const str { btScalar defaultMaxForce = 500.0; InternalBodyData* parentBody = m_data->m_bodyHandles.getHandle(clientCmd.m_userConstraintArguments.m_parentBodyIndex); +#ifndef USE_DISCRETE_DYNAMICS_WORLD if (parentBody && parentBody->m_multiBody) { if ((clientCmd.m_userConstraintArguments.m_parentJointIndex >= -1) && clientCmd.m_userConstraintArguments.m_parentJointIndex < parentBody->m_multiBody->getNumLinks()) @@ -12054,6 +12133,7 @@ bool PhysicsServerCommandProcessor::processCreateUserConstraintCommand(const str } } else +#endif { InternalBodyData* childBody = clientCmd.m_userConstraintArguments.m_childBodyIndex >= 0 ? m_data->m_bodyHandles.getHandle(clientCmd.m_userConstraintArguments.m_childBodyIndex) : 0; @@ -12301,12 +12381,14 @@ bool PhysicsServerCommandProcessor::processCreateUserConstraintCommand(const str InteralUserConstraintData* userConstraintPtr = m_data->m_userConstraints.find(userConstraintUidRemove); if (userConstraintPtr) { +#ifndef USE_DISCRETE_DYNAMICS_WORLD if (userConstraintPtr->m_mbConstraint) { m_data->m_dynamicsWorld->removeMultiBodyConstraint(userConstraintPtr->m_mbConstraint); delete userConstraintPtr->m_mbConstraint; m_data->m_userConstraints.remove(userConstraintUidRemove); } +#endif//USE_DISCRETE_DYNAMICS_WORLD if (userConstraintPtr->m_rbConstraint) { m_data->m_dynamicsWorld->removeConstraint(userConstraintPtr->m_rbConstraint); @@ -13654,12 +13736,14 @@ bool PhysicsServerCommandProcessor::processRemoveStateCommand(const struct Share bool PhysicsServerCommandProcessor::processRestoreStateCommand(const struct SharedMemoryCommand& clientCmd, struct SharedMemoryStatus& serverStatusOut, char* bufferServerToClient, int bufferSizeInBytes) { + BT_PROFILE("CMD_RESTORE_STATE"); bool hasStatus = true; SharedMemoryStatus& serverCmd = serverStatusOut; serverCmd.m_type = CMD_RESTORE_STATE_FAILED; - +#ifndef USE_DISCRETE_DYNAMICS_WORLD btMultiBodyWorldImporter* importer = new btMultiBodyWorldImporter(m_data->m_dynamicsWorld); + importer->setImporterFlags(eRESTORE_EXISTING_OBJECTS); bool ok = false; @@ -13727,7 +13811,7 @@ bool PhysicsServerCommandProcessor::processRestoreStateCommand(const struct Shar { serverCmd.m_type = CMD_RESTORE_STATE_COMPLETED; } - +#endif return hasStatus; } @@ -13739,6 +13823,7 @@ bool PhysicsServerCommandProcessor::processLoadBulletCommand(const struct Shared SharedMemoryStatus& serverCmd = serverStatusOut; serverCmd.m_type = CMD_BULLET_LOADING_FAILED; +#ifndef USE_DISCRETE_DYNAMICS_WORLD //btBulletWorldImporter* importer = new btBulletWorldImporter(m_data->m_dynamicsWorld); btMultiBodyWorldImporter* importer = new btMultiBodyWorldImporter(m_data->m_dynamicsWorld); @@ -13817,6 +13902,7 @@ bool PhysicsServerCommandProcessor::processLoadBulletCommand(const struct Shared m_data->m_guiHelper->autogenerateGraphicsObjects(m_data->m_dynamicsWorld); } } +#endif return hasStatus; } diff --git a/examples/pybullet/gym/pybullet_utils/readwriteurdf.py b/examples/pybullet/gym/pybullet_utils/readwriteurdf.py new file mode 100644 index 000000000..18218e67f --- /dev/null +++ b/examples/pybullet/gym/pybullet_utils/readwriteurdf.py @@ -0,0 +1,25 @@ +from pybullet_utils import bullet_client as bc +from pybullet_utils import urdfEditor as ed +import pybullet +import pybullet_data +import time +import argparse + +parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter) +parser.add_argument('--urdf_in', help='urdf file name input', default='test.urdf') +parser.add_argument('--urdf_out', help='urdf file name output', default='out.urdf') +parser.add_argument('--urdf_flags', help='urdf flags', type=int, default=0) + + + +args = parser.parse_args() + + +p0 = bc.BulletClient(connection_mode=pybullet.DIRECT) + +p0.setAdditionalSearchPath(pybullet_data.getDataPath()) +body_id = p0.loadURDF(args.urdf_in, flags = args.urdf_flags) +ed0 = ed.UrdfEditor() +ed0.initializeFromBulletBody(body_id, p0._client) +ed0.saveUrdf(args.urdf_out) + diff --git a/examples/pybullet/gym/pybullet_utils/urdfEditor.py b/examples/pybullet/gym/pybullet_utils/urdfEditor.py index c10e39bff..a9d9c5fa1 100644 --- a/examples/pybullet/gym/pybullet_utils/urdfEditor.py +++ b/examples/pybullet/gym/pybullet_utils/urdfEditor.py @@ -152,6 +152,7 @@ class UrdfEditor(object): baseLinkIndex = -1 self.convertLinkFromMultiBody(bodyUid, baseLinkIndex, baseLink, physicsClientId) baseLink.link_name = p.getBodyInfo(bodyUid, physicsClientId=physicsClientId)[0].decode("utf-8") + self.robotName = p.getBodyInfo(bodyUid, physicsClientId=physicsClientId)[1].decode("utf-8") self.linkNameToIndex[baseLink.link_name] = len(self.urdfLinks) self.urdfLinks.append(baseLink) diff --git a/src/BulletDynamics/MLCPSolvers/btMLCPSolver.cpp b/src/BulletDynamics/MLCPSolvers/btMLCPSolver.cpp index 5d864f275..ed4e0b686 100644 --- a/src/BulletDynamics/MLCPSolvers/btMLCPSolver.cpp +++ b/src/BulletDynamics/MLCPSolvers/btMLCPSolver.cpp @@ -532,7 +532,7 @@ void btMLCPSolver::createMLCP(const btContactSolverInfo& infoGlobal) J_transpose = J.transpose(); btMatrixXu& tmp = m_scratchTmp; - + //Minv.printMatrix("Minv="); { { BT_PROFILE("J*Minv"); @@ -543,7 +543,7 @@ void btMLCPSolver::createMLCP(const btContactSolverInfo& infoGlobal) m_A = tmp * J_transpose; } } - + //J.printMatrix("J"); if (1) { // add cfm to the diagonal of m_A diff --git a/src/BulletSoftBody/btDeformableMousePickingForce.h b/src/BulletSoftBody/btDeformableMousePickingForce.h index d218d9621..697408355 100644 --- a/src/BulletSoftBody/btDeformableMousePickingForce.h +++ b/src/BulletSoftBody/btDeformableMousePickingForce.h @@ -29,7 +29,7 @@ class btDeformableMousePickingForce : public btDeformableLagrangianForce public: typedef btAlignedObjectArray TVStack; - btDeformableMousePickingForce(btScalar k, btScalar d, const btSoftBody::Face& face, btVector3 mouse_pos, btScalar maxForce = 0.3) : m_elasticStiffness(k), m_dampingStiffness(d), m_face(face), m_mouse_pos(mouse_pos), m_maxForce(maxForce) + btDeformableMousePickingForce(btScalar k, btScalar d, const btSoftBody::Face& face, const btVector3& mouse_pos, btScalar maxForce = 0.3) : m_elasticStiffness(k), m_dampingStiffness(d), m_face(face), m_mouse_pos(mouse_pos), m_maxForce(maxForce) { } From 6f7d458679942f04e56897bcbe2c8f798764b14d Mon Sep 17 00:00:00 2001 From: erwin coumans Date: Tue, 16 Mar 2021 18:17:23 -0700 Subject: [PATCH 23/36] add missing line in previous commit --- examples/SharedMemory/PhysicsServerCommandProcessor.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/examples/SharedMemory/PhysicsServerCommandProcessor.cpp b/examples/SharedMemory/PhysicsServerCommandProcessor.cpp index 684fd555b..0cb66f157 100644 --- a/examples/SharedMemory/PhysicsServerCommandProcessor.cpp +++ b/examples/SharedMemory/PhysicsServerCommandProcessor.cpp @@ -2730,10 +2730,13 @@ void PhysicsServerCommandProcessor::createEmptyDynamicsWorld(int flags) #endif } + + if ((0 == m_data->m_dynamicsWorld) && (0 == (flags & RESET_USE_DISCRETE_DYNAMICS_WORLD))) { #ifndef SKIP_SOFT_BODY_MULTI_BODY_DYNAMICS_WORLD + m_data->m_solver = new btMultiBodyConstraintSolver; m_data->m_dynamicsWorld = new btSoftMultiBodyDynamicsWorld(m_data->m_dispatcher, m_data->m_broadphase, m_data->m_solver, m_data->m_collisionConfiguration); #else #ifdef USE_DISCRETE_DYNAMICS_WORLD From 6e2577ca598cbde68ccf3b066dd13253aeeea91e Mon Sep 17 00:00:00 2001 From: Chris Djali Date: Sun, 21 Mar 2021 15:07:01 +0000 Subject: [PATCH 24/36] Use drawTriangle instead of drawing three lines --- src/BulletCollision/CollisionDispatch/btCollisionWorld.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/BulletCollision/CollisionDispatch/btCollisionWorld.cpp b/src/BulletCollision/CollisionDispatch/btCollisionWorld.cpp index 71184f36a..7cc6b8ab0 100644 --- a/src/BulletCollision/CollisionDispatch/btCollisionWorld.cpp +++ b/src/BulletCollision/CollisionDispatch/btCollisionWorld.cpp @@ -1294,9 +1294,7 @@ public: btVector3 normalColor(1, 1, 0); m_debugDrawer->drawLine(center, center + normal, normalColor); } - m_debugDrawer->drawLine(wv0, wv1, m_color); - m_debugDrawer->drawLine(wv1, wv2, m_color); - m_debugDrawer->drawLine(wv2, wv0, m_color); + m_debugDrawer->drawTriangle(wv0, wv1, wv2, m_color, 1.0); } }; From 546212b15892e6ae83e47e5bb1db9dfce7a15f3a Mon Sep 17 00:00:00 2001 From: erwin coumans Date: Mon, 22 Mar 2021 16:53:17 -0700 Subject: [PATCH 25/36] add mug obj --- .../gym/pybullet_data/objects/mug.obj | 1352 +++++++++++++++++ .../gym/pybullet_data/objects/mug.urdf | 28 + .../gym/pybullet_data/objects/mug_col.obj | 1310 ++++++++++++++++ 3 files changed, 2690 insertions(+) create mode 100644 examples/pybullet/gym/pybullet_data/objects/mug.obj create mode 100644 examples/pybullet/gym/pybullet_data/objects/mug.urdf create mode 100644 examples/pybullet/gym/pybullet_data/objects/mug_col.obj diff --git a/examples/pybullet/gym/pybullet_data/objects/mug.obj b/examples/pybullet/gym/pybullet_data/objects/mug.obj new file mode 100644 index 000000000..4fb8d9186 --- /dev/null +++ b/examples/pybullet/gym/pybullet_data/objects/mug.obj @@ -0,0 +1,1352 @@ +# Blender v2.79 (sub 0) OBJ File: 'mug.blend' +# www.blender.org +o mug_Cylinder.002 +v 0.000000 0.000000 0.000000 +v 0.000000 0.032649 0.008628 +v 0.000000 -0.000000 0.008628 +v 0.008450 0.031536 0.008628 +v 0.016324 0.028275 0.008628 +v 0.023086 0.023086 0.008628 +v 0.028275 0.016324 0.008628 +v 0.031536 0.008450 0.008628 +v 0.032649 0.000000 0.008628 +v 0.031536 -0.008450 0.008628 +v 0.028275 -0.016324 0.008628 +v 0.023086 -0.023086 0.008628 +v 0.016324 -0.028275 0.008628 +v 0.008450 -0.031536 0.008628 +v 0.000000 -0.032649 0.008628 +v -0.008450 -0.031536 0.008628 +v -0.016324 -0.028275 0.008628 +v -0.023086 -0.023086 0.008628 +v -0.028275 -0.016324 0.008628 +v -0.031536 -0.008450 0.008628 +v -0.032649 -0.000000 0.008628 +v -0.031536 0.008450 0.008628 +v -0.028275 0.016324 0.008628 +v -0.023086 0.023086 0.008628 +v -0.016324 0.028275 0.008628 +v -0.008450 0.031536 0.008628 +v 0.000000 0.041000 0.097171 +v 0.000000 0.038146 0.100000 +v 0.000000 0.040164 0.099171 +v 0.009873 0.036846 0.100000 +v 0.010612 0.039603 0.097171 +v 0.010395 0.038796 0.099171 +v 0.019073 0.033036 0.100000 +v 0.020500 0.035507 0.097171 +v 0.020082 0.034783 0.099171 +v 0.026973 0.026973 0.100000 +v 0.028991 0.028991 0.097171 +v 0.028400 0.028400 0.099171 +v 0.033036 0.019073 0.100000 +v 0.035507 0.020500 0.097171 +v 0.034783 0.020082 0.099171 +v 0.036846 0.009873 0.100000 +v 0.039603 0.010612 0.097171 +v 0.038796 0.010395 0.099171 +v 0.038146 0.000000 0.100000 +v 0.041000 0.000000 0.097171 +v 0.040164 0.000000 0.099171 +v 0.036846 -0.009873 0.100000 +v 0.039603 -0.010612 0.097171 +v 0.038796 -0.010395 0.099171 +v 0.033036 -0.019073 0.100000 +v 0.035507 -0.020500 0.097171 +v 0.034783 -0.020082 0.099171 +v 0.026974 -0.026973 0.100000 +v 0.028991 -0.028991 0.097171 +v 0.028400 -0.028400 0.099171 +v 0.019073 -0.033036 0.100000 +v 0.020500 -0.035507 0.097171 +v 0.020082 -0.034783 0.099171 +v 0.009873 -0.036846 0.100000 +v 0.010612 -0.039603 0.097171 +v 0.010395 -0.038796 0.099171 +v 0.000000 -0.038146 0.100000 +v 0.000000 -0.041000 0.097171 +v 0.000000 -0.040164 0.099171 +v -0.009873 -0.036846 0.100000 +v -0.010612 -0.039603 0.097171 +v -0.010395 -0.038796 0.099171 +v -0.019073 -0.033036 0.100000 +v -0.020500 -0.035507 0.097171 +v -0.020082 -0.034783 0.099171 +v -0.026973 -0.026974 0.100000 +v -0.028991 -0.028991 0.097171 +v -0.028400 -0.028400 0.099171 +v -0.033036 -0.019073 0.100000 +v -0.035507 -0.020500 0.097171 +v -0.034783 -0.020082 0.099171 +v -0.036846 -0.009873 0.100000 +v -0.039603 -0.010612 0.097171 +v -0.038796 -0.010395 0.099171 +v -0.038146 -0.000000 0.100000 +v -0.041000 -0.000000 0.097171 +v -0.040164 -0.000000 0.099171 +v -0.036846 0.009873 0.100000 +v -0.039603 0.010612 0.097171 +v -0.038796 0.010395 0.099171 +v -0.033036 0.019073 0.100000 +v -0.035507 0.020500 0.097171 +v -0.034783 0.020082 0.099171 +v -0.026974 0.026973 0.100000 +v -0.028991 0.028991 0.097171 +v -0.028400 0.028400 0.099171 +v -0.019073 0.033036 0.100000 +v -0.020500 0.035507 0.097171 +v -0.020082 0.034783 0.099171 +v -0.009873 0.036846 0.100000 +v -0.010612 0.039603 0.097171 +v -0.010395 0.038796 0.099171 +v 0.000000 0.035502 0.100000 +v 0.000000 0.032649 0.097171 +v 0.000000 0.033484 0.099171 +v 0.008450 0.031536 0.097171 +v 0.009189 0.034293 0.100000 +v 0.008666 0.032344 0.099171 +v 0.016324 0.028275 0.097171 +v 0.017751 0.030746 0.100000 +v 0.016742 0.028998 0.099171 +v 0.023086 0.023086 0.097171 +v 0.025104 0.025104 0.100000 +v 0.023677 0.023677 0.099171 +v 0.028275 0.016324 0.097171 +v 0.030746 0.017751 0.100000 +v 0.028998 0.016742 0.099171 +v 0.031536 0.008450 0.097171 +v 0.034293 0.009189 0.100000 +v 0.032344 0.008666 0.099171 +v 0.032649 0.000000 0.097171 +v 0.035502 0.000000 0.100000 +v 0.033484 0.000000 0.099171 +v 0.031536 -0.008450 0.097171 +v 0.034293 -0.009189 0.100000 +v 0.032344 -0.008666 0.099171 +v 0.028275 -0.016324 0.097171 +v 0.030746 -0.017751 0.100000 +v 0.028998 -0.016742 0.099171 +v 0.023086 -0.023086 0.097171 +v 0.025104 -0.025104 0.100000 +v 0.023677 -0.023677 0.099171 +v 0.016324 -0.028275 0.097171 +v 0.017751 -0.030746 0.100000 +v 0.016742 -0.028998 0.099171 +v 0.008450 -0.031536 0.097171 +v 0.009189 -0.034293 0.100000 +v 0.008666 -0.032343 0.099171 +v 0.000000 -0.032649 0.097171 +v 0.000000 -0.035502 0.100000 +v 0.000000 -0.033484 0.099171 +v -0.008450 -0.031536 0.097171 +v -0.009189 -0.034293 0.100000 +v -0.008666 -0.032344 0.099171 +v -0.016324 -0.028275 0.097171 +v -0.017751 -0.030746 0.100000 +v -0.016742 -0.028998 0.099171 +v -0.023086 -0.023086 0.097171 +v -0.025104 -0.025104 0.100000 +v -0.023677 -0.023677 0.099171 +v -0.028275 -0.016324 0.097171 +v -0.030746 -0.017751 0.100000 +v -0.028998 -0.016742 0.099171 +v -0.031536 -0.008450 0.097171 +v -0.034293 -0.009189 0.100000 +v -0.032343 -0.008666 0.099171 +v -0.032649 -0.000000 0.097171 +v -0.035502 -0.000000 0.100000 +v -0.033484 -0.000000 0.099171 +v -0.031536 0.008450 0.097171 +v -0.034293 0.009189 0.100000 +v -0.032344 0.008666 0.099171 +v -0.028275 0.016324 0.097171 +v -0.030746 0.017751 0.100000 +v -0.028998 0.016742 0.099171 +v -0.023086 0.023086 0.097171 +v -0.025104 0.025104 0.100000 +v -0.023677 0.023677 0.099171 +v -0.016324 0.028275 0.097171 +v -0.017751 0.030746 0.100000 +v -0.016742 0.028998 0.099171 +v -0.008450 0.031536 0.097171 +v -0.009189 0.034293 0.100000 +v -0.008666 0.032344 0.099171 +v 0.000000 0.039460 0.000000 +v 0.000000 0.041000 0.001527 +v 0.000000 0.040549 0.000447 +v 0.010612 0.039603 0.001527 +v 0.010213 0.038116 0.000000 +v 0.010495 0.039167 0.000447 +v 0.020500 0.035507 0.001527 +v 0.019730 0.034174 0.000000 +v 0.020275 0.035116 0.000447 +v 0.028991 0.028991 0.001527 +v 0.027903 0.027903 0.000000 +v 0.028672 0.028672 0.000447 +v 0.035507 0.020500 0.001527 +v 0.034174 0.019730 0.000000 +v 0.035116 0.020275 0.000447 +v 0.039603 0.010612 0.001527 +v 0.038116 0.010213 0.000000 +v 0.039167 0.010495 0.000447 +v 0.041000 0.000000 0.001527 +v 0.039460 0.000000 0.000000 +v 0.040549 0.000000 0.000447 +v 0.039603 -0.010612 0.001527 +v 0.038116 -0.010213 0.000000 +v 0.039167 -0.010495 0.000447 +v 0.035507 -0.020500 0.001527 +v 0.034174 -0.019730 0.000000 +v 0.035116 -0.020275 0.000447 +v 0.028991 -0.028991 0.001527 +v 0.027903 -0.027903 0.000000 +v 0.028672 -0.028672 0.000447 +v 0.020500 -0.035507 0.001527 +v 0.019730 -0.034174 0.000000 +v 0.020275 -0.035116 0.000447 +v 0.010612 -0.039603 0.001527 +v 0.010213 -0.038116 0.000000 +v 0.010495 -0.039167 0.000447 +v 0.000000 -0.041000 0.001527 +v 0.000000 -0.039460 0.000000 +v 0.000000 -0.040549 0.000447 +v -0.010612 -0.039603 0.001527 +v -0.010213 -0.038116 0.000000 +v -0.010495 -0.039167 0.000447 +v -0.020500 -0.035507 0.001527 +v -0.019730 -0.034174 0.000000 +v -0.020274 -0.035116 0.000447 +v -0.028991 -0.028991 0.001527 +v -0.027903 -0.027903 0.000000 +v -0.028672 -0.028672 0.000447 +v -0.035507 -0.020500 0.001527 +v -0.034174 -0.019730 0.000000 +v -0.035116 -0.020275 0.000447 +v -0.039603 -0.010612 0.001527 +v -0.038116 -0.010213 0.000000 +v -0.039167 -0.010495 0.000447 +v -0.041000 -0.000000 0.001527 +v -0.039460 -0.000000 0.000000 +v -0.040549 -0.000000 0.000447 +v -0.039603 0.010612 0.001527 +v -0.038116 0.010213 0.000000 +v -0.039167 0.010495 0.000447 +v -0.035507 0.020500 0.001527 +v -0.034174 0.019730 0.000000 +v -0.035116 0.020274 0.000447 +v -0.028991 0.028991 0.001527 +v -0.027903 0.027903 0.000000 +v -0.028673 0.028672 0.000447 +v -0.020500 0.035507 0.001527 +v -0.019730 0.034174 0.000000 +v -0.020275 0.035116 0.000447 +v -0.010612 0.039603 0.001527 +v -0.010213 0.038116 0.000000 +v -0.010495 0.039167 0.000447 +v -0.003627 0.038527 0.081890 +v -0.005507 0.038527 0.080294 +v -0.005059 0.038527 0.081441 +v 0.005507 0.038527 0.080294 +v 0.003627 0.038527 0.081890 +v 0.005059 0.038527 0.081441 +v -0.003600 0.080633 0.059432 +v -0.005474 0.079067 0.059309 +v -0.005036 0.080199 0.059398 +v -0.005474 0.056411 0.081965 +v -0.003600 0.056534 0.083531 +v -0.005036 0.056500 0.083097 +v -0.005477 0.077925 0.066460 +v -0.003600 0.079455 0.066958 +v -0.005046 0.079026 0.066818 +v -0.005477 0.074748 0.072697 +v -0.003600 0.076049 0.073642 +v -0.005046 0.075684 0.073377 +v -0.005477 0.069799 0.077646 +v -0.003600 0.070744 0.078947 +v -0.005046 0.070479 0.078582 +v -0.005477 0.063562 0.080823 +v -0.003600 0.064059 0.082353 +v -0.005046 0.063920 0.081924 +v 0.003600 0.056534 0.083531 +v 0.005474 0.056411 0.081965 +v 0.005036 0.056500 0.083097 +v 0.005474 0.079067 0.059309 +v 0.003600 0.080633 0.059432 +v 0.005036 0.080199 0.059398 +v 0.003600 0.064059 0.082353 +v 0.005477 0.063562 0.080823 +v 0.005046 0.063920 0.081924 +v 0.003600 0.070744 0.078947 +v 0.005477 0.069799 0.077646 +v 0.005046 0.070479 0.078582 +v 0.003600 0.076049 0.073642 +v 0.005477 0.074748 0.072697 +v 0.005046 0.075684 0.073377 +v 0.003600 0.079455 0.066958 +v 0.005477 0.077925 0.066460 +v 0.005046 0.079026 0.066818 +v -0.003631 0.038527 0.018578 +v -0.005510 0.038527 0.020185 +v -0.005068 0.038527 0.019031 +v 0.003631 0.038527 0.018578 +v 0.005510 0.038527 0.020185 +v 0.005068 0.038527 0.019031 +v -0.003599 0.080629 0.050000 +v -0.005471 0.079081 0.050000 +v -0.005023 0.080207 0.050000 +v 0.005471 0.079081 0.050000 +v 0.003599 0.080629 0.050000 +v 0.005023 0.080207 0.050000 +v -0.005474 0.079067 0.040691 +v -0.003600 0.080633 0.040568 +v -0.005036 0.080199 0.040602 +v -0.003600 0.056534 0.016469 +v -0.005474 0.056411 0.018035 +v -0.005036 0.056500 0.016903 +v -0.003600 0.079455 0.033042 +v -0.005477 0.077925 0.033540 +v -0.005046 0.079026 0.033182 +v -0.003600 0.076049 0.026358 +v -0.005477 0.074748 0.027303 +v -0.005046 0.075684 0.026623 +v -0.003600 0.070744 0.021053 +v -0.005477 0.069799 0.022354 +v -0.005046 0.070479 0.021418 +v -0.003600 0.064059 0.017647 +v -0.005477 0.063562 0.019177 +v -0.005046 0.063920 0.018076 +v 0.005474 0.056411 0.018035 +v 0.003600 0.056534 0.016469 +v 0.005036 0.056500 0.016903 +v 0.003600 0.080633 0.040568 +v 0.005474 0.079067 0.040691 +v 0.005036 0.080199 0.040602 +v 0.005477 0.063562 0.019177 +v 0.003600 0.064059 0.017647 +v 0.005046 0.063920 0.018076 +v 0.005477 0.069799 0.022354 +v 0.003600 0.070744 0.021053 +v 0.005046 0.070479 0.021418 +v 0.005477 0.074748 0.027303 +v 0.003600 0.076049 0.026358 +v 0.005046 0.075684 0.026623 +v 0.005477 0.077925 0.033540 +v 0.003600 0.079455 0.033042 +v 0.005046 0.079026 0.033182 +v 0.003628 0.038527 0.070184 +v 0.005471 0.038527 0.072262 +v 0.004983 0.038527 0.070850 +v -0.003627 0.038527 0.070184 +v -0.005471 0.038527 0.072267 +v -0.004983 0.038527 0.070852 +v -0.005472 0.075182 0.050000 +v -0.003602 0.073666 0.050000 +v -0.005029 0.074082 0.050000 +v 0.003602 0.073666 0.050000 +v 0.005472 0.075177 0.050000 +v 0.005030 0.074081 0.050000 +v 0.005464 0.074276 0.065273 +v 0.003594 0.072835 0.064794 +v 0.004992 0.073209 0.064919 +v 0.003600 0.073692 0.058871 +v 0.005468 0.075191 0.059001 +v 0.005015 0.074095 0.058907 +v -0.005468 0.075196 0.059001 +v -0.003599 0.073692 0.058871 +v -0.005014 0.074096 0.058907 +v -0.003593 0.072835 0.064794 +v -0.005464 0.074281 0.065274 +v -0.004991 0.073210 0.064919 +v 0.005464 0.071645 0.070442 +v 0.003594 0.070415 0.069549 +v 0.004994 0.070735 0.069781 +v -0.003593 0.070415 0.069549 +v -0.005464 0.071649 0.070445 +v -0.004993 0.070735 0.069782 +v 0.005464 0.067544 0.074543 +v 0.003594 0.066651 0.073313 +v 0.004994 0.066883 0.073633 +v -0.003593 0.066650 0.073313 +v -0.005464 0.067547 0.074547 +v -0.004993 0.066884 0.073634 +v 0.005464 0.062374 0.077175 +v 0.003594 0.061896 0.075733 +v 0.004992 0.062021 0.076107 +v -0.003593 0.061896 0.075733 +v -0.005464 0.062376 0.077179 +v -0.004991 0.062021 0.076108 +v 0.005468 0.056103 0.078090 +v 0.003600 0.055974 0.076590 +v 0.005015 0.056009 0.076993 +v -0.003599 0.055974 0.076590 +v -0.005468 0.056103 0.078095 +v -0.005014 0.056010 0.076994 +v 0.005472 0.038527 0.027531 +v 0.003627 0.038527 0.029560 +v 0.004985 0.038527 0.028916 +v -0.003626 0.038527 0.029560 +v -0.005472 0.038527 0.027526 +v -0.004984 0.038527 0.028915 +v 0.003594 0.072835 0.035206 +v 0.005464 0.074276 0.034727 +v 0.004992 0.073209 0.035081 +v 0.005468 0.075191 0.040999 +v 0.003600 0.073692 0.041129 +v 0.005015 0.074095 0.041093 +v -0.003599 0.073692 0.041129 +v -0.005468 0.075196 0.040999 +v -0.005014 0.074096 0.041093 +v -0.005464 0.074281 0.034726 +v -0.003593 0.072835 0.035206 +v -0.004991 0.073210 0.035081 +v 0.003594 0.070415 0.030451 +v 0.005464 0.071645 0.029558 +v 0.004994 0.070735 0.030219 +v -0.005464 0.071649 0.029555 +v -0.003593 0.070415 0.030451 +v -0.004993 0.070735 0.030218 +v 0.003594 0.066651 0.026687 +v 0.005464 0.067544 0.025457 +v 0.004994 0.066883 0.026367 +v -0.005464 0.067547 0.025453 +v -0.003593 0.066650 0.026687 +v -0.004993 0.066884 0.026366 +v 0.003594 0.061896 0.024267 +v 0.005464 0.062374 0.022825 +v 0.004992 0.062021 0.023893 +v -0.005464 0.062376 0.022821 +v -0.003593 0.061896 0.024267 +v -0.004991 0.062021 0.023892 +v 0.003600 0.055974 0.023410 +v 0.005468 0.056103 0.021910 +v 0.005015 0.056009 0.023007 +v -0.005468 0.056103 0.021905 +v -0.003599 0.055974 0.023410 +v -0.005014 0.056010 0.023006 +v -0.005477 0.045795 0.081957 +v -0.003603 0.045916 0.083535 +v -0.005045 0.045879 0.083093 +v 0.005477 0.045795 0.081957 +v 0.003603 0.045916 0.083535 +v 0.005045 0.045879 0.083093 +v -0.003608 0.045257 0.076495 +v -0.005460 0.045676 0.078027 +v -0.004995 0.045382 0.076898 +v 0.003609 0.045257 0.076495 +v 0.005460 0.045676 0.078022 +v 0.004996 0.045381 0.076897 +v -0.003604 0.045959 0.016460 +v -0.005478 0.045808 0.018049 +v -0.005052 0.045914 0.016909 +v 0.003604 0.045959 0.016460 +v 0.005478 0.045808 0.018049 +v 0.005052 0.045914 0.016909 +v -0.005460 0.045677 0.021971 +v -0.003608 0.045270 0.023501 +v -0.004995 0.045392 0.023098 +v 0.005460 0.045677 0.021977 +v 0.003608 0.045270 0.023501 +v 0.004996 0.045392 0.023099 +vn -0.2539 0.9477 -0.1935 +vn -0.2539 0.9477 0.1935 +vn 0.0000 0.9811 0.1935 +vn 0.0000 0.9811 -0.1935 +vn 0.0000 0.0000 -1.0000 +vn -0.1478 0.1478 -0.9779 +vn -0.1045 0.1810 -0.9779 +vn 0.2539 0.9477 0.1935 +vn 0.2539 0.9477 -0.1935 +vn 0.4905 0.8496 0.1935 +vn 0.4905 0.8496 -0.1935 +vn -0.2090 0.0000 -0.9779 +vn -0.2019 0.0541 -0.9779 +vn 0.1045 0.1810 0.9779 +vn 0.0541 0.2019 0.9779 +vn -0.0461 -0.1719 0.9840 +vn -0.0890 -0.1541 0.9840 +vn 0.6937 0.6937 0.1935 +vn 0.6937 0.6937 -0.1935 +vn -0.1478 -0.1478 -0.9779 +vn -0.1810 -0.1045 -0.9779 +vn 0.1478 0.1478 0.9779 +vn -0.1258 -0.1258 0.9840 +vn 0.8496 0.4905 0.1935 +vn 0.8496 0.4905 -0.1935 +vn -0.0541 -0.2019 0.9779 +vn 0.0000 -0.2090 0.9779 +vn 0.0000 0.1780 0.9840 +vn 0.0461 0.1719 0.9840 +vn 0.1810 0.1045 0.9779 +vn -0.1541 -0.0890 0.9840 +vn 0.9477 0.2539 0.1935 +vn 0.9477 0.2539 -0.1935 +vn 0.1045 -0.1810 0.9779 +vn 0.1478 -0.1478 0.9779 +vn -0.1258 0.1258 0.9840 +vn -0.0890 0.1541 0.9840 +vn 0.2019 0.0541 0.9779 +vn -0.1719 -0.0461 0.9840 +vn 0.9811 0.0000 0.1935 +vn 0.9811 0.0000 -0.1935 +vn 0.2019 -0.0541 0.9779 +vn 0.2090 0.0000 0.9779 +vn -0.1780 0.0000 0.9840 +vn -0.1719 0.0461 0.9840 +vn 0.9477 -0.2539 0.1935 +vn 0.9477 -0.2539 -0.1935 +vn 0.1810 0.1045 -0.9779 +vn 0.2019 0.0541 -0.9779 +vn 0.1810 -0.1045 -0.9779 +vn 0.1478 -0.1478 -0.9779 +vn 0.8496 -0.4905 0.1935 +vn 0.8496 -0.4905 -0.1935 +vn 0.0541 0.2019 -0.9779 +vn 0.1045 0.1810 -0.9779 +vn 0.1810 -0.1045 0.9779 +vn -0.1541 0.0890 0.9840 +vn 0.6937 -0.6937 0.1935 +vn 0.6937 -0.6937 -0.1935 +vn -0.0541 0.2019 -0.9779 +vn 0.4905 -0.8496 0.1935 +vn 0.4905 -0.8496 -0.1935 +vn -0.1810 0.1045 -0.9779 +vn 0.0541 -0.2019 -0.9779 +vn 0.0000 -0.2090 -0.9779 +vn 0.2539 -0.9477 0.1935 +vn 0.2539 -0.9477 -0.1935 +vn -0.2019 -0.0541 -0.9779 +vn 0.0541 -0.2019 0.9779 +vn -0.0461 0.1719 0.9840 +vn 0.0000 -0.9811 0.1935 +vn 0.0000 -0.9811 -0.1935 +vn -0.0541 -0.2019 -0.9779 +vn -0.1045 -0.1810 -0.9779 +vn -0.2539 -0.9477 0.1935 +vn -0.2539 -0.9477 -0.1935 +vn 0.1045 -0.1810 -0.9779 +vn -0.4905 -0.8496 0.1935 +vn -0.4905 -0.8496 -0.1935 +vn 0.2019 -0.0541 -0.9779 +vn -0.1045 -0.1810 0.9779 +vn 0.0890 0.1541 0.9840 +vn -0.6937 -0.6937 0.1935 +vn -0.6937 -0.6937 -0.1935 +vn 0.2090 0.0000 -0.9779 +vn -0.1810 -0.1045 0.9779 +vn -0.1478 -0.1478 0.9779 +vn 0.1258 0.1258 0.9840 +vn 0.1541 0.0890 0.9840 +vn -0.8496 -0.4905 0.1935 +vn -0.8496 -0.4905 -0.1935 +vn 0.0000 0.2090 0.9779 +vn -0.0541 0.2019 0.9779 +vn 0.0461 -0.1719 0.9840 +vn 0.0000 -0.1780 0.9840 +vn -0.2019 -0.0541 0.9779 +vn 0.1719 0.0461 0.9840 +vn -0.9477 -0.2539 0.1935 +vn -0.9477 -0.2539 -0.1935 +vn -0.2090 0.0000 0.9779 +vn 0.1780 0.0000 0.9840 +vn -0.9811 0.0000 0.1935 +vn -0.9811 0.0000 -0.1935 +vn -0.2019 0.0541 0.9779 +vn 0.1719 -0.0461 0.9840 +vn -0.9477 0.2539 0.1935 +vn -0.9477 0.2539 -0.1935 +vn -0.1810 0.1045 0.9779 +vn 0.1541 -0.0890 0.9840 +vn -0.8496 0.4905 0.1935 +vn -0.8496 0.4905 -0.1935 +vn -0.1478 0.1478 0.9779 +vn 0.1258 -0.1258 0.9840 +vn -0.6937 0.6937 0.1935 +vn -0.6937 0.6937 -0.1935 +vn -0.1045 0.1810 0.9779 +vn 0.0890 -0.1541 0.9840 +vn -0.4905 0.8496 0.1935 +vn -0.4905 0.8496 -0.1935 +vn -0.2536 -0.9464 0.1998 +vn 0.0000 -0.9798 0.1998 +vn 0.0000 -0.7342 0.6789 +vn -0.1900 -0.7092 0.6789 +vn 0.0000 0.2090 -0.9779 +vn 0.1478 0.1478 -0.9779 +vn 0.2536 0.9464 0.1998 +vn 0.0000 0.9798 0.1998 +vn 0.0000 0.7342 0.6789 +vn 0.1900 0.7092 0.6789 +vn -0.6928 0.6928 0.1998 +vn -0.8485 0.4899 0.1998 +vn -0.6359 0.3671 0.6789 +vn -0.5192 0.5192 0.6789 +vn 0.8485 -0.4899 0.1998 +vn 0.9464 -0.2536 0.1998 +vn 0.7092 -0.1900 0.6789 +vn 0.6359 -0.3671 0.6789 +vn -0.9464 -0.2536 0.1998 +vn -0.8485 -0.4899 0.1998 +vn -0.6359 -0.3671 0.6789 +vn -0.7092 -0.1900 0.6789 +vn 0.8485 0.4899 0.1998 +vn 0.6928 0.6928 0.1998 +vn 0.5192 0.5192 0.6789 +vn 0.6359 0.3671 0.6789 +vn -0.2536 0.9464 0.1998 +vn -0.1900 0.7092 0.6789 +vn 0.2536 -0.9464 0.1998 +vn 0.4899 -0.8485 0.1998 +vn 0.3671 -0.6359 0.6789 +vn 0.1900 -0.7092 0.6789 +vn -0.9464 0.2536 0.1998 +vn -0.7092 0.1900 0.6789 +vn 0.9798 0.0000 0.1998 +vn 0.7342 0.0000 0.6789 +vn -0.6928 -0.6928 0.1998 +vn -0.5192 -0.5192 0.6789 +vn 0.4899 0.8485 0.1998 +vn 0.3671 0.6359 0.6789 +vn -0.4899 0.8485 0.1998 +vn -0.3671 0.6359 0.6789 +vn 0.6928 -0.6928 0.1998 +vn 0.5192 -0.5192 0.6789 +vn -0.9798 0.0000 0.1998 +vn -0.7342 0.0000 0.6789 +vn 0.9464 0.2536 0.1998 +vn 0.7092 0.1900 0.6789 +vn -0.4899 -0.8485 0.1998 +vn -0.3671 -0.6359 0.6789 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.7203 0.6937 +vn 0.1864 0.6957 0.6937 +vn 0.3601 0.6238 0.6937 +vn 0.5093 0.5093 0.6937 +vn 0.6238 0.3601 0.6937 +vn 0.6957 0.1864 0.6937 +vn 0.7203 0.0000 0.6937 +vn 0.6957 -0.1864 0.6937 +vn 0.6238 -0.3601 0.6937 +vn 0.5093 -0.5093 0.6937 +vn 0.3601 -0.6238 0.6937 +vn 0.1864 -0.6957 0.6937 +vn 0.0000 -0.7203 0.6937 +vn -0.1864 -0.6957 0.6937 +vn -0.3601 -0.6238 0.6937 +vn -0.5093 -0.5093 0.6937 +vn -0.6238 -0.3601 0.6937 +vn -0.6957 -0.1864 0.6937 +vn -0.7203 0.0000 0.6937 +vn -0.6957 0.1864 0.6937 +vn -0.6238 0.3601 0.6937 +vn -0.5093 0.5093 0.6937 +vn -0.3601 0.6238 0.6937 +vn -0.1864 0.6957 0.6937 +vn 0.0000 -0.6882 0.7255 +vn -0.1781 -0.6648 0.7255 +vn -0.3441 -0.5960 0.7255 +vn -0.4866 -0.4866 0.7255 +vn -0.5960 -0.3441 0.7255 +vn -0.6648 -0.1781 0.7255 +vn -0.6882 0.0000 0.7255 +vn -0.6648 0.1781 0.7255 +vn -0.5960 0.3441 0.7255 +vn -0.4866 0.4866 0.7255 +vn -0.3441 0.5960 0.7255 +vn -0.1781 0.6648 0.7255 +vn 0.0000 0.6882 0.7255 +vn 0.1781 0.6648 0.7255 +vn 0.3441 0.5960 0.7255 +vn 0.4866 0.4866 0.7255 +vn 0.5960 0.3441 0.7255 +vn 0.6648 0.1781 0.7255 +vn 0.6882 0.0000 0.7255 +vn 0.6648 -0.1781 0.7255 +vn 0.5960 -0.3441 0.7255 +vn 0.4866 -0.4866 0.7255 +vn 0.3441 -0.5960 0.7255 +vn 0.1781 -0.6648 0.7255 +vn 0.1864 0.6957 -0.6937 +vn 0.0000 0.7203 -0.6937 +vn 0.3601 0.6238 -0.6937 +vn 0.5093 0.5093 -0.6937 +vn 0.6238 0.3601 -0.6937 +vn 0.6957 0.1864 -0.6937 +vn 0.7203 0.0000 -0.6937 +vn 0.6957 -0.1864 -0.6937 +vn 0.6238 -0.3601 -0.6937 +vn 0.5093 -0.5093 -0.6937 +vn 0.3601 -0.6238 -0.6937 +vn 0.1864 -0.6957 -0.6937 +vn 0.0000 -0.7203 -0.6937 +vn -0.1864 -0.6957 -0.6937 +vn -0.3601 -0.6238 -0.6937 +vn -0.5093 -0.5093 -0.6937 +vn -0.6238 -0.3601 -0.6937 +vn -0.6957 -0.1864 -0.6937 +vn -0.7203 0.0000 -0.6937 +vn -0.6957 0.1864 -0.6937 +vn -0.6238 0.3601 -0.6937 +vn -0.5093 0.5093 -0.6937 +vn -0.3601 0.6238 -0.6937 +vn -0.1864 0.6957 -0.6937 +vn 0.9873 -0.0316 0.1558 +vn 0.9365 0.2263 -0.2680 +vn 0.9869 0.0385 -0.1568 +vn 0.9807 -0.0226 0.1941 +vn -0.9809 0.0597 0.1849 +vn -0.9841 -0.0538 -0.1691 +vn -0.9822 -0.0130 -0.1871 +vn -0.9820 0.0147 0.1883 +vn -0.9826 0.1857 0.0000 +vn -0.9812 -0.1929 0.0000 +vn -0.9825 -0.1859 -0.0129 +vn -0.9815 0.1907 0.0146 +vn -0.9809 0.1849 0.0597 +vn -0.9841 -0.1691 -0.0538 +vn -0.9838 -0.1451 -0.1054 +vn -0.9812 0.1562 0.1134 +vn -0.9838 -0.1054 -0.1451 +vn -0.9812 0.1134 0.1562 +vn 0.1468 0.0770 0.9861 +vn -0.1468 0.0770 0.9861 +vn -0.1455 -0.1062 0.9836 +vn 0.1455 -0.1062 0.9836 +vn 0.9802 -0.0302 -0.1954 +vn 0.9866 0.0386 0.1584 +vn 0.9385 0.2178 0.2678 +vn 0.9884 -0.0388 -0.1467 +vn -0.9815 0.1907 -0.0146 +vn -0.9825 -0.1859 0.0129 +vn -0.9809 0.1849 -0.0597 +vn -0.9841 -0.1691 0.0538 +vn -0.9812 0.1562 -0.1134 +vn -0.9838 -0.1451 0.1054 +vn -0.9812 0.1134 -0.1562 +vn -0.9838 -0.1054 0.1451 +vn -0.9809 0.0597 -0.1849 +vn -0.9841 -0.0538 0.1691 +vn 0.1472 0.0772 -0.9861 +vn 0.1452 -0.1337 -0.9803 +vn -0.1452 -0.1337 -0.9803 +vn -0.1472 0.0772 -0.9861 +vn -0.1399 -0.9901 0.0000 +vn -0.1397 -0.9877 0.0698 +vn 0.1394 -0.9878 0.0698 +vn 0.1395 -0.9902 0.0000 +vn 0.1394 -0.9878 -0.0698 +vn 0.1398 -0.9438 -0.2995 +vn -0.1401 -0.9438 -0.2994 +vn -0.1397 -0.9877 -0.0698 +vn 0.1391 -0.8012 -0.5819 +vn -0.1395 -0.8012 -0.5819 +vn 0.1391 -0.5819 -0.8012 +vn -0.1395 -0.5819 -0.8012 +vn 0.1398 -0.2995 -0.9438 +vn -0.1402 -0.2994 -0.9437 +vn 0.1393 -0.0667 -0.9880 +vn -0.1396 -0.0667 -0.9879 +vn 0.1446 0.3836 -0.9121 +vn -0.1450 0.3836 -0.9120 +vn -0.1401 -0.9438 0.2994 +vn 0.1398 -0.9438 0.2995 +vn -0.1395 -0.8012 0.5819 +vn 0.1391 -0.8012 0.5819 +vn -0.1395 -0.5819 0.8012 +vn 0.1391 -0.5819 0.8012 +vn -0.1401 -0.2994 0.9437 +vn 0.1398 -0.2995 0.9438 +vn -0.1396 -0.0670 0.9879 +vn 0.1392 -0.0670 0.9880 +vn -0.1444 0.3729 0.9165 +vn 0.1440 0.3729 0.9166 +vn -0.9884 -0.0388 -0.1467 +vn -0.9387 0.2175 0.2674 +vn -0.9867 0.0385 0.1581 +vn -0.9802 -0.0302 -0.1954 +vn 0.9812 0.1562 0.1135 +vn 0.9837 -0.1454 -0.1056 +vn 0.9840 -0.1694 -0.0539 +vn 0.9809 0.1849 0.0597 +vn 0.9821 0.0148 -0.1877 +vn 0.9821 -0.0130 0.1876 +vn 0.9812 0.1135 -0.1562 +vn 0.9837 -0.1056 0.1454 +vn 0.9840 -0.0539 0.1694 +vn 0.9809 0.0597 -0.1849 +vn 0.1485 0.5813 0.8000 +vn -0.1485 0.5813 0.8000 +vn -0.1478 0.3049 0.9408 +vn 0.1478 0.3049 0.9408 +vn 0.1478 0.3049 -0.9408 +vn -0.1478 0.3049 -0.9408 +vn -0.9821 0.0148 -0.1877 +vn -0.9822 -0.0130 0.1873 +vn 0.9812 0.1135 0.1562 +vn 0.9837 -0.1056 -0.1454 +vn 0.9826 0.1857 0.0000 +vn 0.9811 -0.1932 0.0000 +vn 0.9824 -0.1862 0.0130 +vn 0.9815 0.1907 -0.0146 +vn 0.9820 0.0147 0.1884 +vn 0.9822 -0.0130 -0.1874 +vn 0.9840 -0.0539 -0.1694 +vn 0.9809 0.0597 0.1849 +vn 0.1478 0.9408 -0.3049 +vn 0.1485 0.8000 -0.5813 +vn -0.1485 0.8000 -0.5813 +vn -0.1478 0.9408 -0.3049 +vn -0.9807 -0.0226 0.1941 +vn -0.9869 0.0384 -0.1565 +vn -0.9366 0.2260 -0.2676 +vn -0.9873 -0.0316 0.1558 +vn 0.1123 0.6749 -0.7293 +vn -0.1126 0.6749 -0.7292 +vn -0.1448 0.9894 0.0000 +vn 0.1448 0.9894 0.0000 +vn 0.1456 0.9864 -0.0767 +vn -0.1456 0.9864 -0.0767 +vn 0.1485 0.5813 -0.8000 +vn -0.1485 0.5813 -0.8000 +vn 0.9815 0.1907 0.0146 +vn 0.9824 -0.1862 -0.0130 +vn 0.9809 0.1849 -0.0597 +vn 0.9840 -0.1694 0.0539 +vn 0.9837 -0.1454 0.1056 +vn 0.9812 0.1562 -0.1135 +vn -0.1456 0.9864 0.0767 +vn 0.1456 0.9864 0.0767 +vn -0.1484 -0.2151 0.9652 +vn 0.1484 -0.2151 0.9652 +vn 0.1485 0.8000 0.5813 +vn -0.1485 0.8000 0.5813 +vn -0.1478 0.9408 0.3049 +vn 0.1478 0.9408 0.3049 +vn -0.1134 0.6594 0.7432 +vn 0.1131 0.6594 0.7432 +vn 0.1475 -0.2713 -0.9511 +vn -0.1475 -0.2713 -0.9511 +vn 0.6697 0.7404 0.0575 +vn 0.6653 0.7103 0.2300 +vn -0.6653 0.7103 0.2300 +vn -0.6697 0.7404 0.0575 +vn 0.6664 0.6031 0.4382 +vn -0.6664 0.6031 0.4382 +vn 0.6664 0.4382 0.6031 +vn -0.6664 0.4382 0.6031 +vn 0.6653 0.2300 0.7103 +vn -0.6653 0.2300 0.7103 +vn 0.6718 0.0577 0.7385 +vn -0.6718 0.0577 0.7385 +vn -0.6767 0.7362 0.0000 +vn -0.6652 -0.0813 0.7422 +vn 0.7048 -0.1535 0.6926 +vn 0.6652 -0.0813 0.7422 +vn 0.6767 0.7362 0.0000 +vn 0.6697 0.7404 -0.0575 +vn 0.6653 0.7103 -0.2300 +vn -0.6653 0.7103 -0.2300 +vn -0.6697 0.7404 -0.0575 +vn 0.6664 0.6031 -0.4382 +vn -0.6664 0.6031 -0.4382 +vn 0.6664 0.4382 -0.6031 +vn -0.6664 0.4382 -0.6031 +vn 0.6653 0.2300 -0.7103 +vn -0.6653 0.2300 -0.7103 +vn 0.6724 0.0579 -0.7378 +vn -0.6724 0.0579 -0.7378 +vn -0.6623 -0.1034 -0.7421 +vn 0.7106 -0.1924 -0.6768 +vn 0.6623 -0.1034 -0.7421 +vn 0.6762 -0.7349 -0.0517 +vn 0.6870 -0.6926 -0.2197 +vn -0.6876 -0.6921 -0.2195 +vn -0.6767 -0.7344 -0.0517 +vn 0.6854 -0.5892 -0.4279 +vn -0.6859 -0.5888 -0.4276 +vn 0.6854 -0.4279 -0.5892 +vn -0.6859 -0.4276 -0.5888 +vn 0.6870 -0.2197 -0.6926 +vn -0.6876 -0.2195 -0.6921 +vn 0.6761 -0.0500 -0.7350 +vn -0.6767 -0.0500 -0.7345 +vn -0.6685 -0.7437 0.0000 +vn -0.6990 0.2732 -0.6608 +vn 0.4884 0.5826 -0.6496 +vn 0.6985 0.2735 -0.6613 +vn 0.6680 -0.7442 0.0000 +vn 0.6762 -0.7349 0.0517 +vn 0.6870 -0.6926 0.2197 +vn -0.6876 -0.6921 0.2195 +vn -0.6767 -0.7344 0.0517 +vn 0.6854 -0.5892 0.4279 +vn -0.6859 -0.5888 0.4276 +vn 0.6854 -0.4279 0.5892 +vn -0.6859 -0.4276 0.5888 +vn 0.6870 -0.2197 0.6926 +vn -0.6876 -0.2195 0.6921 +vn 0.6760 -0.0501 0.7352 +vn -0.6765 -0.0501 0.7347 +vn -0.6982 0.2655 0.6648 +vn 0.4946 0.5670 0.6587 +vn 0.6977 0.2658 0.6653 +vn -0.7048 -0.1535 0.6926 +vn -0.4891 0.5823 -0.6494 +vn -0.7106 -0.1924 -0.6768 +vn -0.4952 0.5667 0.6584 +s 1 +f 240//1 97//2 27//3 172//4 +f 1//5 235//6 238//7 +f 172//4 27//3 31//8 174//9 +f 174//9 31//8 34//10 177//11 +f 1//5 226//12 229//13 +f 33//14 30//15 103//16 106//17 +f 177//11 34//10 37//18 180//19 +f 1//5 217//20 220//21 +f 36//22 33//14 106//17 109//23 +f 180//19 37//18 40//24 183//25 +f 66//26 63//27 136//28 139//29 +f 39//30 36//22 109//23 112//31 +f 183//25 40//24 43//32 186//33 +f 57//34 54//35 127//36 130//37 +f 42//38 39//30 112//31 115//39 +f 186//33 43//32 46//40 189//41 +f 48//42 45//43 118//44 121//45 +f 45//43 42//38 115//39 118//44 +f 189//41 46//40 49//46 192//47 +f 1//5 184//48 187//49 +f 1//5 196//50 199//51 +f 192//47 49//46 52//52 195//53 +f 1//5 175//54 178//55 +f 51//56 48//42 121//45 124//57 +f 195//53 52//52 55//58 198//59 +f 1//5 238//7 241//60 +f 54//35 51//56 124//57 127//36 +f 198//59 55//58 58//61 201//62 +f 1//5 229//13 232//63 +f 1//5 205//64 208//65 +f 201//62 58//61 61//66 204//67 +f 1//5 220//21 223//68 +f 60//69 57//34 130//37 133//70 +f 204//67 61//66 64//71 207//72 +f 1//5 211//73 214//74 +f 63//27 60//69 133//70 136//28 +f 207//72 64//71 67//75 210//76 +f 1//5 202//77 205//64 +f 1//5 214//74 217//20 +f 210//76 67//75 70//78 213//79 +f 1//5 193//80 196//50 +f 69//81 66//26 139//29 142//82 +f 213//79 70//78 73//83 216//84 +f 1//5 187//49 190//85 +f 75//86 72//87 145//88 148//89 +f 216//84 73//83 76//90 219//91 +f 28//92 96//93 169//94 99//95 +f 78//96 75//86 148//89 151//97 +f 219//91 76//90 79//98 222//99 +f 81//100 78//96 151//97 154//101 +f 222//99 79//98 82//102 225//103 +f 1//5 232//63 235//6 +f 84//104 81//100 154//101 157//105 +f 225//103 82//102 85//106 228//107 +f 1//5 223//68 226//12 +f 87//108 84//104 157//105 160//109 +f 228//107 85//106 88//110 231//111 +f 72//87 69//81 142//82 145//88 +f 90//112 87//108 160//109 163//113 +f 231//111 88//110 91//114 234//115 +f 1//5 208//65 211//73 +f 93//116 90//112 163//113 166//117 +f 234//115 91//114 94//118 237//119 +f 1//5 199//51 202//77 +f 96//93 93//116 166//117 169//94 +f 237//119 94//118 97//2 240//1 +f 1//5 190//85 193//80 +f 102//120 100//121 2//122 4//123 +f 1//5 171//124 175//54 +f 1//5 181//125 184//48 +f 1//5 178//55 181//125 +f 138//126 135//127 15//128 16//129 +f 126//130 123//131 11//132 12//133 +f 159//134 156//135 22//136 23//137 +f 114//138 111//139 7//140 8//141 +f 147//142 144//143 18//144 19//145 +f 135//127 132//146 14//147 15//128 +f 168//148 165//149 25//150 26//151 +f 123//131 120//152 10//153 11//132 +f 156//135 153//154 21//155 22//136 +f 111//139 108//156 6//157 7//140 +f 144//143 141//158 17//159 18//144 +f 132//146 129//160 13//161 14//147 +f 165//149 162//162 24//163 25//150 +f 120//152 117//164 9//165 10//153 +f 153//154 150//166 20//167 21//155 +f 108//156 105//168 5//169 6//157 +f 141//158 138//126 16//129 17//159 +f 129//160 126//130 12//133 13//161 +f 162//162 159//134 23//137 24//163 +f 117//164 114//138 8//141 9//165 +f 105//168 102//120 4//123 5//169 +f 150//166 147//142 19//145 20//167 +f 100//121 168//148 26//151 2//122 +f 3//170 4//123 2//122 +f 3//170 5//169 4//123 +f 3//170 6//157 5//169 +f 3//170 7//140 6//157 +f 3//170 8//141 7//140 +f 3//170 9//165 8//141 +f 3//170 10//153 9//165 +f 3//170 11//132 10//153 +f 3//170 12//133 11//132 +f 3//170 13//161 12//133 +f 3//170 14//147 13//161 +f 3//170 15//128 14//147 +f 3//170 16//129 15//128 +f 3//170 17//159 16//129 +f 3//170 18//144 17//159 +f 3//170 19//145 18//144 +f 3//170 20//167 19//145 +f 3//170 21//155 20//167 +f 3//170 22//136 21//155 +f 3//170 23//137 22//136 +f 3//170 24//163 23//137 +f 3//170 25//150 24//163 +f 3//170 26//151 25//150 +f 3//170 2//122 26//151 +f 31//8 27//3 29//171 32//172 +f 32//172 29//171 28//92 30//15 +f 34//10 31//8 32//172 35//173 +f 35//173 32//172 30//15 33//14 +f 37//18 34//10 35//173 38//174 +f 38//174 35//173 33//14 36//22 +f 40//24 37//18 38//174 41//175 +f 41//175 38//174 36//22 39//30 +f 43//32 40//24 41//175 44//176 +f 44//176 41//175 39//30 42//38 +f 46//40 43//32 44//176 47//177 +f 47//177 44//176 42//38 45//43 +f 49//46 46//40 47//177 50//178 +f 50//178 47//177 45//43 48//42 +f 52//52 49//46 50//178 53//179 +f 53//179 50//178 48//42 51//56 +f 55//58 52//52 53//179 56//180 +f 56//180 53//179 51//56 54//35 +f 58//61 55//58 56//180 59//181 +f 59//181 56//180 54//35 57//34 +f 61//66 58//61 59//181 62//182 +f 62//182 59//181 57//34 60//69 +f 64//71 61//66 62//182 65//183 +f 65//183 62//182 60//69 63//27 +f 67//75 64//71 65//183 68//184 +f 68//184 65//183 63//27 66//26 +f 70//78 67//75 68//184 71//185 +f 71//185 68//184 66//26 69//81 +f 73//83 70//78 71//185 74//186 +f 74//186 71//185 69//81 72//87 +f 76//90 73//83 74//186 77//187 +f 77//187 74//186 72//87 75//86 +f 79//98 76//90 77//187 80//188 +f 80//188 77//187 75//86 78//96 +f 82//102 79//98 80//188 83//189 +f 83//189 80//188 78//96 81//100 +f 85//106 82//102 83//189 86//190 +f 86//190 83//189 81//100 84//104 +f 88//110 85//106 86//190 89//191 +f 89//191 86//190 84//104 87//108 +f 91//114 88//110 89//191 92//192 +f 92//192 89//191 87//108 90//112 +f 94//118 91//114 92//192 95//193 +f 95//193 92//192 90//112 93//116 +f 97//2 94//118 95//193 98//194 +f 98//194 95//193 93//116 96//93 +f 27//3 97//2 98//194 29//171 +f 29//171 98//194 96//93 28//92 +f 103//16 99//95 101//195 104//196 +f 104//196 101//195 100//121 102//120 +f 106//17 103//16 104//196 107//197 +f 107//197 104//196 102//120 105//168 +f 109//23 106//17 107//197 110//198 +f 110//198 107//197 105//168 108//156 +f 112//31 109//23 110//198 113//199 +f 113//199 110//198 108//156 111//139 +f 115//39 112//31 113//199 116//200 +f 116//200 113//199 111//139 114//138 +f 118//44 115//39 116//200 119//201 +f 119//201 116//200 114//138 117//164 +f 121//45 118//44 119//201 122//202 +f 122//202 119//201 117//164 120//152 +f 124//57 121//45 122//202 125//203 +f 125//203 122//202 120//152 123//131 +f 127//36 124//57 125//203 128//204 +f 128//204 125//203 123//131 126//130 +f 130//37 127//36 128//204 131//205 +f 131//205 128//204 126//130 129//160 +f 133//70 130//37 131//205 134//206 +f 134//206 131//205 129//160 132//146 +f 136//28 133//70 134//206 137//207 +f 137//207 134//206 132//146 135//127 +f 139//29 136//28 137//207 140//208 +f 140//208 137//207 135//127 138//126 +f 142//82 139//29 140//208 143//209 +f 143//209 140//208 138//126 141//158 +f 145//88 142//82 143//209 146//210 +f 146//210 143//209 141//158 144//143 +f 148//89 145//88 146//210 149//211 +f 149//211 146//210 144//143 147//142 +f 151//97 148//89 149//211 152//212 +f 152//212 149//211 147//142 150//166 +f 154//101 151//97 152//212 155//213 +f 155//213 152//212 150//166 153//154 +f 157//105 154//101 155//213 158//214 +f 158//214 155//213 153//154 156//135 +f 160//109 157//105 158//214 161//215 +f 161//215 158//214 156//135 159//134 +f 163//113 160//109 161//215 164//216 +f 164//216 161//215 159//134 162//162 +f 166//117 163//113 164//216 167//217 +f 167//217 164//216 162//162 165//149 +f 169//94 166//117 167//217 170//218 +f 170//218 167//217 165//149 168//148 +f 99//95 169//94 170//218 101//195 +f 101//195 170//218 168//148 100//121 +f 30//15 28//92 99//95 103//16 +f 172//4 174//9 176//219 173//220 +f 173//220 176//219 175//54 171//124 +f 174//9 177//11 179//221 176//219 +f 176//219 179//221 178//55 175//54 +f 177//11 180//19 182//222 179//221 +f 179//221 182//222 181//125 178//55 +f 180//19 183//25 185//223 182//222 +f 182//222 185//223 184//48 181//125 +f 183//25 186//33 188//224 185//223 +f 185//223 188//224 187//49 184//48 +f 186//33 189//41 191//225 188//224 +f 188//224 191//225 190//85 187//49 +f 189//41 192//47 194//226 191//225 +f 191//225 194//226 193//80 190//85 +f 192//47 195//53 197//227 194//226 +f 194//226 197//227 196//50 193//80 +f 195//53 198//59 200//228 197//227 +f 197//227 200//228 199//51 196//50 +f 198//59 201//62 203//229 200//228 +f 200//228 203//229 202//77 199//51 +f 201//62 204//67 206//230 203//229 +f 203//229 206//230 205//64 202//77 +f 204//67 207//72 209//231 206//230 +f 206//230 209//231 208//65 205//64 +f 207//72 210//76 212//232 209//231 +f 209//231 212//232 211//73 208//65 +f 210//76 213//79 215//233 212//232 +f 212//232 215//233 214//74 211//73 +f 213//79 216//84 218//234 215//233 +f 215//233 218//234 217//20 214//74 +f 216//84 219//91 221//235 218//234 +f 218//234 221//235 220//21 217//20 +f 219//91 222//99 224//236 221//235 +f 221//235 224//236 223//68 220//21 +f 222//99 225//103 227//237 224//236 +f 224//236 227//237 226//12 223//68 +f 225//103 228//107 230//238 227//237 +f 227//237 230//238 229//13 226//12 +f 228//107 231//111 233//239 230//238 +f 230//238 233//239 232//63 229//13 +f 231//111 234//115 236//240 233//239 +f 233//239 236//240 235//6 232//63 +f 234//115 237//119 239//241 236//240 +f 236//240 239//241 238//7 235//6 +f 237//119 240//1 242//242 239//241 +f 239//241 242//242 241//60 238//7 +f 240//1 172//4 173//220 242//242 +f 242//242 173//220 171//124 241//60 +f 1//5 241//60 171//124 +f 246//243 334//244 433//245 426//246 +f 264//247 373//248 379//249 252//250 +f 292//251 339//252 351//253 250//254 +f 255//255 355//256 361//257 258//258 +f 258//258 361//257 367//259 261//260 +f 261//260 367//259 373//248 264//247 +f 267//261 253//262 424//263 427//264 +f 439//265 444//266 381//267 289//268 +f 297//269 394//270 339//252 292//251 +f 304//271 396//272 394//270 297//269 +f 307//273 402//274 396//272 304//271 +f 310//275 408//276 402//274 307//273 +f 313//277 414//278 408//276 310//275 +f 316//279 438//280 435//281 300//282 +f 340//283 393//284 391//285 342//286 +f 348//287 346//288 354//289 352//290 +f 346//288 358//291 360//292 354//289 +f 358//291 364//293 366//294 360//292 +f 364//293 370//295 372//296 366//294 +f 370//295 376//297 378//298 372//296 +f 376//297 432//299 429//300 378//298 +f 391//285 393//284 397//301 387//302 +f 340//283 342//286 348//287 352//290 +f 387//302 397//301 403//303 399//304 +f 399//304 403//303 409//305 405//306 +f 405//306 409//305 415//307 411//308 +f 411//308 415//307 421//309 417//310 +f 417//310 421//309 442//311 445//312 +f 286//313 385//314 441//315 436//316 +f 280//317 357//318 345//319 283//320 +f 315//321 418//322 444//266 439//265 +f 324//323 406//324 412//325 321//326 +f 276//327 262//328 265//329 273//330 +f 322//331 316//279 300//282 312//332 +f 301//333 420//334 414//278 313//277 +f 277//335 363//336 357//318 280//317 +f 294//337 343//338 390//339 319//340 +f 268//341 375//342 369//343 274//344 +f 331//345 328//346 306//347 303//348 +f 423//349 430//350 337//351 244//352 +f 432//299 333//353 336//354 429//300 +f 291//355 295//356 318//357 298//358 +f 328//346 325//359 309//360 306//347 +f 426//246 433//245 375//342 268//341 +f 318//357 331//345 303//348 298//358 +f 270//361 349//362 343//338 294//337 +f 273//330 265//329 253//262 267//261 +f 330//363 388//364 400//365 327//366 +f 291//355 249//367 271//368 295//356 +f 325//359 322//331 312//332 309//360 +f 250//254 351//253 355//256 255//255 +f 427//264 424//263 243//369 247//370 +f 327//366 400//365 406//324 324//323 +f 283//320 345//319 349//362 270//361 +f 279//371 259//372 262//328 276//327 +f 321//326 412//325 418//322 315//321 +f 274//344 369//343 363//336 277//335 +f 271//368 249//367 256//373 282//374 +f 282//374 256//373 259//372 279//371 +f 445//312 442//311 384//375 382//376 +f 252//250 379//249 430//350 423//349 +f 319//340 390//339 388//364 330//363 +f 438//280 288//377 285//378 435//281 +f 436//316 441//315 420//334 301//333 +f 283//320 270//361 272//379 284//380 +f 284//380 272//379 271//368 282//374 +f 250//254 255//255 257//381 251//382 +f 251//382 257//381 256//373 249//367 +f 280//317 283//320 284//380 281//383 +f 281//383 284//380 282//374 279//371 +f 255//255 258//258 260//384 257//381 +f 257//381 260//384 259//372 256//373 +f 277//335 280//317 281//383 278//385 +f 278//385 281//383 279//371 276//327 +f 258//258 261//260 263//386 260//384 +f 260//384 263//386 262//328 259//372 +f 274//344 277//335 278//385 275//387 +f 275//387 278//385 276//327 273//330 +f 261//260 264//247 266//388 263//386 +f 263//386 266//388 265//329 262//328 +f 268//341 274//344 275//387 269//389 +f 269//389 275//387 273//330 267//261 +f 264//247 252//250 254//390 266//388 +f 266//388 254//390 253//262 265//329 +f 249//367 291//355 293//391 251//382 +f 251//382 293//391 292//251 250//254 +f 424//263 253//262 254//390 425//392 +f 425//392 254//390 252//250 423//349 +f 427//264 247//370 248//393 428//394 +f 428//394 248//393 246//243 426//246 +f 295//356 271//368 272//379 296//395 +f 296//395 272//379 270//361 294//337 +f 331//345 318//357 320//396 332//397 +f 332//397 320//396 319//340 330//363 +f 298//358 303//348 305//398 299//399 +f 299//399 305//398 304//271 297//269 +f 328//346 331//345 332//397 329//400 +f 329//400 332//397 330//363 327//366 +f 303//348 306//347 308//401 305//398 +f 305//398 308//401 307//273 304//271 +f 325//359 328//346 329//400 326//402 +f 326//402 329//400 327//366 324//323 +f 306//347 309//360 311//403 308//401 +f 308//401 311//403 310//275 307//273 +f 322//331 325//359 326//402 323//404 +f 323//404 326//402 324//323 321//326 +f 309//360 312//332 314//405 311//403 +f 311//403 314//405 313//277 310//275 +f 316//279 322//331 323//404 317//406 +f 317//406 323//404 321//326 315//321 +f 312//332 300//282 302//407 314//405 +f 314//405 302//407 301//333 313//277 +f 297//269 292//251 293//391 299//399 +f 299//399 293//391 291//355 298//358 +f 436//316 301//333 302//407 437//408 +f 437//408 302//407 300//282 435//281 +f 439//265 289//268 290//409 440//410 +f 440//410 290//409 288//377 438//280 +f 294//337 319//340 320//396 296//395 +f 296//395 320//396 318//357 295//356 +f 346//288 348//287 350//411 347//412 +f 347//412 350//411 349//362 345//319 +f 352//290 354//289 356//413 353//414 +f 353//414 356//413 355//256 351//253 +f 358//291 346//288 347//412 359//415 +f 359//415 347//412 345//319 357//318 +f 354//289 360//292 362//416 356//413 +f 356//413 362//416 361//257 355//256 +f 364//293 358//291 359//415 365//417 +f 365//417 359//415 357//318 363//336 +f 360//292 366//294 368//418 362//416 +f 362//416 368//418 367//259 361//257 +f 370//295 364//293 365//417 371//419 +f 371//419 365//417 363//336 369//343 +f 366//294 372//296 374//420 368//418 +f 368//418 374//420 373//248 367//259 +f 376//297 370//295 371//419 377//421 +f 377//421 371//419 369//343 375//342 +f 372//296 378//298 380//422 374//420 +f 374//420 380//422 379//249 373//248 +f 351//253 339//252 341//423 353//414 +f 353//414 341//423 340//283 352//290 +f 430//350 379//249 380//422 431//424 +f 431//424 380//422 378//298 429//300 +f 433//245 334//244 335//425 434//426 +f 434//426 335//425 333//353 432//299 +f 343//338 349//362 350//411 344//427 +f 344//427 350//411 348//287 342//286 +f 388//364 390//339 392//428 389//429 +f 389//429 392//428 391//285 387//302 +f 394//270 396//272 398//430 395//431 +f 395//431 398//430 397//301 393//284 +f 400//365 388//364 389//429 401//432 +f 401//432 389//429 387//302 399//304 +f 396//272 402//274 404//433 398//430 +f 398//430 404//433 403//303 397//301 +f 406//324 400//365 401//432 407//434 +f 407//434 401//432 399//304 405//306 +f 402//274 408//276 410//435 404//433 +f 404//433 410//435 409//305 403//303 +f 412//325 406//324 407//434 413//436 +f 413//436 407//434 405//306 411//308 +f 408//276 414//278 416//437 410//435 +f 410//435 416//437 415//307 409//305 +f 418//322 412//325 413//436 419//438 +f 419//438 413//436 411//308 417//310 +f 414//278 420//334 422//439 416//437 +f 416//437 422//439 421//309 415//307 +f 393//284 340//283 341//423 395//431 +f 395//431 341//423 339//252 394//270 +f 442//311 421//309 422//439 443//440 +f 443//440 422//439 420//334 441//315 +f 445//312 382//376 383//441 446//442 +f 446//442 383//441 381//267 444//266 +f 342//286 391//285 392//428 344//427 +f 344//427 392//428 390//339 343//338 +f 243//369 424//263 425//392 245//443 +f 245//443 425//392 423//349 244//352 +f 267//261 427//264 428//394 269//389 +f 269//389 428//394 426//246 268//341 +f 337//351 430//350 431//424 338//444 +f 338//444 431//424 429//300 336//354 +f 375//342 433//245 434//426 377//421 +f 377//421 434//426 432//299 376//297 +f 286//313 436//316 437//408 287//445 +f 287//445 437//408 435//281 285//378 +f 315//321 439//265 440//410 317//406 +f 317//406 440//410 438//280 316//279 +f 384//375 442//311 443//440 386//446 +f 386//446 443//440 441//315 385//314 +f 417//310 445//312 446//442 419//438 +f 419//438 446//442 444//266 418//322 diff --git a/examples/pybullet/gym/pybullet_data/objects/mug.urdf b/examples/pybullet/gym/pybullet_data/objects/mug.urdf new file mode 100644 index 000000000..ab105ea54 --- /dev/null +++ b/examples/pybullet/gym/pybullet_data/objects/mug.urdf @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/pybullet/gym/pybullet_data/objects/mug_col.obj b/examples/pybullet/gym/pybullet_data/objects/mug_col.obj new file mode 100644 index 000000000..4d56449df --- /dev/null +++ b/examples/pybullet/gym/pybullet_data/objects/mug_col.obj @@ -0,0 +1,1310 @@ +# Blender v2.79 (sub 0) OBJ File: 'mug.blend' +# www.blender.org +o mug_col_Cylinder.003 +v 0.000000 0.000000 0.000000 +v 0.000000 0.041000 0.097171 +v 0.000000 0.038146 0.100000 +v 0.000000 0.040164 0.099171 +v 0.009873 0.036846 0.100000 +v 0.010612 0.039603 0.097171 +v 0.010395 0.038796 0.099171 +v 0.019073 0.033036 0.100000 +v 0.020500 0.035507 0.097171 +v 0.020082 0.034783 0.099171 +v 0.026973 0.026973 0.100000 +v 0.028991 0.028991 0.097171 +v 0.028400 0.028400 0.099171 +v 0.033036 0.019073 0.100000 +v 0.035507 0.020500 0.097171 +v 0.034783 0.020082 0.099171 +v 0.036846 0.009873 0.100000 +v 0.039603 0.010612 0.097171 +v 0.038796 0.010395 0.099171 +v 0.038146 0.000000 0.100000 +v 0.041000 0.000000 0.097171 +v 0.040164 0.000000 0.099171 +v 0.036846 -0.009873 0.100000 +v 0.039603 -0.010612 0.097171 +v 0.038796 -0.010395 0.099171 +v 0.033036 -0.019073 0.100000 +v 0.035507 -0.020500 0.097171 +v 0.034783 -0.020082 0.099171 +v 0.026974 -0.026973 0.100000 +v 0.028991 -0.028991 0.097171 +v 0.028400 -0.028400 0.099171 +v 0.019073 -0.033036 0.100000 +v 0.020500 -0.035507 0.097171 +v 0.020082 -0.034783 0.099171 +v 0.009873 -0.036846 0.100000 +v 0.010612 -0.039603 0.097171 +v 0.010395 -0.038796 0.099171 +v 0.000000 -0.038146 0.100000 +v 0.000000 -0.041000 0.097171 +v 0.000000 -0.040164 0.099171 +v -0.009873 -0.036846 0.100000 +v -0.010612 -0.039603 0.097171 +v -0.010395 -0.038796 0.099171 +v -0.019073 -0.033036 0.100000 +v -0.020500 -0.035507 0.097171 +v -0.020082 -0.034783 0.099171 +v -0.026973 -0.026974 0.100000 +v -0.028991 -0.028991 0.097171 +v -0.028400 -0.028400 0.099171 +v -0.033036 -0.019073 0.100000 +v -0.035507 -0.020500 0.097171 +v -0.034783 -0.020082 0.099171 +v -0.036846 -0.009873 0.100000 +v -0.039603 -0.010612 0.097171 +v -0.038796 -0.010395 0.099171 +v -0.038146 -0.000000 0.100000 +v -0.041000 -0.000000 0.097171 +v -0.040164 -0.000000 0.099171 +v -0.036846 0.009873 0.100000 +v -0.039603 0.010612 0.097171 +v -0.038796 0.010395 0.099171 +v -0.033036 0.019073 0.100000 +v -0.035507 0.020500 0.097171 +v -0.034783 0.020082 0.099171 +v -0.026974 0.026973 0.100000 +v -0.028991 0.028991 0.097171 +v -0.028400 0.028400 0.099171 +v -0.019073 0.033036 0.100000 +v -0.020500 0.035507 0.097171 +v -0.020082 0.034783 0.099171 +v -0.009873 0.036846 0.100000 +v -0.010612 0.039603 0.097171 +v -0.010395 0.038796 0.099171 +v 0.000000 -0.000000 0.100000 +v 0.000000 0.039460 0.000000 +v 0.000000 0.041000 0.001527 +v 0.000000 0.040549 0.000447 +v 0.010612 0.039603 0.001527 +v 0.010213 0.038116 0.000000 +v 0.010495 0.039167 0.000447 +v 0.020500 0.035507 0.001527 +v 0.019730 0.034174 0.000000 +v 0.020275 0.035116 0.000447 +v 0.028991 0.028991 0.001527 +v 0.027903 0.027903 0.000000 +v 0.028672 0.028672 0.000447 +v 0.035507 0.020500 0.001527 +v 0.034174 0.019730 0.000000 +v 0.035116 0.020275 0.000447 +v 0.039603 0.010612 0.001527 +v 0.038116 0.010213 0.000000 +v 0.039167 0.010495 0.000447 +v 0.041000 0.000000 0.001527 +v 0.039460 0.000000 0.000000 +v 0.040549 0.000000 0.000447 +v 0.039603 -0.010612 0.001527 +v 0.038116 -0.010213 0.000000 +v 0.039167 -0.010495 0.000447 +v 0.035507 -0.020500 0.001527 +v 0.034174 -0.019730 0.000000 +v 0.035116 -0.020275 0.000447 +v 0.028991 -0.028991 0.001527 +v 0.027903 -0.027903 0.000000 +v 0.028672 -0.028672 0.000447 +v 0.020500 -0.035507 0.001527 +v 0.019730 -0.034174 0.000000 +v 0.020275 -0.035116 0.000447 +v 0.010612 -0.039603 0.001527 +v 0.010213 -0.038116 0.000000 +v 0.010495 -0.039167 0.000447 +v 0.000000 -0.041000 0.001527 +v 0.000000 -0.039460 0.000000 +v 0.000000 -0.040549 0.000447 +v -0.010612 -0.039603 0.001527 +v -0.010213 -0.038116 0.000000 +v -0.010495 -0.039167 0.000447 +v -0.020500 -0.035507 0.001527 +v -0.019730 -0.034174 0.000000 +v -0.020274 -0.035116 0.000447 +v -0.028991 -0.028991 0.001527 +v -0.027903 -0.027903 0.000000 +v -0.028672 -0.028672 0.000447 +v -0.035507 -0.020500 0.001527 +v -0.034174 -0.019730 0.000000 +v -0.035116 -0.020275 0.000447 +v -0.039603 -0.010612 0.001527 +v -0.038116 -0.010213 0.000000 +v -0.039167 -0.010495 0.000447 +v -0.041000 -0.000000 0.001527 +v -0.039460 -0.000000 0.000000 +v -0.040549 -0.000000 0.000447 +v -0.039603 0.010612 0.001527 +v -0.038116 0.010213 0.000000 +v -0.039167 0.010495 0.000447 +v -0.035507 0.020500 0.001527 +v -0.034174 0.019730 0.000000 +v -0.035116 0.020274 0.000447 +v -0.028991 0.028991 0.001527 +v -0.027903 0.027903 0.000000 +v -0.028673 0.028672 0.000447 +v -0.020500 0.035507 0.001527 +v -0.019730 0.034174 0.000000 +v -0.020275 0.035116 0.000447 +v -0.010612 0.039603 0.001527 +v -0.010213 0.038116 0.000000 +v -0.010495 0.039167 0.000447 +vn -0.2539 0.9477 -0.1935 +vn -0.2539 0.9477 0.1935 +vn 0.0000 0.9811 0.1935 +vn 0.0000 0.9811 -0.1935 +vn 0.0000 0.0000 -1.0000 +vn -0.1478 0.1478 -0.9779 +vn -0.1045 0.1810 -0.9779 +vn 0.2539 0.9477 0.1935 +vn 0.2539 0.9477 -0.1935 +vn 0.4905 0.8496 0.1935 +vn 0.4905 0.8496 -0.1935 +vn -0.2090 0.0000 -0.9779 +vn -0.2019 0.0541 -0.9779 +vn 0.6937 0.6937 0.1935 +vn 0.6937 0.6937 -0.1935 +vn -0.1478 -0.1478 -0.9779 +vn -0.1810 -0.1045 -0.9779 +vn 0.8496 0.4905 0.1935 +vn 0.8496 0.4905 -0.1935 +vn 0.9477 0.2539 0.1935 +vn 0.9477 0.2539 -0.1935 +vn 0.9811 0.0000 0.1935 +vn 0.9811 0.0000 -0.1935 +vn 0.9477 -0.2539 0.1935 +vn 0.9477 -0.2539 -0.1935 +vn 0.1810 0.1045 -0.9779 +vn 0.2019 0.0541 -0.9779 +vn 0.1810 -0.1045 -0.9779 +vn 0.1478 -0.1478 -0.9779 +vn 0.8496 -0.4905 0.1935 +vn 0.8496 -0.4905 -0.1935 +vn 0.0541 0.2019 -0.9779 +vn 0.1045 0.1810 -0.9779 +vn 0.6937 -0.6937 0.1935 +vn 0.6937 -0.6937 -0.1935 +vn -0.0541 0.2019 -0.9779 +vn 0.4905 -0.8496 0.1935 +vn 0.4905 -0.8496 -0.1935 +vn -0.1810 0.1045 -0.9779 +vn 0.0541 -0.2019 -0.9779 +vn 0.0000 -0.2090 -0.9779 +vn 0.2539 -0.9477 0.1935 +vn 0.2539 -0.9477 -0.1935 +vn -0.2019 -0.0541 -0.9779 +vn 0.0000 -0.9811 0.1935 +vn 0.0000 -0.9811 -0.1935 +vn -0.0541 -0.2019 -0.9779 +vn -0.1045 -0.1810 -0.9779 +vn -0.2539 -0.9477 0.1935 +vn -0.2539 -0.9477 -0.1935 +vn 0.1045 -0.1810 -0.9779 +vn -0.4905 -0.8496 0.1935 +vn -0.4905 -0.8496 -0.1935 +vn 0.2019 -0.0541 -0.9779 +vn -0.6937 -0.6937 0.1935 +vn -0.6937 -0.6937 -0.1935 +vn 0.2090 0.0000 -0.9779 +vn -0.8496 -0.4905 0.1935 +vn -0.8496 -0.4905 -0.1935 +vn -0.9477 -0.2539 0.1935 +vn -0.9477 -0.2539 -0.1935 +vn -0.9811 0.0000 0.1935 +vn -0.9811 0.0000 -0.1935 +vn -0.9477 0.2539 0.1935 +vn -0.9477 0.2539 -0.1935 +vn -0.8496 0.4905 0.1935 +vn -0.8496 0.4905 -0.1935 +vn -0.6937 0.6937 0.1935 +vn -0.6937 0.6937 -0.1935 +vn -0.4905 0.8496 0.1935 +vn -0.4905 0.8496 -0.1935 +vn 0.0000 0.2090 -0.9779 +vn 0.1478 0.1478 -0.9779 +vn 0.0000 0.7203 0.6937 +vn 0.1864 0.6957 0.6937 +vn 0.0000 0.2090 0.9779 +vn 0.0541 0.2019 0.9779 +vn 0.3601 0.6238 0.6937 +vn 0.1045 0.1810 0.9779 +vn 0.5093 0.5093 0.6937 +vn 0.1478 0.1478 0.9779 +vn 0.6238 0.3601 0.6937 +vn 0.1810 0.1045 0.9779 +vn 0.6957 0.1864 0.6937 +vn 0.2019 0.0541 0.9779 +vn 0.7203 0.0000 0.6937 +vn 0.2090 0.0000 0.9779 +vn 0.6957 -0.1864 0.6937 +vn 0.2019 -0.0541 0.9779 +vn 0.6238 -0.3601 0.6937 +vn 0.1810 -0.1045 0.9779 +vn 0.5093 -0.5093 0.6937 +vn 0.1478 -0.1478 0.9779 +vn 0.3601 -0.6238 0.6937 +vn 0.1045 -0.1810 0.9779 +vn 0.1864 -0.6957 0.6937 +vn 0.0541 -0.2019 0.9779 +vn 0.0000 -0.7203 0.6937 +vn 0.0000 -0.2090 0.9779 +vn -0.1864 -0.6957 0.6937 +vn -0.0541 -0.2019 0.9779 +vn -0.3601 -0.6238 0.6937 +vn -0.1045 -0.1810 0.9779 +vn -0.5093 -0.5093 0.6937 +vn -0.1478 -0.1478 0.9779 +vn -0.6238 -0.3601 0.6937 +vn -0.1810 -0.1045 0.9779 +vn -0.6957 -0.1864 0.6937 +vn -0.2019 -0.0541 0.9779 +vn -0.7203 0.0000 0.6937 +vn -0.2090 0.0000 0.9779 +vn -0.6957 0.1864 0.6937 +vn -0.2019 0.0541 0.9779 +vn -0.6238 0.3601 0.6937 +vn -0.1810 0.1045 0.9779 +vn -0.5093 0.5093 0.6937 +vn -0.1478 0.1478 0.9779 +vn -0.3601 0.6238 0.6937 +vn -0.1045 0.1810 0.9779 +vn -0.1864 0.6957 0.6937 +vn -0.0541 0.2019 0.9779 +vn 0.0000 0.0000 1.0000 +vn 0.1864 0.6957 -0.6937 +vn 0.0000 0.7203 -0.6937 +vn 0.3601 0.6238 -0.6937 +vn 0.5093 0.5093 -0.6937 +vn 0.6238 0.3601 -0.6937 +vn 0.6957 0.1864 -0.6937 +vn 0.7203 0.0000 -0.6937 +vn 0.6957 -0.1864 -0.6937 +vn 0.6238 -0.3601 -0.6937 +vn 0.5093 -0.5093 -0.6937 +vn 0.3601 -0.6238 -0.6937 +vn 0.1864 -0.6957 -0.6937 +vn 0.0000 -0.7203 -0.6937 +vn -0.1864 -0.6957 -0.6937 +vn -0.3601 -0.6238 -0.6937 +vn -0.5093 -0.5093 -0.6937 +vn -0.6238 -0.3601 -0.6937 +vn -0.6957 -0.1864 -0.6937 +vn -0.7203 0.0000 -0.6937 +vn -0.6957 0.1864 -0.6937 +vn -0.6238 0.3601 -0.6937 +vn -0.5093 0.5093 -0.6937 +vn -0.3601 0.6238 -0.6937 +vn -0.1864 0.6957 -0.6937 +s 1 +f 144//1 72//2 2//3 76//4 +f 1//5 139//6 142//7 +f 76//4 2//3 6//8 78//9 +f 78//9 6//8 9//10 81//11 +f 1//5 130//12 133//13 +f 81//11 9//10 12//14 84//15 +f 1//5 121//16 124//17 +f 84//15 12//14 15//18 87//19 +f 87//19 15//18 18//20 90//21 +f 90//21 18//20 21//22 93//23 +f 93//23 21//22 24//24 96//25 +f 1//5 88//26 91//27 +f 1//5 100//28 103//29 +f 96//25 24//24 27//30 99//31 +f 1//5 79//32 82//33 +f 99//31 27//30 30//34 102//35 +f 1//5 142//7 145//36 +f 102//35 30//34 33//37 105//38 +f 1//5 133//13 136//39 +f 1//5 109//40 112//41 +f 105//38 33//37 36//42 108//43 +f 1//5 124//17 127//44 +f 108//43 36//42 39//45 111//46 +f 1//5 115//47 118//48 +f 111//46 39//45 42//49 114//50 +f 1//5 106//51 109//40 +f 1//5 118//48 121//16 +f 114//50 42//49 45//52 117//53 +f 1//5 97//54 100//28 +f 117//53 45//52 48//55 120//56 +f 1//5 91//27 94//57 +f 120//56 48//55 51//58 123//59 +f 123//59 51//58 54//60 126//61 +f 126//61 54//60 57//62 129//63 +f 1//5 136//39 139//6 +f 129//63 57//62 60//64 132//65 +f 1//5 127//44 130//12 +f 132//65 60//64 63//66 135//67 +f 135//67 63//66 66//68 138//69 +f 1//5 112//41 115//47 +f 138//69 66//68 69//70 141//71 +f 1//5 103//29 106//51 +f 141//71 69//70 72//2 144//1 +f 1//5 94//57 97//54 +f 1//5 75//72 79//32 +f 1//5 85//73 88//26 +f 1//5 82//33 85//73 +f 6//8 2//3 4//74 7//75 +f 7//75 4//74 3//76 5//77 +f 9//10 6//8 7//75 10//78 +f 10//78 7//75 5//77 8//79 +f 12//14 9//10 10//78 13//80 +f 13//80 10//78 8//79 11//81 +f 15//18 12//14 13//80 16//82 +f 16//82 13//80 11//81 14//83 +f 18//20 15//18 16//82 19//84 +f 19//84 16//82 14//83 17//85 +f 21//22 18//20 19//84 22//86 +f 22//86 19//84 17//85 20//87 +f 24//24 21//22 22//86 25//88 +f 25//88 22//86 20//87 23//89 +f 27//30 24//24 25//88 28//90 +f 28//90 25//88 23//89 26//91 +f 30//34 27//30 28//90 31//92 +f 31//92 28//90 26//91 29//93 +f 33//37 30//34 31//92 34//94 +f 34//94 31//92 29//93 32//95 +f 36//42 33//37 34//94 37//96 +f 37//96 34//94 32//95 35//97 +f 39//45 36//42 37//96 40//98 +f 40//98 37//96 35//97 38//99 +f 42//49 39//45 40//98 43//100 +f 43//100 40//98 38//99 41//101 +f 45//52 42//49 43//100 46//102 +f 46//102 43//100 41//101 44//103 +f 48//55 45//52 46//102 49//104 +f 49//104 46//102 44//103 47//105 +f 51//58 48//55 49//104 52//106 +f 52//106 49//104 47//105 50//107 +f 54//60 51//58 52//106 55//108 +f 55//108 52//106 50//107 53//109 +f 57//62 54//60 55//108 58//110 +f 58//110 55//108 53//109 56//111 +f 60//64 57//62 58//110 61//112 +f 61//112 58//110 56//111 59//113 +f 63//66 60//64 61//112 64//114 +f 64//114 61//112 59//113 62//115 +f 66//68 63//66 64//114 67//116 +f 67//116 64//114 62//115 65//117 +f 69//70 66//68 67//116 70//118 +f 70//118 67//116 65//117 68//119 +f 72//2 69//70 70//118 73//120 +f 73//120 70//118 68//119 71//121 +f 2//3 72//2 73//120 4//74 +f 4//74 73//120 71//121 3//76 +f 20//87 17//85 74//122 +f 11//81 8//79 74//122 +f 3//76 71//121 74//122 +f 68//119 65//117 74//122 +f 59//113 56//111 74//122 +f 50//107 47//105 74//122 +f 41//101 38//99 74//122 +f 32//95 29//93 74//122 +f 23//89 20//87 74//122 +f 14//83 11//81 74//122 +f 5//77 3//76 74//122 +f 71//121 68//119 74//122 +f 62//115 59//113 74//122 +f 53//109 50//107 74//122 +f 44//103 41//101 74//122 +f 35//97 32//95 74//122 +f 26//91 23//89 74//122 +f 17//85 14//83 74//122 +f 8//79 5//77 74//122 +f 65//117 62//115 74//122 +f 56//111 53//109 74//122 +f 47//105 44//103 74//122 +f 38//99 35//97 74//122 +f 29//93 26//91 74//122 +f 76//4 78//9 80//123 77//124 +f 77//124 80//123 79//32 75//72 +f 78//9 81//11 83//125 80//123 +f 80//123 83//125 82//33 79//32 +f 81//11 84//15 86//126 83//125 +f 83//125 86//126 85//73 82//33 +f 84//15 87//19 89//127 86//126 +f 86//126 89//127 88//26 85//73 +f 87//19 90//21 92//128 89//127 +f 89//127 92//128 91//27 88//26 +f 90//21 93//23 95//129 92//128 +f 92//128 95//129 94//57 91//27 +f 93//23 96//25 98//130 95//129 +f 95//129 98//130 97//54 94//57 +f 96//25 99//31 101//131 98//130 +f 98//130 101//131 100//28 97//54 +f 99//31 102//35 104//132 101//131 +f 101//131 104//132 103//29 100//28 +f 102//35 105//38 107//133 104//132 +f 104//132 107//133 106//51 103//29 +f 105//38 108//43 110//134 107//133 +f 107//133 110//134 109//40 106//51 +f 108//43 111//46 113//135 110//134 +f 110//134 113//135 112//41 109//40 +f 111//46 114//50 116//136 113//135 +f 113//135 116//136 115//47 112//41 +f 114//50 117//53 119//137 116//136 +f 116//136 119//137 118//48 115//47 +f 117//53 120//56 122//138 119//137 +f 119//137 122//138 121//16 118//48 +f 120//56 123//59 125//139 122//138 +f 122//138 125//139 124//17 121//16 +f 123//59 126//61 128//140 125//139 +f 125//139 128//140 127//44 124//17 +f 126//61 129//63 131//141 128//140 +f 128//140 131//141 130//12 127//44 +f 129//63 132//65 134//142 131//141 +f 131//141 134//142 133//13 130//12 +f 132//65 135//67 137//143 134//142 +f 134//142 137//143 136//39 133//13 +f 135//67 138//69 140//144 137//143 +f 137//143 140//144 139//6 136//39 +f 138//69 141//71 143//145 140//144 +f 140//144 143//145 142//7 139//6 +f 141//71 144//1 146//146 143//145 +f 143//145 146//146 145//36 142//7 +f 144//1 76//4 77//124 146//146 +f 146//146 77//124 75//72 145//36 +f 1//5 145//36 75//72 +o handle_col.001_Cube.009 +v -0.003600 0.080633 0.059432 +v -0.005474 0.079067 0.059309 +v -0.005036 0.080199 0.059398 +v -0.005477 0.077925 0.066460 +v -0.003600 0.079455 0.066958 +v -0.005046 0.079026 0.066818 +v 0.005474 0.079067 0.059309 +v 0.003600 0.080633 0.059432 +v 0.005036 0.080199 0.059398 +v 0.003600 0.079455 0.066958 +v 0.005477 0.077925 0.066460 +v 0.005046 0.079026 0.066818 +v -0.003599 0.080629 0.050000 +v -0.005471 0.079081 0.050000 +v -0.005023 0.080207 0.050000 +v 0.005471 0.079081 0.050000 +v 0.003599 0.080629 0.050000 +v 0.005023 0.080207 0.050000 +v -0.005474 0.079067 0.040691 +v -0.003600 0.080633 0.040568 +v -0.005036 0.080199 0.040602 +v -0.003600 0.079455 0.033042 +v -0.005477 0.077925 0.033540 +v -0.005046 0.079026 0.033182 +v 0.003600 0.080633 0.040568 +v 0.005474 0.079067 0.040691 +v 0.005036 0.080199 0.040602 +v 0.005477 0.077925 0.033540 +v 0.003600 0.079455 0.033042 +v 0.005046 0.079026 0.033182 +v -0.005472 0.075182 0.050000 +v -0.003602 0.073666 0.050000 +v -0.005029 0.074082 0.050000 +v 0.003602 0.073666 0.050000 +v 0.005472 0.075177 0.050000 +v 0.005030 0.074081 0.050000 +v 0.005464 0.074276 0.065273 +v 0.003594 0.072835 0.064794 +v 0.004992 0.073209 0.064919 +v 0.003600 0.073692 0.058871 +v 0.005468 0.075191 0.059001 +v 0.005015 0.074095 0.058907 +v -0.005468 0.075196 0.059001 +v -0.003599 0.073692 0.058871 +v -0.005014 0.074096 0.058907 +v -0.003593 0.072835 0.064794 +v -0.005464 0.074281 0.065274 +v -0.004991 0.073210 0.064919 +v 0.003594 0.072835 0.035206 +v 0.005464 0.074276 0.034727 +v 0.004992 0.073209 0.035081 +v 0.005468 0.075191 0.040999 +v 0.003600 0.073692 0.041129 +v 0.005015 0.074095 0.041093 +v -0.003599 0.073692 0.041129 +v -0.005468 0.075196 0.040999 +v -0.005014 0.074096 0.041093 +v -0.005464 0.074281 0.034726 +v -0.003593 0.072835 0.035206 +v -0.004991 0.073210 0.035081 +v 0.000000 0.076121 0.065870 +v 0.000000 0.076121 0.034130 +vn -0.9826 0.1857 0.0000 +vn -0.9812 -0.1929 0.0000 +vn -0.9825 -0.1859 -0.0129 +vn -0.9815 0.1907 0.0146 +vn -0.9815 0.1907 -0.0146 +vn -0.9825 -0.1859 0.0129 +vn -0.7388 -0.0633 -0.6709 +vn -0.7237 -0.3338 -0.6040 +vn -0.1399 -0.9901 0.0000 +vn -0.1397 -0.9877 0.0698 +vn 0.1394 -0.9878 0.0698 +vn 0.1395 -0.9902 0.0000 +vn 0.1394 -0.9878 -0.0698 +vn 0.0944 -0.8650 0.4928 +vn -0.0946 -0.8650 0.4927 +vn -0.1397 -0.9877 -0.0698 +vn -0.0946 -0.8650 -0.4927 +vn 0.0944 -0.8650 -0.4928 +vn 0.9826 0.1857 0.0000 +vn 0.9811 -0.1932 0.0000 +vn 0.9824 -0.1862 0.0130 +vn 0.9815 0.1907 -0.0146 +vn -0.1448 0.9894 0.0000 +vn 0.1448 0.9894 0.0000 +vn 0.1456 0.9864 -0.0767 +vn -0.1456 0.9864 -0.0767 +vn 0.1159 0.5509 -0.8265 +vn -0.1159 0.5509 -0.8265 +vn 0.9815 0.1907 0.0146 +vn 0.9824 -0.1862 -0.0130 +vn -0.1456 0.9864 0.0767 +vn 0.1456 0.9864 0.0767 +vn -0.7237 -0.3338 0.6040 +vn -0.7388 -0.0633 0.6709 +vn 0.7388 -0.0632 0.6709 +vn 0.7237 -0.3340 0.6039 +vn -0.1159 0.5509 0.8265 +vn 0.1159 0.5509 0.8265 +vn 0.7237 -0.3340 -0.6039 +vn 0.7388 -0.0633 -0.6709 +vn 0.6697 0.7404 0.0575 +vn 0.5433 0.4040 0.7359 +vn -0.5433 0.4040 0.7359 +vn -0.6697 0.7404 0.0575 +vn -0.6767 0.7362 0.0000 +vn 0.6767 0.7362 0.0000 +vn 0.6697 0.7404 -0.0575 +vn 0.5433 0.4040 -0.7359 +vn -0.5433 0.4040 -0.7359 +vn -0.6697 0.7404 -0.0575 +vn 0.6762 -0.7349 -0.0517 +vn 0.5124 -0.7210 0.4665 +vn -0.5128 -0.7206 0.4666 +vn -0.6767 -0.7344 -0.0517 +vn -0.6685 -0.7437 0.0000 +vn 0.6680 -0.7442 0.0000 +vn 0.6762 -0.7349 0.0517 +vn 0.5124 -0.7210 -0.4665 +vn -0.5128 -0.7206 -0.4666 +vn -0.6767 -0.7344 0.0517 +vn 0.0000 -0.3106 0.9505 +vn 0.0000 -0.3106 -0.9505 +s 1 +f 160//147 177//148 189//149 148//150 +f 165//151 202//152 177//148 160//147 +f 169//153 204//154 202//152 165//151 +f 178//155 201//156 199//157 180//158 +f 186//159 184//160 192//161 190//162 +f 199//157 201//156 205//163 195//164 +f 178//155 180//158 186//159 190//162 +f 162//165 181//166 198//167 172//168 +f 159//169 163//170 171//171 166//172 +f 171//171 175//173 168//174 166//172 +f 153//175 187//176 181//166 162//165 +f 159//169 147//177 154//178 163//170 +f 148//150 189//149 193//179 150//180 +f 157//181 183//182 187//176 153//175 +f 154//178 147//177 151//183 156//184 +f 172//168 198//167 196//185 174//186 +f 157//181 153//175 155//187 158//188 +f 158//188 155//187 154//178 156//184 +f 148//150 150//180 152//189 149//190 +f 149//190 152//189 151//183 147//177 +f 147//177 159//169 161//191 149//190 +f 149//190 161//191 160//147 148//150 +f 163//170 154//178 155//187 164//192 +f 164//192 155//187 153//175 162//165 +f 175//173 171//171 173//193 176//194 +f 176//194 173//193 172//168 174//186 +f 166//172 168//174 170//195 167//196 +f 167//196 170//195 169//153 165//151 +f 165//151 160//147 161//191 167//196 +f 167//196 161//191 159//169 166//172 +f 162//165 172//168 173//193 164//192 +f 164//192 173//193 171//171 163//170 +f 184//160 186//159 188//197 185//198 +f 185//198 188//197 187//176 183//182 +f 190//162 192//161 194//199 191//200 +f 191//200 194//199 193//179 189//149 +f 189//149 177//148 179//201 191//200 +f 191//200 179//201 178//155 190//162 +f 181//166 187//176 188//197 182//202 +f 182//202 188//197 186//159 180//158 +f 196//185 198//167 200//203 197//204 +f 197//204 200//203 199//157 195//164 +f 202//152 204//154 206//205 203//206 +f 203//206 206//205 205//163 201//156 +f 201//156 178//155 179//201 203//206 +f 203//206 179//201 177//148 202//152 +f 180//158 199//157 200//203 182//202 +f 182//202 200//203 198//167 181//166 +f 184//160 185//198 207//207 +f 157//181 158//188 207//207 +f 150//180 193//179 207//207 +f 185//198 183//182 207//207 +f 192//161 184//160 207//207 +f 156//184 151//183 207//207 +f 158//188 156//184 207//207 +f 193//179 194//199 207//207 +f 151//183 152//189 207//207 +f 194//199 192//161 207//207 +f 183//182 157//181 207//207 +f 152//189 150//180 207//207 +f 174//186 196//185 208//208 +f 196//185 197//204 208//208 +f 175//173 176//194 208//208 +f 197//204 195//164 208//208 +f 176//194 174//186 208//208 +f 168//174 175//173 208//208 +f 195//164 205//163 208//208 +f 205//163 206//205 208//208 +f 169//153 170//195 208//208 +f 206//205 204//154 208//208 +f 204//154 169//153 208//208 +f 170//195 168//174 208//208 +o handle_col.002_Cube.008 +v -0.003600 0.079455 0.033042 +v -0.005477 0.077925 0.033540 +v -0.005046 0.079026 0.033182 +v -0.003600 0.076049 0.026358 +v -0.005477 0.074748 0.027303 +v -0.005046 0.075684 0.026623 +v -0.003600 0.070744 0.021053 +v -0.005477 0.069799 0.022354 +v -0.005046 0.070479 0.021418 +v -0.003600 0.064059 0.017647 +v -0.005477 0.063562 0.019177 +v -0.005046 0.063920 0.018076 +v 0.005477 0.063562 0.019177 +v 0.003600 0.064059 0.017647 +v 0.005046 0.063920 0.018076 +v 0.005477 0.069799 0.022354 +v 0.003600 0.070744 0.021053 +v 0.005046 0.070479 0.021418 +v 0.005477 0.074748 0.027303 +v 0.003600 0.076049 0.026358 +v 0.005046 0.075684 0.026623 +v 0.005477 0.077925 0.033540 +v 0.003600 0.079455 0.033042 +v 0.005046 0.079026 0.033182 +v 0.003594 0.072835 0.035206 +v 0.005464 0.074276 0.034727 +v 0.004992 0.073209 0.035081 +v -0.005464 0.074281 0.034726 +v -0.003593 0.072835 0.035206 +v -0.004991 0.073210 0.035081 +v 0.003594 0.070415 0.030451 +v 0.005464 0.071645 0.029558 +v 0.004994 0.070735 0.030219 +v -0.005464 0.071649 0.029555 +v -0.003593 0.070415 0.030451 +v -0.004993 0.070735 0.030218 +v 0.003594 0.066651 0.026687 +v 0.005464 0.067544 0.025457 +v 0.004994 0.066883 0.026367 +v -0.005464 0.067547 0.025453 +v -0.003593 0.066650 0.026687 +v -0.004993 0.066884 0.026366 +v 0.003594 0.061896 0.024267 +v 0.005464 0.062374 0.022825 +v 0.004992 0.062021 0.023893 +v -0.005464 0.062376 0.022821 +v -0.003593 0.061896 0.024267 +v -0.004991 0.062021 0.023892 +v 0.000000 0.076121 0.034130 +v 0.000000 0.062972 0.020980 +vn -0.9812 0.1562 -0.1134 +vn -0.9838 -0.1451 0.1054 +vn -0.7259 0.0844 0.6826 +vn -0.7394 0.3416 0.5801 +vn -0.9812 0.1134 -0.1562 +vn -0.9838 -0.1054 0.1451 +vn -0.7394 -0.5801 -0.3416 +vn -0.7259 -0.6826 -0.0844 +vn 0.0953 -0.4129 0.9057 +vn -0.0955 -0.4130 0.9057 +vn -0.1395 -0.8012 0.5819 +vn 0.1391 -0.8012 0.5819 +vn -0.1395 -0.5819 0.8012 +vn 0.1391 -0.5819 0.8012 +vn -0.0955 -0.9057 0.4130 +vn 0.0953 -0.9057 0.4129 +vn 0.9812 0.1135 -0.1562 +vn 0.9837 -0.1056 0.1454 +vn 0.7259 -0.6826 -0.0842 +vn 0.7394 -0.5801 -0.3416 +vn 0.1171 0.9313 0.3449 +vn 0.1485 0.8000 -0.5813 +vn -0.1485 0.8000 -0.5813 +vn -0.1171 0.9313 0.3449 +vn 0.1485 0.5813 -0.8000 +vn -0.1485 0.5813 -0.8000 +vn 0.7394 0.3416 0.5801 +vn 0.7259 0.0842 0.6826 +vn 0.9837 -0.1454 0.1056 +vn 0.9812 0.1562 -0.1135 +vn 0.1171 -0.3449 -0.9313 +vn -0.1171 -0.3449 -0.9313 +vn 0.5451 0.7577 0.3587 +vn 0.6664 0.6031 -0.4382 +vn -0.6664 0.6031 -0.4382 +vn -0.5451 0.7577 0.3587 +vn 0.6664 0.4382 -0.6031 +vn -0.6664 0.4382 -0.6031 +vn 0.5451 -0.3587 -0.7577 +vn -0.5451 -0.3587 -0.7577 +vn 0.5130 -0.3110 0.8000 +vn 0.6854 -0.5892 0.4279 +vn -0.6859 -0.5888 0.4276 +vn -0.5135 -0.3107 0.7998 +vn 0.6854 -0.4279 0.5892 +vn -0.6859 -0.4276 0.5888 +vn 0.5130 -0.8000 0.3110 +vn -0.5135 -0.7998 0.3107 +vn 0.0000 0.3106 0.9505 +vn 0.0000 -0.9505 -0.3106 +s 1 +f 213//209 242//210 236//211 210//212 +f 216//213 248//214 242//210 213//209 +f 219//215 254//216 248//214 216//213 +f 233//217 237//218 243//219 239//220 +f 239//220 243//219 249//221 245//222 +f 245//222 249//221 255//223 251//224 +f 224//225 246//226 252//227 221//228 +f 231//229 228//230 212//231 209//232 +f 228//230 225//233 215//234 212//231 +f 230//235 234//236 240//237 227//238 +f 225//233 222//239 218//240 215//234 +f 227//238 240//237 246//226 224//225 +f 228//230 231//229 232//241 229//242 +f 229//242 232//241 230//235 227//238 +f 209//232 212//231 214//243 211//244 +f 211//244 214//243 213//209 210//212 +f 225//233 228//230 229//242 226//245 +f 226//245 229//242 227//238 224//225 +f 212//231 215//234 217//246 214//243 +f 214//243 217//246 216//213 213//209 +f 222//239 225//233 226//245 223//247 +f 223//247 226//245 224//225 221//228 +f 215//234 218//240 220//248 217//246 +f 217//246 220//248 219//215 216//213 +f 240//237 234//236 235//249 241//250 +f 241//250 235//249 233//217 239//220 +f 236//211 242//210 244//251 238//252 +f 238//252 244//251 243//219 237//218 +f 246//226 240//237 241//250 247//253 +f 247//253 241//250 239//220 245//222 +f 242//210 248//214 250//254 244//251 +f 244//251 250//254 249//221 243//219 +f 252//227 246//226 247//253 253//255 +f 253//255 247//253 245//222 251//224 +f 248//214 254//216 256//256 250//254 +f 250//254 256//256 255//223 249//221 +f 211//244 210//212 257//257 +f 238//252 237//218 257//257 +f 235//249 234//236 257//257 +f 232//241 231//229 257//257 +f 231//229 209//232 257//257 +f 210//212 236//211 257//257 +f 230//235 232//241 257//257 +f 233//217 235//249 257//257 +f 237//218 233//217 257//257 +f 236//211 238//252 257//257 +f 209//232 211//244 257//257 +f 234//236 230//235 257//257 +f 218//240 222//239 258//258 +f 223//247 221//228 258//258 +f 253//255 251//224 258//258 +f 252//227 253//255 258//258 +f 222//239 223//247 258//258 +f 221//228 252//227 258//258 +f 251//224 255//223 258//258 +f 255//223 256//256 258//258 +f 219//215 220//248 258//258 +f 254//216 219//215 258//258 +f 256//256 254//216 258//258 +f 220//248 218//240 258//258 +o handle_col_Cube.007 +v -0.005477 0.077925 0.066460 +v -0.003600 0.079455 0.066958 +v -0.005046 0.079026 0.066818 +v -0.005477 0.074748 0.072697 +v -0.003600 0.076049 0.073642 +v -0.005046 0.075684 0.073377 +v -0.005477 0.069799 0.077646 +v -0.003600 0.070744 0.078947 +v -0.005046 0.070479 0.078582 +v -0.005477 0.063562 0.080823 +v -0.003600 0.064059 0.082353 +v -0.005046 0.063920 0.081924 +v 0.003600 0.064059 0.082353 +v 0.005477 0.063562 0.080823 +v 0.005046 0.063920 0.081924 +v 0.003600 0.070744 0.078947 +v 0.005477 0.069799 0.077646 +v 0.005046 0.070479 0.078582 +v 0.003600 0.076049 0.073642 +v 0.005477 0.074748 0.072697 +v 0.005046 0.075684 0.073377 +v 0.003600 0.079455 0.066958 +v 0.005477 0.077925 0.066460 +v 0.005046 0.079026 0.066818 +v 0.005464 0.074276 0.065273 +v 0.003594 0.072835 0.064794 +v 0.004992 0.073209 0.064919 +v -0.003593 0.072835 0.064794 +v -0.005464 0.074281 0.065274 +v -0.004991 0.073210 0.064919 +v 0.005464 0.071645 0.070442 +v 0.003594 0.070415 0.069549 +v 0.004994 0.070735 0.069781 +v -0.003593 0.070415 0.069549 +v -0.005464 0.071649 0.070445 +v -0.004993 0.070735 0.069782 +v 0.005464 0.067544 0.074543 +v 0.003594 0.066651 0.073313 +v 0.004994 0.066883 0.073633 +v -0.003593 0.066650 0.073313 +v -0.005464 0.067547 0.074547 +v -0.004993 0.066884 0.073634 +v 0.005464 0.062374 0.077175 +v 0.003594 0.061896 0.075733 +v 0.004992 0.062021 0.076107 +v -0.003593 0.061896 0.075733 +v -0.005464 0.062376 0.077179 +v -0.004991 0.062021 0.076108 +v 0.000000 0.062972 0.079020 +v 0.000000 0.076121 0.065870 +vn -0.7394 0.3416 -0.5801 +vn -0.7259 0.0844 -0.6826 +vn -0.9838 -0.1451 -0.1054 +vn -0.9812 0.1562 0.1134 +vn -0.9838 -0.1054 -0.1451 +vn -0.9812 0.1134 0.1562 +vn -0.7259 -0.6826 0.0844 +vn -0.7394 -0.5801 0.3416 +vn 0.0953 -0.4129 -0.9057 +vn 0.1391 -0.8012 -0.5819 +vn -0.1395 -0.8012 -0.5819 +vn -0.0955 -0.4130 -0.9057 +vn 0.1391 -0.5819 -0.8012 +vn -0.1395 -0.5819 -0.8012 +vn 0.0953 -0.9057 -0.4129 +vn -0.0955 -0.9057 -0.4130 +vn 0.9812 0.1562 0.1135 +vn 0.9837 -0.1454 -0.1056 +vn 0.7259 0.0842 -0.6826 +vn 0.7394 0.3416 -0.5801 +vn 0.1485 0.5813 0.8000 +vn -0.1485 0.5813 0.8000 +vn -0.1171 -0.3449 0.9313 +vn 0.1171 -0.3449 0.9313 +vn 0.9812 0.1135 0.1562 +vn 0.9837 -0.1056 -0.1454 +vn 0.1485 0.8000 0.5813 +vn -0.1485 0.8000 0.5813 +vn 0.7394 -0.5801 0.3416 +vn 0.7259 -0.6826 0.0842 +vn 0.1171 0.9313 -0.3449 +vn -0.1171 0.9313 -0.3449 +vn 0.5451 0.7577 -0.3587 +vn 0.6664 0.6031 0.4382 +vn -0.6664 0.6031 0.4382 +vn -0.5451 0.7577 -0.3587 +vn 0.6664 0.4382 0.6031 +vn -0.6664 0.4382 0.6031 +vn 0.5451 -0.3587 0.7577 +vn -0.5451 -0.3587 0.7577 +vn 0.5130 -0.3110 -0.8000 +vn 0.6854 -0.5892 -0.4279 +vn -0.6859 -0.5888 -0.4276 +vn -0.5135 -0.3107 -0.7998 +vn 0.6854 -0.4279 -0.5892 +vn -0.6859 -0.4276 -0.5888 +vn 0.5130 -0.8000 -0.3110 +vn -0.5135 -0.7998 -0.3107 +vn 0.0000 -0.9505 0.3106 +vn 0.0000 0.3106 -0.9505 +s 1 +f 259//259 287//260 293//261 262//262 +f 262//262 293//261 299//263 265//264 +f 265//264 299//263 305//265 268//266 +f 284//267 290//268 292//269 286//270 +f 290//268 296//271 298//272 292//269 +f 296//271 302//273 304//274 298//272 +f 278//275 289//276 283//277 281//278 +f 274//279 266//280 269//281 271//282 +f 275//283 295//284 289//276 278//275 +f 277//285 263//286 266//280 274//279 +f 272//287 301//288 295//284 275//283 +f 280//289 260//290 263//286 277//285 +f 278//275 281//278 282//291 279//292 +f 279//292 282//291 280//289 277//285 +f 259//259 262//262 264//293 261//294 +f 261//294 264//293 263//286 260//290 +f 275//283 278//275 279//292 276//295 +f 276//295 279//292 277//285 274//279 +f 262//262 265//264 267//296 264//293 +f 264//293 267//296 266//280 263//286 +f 272//287 275//283 276//295 273//297 +f 273//297 276//295 274//279 271//282 +f 265//264 268//266 270//298 267//296 +f 267//296 270//298 269//281 266//280 +f 290//268 284//267 285//299 291//300 +f 291//300 285//299 283//277 289//276 +f 286//270 292//269 294//301 288//302 +f 288//302 294//301 293//261 287//260 +f 296//271 290//268 291//300 297//303 +f 297//303 291//300 289//276 295//284 +f 292//269 298//272 300//304 294//301 +f 294//301 300//304 299//263 293//261 +f 302//273 296//271 297//303 303//305 +f 303//305 297//303 295//284 301//288 +f 298//272 304//274 306//306 300//304 +f 300//304 306//306 305//265 299//263 +f 301//288 272//287 307//307 +f 304//274 302//273 307//307 +f 305//265 306//306 307//307 +f 269//281 270//298 307//307 +f 268//266 305//265 307//307 +f 270//298 268//266 307//307 +f 306//306 304//274 307//307 +f 271//282 269//281 307//307 +f 303//305 301//288 307//307 +f 273//297 271//282 307//307 +f 272//287 273//297 307//307 +f 302//273 303//305 307//307 +f 284//267 286//270 308//308 +f 259//259 261//294 308//308 +f 286//270 288//302 308//308 +f 281//278 283//277 308//308 +f 288//302 287//260 308//308 +f 261//294 260//290 308//308 +f 282//291 281//278 308//308 +f 260//290 280//289 308//308 +f 285//299 284//267 308//308 +f 287//260 259//259 308//308 +f 283//277 285//299 308//308 +f 280//289 282//291 308//308 +o handle_col.004_Cube.006 +v -0.003627 0.038527 0.081890 +v -0.005507 0.038527 0.080294 +v -0.005059 0.038527 0.081441 +v 0.005507 0.038527 0.080294 +v 0.003627 0.038527 0.081890 +v 0.005059 0.038527 0.081441 +v -0.005474 0.056411 0.081965 +v -0.003600 0.056534 0.083531 +v -0.005036 0.056500 0.083097 +v -0.005477 0.063562 0.080823 +v -0.003600 0.064059 0.082353 +v -0.005046 0.063920 0.081924 +v 0.003600 0.056534 0.083531 +v 0.005474 0.056411 0.081965 +v 0.005036 0.056500 0.083097 +v 0.003600 0.064059 0.082353 +v 0.005477 0.063562 0.080823 +v 0.005046 0.063920 0.081924 +v 0.003628 0.038527 0.070184 +v 0.005471 0.038527 0.072262 +v 0.004983 0.038527 0.070850 +v -0.003627 0.038527 0.070184 +v -0.005471 0.038527 0.072267 +v -0.004983 0.038527 0.070852 +v 0.005464 0.062374 0.077175 +v 0.003594 0.061896 0.075733 +v 0.004992 0.062021 0.076107 +v -0.003593 0.061896 0.075733 +v -0.005464 0.062376 0.077179 +v -0.004991 0.062021 0.076108 +v 0.005468 0.056103 0.078090 +v 0.003600 0.055974 0.076590 +v 0.005015 0.056009 0.076993 +v -0.003599 0.055974 0.076590 +v -0.005468 0.056103 0.078095 +v -0.005014 0.056010 0.076994 +v -0.005477 0.045795 0.081957 +v -0.003603 0.045916 0.083535 +v -0.005045 0.045879 0.083093 +v 0.005477 0.045795 0.081957 +v 0.003603 0.045916 0.083535 +v 0.005045 0.045879 0.083093 +v -0.003608 0.045257 0.076495 +v -0.005460 0.045676 0.078027 +v -0.004995 0.045382 0.076898 +v 0.003609 0.045257 0.076495 +v 0.005460 0.045676 0.078022 +v 0.004996 0.045381 0.076897 +v 0.000000 0.062972 0.079020 +v 0.000000 0.038527 0.076154 +vn 0.7254 -0.6787 0.1145 +vn 0.7789 -0.5862 -0.2228 +vn 0.9869 0.0385 -0.1568 +vn 0.9807 -0.0226 0.1941 +vn -0.7388 0.6709 -0.0633 +vn -0.7237 0.6040 -0.3338 +vn -0.9822 -0.0130 -0.1871 +vn -0.9820 0.0147 0.1883 +vn 0.1468 0.0770 0.9861 +vn -0.1468 0.0770 0.9861 +vn -0.1455 -0.1062 0.9836 +vn 0.1455 -0.1062 0.9836 +vn 0.0944 0.4928 -0.8650 +vn 0.1393 -0.0667 -0.9880 +vn -0.1396 -0.0667 -0.9879 +vn -0.0946 0.4927 -0.8650 +vn 0.1446 0.3836 -0.9121 +vn -0.1450 0.3836 -0.9120 +vn 0.9820 0.0147 0.1884 +vn 0.9822 -0.0130 -0.1874 +vn 0.7237 0.6039 -0.3340 +vn 0.7388 0.6709 -0.0633 +vn -0.9807 -0.0226 0.1941 +vn -0.9869 0.0384 -0.1565 +vn -0.7789 -0.5864 -0.2225 +vn -0.7254 -0.6787 0.1145 +vn 0.1423 -0.3544 -0.9242 +vn -0.1427 -0.3542 -0.9242 +vn 0.1159 0.8265 0.5509 +vn -0.1159 0.8265 0.5509 +vn -0.1004 -0.7506 0.6530 +vn 0.1004 -0.7506 0.6530 +vn 0.5433 0.7359 0.4040 +vn 0.6718 0.0577 0.7385 +vn -0.6718 0.0577 0.7385 +vn -0.5433 0.7359 0.4040 +vn -0.6652 -0.0813 0.7422 +vn 0.5236 -0.6789 0.5146 +vn 0.6652 -0.0813 0.7422 +vn 0.5124 0.4665 -0.7209 +vn 0.6761 -0.0500 -0.7350 +vn -0.6767 -0.0500 -0.7345 +vn -0.5128 0.4666 -0.7206 +vn -0.6990 0.2732 -0.6608 +vn 0.5548 -0.3842 -0.7379 +vn 0.6985 0.2735 -0.6613 +vn -0.5236 -0.6789 0.5146 +vn -0.5553 -0.3845 -0.7374 +vn 0.0000 0.9505 -0.3106 +vn 0.0000 -1.0000 0.0000 +s 1 +f 312//309 328//310 355//311 348//312 +f 318//313 337//314 343//315 315//316 +f 321//317 316//318 346//319 349//320 +f 334//321 340//322 342//323 336//324 +f 340//322 354//325 351//326 342//323 +f 322//327 339//328 333//329 325//330 +f 345//331 352//332 331//333 310//334 +f 354//325 327//335 330//336 351//326 +f 348//312 355//311 339//328 322//327 +f 324//337 319//338 316//318 321//317 +f 349//320 346//319 309//339 313//340 +f 315//316 343//315 352//332 345//331 +f 322//327 325//330 326//341 323//342 +f 323//342 326//341 324//337 321//317 +f 318//313 315//316 317//343 320//344 +f 320//344 317//343 316//318 319//338 +f 346//319 316//318 317//343 347//345 +f 347//345 317//343 315//316 345//331 +f 349//320 313//340 314//346 350//347 +f 350//347 314//346 312//309 348//312 +f 340//322 334//321 335//348 341//349 +f 341//349 335//348 333//329 339//328 +f 336//324 342//323 344//350 338//351 +f 338//351 344//350 343//315 337//314 +f 352//332 343//315 344//350 353//352 +f 353//352 344//350 342//323 351//326 +f 355//311 328//310 329//353 356//354 +f 356//354 329//353 327//335 354//325 +f 309//339 346//319 347//345 311//355 +f 311//355 347//345 345//331 310//334 +f 321//317 349//320 350//347 323//342 +f 323//342 350//347 348//312 322//327 +f 331//333 352//332 353//352 332//356 +f 332//356 353//352 351//326 330//336 +f 339//328 355//311 356//354 341//349 +f 341//349 356//354 354//325 340//322 +f 325//330 333//329 357//357 +f 320//344 319//338 357//357 +f 336//324 338//351 357//357 +f 319//338 324//337 357//357 +f 326//341 325//330 357//357 +f 338//351 337//314 357//357 +f 324//337 326//341 357//357 +f 335//348 334//321 357//357 +f 337//314 318//313 357//357 +f 334//321 336//324 357//357 +f 318//313 320//344 357//357 +f 333//329 335//348 357//357 +f 314//346 313//340 358//358 +f 309//339 311//355 358//358 +f 328//310 312//309 358//358 +f 331//333 332//356 358//358 +f 327//335 329//353 358//358 +f 311//355 310//334 358//358 +f 310//334 331//333 358//358 +f 313//340 309//339 358//358 +f 329//353 328//310 358//358 +f 312//309 314//346 358//358 +f 330//336 327//335 358//358 +f 332//356 330//336 358//358 +o handle_col.003_Cube.005 +v -0.003631 0.038527 0.018578 +v -0.005510 0.038527 0.020185 +v -0.005068 0.038527 0.019031 +v 0.003631 0.038527 0.018578 +v 0.005510 0.038527 0.020185 +v 0.005068 0.038527 0.019031 +v -0.003600 0.056534 0.016469 +v -0.005474 0.056411 0.018035 +v -0.005036 0.056500 0.016903 +v -0.003600 0.064059 0.017647 +v -0.005477 0.063562 0.019177 +v -0.005046 0.063920 0.018076 +v 0.005474 0.056411 0.018035 +v 0.003600 0.056534 0.016469 +v 0.005036 0.056500 0.016903 +v 0.005477 0.063562 0.019177 +v 0.003600 0.064059 0.017647 +v 0.005046 0.063920 0.018076 +v 0.005472 0.038527 0.027531 +v 0.003627 0.038527 0.029560 +v 0.004985 0.038527 0.028916 +v -0.003626 0.038527 0.029560 +v -0.005472 0.038527 0.027526 +v -0.004984 0.038527 0.028915 +v 0.003594 0.061896 0.024267 +v 0.005464 0.062374 0.022825 +v 0.004992 0.062021 0.023893 +v -0.005464 0.062376 0.022821 +v -0.003593 0.061896 0.024267 +v -0.004991 0.062021 0.023892 +v 0.003600 0.055974 0.023410 +v 0.005468 0.056103 0.021910 +v 0.005015 0.056009 0.023007 +v -0.005468 0.056103 0.021905 +v -0.003599 0.055974 0.023410 +v -0.005014 0.056010 0.023006 +v -0.003604 0.045959 0.016460 +v -0.005478 0.045808 0.018049 +v -0.005052 0.045914 0.016909 +v 0.003604 0.045959 0.016460 +v 0.005478 0.045808 0.018049 +v 0.005052 0.045914 0.016909 +v -0.005460 0.045677 0.021971 +v -0.003608 0.045270 0.023501 +v -0.004995 0.045392 0.023098 +v 0.005460 0.045677 0.021977 +v 0.003608 0.045270 0.023501 +v 0.004996 0.045392 0.023099 +v 0.000000 0.062972 0.020980 +v 0.000000 0.038527 0.023966 +vn 0.9802 -0.0302 -0.1954 +vn 0.9866 0.0386 0.1584 +vn 0.7770 -0.5891 0.2217 +vn 0.7235 -0.6819 -0.1074 +vn 0.1472 0.0772 -0.9861 +vn 0.1452 -0.1337 -0.9803 +vn -0.1452 -0.1337 -0.9803 +vn -0.1472 0.0772 -0.9861 +vn 0.0944 0.4928 0.8650 +vn -0.0946 0.4927 0.8650 +vn -0.1396 -0.0670 0.9879 +vn 0.1392 -0.0670 0.9880 +vn -0.1444 0.3729 0.9165 +vn 0.1440 0.3729 0.9166 +vn -0.7235 -0.6819 -0.1074 +vn -0.7770 -0.5892 0.2214 +vn -0.9867 0.0385 0.1581 +vn -0.9802 -0.0302 -0.1954 +vn 0.9821 0.0148 -0.1877 +vn 0.9821 -0.0130 0.1876 +vn 0.1159 0.8265 -0.5509 +vn -0.1159 0.8265 -0.5509 +vn -0.9821 0.0148 -0.1877 +vn -0.9822 -0.0130 0.1873 +vn -0.7237 0.6040 0.3338 +vn -0.7388 0.6709 0.0633 +vn 0.7388 0.6709 0.0632 +vn 0.7237 0.6039 0.3340 +vn -0.1404 -0.3648 0.9204 +vn 0.1400 -0.3650 0.9204 +vn 0.0978 -0.7696 -0.6309 +vn -0.0978 -0.7696 -0.6309 +vn 0.5433 0.7359 -0.4040 +vn 0.6724 0.0579 -0.7378 +vn -0.6724 0.0579 -0.7378 +vn -0.5433 0.7359 -0.4040 +vn -0.6623 -0.1034 -0.7421 +vn 0.5222 -0.6927 -0.4974 +vn 0.6623 -0.1034 -0.7421 +vn 0.5124 0.4665 0.7209 +vn 0.6760 -0.0501 0.7352 +vn -0.6765 -0.0501 0.7347 +vn -0.5128 0.4666 0.7206 +vn -0.6982 0.2655 0.6648 +vn 0.5524 -0.3917 0.7357 +vn 0.6977 0.2658 0.6653 +vn -0.5222 -0.6927 -0.4974 +vn -0.5529 -0.3920 0.7352 +vn 0.0000 0.9505 0.3106 +vn 0.0000 -1.0000 0.0000 +s 1 +f 399//359 404//360 377//361 363//362 +f 372//363 398//364 395//365 365//366 +f 383//367 387//368 393//369 389//370 +f 389//370 393//369 402//371 405//372 +f 360//373 381//374 401//375 396//376 +f 371//377 390//378 404//360 399//359 +f 375//379 372//363 365//366 368//380 +f 366//381 392//382 386//383 369//384 +f 374//385 384//386 390//378 371//377 +f 405//372 402//371 380//387 378//388 +f 398//364 362//389 359//390 395//365 +f 396//376 401//375 392//382 366//381 +f 372//363 375//379 376//391 373//392 +f 373//392 376//391 374//385 371//377 +f 368//380 365//366 367//393 370//394 +f 370//394 367//393 366//381 369//384 +f 396//376 366//381 367//393 397//395 +f 397//395 367//393 365//366 395//365 +f 399//359 363//362 364//396 400//397 +f 400//397 364//396 362//389 398//364 +f 390//378 384//386 385//398 391//399 +f 391//399 385//398 383//367 389//370 +f 386//383 392//382 394//400 388//401 +f 388//401 394//400 393//369 387//368 +f 402//371 393//369 394//400 403//402 +f 403//402 394//400 392//382 401//375 +f 405//372 378//388 379//403 406//404 +f 406//404 379//403 377//361 404//360 +f 360//373 396//376 397//395 361//405 +f 361//405 397//395 395//365 359//390 +f 371//377 399//359 400//397 373//392 +f 373//392 400//397 398//364 372//363 +f 380//387 402//371 403//402 382//406 +f 382//406 403//402 401//375 381//374 +f 389//370 405//372 406//404 391//399 +f 391//399 406//404 404//360 390//378 +f 388//401 387//368 407//407 +f 374//385 376//391 407//407 +f 385//398 384//386 407//407 +f 387//368 383//367 407//407 +f 384//386 374//385 407//407 +f 368//380 370//394 407//407 +f 383//367 385//398 407//407 +f 369//384 386//383 407//407 +f 370//394 369//384 407//407 +f 386//383 388//401 407//407 +f 375//379 368//380 407//407 +f 376//391 375//379 407//407 +f 364//396 363//362 408//408 +f 361//405 359//390 408//408 +f 381//374 360//373 408//408 +f 382//406 381//374 408//408 +f 377//361 379//403 408//408 +f 360//373 361//405 408//408 +f 363//362 377//361 408//408 +f 359//390 362//389 408//408 +f 379//403 378//388 408//408 +f 362//389 364//396 408//408 +f 378//388 380//387 408//408 +f 380//387 382//406 408//408 From c810edf483281cd73fdc296c58512f03184a10ec Mon Sep 17 00:00:00 2001 From: Kieren Date: Thu, 25 Mar 2021 21:00:27 +1000 Subject: [PATCH 26/36] Updating a misleading comment --- src/LinearMath/btIDebugDraw.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/LinearMath/btIDebugDraw.h b/src/LinearMath/btIDebugDraw.h index 82ec19a69..df4db2ff5 100644 --- a/src/LinearMath/btIDebugDraw.h +++ b/src/LinearMath/btIDebugDraw.h @@ -4,8 +4,8 @@ Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. @@ -21,7 +21,7 @@ subject to the following restrictions: ///The btIDebugDraw interface class allows hooking up a debug renderer to visually debug simulations. ///Typical use case: create a debug drawer object, and assign it to a btCollisionWorld or btDynamicsWorld using setDebugDrawer and call debugDrawWorld. -///A class that implements the btIDebugDraw interface has to implement the drawLine method at a minimum. +///A class that implements the btIDebugDraw interface will need to provide non-empty implementations of the the drawLine and getDebugMode methods at a minimum. ///For color arguments the X,Y,Z components refer to Red, Green and Blue each in the range [0..1] class btIDebugDraw { From 0196edd4d2e0cde2de5c8138d5f69df2cea9fce4 Mon Sep 17 00:00:00 2001 From: erwin coumans Date: Fri, 26 Mar 2021 09:11:59 -0700 Subject: [PATCH 27/36] update single aabb, during resetJointState/resetBasePositionAndOrientation, to allow raycast/collision queries. --- examples/SharedMemory/PhysicsServerCommandProcessor.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/examples/SharedMemory/PhysicsServerCommandProcessor.cpp b/examples/SharedMemory/PhysicsServerCommandProcessor.cpp index 0cb66f157..9cb5c3455 100644 --- a/examples/SharedMemory/PhysicsServerCommandProcessor.cpp +++ b/examples/SharedMemory/PhysicsServerCommandProcessor.cpp @@ -10785,6 +10785,12 @@ bool PhysicsServerCommandProcessor::processInitPoseCommand(const struct SharedMe scratch_m.resize(nLinks + 1); mb->updateCollisionObjectWorldTransforms(scratch_q, scratch_m); + + m_data->m_dynamicsWorld->updateSingleAabb(mb->getBaseCollider()); + for (int i=0;igetNumLinks();i++) + { + m_data->m_dynamicsWorld->updateSingleAabb(mb->getLinkCollider(i)); + } } if (body && body->m_rigidBody) @@ -10809,6 +10815,7 @@ bool PhysicsServerCommandProcessor::processInitPoseCommand(const struct SharedMe body->m_rigidBody->getWorldTransform().setRotation(baseOrn); body->m_rigidBody->setAngularVelocity(baseAngVel); } + m_data->m_dynamicsWorld->updateSingleAabb(body->m_rigidBody); } #ifndef SKIP_SOFT_BODY_MULTI_BODY_DYNAMICS_WORLD if (body && body->m_softBody) @@ -10835,6 +10842,7 @@ bool PhysicsServerCommandProcessor::processInitPoseCommand(const struct SharedMe } body->m_softBody->transformTo(tr); } + m_data->m_dynamicsWorld->updateSingleAabb(body->m_softBody); } #endif syncPhysicsToGraphics2(); From d1c4c41b9a35ac7f09e39f2453a3e5700995ee27 Mon Sep 17 00:00:00 2001 From: erwin coumans Date: Fri, 26 Mar 2021 10:31:13 -0700 Subject: [PATCH 28/36] add performCollisionDetection (stepSimulation also calls this, but does more, including solving constraints and integration) --- examples/SharedMemory/PhysicsClientC_API.cpp | 13 +++++++ examples/SharedMemory/PhysicsClientC_API.h | 2 + .../PhysicsClientSharedMemory.cpp | 10 +++++ examples/SharedMemory/PhysicsDirect.cpp | 4 ++ .../PhysicsServerCommandProcessor.cpp | 23 +++++++++++ .../PhysicsServerCommandProcessor.h | 1 + examples/SharedMemory/SharedMemoryPublic.h | 4 +- examples/pybullet/pybullet.c | 39 +++++++++++++++++++ 8 files changed, 95 insertions(+), 1 deletion(-) diff --git a/examples/SharedMemory/PhysicsClientC_API.cpp b/examples/SharedMemory/PhysicsClientC_API.cpp index 829eeca56..99b907a70 100644 --- a/examples/SharedMemory/PhysicsClientC_API.cpp +++ b/examples/SharedMemory/PhysicsClientC_API.cpp @@ -977,6 +977,19 @@ B3_SHARED_API b3SharedMemoryCommandHandle b3InitStepSimulationCommand2(b3SharedM return (b3SharedMemoryCommandHandle)command; } + +B3_SHARED_API b3SharedMemoryCommandHandle b3InitPerformCollisionDetectionCommand(b3PhysicsClientHandle physClient) +{ + PhysicsClient* cl = (PhysicsClient*)physClient; + b3Assert(cl); + b3Assert(cl->canSubmitCommand()); + struct SharedMemoryCommand* command = cl->getAvailableSharedMemoryCommand(); + b3Assert(command); + command->m_type = CMD_PERFORM_COLLISION_DETECTION; + command->m_updateFlags = 0; + return (b3SharedMemoryCommandHandle)command; +} + B3_SHARED_API b3SharedMemoryCommandHandle b3InitResetSimulationCommand(b3PhysicsClientHandle physClient) { PhysicsClient* cl = (PhysicsClient*)physClient; diff --git a/examples/SharedMemory/PhysicsClientC_API.h b/examples/SharedMemory/PhysicsClientC_API.h index 318263b2d..4727d6f86 100644 --- a/examples/SharedMemory/PhysicsClientC_API.h +++ b/examples/SharedMemory/PhysicsClientC_API.h @@ -382,6 +382,8 @@ extern "C" B3_SHARED_API b3SharedMemoryCommandHandle b3InitStepSimulationCommand(b3PhysicsClientHandle physClient); B3_SHARED_API b3SharedMemoryCommandHandle b3InitStepSimulationCommand2(b3SharedMemoryCommandHandle commandHandle); + B3_SHARED_API b3SharedMemoryCommandHandle b3InitPerformCollisionDetectionCommand(b3PhysicsClientHandle physClient); + B3_SHARED_API int b3GetStatusForwardDynamicsAnalyticsData(b3SharedMemoryStatusHandle statusHandle, struct b3ForwardDynamicsAnalyticsArgs* analyticsData); diff --git a/examples/SharedMemory/PhysicsClientSharedMemory.cpp b/examples/SharedMemory/PhysicsClientSharedMemory.cpp index bf1096e05..456a1c4be 100644 --- a/examples/SharedMemory/PhysicsClientSharedMemory.cpp +++ b/examples/SharedMemory/PhysicsClientSharedMemory.cpp @@ -702,6 +702,16 @@ const SharedMemoryStatus* PhysicsClientSharedMemory::processServerStatus() } break; } + case CMD_PERFORM_COLLISION_DETECTION_COMPLETED: + { + B3_PROFILE("CMD_PERFORM_COLLISION_DETECTION_COMPLETED"); + + if (m_data->m_verboseOutput) + { + b3Printf("Server completed performing collision detection"); + } + break; + } case CMD_URDF_LOADING_FAILED: { B3_PROFILE("CMD_URDF_LOADING_FAILED"); diff --git a/examples/SharedMemory/PhysicsDirect.cpp b/examples/SharedMemory/PhysicsDirect.cpp index ab6ae5ba2..69490ed77 100644 --- a/examples/SharedMemory/PhysicsDirect.cpp +++ b/examples/SharedMemory/PhysicsDirect.cpp @@ -1166,6 +1166,10 @@ void PhysicsDirect::postProcessStatus(const struct SharedMemoryStatus& serverCmd { break; } + case CMD_PERFORM_COLLISION_DETECTION_COMPLETED: + { + break; + } case CMD_REQUEST_PHYSICS_SIMULATION_PARAMETERS_COMPLETED: { break; diff --git a/examples/SharedMemory/PhysicsServerCommandProcessor.cpp b/examples/SharedMemory/PhysicsServerCommandProcessor.cpp index 9cb5c3455..14f1e2b4b 100644 --- a/examples/SharedMemory/PhysicsServerCommandProcessor.cpp +++ b/examples/SharedMemory/PhysicsServerCommandProcessor.cpp @@ -9483,6 +9483,24 @@ bool PhysicsServerCommandProcessor::processRequestCollisionInfoCommand(const str return hasStatus; } +bool PhysicsServerCommandProcessor::performCollisionDetectionCommand(const struct SharedMemoryCommand& clientCmd, struct SharedMemoryStatus& serverStatusOut, char* bufferServerToClient, int bufferSizeInBytes) +{ + bool hasStatus = true; + + BT_PROFILE("CMD_PERFORM_COLLISION_DETECTION"); + + if (m_data->m_verboseOutput) + { + b3Printf("Perform Collision Detection command"); + b3Printf("CMD_PERFORM_COLLISION_DETECTION clientCmd = %d\n", clientCmd.m_sequenceNumber); + } + + m_data->m_dynamicsWorld->performDiscreteCollisionDetection(); + SharedMemoryStatus& serverCmd = serverStatusOut; + serverCmd.m_type = CMD_PERFORM_COLLISION_DETECTION_COMPLETED; + return true; +} + bool PhysicsServerCommandProcessor::processForwardDynamicsCommand(const struct SharedMemoryCommand& clientCmd, struct SharedMemoryStatus& serverStatusOut, char* bufferServerToClient, int bufferSizeInBytes) { bool hasStatus = true; @@ -14131,6 +14149,11 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm hasStatus = processForwardDynamicsCommand(clientCmd, serverStatusOut, bufferServerToClient, bufferSizeInBytes); break; } + case CMD_PERFORM_COLLISION_DETECTION: + { + hasStatus = performCollisionDetectionCommand(clientCmd, serverStatusOut, bufferServerToClient, bufferSizeInBytes); + break; + } case CMD_REQUEST_INTERNAL_DATA: { diff --git a/examples/SharedMemory/PhysicsServerCommandProcessor.h b/examples/SharedMemory/PhysicsServerCommandProcessor.h index cbc4cbab4..d456675df 100644 --- a/examples/SharedMemory/PhysicsServerCommandProcessor.h +++ b/examples/SharedMemory/PhysicsServerCommandProcessor.h @@ -55,6 +55,7 @@ protected: bool processProfileTimingCommand(const struct SharedMemoryCommand& clientCmd, struct SharedMemoryStatus& serverStatusOut, char* bufferServerToClient, int bufferSizeInBytes); bool processRequestCollisionInfoCommand(const struct SharedMemoryCommand& clientCmd, struct SharedMemoryStatus& serverStatusOut, char* bufferServerToClient, int bufferSizeInBytes); bool processForwardDynamicsCommand(const struct SharedMemoryCommand& clientCmd, struct SharedMemoryStatus& serverStatusOut, char* bufferServerToClient, int bufferSizeInBytes); + bool performCollisionDetectionCommand(const struct SharedMemoryCommand& clientCmd, struct SharedMemoryStatus& serverStatusOut, char* bufferServerToClient, int bufferSizeInBytes); bool processRequestInternalDataCommand(const struct SharedMemoryCommand& clientCmd, struct SharedMemoryStatus& serverStatusOut, char* bufferServerToClient, int bufferSizeInBytes); bool processChangeDynamicsInfoCommand(const struct SharedMemoryCommand& clientCmd, struct SharedMemoryStatus& serverStatusOut, char* bufferServerToClient, int bufferSizeInBytes); bool processSetAdditionalSearchPathCommand(const struct SharedMemoryCommand& clientCmd, struct SharedMemoryStatus& serverStatusOut, char* bufferServerToClient, int bufferSizeInBytes); diff --git a/examples/SharedMemory/SharedMemoryPublic.h b/examples/SharedMemory/SharedMemoryPublic.h index 775f9f708..9ea8c1694 100644 --- a/examples/SharedMemory/SharedMemoryPublic.h +++ b/examples/SharedMemory/SharedMemoryPublic.h @@ -115,7 +115,8 @@ enum EnumSharedMemoryClientCommand CMD_REMOVE_USER_DATA, CMD_COLLISION_FILTER, CMD_REQUEST_MESH_DATA, - + + CMD_PERFORM_COLLISION_DETECTION, //don't go beyond this command! CMD_MAX_CLIENT_COMMANDS, }; @@ -239,6 +240,7 @@ enum EnumSharedMemoryServerStatus CMD_REQUEST_MESH_DATA_COMPLETED, CMD_REQUEST_MESH_DATA_FAILED, + CMD_PERFORM_COLLISION_DETECTION_COMPLETED, //don't go beyond 'CMD_MAX_SERVER_COMMANDS! CMD_MAX_SERVER_COMMANDS }; diff --git a/examples/pybullet/pybullet.c b/examples/pybullet/pybullet.c index 56b5f7511..7359fdadc 100644 --- a/examples/pybullet/pybullet.c +++ b/examples/pybullet/pybullet.c @@ -372,6 +372,41 @@ static PyObject* pybullet_stepSimulation(PyObject* self, PyObject* args, PyObjec return Py_None; } + +// perform collision detection: update aabbs, compute overlapping pairs and contact points +static PyObject* pybullet_performCollisionDetection(PyObject* self, PyObject* args, PyObject* keywds) +{ + int physicsClientId = 0; + static char* kwlist[] = {"physicsClientId", NULL}; + b3PhysicsClientHandle sm = 0; + + if (!PyArg_ParseTupleAndKeywords(args, keywds, "|i", kwlist, &physicsClientId)) + { + return NULL; + } + sm = getPhysicsClient(physicsClientId); + if (sm == 0) + { + PyErr_SetString(SpamError, "Not connected to physics server."); + return NULL; + } + + { + b3SharedMemoryStatusHandle statusHandle; + int statusType; + + if (b3CanSubmitCommand(sm)) + { + statusHandle = b3SubmitClientCommandAndWaitStatus( + sm, b3InitPerformCollisionDetectionCommand(sm)); + } + } + + Py_INCREF(Py_None); + return Py_None; +} + + static PyObject* pybullet_connectPhysicsServer(PyObject* self, PyObject* args, PyObject* keywds) { int freeIndex = -1; @@ -12244,6 +12279,10 @@ static PyMethodDef SpamMethods[] = { "stepSimulation(physicsClientId=0)\n" "Step the simulation using forward dynamics."}, + {"performCollisionDetection", (PyCFunction)pybullet_performCollisionDetection, METH_VARARGS | METH_KEYWORDS, + "performCollisionDetection(physicsClientId=0)\n" + "Update AABBs, compute overlapping pairs and contact points. stepSimulation also includes this already."}, + {"setGravity", (PyCFunction)pybullet_setGravity, METH_VARARGS | METH_KEYWORDS, "setGravity(gravX, gravY, gravZ, physicsClientId=0)\n" "Set the gravity acceleration (x,y,z)."}, From 4d34ba731094a3e08fc88f8ff898d901788a0058 Mon Sep 17 00:00:00 2001 From: erwin coumans Date: Mon, 5 Apr 2021 11:35:19 -0700 Subject: [PATCH 29/36] add updated Laikago envs_v2, with PMTG and MPC examples. python -m pybullet_envs.minitaur.envs_v2.locomotion_gym_env_test python -m pybullet_envs.minitaur.envs_v2.examples.laikago_mpc_wrapper_example python -m pybullet_envs.minitaur.envs_v2.examples.laikago_static_gait_example python -m pybullet_envs.minitaur.agents.baseline_controller.locomotion_controller_example PMTG example, not well tuned: python -m pybullet_envs.minitaur.envs_v2.examples.laikago_pmtg_example --- .../configs/laikago_gym_config.gin | 80 + .../pybullet_data/configs/laikago_gym_env.gin | 116 ++ .../configs/laikago_mpc_example_flat.gin | 149 ++ .../configs/laikago_mpc_stepstone.gin | 142 ++ .../configs/laikago_reactive.gin | 133 ++ .../configs/laikago_walk_static_gait.gin | 65 + .../configs/minitaur_gym_config.gin | 48 + .../configs/minitaur_gym_env.gin | 63 + .../configs_v2/base/laikago_reactive.gin | 80 + .../configs_v2/base/laikago_with_imu.gin | 66 + .../configs_v2/base/mini_cheetah_with_imu.gin | 9 + .../configs_v2/robots/laikago.gin | 58 + .../configs_v2/robots/mini_cheetah.gin | 98 ++ .../configs_v2/robots/minitaur.gin | 31 + .../configs_v2/scenes/simple_scene.gin | 4 + .../configs_v2/scenes/stair_scene.gin | 3 + .../configs_v2/tasks/fwd_task.gin | 4 + .../configs_v2/tasks/fwd_task_laikago.gin | 8 + .../tasks/fwd_task_no_termination.gin | 11 + .../fwd_task_no_termination_simplified.gin | 12 + .../configs_v2/wrappers/pmtg_wrapper.gin | 18 + .../configs_v2/wrappers/pmtg_wrapper_dict.gin | 6 + .../wrappers/pmtg_wrapper_laikago.gin | 10 + .../wrappers/pmtg_wrapper_simplified_env.gin | 18 + .../gym/pybullet_data/testdata/__init__.py | 0 .../test_imu_state_estimator/__init__.py | 0 .../accelerometer.npy | Bin 0 -> 4928 bytes .../estimated_velocities.npy | Bin 0 -> 4928 bytes .../feet_contact_forces.npy | Bin 0 -> 19328 bytes .../test_imu_state_estimator/gyroscope.npy | Bin 0 -> 6528 bytes .../test_imu_state_estimator/jacobians.npy | Bin 0 -> 201440 bytes .../motor_velocities.npy | Bin 0 -> 19328 bytes .../test_imu_state_estimator/timestamp.npy | Bin 0 -> 1728 bytes .../pybullet/gym/pybullet_data/urdf/mug.obj | 1352 +++++++++++++++ .../pybullet/gym/pybullet_data/urdf/mug.urdf | 28 + .../gym/pybullet_data/urdf/mug_col.obj | 1310 +++++++++++++++ .../gym/pybullet_envs/minitaur/__init__.py | 1 - .../pybullet_envs/minitaur/agents/__init__.py | 1 - .../agents/baseline_controller/__init__.py | 0 .../com_height_estimator.py | 76 + .../com_velocity_estimator.py | 83 + .../dummy_gait_generator.py | 87 + .../baseline_controller/foot_stepper.py | 199 +++ .../baseline_controller/gait_generator.py | 32 + .../imu_based_com_velocity_estimator.py | 216 +++ .../baseline_controller/leg_controller.py | 29 + .../locomotion_controller.py | 96 ++ .../locomotion_controller_example.py | 190 +++ ...tion_controller_in_scenario_set_example.py | 180 ++ .../locomotion_controller_setup.py | 175 ++ .../minitaur_raibert_controller.py | 448 +++++ .../minitaur_raibert_controller_utils.py | 82 + .../model_predictive_control.py | 149 ++ .../multi_state_estimator.py | 48 + .../openloop_gait_generator.py | 194 +++ .../raibert_swing_leg_controller.py | 242 +++ .../baseline_controller/state_estimator.py | 21 + .../static_gait_controller.py | 63 + .../time_based_moving_window_filter.py | 45 + .../torque_stance_leg_controller.py | 229 +++ .../trajectory_generator/controller_simple.py | 87 + .../agents/trajectory_generator/tg_inplace.py | 57 + .../agents/trajectory_generator/tg_simple.py | 400 +++++ .../minitaur/envs_v2/__init__.py | 0 .../minitaur/envs_v2/base_client.py | 63 + .../envs_v2/curriculum_reset_helpers.py | 62 + .../minitaur/envs_v2/env_loader.py | 75 + .../minitaur/envs_v2/env_wrappers/__init__.py | 0 .../action_denormalize_wrapper.py | 41 + .../env_wrappers/alternating_legs_openloop.py | 125 ++ .../env_wrappers/curriculum_wrapper_env.py | 50 + .../depth_uv_to_footplacement_wrapper.py | 357 ++++ .../fixed_steptime_wrapper_env.py | 92 + .../env_wrappers/ik_based_wrapper_env.py | 109 ++ .../env_wrappers/imitation_wrapper_env.py | 101 ++ .../env_wrappers/mpc_locomotion_wrapper.py | 794 +++++++++ ...observation_dictionary_to_array_wrapper.py | 65 + .../env_wrappers/pmtg_inplace_wrapper_env.py | 176 ++ .../envs_v2/env_wrappers/pmtg_wrapper_env.py | 290 ++++ .../envs_v2/env_wrappers/simple_openloop.py | 127 ++ .../state_machine_based_wrapper_env.py | 321 ++++ .../step_based_curriculum_wrapper_env.py | 231 +++ .../trajectory_generator_wrapper_env.py | 81 + .../envs_v2/env_wrappers/walking_wrapper.py | 134 ++ .../minitaur/envs_v2/evaluation/__init__.py | 0 .../minitaur/envs_v2/evaluation/metric.py | 125 ++ .../envs_v2/evaluation/metric_logger.py | 155 ++ .../envs_v2/evaluation/metric_utils.py | 29 + .../examples/laikago_mpc_wrapper_example.py | 96 ++ .../envs_v2/examples/laikago_pmtg_example.py | 84 + .../examples/laikago_static_gait_example.py | 52 + .../minitaur/envs_v2/locomotion_gym_config.py | 58 + .../envs_v2/locomotion_gym_config_test.py | 75 + .../minitaur/envs_v2/locomotion_gym_env.py | 731 ++++++++ .../envs_v2/locomotion_gym_env_test.py | 241 +++ .../envs_v2/multiagent_mobility_gym_env.py | 485 ++++++ .../minitaur/envs_v2/scenes/scene_base.py | 256 +++ .../minitaur/envs_v2/scenes/simple_scene.py | 35 + .../minitaur/envs_v2/scenes/world_asset.proto | 86 + .../envs_v2/scenes/world_asset_pb2.py | 555 +++++++ .../envs_v2/sensors/accelerometer_sensor.py | 86 + .../minitaur/envs_v2/sensors/camera_sensor.py | 184 ++ .../minitaur/envs_v2/sensors/imu_sensor.py | 133 ++ .../envs_v2/sensors/last_action_sensor.py | 60 + .../envs_v2/sensors/motor_angle_sensor.py | 122 ++ .../minitaur/envs_v2/sensors/sensor.py | 451 +++++ .../minitaur/envs_v2/sensors/space_utils.py | 137 ++ .../envs_v2/sensors/toe_position_sensor.py | 100 ++ .../minitaur/envs_v2/tasks/__init__.py | 0 .../envs_v2/tasks/simple_locomotion_task.py | 125 ++ .../minitaur/envs_v2/tasks/task_interface.py | 37 + .../minitaur/envs_v2/tasks/task_utils.py | 108 ++ .../envs_v2/tasks/terminal_conditions.py | 301 ++++ .../minitaur/envs_v2/utilities/env_utils.py | 175 ++ .../envs_v2/utilities/env_utils_v2.py | 22 + .../envs_v2/utilities/laikago_pose_utils.py | 50 + .../utilities/mini_cheetah_pose_utils.py | 35 + .../envs_v2/utilities/minitaur_pose_utils.py | 187 +++ .../envs_v2/utilities/noise_generators.py | 255 +++ .../envs_v2/utilities/rendering_utils.py | 272 +++ .../envs_v2/utilities/robot_pose_utils.py | 189 +++ .../envs_v2/utilities/termination_reason.py | 40 + .../pybullet_envs/minitaur/robots/__init__.py | 0 .../minitaur/robots/autonomous_object.py | 286 ++++ .../minitaur/robots/crowd_controller.py | 706 ++++++++ .../minitaur/robots/hybrid_motor_model.py | 278 ++++ .../pybullet_envs/minitaur/robots/laikago.py | 319 ++++ .../minitaur/robots/laikago_constants.py | 120 ++ .../minitaur/robots/laikago_interface.proto | 181 ++ .../minitaur/robots/laikago_interface_pb2.py | 1040 ++++++++++++ .../robots/laikago_kinematic_constants.py | 106 ++ .../minitaur/robots/laikago_motor.py | 149 ++ .../minitaur/robots/laikago_v2.py | 34 + .../minitaur/robots/mini_cheetah.py | 133 ++ .../minitaur/robots/mini_cheetah_test.py | 58 + .../pybullet_envs/minitaur/robots/minitaur.py | 1479 +++++++++++++++++ .../minitaur/robots/minitaur_constants.py | 62 + .../minitaur/robots/minitaur_motor.py | 171 ++ .../robots/minitaur_motor_model_v2.py | 145 ++ .../minitaur/robots/minitaur_v2.py | 122 ++ .../minitaur/robots/object_controller.py | 810 +++++++++ .../minitaur/robots/quadruped_base.py | 724 ++++++++ .../minitaur/robots/robot_base.py | 133 ++ .../minitaur/robots/robot_config.py | 105 ++ .../minitaur/robots/robot_urdf_loader.py | 371 +++++ .../minitaur/robots/safety/__init__.py | 0 .../minitaur/robots/safety/data_types.py | 67 + .../robots/safety/motor_action_validator.py | 128 ++ .../robots/safety/motor_state_validator.py | 137 ++ .../safety/python/moving_window_filter.py | 68 + .../minitaur/robots/safety/safety_checker.py | 119 ++ .../minitaur/robots/safety/safety_error.py | 11 + .../minitaur/robots/safety/utilities.py | 163 ++ .../minitaur/robots/time_ordered_buffer.py | 263 +++ .../minitaur/robots/timestamp.proto | 147 ++ .../minitaur/robots/timestamp_pb2.py | 78 + .../minitaur/robots/utilities/__init__.py | 0 .../robots/utilities/action_filter.py | 239 +++ .../minitaur/robots/utilities/kinematics.py | 127 ++ .../robots/utilities/kinematics_utils.py | 208 +++ .../minitaur/robots/utilities/urdf_utils.py | 59 + .../minitaur/robots/vector.proto | 84 + .../minitaur/robots/vector_pb2.py | 640 +++++++ .../minitaur/vision/imagery.proto | 72 + .../minitaur/vision/imagery_client.py | 137 ++ .../minitaur/vision/imagery_utils.py | 43 + .../minitaur/vision/imagery_utils_test.py | 84 + .../minitaur/vision/point_cloud_utils.py | 60 + .../minitaur/vision/sim_camera.proto | 26 + .../minitaur/vision/sim_camera.py | 350 ++++ 170 files changed, 27618 insertions(+), 2 deletions(-) create mode 100644 examples/pybullet/gym/pybullet_data/configs/laikago_gym_config.gin create mode 100644 examples/pybullet/gym/pybullet_data/configs/laikago_gym_env.gin create mode 100644 examples/pybullet/gym/pybullet_data/configs/laikago_mpc_example_flat.gin create mode 100644 examples/pybullet/gym/pybullet_data/configs/laikago_mpc_stepstone.gin create mode 100644 examples/pybullet/gym/pybullet_data/configs/laikago_reactive.gin create mode 100644 examples/pybullet/gym/pybullet_data/configs/laikago_walk_static_gait.gin create mode 100644 examples/pybullet/gym/pybullet_data/configs/minitaur_gym_config.gin create mode 100644 examples/pybullet/gym/pybullet_data/configs/minitaur_gym_env.gin create mode 100644 examples/pybullet/gym/pybullet_data/configs_v2/base/laikago_reactive.gin create mode 100644 examples/pybullet/gym/pybullet_data/configs_v2/base/laikago_with_imu.gin create mode 100644 examples/pybullet/gym/pybullet_data/configs_v2/base/mini_cheetah_with_imu.gin create mode 100644 examples/pybullet/gym/pybullet_data/configs_v2/robots/laikago.gin create mode 100644 examples/pybullet/gym/pybullet_data/configs_v2/robots/mini_cheetah.gin create mode 100644 examples/pybullet/gym/pybullet_data/configs_v2/robots/minitaur.gin create mode 100644 examples/pybullet/gym/pybullet_data/configs_v2/scenes/simple_scene.gin create mode 100644 examples/pybullet/gym/pybullet_data/configs_v2/scenes/stair_scene.gin create mode 100644 examples/pybullet/gym/pybullet_data/configs_v2/tasks/fwd_task.gin create mode 100644 examples/pybullet/gym/pybullet_data/configs_v2/tasks/fwd_task_laikago.gin create mode 100644 examples/pybullet/gym/pybullet_data/configs_v2/tasks/fwd_task_no_termination.gin create mode 100644 examples/pybullet/gym/pybullet_data/configs_v2/tasks/fwd_task_no_termination_simplified.gin create mode 100644 examples/pybullet/gym/pybullet_data/configs_v2/wrappers/pmtg_wrapper.gin create mode 100644 examples/pybullet/gym/pybullet_data/configs_v2/wrappers/pmtg_wrapper_dict.gin create mode 100644 examples/pybullet/gym/pybullet_data/configs_v2/wrappers/pmtg_wrapper_laikago.gin create mode 100644 examples/pybullet/gym/pybullet_data/configs_v2/wrappers/pmtg_wrapper_simplified_env.gin create mode 100644 examples/pybullet/gym/pybullet_data/testdata/__init__.py create mode 100644 examples/pybullet/gym/pybullet_data/testdata/test_imu_state_estimator/__init__.py create mode 100644 examples/pybullet/gym/pybullet_data/testdata/test_imu_state_estimator/accelerometer.npy create mode 100644 examples/pybullet/gym/pybullet_data/testdata/test_imu_state_estimator/estimated_velocities.npy create mode 100644 examples/pybullet/gym/pybullet_data/testdata/test_imu_state_estimator/feet_contact_forces.npy create mode 100644 examples/pybullet/gym/pybullet_data/testdata/test_imu_state_estimator/gyroscope.npy create mode 100644 examples/pybullet/gym/pybullet_data/testdata/test_imu_state_estimator/jacobians.npy create mode 100644 examples/pybullet/gym/pybullet_data/testdata/test_imu_state_estimator/motor_velocities.npy create mode 100644 examples/pybullet/gym/pybullet_data/testdata/test_imu_state_estimator/timestamp.npy create mode 100644 examples/pybullet/gym/pybullet_data/urdf/mug.obj create mode 100644 examples/pybullet/gym/pybullet_data/urdf/mug.urdf create mode 100644 examples/pybullet/gym/pybullet_data/urdf/mug_col.obj create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/__init__.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/com_height_estimator.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/com_velocity_estimator.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/dummy_gait_generator.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/foot_stepper.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/gait_generator.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/imu_based_com_velocity_estimator.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/leg_controller.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/locomotion_controller.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/locomotion_controller_example.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/locomotion_controller_in_scenario_set_example.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/locomotion_controller_setup.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/minitaur_raibert_controller.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/minitaur_raibert_controller_utils.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/model_predictive_control.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/multi_state_estimator.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/openloop_gait_generator.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/raibert_swing_leg_controller.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/state_estimator.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/static_gait_controller.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/time_based_moving_window_filter.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/torque_stance_leg_controller.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/agents/trajectory_generator/controller_simple.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/agents/trajectory_generator/tg_inplace.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/agents/trajectory_generator/tg_simple.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/__init__.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/base_client.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/curriculum_reset_helpers.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_loader.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/__init__.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/action_denormalize_wrapper.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/alternating_legs_openloop.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/curriculum_wrapper_env.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/depth_uv_to_footplacement_wrapper.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/fixed_steptime_wrapper_env.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/ik_based_wrapper_env.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/imitation_wrapper_env.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/mpc_locomotion_wrapper.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/observation_dictionary_to_array_wrapper.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/pmtg_inplace_wrapper_env.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/pmtg_wrapper_env.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/simple_openloop.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/state_machine_based_wrapper_env.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/step_based_curriculum_wrapper_env.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/trajectory_generator_wrapper_env.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/walking_wrapper.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/evaluation/__init__.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/evaluation/metric.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/evaluation/metric_logger.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/evaluation/metric_utils.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/examples/laikago_mpc_wrapper_example.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/examples/laikago_pmtg_example.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/examples/laikago_static_gait_example.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/locomotion_gym_config.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/locomotion_gym_config_test.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/locomotion_gym_env.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/locomotion_gym_env_test.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/multiagent_mobility_gym_env.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/scenes/scene_base.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/scenes/simple_scene.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/scenes/world_asset.proto create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/scenes/world_asset_pb2.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/sensors/accelerometer_sensor.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/sensors/camera_sensor.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/sensors/imu_sensor.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/sensors/last_action_sensor.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/sensors/motor_angle_sensor.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/sensors/sensor.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/sensors/space_utils.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/sensors/toe_position_sensor.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/tasks/__init__.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/tasks/simple_locomotion_task.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/tasks/task_interface.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/tasks/task_utils.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/tasks/terminal_conditions.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/utilities/env_utils.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/utilities/env_utils_v2.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/utilities/laikago_pose_utils.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/utilities/mini_cheetah_pose_utils.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/utilities/minitaur_pose_utils.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/utilities/noise_generators.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/utilities/rendering_utils.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/utilities/robot_pose_utils.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/utilities/termination_reason.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/robots/__init__.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/robots/autonomous_object.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/robots/crowd_controller.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/robots/hybrid_motor_model.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/robots/laikago.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/robots/laikago_constants.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/robots/laikago_interface.proto create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/robots/laikago_interface_pb2.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/robots/laikago_kinematic_constants.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/robots/laikago_motor.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/robots/laikago_v2.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/robots/mini_cheetah.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/robots/mini_cheetah_test.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/robots/minitaur.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/robots/minitaur_constants.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/robots/minitaur_motor.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/robots/minitaur_motor_model_v2.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/robots/minitaur_v2.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/robots/object_controller.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/robots/quadruped_base.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/robots/robot_base.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/robots/robot_config.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/robots/robot_urdf_loader.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/robots/safety/__init__.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/robots/safety/data_types.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/robots/safety/motor_action_validator.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/robots/safety/motor_state_validator.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/robots/safety/python/moving_window_filter.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/robots/safety/safety_checker.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/robots/safety/safety_error.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/robots/safety/utilities.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/robots/time_ordered_buffer.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/robots/timestamp.proto create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/robots/timestamp_pb2.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/robots/utilities/__init__.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/robots/utilities/action_filter.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/robots/utilities/kinematics.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/robots/utilities/kinematics_utils.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/robots/utilities/urdf_utils.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/robots/vector.proto create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/robots/vector_pb2.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/vision/imagery.proto create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/vision/imagery_client.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/vision/imagery_utils.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/vision/imagery_utils_test.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/vision/point_cloud_utils.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/vision/sim_camera.proto create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/vision/sim_camera.py diff --git a/examples/pybullet/gym/pybullet_data/configs/laikago_gym_config.gin b/examples/pybullet/gym/pybullet_data/configs/laikago_gym_config.gin new file mode 100644 index 000000000..3a7095680 --- /dev/null +++ b/examples/pybullet/gym/pybullet_data/configs/laikago_gym_config.gin @@ -0,0 +1,80 @@ +import pybullet_envs.minitaur.envs_v2.locomotion_gym_config +import pybullet_envs.minitaur.envs_v2.sensors.robot_sensors + +UPPER_BOUND = 6.28318548203 +LOWER_BOUND = -6.28318548203 +SIM_TIME_STEP = 0.001 +NUM_ACTION_REPEAT = 2 +NUM_MOTORS = 12 +NOISY_READING = True + +locomotion_gym_config.SimulationParameters.sim_time_step_s = %SIM_TIME_STEP +locomotion_gym_config.SimulationParameters.num_action_repeat = %NUM_ACTION_REPEAT +locomotion_gym_config.SimulationParameters.enable_rendering = False +locomotion_gym_config.LocomotionGymConfig.simulation_parameters = @locomotion_gym_config.SimulationParameters() + +robot_sensors.IMUSensor.channels = ["R", "P", "dR", "dP"] +robot_sensors.IMUSensor.noisy_reading = %NOISY_READING +robot_sensors.IMUSensor.lower_bound = [-6.28318548203, -6.28318548203, + -6283.18554688, -6283.18554688] +robot_sensors.IMUSensor.upper_bound = [6.28318548203, 6.28318548203, + 6283.18554688, 6283.18554688] + +robot_sensors.MotorAngleSensor.num_motors = %NUM_MOTORS +robot_sensors.MotorAngleSensor.noisy_reading = %NOISY_READING +robot_sensors.MotorAngleSensor.lower_bound = -6.28318548203 +robot_sensors.MotorAngleSensor.upper_bound = 6.28318548203 + +sensors = [@robot_sensors.IMUSensor(), @robot_sensors.MotorAngleSensor()] + +Act0/locomotion_gym_config.ScalarField.name = "motor_angle_0" +Act0/locomotion_gym_config.ScalarField.upper_bound = %UPPER_BOUND +Act0/locomotion_gym_config.ScalarField.lower_bound = %LOWER_BOUND +Act1/locomotion_gym_config.ScalarField.name = "motor_angle_1" +Act1/locomotion_gym_config.ScalarField.upper_bound = %UPPER_BOUND +Act1/locomotion_gym_config.ScalarField.lower_bound = %LOWER_BOUND +Act2/locomotion_gym_config.ScalarField.name = "motor_angle_2" +Act2/locomotion_gym_config.ScalarField.upper_bound = %UPPER_BOUND +Act2/locomotion_gym_config.ScalarField.lower_bound = %LOWER_BOUND +Act3/locomotion_gym_config.ScalarField.name = "motor_angle_3" +Act3/locomotion_gym_config.ScalarField.upper_bound = %UPPER_BOUND +Act3/locomotion_gym_config.ScalarField.lower_bound = %LOWER_BOUND +Act4/locomotion_gym_config.ScalarField.name = "motor_angle_4" +Act4/locomotion_gym_config.ScalarField.upper_bound = %UPPER_BOUND +Act4/locomotion_gym_config.ScalarField.lower_bound = %LOWER_BOUND +Act5/locomotion_gym_config.ScalarField.name = "motor_angle_5" +Act5/locomotion_gym_config.ScalarField.upper_bound = %UPPER_BOUND +Act5/locomotion_gym_config.ScalarField.lower_bound = %LOWER_BOUND +Act6/locomotion_gym_config.ScalarField.name = "motor_angle_6" +Act6/locomotion_gym_config.ScalarField.upper_bound = %UPPER_BOUND +Act6/locomotion_gym_config.ScalarField.lower_bound = %LOWER_BOUND +Act7/locomotion_gym_config.ScalarField.name = "motor_angle_7" +Act7/locomotion_gym_config.ScalarField.upper_bound = %UPPER_BOUND +Act7/locomotion_gym_config.ScalarField.lower_bound = %LOWER_BOUND +Act8/locomotion_gym_config.ScalarField.name = "motor_angle_8" +Act8/locomotion_gym_config.ScalarField.upper_bound = %UPPER_BOUND +Act8/locomotion_gym_config.ScalarField.lower_bound = %LOWER_BOUND +Act9/locomotion_gym_config.ScalarField.name = "motor_angle_9" +Act9/locomotion_gym_config.ScalarField.upper_bound = %UPPER_BOUND +Act9/locomotion_gym_config.ScalarField.lower_bound = %LOWER_BOUND +Act10/locomotion_gym_config.ScalarField.name = "motor_angle_10" +Act10/locomotion_gym_config.ScalarField.upper_bound = %UPPER_BOUND +Act10/locomotion_gym_config.ScalarField.lower_bound = %LOWER_BOUND +Act11/locomotion_gym_config.ScalarField.name = "motor_angle_11" +Act11/locomotion_gym_config.ScalarField.upper_bound = %UPPER_BOUND +Act11/locomotion_gym_config.ScalarField.lower_bound = %LOWER_BOUND + + +locomotion_gym_config.LocomotionGymConfig.actions = [ + @Act0/locomotion_gym_config.ScalarField(), + @Act1/locomotion_gym_config.ScalarField(), + @Act2/locomotion_gym_config.ScalarField(), + @Act3/locomotion_gym_config.ScalarField(), + @Act4/locomotion_gym_config.ScalarField(), + @Act5/locomotion_gym_config.ScalarField(), + @Act6/locomotion_gym_config.ScalarField(), + @Act7/locomotion_gym_config.ScalarField(), + @Act8/locomotion_gym_config.ScalarField(), + @Act9/locomotion_gym_config.ScalarField(), + @Act10/locomotion_gym_config.ScalarField(), + @Act11/locomotion_gym_config.ScalarField()] diff --git a/examples/pybullet/gym/pybullet_data/configs/laikago_gym_env.gin b/examples/pybullet/gym/pybullet_data/configs/laikago_gym_env.gin new file mode 100644 index 000000000..0b3b1ce95 --- /dev/null +++ b/examples/pybullet/gym/pybullet_data/configs/laikago_gym_env.gin @@ -0,0 +1,116 @@ +import pybullet_envs.minitaur.envs_v2.locomotion_gym_env +import pybullet_envs.minitaur.envs_v2.scenes.simple_scene +import pybullet_envs.minitaur.envs_v2.tasks.simple_locomotion_task +import pybullet_envs.minitaur.robots.laikago + +URDF_ROOT = "urdf/" +ABDUCTION_P_GAIN = 220.0 +ABDUCTION_D_GAIN = 0.3 +HIP_P_GAIN = 220.0 +HIP_D_GAIN = 2.0 +KNEE_P_GAIN = 220.0 +KNEE_D_GAIN = 2.0 + +import pybullet_envs.minitaur.envs_v2.locomotion_gym_config +import pybullet_envs.minitaur.envs_v2.sensors.robot_sensors + +UPPER_BOUND = 6.28318548203 +LOWER_BOUND = -6.28318548203 +SIM_TIME_STEP = 0.001 +NUM_ACTION_REPEAT = 2 +NUM_MOTORS = 12 +NOISY_READING = True + +locomotion_gym_config.SimulationParameters.sim_time_step_s = %SIM_TIME_STEP +locomotion_gym_config.SimulationParameters.num_action_repeat = %NUM_ACTION_REPEAT +locomotion_gym_config.SimulationParameters.enable_rendering = False +locomotion_gym_config.LocomotionGymConfig.simulation_parameters = @locomotion_gym_config.SimulationParameters() + +robot_sensors.IMUSensor.channels = ["R", "P", "dR", "dP"] +robot_sensors.IMUSensor.noisy_reading = %NOISY_READING +robot_sensors.IMUSensor.lower_bound = [-6.28318548203, -6.28318548203, + -6283.18554688, -6283.18554688] +robot_sensors.IMUSensor.upper_bound = [6.28318548203, 6.28318548203, + 6283.18554688, 6283.18554688] + +robot_sensors.MotorAngleSensor.num_motors = %NUM_MOTORS +robot_sensors.MotorAngleSensor.noisy_reading = %NOISY_READING +robot_sensors.MotorAngleSensor.lower_bound = -6.28318548203 +robot_sensors.MotorAngleSensor.upper_bound = 6.28318548203 + +sensors = [@robot_sensors.IMUSensor(), @robot_sensors.MotorAngleSensor()] + +Act0/locomotion_gym_config.ScalarField.name = "motor_angle_0" +Act0/locomotion_gym_config.ScalarField.upper_bound = %UPPER_BOUND +Act0/locomotion_gym_config.ScalarField.lower_bound = %LOWER_BOUND +Act1/locomotion_gym_config.ScalarField.name = "motor_angle_1" +Act1/locomotion_gym_config.ScalarField.upper_bound = %UPPER_BOUND +Act1/locomotion_gym_config.ScalarField.lower_bound = %LOWER_BOUND +Act2/locomotion_gym_config.ScalarField.name = "motor_angle_2" +Act2/locomotion_gym_config.ScalarField.upper_bound = %UPPER_BOUND +Act2/locomotion_gym_config.ScalarField.lower_bound = %LOWER_BOUND +Act3/locomotion_gym_config.ScalarField.name = "motor_angle_3" +Act3/locomotion_gym_config.ScalarField.upper_bound = %UPPER_BOUND +Act3/locomotion_gym_config.ScalarField.lower_bound = %LOWER_BOUND +Act4/locomotion_gym_config.ScalarField.name = "motor_angle_4" +Act4/locomotion_gym_config.ScalarField.upper_bound = %UPPER_BOUND +Act4/locomotion_gym_config.ScalarField.lower_bound = %LOWER_BOUND +Act5/locomotion_gym_config.ScalarField.name = "motor_angle_5" +Act5/locomotion_gym_config.ScalarField.upper_bound = %UPPER_BOUND +Act5/locomotion_gym_config.ScalarField.lower_bound = %LOWER_BOUND +Act6/locomotion_gym_config.ScalarField.name = "motor_angle_6" +Act6/locomotion_gym_config.ScalarField.upper_bound = %UPPER_BOUND +Act6/locomotion_gym_config.ScalarField.lower_bound = %LOWER_BOUND +Act7/locomotion_gym_config.ScalarField.name = "motor_angle_7" +Act7/locomotion_gym_config.ScalarField.upper_bound = %UPPER_BOUND +Act7/locomotion_gym_config.ScalarField.lower_bound = %LOWER_BOUND +Act8/locomotion_gym_config.ScalarField.name = "motor_angle_8" +Act8/locomotion_gym_config.ScalarField.upper_bound = %UPPER_BOUND +Act8/locomotion_gym_config.ScalarField.lower_bound = %LOWER_BOUND +Act9/locomotion_gym_config.ScalarField.name = "motor_angle_9" +Act9/locomotion_gym_config.ScalarField.upper_bound = %UPPER_BOUND +Act9/locomotion_gym_config.ScalarField.lower_bound = %LOWER_BOUND +Act10/locomotion_gym_config.ScalarField.name = "motor_angle_10" +Act10/locomotion_gym_config.ScalarField.upper_bound = %UPPER_BOUND +Act10/locomotion_gym_config.ScalarField.lower_bound = %LOWER_BOUND +Act11/locomotion_gym_config.ScalarField.name = "motor_angle_11" +Act11/locomotion_gym_config.ScalarField.upper_bound = %UPPER_BOUND +Act11/locomotion_gym_config.ScalarField.lower_bound = %LOWER_BOUND + + +locomotion_gym_config.LocomotionGymConfig.actions = [ + @Act0/locomotion_gym_config.ScalarField(), + @Act1/locomotion_gym_config.ScalarField(), + @Act2/locomotion_gym_config.ScalarField(), + @Act3/locomotion_gym_config.ScalarField(), + @Act4/locomotion_gym_config.ScalarField(), + @Act5/locomotion_gym_config.ScalarField(), + @Act6/locomotion_gym_config.ScalarField(), + @Act7/locomotion_gym_config.ScalarField(), + @Act8/locomotion_gym_config.ScalarField(), + @Act9/locomotion_gym_config.ScalarField(), + @Act10/locomotion_gym_config.ScalarField(), + @Act11/locomotion_gym_config.ScalarField()] + + + +laikago.Laikago.urdf_root = %URDF_ROOT +laikago.Laikago.time_step = %SIM_TIME_STEP +laikago.Laikago.action_repeat = %NUM_ACTION_REPEAT +laikago.Laikago.self_collision_enabled = False +laikago.Laikago.control_latency = 0.002 +laikago.Laikago.pd_latency = 0.0 +laikago.Laikago.motor_kp = [%ABDUCTION_P_GAIN, %HIP_P_GAIN, %KNEE_P_GAIN, + %ABDUCTION_P_GAIN, %HIP_P_GAIN, %KNEE_P_GAIN, + %ABDUCTION_P_GAIN, %HIP_P_GAIN, %KNEE_P_GAIN, + %ABDUCTION_P_GAIN, %HIP_P_GAIN, %KNEE_P_GAIN] +laikago.Laikago.motor_kd = [%ABDUCTION_D_GAIN, %HIP_D_GAIN, %KNEE_D_GAIN, + %ABDUCTION_D_GAIN, %HIP_D_GAIN, %KNEE_D_GAIN, + %ABDUCTION_D_GAIN, %HIP_D_GAIN, %KNEE_D_GAIN, + %ABDUCTION_D_GAIN, %HIP_D_GAIN, %KNEE_D_GAIN] +laikago.Laikago.sensors = %sensors + +locomotion_gym_env.LocomotionGymEnv.gym_config = @locomotion_gym_config.LocomotionGymConfig() +locomotion_gym_env.LocomotionGymEnv.robot_class = @laikago.Laikago +locomotion_gym_env.LocomotionGymEnv.scene = @simple_scene.SimpleScene() +locomotion_gym_env.LocomotionGymEnv.task = @simple_locomotion_task.SimpleForwardTask() diff --git a/examples/pybullet/gym/pybullet_data/configs/laikago_mpc_example_flat.gin b/examples/pybullet/gym/pybullet_data/configs/laikago_mpc_example_flat.gin new file mode 100644 index 000000000..df735f43f --- /dev/null +++ b/examples/pybullet/gym/pybullet_data/configs/laikago_mpc_example_flat.gin @@ -0,0 +1,149 @@ +#-*-Python-*- + +# NOTE: Should be run with >=10CPU for decent performance. + +import pybullet_envs.minitaur.agents.baseline_controller.torque_stance_leg_controller +import pybullet_envs.minitaur.envs_v2.env_loader +import pybullet_envs.minitaur.envs_v2.env_wrappers.mpc_locomotion_wrapper +import pybullet_envs.minitaur.envs_v2.locomotion_gym_config +import pybullet_envs.minitaur.envs_v2.locomotion_gym_env +import pybullet_envs.minitaur.envs_v2.scenes.simple_scene +import pybullet_envs.minitaur.envs_v2.sensors.camera_sensor +import pybullet_envs.minitaur.envs_v2.sensors.imu_sensor +import pybullet_envs.minitaur.envs_v2.sensors.last_action_sensor +import pybullet_envs.minitaur.envs_v2.sensors.toe_position_sensor +import pybullet_envs.minitaur.envs_v2.tasks.simple_locomotion_task +import pybullet_envs.minitaur.envs_v2.tasks.terminal_conditions +import pybullet_envs.minitaur.envs_v2.utilities.noise_generators +import pybullet_envs.minitaur.robots.hybrid_motor_model +import pybullet_envs.minitaur.robots.laikago_v2 +import pybullet_envs.minitaur.robots.robot_config + + +# Configure the dynamic robot + +SIM_TIME_STEP = 0.001 +NUM_ACTION_REPEAT = 4 # Control frequency will be 100 Hz + + +######################################## +# Configure the sensors +######################################## +imu_sensor.IMUSensor.channels = [ + %imu_sensor.IMUChannel.ROLL, + %imu_sensor.IMUChannel.PITCH, + %imu_sensor.IMUChannel.ROLL_RATE, + %imu_sensor.IMUChannel.PITCH_RATE +] + +imu_sensor.IMUSensor.lower_bound = [-6.28318548203, -6.28318548203, -6283.18554688, -6283.18554688] +imu_sensor.IMUSensor.upper_bound = [6.28318548203, 6.28318548203, 6283.18554688, 6283.18554688] + +# Add noise to the IMU sensor and toe position sensor +IMUNoise/noise_generators.NormalNoise.scale = (0.025, 0.025, 0.1, 0.1) +TOENoise/noise_generators.NormalNoise.scale = (0.0025, 0.0025, 0.005, 0.0025, 0.0025, 0.005, 0.0025, 0.0025, 0.005, 0.0025, 0.0025, 0.005) +imu_sensor.IMUSensor.noise_generator = @IMUNoise/noise_generators.NormalNoise() +toe_position_sensor.ToePositionSensor.noise_generator = @TOENoise/noise_generators.NormalNoise() + +frontCamera/camera_sensor.CameraSensor.camera_translation_from_base = (0.197, 0.0, -0.115) +frontCamera/camera_sensor.CameraSensor.camera_rotation_from_base = (-0.4996018, 0.4999998, 0.4999998, 0.5003982) +frontCamera/camera_sensor.CameraSensor.parent_link_id = -1 +frontCamera/camera_sensor.CameraSensor.resolution = (32, 24) +frontCamera/camera_sensor.CameraSensor.sensor_latency = 0.03 +frontCamera/camera_sensor.CameraSensor.name = "frontCam" +frontCamera/camera_sensor.CameraSensor.fov_degree = 75 +frontCamera/camera_sensor.CameraSensor.camera_mode = %sim_camera.CameraMode.DEPTH +frontCamera/camera_sensor.CameraSensor.camera_update_frequency_hz = 30.0 + +rearCamera/camera_sensor.CameraSensor.camera_translation_from_base = (-0.092, 0.0, -0.105) +rearCamera/camera_sensor.CameraSensor.camera_rotation_from_base = (-0.4996018, 0.4999998, 0.4999998, 0.5003982) +rearCamera/camera_sensor.CameraSensor.parent_link_id = -1 +rearCamera/camera_sensor.CameraSensor.resolution = (32, 24) +rearCamera/camera_sensor.CameraSensor.sensor_latency = 0.03 +rearCamera/camera_sensor.CameraSensor.name = "rearCam" +rearCamera/camera_sensor.CameraSensor.fov_degree = 75 +rearCamera/camera_sensor.CameraSensor.camera_mode = %sim_camera.CameraMode.DEPTH +rearCamera/camera_sensor.CameraSensor.camera_update_frequency_hz = 30.0 + +sensors = [@imu_sensor.IMUSensor(), @last_action_sensor.LastActionSensor(), @toe_position_sensor.ToePositionSensor(), @frontCamera/camera_sensor.CameraSensor(), @rearCamera/camera_sensor.CameraSensor()] +laikago_v2.Laikago.sensors = %sensors + + +######################################## +# Specify the motor model and its parameters +######################################## +LAIKAGO_MOTOR_ANGLE_UPPER_LIMITS = 6.28318548203 +LAIKAGO_MOTOR_ANGLE_LOWER_LIMITS = -6.28318548203 +laikago/robot_config.MotorLimits.angle_lower_limits = %LAIKAGO_MOTOR_ANGLE_LOWER_LIMITS +laikago/robot_config.MotorLimits.angle_upper_limits = %LAIKAGO_MOTOR_ANGLE_UPPER_LIMITS +laikago/robot_config.MotorLimits.torque_lower_limits = -30 +laikago/robot_config.MotorLimits.torque_upper_limits = 30 +laikago_v2.Laikago.motor_limits = @laikago/robot_config.MotorLimits() +laikago_v2.Laikago.motor_control_mode = %robot_config.MotorControlMode.HYBRID +laikago_v2.Laikago.motor_model_class = @hybrid_motor_model.HybridMotorModel +locomotion_gym_env.LocomotionGymEnv.robot_class = @laikago_v2.Laikago +hybrid_motor_model.HybridMotorModel.kp = 250 +hybrid_motor_model.HybridMotorModel.kd = (0.3, 2.0, 2.0, 0.3, 2.0, 2.0, 0.3, 2.0, 2.0, 0.3, 2.0, 2.0) + + +######################################## +# Setup the terrain randomization and simulation parameters +######################################## + +locomotion_gym_config.LocomotionGymConfig.simulation_parameters = @locomotion_gym_config.SimulationParameters() +locomotion_gym_env.LocomotionGymEnv.robot_class = @laikago_v2.Laikago +locomotion_gym_env.LocomotionGymEnv.task = @simple_locomotion_task.SimpleForwardTask() +locomotion_gym_env.LocomotionGymEnv.gym_config = @locomotion_gym_config.LocomotionGymConfig() +locomotion_gym_env.LocomotionGymEnv.scene = @simple_scene.SimpleScene() +locomotion_gym_config.SimulationParameters.sim_time_step_s = %SIM_TIME_STEP +locomotion_gym_config.SimulationParameters.num_action_repeat = %NUM_ACTION_REPEAT + + +######################################## +# Setup the task and terminal condition parameters +######################################## +terminal_conditions.maxstep_terminal_condition.max_step = 2000 +terminal_conditions.default_terminal_condition_for_laikago_v2.max_roll = 0.25 +terminal_conditions.default_terminal_condition_for_laikago_v2.max_pitch = 1.0 +terminal_conditions.default_terminal_condition_for_laikago_v2.min_height = 0.15 +terminal_conditions.default_terminal_condition_for_laikago_v2.enforce_foot_contacts = True + +# Setup the terminal condition +terminal_conditions.logical_any_terminal_condition.conditions = [ + @terminal_conditions.default_terminal_condition_for_laikago_v2, + @terminal_conditions.maxstep_terminal_condition, + ] + +simple_locomotion_task.SimpleForwardTask.terminal_condition = @terminal_conditions.logical_any_terminal_condition + +env_loader.load.wrapper_classes = [ + @mpc_locomotion_wrapper.MPCLocomotionWrapper, +] + +######################################## +# Configure the MPC-related parameters +######################################## +torque_stance_leg_controller.TorqueStanceLegController.qp_weights = (5, 5, 0.2, 0, 0, 10, 0.5, 0.5, 0.2, 0.2, 0.2, 0.1, 0) +torque_stance_leg_controller.TorqueStanceLegController.body_inertia = (0.183375, 0, 0, 0, 0.6267, 0, 0, 0, 0.636175) +torque_stance_leg_controller.TorqueStanceLegController.friction_coeffs = (0.45, 0.45, 0.45, 0.45) + +######################################## +# Configure the foothold wrapper parameters and action space +######################################## +mpc_locomotion_wrapper.MPCLocomotionWrapper.foot_friction_coeff = 1.0 +mpc_locomotion_wrapper.MPCLocomotionWrapper.locomotion_gait = %mpc_locomotion_wrapper.Gait.TROT +mpc_locomotion_wrapper.MPCLocomotionWrapper.control_frequency=20 +mpc_locomotion_wrapper.MPCLocomotionWrapper.target_horizontal_com_velocity_heuristic = @mpc_locomotion_wrapper.InverseRaibertTargetHorizontalComVelocityHeuristic() +mpc_locomotion_wrapper.InverseRaibertTargetHorizontalComVelocityHeuristic.gains = (-0.25, -0.1) + +mpc_locomotion_wrapper.MPCLocomotionWrapper.swing_target_action_range = ((-0.05, -0.05, -0.03), (0.1, 0.05, 0.03)) +mpc_locomotion_wrapper.MPCLocomotionWrapper.pitch_action_range = (-0.2, 0.2) +mpc_locomotion_wrapper.MPCLocomotionWrapper.roll_action_range = (-0.05, 0.05) +mpc_locomotion_wrapper.MPCLocomotionWrapper.base_velocity_action_range = ((-0.05, -0.05), (0.05, 0.05)) +mpc_locomotion_wrapper.MPCLocomotionWrapper.base_twist_action_range = (-0.2, 0.2) +mpc_locomotion_wrapper.MPCLocomotionWrapper.base_height_action_range = (0.42, 0.48) +mpc_locomotion_wrapper.MPCLocomotionWrapper.swing_clearance_action_range = (0.05, 0.1) + +imu_based_com_velocity_estimator.IMUBasedCOMVelocityEstimator.use_sensor_interface = False + + diff --git a/examples/pybullet/gym/pybullet_data/configs/laikago_mpc_stepstone.gin b/examples/pybullet/gym/pybullet_data/configs/laikago_mpc_stepstone.gin new file mode 100644 index 000000000..2644d3b7b --- /dev/null +++ b/examples/pybullet/gym/pybullet_data/configs/laikago_mpc_stepstone.gin @@ -0,0 +1,142 @@ +#-*-Python-*- + +# NOTE: Should be run with >=10CPU for decent performance. + +import pybullet_envs.minitaur.agents.baseline_controller.torque_stance_leg_controller +import pybullet_envs.minitaur.envs_v2.env_loader +import pybullet_envs.minitaur.envs_v2.env_wrappers.mpc_locomotion_wrapper +import pybullet_envs.minitaur.envs_v2.env_wrappers.observation_dictionary_to_array_wrapper +import pybullet_envs.minitaur.envs_v2.locomotion_gym_config +import pybullet_envs.minitaur.envs_v2.locomotion_gym_env +import pybullet_envs.minitaur.envs_v2.scenes.random_stepstone_scene +import pybullet_envs.minitaur.envs_v2.sensors.imu_sensor +import pybullet_envs.minitaur.envs_v2.sensors.last_action_sensor +import pybullet_envs.minitaur.envs_v2.sensors.toe_position_sensor +import pybullet_envs.minitaur.envs_v2.tasks.simple_locomotion_task +import pybullet_envs.minitaur.envs_v2.tasks.terminal_conditions +import pybullet_envs.minitaur.envs_v2.utilities.noise_generators +import pybullet_envs.minitaur.robots.hybrid_motor_model +import pybullet_envs.minitaur.robots.laikago_v2 +import pybullet_envs.minitaur.robots.robot_config + + +# Configure the dynamic robot + +SIM_TIME_STEP = 0.001 +NUM_ACTION_REPEAT = 4 # Control frequency will be 100 Hz + + +######################################## +# Configure the sensors +######################################## +imu_sensor.IMUSensor.channels = [ + %imu_sensor.IMUChannel.ROLL, + %imu_sensor.IMUChannel.PITCH, + %imu_sensor.IMUChannel.ROLL_RATE, + %imu_sensor.IMUChannel.PITCH_RATE +] + +imu_sensor.IMUSensor.lower_bound = [-6.28318548203, -6.28318548203, -6283.18554688, -6283.18554688] +imu_sensor.IMUSensor.upper_bound = [6.28318548203, 6.28318548203, 6283.18554688, 6283.18554688] + +# Add noise to the IMU sensor and toe position sensor +# IMUNoise/noise_generators.NormalNoise.scale = (0.025, 0.025, 0.1, 0.1) +# TOENoise/noise_generators.NormalNoise.scale = (0.0025, 0.0025, 0.005, 0.0025, 0.0025, 0.005, 0.0025, 0.0025, 0.005, 0.0025, 0.0025, 0.005) +# imu_sensor.IMUSensor.noise_generator = @IMUNoise/noise_generators.NormalNoise() +# toe_position_sensor.ToePositionSensor.noise_generator = @TOENoise/noise_generators.NormalNoise() + + +sensors = [@imu_sensor.IMUSensor(), @last_action_sensor.LastActionSensor(), @toe_position_sensor.ToePositionSensor()] +laikago_v2.Laikago.sensors = %sensors + + +######################################## +# Specify the motor model and its parameters +######################################## +LAIKAGO_MOTOR_ANGLE_UPPER_LIMITS = 6.28318548203 +LAIKAGO_MOTOR_ANGLE_LOWER_LIMITS = -6.28318548203 +laikago/robot_config.MotorLimits.angle_lower_limits = %LAIKAGO_MOTOR_ANGLE_LOWER_LIMITS +laikago/robot_config.MotorLimits.angle_upper_limits = %LAIKAGO_MOTOR_ANGLE_UPPER_LIMITS +laikago/robot_config.MotorLimits.torque_lower_limits = -30 +laikago/robot_config.MotorLimits.torque_upper_limits = 30 +laikago_v2.Laikago.motor_limits = @laikago/robot_config.MotorLimits() +laikago_v2.Laikago.motor_control_mode = %robot_config.MotorControlMode.HYBRID +laikago_v2.Laikago.motor_model_class = @hybrid_motor_model.HybridMotorModel +locomotion_gym_env.LocomotionGymEnv.robot_class = @laikago_v2.Laikago +hybrid_motor_model.HybridMotorModel.kp = 250 +hybrid_motor_model.HybridMotorModel.kd = (0.3, 2.0, 2.0, 0.3, 2.0, 2.0, 0.3, 2.0, 2.0, 0.3, 2.0, 2.0) + + +######################################## +# Setup the terrain randomization and simulation parameters +######################################## + +locomotion_gym_config.LocomotionGymConfig.simulation_parameters = @locomotion_gym_config.SimulationParameters() +locomotion_gym_env.LocomotionGymEnv.robot_class = @laikago_v2.Laikago +locomotion_gym_env.LocomotionGymEnv.task = @simple_locomotion_task.SimpleForwardTask() +locomotion_gym_env.LocomotionGymEnv.gym_config = @locomotion_gym_config.LocomotionGymConfig() +locomotion_gym_env.LocomotionGymEnv.scene = @random_stepstone_scene.RandomStepstoneScene() +locomotion_gym_config.SimulationParameters.sim_time_step_s = %SIM_TIME_STEP +locomotion_gym_config.SimulationParameters.num_action_repeat = %NUM_ACTION_REPEAT + +random_stepstone_scene.RandomStepstoneScene.random_seed = 13 +random_stepstone_scene.RandomStepstoneScene.gap_length_lower_bound = 0.07 +random_stepstone_scene.RandomStepstoneScene.gap_length_upper_bound = 0.15 +random_stepstone_scene.RandomStepstoneScene.stone_width = 0.6 + +######################################## +# Setup the task and terminal condition parameters +######################################## +terminal_conditions.maxstep_terminal_condition.max_step = 2000 +terminal_conditions.default_terminal_condition_for_laikago_v2.max_roll = 0.25 +terminal_conditions.default_terminal_condition_for_laikago_v2.max_pitch = 1.0 +terminal_conditions.default_terminal_condition_for_laikago_v2.min_height = 0.15 +terminal_conditions.default_terminal_condition_for_laikago_v2.enforce_foot_contacts = True + +# Setup the terminal condition +terminal_conditions.logical_any_terminal_condition.conditions = [ + @terminal_conditions.default_terminal_condition_for_laikago_v2, + @terminal_conditions.maxstep_terminal_condition, + ] + + simple_locomotion_task.SimpleForwardTask.terminal_condition = @terminal_conditions.logical_any_terminal_condition +simple_locomotion_task.SimpleForwardTask.clip_velocity = 0.0015 + +time_ordered_buffer.TimeOrderedBuffer.error_on_duplicate_timestamp = False +time_ordered_buffer.TimeOrderedBuffer.replace_value_on_duplicate_timestamp = True +time_ordered_buffer.TimeOrderedBuffer.error_on_timestamp_reversal = False + + +observation_dictionary_to_array_wrapper.ObservationDictionaryToArrayWrapper.observation_excluded = ('frontCam', 'rearCam') + +env_loader.load.wrapper_classes = [ + @mpc_locomotion_wrapper.MPCLocomotionWrapper, + @observation_dictionary_to_array_wrapper.ObservationDictionaryToArrayWrapper, +] + +######################################## +# Configure the MPC-related parameters +######################################## +torque_stance_leg_controller.TorqueStanceLegController.qp_weights = (5, 5, 0.2, 0, 0, 10, 0.5, 0.5, 0.2, 0.2, 0.2, 0.1, 0) +torque_stance_leg_controller.TorqueStanceLegController.body_inertia = (0.183375, 0, 0, 0, 0.6267, 0, 0, 0, 0.636175) +torque_stance_leg_controller.TorqueStanceLegController.friction_coeffs = (0.45, 0.45, 0.45, 0.45) + +######################################## +# Configure the foothold wrapper parameters and action space +######################################## +mpc_locomotion_wrapper.MPCLocomotionWrapper.foot_friction_coeff = 1.0 +mpc_locomotion_wrapper.MPCLocomotionWrapper.locomotion_gait = %mpc_locomotion_wrapper.Gait.TROT +mpc_locomotion_wrapper.MPCLocomotionWrapper.control_frequency=20 +mpc_locomotion_wrapper.MPCLocomotionWrapper.target_horizontal_com_velocity_heuristic = @mpc_locomotion_wrapper.InverseRaibertTargetHorizontalComVelocityHeuristic() +mpc_locomotion_wrapper.InverseRaibertTargetHorizontalComVelocityHeuristic.gains = (-0.25, -0.1) + +mpc_locomotion_wrapper.MPCLocomotionWrapper.swing_target_action_range = ((-0.05, -0.05, -0.03), (0.1, 0.05, 0.03)) +mpc_locomotion_wrapper.MPCLocomotionWrapper.pitch_action_range = (-0.2, 0.2) +mpc_locomotion_wrapper.MPCLocomotionWrapper.roll_action_range = (-0.05, 0.05) +mpc_locomotion_wrapper.MPCLocomotionWrapper.base_velocity_action_range = ((-0.05, -0.05), (0.05, 0.05)) +mpc_locomotion_wrapper.MPCLocomotionWrapper.base_twist_action_range = (-0.2, 0.2) +mpc_locomotion_wrapper.MPCLocomotionWrapper.base_height_action_range = (0.42, 0.48) +mpc_locomotion_wrapper.MPCLocomotionWrapper.swing_clearance_action_range = (0.05, 0.1) + +imu_based_com_velocity_estimator.IMUBasedCOMVelocityEstimator.use_sensor_interface = False + diff --git a/examples/pybullet/gym/pybullet_data/configs/laikago_reactive.gin b/examples/pybullet/gym/pybullet_data/configs/laikago_reactive.gin new file mode 100644 index 000000000..b4d6f8ba0 --- /dev/null +++ b/examples/pybullet/gym/pybullet_data/configs/laikago_reactive.gin @@ -0,0 +1,133 @@ +#-*-Python-*- + +# NOTE: Should be run with >=10CPU for decent performance. + +import pybullet_envs.minitaur.envs_v2.env_loader +import pybullet_envs.minitaur.envs_v2.env_wrappers.observation_dictionary_to_array_wrapper +import pybullet_envs.minitaur.envs_v2.env_wrappers.simple_openloop +import pybullet_envs.minitaur.envs_v2.env_wrappers.trajectory_generator_wrapper_env + + +import pybullet_envs.minitaur.envs_v2.locomotion_gym_env +import pybullet_envs.minitaur.envs_v2.scenes.simple_scene +import pybullet_envs.minitaur.envs_v2.tasks.simple_locomotion_task +import pybullet_envs.minitaur.robots.laikago + +URDF_ROOT = "urdf/" +ABDUCTION_P_GAIN = 220.0 +ABDUCTION_D_GAIN = 0.3 +HIP_P_GAIN = 220.0 +HIP_D_GAIN = 2.0 +KNEE_P_GAIN = 220.0 +KNEE_D_GAIN = 2.0 + +import pybullet_envs.minitaur.envs_v2.locomotion_gym_config +import pybullet_envs.minitaur.envs_v2.sensors.robot_sensors + +UPPER_BOUND = 6.28318548203 +LOWER_BOUND = -6.28318548203 +SIM_TIME_STEP = 0.001 +NUM_ACTION_REPEAT = 2 +NUM_MOTORS = 12 +NOISY_READING = True + +locomotion_gym_config.SimulationParameters.sim_time_step_s = %SIM_TIME_STEP +locomotion_gym_config.SimulationParameters.num_action_repeat = %NUM_ACTION_REPEAT +locomotion_gym_config.SimulationParameters.enable_rendering = False +locomotion_gym_config.LocomotionGymConfig.simulation_parameters = @locomotion_gym_config.SimulationParameters() + +robot_sensors.IMUSensor.channels = ["R", "P", "dR", "dP"] +robot_sensors.IMUSensor.noisy_reading = %NOISY_READING +robot_sensors.IMUSensor.lower_bound = [-6.28318548203, -6.28318548203, + -6283.18554688, -6283.18554688] +robot_sensors.IMUSensor.upper_bound = [6.28318548203, 6.28318548203, + 6283.18554688, 6283.18554688] + +robot_sensors.MotorAngleSensor.num_motors = %NUM_MOTORS +robot_sensors.MotorAngleSensor.noisy_reading = %NOISY_READING +robot_sensors.MotorAngleSensor.lower_bound = -6.28318548203 +robot_sensors.MotorAngleSensor.upper_bound = 6.28318548203 + +sensors = [@robot_sensors.IMUSensor(), @robot_sensors.MotorAngleSensor()] + +Act0/locomotion_gym_config.ScalarField.name = "motor_angle_0" +Act0/locomotion_gym_config.ScalarField.upper_bound = %UPPER_BOUND +Act0/locomotion_gym_config.ScalarField.lower_bound = %LOWER_BOUND +Act1/locomotion_gym_config.ScalarField.name = "motor_angle_1" +Act1/locomotion_gym_config.ScalarField.upper_bound = %UPPER_BOUND +Act1/locomotion_gym_config.ScalarField.lower_bound = %LOWER_BOUND +Act2/locomotion_gym_config.ScalarField.name = "motor_angle_2" +Act2/locomotion_gym_config.ScalarField.upper_bound = %UPPER_BOUND +Act2/locomotion_gym_config.ScalarField.lower_bound = %LOWER_BOUND +Act3/locomotion_gym_config.ScalarField.name = "motor_angle_3" +Act3/locomotion_gym_config.ScalarField.upper_bound = %UPPER_BOUND +Act3/locomotion_gym_config.ScalarField.lower_bound = %LOWER_BOUND +Act4/locomotion_gym_config.ScalarField.name = "motor_angle_4" +Act4/locomotion_gym_config.ScalarField.upper_bound = %UPPER_BOUND +Act4/locomotion_gym_config.ScalarField.lower_bound = %LOWER_BOUND +Act5/locomotion_gym_config.ScalarField.name = "motor_angle_5" +Act5/locomotion_gym_config.ScalarField.upper_bound = %UPPER_BOUND +Act5/locomotion_gym_config.ScalarField.lower_bound = %LOWER_BOUND +Act6/locomotion_gym_config.ScalarField.name = "motor_angle_6" +Act6/locomotion_gym_config.ScalarField.upper_bound = %UPPER_BOUND +Act6/locomotion_gym_config.ScalarField.lower_bound = %LOWER_BOUND +Act7/locomotion_gym_config.ScalarField.name = "motor_angle_7" +Act7/locomotion_gym_config.ScalarField.upper_bound = %UPPER_BOUND +Act7/locomotion_gym_config.ScalarField.lower_bound = %LOWER_BOUND +Act8/locomotion_gym_config.ScalarField.name = "motor_angle_8" +Act8/locomotion_gym_config.ScalarField.upper_bound = %UPPER_BOUND +Act8/locomotion_gym_config.ScalarField.lower_bound = %LOWER_BOUND +Act9/locomotion_gym_config.ScalarField.name = "motor_angle_9" +Act9/locomotion_gym_config.ScalarField.upper_bound = %UPPER_BOUND +Act9/locomotion_gym_config.ScalarField.lower_bound = %LOWER_BOUND +Act10/locomotion_gym_config.ScalarField.name = "motor_angle_10" +Act10/locomotion_gym_config.ScalarField.upper_bound = %UPPER_BOUND +Act10/locomotion_gym_config.ScalarField.lower_bound = %LOWER_BOUND +Act11/locomotion_gym_config.ScalarField.name = "motor_angle_11" +Act11/locomotion_gym_config.ScalarField.upper_bound = %UPPER_BOUND +Act11/locomotion_gym_config.ScalarField.lower_bound = %LOWER_BOUND + + +locomotion_gym_config.LocomotionGymConfig.actions = [ + @Act0/locomotion_gym_config.ScalarField(), + @Act1/locomotion_gym_config.ScalarField(), + @Act2/locomotion_gym_config.ScalarField(), + @Act3/locomotion_gym_config.ScalarField(), + @Act4/locomotion_gym_config.ScalarField(), + @Act5/locomotion_gym_config.ScalarField(), + @Act6/locomotion_gym_config.ScalarField(), + @Act7/locomotion_gym_config.ScalarField(), + @Act8/locomotion_gym_config.ScalarField(), + @Act9/locomotion_gym_config.ScalarField(), + @Act10/locomotion_gym_config.ScalarField(), + @Act11/locomotion_gym_config.ScalarField()] + + + +laikago.Laikago.urdf_root = %URDF_ROOT +laikago.Laikago.time_step = %SIM_TIME_STEP +laikago.Laikago.action_repeat = %NUM_ACTION_REPEAT +laikago.Laikago.self_collision_enabled = False +laikago.Laikago.control_latency = 0.002 +laikago.Laikago.pd_latency = 0.0 +laikago.Laikago.motor_kp = [%ABDUCTION_P_GAIN, %HIP_P_GAIN, %KNEE_P_GAIN, + %ABDUCTION_P_GAIN, %HIP_P_GAIN, %KNEE_P_GAIN, + %ABDUCTION_P_GAIN, %HIP_P_GAIN, %KNEE_P_GAIN, + %ABDUCTION_P_GAIN, %HIP_P_GAIN, %KNEE_P_GAIN] +laikago.Laikago.motor_kd = [%ABDUCTION_D_GAIN, %HIP_D_GAIN, %KNEE_D_GAIN, + %ABDUCTION_D_GAIN, %HIP_D_GAIN, %KNEE_D_GAIN, + %ABDUCTION_D_GAIN, %HIP_D_GAIN, %KNEE_D_GAIN, + %ABDUCTION_D_GAIN, %HIP_D_GAIN, %KNEE_D_GAIN] +laikago.Laikago.sensors = %sensors + +locomotion_gym_env.LocomotionGymEnv.gym_config = @locomotion_gym_config.LocomotionGymConfig() +locomotion_gym_env.LocomotionGymEnv.robot_class = @laikago.Laikago +locomotion_gym_env.LocomotionGymEnv.scene = @simple_scene.SimpleScene() +locomotion_gym_env.LocomotionGymEnv.task = @simple_locomotion_task.SimpleForwardTask() + + + +trajectory_generator_wrapper_env.TrajectoryGeneratorWrapperEnv.trajectory_generator = @simple_openloop.LaikagoPoseOffsetGenerator() +env_loader.load.wrapper_classes = [ + @observation_dictionary_to_array_wrapper.ObservationDictionaryToArrayWrapper, + @trajectory_generator_wrapper_env.TrajectoryGeneratorWrapperEnv] diff --git a/examples/pybullet/gym/pybullet_data/configs/laikago_walk_static_gait.gin b/examples/pybullet/gym/pybullet_data/configs/laikago_walk_static_gait.gin new file mode 100644 index 000000000..2b6cd680d --- /dev/null +++ b/examples/pybullet/gym/pybullet_data/configs/laikago_walk_static_gait.gin @@ -0,0 +1,65 @@ +import pybullet_envs.minitaur.envs_v2.env_loader +import pybullet_envs.minitaur.envs_v2.env_wrappers.simple_openloop +import pybullet_envs.minitaur.envs_v2.env_wrappers.trajectory_generator_wrapper_env +import pybullet_envs.minitaur.envs_v2.locomotion_gym_config +import pybullet_envs.minitaur.envs_v2.locomotion_gym_env +import pybullet_envs.minitaur.envs_v2.scenes.simple_scene +import pybullet_envs.minitaur.envs_v2.sensors.imu_sensor +import pybullet_envs.minitaur.envs_v2.sensors.motor_angle_sensor +import pybullet_envs.minitaur.envs_v2.tasks.simple_locomotion_task +import pybullet_envs.minitaur.robots.hybrid_motor_model +import pybullet_envs.minitaur.robots.laikago_v2 +import pybullet_envs.minitaur.robots.robot_config + + +# Specify the gym env parameters +SIM_TIME_STEP = 0.001 +NUM_ACTION_REPEAT = 4 +locomotion_gym_config.SimulationParameters.sim_time_step_s = %SIM_TIME_STEP +locomotion_gym_config.SimulationParameters.num_action_repeat = %NUM_ACTION_REPEAT +locomotion_gym_config.SimulationParameters.enable_rendering = False +locomotion_gym_config.LocomotionGymConfig.simulation_parameters = @locomotion_gym_config.SimulationParameters() +locomotion_gym_env.LocomotionGymEnv.gym_config = @locomotion_gym_config.LocomotionGymConfig() + +# Specify the world. +URDF_ROOT = "" +scene_base.SceneBase.data_root = %URDF_ROOT +locomotion_gym_env.LocomotionGymEnv.scene = @simple_scene.SimpleScene() + +# Specify the task. +locomotion_gym_env.LocomotionGymEnv.task = @simple_locomotion_task.SimpleForwardTask() + +# Specify the sensors. Sensors determine the observation space. +# Sensors can either be mounted on robots (see below), or passed to envs +# i.e. like ambient sensors, or provided by tasks (task specific measures). +imu_sensor.IMUSensor.channels = [ + %imu_sensor.IMUChannel.ROLL, + %imu_sensor.IMUChannel.PITCH, + %imu_sensor.IMUChannel.ROLL_RATE, + %imu_sensor.IMUChannel.PITCH_RATE, +] + +imu_sensor.IMUSensor.lower_bound = [-6.28318548203, -6.28318548203, + -6283.18554688, -6283.18554688] +imu_sensor.IMUSensor.upper_bound = [6.28318548203, 6.28318548203, + 6283.18554688, 6283.18554688] + +# We use the default confirugration for MotorAngleSensor, which reads limits from the robot. +SENSORS = [@imu_sensor.IMUSensor(), @motor_angle_sensor.MotorAngleSensor()] + +# Specify the motor limits, and motor control mode. +LAIKAGO_MOTOR_ANGLE_UPPER_LIMITS = 6.28318548203 +LAIKAGO_MOTOR_ANGLE_LOWER_LIMITS = -6.28318548203 +laikago/robot_config.MotorLimits.angle_lower_limits = %LAIKAGO_MOTOR_ANGLE_LOWER_LIMITS +laikago/robot_config.MotorLimits.angle_upper_limits = %LAIKAGO_MOTOR_ANGLE_UPPER_LIMITS +laikago_v2.Laikago.motor_limits = @laikago/robot_config.MotorLimits() +laikago_v2.Laikago.motor_control_mode = %robot_config.MotorControlMode.POSITION +laikago_v2.Laikago.motor_model_class = @hybrid_motor_model.HybridMotorModel +locomotion_gym_env.LocomotionGymEnv.robot_class = @laikago_v2.Laikago + +# Specify the motor model parameters. Notice that we don't need to specify the control mode or motor limits here. +hybrid_motor_model.HybridMotorModel.kp = 2400 +hybrid_motor_model.HybridMotorModel.kd = 5 + +# Finally, mount sensors specified above to the Laikago. +laikago_v2.Laikago.sensors = %SENSORS diff --git a/examples/pybullet/gym/pybullet_data/configs/minitaur_gym_config.gin b/examples/pybullet/gym/pybullet_data/configs/minitaur_gym_config.gin new file mode 100644 index 000000000..4b268980d --- /dev/null +++ b/examples/pybullet/gym/pybullet_data/configs/minitaur_gym_config.gin @@ -0,0 +1,48 @@ +#-*-Python-*- + +import pybullet_envs.minitaur.envs_v2.locomotion_gym_config +import pybullet_envs.minitaur.envs_v2.sensors.imu_sensor +import pybullet_envs.minitaur.envs_v2.sensors.motor_angle_sensor +import pybullet_envs.minitaur.robots.minitaur_motor_model_v2 +import pybullet_envs.minitaur.robots.minitaur_v2 +import pybullet_envs.minitaur.robots.robot_config + + +UPPER_BOUND = 1.0 +LOWER_BOUND = -1.0 +SIM_TIME_STEP = 0.001 +NUM_ACTION_REPEAT = 20 +NUM_MOTORS = 8 +NOISY_READING = True +SENSOR_LATENCY = 0.02 + +locomotion_gym_config.SimulationParameters.sim_time_step_s = %SIM_TIME_STEP +locomotion_gym_config.SimulationParameters.num_action_repeat = %NUM_ACTION_REPEAT +locomotion_gym_config.SimulationParameters.enable_rendering = False +locomotion_gym_config.LocomotionGymConfig.simulation_parameters = @locomotion_gym_config.SimulationParameters() + +robot_config.MotorLimits.angle_lower_limits = %LOWER_BOUND +robot_config.MotorLimits.angle_upper_limits = %UPPER_BOUND + +minitaur_v2.Minitaur.motor_control_mode = %robot_config.MotorControlMode.POSITION +minitaur_v2.Minitaur.motor_limits = @robot_config.MotorLimits() +minitaur_v2.Minitaur.motor_model_class = @minitaur_motor_model_v2.MinitaurMotorModel +minitaur_motor_model_v2.MinitaurMotorModel.pd_latency = 0.003 +minitaur_motor_model_v2.MinitaurMotorModel.kp = 1.0 +minitaur_motor_model_v2.MinitaurMotorModel.kd = 0.015 + +imu_sensor.IMUSensor.channels = [ + %imu_sensor.IMUChannel.ROLL, + %imu_sensor.IMUChannel.PITCH, + %imu_sensor.IMUChannel.ROLL_RATE, + %imu_sensor.IMUChannel.PITCH_RATE +] +imu_sensor.IMUSensor.lower_bound = [-6.28318548203, -6.28318548203, + -6283.18554688, -6283.18554688] +imu_sensor.IMUSensor.upper_bound = [6.28318548203, 6.28318548203, + 6283.18554688, 6283.18554688] + +motor_angle_sensor.MotorAngleSensor.sensor_latency = %SENSOR_LATENCY +motor_angle_sensor.MotorAngleSensor.lower_bound = -6.28318548203 +motor_angle_sensor.MotorAngleSensor.upper_bound = 6.28318548203 +minitaur_v2.Minitaur.sensors = [@imu_sensor.IMUSensor(), @motor_angle_sensor.MotorAngleSensor()] diff --git a/examples/pybullet/gym/pybullet_data/configs/minitaur_gym_env.gin b/examples/pybullet/gym/pybullet_data/configs/minitaur_gym_env.gin new file mode 100644 index 000000000..4b5140f0f --- /dev/null +++ b/examples/pybullet/gym/pybullet_data/configs/minitaur_gym_env.gin @@ -0,0 +1,63 @@ +import pybullet_envs.minitaur.envs_v2.locomotion_gym_env +import pybullet_envs.minitaur.envs_v2.scenes.simple_scene +import pybullet_envs.minitaur.envs_v2.tasks.simple_locomotion_task +import pybullet_envs.minitaur.robots.minitaur_v2 +import pybullet_envs.minitaur.robots.robot_config +import pybullet_envs.minitaur.robots.robot_urdf_loader + +URDF_ROOT = "urdf/" +#-*-Python-*- + +import pybullet_envs.minitaur.envs_v2.locomotion_gym_config +import pybullet_envs.minitaur.envs_v2.sensors.imu_sensor +import pybullet_envs.minitaur.envs_v2.sensors.motor_angle_sensor +import pybullet_envs.minitaur.robots.minitaur_motor_model_v2 +import pybullet_envs.minitaur.robots.minitaur_v2 +import pybullet_envs.minitaur.robots.robot_config + + +UPPER_BOUND = 1.0 +LOWER_BOUND = -1.0 +SIM_TIME_STEP = 0.001 +NUM_ACTION_REPEAT = 20 +NUM_MOTORS = 8 +NOISY_READING = True +SENSOR_LATENCY = 0.02 + +locomotion_gym_config.SimulationParameters.sim_time_step_s = %SIM_TIME_STEP +locomotion_gym_config.SimulationParameters.num_action_repeat = %NUM_ACTION_REPEAT +locomotion_gym_config.SimulationParameters.enable_rendering = False +locomotion_gym_config.LocomotionGymConfig.simulation_parameters = @locomotion_gym_config.SimulationParameters() + +robot_config.MotorLimits.angle_lower_limits = %LOWER_BOUND +robot_config.MotorLimits.angle_upper_limits = %UPPER_BOUND + +minitaur_v2.Minitaur.motor_control_mode = %robot_config.MotorControlMode.POSITION +minitaur_v2.Minitaur.motor_limits = @robot_config.MotorLimits() +minitaur_v2.Minitaur.motor_model_class = @minitaur_motor_model_v2.MinitaurMotorModel +minitaur_motor_model_v2.MinitaurMotorModel.pd_latency = 0.003 +minitaur_motor_model_v2.MinitaurMotorModel.kp = 1.0 +minitaur_motor_model_v2.MinitaurMotorModel.kd = 0.015 + +imu_sensor.IMUSensor.channels = [ + %imu_sensor.IMUChannel.ROLL, + %imu_sensor.IMUChannel.PITCH, + %imu_sensor.IMUChannel.ROLL_RATE, + %imu_sensor.IMUChannel.PITCH_RATE +] +imu_sensor.IMUSensor.lower_bound = [-6.28318548203, -6.28318548203, + -6283.18554688, -6283.18554688] +imu_sensor.IMUSensor.upper_bound = [6.28318548203, 6.28318548203, + 6283.18554688, 6283.18554688] + +motor_angle_sensor.MotorAngleSensor.sensor_latency = %SENSOR_LATENCY +motor_angle_sensor.MotorAngleSensor.lower_bound = -6.28318548203 +motor_angle_sensor.MotorAngleSensor.upper_bound = 6.28318548203 +minitaur_v2.Minitaur.sensors = [@imu_sensor.IMUSensor(), @motor_angle_sensor.MotorAngleSensor()] + + +locomotion_gym_env.LocomotionGymEnv.gym_config = @locomotion_gym_config.LocomotionGymConfig() +locomotion_gym_env.LocomotionGymEnv.robot_class = @minitaur_v2.Minitaur +locomotion_gym_env.LocomotionGymEnv.scene = @simple_scene.SimpleScene() +locomotion_gym_env.LocomotionGymEnv.task = @simple_locomotion_task.SimpleForwardTask() + diff --git a/examples/pybullet/gym/pybullet_data/configs_v2/base/laikago_reactive.gin b/examples/pybullet/gym/pybullet_data/configs_v2/base/laikago_reactive.gin new file mode 100644 index 000000000..030bf4d8f --- /dev/null +++ b/examples/pybullet/gym/pybullet_data/configs_v2/base/laikago_reactive.gin @@ -0,0 +1,80 @@ +import pybullet_envs.minitaur.envs_v2.env_loader +import pybullet_envs.minitaur.envs_v2.env_wrappers.observation_dictionary_to_array_wrapper +import pybullet_envs.minitaur.envs_v2.env_wrappers.simple_openloop +import pybullet_envs.minitaur.envs_v2.env_wrappers.trajectory_generator_wrapper_env +import pybullet_envs.minitaur.envs_v2.locomotion_gym_config +import pybullet_envs.minitaur.envs_v2.locomotion_gym_env +import pybullet_envs.minitaur.envs_v2.locomotion_gym_env +import pybullet_envs.minitaur.envs_v2.scenes.simple_scene +import pybullet_envs.minitaur.envs_v2.sensors.accelerometer_sensor +import pybullet_envs.minitaur.envs_v2.sensors.imu_sensor +import pybullet_envs.minitaur.envs_v2.sensors.motor_angle_sensor +import pybullet_envs.minitaur.envs_v2.tasks.simple_locomotion_task +import pybullet_envs.minitaur.envs_v2.tasks.terminal_conditions +import pybullet_envs.minitaur.robots.hybrid_motor_model +import pybullet_envs.minitaur.robots.laikago_v2 +import pybullet_envs.minitaur.robots.time_ordered_buffer + + +# Specify the gym env parameters +SIM_TIME_STEP = 0.001 +NUM_ACTION_REPEAT = 2 + +locomotion_gym_config.SimulationParameters.sim_time_step_s = %SIM_TIME_STEP +locomotion_gym_config.SimulationParameters.num_action_repeat = %NUM_ACTION_REPEAT +locomotion_gym_config.SimulationParameters.enable_rendering = False +locomotion_gym_config.LocomotionGymConfig.simulation_parameters = @locomotion_gym_config.SimulationParameters() +locomotion_gym_env.LocomotionGymEnv.gym_config = @locomotion_gym_config.LocomotionGymConfig() + + +# Specify the robot +locomotion_gym_env.LocomotionGymEnv.robot_class = @laikago_v2.Laikago +LAIKAGO_MOTOR_ANGLE_UPPER_LIMITS = 6.28318548203 +LAIKAGO_MOTOR_ANGLE_LOWER_LIMITS = -6.28318548203 +laikago/robot_config.MotorLimits.angle_lower_limits = %LAIKAGO_MOTOR_ANGLE_LOWER_LIMITS +laikago/robot_config.MotorLimits.angle_upper_limits = %LAIKAGO_MOTOR_ANGLE_UPPER_LIMITS +laikago_v2.Laikago.motor_limits = @laikago/robot_config.MotorLimits() +laikago_v2.Laikago.motor_control_mode = %robot_config.MotorControlMode.POSITION + +# Specify the motor model parameters. Notice that we don't need to specify the control mode +# and motor limits here, as they will be passed from the robot interface. +hybrid_motor_model.HybridMotorModel.kp = 220 +hybrid_motor_model.HybridMotorModel.kd = (0.3, 2.0, 2.0, 0.3, 2.0, 2.0, 0.3, 2.0, 2.0, 0.3, 2.0, 2.0) + +# This will make sure the hybrid motor model does not throw error during reset, when the timestamp is alwasy zero. +time_ordered_buffer.TimeOrderedBuffer.error_on_duplicate_timestamp = False +time_ordered_buffer.TimeOrderedBuffer.replace_value_on_duplicate_timestamp = True + +# Add the sensors +laikago_v2.Laikago.sensors = [@imu_sensor.IMUSensor(), @motor_angle_sensor.MotorAngleSensor(), @accelerometer_sensor.AccelerometerSensor()] +imu_sensor.IMUSensor.channels = [ + %imu_sensor.IMUChannel.ROLL, + %imu_sensor.IMUChannel.PITCH, + %imu_sensor.IMUChannel.ROLL_RATE, + %imu_sensor.IMUChannel.PITCH_RATE, +] + +imu_sensor.IMUSensor.lower_bound = [-6.28318548203, -6.28318548203, + -6283.18554688, -6283.18554688] +imu_sensor.IMUSensor.upper_bound = [6.28318548203, 6.28318548203, + 6283.18554688, 6283.18554688] + +# Specify the scene +locomotion_gym_env.LocomotionGymEnv.scene = @simple_scene.SimpleScene() +simple_scene.SimpleScene.data_root = "third_party/bullet/data" + +# Specify the task. +locomotion_gym_env.LocomotionGymEnv.task = @simple_locomotion_task.SimpleForwardTask() +simple_locomotion_task.SimpleForwardTask.terminal_condition = @terminal_conditions.default_terminal_condition_for_laikago + +accelerometer_sensor.AccelerometerSensor.lower_bound = [-50.0, -50.0, -50.0] +accelerometer_sensor.AccelerometerSensor.upper_bound = [50.0, 50.0, 50.0] +accelerometer_sensor.AccelerometerSensor.sensor_latency = 0.01 +imu_sensor.IMUSensor.sensor_latency = 0.1 + + +# Define the wrappers needed +env_loader.load.wrapper_classes = [ + @trajectory_generator_wrapper_env.TrajectoryGeneratorWrapperEnv, +] +trajectory_generator_wrapper_env.TrajectoryGeneratorWrapperEnv.trajectory_generator = @simple_openloop.LaikagoPoseOffsetGenerator() diff --git a/examples/pybullet/gym/pybullet_data/configs_v2/base/laikago_with_imu.gin b/examples/pybullet/gym/pybullet_data/configs_v2/base/laikago_with_imu.gin new file mode 100644 index 000000000..03d7c3308 --- /dev/null +++ b/examples/pybullet/gym/pybullet_data/configs_v2/base/laikago_with_imu.gin @@ -0,0 +1,66 @@ +#import pybullet_data +#MYPATH = pybullet_data.getDataPath()+'/configs_v2/robots/laikago.gin' +#MYPATH = 'D:/dev/bullet3/examples/pybullet\gym/pybullet_data/configs_v2/robots/laikago.gin' +#include '$MYPATH/ambiguous.gin' + +import pybullet_envs.minitaur.envs_v2.locomotion_gym_config +import pybullet_envs.minitaur.envs_v2.locomotion_gym_env +import pybullet_envs.minitaur.envs_v2.scenes.scene_base +import pybullet_envs.minitaur.envs_v2.scenes.simple_scene +import pybullet_envs.minitaur.envs_v2.sensors.imu_sensor +import pybullet_envs.minitaur.envs_v2.sensors.motor_angle_sensor +import pybullet_envs.minitaur.robots.hybrid_motor_model +import pybullet_envs.minitaur.robots.laikago_v2 +import pybullet_envs.minitaur.robots.robot_config + +URDF_ROOT = "" +UPPER_BOUND = 6.28318548203 +LOWER_BOUND = -6.28318548203 +SIM_TIME_STEP = 0.001 +NUM_ACTION_REPEAT = 2 + +locomotion_gym_config.SimulationParameters.sim_time_step_s = %SIM_TIME_STEP +locomotion_gym_config.SimulationParameters.num_action_repeat = %NUM_ACTION_REPEAT +locomotion_gym_config.SimulationParameters.enable_rendering = False +locomotion_gym_config.LocomotionGymConfig.simulation_parameters = @locomotion_gym_config.SimulationParameters() + +imu_sensor.IMUSensor.channels = [ + %imu_sensor.IMUChannel.ROLL, + %imu_sensor.IMUChannel.PITCH, + %imu_sensor.IMUChannel.ROLL_RATE, + %imu_sensor.IMUChannel.PITCH_RATE, +] + +imu_sensor.IMUSensor.lower_bound = [-6.28318548203, -6.28318548203, + -6283.18554688, -6283.18554688] +imu_sensor.IMUSensor.upper_bound = [6.28318548203, 6.28318548203, + 6283.18554688, 6283.18554688] + +# We use the default confirugration for MotorAngleSensor, which reads limits from the robot. +SENSORS = [@imu_sensor.IMUSensor(), @motor_angle_sensor.MotorAngleSensor()] +locomotion_gym_config.SimulationParameters.sim_time_step_s = %SIM_TIME_STEP +locomotion_gym_config.SimulationParameters.num_action_repeat = %NUM_ACTION_REPEAT +locomotion_gym_config.SimulationParameters.enable_rendering = False +locomotion_gym_config.LocomotionGymConfig.simulation_parameters = @locomotion_gym_config.SimulationParameters() +locomotion_gym_env.LocomotionGymEnv.gym_config = @locomotion_gym_config.LocomotionGymConfig() + +# Specify the scene. +scene_base.SceneBase.data_root = %URDF_ROOT +locomotion_gym_env.LocomotionGymEnv.scene = @simple_scene.SimpleScene() + +# Specify the motor limits, and motor control mode. +laikago/robot_config.MotorLimits.angle_lower_limits = %LOWER_BOUND +laikago/robot_config.MotorLimits.angle_upper_limits = %UPPER_BOUND +laikago_v2.Laikago.motor_limits = @laikago/robot_config.MotorLimits() +laikago_v2.Laikago.motor_control_mode = %robot_config.MotorControlMode.POSITION +laikago_v2.Laikago.motor_model_class = @hybrid_motor_model.HybridMotorModel +locomotion_gym_env.LocomotionGymEnv.robot_class = @laikago_v2.Laikago + +# Specify the motor model parameters. Notice that we don't need to specify the control mode or motor limits here. +hybrid_motor_model.HybridMotorModel.kp = 220 +hybrid_motor_model.HybridMotorModel.kd = 2 + +laikago_v2.Laikago.sensors = %SENSORS + + +laikago_v2.Laikago.sensors = [@imu_sensor.IMUSensor()] diff --git a/examples/pybullet/gym/pybullet_data/configs_v2/base/mini_cheetah_with_imu.gin b/examples/pybullet/gym/pybullet_data/configs_v2/base/mini_cheetah_with_imu.gin new file mode 100644 index 000000000..d7ebe63f7 --- /dev/null +++ b/examples/pybullet/gym/pybullet_data/configs_v2/base/mini_cheetah_with_imu.gin @@ -0,0 +1,9 @@ +import pybullet_data as pd + +include pd.getDataPath()+'/configs_v2/robots/mini_cheetah.gin' +include pd.getDataPath()+'/configs_v2/sensors/imu.gin' + +#include 'robotics/reinforcement_learning/minitaur/envs_v2/configs_v2/robots/mini_cheetah.gin' +#include 'robotics/reinforcement_learning/minitaur/envs_v2/configs_v2/sensors/imu.gin' + +mini_cheetah.MiniCheetah.sensors = [@robot_sensors.IMUSensor()] diff --git a/examples/pybullet/gym/pybullet_data/configs_v2/robots/laikago.gin b/examples/pybullet/gym/pybullet_data/configs_v2/robots/laikago.gin new file mode 100644 index 000000000..a639c83c9 --- /dev/null +++ b/examples/pybullet/gym/pybullet_data/configs_v2/robots/laikago.gin @@ -0,0 +1,58 @@ +import pybullet_envs.minitaur.envs_v2.locomotion_gym_config +import pybullet_envs.minitaur.envs_v2.locomotion_gym_env +import pybullet_envs.minitaur.envs_v2.scenes.scene_base +import pybullet_envs.minitaur.envs_v2.scenes.simple_scene +import pybullet_envs.minitaur.envs_v2.sensors.imu_sensor +import pybullet_envs.minitaur.envs_v2.sensors.motor_angle_sensor +import pybullet_envs.minitaur.robots.hybrid_motor_model +import pybullet_envs.minitaur.robots.laikago_v2 +import pybullet_envs.minitaur.robots.robot_config + +URDF_ROOT = "" +UPPER_BOUND = 6.28318548203 +LOWER_BOUND = -6.28318548203 +SIM_TIME_STEP = 0.001 +NUM_ACTION_REPEAT = 2 + +locomotion_gym_config.SimulationParameters.sim_time_step_s = %SIM_TIME_STEP +locomotion_gym_config.SimulationParameters.num_action_repeat = %NUM_ACTION_REPEAT +locomotion_gym_config.SimulationParameters.enable_rendering = False +locomotion_gym_config.LocomotionGymConfig.simulation_parameters = @locomotion_gym_config.SimulationParameters() + +imu_sensor.IMUSensor.channels = [ + %imu_sensor.IMUChannel.ROLL, + %imu_sensor.IMUChannel.PITCH, + %imu_sensor.IMUChannel.ROLL_RATE, + %imu_sensor.IMUChannel.PITCH_RATE, +] + +imu_sensor.IMUSensor.lower_bound = [-6.28318548203, -6.28318548203, + -6283.18554688, -6283.18554688] +imu_sensor.IMUSensor.upper_bound = [6.28318548203, 6.28318548203, + 6283.18554688, 6283.18554688] + +# We use the default confirugration for MotorAngleSensor, which reads limits from the robot. +SENSORS = [@imu_sensor.IMUSensor(), @motor_angle_sensor.MotorAngleSensor()] +locomotion_gym_config.SimulationParameters.sim_time_step_s = %SIM_TIME_STEP +locomotion_gym_config.SimulationParameters.num_action_repeat = %NUM_ACTION_REPEAT +locomotion_gym_config.SimulationParameters.enable_rendering = False +locomotion_gym_config.LocomotionGymConfig.simulation_parameters = @locomotion_gym_config.SimulationParameters() +locomotion_gym_env.LocomotionGymEnv.gym_config = @locomotion_gym_config.LocomotionGymConfig() + +# Specify the scene. +scene_base.SceneBase.data_root = %URDF_ROOT +locomotion_gym_env.LocomotionGymEnv.scene = @simple_scene.SimpleScene() + +# Specify the motor limits, and motor control mode. +laikago/robot_config.MotorLimits.angle_lower_limits = %LOWER_BOUND +laikago/robot_config.MotorLimits.angle_upper_limits = %UPPER_BOUND +laikago_v2.Laikago.motor_limits = @laikago/robot_config.MotorLimits() +laikago_v2.Laikago.motor_control_mode = %robot_config.MotorControlMode.POSITION +laikago_v2.Laikago.motor_model_class = @hybrid_motor_model.HybridMotorModel +locomotion_gym_env.LocomotionGymEnv.robot_class = @laikago_v2.Laikago + +# Specify the motor model parameters. Notice that we don't need to specify the control mode or motor limits here. +hybrid_motor_model.HybridMotorModel.kp = 220 +hybrid_motor_model.HybridMotorModel.kd = 2 + +laikago_v2.Laikago.sensors = %SENSORS diff --git a/examples/pybullet/gym/pybullet_data/configs_v2/robots/mini_cheetah.gin b/examples/pybullet/gym/pybullet_data/configs_v2/robots/mini_cheetah.gin new file mode 100644 index 000000000..7433da2f8 --- /dev/null +++ b/examples/pybullet/gym/pybullet_data/configs_v2/robots/mini_cheetah.gin @@ -0,0 +1,98 @@ +import pybullet_envs.minitaur.envs_v2.locomotion_gym_config +import pybullet_envs.minitaur.envs_v2.locomotion_gym_env +import pybullet_envs.minitaur.robots.mini_cheetah +import pybullet_data as pd + +URDF_ROOT = pd.getDataPath()+"/urdf/" + +ABDUCTION_P_GAIN = 100.0 +ABDUCTION_D_GAIN = 1.0 +HIP_P_GAIN = 30 +HIP_D_GAIN = 2.0 +KNEE_P_GAIN = 50 +KNEE_D_GAIN = 2.0 + + +UPPER_BOUND = 6.28318548203 +LOWER_BOUND = -6.28318548203 +SIM_TIME_STEP = 0.001 +NUM_ACTION_REPEAT = 2 +NUM_MOTORS = 12 +NOISY_READING = True + +locomotion_gym_config.SimulationParameters.sim_time_step_s = %SIM_TIME_STEP +locomotion_gym_config.SimulationParameters.num_action_repeat = %NUM_ACTION_REPEAT +locomotion_gym_config.SimulationParameters.enable_rendering = False +locomotion_gym_config.LocomotionGymConfig.simulation_parameters = @locomotion_gym_config.SimulationParameters() + +Act0/locomotion_gym_config.ScalarField.name = "motor_angle_0" +Act0/locomotion_gym_config.ScalarField.upper_bound = %UPPER_BOUND +Act0/locomotion_gym_config.ScalarField.lower_bound = %LOWER_BOUND +Act1/locomotion_gym_config.ScalarField.name = "motor_angle_1" +Act1/locomotion_gym_config.ScalarField.upper_bound = %UPPER_BOUND +Act1/locomotion_gym_config.ScalarField.lower_bound = %LOWER_BOUND +Act2/locomotion_gym_config.ScalarField.name = "motor_angle_2" +Act2/locomotion_gym_config.ScalarField.upper_bound = %UPPER_BOUND +Act2/locomotion_gym_config.ScalarField.lower_bound = %LOWER_BOUND +Act3/locomotion_gym_config.ScalarField.name = "motor_angle_3" +Act3/locomotion_gym_config.ScalarField.upper_bound = %UPPER_BOUND +Act3/locomotion_gym_config.ScalarField.lower_bound = %LOWER_BOUND +Act4/locomotion_gym_config.ScalarField.name = "motor_angle_4" +Act4/locomotion_gym_config.ScalarField.upper_bound = %UPPER_BOUND +Act4/locomotion_gym_config.ScalarField.lower_bound = %LOWER_BOUND +Act5/locomotion_gym_config.ScalarField.name = "motor_angle_5" +Act5/locomotion_gym_config.ScalarField.upper_bound = %UPPER_BOUND +Act5/locomotion_gym_config.ScalarField.lower_bound = %LOWER_BOUND +Act6/locomotion_gym_config.ScalarField.name = "motor_angle_6" +Act6/locomotion_gym_config.ScalarField.upper_bound = %UPPER_BOUND +Act6/locomotion_gym_config.ScalarField.lower_bound = %LOWER_BOUND +Act7/locomotion_gym_config.ScalarField.name = "motor_angle_7" +Act7/locomotion_gym_config.ScalarField.upper_bound = %UPPER_BOUND +Act7/locomotion_gym_config.ScalarField.lower_bound = %LOWER_BOUND +Act8/locomotion_gym_config.ScalarField.name = "motor_angle_8" +Act8/locomotion_gym_config.ScalarField.upper_bound = %UPPER_BOUND +Act8/locomotion_gym_config.ScalarField.lower_bound = %LOWER_BOUND +Act9/locomotion_gym_config.ScalarField.name = "motor_angle_9" +Act9/locomotion_gym_config.ScalarField.upper_bound = %UPPER_BOUND +Act9/locomotion_gym_config.ScalarField.lower_bound = %LOWER_BOUND +Act10/locomotion_gym_config.ScalarField.name = "motor_angle_10" +Act10/locomotion_gym_config.ScalarField.upper_bound = %UPPER_BOUND +Act10/locomotion_gym_config.ScalarField.lower_bound = %LOWER_BOUND +Act11/locomotion_gym_config.ScalarField.name = "motor_angle_11" +Act11/locomotion_gym_config.ScalarField.upper_bound = %UPPER_BOUND +Act11/locomotion_gym_config.ScalarField.lower_bound = %LOWER_BOUND + + +locomotion_gym_config.LocomotionGymConfig.actions = [ + @Act0/locomotion_gym_config.ScalarField(), + @Act1/locomotion_gym_config.ScalarField(), + @Act2/locomotion_gym_config.ScalarField(), + @Act3/locomotion_gym_config.ScalarField(), + @Act4/locomotion_gym_config.ScalarField(), + @Act5/locomotion_gym_config.ScalarField(), + @Act6/locomotion_gym_config.ScalarField(), + @Act7/locomotion_gym_config.ScalarField(), + @Act8/locomotion_gym_config.ScalarField(), + @Act9/locomotion_gym_config.ScalarField(), + @Act10/locomotion_gym_config.ScalarField(), + @Act11/locomotion_gym_config.ScalarField()] + +locomotion_gym_env.LocomotionGymEnv.gym_config = @locomotion_gym_config.LocomotionGymConfig() + +mini_cheetah.MiniCheetah.urdf_root = %URDF_ROOT +mini_cheetah.MiniCheetah.time_step = %SIM_TIME_STEP +mini_cheetah.MiniCheetah.action_repeat = %NUM_ACTION_REPEAT +mini_cheetah.MiniCheetah.self_collision_enabled = False +mini_cheetah.MiniCheetah.control_latency = 0.002 +mini_cheetah.MiniCheetah.pd_latency = 0.0 +mini_cheetah.MiniCheetah.motor_kp = [%ABDUCTION_P_GAIN, %HIP_P_GAIN, %KNEE_P_GAIN, + %ABDUCTION_P_GAIN, %HIP_P_GAIN, %KNEE_P_GAIN, + %ABDUCTION_P_GAIN, %HIP_P_GAIN, %KNEE_P_GAIN, + %ABDUCTION_P_GAIN, %HIP_P_GAIN, %KNEE_P_GAIN] +mini_cheetah.MiniCheetah.motor_kd = [%ABDUCTION_D_GAIN, %HIP_D_GAIN, %KNEE_D_GAIN, + %ABDUCTION_D_GAIN, %HIP_D_GAIN, %KNEE_D_GAIN, + %ABDUCTION_D_GAIN, %HIP_D_GAIN, %KNEE_D_GAIN, + %ABDUCTION_D_GAIN, %HIP_D_GAIN, %KNEE_D_GAIN] + +locomotion_gym_env.LocomotionGymEnv.robot_class = @mini_cheetah.MiniCheetah + diff --git a/examples/pybullet/gym/pybullet_data/configs_v2/robots/minitaur.gin b/examples/pybullet/gym/pybullet_data/configs_v2/robots/minitaur.gin new file mode 100644 index 000000000..091483380 --- /dev/null +++ b/examples/pybullet/gym/pybullet_data/configs_v2/robots/minitaur.gin @@ -0,0 +1,31 @@ +import pybullet_envs.minitaur.envs_v2.locomotion_gym_config +import pybullet_envs.minitaur.envs_v2.locomotion_gym_env +import pybullet_envs.minitaur.robots.minitaur_motor_model_v2 +import pybullet_envs.minitaur.robots.minitaur_v2 + +URDF_ROOT = "robotics/reinforcement_learning/minitaur/robots/data/urdf/" + +UPPER_BOUND = 6.28318548203 +LOWER_BOUND = -6.28318548203 +SIM_TIME_STEP = 0.001 +NUM_ACTION_REPEAT = 6 +NUM_MOTORS = 8 +NOISY_READING = True + +locomotion_gym_config.SimulationParameters.sim_time_step_s = %SIM_TIME_STEP +locomotion_gym_config.SimulationParameters.num_action_repeat = %NUM_ACTION_REPEAT +locomotion_gym_config.SimulationParameters.enable_rendering = False +locomotion_gym_config.LocomotionGymConfig.simulation_parameters = @locomotion_gym_config.SimulationParameters() +locomotion_gym_env.LocomotionGymEnv.gym_config = @locomotion_gym_config.LocomotionGymConfig() + +minitaur_v2.Minitaur.motor_control_mode = %robot_config.MotorControlMode.POSITION +minitaur_v2.Minitaur.motor_limits = @robot_config.MotorLimits() +minitaur_v2.Minitaur.motor_model_class = @minitaur_motor_model_v2.MinitaurMotorModel +minitaur_motor_model_v2.MinitaurMotorModel.pd_latency = 0.003 +minitaur_motor_model_v2.MinitaurMotorModel.kp = 1.0 +minitaur_motor_model_v2.MinitaurMotorModel.kd = 0.015 + +locomotion_gym_env.LocomotionGymEnv.robot_class = @minitaur_v2.Minitaur + +robot_config.MotorLimits.angle_lower_limits = %LOWER_BOUND +robot_config.MotorLimits.angle_upper_limits = %UPPER_BOUND diff --git a/examples/pybullet/gym/pybullet_data/configs_v2/scenes/simple_scene.gin b/examples/pybullet/gym/pybullet_data/configs_v2/scenes/simple_scene.gin new file mode 100644 index 000000000..6cb12467a --- /dev/null +++ b/examples/pybullet/gym/pybullet_data/configs_v2/scenes/simple_scene.gin @@ -0,0 +1,4 @@ +import pybullet_envs.minitaur.envs_v2.locomotion_gym_env +import pybullet_envs.minitaur.envs_v2.scenes.simple_scene + +locomotion_gym_env.LocomotionGymEnv.scene = @simple_scene.SimpleScene() diff --git a/examples/pybullet/gym/pybullet_data/configs_v2/scenes/stair_scene.gin b/examples/pybullet/gym/pybullet_data/configs_v2/scenes/stair_scene.gin new file mode 100644 index 000000000..134f5774f --- /dev/null +++ b/examples/pybullet/gym/pybullet_data/configs_v2/scenes/stair_scene.gin @@ -0,0 +1,3 @@ +import pybullet_envs.minitaur.envs_v2.scenes.stair_scene +# Specify the scene (overwrite the setting from laikago_reactive.gin) +locomotion_gym_env.LocomotionGymEnv.scene = @stair_scene.StairScene() diff --git a/examples/pybullet/gym/pybullet_data/configs_v2/tasks/fwd_task.gin b/examples/pybullet/gym/pybullet_data/configs_v2/tasks/fwd_task.gin new file mode 100644 index 000000000..316431710 --- /dev/null +++ b/examples/pybullet/gym/pybullet_data/configs_v2/tasks/fwd_task.gin @@ -0,0 +1,4 @@ +import pybullet_envs.minitaur.envs_v2.locomotion_gym_env +import pybullet_envs.minitaur.envs_v2.tasks.simple_locomotion_task + +locomotion_gym_env.LocomotionGymEnv.task = @simple_locomotion_task.SimpleForwardTask() diff --git a/examples/pybullet/gym/pybullet_data/configs_v2/tasks/fwd_task_laikago.gin b/examples/pybullet/gym/pybullet_data/configs_v2/tasks/fwd_task_laikago.gin new file mode 100644 index 000000000..59a50e4e7 --- /dev/null +++ b/examples/pybullet/gym/pybullet_data/configs_v2/tasks/fwd_task_laikago.gin @@ -0,0 +1,8 @@ +import pybullet_envs.minitaur.envs_v2.locomotion_gym_env +import pybullet_envs.minitaur.envs_v2.tasks.simple_locomotion_task + +locomotion_gym_env.LocomotionGymEnv.task = @simple_locomotion_task.SimpleForwardTask() + +simple_locomotion_task.SimpleForwardTask.energy_penalty_coef = 0.002 +simple_locomotion_task.SimpleForwardTask.min_com_height = 0.3 +simple_locomotion_task.SimpleForwardTask.clip_velocity = 0.002 diff --git a/examples/pybullet/gym/pybullet_data/configs_v2/tasks/fwd_task_no_termination.gin b/examples/pybullet/gym/pybullet_data/configs_v2/tasks/fwd_task_no_termination.gin new file mode 100644 index 000000000..5fc8189ca --- /dev/null +++ b/examples/pybullet/gym/pybullet_data/configs_v2/tasks/fwd_task_no_termination.gin @@ -0,0 +1,11 @@ +import pybullet_envs.minitaur.envs_v2.locomotion_gym_env +import pybullet_envs.minitaur.envs_v2.tasks.simple_locomotion_task +import pybullet_envs.minitaur.envs_v2.tasks.terminal_conditions + +terminal_conditions.maxstep_terminal_condition.max_step = 1500 +# Setup the terminal condition to not to terminate early when the robot falls. +terminal_conditions.logical_any_terminal_condition.conditions = [ + @terminal_conditions.maxstep_terminal_condition, + ] +simple_locomotion_task.SimpleForwardTask.terminal_condition = @terminal_conditions.logical_any_terminal_condition +locomotion_gym_env.LocomotionGymEnv.task = @simple_locomotion_task.SimpleForwardTask() diff --git a/examples/pybullet/gym/pybullet_data/configs_v2/tasks/fwd_task_no_termination_simplified.gin b/examples/pybullet/gym/pybullet_data/configs_v2/tasks/fwd_task_no_termination_simplified.gin new file mode 100644 index 000000000..c7d9630d5 --- /dev/null +++ b/examples/pybullet/gym/pybullet_data/configs_v2/tasks/fwd_task_no_termination_simplified.gin @@ -0,0 +1,12 @@ +import pybullet_envs.minitaur.envs_v2.locomotion_gym_env +import pybullet_envs.minitaur.envs_v2.tasks.simple_locomotion_task +import pybullet_envs.minitaur.envs_v2.tasks.terminal_conditions + +terminal_conditions.maxstep_terminal_condition.max_step = 1500 +simple_locomotion_task.SimpleForwardTask.terminal_condition = @terminal_conditions.default_terminal_condition_for_laikago_v2 + +simple_locomotion_task.SimpleForwardTask.divide_with_dt = True +simple_locomotion_task.SimpleForwardTask.clip_velocity = 0.4 +simple_locomotion_task.SimpleForwardTask.energy_penalty_coef = 0 + +locomotion_gym_env.LocomotionGymEnv.task = @simple_locomotion_task.SimpleForwardTask() diff --git a/examples/pybullet/gym/pybullet_data/configs_v2/wrappers/pmtg_wrapper.gin b/examples/pybullet/gym/pybullet_data/configs_v2/wrappers/pmtg_wrapper.gin new file mode 100644 index 000000000..f9466a316 --- /dev/null +++ b/examples/pybullet/gym/pybullet_data/configs_v2/wrappers/pmtg_wrapper.gin @@ -0,0 +1,18 @@ +import pybullet_envs.minitaur.envs_v2.env_loader +import pybullet_envs.minitaur.envs_v2.env_wrappers.observation_dictionary_to_array_wrapper +import pybullet_envs.minitaur.envs_v2.env_wrappers.pmtg_wrapper_env + +pmtg_wrapper_env.PmtgWrapperEnv.action_filter_enable = True +pmtg_wrapper_env.PmtgWrapperEnv.action_filter_enable = 1 +pmtg_wrapper_env.PmtgWrapperEnv.intensity_upper_bound = 1.0 +pmtg_wrapper_env.PmtgWrapperEnv.max_delta_time = 4.0 +pmtg_wrapper_env.PmtgWrapperEnv.min_delta_time = 2.0 +pmtg_wrapper_env.PmtgWrapperEnv.residual_range = 0.35 +pmtg_wrapper_env.PmtgWrapperEnv.integrator_coupling_mode = "all coupled" +pmtg_wrapper_env.PmtgWrapperEnv.walk_height_coupling_mode = "all coupled" +pmtg_wrapper_env.PmtgWrapperEnv.variable_swing_stance_ratio = 1 +pmtg_wrapper_env.PmtgWrapperEnv.init_gait = "walk" + +env_loader.load.wrapper_classes = [ + @pmtg_wrapper_env.PmtgWrapperEnv, + @observation_dictionary_to_array_wrapper.ObservationDictionaryToArrayWrapper] diff --git a/examples/pybullet/gym/pybullet_data/configs_v2/wrappers/pmtg_wrapper_dict.gin b/examples/pybullet/gym/pybullet_data/configs_v2/wrappers/pmtg_wrapper_dict.gin new file mode 100644 index 000000000..74251e31c --- /dev/null +++ b/examples/pybullet/gym/pybullet_data/configs_v2/wrappers/pmtg_wrapper_dict.gin @@ -0,0 +1,6 @@ +import pybullet_envs.minitaur.envs_v2.env_loader +import pybullet_envs.minitaur.envs_v2.env_wrappers.pmtg_wrapper_env + +pmtg_wrapper_env.PmtgWrapperEnv.action_filter_enable = True + +env_loader.load.wrapper_classes = [@pmtg_wrapper_env.PmtgWrapperEnv] diff --git a/examples/pybullet/gym/pybullet_data/configs_v2/wrappers/pmtg_wrapper_laikago.gin b/examples/pybullet/gym/pybullet_data/configs_v2/wrappers/pmtg_wrapper_laikago.gin new file mode 100644 index 000000000..8f46b1591 --- /dev/null +++ b/examples/pybullet/gym/pybullet_data/configs_v2/wrappers/pmtg_wrapper_laikago.gin @@ -0,0 +1,10 @@ +import pybullet_envs.minitaur.envs_v2.env_loader +import pybullet_envs.minitaur.envs_v2.env_wrappers.observation_dictionary_to_array_wrapper +import pybullet_envs.minitaur.envs_v2.env_wrappers.pmtg_wrapper_env + +pmtg_wrapper_env.PmtgWrapperEnv.action_filter_enable = True +pmtg_wrapper_env.PmtgWrapperEnv.action_filter_high_cut = 0.5 + +env_loader.load.wrapper_classes = [ + @pmtg_wrapper_env.PmtgWrapperEnv, + @observation_dictionary_to_array_wrapper.ObservationDictionaryToArrayWrapper] diff --git a/examples/pybullet/gym/pybullet_data/configs_v2/wrappers/pmtg_wrapper_simplified_env.gin b/examples/pybullet/gym/pybullet_data/configs_v2/wrappers/pmtg_wrapper_simplified_env.gin new file mode 100644 index 000000000..f6736cb09 --- /dev/null +++ b/examples/pybullet/gym/pybullet_data/configs_v2/wrappers/pmtg_wrapper_simplified_env.gin @@ -0,0 +1,18 @@ +import pybullet_envs.minitaur.envs_v2.env_loader +import pybullet_envs.minitaur.envs_v2.env_wrappers.observation_dictionary_to_array_wrapper +import pybullet_envs.minitaur.envs_v2.env_wrappers.pmtg_wrapper_env + + +pmtg_wrapper_env.PmtgWrapperEnv.init_leg_phase_offsets = [0, 0.5, 0.5, 0] +pmtg_wrapper_env.PmtgWrapperEnv.integrator_coupling_mode = 'all coupled' +pmtg_wrapper_env.PmtgWrapperEnv.intensity_upper_bound = 0.5 +pmtg_wrapper_env.PmtgWrapperEnv.max_delta_time = 4 +pmtg_wrapper_env.PmtgWrapperEnv.min_delta_time = 1 +pmtg_wrapper_env.PmtgWrapperEnv.residual_range = 0.2 +pmtg_wrapper_env.PmtgWrapperEnv.variable_swing_stance_ratio = False +pmtg_wrapper_env.PmtgWrapperEnv.walk_height_coupling_mode = 'null' +pmtg_wrapper_env.PmtgWrapperEnv.action_filter_high_cut = 0.5 + +env_loader.load.wrapper_classes = [ + @pmtg_wrapper_env.PmtgWrapperEnv, + @observation_dictionary_to_array_wrapper.ObservationDictionaryToArrayWrapper] diff --git a/examples/pybullet/gym/pybullet_data/testdata/__init__.py b/examples/pybullet/gym/pybullet_data/testdata/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/examples/pybullet/gym/pybullet_data/testdata/test_imu_state_estimator/__init__.py b/examples/pybullet/gym/pybullet_data/testdata/test_imu_state_estimator/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/examples/pybullet/gym/pybullet_data/testdata/test_imu_state_estimator/accelerometer.npy b/examples/pybullet/gym/pybullet_data/testdata/test_imu_state_estimator/accelerometer.npy new file mode 100644 index 0000000000000000000000000000000000000000..5201d49f155c3dd9799621db6bd8a62a38f92a65 GIT binary patch literal 4928 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 P=UMBpzA0KXj8gFD!A< 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 G=zjoXkE{Lw literal 0 HcmV?d00001 diff --git a/examples/pybullet/gym/pybullet_data/testdata/test_imu_state_estimator/feet_contact_forces.npy b/examples/pybullet/gym/pybullet_data/testdata/test_imu_state_estimator/feet_contact_forces.npy new file mode 100644 index 0000000000000000000000000000000000000000..b235bdc36c17e3cdf28f9fa627aed2dd7e6eaa97 GIT binary patch literal 19328 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 rmu2%2&raKD^1wCUtlFuavhsA3;P8 zL z{UJtAMJsiWD+sVJ3vXK@OgPWccwqS8FiLT?%Nx;PLD;iOpWbFkz_W4389hWY zSf-Jna#189>~07oM!3|sEmr|-F44WQ1Nbqo9!dh9|JAS0b0WYg-~aH^Ls~G4M&rz5 zHp4WJXHf}h@Vrd+a_Pn^aPQ`M<>n|R@k?hXW>WJcZ>Rw$8?UGS?U8VM?eo~DI&MVI zeymx8u%u}Tv_a5#V($XuOQ8JWvYfNIADKUOoc06>V!mok8%T+78@Ycy5WeJ%ggkn1 zk@7z^w~^R$Iv!QSN+;&85Ox4mOoRu$eG*9Vj=@WWvtOk9p-;cE+v-;bLVxRLg{O}L z;3tnaEVrZ@{^0MNf1w6F?pc*}mk|P=s|sF;E;~o;IR^ylC_g9cThO^8c8lk|OCYmy zZjEu2E77x0j~7zopsNYJ_Ma%)gD@A_F43Yrqm-Kk$rI9oy`5p-)1gTE{g zE~bnf;e;O}oT0{FOmQorJV-p*7V>M?Mfm;3_=5GOlVn{|lhgCjJ6tDDE%~7HT61rH z8w>mcu0?+oJVojzbxBGg`iSG)X^;g~wPV|SfBJ#0McMFn4LkUT`LSCM(FeQ`;Cu_z z5^UG@to8-PsiH>U+L8I``Rl65{Md2>b;O=2@b(r6bWL+@!;he+S8{#4XU(k7szxfmZ27=o zG_4;r$#6V|%I(sZ8Z31u_8g0CRDIG;?2U(j@uw}H+Qd-6U%B_oTPaT8s?$Qou?BVS zpze7?cLq{VLFim~Z1KSfa9oTPt2;pkuTPm=1JWy~SSA+j1$%CMH#clM1fw|qA^m0$ z!{aW^>qN`M0~bwiI|uwPKX8}DSs}6CJPEp;4+!HtE$it)t5r42b1l4~J#Wp^7!_aC zkMnE&{RVph|5z~6$9@m%<)Hg`AG8&gz{K&_ z@+K#DfkfCB<@NS~R9+pf##7(_LaYJ0(9q$*6m8HNc@>eP=TA5T)mMCtea$tRK?Q_u+Rvz@;N zAJ#yF71=v}k62Q?aOwe(j1`@Az;FKkd7j%LlrU@HX{?$7#Sc$p63Hze$NPWxmDG;Y zX2@??wNEu=1F4_X{DDX`2j}5@E5MV>qbku)k0P`-q;sIw4BlhT&xoS@6eU)Jlv1W| zTdFyFJsvHl;z`v%s9lUFoIWw97P3|i$<#h!q9|=Kzx@4f@D=CZH7=TP23xQew#8fV zmc6w^xq*eow&p%Cj`KSDB^dGH0T%r=U~!>deK6A!sr$|fdF0^-t=MkW+IXm%DC2~H-C}Jhd$lTlPp3c8vrZJZ5lM@- ztw!ojYPWBBIYM#RcO>NMN!e`>>!M`8U^mMDGjOkD(|Oo3;EU0@I zIvvcu1zCZ>nhv)0Vml+u8NSWUWE^9Y%pj5o+ZSeL6#{Y9XCpVdun1>=V^jNwmGi6% zy*rW|dd(*oZ0C&!#Q6sk&hm`}%1^rm2kl$Xv|GU;05&E)EqR+lab~3O6KdQK4*;pI z=mjO&-mv11=v=++0hFE8f({}%yx~sp(mxp5z&;Hde`fI#L_CO|{b_qEk#w(wK2Y(` z^Letx4D^3}PH8MKM8o)Ay3MRXFY!8*uIYyz?bcNjFLuJGjl(x|*PVh-nBV-X6b<1z zxcjpQthlzNg~v3J;w_f}V*v(yZ#wIn+a~4|~M` zb-uA<8{1&p{Sw9^At!Y3m&DC&0>OaIS*6RGsQ8_EO~7}swn41I8;Jz%3~zXLiEvs$ zS2N+X5#=UWzvkwv^iY4aDBG>_`j<$`-YT-5aOOkCV`$(ci9epYh`5`_XD1m&6V4Wy zIe$4}W(^=ERhJPa8;p2-BI(5fv4k_u4i^!7dfK5n5Q_0nA7qB0V@9l{ArV(8o>~15 z;S7y6HDG@((kV+j1X-O45uU7$Bb*~Sl|m%_-Q7YkU%;nnVjqOQ*_wo(Rie%XuFUBw z!r7W7spzZdZ$@Pa3&|zY`=_fY|8(g+j|rzmj<%u&_r&DfhJBFWftU3AD$!(rN*E42 zf^FFUfn9xQWr&Cw>!BOsiAtPFSrrOhc)%IuGLXV~{3SVv`jzd>KIgcgFN-b9Pp&-= zd_Q;=-Ar@9=N$diWG~t=zFdGW$rW*feO%)rpx)GJka&ntxq7I&m&=})uQv?iRr_!gB%){Qf@&}UF~w6)w7Ih81B zn^n0H&S-SJPb6L8{8QNIBqJg}#~HOH(@N7GTp)VZt%4jPx&Peg0@Kx*yZg4BK_yvi zIQ@jG4{o7;BH_%#U0smh-z@ibxdR$^2s?DVK7!~O^0Cx9GwEU-;2!KGdUUTns%n=K zlHO10xgtx`DErHoTR`>C`&+w>t zJWs6;O=3?j;he1+)lj{;ZOL=~qv+Bs;c}ImaWEIpe`q{|>=Xakk5!O(eciqhQ6nTe zsq1;CES~C{y#LCC&zOHTFN2MJKLWg0XrK!D$;{bt3B)g3L5<1}^GfUk(2?qWsjE7n zp1iZH?#I4sgmcxk?-9xRy)X}E8ypymS+^TzdsbM8_EDUz_2mxb=jP1}$Z6Kef8U3o zXSYOlx(<~$Hp43lVSAd`3s=}sJWQu+{*B%ij2}!}LvfZjm+CKB8;?Ffaam)5ilcU@ z$GZMfSP~T}0?`6ADUq0!P_7fAmFm3!Jq|DHN=5m0xB)QduM z7gVa&-*jN)9N=>aDjk|&IX{gRnPUqN-pzK6aJNE>4`nDmbN7RPv7JpZ2fpBaR6g(k z%o=`O3u7Hd^LF*Q@t3k-n4Ei@0_el*_hJk{{?Cs?MrwLUvGi5=q1`j_txC=#@iC3B zS3}u5Jq3r;lj`-6H{a`5&75zJHl>8Ke_C-swO6mB$HWMf`FIV^yoMS#%e)xk91|>jyPY9Tr$;<}ES%`+odc9Tdx3ZX zc;41vt*i8a6$*Sg9s<<)$c>_xQ{&P$-80p-!GhR zBl++l+s13k{v1TURFW@#cm7Ht#0xq>MUga{`Be}r5LEfdGASlfCm2X{G9`Hkm1_U$#3#r z&|59~`@c9S72i_|Q;(41hXbQ>Z=4}7+|J*zEF31V{h)F^!oTx|lggi> z`rh$nsyUX>=CR(USw9FCdHh{%uLSOId*S6HU#Y8Kn9U z`Z1q+cqh7gcY&V{6lf0f_X`IQ&O9uXh_GaQt*n7NmHtOWCmGXj8>Z?Y;oP*W#*EkqN!AK?kz zIvX|Kkj6?&cY_?f&aGKZ2trK!t!+FYNa@P4QXMUHkjF!}x8Fw{{4~z9Ia$b6 z>V(*h3|DY5es8o^T#fX7XuP@*J(=c#M{gNubosg^<~f3+{;Y+kEDn%!fmW-Phm!I4 zjbCqs58N#aWuDoCQSwL05f1hHm%);{jqot8#dHf43~sb(-E9ktrWdHUb3Lg1FS^Yp zoGB^V43SD#QlvesA$HaF8=UPk^&75D^(WkqfeoN~|5W&KCnmhl;O1|cruG#_C_0C- z4;-t8_>D@|5erRW$nb?XXwJNElzuNDoMSUk2@*PS8zx5ohJOSW{d%E7)i1j>sE}}W z@B4C4oX5GwXWm&GL3NVKw%+l-FYQoJl_iad)TO=@d$OlGF&Ha0_L3T z<+lNa3cDrUJAyXdG-b8%QJn6uu7Ysp@ku}$ZOny9Nz2iXO}?Z4Gx5=t!)ghqIZt(< zxTw}KA8%7&4el&RZKU!?TRTG8(<)n^A+v1zXMH>-{Q9~#=Ss2{v14=fsXmIfN$wen z=&aKzojw8U!sk0^J6eD}zJE8r$wSBSxU8rS#1p9)mCQN-uf(H1FIPmQz9iNxC`I)+ ze$j+lB=fJP`Pw@hK>uIsmESiSBPC+Dx&Wn5@rG0XM8b=y;Of_wil~lFpXJ*27ut#U zWmLg6Vv`v+=oio}CEoc%LR{w?k&7PWz5b8EA~HH0)aF1CMdumKKD=8|?q5bSvm-844%g z*#s93xWw$@W5J$j9yyb=H2m?C&*f{(zSvb@)~BHeTLPgG-#>fzMWeSkj-0|; zNEKcyKYD8^x^BI=$UZ-qylc?ZRAbNp&O?AM2dYiaW@mqwLz`9m9S$~A^+&6b4?uVr zW4(SQv^NISC_LGUPAnVzX1jzsA89(}7YOI94Jd~}v|vp_)-L2Y*toZN4|V_3`AZ@x zzHnDLSez-4_`X8}$s3;dbistGFUDO~7~$Nr4@+V7oEAlmd0I%q@kaWFl{58~Q5{S; zQ$n^F_GPY>)@##6`o=~jZVxF=`?|uH@*lZ08LD$9IQ{eW(YomMOAaiG0pizf%7I9R z#@jgL5ZvH)?2{hi*u?Mb-%Qyv!@_6wVa=90bR_qKz~`-6NPTj0ky7Z){uzp;?ho1{ z;SO~6s3^bkaVexTeN0w4C5ZT?U$~o3`OnSlM&Hg=@Jeg7!KtrWY;EjWqG!qrQ~eih z@wqOv@Lb^**@Z`8|68q9p9Ibj&dxO{qT~{VcI3Z4gJIuf2_I#482@E|nCQ8I-PG>~ zR^S3a+`gd~Z^TZ5xuUaLzJ(#h**WnDk7K3XNdxcPNz0UVC*Z8)$yYvO=7h66^|A@) zRDY_4vMmFdow0}Do26-JlBpBvn>YzV*{A^5&zf)e9qedkeznV9klGdV!xz_IEdIWV zt*NL7*AagmexT8kOqZLb1-_>}dS4%A!BYId{Mpfwyk8E>m^8!H;15T?IB7$9?XKzV zLP4Z|qjhtA0KZ@I1iv&uGDu%KDx?Fy&cAEBz9bYz{_s$Tv?s#vaA^O-8rZ|!`uupY z1}NKC+#2%@gJal^UU&l)V}3CU;9V&r#dDW5Ow_yNDJDfgHP)L8+(kEW{U*$>0{wTo eZx5#`Aw5N9OXJbYupfValX^ND!Cca)0{#Q%>HP!% literal 0 HcmV?d00001 diff --git a/examples/pybullet/gym/pybullet_data/testdata/test_imu_state_estimator/jacobians.npy b/examples/pybullet/gym/pybullet_data/testdata/test_imu_state_estimator/jacobians.npy new file mode 100644 index 0000000000000000000000000000000000000000..5f7bd7a148594f7ff635c46e1f68868ce375258b GIT binary patch literal 201440 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 literal 0 HcmV?d00001 diff --git a/examples/pybullet/gym/pybullet_data/testdata/test_imu_state_estimator/timestamp.npy b/examples/pybullet/gym/pybullet_data/testdata/test_imu_state_estimator/timestamp.npy new file mode 100644 index 0000000000000000000000000000000000000000..79384090afbe7b32deff867f6200ac8beec19454 GIT binary patch literal 1728 zcmbW#ziSh57{~FrcCKs9mJ~7+T}0GpQy0Yw4njbJO>__&6LDy9vvUPqbZ}`Gmw+Hx zK}4kC;`;Sgd1ttUDd*1(E zV;U@$*Zh+6!`y%N%C*W7=uE}kuTy&lK z-{gR?L7xpd=U&*P-=;Wef{WkjyCrVi2}cP> z8AlmM8AnAPxZkUSqk^M~ql%-7qlTk~qlTl7qmHAFqk*G=qk*G|qlu%5L!pm?N1>mB zOQElVPoaMcXNw#yye;yyaJR_S#@{AioA22sXPbGn$=hKr9ddV=Plx;+=G4KV;!ts@ zI8+=e4i$%rL&Krr&~RutG#nZZ9fyuX$D!lUap*X@IJ!8xIJ!8xIJ!6t90m>phk?Vu zVc;-u^l + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/pybullet/gym/pybullet_data/urdf/mug_col.obj b/examples/pybullet/gym/pybullet_data/urdf/mug_col.obj new file mode 100644 index 000000000..4d56449df --- /dev/null +++ b/examples/pybullet/gym/pybullet_data/urdf/mug_col.obj @@ -0,0 +1,1310 @@ +# Blender v2.79 (sub 0) OBJ File: 'mug.blend' +# www.blender.org +o mug_col_Cylinder.003 +v 0.000000 0.000000 0.000000 +v 0.000000 0.041000 0.097171 +v 0.000000 0.038146 0.100000 +v 0.000000 0.040164 0.099171 +v 0.009873 0.036846 0.100000 +v 0.010612 0.039603 0.097171 +v 0.010395 0.038796 0.099171 +v 0.019073 0.033036 0.100000 +v 0.020500 0.035507 0.097171 +v 0.020082 0.034783 0.099171 +v 0.026973 0.026973 0.100000 +v 0.028991 0.028991 0.097171 +v 0.028400 0.028400 0.099171 +v 0.033036 0.019073 0.100000 +v 0.035507 0.020500 0.097171 +v 0.034783 0.020082 0.099171 +v 0.036846 0.009873 0.100000 +v 0.039603 0.010612 0.097171 +v 0.038796 0.010395 0.099171 +v 0.038146 0.000000 0.100000 +v 0.041000 0.000000 0.097171 +v 0.040164 0.000000 0.099171 +v 0.036846 -0.009873 0.100000 +v 0.039603 -0.010612 0.097171 +v 0.038796 -0.010395 0.099171 +v 0.033036 -0.019073 0.100000 +v 0.035507 -0.020500 0.097171 +v 0.034783 -0.020082 0.099171 +v 0.026974 -0.026973 0.100000 +v 0.028991 -0.028991 0.097171 +v 0.028400 -0.028400 0.099171 +v 0.019073 -0.033036 0.100000 +v 0.020500 -0.035507 0.097171 +v 0.020082 -0.034783 0.099171 +v 0.009873 -0.036846 0.100000 +v 0.010612 -0.039603 0.097171 +v 0.010395 -0.038796 0.099171 +v 0.000000 -0.038146 0.100000 +v 0.000000 -0.041000 0.097171 +v 0.000000 -0.040164 0.099171 +v -0.009873 -0.036846 0.100000 +v -0.010612 -0.039603 0.097171 +v -0.010395 -0.038796 0.099171 +v -0.019073 -0.033036 0.100000 +v -0.020500 -0.035507 0.097171 +v -0.020082 -0.034783 0.099171 +v -0.026973 -0.026974 0.100000 +v -0.028991 -0.028991 0.097171 +v -0.028400 -0.028400 0.099171 +v -0.033036 -0.019073 0.100000 +v -0.035507 -0.020500 0.097171 +v -0.034783 -0.020082 0.099171 +v -0.036846 -0.009873 0.100000 +v -0.039603 -0.010612 0.097171 +v -0.038796 -0.010395 0.099171 +v -0.038146 -0.000000 0.100000 +v -0.041000 -0.000000 0.097171 +v -0.040164 -0.000000 0.099171 +v -0.036846 0.009873 0.100000 +v -0.039603 0.010612 0.097171 +v -0.038796 0.010395 0.099171 +v -0.033036 0.019073 0.100000 +v -0.035507 0.020500 0.097171 +v -0.034783 0.020082 0.099171 +v -0.026974 0.026973 0.100000 +v -0.028991 0.028991 0.097171 +v -0.028400 0.028400 0.099171 +v -0.019073 0.033036 0.100000 +v -0.020500 0.035507 0.097171 +v -0.020082 0.034783 0.099171 +v -0.009873 0.036846 0.100000 +v -0.010612 0.039603 0.097171 +v -0.010395 0.038796 0.099171 +v 0.000000 -0.000000 0.100000 +v 0.000000 0.039460 0.000000 +v 0.000000 0.041000 0.001527 +v 0.000000 0.040549 0.000447 +v 0.010612 0.039603 0.001527 +v 0.010213 0.038116 0.000000 +v 0.010495 0.039167 0.000447 +v 0.020500 0.035507 0.001527 +v 0.019730 0.034174 0.000000 +v 0.020275 0.035116 0.000447 +v 0.028991 0.028991 0.001527 +v 0.027903 0.027903 0.000000 +v 0.028672 0.028672 0.000447 +v 0.035507 0.020500 0.001527 +v 0.034174 0.019730 0.000000 +v 0.035116 0.020275 0.000447 +v 0.039603 0.010612 0.001527 +v 0.038116 0.010213 0.000000 +v 0.039167 0.010495 0.000447 +v 0.041000 0.000000 0.001527 +v 0.039460 0.000000 0.000000 +v 0.040549 0.000000 0.000447 +v 0.039603 -0.010612 0.001527 +v 0.038116 -0.010213 0.000000 +v 0.039167 -0.010495 0.000447 +v 0.035507 -0.020500 0.001527 +v 0.034174 -0.019730 0.000000 +v 0.035116 -0.020275 0.000447 +v 0.028991 -0.028991 0.001527 +v 0.027903 -0.027903 0.000000 +v 0.028672 -0.028672 0.000447 +v 0.020500 -0.035507 0.001527 +v 0.019730 -0.034174 0.000000 +v 0.020275 -0.035116 0.000447 +v 0.010612 -0.039603 0.001527 +v 0.010213 -0.038116 0.000000 +v 0.010495 -0.039167 0.000447 +v 0.000000 -0.041000 0.001527 +v 0.000000 -0.039460 0.000000 +v 0.000000 -0.040549 0.000447 +v -0.010612 -0.039603 0.001527 +v -0.010213 -0.038116 0.000000 +v -0.010495 -0.039167 0.000447 +v -0.020500 -0.035507 0.001527 +v -0.019730 -0.034174 0.000000 +v -0.020274 -0.035116 0.000447 +v -0.028991 -0.028991 0.001527 +v -0.027903 -0.027903 0.000000 +v -0.028672 -0.028672 0.000447 +v -0.035507 -0.020500 0.001527 +v -0.034174 -0.019730 0.000000 +v -0.035116 -0.020275 0.000447 +v -0.039603 -0.010612 0.001527 +v -0.038116 -0.010213 0.000000 +v -0.039167 -0.010495 0.000447 +v -0.041000 -0.000000 0.001527 +v -0.039460 -0.000000 0.000000 +v -0.040549 -0.000000 0.000447 +v -0.039603 0.010612 0.001527 +v -0.038116 0.010213 0.000000 +v -0.039167 0.010495 0.000447 +v -0.035507 0.020500 0.001527 +v -0.034174 0.019730 0.000000 +v -0.035116 0.020274 0.000447 +v -0.028991 0.028991 0.001527 +v -0.027903 0.027903 0.000000 +v -0.028673 0.028672 0.000447 +v -0.020500 0.035507 0.001527 +v -0.019730 0.034174 0.000000 +v -0.020275 0.035116 0.000447 +v -0.010612 0.039603 0.001527 +v -0.010213 0.038116 0.000000 +v -0.010495 0.039167 0.000447 +vn -0.2539 0.9477 -0.1935 +vn -0.2539 0.9477 0.1935 +vn 0.0000 0.9811 0.1935 +vn 0.0000 0.9811 -0.1935 +vn 0.0000 0.0000 -1.0000 +vn -0.1478 0.1478 -0.9779 +vn -0.1045 0.1810 -0.9779 +vn 0.2539 0.9477 0.1935 +vn 0.2539 0.9477 -0.1935 +vn 0.4905 0.8496 0.1935 +vn 0.4905 0.8496 -0.1935 +vn -0.2090 0.0000 -0.9779 +vn -0.2019 0.0541 -0.9779 +vn 0.6937 0.6937 0.1935 +vn 0.6937 0.6937 -0.1935 +vn -0.1478 -0.1478 -0.9779 +vn -0.1810 -0.1045 -0.9779 +vn 0.8496 0.4905 0.1935 +vn 0.8496 0.4905 -0.1935 +vn 0.9477 0.2539 0.1935 +vn 0.9477 0.2539 -0.1935 +vn 0.9811 0.0000 0.1935 +vn 0.9811 0.0000 -0.1935 +vn 0.9477 -0.2539 0.1935 +vn 0.9477 -0.2539 -0.1935 +vn 0.1810 0.1045 -0.9779 +vn 0.2019 0.0541 -0.9779 +vn 0.1810 -0.1045 -0.9779 +vn 0.1478 -0.1478 -0.9779 +vn 0.8496 -0.4905 0.1935 +vn 0.8496 -0.4905 -0.1935 +vn 0.0541 0.2019 -0.9779 +vn 0.1045 0.1810 -0.9779 +vn 0.6937 -0.6937 0.1935 +vn 0.6937 -0.6937 -0.1935 +vn -0.0541 0.2019 -0.9779 +vn 0.4905 -0.8496 0.1935 +vn 0.4905 -0.8496 -0.1935 +vn -0.1810 0.1045 -0.9779 +vn 0.0541 -0.2019 -0.9779 +vn 0.0000 -0.2090 -0.9779 +vn 0.2539 -0.9477 0.1935 +vn 0.2539 -0.9477 -0.1935 +vn -0.2019 -0.0541 -0.9779 +vn 0.0000 -0.9811 0.1935 +vn 0.0000 -0.9811 -0.1935 +vn -0.0541 -0.2019 -0.9779 +vn -0.1045 -0.1810 -0.9779 +vn -0.2539 -0.9477 0.1935 +vn -0.2539 -0.9477 -0.1935 +vn 0.1045 -0.1810 -0.9779 +vn -0.4905 -0.8496 0.1935 +vn -0.4905 -0.8496 -0.1935 +vn 0.2019 -0.0541 -0.9779 +vn -0.6937 -0.6937 0.1935 +vn -0.6937 -0.6937 -0.1935 +vn 0.2090 0.0000 -0.9779 +vn -0.8496 -0.4905 0.1935 +vn -0.8496 -0.4905 -0.1935 +vn -0.9477 -0.2539 0.1935 +vn -0.9477 -0.2539 -0.1935 +vn -0.9811 0.0000 0.1935 +vn -0.9811 0.0000 -0.1935 +vn -0.9477 0.2539 0.1935 +vn -0.9477 0.2539 -0.1935 +vn -0.8496 0.4905 0.1935 +vn -0.8496 0.4905 -0.1935 +vn -0.6937 0.6937 0.1935 +vn -0.6937 0.6937 -0.1935 +vn -0.4905 0.8496 0.1935 +vn -0.4905 0.8496 -0.1935 +vn 0.0000 0.2090 -0.9779 +vn 0.1478 0.1478 -0.9779 +vn 0.0000 0.7203 0.6937 +vn 0.1864 0.6957 0.6937 +vn 0.0000 0.2090 0.9779 +vn 0.0541 0.2019 0.9779 +vn 0.3601 0.6238 0.6937 +vn 0.1045 0.1810 0.9779 +vn 0.5093 0.5093 0.6937 +vn 0.1478 0.1478 0.9779 +vn 0.6238 0.3601 0.6937 +vn 0.1810 0.1045 0.9779 +vn 0.6957 0.1864 0.6937 +vn 0.2019 0.0541 0.9779 +vn 0.7203 0.0000 0.6937 +vn 0.2090 0.0000 0.9779 +vn 0.6957 -0.1864 0.6937 +vn 0.2019 -0.0541 0.9779 +vn 0.6238 -0.3601 0.6937 +vn 0.1810 -0.1045 0.9779 +vn 0.5093 -0.5093 0.6937 +vn 0.1478 -0.1478 0.9779 +vn 0.3601 -0.6238 0.6937 +vn 0.1045 -0.1810 0.9779 +vn 0.1864 -0.6957 0.6937 +vn 0.0541 -0.2019 0.9779 +vn 0.0000 -0.7203 0.6937 +vn 0.0000 -0.2090 0.9779 +vn -0.1864 -0.6957 0.6937 +vn -0.0541 -0.2019 0.9779 +vn -0.3601 -0.6238 0.6937 +vn -0.1045 -0.1810 0.9779 +vn -0.5093 -0.5093 0.6937 +vn -0.1478 -0.1478 0.9779 +vn -0.6238 -0.3601 0.6937 +vn -0.1810 -0.1045 0.9779 +vn -0.6957 -0.1864 0.6937 +vn -0.2019 -0.0541 0.9779 +vn -0.7203 0.0000 0.6937 +vn -0.2090 0.0000 0.9779 +vn -0.6957 0.1864 0.6937 +vn -0.2019 0.0541 0.9779 +vn -0.6238 0.3601 0.6937 +vn -0.1810 0.1045 0.9779 +vn -0.5093 0.5093 0.6937 +vn -0.1478 0.1478 0.9779 +vn -0.3601 0.6238 0.6937 +vn -0.1045 0.1810 0.9779 +vn -0.1864 0.6957 0.6937 +vn -0.0541 0.2019 0.9779 +vn 0.0000 0.0000 1.0000 +vn 0.1864 0.6957 -0.6937 +vn 0.0000 0.7203 -0.6937 +vn 0.3601 0.6238 -0.6937 +vn 0.5093 0.5093 -0.6937 +vn 0.6238 0.3601 -0.6937 +vn 0.6957 0.1864 -0.6937 +vn 0.7203 0.0000 -0.6937 +vn 0.6957 -0.1864 -0.6937 +vn 0.6238 -0.3601 -0.6937 +vn 0.5093 -0.5093 -0.6937 +vn 0.3601 -0.6238 -0.6937 +vn 0.1864 -0.6957 -0.6937 +vn 0.0000 -0.7203 -0.6937 +vn -0.1864 -0.6957 -0.6937 +vn -0.3601 -0.6238 -0.6937 +vn -0.5093 -0.5093 -0.6937 +vn -0.6238 -0.3601 -0.6937 +vn -0.6957 -0.1864 -0.6937 +vn -0.7203 0.0000 -0.6937 +vn -0.6957 0.1864 -0.6937 +vn -0.6238 0.3601 -0.6937 +vn -0.5093 0.5093 -0.6937 +vn -0.3601 0.6238 -0.6937 +vn -0.1864 0.6957 -0.6937 +s 1 +f 144//1 72//2 2//3 76//4 +f 1//5 139//6 142//7 +f 76//4 2//3 6//8 78//9 +f 78//9 6//8 9//10 81//11 +f 1//5 130//12 133//13 +f 81//11 9//10 12//14 84//15 +f 1//5 121//16 124//17 +f 84//15 12//14 15//18 87//19 +f 87//19 15//18 18//20 90//21 +f 90//21 18//20 21//22 93//23 +f 93//23 21//22 24//24 96//25 +f 1//5 88//26 91//27 +f 1//5 100//28 103//29 +f 96//25 24//24 27//30 99//31 +f 1//5 79//32 82//33 +f 99//31 27//30 30//34 102//35 +f 1//5 142//7 145//36 +f 102//35 30//34 33//37 105//38 +f 1//5 133//13 136//39 +f 1//5 109//40 112//41 +f 105//38 33//37 36//42 108//43 +f 1//5 124//17 127//44 +f 108//43 36//42 39//45 111//46 +f 1//5 115//47 118//48 +f 111//46 39//45 42//49 114//50 +f 1//5 106//51 109//40 +f 1//5 118//48 121//16 +f 114//50 42//49 45//52 117//53 +f 1//5 97//54 100//28 +f 117//53 45//52 48//55 120//56 +f 1//5 91//27 94//57 +f 120//56 48//55 51//58 123//59 +f 123//59 51//58 54//60 126//61 +f 126//61 54//60 57//62 129//63 +f 1//5 136//39 139//6 +f 129//63 57//62 60//64 132//65 +f 1//5 127//44 130//12 +f 132//65 60//64 63//66 135//67 +f 135//67 63//66 66//68 138//69 +f 1//5 112//41 115//47 +f 138//69 66//68 69//70 141//71 +f 1//5 103//29 106//51 +f 141//71 69//70 72//2 144//1 +f 1//5 94//57 97//54 +f 1//5 75//72 79//32 +f 1//5 85//73 88//26 +f 1//5 82//33 85//73 +f 6//8 2//3 4//74 7//75 +f 7//75 4//74 3//76 5//77 +f 9//10 6//8 7//75 10//78 +f 10//78 7//75 5//77 8//79 +f 12//14 9//10 10//78 13//80 +f 13//80 10//78 8//79 11//81 +f 15//18 12//14 13//80 16//82 +f 16//82 13//80 11//81 14//83 +f 18//20 15//18 16//82 19//84 +f 19//84 16//82 14//83 17//85 +f 21//22 18//20 19//84 22//86 +f 22//86 19//84 17//85 20//87 +f 24//24 21//22 22//86 25//88 +f 25//88 22//86 20//87 23//89 +f 27//30 24//24 25//88 28//90 +f 28//90 25//88 23//89 26//91 +f 30//34 27//30 28//90 31//92 +f 31//92 28//90 26//91 29//93 +f 33//37 30//34 31//92 34//94 +f 34//94 31//92 29//93 32//95 +f 36//42 33//37 34//94 37//96 +f 37//96 34//94 32//95 35//97 +f 39//45 36//42 37//96 40//98 +f 40//98 37//96 35//97 38//99 +f 42//49 39//45 40//98 43//100 +f 43//100 40//98 38//99 41//101 +f 45//52 42//49 43//100 46//102 +f 46//102 43//100 41//101 44//103 +f 48//55 45//52 46//102 49//104 +f 49//104 46//102 44//103 47//105 +f 51//58 48//55 49//104 52//106 +f 52//106 49//104 47//105 50//107 +f 54//60 51//58 52//106 55//108 +f 55//108 52//106 50//107 53//109 +f 57//62 54//60 55//108 58//110 +f 58//110 55//108 53//109 56//111 +f 60//64 57//62 58//110 61//112 +f 61//112 58//110 56//111 59//113 +f 63//66 60//64 61//112 64//114 +f 64//114 61//112 59//113 62//115 +f 66//68 63//66 64//114 67//116 +f 67//116 64//114 62//115 65//117 +f 69//70 66//68 67//116 70//118 +f 70//118 67//116 65//117 68//119 +f 72//2 69//70 70//118 73//120 +f 73//120 70//118 68//119 71//121 +f 2//3 72//2 73//120 4//74 +f 4//74 73//120 71//121 3//76 +f 20//87 17//85 74//122 +f 11//81 8//79 74//122 +f 3//76 71//121 74//122 +f 68//119 65//117 74//122 +f 59//113 56//111 74//122 +f 50//107 47//105 74//122 +f 41//101 38//99 74//122 +f 32//95 29//93 74//122 +f 23//89 20//87 74//122 +f 14//83 11//81 74//122 +f 5//77 3//76 74//122 +f 71//121 68//119 74//122 +f 62//115 59//113 74//122 +f 53//109 50//107 74//122 +f 44//103 41//101 74//122 +f 35//97 32//95 74//122 +f 26//91 23//89 74//122 +f 17//85 14//83 74//122 +f 8//79 5//77 74//122 +f 65//117 62//115 74//122 +f 56//111 53//109 74//122 +f 47//105 44//103 74//122 +f 38//99 35//97 74//122 +f 29//93 26//91 74//122 +f 76//4 78//9 80//123 77//124 +f 77//124 80//123 79//32 75//72 +f 78//9 81//11 83//125 80//123 +f 80//123 83//125 82//33 79//32 +f 81//11 84//15 86//126 83//125 +f 83//125 86//126 85//73 82//33 +f 84//15 87//19 89//127 86//126 +f 86//126 89//127 88//26 85//73 +f 87//19 90//21 92//128 89//127 +f 89//127 92//128 91//27 88//26 +f 90//21 93//23 95//129 92//128 +f 92//128 95//129 94//57 91//27 +f 93//23 96//25 98//130 95//129 +f 95//129 98//130 97//54 94//57 +f 96//25 99//31 101//131 98//130 +f 98//130 101//131 100//28 97//54 +f 99//31 102//35 104//132 101//131 +f 101//131 104//132 103//29 100//28 +f 102//35 105//38 107//133 104//132 +f 104//132 107//133 106//51 103//29 +f 105//38 108//43 110//134 107//133 +f 107//133 110//134 109//40 106//51 +f 108//43 111//46 113//135 110//134 +f 110//134 113//135 112//41 109//40 +f 111//46 114//50 116//136 113//135 +f 113//135 116//136 115//47 112//41 +f 114//50 117//53 119//137 116//136 +f 116//136 119//137 118//48 115//47 +f 117//53 120//56 122//138 119//137 +f 119//137 122//138 121//16 118//48 +f 120//56 123//59 125//139 122//138 +f 122//138 125//139 124//17 121//16 +f 123//59 126//61 128//140 125//139 +f 125//139 128//140 127//44 124//17 +f 126//61 129//63 131//141 128//140 +f 128//140 131//141 130//12 127//44 +f 129//63 132//65 134//142 131//141 +f 131//141 134//142 133//13 130//12 +f 132//65 135//67 137//143 134//142 +f 134//142 137//143 136//39 133//13 +f 135//67 138//69 140//144 137//143 +f 137//143 140//144 139//6 136//39 +f 138//69 141//71 143//145 140//144 +f 140//144 143//145 142//7 139//6 +f 141//71 144//1 146//146 143//145 +f 143//145 146//146 145//36 142//7 +f 144//1 76//4 77//124 146//146 +f 146//146 77//124 75//72 145//36 +f 1//5 145//36 75//72 +o handle_col.001_Cube.009 +v -0.003600 0.080633 0.059432 +v -0.005474 0.079067 0.059309 +v -0.005036 0.080199 0.059398 +v -0.005477 0.077925 0.066460 +v -0.003600 0.079455 0.066958 +v -0.005046 0.079026 0.066818 +v 0.005474 0.079067 0.059309 +v 0.003600 0.080633 0.059432 +v 0.005036 0.080199 0.059398 +v 0.003600 0.079455 0.066958 +v 0.005477 0.077925 0.066460 +v 0.005046 0.079026 0.066818 +v -0.003599 0.080629 0.050000 +v -0.005471 0.079081 0.050000 +v -0.005023 0.080207 0.050000 +v 0.005471 0.079081 0.050000 +v 0.003599 0.080629 0.050000 +v 0.005023 0.080207 0.050000 +v -0.005474 0.079067 0.040691 +v -0.003600 0.080633 0.040568 +v -0.005036 0.080199 0.040602 +v -0.003600 0.079455 0.033042 +v -0.005477 0.077925 0.033540 +v -0.005046 0.079026 0.033182 +v 0.003600 0.080633 0.040568 +v 0.005474 0.079067 0.040691 +v 0.005036 0.080199 0.040602 +v 0.005477 0.077925 0.033540 +v 0.003600 0.079455 0.033042 +v 0.005046 0.079026 0.033182 +v -0.005472 0.075182 0.050000 +v -0.003602 0.073666 0.050000 +v -0.005029 0.074082 0.050000 +v 0.003602 0.073666 0.050000 +v 0.005472 0.075177 0.050000 +v 0.005030 0.074081 0.050000 +v 0.005464 0.074276 0.065273 +v 0.003594 0.072835 0.064794 +v 0.004992 0.073209 0.064919 +v 0.003600 0.073692 0.058871 +v 0.005468 0.075191 0.059001 +v 0.005015 0.074095 0.058907 +v -0.005468 0.075196 0.059001 +v -0.003599 0.073692 0.058871 +v -0.005014 0.074096 0.058907 +v -0.003593 0.072835 0.064794 +v -0.005464 0.074281 0.065274 +v -0.004991 0.073210 0.064919 +v 0.003594 0.072835 0.035206 +v 0.005464 0.074276 0.034727 +v 0.004992 0.073209 0.035081 +v 0.005468 0.075191 0.040999 +v 0.003600 0.073692 0.041129 +v 0.005015 0.074095 0.041093 +v -0.003599 0.073692 0.041129 +v -0.005468 0.075196 0.040999 +v -0.005014 0.074096 0.041093 +v -0.005464 0.074281 0.034726 +v -0.003593 0.072835 0.035206 +v -0.004991 0.073210 0.035081 +v 0.000000 0.076121 0.065870 +v 0.000000 0.076121 0.034130 +vn -0.9826 0.1857 0.0000 +vn -0.9812 -0.1929 0.0000 +vn -0.9825 -0.1859 -0.0129 +vn -0.9815 0.1907 0.0146 +vn -0.9815 0.1907 -0.0146 +vn -0.9825 -0.1859 0.0129 +vn -0.7388 -0.0633 -0.6709 +vn -0.7237 -0.3338 -0.6040 +vn -0.1399 -0.9901 0.0000 +vn -0.1397 -0.9877 0.0698 +vn 0.1394 -0.9878 0.0698 +vn 0.1395 -0.9902 0.0000 +vn 0.1394 -0.9878 -0.0698 +vn 0.0944 -0.8650 0.4928 +vn -0.0946 -0.8650 0.4927 +vn -0.1397 -0.9877 -0.0698 +vn -0.0946 -0.8650 -0.4927 +vn 0.0944 -0.8650 -0.4928 +vn 0.9826 0.1857 0.0000 +vn 0.9811 -0.1932 0.0000 +vn 0.9824 -0.1862 0.0130 +vn 0.9815 0.1907 -0.0146 +vn -0.1448 0.9894 0.0000 +vn 0.1448 0.9894 0.0000 +vn 0.1456 0.9864 -0.0767 +vn -0.1456 0.9864 -0.0767 +vn 0.1159 0.5509 -0.8265 +vn -0.1159 0.5509 -0.8265 +vn 0.9815 0.1907 0.0146 +vn 0.9824 -0.1862 -0.0130 +vn -0.1456 0.9864 0.0767 +vn 0.1456 0.9864 0.0767 +vn -0.7237 -0.3338 0.6040 +vn -0.7388 -0.0633 0.6709 +vn 0.7388 -0.0632 0.6709 +vn 0.7237 -0.3340 0.6039 +vn -0.1159 0.5509 0.8265 +vn 0.1159 0.5509 0.8265 +vn 0.7237 -0.3340 -0.6039 +vn 0.7388 -0.0633 -0.6709 +vn 0.6697 0.7404 0.0575 +vn 0.5433 0.4040 0.7359 +vn -0.5433 0.4040 0.7359 +vn -0.6697 0.7404 0.0575 +vn -0.6767 0.7362 0.0000 +vn 0.6767 0.7362 0.0000 +vn 0.6697 0.7404 -0.0575 +vn 0.5433 0.4040 -0.7359 +vn -0.5433 0.4040 -0.7359 +vn -0.6697 0.7404 -0.0575 +vn 0.6762 -0.7349 -0.0517 +vn 0.5124 -0.7210 0.4665 +vn -0.5128 -0.7206 0.4666 +vn -0.6767 -0.7344 -0.0517 +vn -0.6685 -0.7437 0.0000 +vn 0.6680 -0.7442 0.0000 +vn 0.6762 -0.7349 0.0517 +vn 0.5124 -0.7210 -0.4665 +vn -0.5128 -0.7206 -0.4666 +vn -0.6767 -0.7344 0.0517 +vn 0.0000 -0.3106 0.9505 +vn 0.0000 -0.3106 -0.9505 +s 1 +f 160//147 177//148 189//149 148//150 +f 165//151 202//152 177//148 160//147 +f 169//153 204//154 202//152 165//151 +f 178//155 201//156 199//157 180//158 +f 186//159 184//160 192//161 190//162 +f 199//157 201//156 205//163 195//164 +f 178//155 180//158 186//159 190//162 +f 162//165 181//166 198//167 172//168 +f 159//169 163//170 171//171 166//172 +f 171//171 175//173 168//174 166//172 +f 153//175 187//176 181//166 162//165 +f 159//169 147//177 154//178 163//170 +f 148//150 189//149 193//179 150//180 +f 157//181 183//182 187//176 153//175 +f 154//178 147//177 151//183 156//184 +f 172//168 198//167 196//185 174//186 +f 157//181 153//175 155//187 158//188 +f 158//188 155//187 154//178 156//184 +f 148//150 150//180 152//189 149//190 +f 149//190 152//189 151//183 147//177 +f 147//177 159//169 161//191 149//190 +f 149//190 161//191 160//147 148//150 +f 163//170 154//178 155//187 164//192 +f 164//192 155//187 153//175 162//165 +f 175//173 171//171 173//193 176//194 +f 176//194 173//193 172//168 174//186 +f 166//172 168//174 170//195 167//196 +f 167//196 170//195 169//153 165//151 +f 165//151 160//147 161//191 167//196 +f 167//196 161//191 159//169 166//172 +f 162//165 172//168 173//193 164//192 +f 164//192 173//193 171//171 163//170 +f 184//160 186//159 188//197 185//198 +f 185//198 188//197 187//176 183//182 +f 190//162 192//161 194//199 191//200 +f 191//200 194//199 193//179 189//149 +f 189//149 177//148 179//201 191//200 +f 191//200 179//201 178//155 190//162 +f 181//166 187//176 188//197 182//202 +f 182//202 188//197 186//159 180//158 +f 196//185 198//167 200//203 197//204 +f 197//204 200//203 199//157 195//164 +f 202//152 204//154 206//205 203//206 +f 203//206 206//205 205//163 201//156 +f 201//156 178//155 179//201 203//206 +f 203//206 179//201 177//148 202//152 +f 180//158 199//157 200//203 182//202 +f 182//202 200//203 198//167 181//166 +f 184//160 185//198 207//207 +f 157//181 158//188 207//207 +f 150//180 193//179 207//207 +f 185//198 183//182 207//207 +f 192//161 184//160 207//207 +f 156//184 151//183 207//207 +f 158//188 156//184 207//207 +f 193//179 194//199 207//207 +f 151//183 152//189 207//207 +f 194//199 192//161 207//207 +f 183//182 157//181 207//207 +f 152//189 150//180 207//207 +f 174//186 196//185 208//208 +f 196//185 197//204 208//208 +f 175//173 176//194 208//208 +f 197//204 195//164 208//208 +f 176//194 174//186 208//208 +f 168//174 175//173 208//208 +f 195//164 205//163 208//208 +f 205//163 206//205 208//208 +f 169//153 170//195 208//208 +f 206//205 204//154 208//208 +f 204//154 169//153 208//208 +f 170//195 168//174 208//208 +o handle_col.002_Cube.008 +v -0.003600 0.079455 0.033042 +v -0.005477 0.077925 0.033540 +v -0.005046 0.079026 0.033182 +v -0.003600 0.076049 0.026358 +v -0.005477 0.074748 0.027303 +v -0.005046 0.075684 0.026623 +v -0.003600 0.070744 0.021053 +v -0.005477 0.069799 0.022354 +v -0.005046 0.070479 0.021418 +v -0.003600 0.064059 0.017647 +v -0.005477 0.063562 0.019177 +v -0.005046 0.063920 0.018076 +v 0.005477 0.063562 0.019177 +v 0.003600 0.064059 0.017647 +v 0.005046 0.063920 0.018076 +v 0.005477 0.069799 0.022354 +v 0.003600 0.070744 0.021053 +v 0.005046 0.070479 0.021418 +v 0.005477 0.074748 0.027303 +v 0.003600 0.076049 0.026358 +v 0.005046 0.075684 0.026623 +v 0.005477 0.077925 0.033540 +v 0.003600 0.079455 0.033042 +v 0.005046 0.079026 0.033182 +v 0.003594 0.072835 0.035206 +v 0.005464 0.074276 0.034727 +v 0.004992 0.073209 0.035081 +v -0.005464 0.074281 0.034726 +v -0.003593 0.072835 0.035206 +v -0.004991 0.073210 0.035081 +v 0.003594 0.070415 0.030451 +v 0.005464 0.071645 0.029558 +v 0.004994 0.070735 0.030219 +v -0.005464 0.071649 0.029555 +v -0.003593 0.070415 0.030451 +v -0.004993 0.070735 0.030218 +v 0.003594 0.066651 0.026687 +v 0.005464 0.067544 0.025457 +v 0.004994 0.066883 0.026367 +v -0.005464 0.067547 0.025453 +v -0.003593 0.066650 0.026687 +v -0.004993 0.066884 0.026366 +v 0.003594 0.061896 0.024267 +v 0.005464 0.062374 0.022825 +v 0.004992 0.062021 0.023893 +v -0.005464 0.062376 0.022821 +v -0.003593 0.061896 0.024267 +v -0.004991 0.062021 0.023892 +v 0.000000 0.076121 0.034130 +v 0.000000 0.062972 0.020980 +vn -0.9812 0.1562 -0.1134 +vn -0.9838 -0.1451 0.1054 +vn -0.7259 0.0844 0.6826 +vn -0.7394 0.3416 0.5801 +vn -0.9812 0.1134 -0.1562 +vn -0.9838 -0.1054 0.1451 +vn -0.7394 -0.5801 -0.3416 +vn -0.7259 -0.6826 -0.0844 +vn 0.0953 -0.4129 0.9057 +vn -0.0955 -0.4130 0.9057 +vn -0.1395 -0.8012 0.5819 +vn 0.1391 -0.8012 0.5819 +vn -0.1395 -0.5819 0.8012 +vn 0.1391 -0.5819 0.8012 +vn -0.0955 -0.9057 0.4130 +vn 0.0953 -0.9057 0.4129 +vn 0.9812 0.1135 -0.1562 +vn 0.9837 -0.1056 0.1454 +vn 0.7259 -0.6826 -0.0842 +vn 0.7394 -0.5801 -0.3416 +vn 0.1171 0.9313 0.3449 +vn 0.1485 0.8000 -0.5813 +vn -0.1485 0.8000 -0.5813 +vn -0.1171 0.9313 0.3449 +vn 0.1485 0.5813 -0.8000 +vn -0.1485 0.5813 -0.8000 +vn 0.7394 0.3416 0.5801 +vn 0.7259 0.0842 0.6826 +vn 0.9837 -0.1454 0.1056 +vn 0.9812 0.1562 -0.1135 +vn 0.1171 -0.3449 -0.9313 +vn -0.1171 -0.3449 -0.9313 +vn 0.5451 0.7577 0.3587 +vn 0.6664 0.6031 -0.4382 +vn -0.6664 0.6031 -0.4382 +vn -0.5451 0.7577 0.3587 +vn 0.6664 0.4382 -0.6031 +vn -0.6664 0.4382 -0.6031 +vn 0.5451 -0.3587 -0.7577 +vn -0.5451 -0.3587 -0.7577 +vn 0.5130 -0.3110 0.8000 +vn 0.6854 -0.5892 0.4279 +vn -0.6859 -0.5888 0.4276 +vn -0.5135 -0.3107 0.7998 +vn 0.6854 -0.4279 0.5892 +vn -0.6859 -0.4276 0.5888 +vn 0.5130 -0.8000 0.3110 +vn -0.5135 -0.7998 0.3107 +vn 0.0000 0.3106 0.9505 +vn 0.0000 -0.9505 -0.3106 +s 1 +f 213//209 242//210 236//211 210//212 +f 216//213 248//214 242//210 213//209 +f 219//215 254//216 248//214 216//213 +f 233//217 237//218 243//219 239//220 +f 239//220 243//219 249//221 245//222 +f 245//222 249//221 255//223 251//224 +f 224//225 246//226 252//227 221//228 +f 231//229 228//230 212//231 209//232 +f 228//230 225//233 215//234 212//231 +f 230//235 234//236 240//237 227//238 +f 225//233 222//239 218//240 215//234 +f 227//238 240//237 246//226 224//225 +f 228//230 231//229 232//241 229//242 +f 229//242 232//241 230//235 227//238 +f 209//232 212//231 214//243 211//244 +f 211//244 214//243 213//209 210//212 +f 225//233 228//230 229//242 226//245 +f 226//245 229//242 227//238 224//225 +f 212//231 215//234 217//246 214//243 +f 214//243 217//246 216//213 213//209 +f 222//239 225//233 226//245 223//247 +f 223//247 226//245 224//225 221//228 +f 215//234 218//240 220//248 217//246 +f 217//246 220//248 219//215 216//213 +f 240//237 234//236 235//249 241//250 +f 241//250 235//249 233//217 239//220 +f 236//211 242//210 244//251 238//252 +f 238//252 244//251 243//219 237//218 +f 246//226 240//237 241//250 247//253 +f 247//253 241//250 239//220 245//222 +f 242//210 248//214 250//254 244//251 +f 244//251 250//254 249//221 243//219 +f 252//227 246//226 247//253 253//255 +f 253//255 247//253 245//222 251//224 +f 248//214 254//216 256//256 250//254 +f 250//254 256//256 255//223 249//221 +f 211//244 210//212 257//257 +f 238//252 237//218 257//257 +f 235//249 234//236 257//257 +f 232//241 231//229 257//257 +f 231//229 209//232 257//257 +f 210//212 236//211 257//257 +f 230//235 232//241 257//257 +f 233//217 235//249 257//257 +f 237//218 233//217 257//257 +f 236//211 238//252 257//257 +f 209//232 211//244 257//257 +f 234//236 230//235 257//257 +f 218//240 222//239 258//258 +f 223//247 221//228 258//258 +f 253//255 251//224 258//258 +f 252//227 253//255 258//258 +f 222//239 223//247 258//258 +f 221//228 252//227 258//258 +f 251//224 255//223 258//258 +f 255//223 256//256 258//258 +f 219//215 220//248 258//258 +f 254//216 219//215 258//258 +f 256//256 254//216 258//258 +f 220//248 218//240 258//258 +o handle_col_Cube.007 +v -0.005477 0.077925 0.066460 +v -0.003600 0.079455 0.066958 +v -0.005046 0.079026 0.066818 +v -0.005477 0.074748 0.072697 +v -0.003600 0.076049 0.073642 +v -0.005046 0.075684 0.073377 +v -0.005477 0.069799 0.077646 +v -0.003600 0.070744 0.078947 +v -0.005046 0.070479 0.078582 +v -0.005477 0.063562 0.080823 +v -0.003600 0.064059 0.082353 +v -0.005046 0.063920 0.081924 +v 0.003600 0.064059 0.082353 +v 0.005477 0.063562 0.080823 +v 0.005046 0.063920 0.081924 +v 0.003600 0.070744 0.078947 +v 0.005477 0.069799 0.077646 +v 0.005046 0.070479 0.078582 +v 0.003600 0.076049 0.073642 +v 0.005477 0.074748 0.072697 +v 0.005046 0.075684 0.073377 +v 0.003600 0.079455 0.066958 +v 0.005477 0.077925 0.066460 +v 0.005046 0.079026 0.066818 +v 0.005464 0.074276 0.065273 +v 0.003594 0.072835 0.064794 +v 0.004992 0.073209 0.064919 +v -0.003593 0.072835 0.064794 +v -0.005464 0.074281 0.065274 +v -0.004991 0.073210 0.064919 +v 0.005464 0.071645 0.070442 +v 0.003594 0.070415 0.069549 +v 0.004994 0.070735 0.069781 +v -0.003593 0.070415 0.069549 +v -0.005464 0.071649 0.070445 +v -0.004993 0.070735 0.069782 +v 0.005464 0.067544 0.074543 +v 0.003594 0.066651 0.073313 +v 0.004994 0.066883 0.073633 +v -0.003593 0.066650 0.073313 +v -0.005464 0.067547 0.074547 +v -0.004993 0.066884 0.073634 +v 0.005464 0.062374 0.077175 +v 0.003594 0.061896 0.075733 +v 0.004992 0.062021 0.076107 +v -0.003593 0.061896 0.075733 +v -0.005464 0.062376 0.077179 +v -0.004991 0.062021 0.076108 +v 0.000000 0.062972 0.079020 +v 0.000000 0.076121 0.065870 +vn -0.7394 0.3416 -0.5801 +vn -0.7259 0.0844 -0.6826 +vn -0.9838 -0.1451 -0.1054 +vn -0.9812 0.1562 0.1134 +vn -0.9838 -0.1054 -0.1451 +vn -0.9812 0.1134 0.1562 +vn -0.7259 -0.6826 0.0844 +vn -0.7394 -0.5801 0.3416 +vn 0.0953 -0.4129 -0.9057 +vn 0.1391 -0.8012 -0.5819 +vn -0.1395 -0.8012 -0.5819 +vn -0.0955 -0.4130 -0.9057 +vn 0.1391 -0.5819 -0.8012 +vn -0.1395 -0.5819 -0.8012 +vn 0.0953 -0.9057 -0.4129 +vn -0.0955 -0.9057 -0.4130 +vn 0.9812 0.1562 0.1135 +vn 0.9837 -0.1454 -0.1056 +vn 0.7259 0.0842 -0.6826 +vn 0.7394 0.3416 -0.5801 +vn 0.1485 0.5813 0.8000 +vn -0.1485 0.5813 0.8000 +vn -0.1171 -0.3449 0.9313 +vn 0.1171 -0.3449 0.9313 +vn 0.9812 0.1135 0.1562 +vn 0.9837 -0.1056 -0.1454 +vn 0.1485 0.8000 0.5813 +vn -0.1485 0.8000 0.5813 +vn 0.7394 -0.5801 0.3416 +vn 0.7259 -0.6826 0.0842 +vn 0.1171 0.9313 -0.3449 +vn -0.1171 0.9313 -0.3449 +vn 0.5451 0.7577 -0.3587 +vn 0.6664 0.6031 0.4382 +vn -0.6664 0.6031 0.4382 +vn -0.5451 0.7577 -0.3587 +vn 0.6664 0.4382 0.6031 +vn -0.6664 0.4382 0.6031 +vn 0.5451 -0.3587 0.7577 +vn -0.5451 -0.3587 0.7577 +vn 0.5130 -0.3110 -0.8000 +vn 0.6854 -0.5892 -0.4279 +vn -0.6859 -0.5888 -0.4276 +vn -0.5135 -0.3107 -0.7998 +vn 0.6854 -0.4279 -0.5892 +vn -0.6859 -0.4276 -0.5888 +vn 0.5130 -0.8000 -0.3110 +vn -0.5135 -0.7998 -0.3107 +vn 0.0000 -0.9505 0.3106 +vn 0.0000 0.3106 -0.9505 +s 1 +f 259//259 287//260 293//261 262//262 +f 262//262 293//261 299//263 265//264 +f 265//264 299//263 305//265 268//266 +f 284//267 290//268 292//269 286//270 +f 290//268 296//271 298//272 292//269 +f 296//271 302//273 304//274 298//272 +f 278//275 289//276 283//277 281//278 +f 274//279 266//280 269//281 271//282 +f 275//283 295//284 289//276 278//275 +f 277//285 263//286 266//280 274//279 +f 272//287 301//288 295//284 275//283 +f 280//289 260//290 263//286 277//285 +f 278//275 281//278 282//291 279//292 +f 279//292 282//291 280//289 277//285 +f 259//259 262//262 264//293 261//294 +f 261//294 264//293 263//286 260//290 +f 275//283 278//275 279//292 276//295 +f 276//295 279//292 277//285 274//279 +f 262//262 265//264 267//296 264//293 +f 264//293 267//296 266//280 263//286 +f 272//287 275//283 276//295 273//297 +f 273//297 276//295 274//279 271//282 +f 265//264 268//266 270//298 267//296 +f 267//296 270//298 269//281 266//280 +f 290//268 284//267 285//299 291//300 +f 291//300 285//299 283//277 289//276 +f 286//270 292//269 294//301 288//302 +f 288//302 294//301 293//261 287//260 +f 296//271 290//268 291//300 297//303 +f 297//303 291//300 289//276 295//284 +f 292//269 298//272 300//304 294//301 +f 294//301 300//304 299//263 293//261 +f 302//273 296//271 297//303 303//305 +f 303//305 297//303 295//284 301//288 +f 298//272 304//274 306//306 300//304 +f 300//304 306//306 305//265 299//263 +f 301//288 272//287 307//307 +f 304//274 302//273 307//307 +f 305//265 306//306 307//307 +f 269//281 270//298 307//307 +f 268//266 305//265 307//307 +f 270//298 268//266 307//307 +f 306//306 304//274 307//307 +f 271//282 269//281 307//307 +f 303//305 301//288 307//307 +f 273//297 271//282 307//307 +f 272//287 273//297 307//307 +f 302//273 303//305 307//307 +f 284//267 286//270 308//308 +f 259//259 261//294 308//308 +f 286//270 288//302 308//308 +f 281//278 283//277 308//308 +f 288//302 287//260 308//308 +f 261//294 260//290 308//308 +f 282//291 281//278 308//308 +f 260//290 280//289 308//308 +f 285//299 284//267 308//308 +f 287//260 259//259 308//308 +f 283//277 285//299 308//308 +f 280//289 282//291 308//308 +o handle_col.004_Cube.006 +v -0.003627 0.038527 0.081890 +v -0.005507 0.038527 0.080294 +v -0.005059 0.038527 0.081441 +v 0.005507 0.038527 0.080294 +v 0.003627 0.038527 0.081890 +v 0.005059 0.038527 0.081441 +v -0.005474 0.056411 0.081965 +v -0.003600 0.056534 0.083531 +v -0.005036 0.056500 0.083097 +v -0.005477 0.063562 0.080823 +v -0.003600 0.064059 0.082353 +v -0.005046 0.063920 0.081924 +v 0.003600 0.056534 0.083531 +v 0.005474 0.056411 0.081965 +v 0.005036 0.056500 0.083097 +v 0.003600 0.064059 0.082353 +v 0.005477 0.063562 0.080823 +v 0.005046 0.063920 0.081924 +v 0.003628 0.038527 0.070184 +v 0.005471 0.038527 0.072262 +v 0.004983 0.038527 0.070850 +v -0.003627 0.038527 0.070184 +v -0.005471 0.038527 0.072267 +v -0.004983 0.038527 0.070852 +v 0.005464 0.062374 0.077175 +v 0.003594 0.061896 0.075733 +v 0.004992 0.062021 0.076107 +v -0.003593 0.061896 0.075733 +v -0.005464 0.062376 0.077179 +v -0.004991 0.062021 0.076108 +v 0.005468 0.056103 0.078090 +v 0.003600 0.055974 0.076590 +v 0.005015 0.056009 0.076993 +v -0.003599 0.055974 0.076590 +v -0.005468 0.056103 0.078095 +v -0.005014 0.056010 0.076994 +v -0.005477 0.045795 0.081957 +v -0.003603 0.045916 0.083535 +v -0.005045 0.045879 0.083093 +v 0.005477 0.045795 0.081957 +v 0.003603 0.045916 0.083535 +v 0.005045 0.045879 0.083093 +v -0.003608 0.045257 0.076495 +v -0.005460 0.045676 0.078027 +v -0.004995 0.045382 0.076898 +v 0.003609 0.045257 0.076495 +v 0.005460 0.045676 0.078022 +v 0.004996 0.045381 0.076897 +v 0.000000 0.062972 0.079020 +v 0.000000 0.038527 0.076154 +vn 0.7254 -0.6787 0.1145 +vn 0.7789 -0.5862 -0.2228 +vn 0.9869 0.0385 -0.1568 +vn 0.9807 -0.0226 0.1941 +vn -0.7388 0.6709 -0.0633 +vn -0.7237 0.6040 -0.3338 +vn -0.9822 -0.0130 -0.1871 +vn -0.9820 0.0147 0.1883 +vn 0.1468 0.0770 0.9861 +vn -0.1468 0.0770 0.9861 +vn -0.1455 -0.1062 0.9836 +vn 0.1455 -0.1062 0.9836 +vn 0.0944 0.4928 -0.8650 +vn 0.1393 -0.0667 -0.9880 +vn -0.1396 -0.0667 -0.9879 +vn -0.0946 0.4927 -0.8650 +vn 0.1446 0.3836 -0.9121 +vn -0.1450 0.3836 -0.9120 +vn 0.9820 0.0147 0.1884 +vn 0.9822 -0.0130 -0.1874 +vn 0.7237 0.6039 -0.3340 +vn 0.7388 0.6709 -0.0633 +vn -0.9807 -0.0226 0.1941 +vn -0.9869 0.0384 -0.1565 +vn -0.7789 -0.5864 -0.2225 +vn -0.7254 -0.6787 0.1145 +vn 0.1423 -0.3544 -0.9242 +vn -0.1427 -0.3542 -0.9242 +vn 0.1159 0.8265 0.5509 +vn -0.1159 0.8265 0.5509 +vn -0.1004 -0.7506 0.6530 +vn 0.1004 -0.7506 0.6530 +vn 0.5433 0.7359 0.4040 +vn 0.6718 0.0577 0.7385 +vn -0.6718 0.0577 0.7385 +vn -0.5433 0.7359 0.4040 +vn -0.6652 -0.0813 0.7422 +vn 0.5236 -0.6789 0.5146 +vn 0.6652 -0.0813 0.7422 +vn 0.5124 0.4665 -0.7209 +vn 0.6761 -0.0500 -0.7350 +vn -0.6767 -0.0500 -0.7345 +vn -0.5128 0.4666 -0.7206 +vn -0.6990 0.2732 -0.6608 +vn 0.5548 -0.3842 -0.7379 +vn 0.6985 0.2735 -0.6613 +vn -0.5236 -0.6789 0.5146 +vn -0.5553 -0.3845 -0.7374 +vn 0.0000 0.9505 -0.3106 +vn 0.0000 -1.0000 0.0000 +s 1 +f 312//309 328//310 355//311 348//312 +f 318//313 337//314 343//315 315//316 +f 321//317 316//318 346//319 349//320 +f 334//321 340//322 342//323 336//324 +f 340//322 354//325 351//326 342//323 +f 322//327 339//328 333//329 325//330 +f 345//331 352//332 331//333 310//334 +f 354//325 327//335 330//336 351//326 +f 348//312 355//311 339//328 322//327 +f 324//337 319//338 316//318 321//317 +f 349//320 346//319 309//339 313//340 +f 315//316 343//315 352//332 345//331 +f 322//327 325//330 326//341 323//342 +f 323//342 326//341 324//337 321//317 +f 318//313 315//316 317//343 320//344 +f 320//344 317//343 316//318 319//338 +f 346//319 316//318 317//343 347//345 +f 347//345 317//343 315//316 345//331 +f 349//320 313//340 314//346 350//347 +f 350//347 314//346 312//309 348//312 +f 340//322 334//321 335//348 341//349 +f 341//349 335//348 333//329 339//328 +f 336//324 342//323 344//350 338//351 +f 338//351 344//350 343//315 337//314 +f 352//332 343//315 344//350 353//352 +f 353//352 344//350 342//323 351//326 +f 355//311 328//310 329//353 356//354 +f 356//354 329//353 327//335 354//325 +f 309//339 346//319 347//345 311//355 +f 311//355 347//345 345//331 310//334 +f 321//317 349//320 350//347 323//342 +f 323//342 350//347 348//312 322//327 +f 331//333 352//332 353//352 332//356 +f 332//356 353//352 351//326 330//336 +f 339//328 355//311 356//354 341//349 +f 341//349 356//354 354//325 340//322 +f 325//330 333//329 357//357 +f 320//344 319//338 357//357 +f 336//324 338//351 357//357 +f 319//338 324//337 357//357 +f 326//341 325//330 357//357 +f 338//351 337//314 357//357 +f 324//337 326//341 357//357 +f 335//348 334//321 357//357 +f 337//314 318//313 357//357 +f 334//321 336//324 357//357 +f 318//313 320//344 357//357 +f 333//329 335//348 357//357 +f 314//346 313//340 358//358 +f 309//339 311//355 358//358 +f 328//310 312//309 358//358 +f 331//333 332//356 358//358 +f 327//335 329//353 358//358 +f 311//355 310//334 358//358 +f 310//334 331//333 358//358 +f 313//340 309//339 358//358 +f 329//353 328//310 358//358 +f 312//309 314//346 358//358 +f 330//336 327//335 358//358 +f 332//356 330//336 358//358 +o handle_col.003_Cube.005 +v -0.003631 0.038527 0.018578 +v -0.005510 0.038527 0.020185 +v -0.005068 0.038527 0.019031 +v 0.003631 0.038527 0.018578 +v 0.005510 0.038527 0.020185 +v 0.005068 0.038527 0.019031 +v -0.003600 0.056534 0.016469 +v -0.005474 0.056411 0.018035 +v -0.005036 0.056500 0.016903 +v -0.003600 0.064059 0.017647 +v -0.005477 0.063562 0.019177 +v -0.005046 0.063920 0.018076 +v 0.005474 0.056411 0.018035 +v 0.003600 0.056534 0.016469 +v 0.005036 0.056500 0.016903 +v 0.005477 0.063562 0.019177 +v 0.003600 0.064059 0.017647 +v 0.005046 0.063920 0.018076 +v 0.005472 0.038527 0.027531 +v 0.003627 0.038527 0.029560 +v 0.004985 0.038527 0.028916 +v -0.003626 0.038527 0.029560 +v -0.005472 0.038527 0.027526 +v -0.004984 0.038527 0.028915 +v 0.003594 0.061896 0.024267 +v 0.005464 0.062374 0.022825 +v 0.004992 0.062021 0.023893 +v -0.005464 0.062376 0.022821 +v -0.003593 0.061896 0.024267 +v -0.004991 0.062021 0.023892 +v 0.003600 0.055974 0.023410 +v 0.005468 0.056103 0.021910 +v 0.005015 0.056009 0.023007 +v -0.005468 0.056103 0.021905 +v -0.003599 0.055974 0.023410 +v -0.005014 0.056010 0.023006 +v -0.003604 0.045959 0.016460 +v -0.005478 0.045808 0.018049 +v -0.005052 0.045914 0.016909 +v 0.003604 0.045959 0.016460 +v 0.005478 0.045808 0.018049 +v 0.005052 0.045914 0.016909 +v -0.005460 0.045677 0.021971 +v -0.003608 0.045270 0.023501 +v -0.004995 0.045392 0.023098 +v 0.005460 0.045677 0.021977 +v 0.003608 0.045270 0.023501 +v 0.004996 0.045392 0.023099 +v 0.000000 0.062972 0.020980 +v 0.000000 0.038527 0.023966 +vn 0.9802 -0.0302 -0.1954 +vn 0.9866 0.0386 0.1584 +vn 0.7770 -0.5891 0.2217 +vn 0.7235 -0.6819 -0.1074 +vn 0.1472 0.0772 -0.9861 +vn 0.1452 -0.1337 -0.9803 +vn -0.1452 -0.1337 -0.9803 +vn -0.1472 0.0772 -0.9861 +vn 0.0944 0.4928 0.8650 +vn -0.0946 0.4927 0.8650 +vn -0.1396 -0.0670 0.9879 +vn 0.1392 -0.0670 0.9880 +vn -0.1444 0.3729 0.9165 +vn 0.1440 0.3729 0.9166 +vn -0.7235 -0.6819 -0.1074 +vn -0.7770 -0.5892 0.2214 +vn -0.9867 0.0385 0.1581 +vn -0.9802 -0.0302 -0.1954 +vn 0.9821 0.0148 -0.1877 +vn 0.9821 -0.0130 0.1876 +vn 0.1159 0.8265 -0.5509 +vn -0.1159 0.8265 -0.5509 +vn -0.9821 0.0148 -0.1877 +vn -0.9822 -0.0130 0.1873 +vn -0.7237 0.6040 0.3338 +vn -0.7388 0.6709 0.0633 +vn 0.7388 0.6709 0.0632 +vn 0.7237 0.6039 0.3340 +vn -0.1404 -0.3648 0.9204 +vn 0.1400 -0.3650 0.9204 +vn 0.0978 -0.7696 -0.6309 +vn -0.0978 -0.7696 -0.6309 +vn 0.5433 0.7359 -0.4040 +vn 0.6724 0.0579 -0.7378 +vn -0.6724 0.0579 -0.7378 +vn -0.5433 0.7359 -0.4040 +vn -0.6623 -0.1034 -0.7421 +vn 0.5222 -0.6927 -0.4974 +vn 0.6623 -0.1034 -0.7421 +vn 0.5124 0.4665 0.7209 +vn 0.6760 -0.0501 0.7352 +vn -0.6765 -0.0501 0.7347 +vn -0.5128 0.4666 0.7206 +vn -0.6982 0.2655 0.6648 +vn 0.5524 -0.3917 0.7357 +vn 0.6977 0.2658 0.6653 +vn -0.5222 -0.6927 -0.4974 +vn -0.5529 -0.3920 0.7352 +vn 0.0000 0.9505 0.3106 +vn 0.0000 -1.0000 0.0000 +s 1 +f 399//359 404//360 377//361 363//362 +f 372//363 398//364 395//365 365//366 +f 383//367 387//368 393//369 389//370 +f 389//370 393//369 402//371 405//372 +f 360//373 381//374 401//375 396//376 +f 371//377 390//378 404//360 399//359 +f 375//379 372//363 365//366 368//380 +f 366//381 392//382 386//383 369//384 +f 374//385 384//386 390//378 371//377 +f 405//372 402//371 380//387 378//388 +f 398//364 362//389 359//390 395//365 +f 396//376 401//375 392//382 366//381 +f 372//363 375//379 376//391 373//392 +f 373//392 376//391 374//385 371//377 +f 368//380 365//366 367//393 370//394 +f 370//394 367//393 366//381 369//384 +f 396//376 366//381 367//393 397//395 +f 397//395 367//393 365//366 395//365 +f 399//359 363//362 364//396 400//397 +f 400//397 364//396 362//389 398//364 +f 390//378 384//386 385//398 391//399 +f 391//399 385//398 383//367 389//370 +f 386//383 392//382 394//400 388//401 +f 388//401 394//400 393//369 387//368 +f 402//371 393//369 394//400 403//402 +f 403//402 394//400 392//382 401//375 +f 405//372 378//388 379//403 406//404 +f 406//404 379//403 377//361 404//360 +f 360//373 396//376 397//395 361//405 +f 361//405 397//395 395//365 359//390 +f 371//377 399//359 400//397 373//392 +f 373//392 400//397 398//364 372//363 +f 380//387 402//371 403//402 382//406 +f 382//406 403//402 401//375 381//374 +f 389//370 405//372 406//404 391//399 +f 391//399 406//404 404//360 390//378 +f 388//401 387//368 407//407 +f 374//385 376//391 407//407 +f 385//398 384//386 407//407 +f 387//368 383//367 407//407 +f 384//386 374//385 407//407 +f 368//380 370//394 407//407 +f 383//367 385//398 407//407 +f 369//384 386//383 407//407 +f 370//394 369//384 407//407 +f 386//383 388//401 407//407 +f 375//379 368//380 407//407 +f 376//391 375//379 407//407 +f 364//396 363//362 408//408 +f 361//405 359//390 408//408 +f 381//374 360//373 408//408 +f 382//406 381//374 408//408 +f 377//361 379//403 408//408 +f 360//373 361//405 408//408 +f 363//362 377//361 408//408 +f 359//390 362//389 408//408 +f 379//403 378//388 408//408 +f 362//389 364//396 408//408 +f 378//388 380//387 408//408 +f 380//387 382//406 408//408 diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/__init__.py b/examples/pybullet/gym/pybullet_envs/minitaur/__init__.py index 8b1378917..e69de29bb 100644 --- a/examples/pybullet/gym/pybullet_envs/minitaur/__init__.py +++ b/examples/pybullet/gym/pybullet_envs/minitaur/__init__.py @@ -1 +0,0 @@ - diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/agents/__init__.py b/examples/pybullet/gym/pybullet_envs/minitaur/agents/__init__.py index 8b1378917..e69de29bb 100644 --- a/examples/pybullet/gym/pybullet_envs/minitaur/agents/__init__.py +++ b/examples/pybullet/gym/pybullet_envs/minitaur/agents/__init__.py @@ -1 +0,0 @@ - diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/__init__.py b/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/com_height_estimator.py b/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/com_height_estimator.py new file mode 100644 index 000000000..3838c74aa --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/com_height_estimator.py @@ -0,0 +1,76 @@ +"""State estimator for robot height.""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import copy +from typing import Any, Sequence + +import gin + +from pybullet_envs.minitaur.agents.baseline_controller import state_estimator + + +@gin.configurable +class COMHeightEstimator(state_estimator.StateEstimatorBase): + """Estimate the CoM height using base orientation and local toe positions.""" + + def __init__( + self, + robot: Any, + com_estimate_leg_indices: Sequence[int] = (0, 1, 2, 3), + initial_com_height: float = 0.45, + ): + """Initializes the class. + + Args: + robot: A quadruped robot. + com_estimate_leg_indices: Leg indices used in estimating the CoM height. + initial_com_height: CoM height used during reset. + """ + self._robot = robot + self._com_estimate_leg_indices = com_estimate_leg_indices + self._initial_com_estimate_leg_indices = copy.copy(com_estimate_leg_indices) + self._initial_com_height = initial_com_height + self.reset(0) + + @property + def estimated_com_height(self): + return self._com_height + + def reset(self, current_time): + del current_time + self._com_height = self._initial_com_height + self._com_estimate_leg_indices = copy.copy( + self._initial_com_estimate_leg_indices) + + def update(self, current_time): + del current_time + local_toe_poses = self._robot.foot_positions( + position_in_world_frame=False) + # We rotate the local toe positions into the world orientation centered + # at the robot base to estimate the height of the robot. + world_toe_poses = [] + for toe_p in local_toe_poses: + world_toe_poses.append( + self._robot.pybullet_client.multiplyTransforms( + positionA=(0, 0, 0), + orientationA=self._robot.base_orientation_quaternion, + positionB=toe_p, + orientationB=(0, 0, 0, 1))[0]) + mean_height = 0.0 + num_toe_in_contact = 0 + for leg_id in self._com_estimate_leg_indices: + mean_height += world_toe_poses[leg_id][2] + num_toe_in_contact += 1 + mean_height /= num_toe_in_contact + self._com_height = abs(mean_height) + + @property + def com_estimate_leg_indices(self): + return self._com_estimate_leg_indices + + @com_estimate_leg_indices.setter + def com_estimate_leg_indices(self, leg_indices): + self._com_estimate_leg_indices = leg_indices diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/com_velocity_estimator.py b/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/com_velocity_estimator.py new file mode 100644 index 000000000..609f83271 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/com_velocity_estimator.py @@ -0,0 +1,83 @@ +"""State estimator.""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +from typing import Any, Sequence + +import gin +import numpy as np + +from pybullet_envs.minitaur.agents.baseline_controller import state_estimator +from pybullet_envs.minitaur.robots.safety.python import moving_window_filter + +_DEFAULT_WINDOW_SIZE = 20 + + +@gin.configurable +class COMVelocityEstimator(state_estimator.StateEstimatorBase): + """Estimate the CoM velocity using on board sensors. + + + Requires knowledge about the base velocity in world frame, which for example + can be obtained from a MoCap system. This estimator will filter out the high + frequency noises in the velocity so the results can be used with controllers + reliably. + + """ + + def __init__( + self, + robot: Any, + window_size: int = _DEFAULT_WINDOW_SIZE, + ): + self._robot = robot + self._window_size = window_size + self.reset(0) + + @property + def com_velocity_body_yaw_aligned_frame(self) -> Sequence[float]: + """The base velocity projected in the body aligned inertial frame. + + The body aligned frame is a intertia frame that coincides with the body + frame, but has a zero relative velocity/angular velocity to the world frame. + + Returns: + The com velocity in body aligned frame. + """ + return self._com_velocity_body_yaw_aligned_frame + + @property + def com_velocity_world_frame(self) -> Sequence[float]: + return self._com_velocity_world_frame + + def reset(self, current_time): + del current_time + # We use a moving window filter to reduce the noise in velocity estimation. + self._velocity_filter_x = moving_window_filter.MovingWindowFilter( + window_size=self._window_size) + self._velocity_filter_y = moving_window_filter.MovingWindowFilter( + window_size=self._window_size) + self._velocity_filter_z = moving_window_filter.MovingWindowFilter( + window_size=self._window_size) + self._com_velocity_world_frame = np.array((0, 0, 0)) + self._com_velocity_body_yaw_aligned_frame = np.array((0, 0, 0)) + + def update(self, current_time): + del current_time + velocity = self._robot.base_velocity + + vx = self._velocity_filter_x.CalculateAverage(velocity[0]) + vy = self._velocity_filter_y.CalculateAverage(velocity[1]) + vz = self._velocity_filter_z.CalculateAverage(velocity[2]) + self._com_velocity_world_frame = np.array((vx, vy, vz)) + + base_orientation = self._robot.base_orientation_quaternion + _, inverse_rotation = self._robot.pybullet_client.invertTransform( + (0, 0, 0), base_orientation) + + self._com_velocity_body_yaw_aligned_frame, _ = ( + self._robot.pybullet_client.multiplyTransforms( + (0, 0, 0), inverse_rotation, self._com_velocity_world_frame, + (0, 0, 0, 1))) diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/dummy_gait_generator.py b/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/dummy_gait_generator.py new file mode 100644 index 000000000..51747904f --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/dummy_gait_generator.py @@ -0,0 +1,87 @@ +"""A dummy gait generator module for storing gait patterns from higher-level controller.""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import google_type_annotations +from __future__ import print_function + +import copy +from typing import Any, Sequence + +import gin + +from pybullet_envs.minitaur.agents.baseline_controller import gait_generator + +LAIKAGO_STANDING = ( + gait_generator.LegState.STANCE, + gait_generator.LegState.STANCE, + gait_generator.LegState.STANCE, + gait_generator.LegState.STANCE, +) + + +@gin.configurable +class DummyGaitGenerator(gait_generator.GaitGenerator): + """A module for storing quadruped gait patterns from high-level controller. + + This module stores the state for each leg of a quadruped robot. The data is + used by the stance leg controller to determine the appropriate contact forces. + A high-level controller, such as a neural network policy, can be used to + control the gait pattern and set corresponding leg states. + """ + + def __init__( + self, + robot: Any, + initial_leg_state: Sequence[gait_generator.LegState] = LAIKAGO_STANDING, + ): + """Initializes the class. + + Args: + robot: A quadruped robot. + initial_leg_state: The desired initial swing/stance state of legs indexed + by their id. + """ + self._robot = robot + if len(initial_leg_state) != len( + list(self._robot.urdf_loader.get_end_effector_id_dict().values())): + raise ValueError( + "The number of leg states should be the same of number of legs.") + self._initial_leg_state = initial_leg_state + self._leg_state = list(initial_leg_state) + self._desired_leg_state = list(initial_leg_state) + + self.reset(0) + + def reset(self, current_time): + del current_time + self._leg_state = list(self._initial_leg_state) + self._desired_leg_state = list(self._initial_leg_state) + + @property + def desired_leg_state(self) -> Sequence[gait_generator.LegState]: + """The desired leg SWING/STANCE states. + + Returns: + The SWING/STANCE states for all legs. + + """ + return self._desired_leg_state + + @desired_leg_state.setter + def desired_leg_state(self, state): + self._desired_leg_state = copy.deepcopy(state) + + @property + def leg_state(self) -> Sequence[gait_generator.LegState]: + """The leg state after considering contact with ground. + + Returns: + The actual state of each leg after accounting for contacts. + """ + return self._leg_state + + @leg_state.setter + def leg_state(self, state): + self._leg_state = copy.deepcopy(state) + diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/foot_stepper.py b/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/foot_stepper.py new file mode 100644 index 000000000..8a79a236f --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/foot_stepper.py @@ -0,0 +1,199 @@ +# Lint as: python3 +"""A state machine that steps each foot for a static gait. Experimental code.""" + +import copy +import math + +import numpy as np + + +class StepInput(object): + + def __init__(self): + self.base_com_pos = np.array([0, 0, 0]) + self.base_com_orn = np.array([0, 0, 0, 1]) + self.toe_pos_world = np.array([0, 0, 0] * 4) + self.new_pos_world = np.array([0, 0, 0]) + + +class StepOutput(object): + + def __init__(self, new_toe_pos_world): + self.new_toe_pos_world = new_toe_pos_world + + +class FootStepper(object): + """This class computes desired foot placement for a quadruped robot.""" + + def __init__(self, bullet_client, toe_ids, toe_pos_local_ref): + self.bullet_client = bullet_client + self.state_time = 0. + self.toe_ids = toe_ids + self.toe_pos_local_ref = toe_pos_local_ref + self.sphere_uid = self.bullet_client.loadURDF( + "sphere_small.urdf", [0, 0, 0], useFixedBase=True) + self.is_far = True + self.max_shift = 0.0008 + self.far_bound = 0.005 + self.close_bound = 0.03 + + self.move_swing_foot = False + self.amp = 0.2 + alpha = 1 + + # Loads/draws spheres for debugging purpose. The spheres visualize the + # target COM, the current COM and the target foothold location. + self.sphere_uid_centroid = self.bullet_client.loadURDF( + "sphere_small.urdf", [0, 0, 0], useFixedBase=True) + self.bullet_client.changeVisualShape( + self.sphere_uid_centroid, -1, rgbaColor=[1, 1, 0, alpha]) + + # Disable collision since visualization spheres should not collide with the + # robot. + self.bullet_client.setCollisionFilterGroupMask(self.sphere_uid_centroid, -1, + 0, 0) + + self.sphere_uid_com = self.bullet_client.loadURDF( + "sphere_small.urdf", [0, 0, 0], useFixedBase=True) + self.bullet_client.changeVisualShape( + self.sphere_uid_com, -1, rgbaColor=[1, 0, 1, alpha]) + self.bullet_client.setCollisionFilterGroupMask(self.sphere_uid_com, -1, 0, + 0) + + self.bullet_client.setCollisionFilterGroupMask(self.sphere_uid, -1, 0, 0) + self.feetindices = [1, 3, 0, 2] + self.swing_foot_index1 = 0 + self.swing_foot_index = self.feetindices[self.swing_foot_index1] + self.colors = [[1, 0, 0, 1], [0, 1, 0, 1], [0, 0, 1, 1], [1, 1, 1, 1]] + self.support_vertices = [[1, 2, 3], [0, 2, 3], [0, 1, 3], [0, 1, 2]] + self.local_diff_y_threshold = 0.05 + self.local_diff_y = 100 + self.is_far = True + self.get_reference_pos_swing_foot() + + def next_foot(self): + self.swing_foot_index1 = (self.swing_foot_index1 + 1) % 4 + self.swing_foot_index = self.feetindices[self.swing_foot_index1] + + def swing_foot(self): + self.move_swing_foot = True + + def get_reference_pos_swing_foot(self): + self.new_pos_local = np.array( + self.toe_pos_local_ref[self.swing_foot_index]) + return self.new_pos_local + + def set_reference_pos_swing_foot(self, new_pos_local): + self.new_pos_local = new_pos_local + + def is_com_stable(self): + ld2 = self.local_diff_y * self.local_diff_y + yaw_ok = ld2 < (self.local_diff_y_threshold * self.local_diff_y_threshold) + com_ok = not self.is_far + return com_ok and yaw_ok + + def update(self, step_input): + """Updates the state machine and toe movements per state.""" + base_com_pos = step_input.base_com_pos + base_com_orn = step_input.base_com_orn + base_com_pos_inv, base_com_orn_inv = self.bullet_client.invertTransform( + base_com_pos, base_com_orn) + + dt = step_input.dt + self.bullet_client.resetBasePositionAndOrientation(self.sphere_uid, + step_input.new_pos_world, + [0, 0, 0, 1]) + self.bullet_client.changeVisualShape( + self.sphere_uid, -1, rgbaColor=self.colors[self.swing_foot_index]) + + all_toes_pos_locals = [] + for toe_pos_world in step_input.toe_pos_world: + toe_pos_local, _ = self.bullet_client.multiplyTransforms( + base_com_pos_inv, base_com_orn_inv, toe_pos_world, [0, 0, 0, 1]) + all_toes_pos_locals.append(toe_pos_local) + all_toes_pos_locals = np.array(all_toes_pos_locals) + centroid_world = np.zeros(3) + for v in self.support_vertices[self.swing_foot_index]: + vtx_pos_world = step_input.toe_pos_world[v] + centroid_world += vtx_pos_world + centroid_world /= 3. + + sphere_z_offset = 0.05 + self.diff_world = base_com_pos - centroid_world + self.diff_world[2] = 0. + self.bullet_client.resetBasePositionAndOrientation(self.sphere_uid_centroid, + centroid_world, + [0, 0, 0, 1]) + self.bullet_client.resetBasePositionAndOrientation( + self.sphere_uid_com, + [base_com_pos[0], base_com_pos[1], sphere_z_offset], [0, 0, 0, 1]) + + l = np.linalg.norm(self.diff_world) + if self.is_far: + bound = self.far_bound + else: + bound = self.close_bound + + if l > bound: + self.diff_world *= self.max_shift * 0.5 / l + if not self.is_far: + self.is_far = True + else: + if self.is_far: + self.is_far = False + + if not self.is_far: + self.diff_world = np.zeros(3) + for i in range(len(self.toe_pos_local_ref)): + toe = self.toe_pos_local_ref[i] + toe = [ + toe[0] + self.diff_world[0], toe[1] + self.diff_world[1], + toe[2] + self.diff_world[2] + ] + self.toe_pos_local_ref[i] = toe + + self.local_diff_y = self.toe_pos_local_ref[0][ + 1] + self.toe_pos_local_ref[1][1] - self.toe_pos_local_ref[ + 2][1] - self.toe_pos_local_ref[3][1] + + self.yaw = 0 + if self.local_diff_y < -self.local_diff_y_threshold: + self.yaw = 0.001 + if self.local_diff_y > self.local_diff_y_threshold: + self.yaw = -0.001 + + yaw_trans = self.bullet_client.getQuaternionFromEuler([0, 0, self.yaw]) + + if not self.is_far: + for i in range(len(self.toe_pos_local_ref)): + toe = self.toe_pos_local_ref[i] + toe, _ = self.bullet_client.multiplyTransforms([0, 0, 0], yaw_trans, + toe, [0, 0, 0, 1]) + self.toe_pos_local_ref[i] = toe + + new_toe_pos_world = [] + + # Moves the swing foot to the target location. + if self.move_swing_foot: + if self.state_time <= 1: + self.state_time += 4 * dt + if self.state_time >= 1: + self.move_swing_foot = False + self.state_time = 0 + self.toe_pos_local_ref[self.swing_foot_index] = self.new_pos_local + toe_pos_local_ref_copy = copy.deepcopy(self.toe_pos_local_ref) + old_pos = self.toe_pos_local_ref[self.swing_foot_index] + new_pos = [ + old_pos[0] * (1 - self.state_time) + self.new_pos_local[0] * + (self.state_time), old_pos[1] * (1 - self.state_time) + + self.new_pos_local[1] * (self.state_time), + old_pos[2] * (1 - self.state_time) + self.new_pos_local[2] * + (self.state_time) + self.amp * math.sin(self.state_time * math.pi) + ] + toe_pos_local_ref_copy[self.swing_foot_index] = new_pos + for toe_pos_local in toe_pos_local_ref_copy: + new_toe_pos_world.append(self.bullet_client.multiplyTransforms( + base_com_pos, base_com_orn, toe_pos_local, [0, 0, 0, 1])[0]) + + step_output = StepOutput(new_toe_pos_world) + return step_output diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/gait_generator.py b/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/gait_generator.py new file mode 100644 index 000000000..61bd849ac --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/gait_generator.py @@ -0,0 +1,32 @@ +"""Gait pattern planning module.""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import abc +import enum + + +class LegState(enum.Enum): + """The state of a leg during locomotion.""" + SWING = 0 + STANCE = 1 + # A swing leg that collides with the ground. + EARLY_CONTACT = 2 + # A stance leg that loses contact. + LOSE_CONTACT = 3 + + +class GaitGenerator(object): # pytype: disable=ignored-metaclass + """Generates the leg swing/stance pattern for the robot.""" + + __metaclass__ = abc.ABCMeta + + @abc.abstractmethod + def reset(self, current_time): + pass + + @abc.abstractmethod + def update(self, current_time): + pass diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/imu_based_com_velocity_estimator.py b/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/imu_based_com_velocity_estimator.py new file mode 100644 index 000000000..4caea0906 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/imu_based_com_velocity_estimator.py @@ -0,0 +1,216 @@ +"""State estimator.""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +from typing import Any, Sequence + +from filterpy import kalman +import gin +import numpy as np + +from pybullet_envs.minitaur.agents.baseline_controller import state_estimator +from pybullet_envs.minitaur.agents.baseline_controller import time_based_moving_window_filter +from pybullet_envs.minitaur.envs_v2.sensors import accelerometer_sensor +from pybullet_envs.minitaur.envs_v2.sensors import imu_sensor + +_DEFAULT_VELOCITY_FILTER_WINDOW = 0.2 +_DEFAULT_GYRO_FILTER_WINDOW = 0.1 +_DEFAULT_VELOCITY_CLIPPING = 0.8 +_STATE_DIMENSION = 3 +_GRAVITY = (0.0, 0.0, -9.8) + + +@gin.configurable +class IMUBasedCOMVelocityEstimator(state_estimator.StateEstimatorBase): + """Estimate the CoM velocity using IMU sensors and velocities of stance feet. + + + Estimates the com velocity of the robot using IMU data and stance feet + velocities fused by a Kalman Filter. Kalman Filter assumes the true state x + follows a linear dynamics: x'=Fx+Bu+w, where x' and x denots the + current and previous state of the robot, F is the state transition matrix, + B is the control-input matrix, and w is the noise in the dynamics, assuming to + follow a zero-mean multivariate normal distribution with covariance Q. It also + assumes that we can obtain a noisy observation of the state with the model + z=Hx+v, where z is the observed state, H is the observation matrix, and v is + a noise model, assuming to follow a zero-mean multivariate normal distribution + with covariance R. In our case, x is the CoM velocity of the robot, + F=B=H=eye(3), u=dt * CoM acceleration, which is obtained from accelerometer, + and the noisy observation z is obtained from the negated average velocities at + the end-effectors in contact with the ground. + + """ + + def __init__( + self, + robot: Any, + use_sensor_interface: bool = True, + accelerometer_variance=0.1, + observation_variance=0.1, + initial_variance=0.1, + velocity_filter_window: float = _DEFAULT_VELOCITY_FILTER_WINDOW, + gyroscope_filter_window: float = _DEFAULT_GYRO_FILTER_WINDOW, + contact_detection_threshold: float = 0.0, + velocity_clipping: float = _DEFAULT_VELOCITY_CLIPPING, + ): + """Initializes the class. + + Args: + robot: A quadruped robot. + use_sensor_interface: Whether to use the sensor interface to obtain the + IMU readings or directly get them from the robot class. Former should + be used in simulation to enable added latency and noise while latter + should be used on real robot for better performance. + accelerometer_variance: The estimated variance in the accelerometer + readings, used in the Kalman Filter. + observation_variance: The estimated variance in the observed CoM velocity + from the stance feet velocities, used in the Kalman Filter. + initial_variance: The variance of the initial distribution for the + estimated CoM variance. + velocity_filter_window: The filtering window (in time) used to smooth the + estimated CoM velocity. + gyroscope_filter_window: The filtering window (in time) used to smooth the + input gyroscope readings. + contact_detection_threshold: Threshold on the contact sensor readings to + determine whether the foot is in contact with the ground. + velocity_clipping: Clipping value for the estimated velocity to prevent + unrealistically large velocity estimations. + """ + self._robot = robot + self._contact_detection_threshold = contact_detection_threshold + self._velocity_clipping = velocity_clipping + self._use_sensor_interface = use_sensor_interface + + # Use the accelerometer and gyroscope sensor from the robot + if self._use_sensor_interface: + for sensor in self._robot.sensors: + if isinstance(sensor, accelerometer_sensor.AccelerometerSensor): + self._accelerometer = sensor + if isinstance(sensor, imu_sensor.IMUSensor): + self._gyroscope = sensor + assert hasattr(self, "_accelerometer") and self._accelerometer is not None + assert hasattr(self, "_gyroscope") and self._gyroscope is not None + + # x is the underlying CoM velocity we want to estimate, z is the observed + # CoM velocity from the stance feet velocities, and u is the accelerometer + # readings. + self._filter = kalman.KalmanFilter( + dim_x=_STATE_DIMENSION, + dim_z=_STATE_DIMENSION, + dim_u=_STATE_DIMENSION) + # Initialize the state distribution to be a zero-mean multi-variate normal + # distribution with initial variance. + self._filter.x = np.zeros(_STATE_DIMENSION) + self._initial_variance = initial_variance + self._filter.P = np.eye(_STATE_DIMENSION) * self._initial_variance + # Covariance matrix for the control variable. + self._filter.Q = np.eye(_STATE_DIMENSION) * accelerometer_variance + # Covariance matrix for the observed states. + self._filter.R = np.eye(_STATE_DIMENSION) * observation_variance + + # observation function (z=H*x+N(0,R)) + self._filter.H = np.eye(_STATE_DIMENSION) + # state transition matrix (x'=F*x+B*u+N(0,Q)) + self._filter.F = np.eye(_STATE_DIMENSION) + # Control transition matrix + self._filter.B = np.eye(_STATE_DIMENSION) + + self._velocity_filter = time_based_moving_window_filter.TimeBasedMovingWindowFilter( + velocity_filter_window) + self._gyroscope_filter = time_based_moving_window_filter.TimeBasedMovingWindowFilter( + gyroscope_filter_window) + + self.reset(0) + + @property + def com_velocity_body_yaw_aligned_frame(self) -> Sequence[float]: + """The base velocity projected in the body yaw aligned inertial frame. + + The body yaw aligned frame is a intertia frame where the z axis coincides + with the yaw of the robot base and the x and y axis coincides with the world + frame. It has a zero relative velocity/angular velocity + to the world frame. + + Returns: + The com velocity in body yaw aligned frame. + """ + clipped_velocity = np.clip(self._com_velocity_body_yaw_aligned_frame, + -self._velocity_clipping, + self._velocity_clipping) + + return clipped_velocity + + def reset(self, current_time): + del current_time + self._filter.x = np.zeros(_STATE_DIMENSION) + self._filter.P = np.eye(_STATE_DIMENSION) * self._initial_variance + + self._com_velocity_body_yaw_aligned_frame = np.zeros(_STATE_DIMENSION) + + self._velocity_filter.reset() + self._gyroscope_filter.reset() + + # Use None instead of 0 in case of a big gap between reset and first step. + self._last_timestamp = None + + def update(self, current_time): + del current_time + current_timestamp = self._robot.timestamp + + # First time step + if self._last_timestamp is None: + delta_time_s = 0.0 + else: + delta_time_s = current_timestamp - self._last_timestamp + self._last_timestamp = current_timestamp + + if self._use_sensor_interface: + sensor_acc = np.array(self._accelerometer.get_observation()) + gyroscope_reading = self._gyroscope.get_observation() + else: + sensor_acc = np.array(self._robot.base_acceleration_accelerometer) + gyroscope_reading = self._robot.base_roll_pitch_yaw + + filtered_gyroscope_reading = self._gyroscope_filter.calculate_average( + gyroscope_reading, current_timestamp) + # The yaw angle is not used here because reliably estimating the yaw angle + # of the robot is in general difficult. This leads to a body yaw aligned + # inertia frame for the estimated velocity. + yaw_aligned_base_orientation = self._robot.pybullet_client.getQuaternionFromEuler( + (filtered_gyroscope_reading[0], filtered_gyroscope_reading[1], 0.0)) + + rot_mat = self._robot.pybullet_client.getMatrixFromQuaternion( + yaw_aligned_base_orientation) + rot_mat = np.array(rot_mat).reshape((_STATE_DIMENSION, _STATE_DIMENSION)) + calibrated_acc = rot_mat.dot(sensor_acc) + np.array(_GRAVITY) + self._filter.predict(u=calibrated_acc * delta_time_s) + observed_velocities = [] + + foot_contact = [ + np.linalg.norm(contact_force) > self._contact_detection_threshold + for contact_force in self._robot.feet_contact_forces() + ] + for leg_id in range(4): + if foot_contact[leg_id]: + jacobian = self._robot.compute_jacobian_for_one_leg(leg_id) + # Only pick the jacobian related to joint motors + # TODO(magicmelon): standardize the process of picking out relevant dofs + com_dof = self._robot.urdf_loader.com_dof + jacobian = jacobian[:, + com_dof + leg_id * 3:com_dof + (leg_id + 1) * 3] + joint_velocities = self._robot.motor_velocities[leg_id * + 3:(leg_id + 1) * 3] + leg_velocity_in_base_frame = jacobian.dot(joint_velocities) + base_velocity_in_base_frame = -leg_velocity_in_base_frame + observed_velocities.append(rot_mat.dot(base_velocity_in_base_frame)) + + if observed_velocities: + observed_velocities = np.mean(observed_velocities, axis=0) + self._filter.update(observed_velocities) + + velocity = self._filter.x.copy() + + self._com_velocity_body_yaw_aligned_frame = self._velocity_filter.calculate_average( + velocity, current_timestamp) diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/leg_controller.py b/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/leg_controller.py new file mode 100644 index 000000000..731f7ae9f --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/leg_controller.py @@ -0,0 +1,29 @@ +"""The leg controller class interface.""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import abc +from typing import Any + + +class LegController(object): # pytype: disable=ignored-metaclass + """Generates the leg control signal.""" + + __metaclass__ = abc.ABCMeta + + @abc.abstractmethod + def reset(self, current_time: float): + """Resets the controller's internal state.""" + pass + + @abc.abstractmethod + def update(self, current_time: float): + """Updates the controller's internal state.""" + pass + + @abc.abstractmethod + def get_action(self) -> Any: + """Gets the control signal e.g. torques/positions for the leg.""" + pass diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/locomotion_controller.py b/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/locomotion_controller.py new file mode 100644 index 000000000..d9bca69f5 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/locomotion_controller.py @@ -0,0 +1,96 @@ +"""A model based controller framework.""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import time +from typing import Any, Callable + +from pybullet_envs.minitaur.agents.baseline_controller import gait_generator as gait_generator_lib +from pybullet_envs.minitaur.agents.baseline_controller import leg_controller as leg_controller_lib +from pybullet_envs.minitaur.agents.baseline_controller import state_estimator as state_estimator_lib + + +class LocomotionController(object): + """Generates the quadruped locomotion. + + The actual effect of this controller depends on the composition of each + individual subcomponent. + + """ + + def __init__( + self, + robot: Any, + gait_generator: gait_generator_lib.GaitGenerator, + state_estimator: state_estimator_lib.StateEstimatorBase, + swing_leg_controller: leg_controller_lib.LegController, + stance_leg_controller: leg_controller_lib.LegController, + clock: Callable[[], float] = None, + ): + """Initializes the class. + + Args: + robot: A robot instance. + gait_generator: Generates the leg swing/stance pattern. + state_estimator: Estimates the state of the robot (e.g. center of mass + position or velocity that may not be observable from sensors). + swing_leg_controller: Generates motor actions for swing legs. + stance_leg_controller: Generates motor actions for stance legs. + clock: A real or fake clock source. + """ + self._robot = robot + self._clock = clock + if clock is None: + self._clock = time.time + self._reset_time = self._clock() + self._time_since_reset = 0 + self._gait_generator = gait_generator + self._state_estimator = state_estimator + self._swing_leg_controller = swing_leg_controller + self._stance_leg_controller = stance_leg_controller + + @property + def swing_leg_controller(self): + return self._swing_leg_controller + + @property + def stance_leg_controller(self): + return self._stance_leg_controller + + @property + def gait_generator(self): + return self._gait_generator + + @property + def state_estimator(self): + return self._state_estimator + + def reset(self): + self._reset_time = self._clock() + self._time_since_reset = 0 + self._gait_generator.reset(self._time_since_reset) + self._state_estimator.reset(self._time_since_reset) + self._swing_leg_controller.reset(self._time_since_reset) + self._stance_leg_controller.reset(self._time_since_reset) + + def update(self): + self._time_since_reset = self._clock() - self._reset_time + self._gait_generator.update(self._time_since_reset) + self._state_estimator.update(self._time_since_reset) + self._swing_leg_controller.update(self._time_since_reset) + self._stance_leg_controller.update(self._time_since_reset) + + def get_action(self): + """Returns the control ouputs (e.g. positions/torques) for all motors.""" + swing_action = self._swing_leg_controller.get_action() + stance_action = self._stance_leg_controller.get_action() + action = [] + for joint_id in range(self._robot.num_motors): + if joint_id in swing_action: + action.extend(swing_action[joint_id]) + else: + assert joint_id in stance_action + action.extend(stance_action[joint_id]) + return action diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/locomotion_controller_example.py b/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/locomotion_controller_example.py new file mode 100644 index 000000000..fd867950d --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/locomotion_controller_example.py @@ -0,0 +1,190 @@ +r"""Laikago walking example using the locomotion controller framework. + +""" + +import gc +import pickle + +from absl import app +from absl import flags +import numpy as np +import scipy.interpolate + + +from pybullet_envs.minitaur.agents.baseline_controller import locomotion_controller_setup +from pybullet_envs.minitaur.envs_v2 import env_loader +from pybullet_envs.minitaur.robots import robot_config + +FLAGS = flags.FLAGS +flags.DEFINE_boolean("run_on_robot", False, + "whether to run in sim or on real hardware") +flags.DEFINE_boolean( + "use_ground_truth_velocity", False, + "whether to use a ground truth velocity estimator (available in sim)") +flags.DEFINE_enum("gait", "fast_trot", + ["fast_trot", "slow_trot", "walk", "stand"], + "The gait pattern to use") +flags.DEFINE_boolean( + "use_keyboard_control", False, + "whether to use a keyboard to control or demo speed profile.") +flags.DEFINE_string("log_path", None, "Path to save robot logs") +flags.DEFINE_boolean("add_random_push", False, + "whether to add random push to the robot in simulation") + +_MAX_TIME_SECONDS = 100 + + +def _load_config(render=True, run_on_robot=False): + """Builds the environment for the quadruped robot. + + Args: + render: Enable/disable rendering. + run_on_robot: Whether deploy to robot or run in sim. + """ + if run_on_robot: + locomotion_controller_setup.load_real_config() + else: + locomotion_controller_setup.load_sim_config(render) + if FLAGS.add_random_push: + locomotion_controller_setup.add_random_push_config() + + +def _generate_example_linear_angular_speed(t): + """Creates an example speed profile based on time for demo purpose.""" + vx = 0.1 + vy = 0.1 + wz = 0.3 + time_points = (0, 4, 7, 11, 13, 15, 17, 19, 100) + speed_points = ((0, 0, 0, 0), (vx, 0, 0, 0), (-vx, 0, 0, 0), (0, -vy, 0, 0), + (0, vy, 0, 0), (0, 0, 0, wz), (0, 0, 0, -wz), (0, 0, 0, 0), + (0, 0, 0, 0)) + + speed = scipy.interpolate.interp1d( + time_points, + speed_points, + kind="previous", + fill_value="extrapolate", + axis=0)( + t) + + return speed[0:3], speed[3] + + +def _update_speed_from_kb(kb, lin_speed, ang_speed): + """Updates the controller behavior parameters.""" + if kb.is_keyboard_hit(): + c = kb.get_input_character() + if c == "w": + lin_speed += np.array((0.05, 0, 0)) + if c == "s": + lin_speed += np.array((-0.05, 0, 0)) + if c == "q": + ang_speed += 0.1 + if c == "e": + ang_speed += -0.1 + if c == "a": + lin_speed += np.array((0, 0.05, 0)) + if c == "d": + lin_speed += np.array((0, -0.05, 0)) + if c == "r": + lin_speed = np.array([0.0, 0.0, 0.0]) + ang_speed = 0.0 + + lin_speed[0] = np.clip(lin_speed[0], -0.2, 0.4) + lin_speed[1] = np.clip(lin_speed[1], -0.2, 0.2) + ang_speed = np.clip(ang_speed, -0.3, 0.3) + print("desired speed: ", lin_speed, ang_speed) + + return lin_speed, ang_speed + + +def _update_controller_params(controller, lin_speed, ang_speed): + controller.swing_leg_controller.desired_speed = lin_speed + controller.swing_leg_controller.desired_twisting_speed = ang_speed + controller.stance_leg_controller.desired_speed = lin_speed + controller.stance_leg_controller.desired_twisting_speed = ang_speed + + +def _run_example(max_time=_MAX_TIME_SECONDS, + run_on_robot=False, + use_keyboard=False): + """Runs the locomotion controller example.""" + if use_keyboard: + kb = keyboard_utils.KeyboardInput() + + env = env_loader.load() + env.reset() + + # To mitigate jittering from the python + gc.collect() + + # Wait for the robot to be placed properly. + if run_on_robot: + input("Press Enter to continue when robot is ready.") + + lin_speed = np.array([0.0, 0.0, 0.0]) + ang_speed = 0.0 + + controller = locomotion_controller_setup.setup_controller( + env.robot, FLAGS.gait, run_on_robot, FLAGS.use_ground_truth_velocity) + controller.reset() + + loop_start_time = env.get_time_since_reset() + loop_elapsed_time = 0 + robot_log = { + "timestamps": [], + "motor_angles": [], + "motor_velocities": [], + "base_velocities": [], + "foot_positions": [], + "base_rollpitchyaw": [], + "base_angular_velocities": [], + "actions": [] + } + try: + while loop_elapsed_time < max_time: + #if use_keyboard: + # lin_speed, ang_speed = _update_speed_from_kb(kb, lin_speed, ang_speed) + #else: + lin_speed, ang_speed = _generate_example_linear_angular_speed( + loop_elapsed_time) + + # Needed before every call to get_action(). + _update_controller_params(controller, lin_speed, ang_speed) + controller.update() + hybrid_action = controller.get_action() + + # Log the robot data. + robot_log["timestamps"].append(env.robot.GetTimeSinceReset()) + robot_log["motor_angles"].append(env.robot.motor_angles) + robot_log["motor_velocities"].append(env.robot.motor_velocities) + robot_log["base_velocities"].append( + controller.state_estimator.com_velocity_body_yaw_aligned_frame) + robot_log["foot_positions"].append(env.robot.foot_positions()) + robot_log["base_rollpitchyaw"].append(env.robot.base_roll_pitch_yaw) + robot_log["base_angular_velocities"].append( + env.robot.base_roll_pitch_yaw_rate) + robot_log["actions"].append(hybrid_action) + + env.step(hybrid_action) + loop_elapsed_time = env.get_time_since_reset() - loop_start_time + + finally: + if FLAGS.run_on_robot: + # Apply zero torques to the robot. + env.robot.apply_action( + [0] * env.robot.num_motors, + motor_control_mode=robot_config.MotorControlMode.TORQUE) + if FLAGS.log_path: + pickle.dump(robot_log, gfile.Open(FLAGS.log_path + "/robot.log", "wb")) + + +def main(argv): + del argv + _load_config(render=True, run_on_robot=FLAGS.run_on_robot) + _run_example( + run_on_robot=FLAGS.run_on_robot, use_keyboard=FLAGS.use_keyboard_control) + + +if __name__ == "__main__": + app.run(main) diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/locomotion_controller_in_scenario_set_example.py b/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/locomotion_controller_in_scenario_set_example.py new file mode 100644 index 000000000..71fefa7b5 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/locomotion_controller_in_scenario_set_example.py @@ -0,0 +1,180 @@ +r"""ScenarioSet example for Laikago MPC controller. + +blaze run -c opt \ +//robotics/reinforcement_learning/minitaur/agents/baseline_controller\ +:locomotion_controller_in_scenario_set_example -- --gait=slow_trot \ +--add_random_push=True +""" + +from absl import app +from absl import flags +import gin +import numpy as np +import scipy.interpolate + +from pybullet_envs.minitaur.agents.baseline_controller import locomotion_controller_setup +from pybullet_envs.minitaur.envs_v2 import env_loader + +FLAGS = flags.FLAGS + +SCENARIO_SET_CONFIG = """ +import pybullet_envs.minitaur.envs_v2.scenarios.locomotion_simple_scenario_set + +include "google3/robotics/reinforcement_learning/minitaur/envs_v2/scenarios/default_scenario_set.gin" + +default_scenario_set/singleton.constructor = @locomotion_simple_scenario_set.LocomotionSimpleScenarioSet + + +locomotion_simple_scenario_set.LocomotionSimpleScenarioSet.selector = "flat_ground" +locomotion_gym_env.LocomotionGymEnv.task = @scenario_set.task() +locomotion_gym_env.LocomotionGymEnv.scene = @scenario_set.scene() +locomotion_gym_env.LocomotionGymEnv.env_randomizers = [ + @scenario_set.env_randomizer() +] +""" + +_MAX_TIME_SECONDS = 30 + +flags.DEFINE_enum("gait", "fast_trot", + ["fast_trot", "slow_trot", "walk", "stand"], + "The gait pattern to use") + +flags.DEFINE_boolean("add_random_push", False, + "whether to add random push to the robot in simulation") + + +def _start_stop_profile(max_speed=0.5, axis=0, duration=3): + speed_profile = np.zeros((3, 4)) + + speed_profile[1, axis] = max_speed + + return (0, 0.5, duration + 0.5), speed_profile.tolist() + + +def _random_speed_profile(max_speed=1, axis=0, time_interval=1.0): + num_pts = 11 + time_points = np.arange(num_pts) * time_interval + + speed_profile = np.zeros((num_pts, 4)) + speed_profile[:, axis] = np.random.uniform(0, max_speed, num_pts) + speed_profile[-1, :] = 0 + return time_points.tolist(), speed_profile.tolist() + + +def _body_height_profile(z_range=(0.3, 0.55)): + del z_range + # TODO(tingnan): Implement this. + + +def _generate_linear_angular_speed(t, time_points, speed_points): + """Creates an example speed profile based on time for demo purpose.""" + + speed = scipy.interpolate.interp1d( + time_points, + speed_points, + kind="previous", + fill_value="extrapolate", + axis=0)( + t) + + return speed[0:3], speed[3] + + +def _update_controller_params(controller, lin_speed, ang_speed): + controller.swing_leg_controller.desired_speed = lin_speed + controller.swing_leg_controller.desired_twisting_speed = ang_speed + controller.stance_leg_controller.desired_speed = lin_speed + controller.stance_leg_controller.desired_twisting_speed = ang_speed + + +def _gen_stability_test_start_stop(): + """Generates the speed profile for start/stop tests.""" + axis_to_name = { + 0: "velocity x", + 1: "velocity y", + 3: "angular velocity z", + } + + axis_to_max_speed = { + 0: 1.0, + 1: 0.5, + 3: 2.5, + } + + gait_multiplier = { + "slow_trot": 0.7, + "walk": 0.3, + "fast_trot": 1.0, + } + + for axis in (0, 1, 3): + yield axis_to_name[axis], _start_stop_profile( + axis_to_max_speed[axis] * gait_multiplier[FLAGS.gait], axis) + + +def _gen_stability_test_random(): + """Generates the speed profile for random walking tests.""" + axis_to_name = { + 0: "velocity x", + 1: "velocity y", + 3: "angular velocity z", + } + + axis_to_max_speed = { + 0: 1.0, + 1: 0.5, + 3: 2.5, + } + + gait_multiplier = { + "slow_trot": 0.7, + "walk": 0.3, + "fast_trot": 1.0, + } + + for axis in (0, 1, 3): + yield axis_to_name[axis], _random_speed_profile( + axis_to_max_speed[axis] * gait_multiplier[FLAGS.gait], axis) + + +def _test_stability(max_time=5, render=False, test_generator=None): + """Tests the stability of the controller using speed profiles.""" + locomotion_controller_setup.load_sim_config(render=render) + gin.parse_config(SCENARIO_SET_CONFIG) + if FLAGS.add_random_push: + locomotion_controller_setup.add_random_push_config() + + env = env_loader.load() + controller = locomotion_controller_setup.setup_controller( + env.robot, gait=FLAGS.gait) + + for name, speed_profile in test_generator(): + env.reset() + controller.reset() + current_time = 0 + while current_time < max_time: + current_time = env.get_time_since_reset() + lin_speed, ang_speed = _generate_linear_angular_speed( + current_time, speed_profile[0], speed_profile[1]) + _update_controller_params(controller, lin_speed, ang_speed) + + # Needed before every call to get_action(). + controller.update() + hybrid_action = controller.get_action() + + _, _, done, _ = env.step(hybrid_action) + if done: + break + print(f"Scene name: flat ground. Random push: {FLAGS.add_random_push}. " + f"Survival time for {name} = {speed_profile[1]} is {current_time}") + + +def main(argv): + del argv + _test_stability(render=True, test_generator=_gen_stability_test_start_stop) + _test_stability( + max_time=15, render=True, test_generator=_gen_stability_test_random) + + +if __name__ == "__main__": + app.run(main) diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/locomotion_controller_setup.py b/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/locomotion_controller_setup.py new file mode 100644 index 000000000..afaed6cb7 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/locomotion_controller_setup.py @@ -0,0 +1,175 @@ +"""The common setups for MPC based locoomtion controller environments.""" +import time +import gin +import numpy as np + +from pybullet_envs.minitaur.agents.baseline_controller import com_velocity_estimator +from pybullet_envs.minitaur.agents.baseline_controller import imu_based_com_velocity_estimator +from pybullet_envs.minitaur.agents.baseline_controller import locomotion_controller +from pybullet_envs.minitaur.agents.baseline_controller import openloop_gait_generator +from pybullet_envs.minitaur.agents.baseline_controller import raibert_swing_leg_controller +from pybullet_envs.minitaur.agents.baseline_controller import torque_stance_leg_controller +#from pybullet_envs.minitaur.envs.env_randomizers import minitaur_push_randomizer +from pybullet_envs.minitaur.envs.env_randomizers import minitaur_push_randomizer +from pybullet_envs.minitaur.robots import robot_config +import pybullet_data as pd + +CONFIG_FILE = (pd.getDataPath()+"/configs_v2/base/laikago_reactive.gin") + +_MOTOR_KD = [1.0, 2.0, 2.0] * 4 +_BODY_HEIGHT = 0.45 +_MAX_TIME_SECONDS = 1000000000 +_MOTOR_KD = [1.0, 2.0, 2.0] * 4 +# TODO(tingnan): This is for tunining the moments of inertia of the model. +# Once we identified the correct value we can remove this. +_SCALE = 4 +_INERTIA = (0.07335 * _SCALE, 0, 0, 0, 0.25068 * _SCALE, 0, 0, 0, + 0.25447 * _SCALE) + + +def load_sim_config(render=True): + """Builds the environment for the quadruped robot. + + Args: + render: Enable/disable rendering. + """ + gin.clear_config(clear_constants=False) + config_file = CONFIG_FILE + gin.parse_config_file(config_file) + + # Sim bindings + # Overwrite a few parameters. + + action_repeat = 4 + gin.bind_parameter("SimulationParameters.num_action_repeat", action_repeat) + gin.bind_parameter("laikago_v2.Laikago.action_repeat", action_repeat) + + # Control latency is NOT modeled properly for inverse kinematics and + # jacobians, as we are directly calling the pybullet API. We will try to fix + # this by loading a separate pybullet instance, set the pose and joint + # angles which has latency in them, and then run the jacobian/IK. + gin.bind_parameter("laikago_v2.Laikago.motor_control_mode", + robot_config.MotorControlMode.HYBRID) + # Bump up a bit the adduction/abduction motor d gain for a better tracking. + gin.bind_parameter("hybrid_motor_model.HybridMotorModel.kd", _MOTOR_KD) + gin.bind_parameter("SimulationParameters.enable_rendering", render) + gin.bind_parameter("env_loader.load.wrapper_classes", []) + + + +def add_random_push_config(): + """Adds a random push randomizers to the config.""" + try: + current_env_randomizers = gin.query_parameter( + "locomotion_gym_env.LocomotionGymEnv.env_randomizers") + + current_env_randomizers.append( + minitaur_push_randomizer.MinitaurPushRandomizer( + horizontal_force_bound=(500, 900), + vertical_force_bound=(50, 100), + visualize_perturbation_force=True)) + gin.bind_parameter("locomotion_gym_env.LocomotionGymEnv.env_randomizers", + current_env_randomizers) + except ValueError: + # No randoimzers bind so far + gin.bind_parameter("locomotion_gym_env.LocomotionGymEnv.env_randomizers", [ + minitaur_push_randomizer.MinitaurPushRandomizer( + horizontal_force_bound=(500, 900), + vertical_force_bound=(50, 100), + visualize_perturbation_force=True) + ]) + + +def select_gait(gait_type="fast_trot"): + """Selects a gait pattern. + + Args: + gait_type: which gait to use. + + Returns: + A tuple of (stance_duration, duty_factor, initial_phase) + """ + # Each gait is composed of stance_duration, duty_factor, and + # init_phase_full_cycle. + if gait_type == "fast_trot": + return [0.25] * 4, [0.6] * 4, [0, 0.5, 0.5, 0] + elif gait_type == "slow_trot": + return [0.4] * 4, [0.65] * 4, [0, 0.5, 0.5, 0] + elif gait_type == "walk": + return [0.75] * 4, [0.8] * 4, [0.25, 0.75, 0.5, 0] + else: + # Means four leg stand for as long as possible. + return [_MAX_TIME_SECONDS] * 4, [0.99] * 4, [0, 0, 0, 0] + + +def setup_controller(robot, + gait="fast_trot", + run_on_robot=False, + use_ground_truth_velocity=False): + """Demonstrates how to create a locomotion controller. + + Args: + robot: A robot instance. + gait: The type of gait to use. + run_on_robot: Whether this controller is running on the real robot or not. + use_ground_truth_velocity: Whether to use ground truth velocity or velocity + estimator. + + Returns: + A locomotion controller. + """ + desired_speed = (0, 0) + desired_twisting_speed = 0 + + feet_positions = np.array(robot.foot_positions()) + feet_positions[:, 2] = 0 + + # Sim and real robots have different mass and contact detection parameters. + body_weight, contact_force_threshold = (200, 20) if run_on_robot else (215, 0) + + stance_duration, duty_factor, init_phase = select_gait(gait) + gait_generator = openloop_gait_generator.OpenloopGaitGenerator( + robot, + stance_duration=stance_duration, + duty_factor=duty_factor, + initial_leg_phase=init_phase, + contact_detection_force_threshold=contact_force_threshold, + ) + state_estimator = ( + imu_based_com_velocity_estimator.IMUBasedCOMVelocityEstimator( + robot, + contact_detection_threshold=contact_force_threshold, + )) + + # Use this in sim to test ground truth velocity estimation. + if use_ground_truth_velocity: + state_estimator = com_velocity_estimator.COMVelocityEstimator(robot) + + sw_controller = raibert_swing_leg_controller.RaibertSwingLegController( + robot, + gait_generator, + state_estimator, + desired_speed=desired_speed, + desired_twisting_speed=desired_twisting_speed, + desired_height=_BODY_HEIGHT, + local_hip_positions=feet_positions, + ) + st_controller = torque_stance_leg_controller.TorqueStanceLegController( + robot, + gait_generator, + state_estimator, + desired_speed=desired_speed, + desired_twisting_speed=desired_twisting_speed, + desired_body_height=_BODY_HEIGHT, + body_mass=body_weight / 9.8, + body_inertia=_INERTIA, + ) + + controller = locomotion_controller.LocomotionController( + robot=robot, + gait_generator=gait_generator, + state_estimator=state_estimator, + swing_leg_controller=sw_controller, + stance_leg_controller=st_controller, + clock=robot.GetTimeSinceReset) + return controller diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/minitaur_raibert_controller.py b/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/minitaur_raibert_controller.py new file mode 100644 index 000000000..82ddebcab --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/minitaur_raibert_controller.py @@ -0,0 +1,448 @@ +"""A Raibert style controller for Minitaur.""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import math +import attr +import gin +import numpy as np + +from pybullet_envs.minitaur.agents.baseline_controller import minitaur_raibert_controller_utils +from pybullet_envs.minitaur.envs.utilities import minitaur_pose_utils + +LEFT_FRONT_LEG_ID = 0 +LEFT_HIND_LEG_ID = 1 +RIGHT_FRONT_LEG_ID = 2 +RIGHT_HIND_LEG_ID = 3 + +DIAGONAL_LEG_PAIR_1 = (LEFT_FRONT_LEG_ID, RIGHT_HIND_LEG_ID) +DIAGONAL_LEG_PAIR_2 = (LEFT_HIND_LEG_ID, RIGHT_FRONT_LEG_ID) + +LEFT_LEG_IDS = (LEFT_FRONT_LEG_ID, LEFT_HIND_LEG_ID) +RIGHT_LEG_IDS = (RIGHT_FRONT_LEG_ID, RIGHT_HIND_LEG_ID) + +# The max horizontal foot offset (in meters) for turning. +_FOOT_HORIZONTAL_OFFSET_FOR_TURNING = 0.1 + +_STANCE_TG_PHASE_COMPRESSION = 1.5 +_STANCE_TG_DELTA_EXTENSION = 0.2 +_STANCE_HORIZONTAL_SCALING_FACTOR = 1.2 + +_DEFAULT_SWING_SPEED_GAIN = 0.015 + +_DEFAULT_SWING_FOOT_CLEARANCE = 0.005 + +_PITCH_SWING_FEEDBACK_SCALING_FACTOR = 1.2 + + +# A POD container to describe the controller's high level behavior. +@attr.s +class BehaviorParameters(object): + """Highlevel parameters for Raibert style controller.""" + stance_duration = attr.ib(type=float, default=0.25) + desired_forward_speed = attr.ib(type=float, default=0.) + desired_turning_speed = attr.ib(type=float, default=0.) + standing_height = attr.ib(type=float, default=0.2) + desired_incline_angle = attr.ib(type=float, default=0.) + + +def generate_default_swing_trajectory(phase, init_pose, end_pose): + """A swing trajectory generator. + + Args: + phase: Float. Between [0, 1]. + init_pose: A tuple. The leg pose (swing, extension) at phase == 0 the + beginning of swing. + end_pose: A tuple. The leg pose at phase == 1 the end of swing. + + Returns: + The desired leg pose for the current phase. + """ + # Try phase compression + normalized_phase = math.sqrt(min(phase * 1.5, 1)) + + # For swing, we use a linear interpolation: + swing = (end_pose[0] - init_pose[0]) * normalized_phase + init_pose[0] + + # For extension, we can fit a second order polynomial: + min_ext = (init_pose[1] + end_pose[1]) / 2 - 0.8 + min_ext = max(min_ext, 0.5) + + # The phase value at which the extension reaches the minimal value min_ext. + # phi is small, the swing leg will try to lift higher in the first half of + # swing. + phi = 0.1 + + # We convert the extension back into the cartesion space. In this way we can + # guarantee a lift-up trajectory. The ankle to hip distance is easier to + # compute than a full forward-kinematics. + min_ankle_dist = minitaur_raibert_controller_utils.extension_to_ankle_dist( + min_ext) + init_ankle_dist = minitaur_raibert_controller_utils.extension_to_ankle_dist( + init_pose[1]) + end_ankle_dist = minitaur_raibert_controller_utils.extension_to_ankle_dist( + end_pose[1]) + + # The polynomial is: a * phi^2 + b * phi + c + delta_1 = min_ankle_dist - init_ankle_dist + delta_2 = end_ankle_dist - init_ankle_dist + delta_p = phi * phi - phi + + a = (delta_1 - phi * delta_2) / delta_p + + b = (phi * phi * delta_2 - delta_1) / delta_p + + ankle_dist = ( + a * normalized_phase * normalized_phase + b * normalized_phase + + init_ankle_dist) + + l1 = minitaur_raibert_controller_utils.UPPER_LEG_LEN + l2 = minitaur_raibert_controller_utils.LOWER_SHORT_LEG_LEN + + ankle_dist = min(max(ankle_dist, l2 - l1 + 0.01), l2 + l1 - 0.01) + + extension = minitaur_raibert_controller_utils.ankle_dist_to_extension( + ankle_dist) + + return (swing, extension) + + +@gin.configurable +def generate_default_stance_trajectory(phase, + init_pose, + end_pose, + use_constant_extension=False): + """A stance strajectory generator. + + Args: + phase: Float. Between [0, 1]. + init_pose: A tuple. The leg pose (swing, extension) at phase == 0, i.e. the + beginning of stance. + end_pose: A tuple. The leg pose at phase == 1, i.e. the end of stance. + use_constant_extension: Boolean. Whether or not to fix the extension during + stance. + + Returns: + The desired leg pose for the current phase. + """ + normalized_phase = min(_STANCE_TG_PHASE_COMPRESSION * math.sqrt(phase), 1) + swing = (end_pose[0] - init_pose[0]) * normalized_phase + init_pose[0] + + # The extension evolves nonlinearly according to the parabola equation. + if use_constant_extension: + extension = end_pose[1] + else: + extension = end_pose[1] - 4 * _STANCE_TG_DELTA_EXTENSION * ( + normalized_phase**2 - normalized_phase) + return (swing, extension) + + +def get_stance_foot_offset_for_turning(leg_id, steering_signal): + """Modify the stance foot position to achieve turning. + + The strategy works for trotting gaits. + + Args: + leg_id: Integer. The leg index. + steering_signal: Float. The desired turning signal in [-1, 1]. Because we + don't have an accurate mapping from angular velocity to the foot offset, + the steering signal should be treated as a reference and only its relative + magnitude matters. + + Returns: + The stance foot's horizontal offset. + + """ + clipped_steering_signal = np.clip(steering_signal, -1, 1) + + if leg_id in LEFT_LEG_IDS: + return _FOOT_HORIZONTAL_OFFSET_FOR_TURNING * clipped_steering_signal + else: + return -(_FOOT_HORIZONTAL_OFFSET_FOR_TURNING * clipped_steering_signal) + + +def get_leg_swing_offset_for_pitching(body_pitch, desired_incline_angle): + """Get the leg swing zero point when the body is tilted. + + For example, when climbing up or down stairs/slopes, the robot body will tilt + up or down. By compensating the body pitch, the leg's trajectory will be + centered around the vertical direction (not perpendicular to the surface). + This helps the robot to generate thrust when going upwards, and braking when + going downwards. + + Args: + body_pitch: Float. Current body pitch angle. + desired_incline_angle: Float. The desired body pitch angle. + + Returns: + The stance and swing leg swing offset. + + """ + kp = 0.2 + return -((1 - kp) * body_pitch + kp * desired_incline_angle) + + +@gin.configurable +class RaibertSwingLegController(object): + """The swing leg controller.""" + + def __init__(self, + speed_gain=_DEFAULT_SWING_SPEED_GAIN, + foot_clearance=_DEFAULT_SWING_FOOT_CLEARANCE, + leg_trajectory_generator=generate_default_swing_trajectory): + """Initializes the controller. + + Args: + speed_gain: Float. The speed feedback gain to modulate the target foot + position. + foot_clearance: Float. The foot clearance (at the end of the swing phase) + in meters. + leg_trajectory_generator: A trajectory generator function. + """ + self._speed_gain = speed_gain + self._foot_clearance = foot_clearance + self._leg_trajectory_generator = leg_trajectory_generator + + def get_action(self, raibert_controller): + """Get the swing legs' desired pose.""" + current_speed = raibert_controller.estimate_base_velocity() + phase = raibert_controller.get_phase() + rpy = raibert_controller.robot.base_roll_pitch_yaw + + leg_pose_set = {} + for i in raibert_controller.swing_set: + # Target foot horizontal position is calculated according to Raibert's + # original formula in "Legged robots that balance". + target_foot_horizontal_position = ( + raibert_controller.behavior_parameters.stance_duration / 2 * + current_speed + self._speed_gain * + (current_speed - + raibert_controller.behavior_parameters.desired_forward_speed)) + + # 1) Convert the target foot position to leg pose space. + # Lift the foot a little bit. + target_foot_vertical_position = -( + raibert_controller.behavior_parameters.standing_height - + self._foot_clearance) + target_foot_position = (target_foot_horizontal_position, + target_foot_vertical_position) + target_leg_pose = minitaur_raibert_controller_utils.foot_position_to_leg_pose( + target_foot_position) + + # 2) Generates the curve from the swing start leg pose to the target leg + # pose and find the next leg pose on the curve based on current swing + # phase. + + desired_leg_pose = self._leg_trajectory_generator( + phase, raibert_controller.swing_start_leg_pose, target_leg_pose) + + swing_offset = get_leg_swing_offset_for_pitching( + rpy[1], raibert_controller.behavior_parameters.desired_incline_angle) + + leg_pose_set[i] = (desired_leg_pose[0] + swing_offset, + desired_leg_pose[1]) + + return leg_pose_set + + +@gin.configurable +class RaibertStanceLegController(object): + """The controller that modulates the behavior of the stance legs.""" + + def __init__(self, + speed_gain=0.1, + leg_trajectory_generator=generate_default_stance_trajectory): + """Initializes the controller. + + Args: + speed_gain: Float. The speed feedback gain to modulate the target stance + foot position. + leg_trajectory_generator: A trajectory generator function. Generates the + desired leg pose during the stance phase. + """ + self._speed_gain = speed_gain + self._leg_trajectory_generator = leg_trajectory_generator + + def get_action(self, raibert_controller): + """Get the desired leg pose for the stance legs.""" + + phase = raibert_controller.get_phase() + current_speed = raibert_controller.estimate_base_velocity() + rpy = raibert_controller.robot.base_roll_pitch_yaw + + leg_pose_set = {} + for i in raibert_controller.stance_set: + desired_forward_speed = ( + raibert_controller.behavior_parameters.desired_forward_speed) + + target_foot_horizontal_position = -_STANCE_HORIZONTAL_SCALING_FACTOR * ( + raibert_controller.behavior_parameters.stance_duration / 2 * + current_speed - self._speed_gain * + (current_speed - desired_forward_speed)) + + target_foot_horizontal_position += get_stance_foot_offset_for_turning( + i, raibert_controller.behavior_parameters.desired_turning_speed) + + target_foot_position = ( + target_foot_horizontal_position, + -raibert_controller.behavior_parameters.standing_height) + target_leg_pose = minitaur_raibert_controller_utils.foot_position_to_leg_pose( + target_foot_position) + + desired_leg_pose = ( + self._leg_trajectory_generator( + phase, raibert_controller.stance_start_leg_pose, target_leg_pose)) + + swing_offset = _PITCH_SWING_FEEDBACK_SCALING_FACTOR * get_leg_swing_offset_for_pitching( + rpy[1], raibert_controller.behavior_parameters.desired_incline_angle) + + leg_pose_set[i] = (desired_leg_pose[0] + swing_offset, + desired_leg_pose[1]) + + return leg_pose_set + + +@gin.configurable +class MinitaurRaibertController(object): + """A Raibert style controller for trotting gait.""" + + def __init__(self, + robot, + behavior_parameters=BehaviorParameters(), + swing_leg_controller=RaibertSwingLegController(), + stance_leg_controller=RaibertStanceLegController(), + pose_feedback_controller=None): + self._time = 0 + self._robot = robot + self.behavior_parameters = behavior_parameters + + self._last_recorded_speed = 0 + + self._swing_leg_controller = swing_leg_controller + self._stance_leg_controller = stance_leg_controller + self._pose_feeback_controller = pose_feedback_controller + + # The leg order is FL, RL, FR, RR -> [0, 1, 2, 3] + self._swing_set = DIAGONAL_LEG_PAIR_1 + self._stance_set = DIAGONAL_LEG_PAIR_2 + + # Compute the initial leg pose. + self._swing_start_leg_pose = self.get_swing_leg_pose() + self._stance_start_leg_pose = self.get_stance_leg_pose() + + @property + def robot(self): + return self._robot + + @property + def swing_set(self): + return self._swing_set + + @property + def stance_set(self): + return self._stance_set + + @property + def swing_start_leg_pose(self): + return self._swing_start_leg_pose + + @property + def stance_start_leg_pose(self): + return self._stance_start_leg_pose + + def _get_average_leg_pose(self, leg_indices): + """Get the average leg pose.""" + current_leg_pose = minitaur_pose_utils.motor_angles_to_leg_pose( + self._robot.motor_angles) + + # extract the swing leg pose from the current_leg_pose + leg_pose = [] + for index in leg_indices: + leg_pose.append([ + current_leg_pose[index], + current_leg_pose[index + minitaur_pose_utils.NUM_LEGS] + ]) + + leg_pose = np.array(leg_pose) + return np.mean(leg_pose, axis=0) + + def get_swing_leg_pose(self): + """Get the current swing legs' average pose.""" + return self._get_average_leg_pose(self._swing_set) + + def get_stance_leg_pose(self): + """Get the current stance legs' average pose.""" + return self._get_average_leg_pose(self._stance_set) + + def get_phase(self): + """Compute the current stance/swing phase.""" + return math.fmod(self._time, self.behavior_parameters.stance_duration + ) / self.behavior_parameters.stance_duration + + def _get_new_swing_stance_set(self): + """Switch the set of swing/stance legs based on timing.""" + swing_stance_phase = math.fmod(self._time, + 2 * self.behavior_parameters.stance_duration) + if swing_stance_phase < self.behavior_parameters.stance_duration: + return (DIAGONAL_LEG_PAIR_1, DIAGONAL_LEG_PAIR_2) + return (DIAGONAL_LEG_PAIR_2, DIAGONAL_LEG_PAIR_1) + + def update(self, t): + """Update the internal status of the controller. + + Args: + t: Float. The current time after reset in seconds. + """ + self._time = t + new_swing_set, new_stance_set = self._get_new_swing_stance_set() + + # If there is a stance/swing switch. + if new_swing_set[0] is not self._swing_set[0]: + self._swing_set = new_swing_set + self._stance_set = new_stance_set + + # Also records the starting pose. + self._swing_start_leg_pose = self.get_swing_leg_pose() + self._stance_start_leg_pose = self.get_stance_leg_pose() + + def estimate_base_velocity(self): + """Estimate the current CoM speed.""" + # It is best to use a sensor fusion approach. + stance_leg_pose = self.get_stance_leg_pose() + + delta_sw = stance_leg_pose[0] - self._stance_start_leg_pose[0] + + x, y = minitaur_raibert_controller_utils.leg_pose_to_foot_position( + stance_leg_pose) + toe_hip_len = math.sqrt(x**2 + y**2) + horizontal_dist = toe_hip_len * delta_sw + phase = self.get_phase() + speed = self._last_recorded_speed + if phase > 0.1: + speed = horizontal_dist / ( + self.behavior_parameters.stance_duration * phase) + self._last_recorded_speed = speed + return speed + + def get_swing_leg_action(self): + return self._swing_leg_controller.get_action(self) + + def get_stance_leg_action(self): + return self._stance_leg_controller.get_action(self) + + def get_action(self): + """Gets the desired motor angles.""" + leg_pose = [0] * minitaur_pose_utils.NUM_MOTORS + swing_leg_pose = self.get_swing_leg_action() + for i in self._swing_set: + leg_pose[i] = swing_leg_pose[i][0] + leg_pose[i + minitaur_pose_utils.NUM_LEGS] = swing_leg_pose[i][1] + + stance_leg_pose = self.get_stance_leg_action() + for i in self._stance_set: + leg_pose[i] = stance_leg_pose[i][0] + leg_pose[i + minitaur_pose_utils.NUM_LEGS] = stance_leg_pose[i][1] + + return minitaur_pose_utils.leg_pose_to_motor_angles(leg_pose) diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/minitaur_raibert_controller_utils.py b/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/minitaur_raibert_controller_utils.py new file mode 100644 index 000000000..cc992a197 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/minitaur_raibert_controller_utils.py @@ -0,0 +1,82 @@ +"""Utility functions for the Minitaur Raibert controller.""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import math + +UPPER_LEG_LEN = 0.112 +LOWER_SHORT_LEG_LEN = 0.199 +LOWER_LONG_LEG_LEN = 0.2315 + + +def leg_pose_to_foot_position(leg_pose): + """The forward kinematics.""" + l1 = UPPER_LEG_LEN + l2 = LOWER_SHORT_LEG_LEN + l3 = LOWER_LONG_LEG_LEN + + ext = leg_pose[1] + alpha = math.asin(l1 * math.sin(ext) / l2) + + sw = -leg_pose[0] + x = l3 * math.sin(alpha + sw) - l1 * math.sin(ext + sw) + y = l3 * math.cos(alpha + sw) - l1 * math.cos(ext + sw) + + return (x, -y) + + +def foot_position_to_leg_pose(foot_position): + """The inverse kinematics.""" + l1 = UPPER_LEG_LEN + l2 = LOWER_SHORT_LEG_LEN + l3 = LOWER_LONG_LEG_LEN + + x = foot_position[0] + y = foot_position[1] + + assert y < 0 + hip_toe_sqr = x**2 + y**2 + cos_beta = (l1 * l1 + l3 * l3 - hip_toe_sqr) / (2 * l1 * l3) + assert -1 <= cos_beta <= 1 + hip_ankle_sqr = l1 * l1 + l2 * l2 - 2 * l1 * l2 * cos_beta + hip_ankle = math.sqrt(hip_ankle_sqr) + cos_ext = -(l1 * l1 + hip_ankle_sqr - l2 * l2) / (2 * l1 * hip_ankle) + ext = math.acos(cos_ext) + + hip_toe = math.sqrt(hip_toe_sqr) + cos_theta = (hip_toe_sqr + hip_ankle_sqr - + (l3 - l2)**2) / (2 * hip_ankle * hip_toe) + + assert cos_theta > 0 + theta = math.acos(cos_theta) + sw = math.asin(x / hip_toe) - theta + return (-sw, ext) + + +def extension_to_ankle_dist(extension): + """Converts leg extension to ankle-hip distance in meters. + + The ankle is defined as the joint of the two lower links, which is different + from the toe which is the tip of the longer lower limb. + + Args: + extension: Float. the leg extension. + + Returns: + Float. The hip to ankle distance in meters. + + """ + l1 = UPPER_LEG_LEN + l2 = LOWER_SHORT_LEG_LEN + alpha = math.asin(l1 / l2 * math.sin(extension)) + return l2 * math.cos(alpha) - l1 * math.cos(extension) + + +def ankle_dist_to_extension(dist): + """Converts ankle-hip distance (meters) to extension.""" + l1 = UPPER_LEG_LEN + l2 = LOWER_SHORT_LEG_LEN + cos_extension = -(l1**2 + dist**2 - l2**2) / (2 * l1 * dist) + return math.acos(cos_extension) diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/model_predictive_control.py b/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/model_predictive_control.py new file mode 100644 index 000000000..739424360 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/model_predictive_control.py @@ -0,0 +1,149 @@ +# Lint as: python3 +"""Classic model predictive control methods.""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import math +from typing import Sequence +import numpy as np + +_MAX_ABS_RPY = 0.3 +_MAX_ABS_ANGULAR_VELOCITY = math.pi + +# The center of mass torque is computed using a simple PD control: tau = -KP * +# delta_rotation - KD * delta_angular_velocity +_TORQUE_KP = 2000 +_TORQUE_KD = 150 + +# For center of mass force, we only need to track position in the z direction +# (i.e. maintain the body height), and speed in x-y plane. +_FORCE_KP = 500 +_FORCE_KD = 200 + + +def compute_contact_force_projection_matrix( + foot_positions_in_com_frame: Sequence[Sequence[float]], + stance_foot_ids: Sequence[int], +) -> np.ndarray: + r"""Computes the 6 x 3n matrix to map contact force to com dynamics. + + This is essentially the vectorized rhs of com dynamics equation: + ma = \sum f + I\omega_dot = \sum r \cross f + + where the summation if over all feet in contact with ground. + + Caveats: Current we have not taken the com rotation into account as we assume + the com rotation would be small. Ideally we should rotate the foot_positions + to a world frame centered at com. Also, since absolute yaw angles are not + accurate dute to drifting, we should use (roll, pitch, 0) to do the foot + position projection. This feature will be quite useful for MPC. + TODO(b/143378213): Fix this. + + Args: + foot_positions_in_com_frame: the local position of each foot. + stance_foot_ids: The stance foot to be used to assemble the matrix. + + Returns: + The contact force projection matrix. + + """ + jacobians = [] + for foot_id in stance_foot_ids: + jv = np.identity(3) + foot_position = foot_positions_in_com_frame[foot_id] + x, y, z = foot_position[:3] + jw = np.array(((0, -z, y), (z, 0, -x), (-y, x, 0))) + jacobians.append(np.vstack((jv, jw))) + + return np.hstack(jacobians) + + +def plan_foot_contact_force( + mass: float, + inertia: np.ndarray, + com_position: np.ndarray, + com_velocity: np.ndarray, + com_roll_pitch_yaw: np.ndarray, + com_angular_velocity: np.ndarray, + foot_positions_in_com_frame: Sequence[Sequence[float]], + foot_contact_state: Sequence[bool], + desired_com_position: np.ndarray, + desired_com_velocity: np.ndarray, + desired_com_roll_pitch_yaw: np.ndarray, + desired_com_angular_velocity: np.ndarray, +): + """Plan the foot contact forces using robot states. + + TODO(b/143382305): Wrap this interface in a MPC class so we can use other + planning algorithms. + + Args: + mass: The total mass of the robot. + inertia: The diagnal elements [Ixx, Iyy, Izz] of the robot. + com_position: Center of mass position in world frame. Usually we cannot + accurrately obtain this without motion capture. + com_velocity: Center of mass velocity in world frame. + com_roll_pitch_yaw: Center of mass rotation wrt world frame in euler angles. + com_angular_velocity: The angular velocity (roll_dot, pitch_dot, yaw_dot). + foot_positions_in_com_frame: The position of all feet/toe joints in the body + frame. + foot_contact_state: Indicates if a foot is in contact with the ground. + desired_com_position: We usually just care about the body height. + desired_com_velocity: In world frame. + desired_com_roll_pitch_yaw: We usually care about roll and pitch, since yaw + measurement can be unreliable. + desired_com_angular_velocity: Roll and pitch change rate are usually zero. + Yaw rate is the turning speed of the robot. + + Returns: + The desired stance foot contact forces. + """ + del inertia + del com_position + body_height = [] + stance_foot_ids = [] + for foot_id, foot_position in enumerate(foot_positions_in_com_frame): + if not foot_contact_state[foot_id]: + continue + stance_foot_ids.append(foot_id) + body_height.append(foot_position[2]) + + avg_bogy_height = abs(sum(body_height) / len(body_height)) + + rpy = com_roll_pitch_yaw + rpy[:2] = np.clip(rpy[:2], -_MAX_ABS_RPY, _MAX_ABS_RPY) + rpy_dot = com_angular_velocity + rpy_dot = np.clip(rpy_dot, -_MAX_ABS_ANGULAR_VELOCITY, + _MAX_ABS_ANGULAR_VELOCITY) + + com_torque = -avg_bogy_height * ( + _TORQUE_KP * (rpy - desired_com_roll_pitch_yaw) + _TORQUE_KD * rpy_dot) + + # We don't care about the absolute yaw angle in the low level controller. + # Instead, we stabialize the angular velocity in the z direction. + com_torque[2] = -avg_bogy_height * _TORQUE_KD * ( + rpy_dot[2] - desired_com_angular_velocity[2]) + + # Track a desired com velocity. + com_force = -_FORCE_KD * (com_velocity - desired_com_velocity) + + # In the z-direction we also want to track the body height. + com_force[2] += mass * 9.8 - _FORCE_KP * ( + avg_bogy_height - desired_com_position[2]) + + com_force_torque = np.concatenate((com_force, com_torque)).transpose() + + # Map the com force torque to foot contact forces. + foot_force_to_com = compute_contact_force_projection_matrix( + foot_positions_in_com_frame, stance_foot_ids) + all_contact_force = -np.matmul( + np.linalg.pinv(foot_force_to_com), com_force_torque).transpose() + contact_force = {} + + for i, foot_id in enumerate(stance_foot_ids): + contact_force[foot_id] = all_contact_force[3 * i:3 * i + 3] + + return contact_force diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/multi_state_estimator.py b/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/multi_state_estimator.py new file mode 100644 index 000000000..60f8cd86b --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/multi_state_estimator.py @@ -0,0 +1,48 @@ +"""A class for combining multiple state estimators.""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +from typing import Any, Sequence + +import gin + +from pybullet_envs.minitaur.agents.baseline_controller import state_estimator + + +@gin.configurable +class MultiStateEstimator(state_estimator.StateEstimatorBase): + """Combine multiple state estimators. + + + This class can be used to combine multiple state estimators into one. For + example, one can use the COMVelocityEstimator to estimate the com velocity + and COMHeightEstimator to estimate the com height. + + """ + + def __init__( + self, + robot: Any, + state_estimators: Sequence[state_estimator.StateEstimatorBase], + ): + self._robot = robot + self._state_estimators = state_estimators + self.reset(0) + + def reset(self, current_time): + for single_state_estimator in self._state_estimators: + single_state_estimator.reset(current_time) + + def update(self, current_time): + for single_state_estimator in self._state_estimators: + single_state_estimator.update(current_time) + + def __getattr__(self, attr): + for single_state_estimator in self._state_estimators: + if hasattr(single_state_estimator, attr): + return getattr(single_state_estimator, attr) + raise ValueError( + "{} is not found in any of the state estimators".format(attr)) + diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/openloop_gait_generator.py b/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/openloop_gait_generator.py new file mode 100644 index 000000000..c8696dc27 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/openloop_gait_generator.py @@ -0,0 +1,194 @@ +"""Gait pattern planning module.""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import logging +import math +from typing import Any, Sequence + +import gin +import numpy as np + +from pybullet_envs.minitaur.agents.baseline_controller import gait_generator + +_DEFAULT_INITIAL_LEG_STATE = ( + gait_generator.LegState.STANCE, + gait_generator.LegState.STANCE, + gait_generator.LegState.STANCE, + gait_generator.LegState.STANCE, +) + +_NOMINAL_STANCE_DURATION = (0.25, 0.25, 0.25, 0.25) +_NOMINAL_DUTY_FACTOR = (0.6, 0.6, 0.6, 0.6) +_TROTTING_LEG_PHASE = (0, 0.5, 0.5, 0) +_NOMINAL_CONTACT_DETECTION_PHASE = 0.4 + + +@gin.configurable +class OpenloopGaitGenerator(gait_generator.GaitGenerator): + """Generates openloop gaits for quadruped robots. + + A flexible open-loop gait generator. Each leg has its own cycle and duty + factor. And the state of each leg alternates between stance and swing. One can + easily formuate a set of common quadruped gaits like trotting, pacing, + pronking, bounding, etc by tweaking the input parameters. + """ + + def __init__( + self, + robot: Any, + stance_duration: Sequence[float] = _NOMINAL_STANCE_DURATION, + duty_factor: Sequence[float] = _NOMINAL_DUTY_FACTOR, + initial_leg_phase: Sequence[float] = _TROTTING_LEG_PHASE, + contact_detection_force_threshold: float = 0, + contact_detection_phase_threshold: + float = _NOMINAL_CONTACT_DETECTION_PHASE, + ): + """Initializes the class. + + Args: + robot: A quadruped robot that at least implements the GetFootContacts API + and num_legs property. + stance_duration: The desired stance duration. + duty_factor: The ratio stance_duration / total_gait_cycle. + initial_leg_phase: The desired initial phase [0, 1] of the legs within the + full swing + stance cycle. + contact_detection_force_threshold: The minimal contact force required to + detect if a foot is in contact with the ground. For real robots this + needs to be larger (i.e. 25 for Laikago). + contact_detection_phase_threshold: Updates the state of each leg based on + contact info, when the current normalized phase is greater than this + threshold. This is essential to remove false positives in contact + detection when phase switches. For example, a swing foot at at the + beginning of the gait cycle might be still on the ground. + """ + self._robot = robot + self._stance_duration = stance_duration + self._duty_factor = duty_factor + self._swing_duration = np.array(stance_duration) / np.array( + duty_factor) - np.array(stance_duration) + if len(initial_leg_phase) != len( + list(self._robot.urdf_loader.get_end_effector_id_dict().values())): + raise ValueError( + "The number of leg phases should be the same as number of legs.") + self._initial_leg_phase = initial_leg_phase + + self._initial_leg_state = _DEFAULT_INITIAL_LEG_STATE + self._next_leg_state = [] + # The ratio in cycle is duty factor if initial state of the leg is STANCE, + # and 1 - duty_factory if the initial state of the leg is SWING. + self._initial_state_ratio_in_cycle = [] + for state, duty in zip(self._initial_leg_state, duty_factor): + assert state == gait_generator.LegState.STANCE + self._initial_state_ratio_in_cycle.append(duty) + self._next_leg_state.append(gait_generator.LegState.SWING) + + self._contact_detection_force_threshold = contact_detection_force_threshold + self._contact_detection_phase_threshold = contact_detection_phase_threshold + + # The normalized phase within swing or stance duration. + self._normalized_phase = None + + # The current leg state, when contact is considered. + self._leg_state = None + + # The desired leg state (i.e. SWING or STANCE). + self._desired_leg_state = None + + self.reset(0) + + def reset(self, current_time): + # The normalized phase within swing or stance duration. + self._normalized_phase = np.zeros( + len(list(self._robot.urdf_loader.get_end_effector_id_dict().values()))) + self._leg_state = list(self._initial_leg_state) + self._desired_leg_state = list(self._initial_leg_state) + + @property + def desired_leg_state(self) -> Sequence[gait_generator.LegState]: + """The desired leg SWING/STANCE states. + + Returns: + The SWING/STANCE states for all legs. + + """ + return self._desired_leg_state + + @property + def leg_state(self) -> Sequence[gait_generator.LegState]: + """The leg state after considering contact with ground. + + Returns: + The actual state of each leg after accounting for contacts. + """ + return self._leg_state + + @property + def swing_duration(self) -> Sequence[float]: + return self._swing_duration + + @property + def stance_duration(self) -> Sequence[float]: + return self._stance_duration + + @property + def normalized_phase(self) -> Sequence[float]: + """The phase within the current swing or stance cycle. + + Reflects the leg's phase within the curren swing or stance stage. For + example, at the end of the current swing duration, the phase will + be set to 1 for all swing legs. Same for stance legs. + + Returns: + Normalized leg phase for all legs. + + """ + return self._normalized_phase + + def update(self, current_time): + contact_state = [ + np.linalg.norm(contact_force) > self._contact_detection_force_threshold + for contact_force in self._robot.feet_contact_forces() + ] + + for leg_id in range( + len(list(self._robot.urdf_loader.get_end_effector_id_dict().values()))): + # Here is the explanation behind this logic: We use the phase within the + # full swing/stance cycle to determine if a swing/stance switch occurs + # for a leg. The threshold value is the "initial_state_ratio_in_cycle" as + # explained before. If the current phase is less than the initial state + # ratio, the leg is either in the initial state or has switched back after + # one or more full cycles. + full_cycle_period = ( + self._stance_duration[leg_id] / self._duty_factor[leg_id]) + # To account for the non-zero initial phase, we offset the time duration + # with the effect time contribution from the initial leg phase. + augmented_time = current_time + self._initial_leg_phase[ + leg_id] * full_cycle_period + phase_in_full_cycle = math.fmod(augmented_time, + full_cycle_period) / full_cycle_period + ratio = self._initial_state_ratio_in_cycle[leg_id] + if phase_in_full_cycle < ratio: + self._desired_leg_state[leg_id] = self._initial_leg_state[leg_id] + self._normalized_phase[leg_id] = phase_in_full_cycle / ratio + else: + # A phase switch happens for this leg. + self._desired_leg_state[leg_id] = self._next_leg_state[leg_id] + self._normalized_phase[leg_id] = (phase_in_full_cycle - ratio) / (1 - + ratio) + + self._leg_state[leg_id] = self._desired_leg_state[leg_id] + + # No contact detection at the beginning of each SWING/STANCE phase. + if (self._normalized_phase[leg_id] < + self._contact_detection_phase_threshold): + continue + if (self._leg_state[leg_id] == gait_generator.LegState.SWING and + contact_state[leg_id]): + logging.info("early touch down detected") + self._leg_state[leg_id] = gait_generator.LegState.EARLY_CONTACT + if (self._leg_state[leg_id] == gait_generator.LegState.STANCE and + not contact_state[leg_id]): + self._leg_state[leg_id] = gait_generator.LegState.LOSE_CONTACT diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/raibert_swing_leg_controller.py b/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/raibert_swing_leg_controller.py new file mode 100644 index 000000000..aad4b9b67 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/raibert_swing_leg_controller.py @@ -0,0 +1,242 @@ +"""The swing leg controller class.""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import copy +import math +from typing import Any, Mapping, Sequence, Tuple + +import gin +import numpy as np + +from pybullet_envs.minitaur.agents.baseline_controller import gait_generator as gait_generator_lib +from pybullet_envs.minitaur.agents.baseline_controller import leg_controller + +# The position correction coefficients in Raibert's formula. +_KP = 0.025 + +# At the end of swing, we leave a small clearance to prevent unexpected foot +# collision. +_FOOT_CLEARANCE_M = 0.0 +_DEFAULT_LOCAL_HIP_POSITIONS = ((0.21, -0.1157, 0), (0.21, 0.1157, 0), + (-0.21, -0.1157, 0), (-0.21, 0.1157, 0)) +_DEFAULT_SWING_EASE_UP_PHASE = 1.0 +_DEFAULT_SWING_EASE_UP_PERCENT = 1.0 +_FEED_FORWARD_TORQUES = (-0.7, 0, 0, 0.7, 0, 0, -0.7, 0, 0, 0.7, 0, 0) + + +def _gen_parabola(phase: float, start: float, mid: float, end: float) -> float: + """Gets a point on a parabola y = a x^2 + b x + c. + + The Parabola is determined by three points (0, start), (0.5, mid), (1, end) in + the plane. + + Args: + phase: Normalized to [0, 1]. A point on the x-axis of the parabola. + start: The y value at x == 0. + mid: The y value at x == 0.5. + end: The y value at x == 1. + + Returns: + The y value at x == phase. + """ + mid_phase = 0.5 + delta_1 = mid - start + delta_2 = end - start + delta_3 = mid_phase**2 - mid_phase + coef_a = (delta_1 - delta_2 * mid_phase) / delta_3 + coef_b = (delta_2 * mid_phase**2 - delta_1) / delta_3 + coef_c = start + + return coef_a * phase**2 + coef_b * phase + coef_c + + +def _gen_swing_foot_trajectory(input_phase: float, start_pos: Sequence[float], + end_pos: Sequence[float], ease_up_phase: float, + ease_up_percent: float) -> Tuple[float]: + """Generates the swing trajectory using a parabola. + + Args: + input_phase: the swing/stance phase value between [0, 1]. + start_pos: The foot's position at the beginning of swing cycle. + end_pos: The foot's desired position at the end of swing cycle. + ease_up_phase: Time length for the initial ease up phase dueing swing cycle. + ease_up_percent: Percentage of the swing cycle completed after + ease_up_phase. + + Returns: + The desired foot position at the current phase. + """ + # We augment the swing speed using the below formula. For the first portion of + # the swing cycle (ease_up_phase), the swing leg moves faster and finishes + # ease_up_percent% of the full swing trajectory. The rest of trajectory takes + # the rest of the swing cycle. Intuitely, we want to move the swing foot + # quickly to the target landing location and stay above the ground, in this + # way the control is more robust to perturbations to the body that may cause + # the swing foot to drop onto the ground earlier than expected. This is a + # common practice similar to the MIT cheetah and Marc Raibert's original + # controllers. + assert 0 <= ease_up_percent <= 1 + assert 0 <= ease_up_phase <= 1 + phase = input_phase + if input_phase <= ease_up_phase: + phase = ease_up_percent * math.sin(input_phase / + (2 * ease_up_phase) * math.pi) + else: + phase = ease_up_percent + (input_phase - ease_up_phase) * ( + 1 - ease_up_percent) / (1 - ease_up_phase) + + x = (1 - phase) * start_pos[0] + phase * end_pos[0] + y = (1 - phase) * start_pos[1] + phase * end_pos[1] + max_clearance = 0.1 + mid = max(end_pos[2], start_pos[2]) + max_clearance + z = _gen_parabola(phase, start_pos[2], mid, end_pos[2]) + + # PyType detects the wrong return type here. + return (x, y, z) # pytype: disable=bad-return-type + + +@gin.configurable +class RaibertSwingLegController(leg_controller.LegController): + """Controls the swing leg position using Raibert's formula. + + For details, please refer to chapter 2 in "Legged robbots that balance" by + Marc Raibert. The key idea is to stablize the swing foot's location based on + the CoM moving speed. + + """ + + def __init__( + self, + robot: Any, + gait_generator: Any, + state_estimator: Any, + desired_speed: Tuple[float] = (0, 0), + desired_twisting_speed: float = 0, + desired_height: float = 0.45, + foot_clearance: float = _FOOT_CLEARANCE_M, + local_hip_positions: Tuple[Tuple[float]] = _DEFAULT_LOCAL_HIP_POSITIONS, + ease_up_phase: float = _DEFAULT_SWING_EASE_UP_PHASE, + ease_up_percent: float = _DEFAULT_SWING_EASE_UP_PERCENT, + feed_forward_torques: Sequence[float] = _FEED_FORWARD_TORQUES + ): + """Initializes the class. + + Args: + robot: A robot instance. + gait_generator: Generates the stance/swing pattern. + state_estimator: Estiamtes the CoM speeds. + desired_speed: Behavior parameters. X-Y speed. + desired_twisting_speed: Behavior control parameters. + desired_height: Desired standing height. + foot_clearance: The foot clearance on the ground at the end of the swing + cycle. + local_hip_positions: Positions of the robot's hips in local frames. + ease_up_phase: Time length for the initial ease up phase dueing swing + cycle. + ease_up_percent: Percentage of the swing cycle completed after + ease_up_phase. + feed_forward_torques: A feed-forward torque applied to the actuators on + the swing legs (e.g. for gravity compensation). + """ + self._robot = robot + self._state_estimator = state_estimator + self._gait_generator = gait_generator + self._last_leg_state = gait_generator.desired_leg_state + self.desired_speed = np.array((desired_speed[0], desired_speed[1], 0)) + self.desired_twisting_speed = desired_twisting_speed + self._desired_height = np.array((0, 0, desired_height - foot_clearance)) + self._local_hip_positions = local_hip_positions + self._ease_up_phase = ease_up_phase + self._ease_up_percent = ease_up_percent + self._feed_forward_torques = feed_forward_torques + + self._joint_angles = None + self._phase_switch_foot_local_position = None + self.reset(0) + + def reset(self, current_time: float) -> None: + """Called during the start of a swing cycle. + + Args: + current_time: The wall time in seconds. + """ + del current_time + self._last_leg_state = self._gait_generator.desired_leg_state + self._phase_switch_foot_local_position = (self._robot.foot_positions()) + self._joint_angles = {} + + def update(self, current_time: float) -> None: + """Called at each control step. + + Args: + current_time: The wall time in seconds. + """ + del current_time + new_leg_state = self._gait_generator.desired_leg_state + + # Detects phase switch for each leg so we can remember the feet position at + # the beginning of the swing phase. + for leg_id, state in enumerate(new_leg_state): + if (state == gait_generator_lib.LegState.SWING and + state != self._last_leg_state[leg_id]): + self._phase_switch_foot_local_position[leg_id] = ( + self._robot.foot_positions()[leg_id]) + + self._last_leg_state = copy.deepcopy(new_leg_state) + + def get_action(self) -> Mapping[Any, Any]: + com_velocity = self._state_estimator.com_velocity_body_yaw_aligned_frame + com_velocity = np.array((com_velocity[0], com_velocity[1], 0)) + + _, _, yaw_dot = self._robot.base_roll_pitch_yaw_rate + + local_toe_positions = np.array(self._robot.foot_positions()) + + for leg_id, leg_state in enumerate(self._gait_generator.leg_state): + if (leg_state == gait_generator_lib.LegState.STANCE or + leg_state == gait_generator_lib.LegState.EARLY_CONTACT): + continue + + # For now we did not consider the body pitch/roll and all calculation is + # in the body frame. TODO(b/143378213): Calculate the foot_target_position + # in world farme and then project back to calculate the joint angles. + hip_offset = self._local_hip_positions[leg_id] + twisting_vector = np.array((-hip_offset[1], hip_offset[0], 0)) + hip_horizontal_velocity = com_velocity + yaw_dot * twisting_vector + target_hip_horizontal_velocity = ( + self.desired_speed + self.desired_twisting_speed * twisting_vector) + + foot_target_position = ( + hip_horizontal_velocity * + self._gait_generator.swing_duration[leg_id] / 2 - _KP * + (target_hip_horizontal_velocity - hip_horizontal_velocity) + ) - self._desired_height + np.array((hip_offset[0], hip_offset[1], 0)) + + foot_position = _gen_swing_foot_trajectory( + self._gait_generator.normalized_phase[leg_id], + self._phase_switch_foot_local_position[leg_id], foot_target_position, + self._ease_up_phase, self._ease_up_percent) + + local_toe_positions[leg_id] = foot_position + joint_ids, joint_angles = self._robot.motor_angles_from_foot_positions( + local_toe_positions, position_in_world_frame=False) + # Update the stored joint angles as needed. + motors_per_leg = len(joint_ids) // len(local_toe_positions) + for joint_id, joint_angle in zip(joint_ids, joint_angles): + self._joint_angles[joint_id] = (joint_angle, joint_id // motors_per_leg) + + action = {} + kps, kds = self._robot.motor_model.get_motor_gains() + + for joint_id, joint_angle_leg_id in self._joint_angles.items(): + leg_id = joint_angle_leg_id[1] + if self._gait_generator.leg_state[ + leg_id] == gait_generator_lib.LegState.SWING: + # This is a hybrid action for PD control. + action[joint_id] = (joint_angle_leg_id[0], kps[joint_id], 0, + kds[joint_id], self._feed_forward_torques[joint_id]) + + return action diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/state_estimator.py b/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/state_estimator.py new file mode 100644 index 000000000..6b12a05ad --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/state_estimator.py @@ -0,0 +1,21 @@ +"""State estimator.""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import abc + + +class StateEstimatorBase(object): # pytype: disable=ignored-metaclass + """Estimates the unmeasurable state of the robot.""" + + __metaclass__ = abc.ABCMeta + + @abc.abstractmethod + def reset(self, current_time): + pass + + @abc.abstractmethod + def update(self, current_time): + pass diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/static_gait_controller.py b/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/static_gait_controller.py new file mode 100644 index 000000000..eb4ccdd1c --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/static_gait_controller.py @@ -0,0 +1,63 @@ +# Lint as: python3 +"""A static gait controller for a quadruped robot. Experimental code.""" + +import gin +import numpy as np +from pybullet_envs.minitaur.agents.baseline_controller import foot_stepper + +toe_pos_local_ref = np.array([[0.1478, -0.11459, -0.45576], + [0.1478, 0.11688, -0.45576], + [-0.2895, -0.11459, -0.45576], + [-0.2895, 0.11688, -0.45576]]) + + +@gin.configurable +class StaticGaitController(object): + """A static gait controller for a quadruped robot.""" + + def __init__(self, robot): + self._robot = robot + self._toe_ids = tuple(robot.urdf_loader.get_end_effector_id_dict().values()) + self._wait_count = 0 + self._stepper = foot_stepper.FootStepper(self._robot.pybullet_client, + self._toe_ids, toe_pos_local_ref) + + def act(self, observation): + """Computes actions based on observations.""" + del observation + p = self._robot.pybullet_client + quadruped = self._robot.robot_id + step_input = foot_stepper.StepInput() + ls = p.getLinkStates( + quadruped, self._toe_ids, computeForwardKinematics=True) + toe_pos_world = np.array([ls[0][0], ls[1][0], ls[2][0], ls[3][0]]) + base_com_pos, base_com_orn = p.getBasePositionAndOrientation(quadruped) + new_pos_world = np.array([0, 0, 0]) + + if self._stepper.is_com_stable() and not self._stepper.move_swing_foot: + self._wait_count += 1 + if self._wait_count == 20: + self._stepper.next_foot() + if self._wait_count > 50: + self._wait_count = 0 + step_dist = 0.15 + print("time {}, make a step of {}".format( + self._robot.GetTimeSinceReset(), step_dist)) + new_pos_local = self._stepper.get_reference_pos_swing_foot() + new_pos_local[0] += step_dist + new_pos_world, _ = p.multiplyTransforms(base_com_pos, base_com_orn, + new_pos_local, [0, 0, 0, 1]) + self._stepper.swing_foot() + + step_input.new_pos_world = new_pos_world + step_input.base_com_pos = base_com_pos + step_input.base_com_orn = base_com_orn + step_input.toe_pos_world = toe_pos_world + step_input.dt = 1.0 / 250 + step_output = self._stepper.update(step_input) + + # Finds joint poses to achieve toePosWorld + desired_joint_angles = self._robot.motor_angles_from_foot_positions( + foot_positions=step_output.new_toe_pos_world, + position_in_world_frame=True)[1] + return desired_joint_angles diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/time_based_moving_window_filter.py b/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/time_based_moving_window_filter.py new file mode 100644 index 000000000..42868795e --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/time_based_moving_window_filter.py @@ -0,0 +1,45 @@ +"""A moving-window filter for smoothing the signals within certain time interval.""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + + +import gin +import numpy as np + + +@gin.configurable +class TimeBasedMovingWindowFilter: + """A moving-window filter for smoothing the signals within certain time interval.""" + + def __init__( + self, + filter_window: float = 0.1, + ): + """Initializes the class. + + Args: + filter_window: The filtering window (in time) used to smooth the input + signal. + """ + self._filter_window = filter_window + self.reset() + + def reset(self): + self._timestamp_buffer = [] + self._value_buffer = [] + + def calculate_average(self, new_value, timestamp): + """Compute the filtered signals based on the time-based moving window.""" + self._timestamp_buffer.append(timestamp) + self._value_buffer.append(new_value) + + while len(self._value_buffer) > 1: + if self._timestamp_buffer[ + 0] < timestamp - self._filter_window: + self._timestamp_buffer.pop(0) + self._value_buffer.pop(0) + else: + break + return np.mean(self._value_buffer, axis=0) diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/torque_stance_leg_controller.py b/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/torque_stance_leg_controller.py new file mode 100644 index 000000000..87ebed458 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/agents/baseline_controller/torque_stance_leg_controller.py @@ -0,0 +1,229 @@ +# Lint as: python3 +"""A torque based stance controller framework.""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import functools +import logging +from typing import Any, Sequence, Tuple + +import gin +import numpy as np + +from pybullet_envs.minitaur.agents.baseline_controller import gait_generator as gait_generator_lib +from pybullet_envs.minitaur.agents.baseline_controller import leg_controller +#from pybullet_envs.minitaur.agents.baseline_controller.convex_mpc.python import convex_mpc +#from google3.util.task.python import error + +try: + import mpc_osqp as convex_mpc # pytype: disable=import-error +except: #pylint: disable=W0702 + print("You need to install motion_imitation") + print("or use pip3 install motion_imitation --user") + print("see also https://github.com/google-research/motion_imitation") + import sys + sys.exit() + + +_FORCE_DIMENSION = 3 +# The QP weights in the convex MPC formulation. See the MIT paper for details: +# https://ieeexplore.ieee.org/document/8594448/ +# Intuitively, this is the weights of each state dimension when tracking a +# desired CoM trajectory. The full CoM state is represented by +# (roll_pitch_yaw, position, angular_velocity, velocity, gravity_place_holder). +_MPC_WEIGHTS = (5, 5, 0.2, 0, 0, 10, 0.5, 0.5, 0.2, 0.2, 0.2, 0.1, 0) +_PLANNING_HORIZON_STEPS = 10 +_PLANNING_TIMESTEP = 0.025 +#_MPC_CONSTRUCTOR = functools.partial( +# convex_mpc.ConvexMpc, qp_solver_name=convex_mpc.QPSolverName.QPOASES) + + +@gin.configurable +class TorqueStanceLegController(leg_controller.LegController): + """A torque based stance leg controller framework. + + Takes in high level parameters like walking speed and turning speed, and + generates necessary the torques for stance legs. + """ + + def __init__( + self, + robot: Any, + gait_generator: Any, + state_estimator: Any, + desired_speed: Tuple[float] = (0, 0), + desired_twisting_speed: float = 0, + desired_roll_pitch: Tuple[float] = (0, 0), + desired_body_height: float = 0.45, + body_mass: float = 220 / 9.8, + body_inertia: Tuple[float] = (0.183375, 0, 0, 0, 0.6267, 0, 0, 0, + 0.636175), + num_legs: int = 4, + friction_coeffs: Sequence[float] = (0.5, 0.5, 0.5, 0.5), + qp_weights: Sequence[float] = _MPC_WEIGHTS, + planning_horizon: int = _PLANNING_HORIZON_STEPS, + planning_timestep: int = _PLANNING_TIMESTEP, + ): + """Initializes the class. + + Tracks the desired position/velocity of the robot by computing proper joint + torques using MPC module. + + Args: + robot: A robot instance. + gait_generator: Used to query the locomotion phase and leg states. + state_estimator: Estimate the robot states (e.g. CoM velocity). + desired_speed: desired CoM speed in x-y plane. + desired_twisting_speed: desired CoM rotating speed in z direction. + desired_roll_pitch: desired CoM roll and pitch. + desired_body_height: The standing height of the robot. + body_mass: The total mass of the robot. + body_inertia: The inertia matrix in the body principle frame. We assume + the body principle coordinate frame has x-forward and z-up. + num_legs: The number of legs used for force planning. + friction_coeffs: The friction coeffs on the contact surfaces. + qp_weights: The weights used in solving the QP problem. + planning_horizon: Number of steps to roll-out in the QP formulation. + planning_timestep: Timestep between each step in the QP formulation. + """ + + self._robot = robot + self._gait_generator = gait_generator + self._state_estimator = state_estimator + self._desired_speed = desired_speed + self._desired_twisting_speed = desired_twisting_speed + self._desired_roll_pitch = desired_roll_pitch + self._desired_body_height = desired_body_height + self._body_mass = body_mass + self._num_legs = num_legs + self._friction_coeffs = np.array(friction_coeffs) + self._qp_solver_fail = False + self._com_estimate_leg_indices = None + qp_solver = convex_mpc.QPOASES #convex_mpc.OSQP # + + body_inertia_list = list(body_inertia) + weights_list = list(qp_weights) + + self._mpc = convex_mpc.ConvexMpc( + body_mass, + body_inertia_list, + self._num_legs, + planning_horizon, + planning_timestep, + weights_list, + 1e-6, + qp_solver + ) + + + def reset(self, current_time): + del current_time + self._qp_solver_fail = False + self._com_estimate_leg_indices = None + + def update(self, current_time): + del current_time + + def get_action(self): + """Computes the torque for stance legs.""" + desired_com_position = np.array((0., 0., self._desired_body_height), + dtype=np.float64) + desired_com_velocity = np.array( + (self.desired_speed[0], self.desired_speed[1], 0.), dtype=np.float64) + desired_com_roll_pitch_yaw = np.array( + (self.desired_roll_pitch[0], self.desired_roll_pitch[1], 0.), + dtype=np.float64) + desired_com_angular_velocity = np.array( + (0., 0., self.desired_twisting_speed), dtype=np.float64) + foot_contact_state = np.array( + [(leg_state == gait_generator_lib.LegState.STANCE or + leg_state == gait_generator_lib.LegState.EARLY_CONTACT) + for leg_state in self._gait_generator.desired_leg_state], + dtype=np.int32) + + # We use the body yaw aligned world frame for MPC computation. + com_roll_pitch_yaw = np.array( + self._robot.base_roll_pitch_yaw, dtype=np.float64) + com_roll_pitch_yaw[2] = 0 + #try: + estimated_com_position = np.array(()) + if hasattr(self._state_estimator, "estimated_com_height"): + estimated_com_position = np.array( + (0, 0, self._state_estimator.estimated_com_height)) + try: + predicted_contact_forces = self._mpc.compute_contact_forces( + estimated_com_position, #com_position + np.asarray(self._state_estimator.com_velocity_body_yaw_aligned_frame, + dtype=np.float64), #com_velocity + np.array(com_roll_pitch_yaw, dtype=np.float64), #com_roll_pitch_yaw + # Angular velocity in the yaw aligned world frame is actually different + # from rpy rate. We use it here as a simple approximation. + np.asarray(self._robot.base_roll_pitch_yaw_rate, + dtype=np.float64), #com_angular_velocity + foot_contact_state, #foot_contact_states + np.array(self._robot.foot_positions( + position_in_world_frame=False).flatten(), + dtype=np.float64), #foot_positions_base_frame + self._friction_coeffs, #foot_friction_coeffs + desired_com_position, #desired_com_position + desired_com_velocity, #desired_com_velocity + desired_com_roll_pitch_yaw, #desired_com_roll_pitch_yaw + desired_com_angular_velocity #desired_com_angular_velocity + ) + except:# error.StatusNotOk as e: + logging.error("Error in Torque Stance Leg")#e.message) + self._qp_solver_fail = True + predicted_contact_forces = np.zeros(self._num_legs * _FORCE_DIMENSION) + + contact_forces = {} + for i in range(self._num_legs): + contact_forces[i] = np.array( + predicted_contact_forces[i * _FORCE_DIMENSION:(i + 1) * + _FORCE_DIMENSION]) + + _, kds = self._robot.motor_model.get_motor_gains() + action = {} + for leg_id, force in contact_forces.items(): + motor_torques = self._robot.map_contact_force_to_joint_torques( + leg_id, force) + for joint_id, torque in motor_torques.items(): + action[joint_id] = (0, 0, 0, kds[joint_id], torque) + return action + + @property + def qp_solver_fail(self): + return self._qp_solver_fail + + @property + def desired_speed(self): + return self._desired_speed + + @desired_speed.setter + def desired_speed(self, speed): + self._desired_speed = speed + + @property + def desired_twisting_speed(self): + return self._desired_twisting_speed + + @desired_twisting_speed.setter + def desired_twisting_speed(self, twisting_speed): + self._desired_twisting_speed = twisting_speed + + @property + def desired_roll_pitch(self): + return self._desired_roll_pitch + + @desired_roll_pitch.setter + def desired_roll_pitch(self, roll_pitch): + self._desired_roll_pitch = roll_pitch + + @property + def desired_body_height(self): + return self._desired_body_height + + @desired_body_height.setter + def desired_body_height(self, body_height): + self._desired_body_height = body_height diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/agents/trajectory_generator/controller_simple.py b/examples/pybullet/gym/pybullet_envs/minitaur/agents/trajectory_generator/controller_simple.py new file mode 100644 index 000000000..746e4cfd5 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/agents/trajectory_generator/controller_simple.py @@ -0,0 +1,87 @@ +"""Asymmetric sine controller for quadruped locomotion. + +Asymmetric sine uses cosine and sine waves to generate swinging and extension +for leg motion. It's asymmetric because sine waves are split into two phases +(swing forward and stance) and these phases have different frequencies according +to what proportion of a period will be spend on swinging forward forward +swinging backwards. In addition, the sine wave for extension has different +amplitudes during these two phases. +""" +import math + +TWO_PI = 2 * math.pi +_DEFAULT_LEG_AMPLITUDE_EXTENSION = -0.02 +_DEFAULT_LEG_AMPLITUDE_SWING = 0.5 +_DEFAULT_LEG_AMPLITUDE_LIFT = 0.9 +_DEFAULT_WALKING_HEIGHT = 0.0 +_DEFAULT_LEG_CENTER_SWING = 0.0 +_DELTA_CENTER_EXTENSION_CAP = 1 +_DELTA_INTENSITY_CAP = 0.1 + + +class SimpleLegController(object): + """Controller that gives swing and extension based on phase and parameters. + + + The controller returns the swing-extend pair based on a parameterized + ellipsoid trajectory that depends on center of motion, amplitude and phase. + The parameters are + amplitude_extension: Amplitude for extension during stance (phase < pi). + amplitude_lift: Amplitude for extension during swing (phase > pi). + amplitude_swing: Amplitude for swing. + center_extension: The value extension signal oscillates around. + center_swing: The value swing signal oscillates around. + intensity: A coefficient that scales the motion of the legs. + The formula to calculate motion and more detailed information about these + parameters can be found at go/pmtg-refactored. + """ + + def __init__(self, init_phase=0): + self.amplitude_extension = _DEFAULT_LEG_AMPLITUDE_EXTENSION + self.amplitude_swing = _DEFAULT_LEG_AMPLITUDE_SWING + self.amplitude_lift = _DEFAULT_LEG_AMPLITUDE_LIFT + self.center_extension = _DEFAULT_WALKING_HEIGHT + self.center_swing = _DEFAULT_LEG_CENTER_SWING + self.intensity = 1.0 + self._init_phase = init_phase + self.phase = init_phase + self.phase_offset = 0 + + def reset(self): + self.phase = self._init_phase + + def get_swing_extend(self): + """Returns the swing and extend parameters for the leg. + + Returns: + swing: Desired swing of the leg. + extend: Desired extension amount of the leg. + """ + + # Increase default extension by the extra extension scaled by intensity. + # Extend reduces to default center extension when intensity goes to 0, + # because we prefer the legs to stay at walking height when intensity is + # 0. + amplitude_extension = self.amplitude_extension + # The leg is in swing phase when phase > pi. + if self.phase > math.pi: + amplitude_extension = self.amplitude_lift + extend = self.center_extension + ( + amplitude_extension * math.sin(self.phase)) * self.intensity + # Calculate the swing based on the signal and scale it with intensity. + # Swing reduces to 0 when intensity goes to 0, because we would prefer the + # legs to stay neutral (standing position instead of center swing) when + # intensity is 0. + swing = self.center_swing + self.amplitude_swing * math.cos(self.phase) + swing *= self.intensity + + return swing, extend + + def adjust_center_extension(self, target_center_extension): + delta = min(_DELTA_CENTER_EXTENSION_CAP, + target_center_extension - self.center_extension) + self.center_extension += delta + + def adjust_intensity(self, target_intensity): + delta = min(_DELTA_INTENSITY_CAP, target_intensity - self.intensity) + self.intensity += delta diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/agents/trajectory_generator/tg_inplace.py b/examples/pybullet/gym/pybullet_envs/minitaur/agents/trajectory_generator/tg_inplace.py new file mode 100644 index 000000000..b07048e75 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/agents/trajectory_generator/tg_inplace.py @@ -0,0 +1,57 @@ +"""Trajectory Generator for in-place stepping motion for quadruped robot.""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import math +import numpy as np + +TWO_PI = 2 * math.pi + + +def _get_actions_asymmetric_sine(phase, tg_params): + """Returns the leg extension given current phase of TG and parameters. + + Args: + phase: a number in [0, 2pi) representing current leg phase + tg_params: a dictionary of tg parameters: + stance_lift_cutoff -- switches the TG between stance (phase < cutoff) and + lift (phase > cutoff) phase + amplitude_swing -- amplitude in swing phase + amplitude_lift -- amplitude in lift phase + center_extension -- center of leg extension + """ + stance_lift_cutoff = tg_params['stance_lift_cutoff'] + a_prime = np.where(phase < stance_lift_cutoff, tg_params['amplitude_stance'], + tg_params['amplitude_lift']) + scaled_phase = np.where( + phase > stance_lift_cutoff, np.pi + (phase - stance_lift_cutoff) / + (TWO_PI - stance_lift_cutoff) * np.pi, phase / stance_lift_cutoff * np.pi) + return tg_params['center_extension'] + a_prime * np.sin(scaled_phase) + + +def step(current_phases, leg_frequencies, dt, tg_params): + """Steps forward the in-place trajectory generator. + + Args: + current_phases: phases of each leg. + leg_frequencies: the frequency to proceed the phase of each leg. + dt: amount of time (sec) between consecutive time steps. + tg_params: a set of parameters for trajectory generator, see the docstring + of "_get_actions_asymmetric_sine" for details. + + Returns: + actions: leg swing/extensions as output by the trajectory generator. + new_state: new swing/extension. + """ + new_phases = np.fmod(current_phases + TWO_PI * leg_frequencies * dt, TWO_PI) + extensions = [] + for leg_id in range(4): + extensions.append( + _get_actions_asymmetric_sine(new_phases[..., leg_id], tg_params)) + return new_phases, extensions + + +def reset(): + return np.array([0, np.pi * 0.5, np.pi, np.pi * 1.5]) diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/agents/trajectory_generator/tg_simple.py b/examples/pybullet/gym/pybullet_envs/minitaur/agents/trajectory_generator/tg_simple.py new file mode 100644 index 000000000..c63884d81 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/agents/trajectory_generator/tg_simple.py @@ -0,0 +1,400 @@ +"""Trajectory Generator generates walking leg motions for a quadruped robot. + +Trajectory Generator (TG) has an internal state (phase) and generates +walking-like motion for 8 motors of minitaur quadruped robot based on +parameters +such as: + - delta time to progress the TG's internal state. + - intensity to control amount of movement (stride length and lift of the legs). + - waking height to control the average extension of the legs. + +Each time step() is called, the internal state is progressed and 8 motor +positions are generated. This TG uses the open-loop SineController class to +provide leg positions. It is mainly a wrapper for ability to modulating the +time +and other parameters of the SineController. +""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import math +import numpy as np +import gin +from pybullet_envs.minitaur.agents.trajectory_generator import controller_simple + +PHASE_LOWER_BOUND = 0.0 +PHASE_UPPER_BOUND = 1.0 +WALK_HEIGHT_LOWER_BOUND = -0.5 +WALK_HEIGHT_UPPER_BOUND = 1.0 +INTENSITY_LOWER_BOUND = 0.0 +INTENSITY_UPPER_BOUND = 1.5 +_SWING_STANCE_LOWER_BOUND = 0.2 +_SWING_STANCE_UPPER_BOUND = 5.0 +_DELTA_SWING_STANCE_CAP = 0.4 +_TWO_PI = math.pi * 2.0 +_LEG_COUPLING_DICT = { + "null": [], + # All the legs are coupled. + "all coupled": [0, 0, 0, 0], + # Front legs and back legs are coupled separately. + "front back": [0, 1, 0, 1], + # Left legs and right legs are coupled separately. + "left right": [0, 0, 1, 1], + # Diagonal legs are coupled (i.e. trottting). + "diagonal": [0, 1, 1, 0], + # Each leg is indepenent. + "decoupled": [0, 1, 2, 3] +} + + +@gin.configurable +class TgSimple(object): + """TgSimple class is a simplified trajectory generator for quadruped walking. + + It returns 8 actions for quadruped slow walking behavior + based on the parameters provided such as intensity, walking height and delta + time. It returns its internal phase as information. + """ + + def __init__(self, + walk_height_lower_bound=WALK_HEIGHT_LOWER_BOUND, + walk_height_upper_bound=WALK_HEIGHT_UPPER_BOUND, + intensity_lower_bound=INTENSITY_LOWER_BOUND, + intensity_upper_bound=INTENSITY_UPPER_BOUND, + swing_stance_lower_bound=_SWING_STANCE_LOWER_BOUND, + swing_stance_upper_bound=_SWING_STANCE_UPPER_BOUND, + integrator_coupling_mode="all coupled", + walk_height_coupling_mode="all coupled", + variable_swing_stance_ratio=False, + swing_stance_ratio=1.0, + init_leg_phase_offsets=None): + """Initialize the trajectory generator with a controller. + + For trajectory generator, we create an asymmetric sine controller with + parameters that was previously optimized as an open-loop controller. + + Args: + walk_height_lower_bound: Lower bound for walking height which sets the + default leg extension of the gait. Unit is rad, -0.5 by default. + walk_height_upper_bound: Lower bound for walking height which sets the + default leg extension of the gait. Unit is rad, 1.0 by default. + intensity_lower_bound: The upper bound for intensity of the trajectory + generator. It can be used to limit the leg movement. + intensity_upper_bound: The upper bound for intensity of the trajectory + generator. It can be used to limit the leg movement. + swing_stance_lower_bound: Lower bound for the swing vs stance ratio + parameter. Default value is 0.2. + swing_stance_upper_bound: Upper bound for the swing vs stance ratio + parameter. Default value is 0.2. + integrator_coupling_mode: How the legs should be coupled for integrators. + walk_height_coupling_mode: The same coupling mode used for walking + heights for the legs. + variable_swing_stance_ratio: A boolean to indicate if the swing stance + ratio can change per time step or not. + swing_stance_ratio: Time taken by swing phase vs stance phase. This is + only relevant if variable_swing_stance_ratio is False. + init_leg_phase_offsets: The initial phases of the legs. A list of 4 + variables within [0,1). The order is front-left, rear-left, front-right + and rear-right. + + Raises: + ValueError: If parameters are not valid values. + """ + self._walk_height_lower_bound = walk_height_lower_bound + self._walk_height_upper_bound = walk_height_upper_bound + self._intensity_lower_bound = intensity_lower_bound + self._intensity_upper_bound = intensity_upper_bound + self._swing_stance_lower_bound = swing_stance_lower_bound + self._swing_stance_upper_bound = swing_stance_upper_bound + if not init_leg_phase_offsets: + init_leg_phase_offsets = [0, 0.25, 0.5, 0.75] + if len(init_leg_phase_offsets) != 4: + raise ValueError("The number of leg phase offsets is not equal to 4.") + if min(init_leg_phase_offsets) < 0 or max(init_leg_phase_offsets) >= 1: + raise ValueError("Leg phase offsets are not within [0,1)") + self._legs = [] + for period in init_leg_phase_offsets: + init_phase = period * 2 * math.pi + self._legs.append(controller_simple.SimpleLegController(init_phase)) + + if integrator_coupling_mode not in _LEG_COUPLING_DICT: + raise ValueError("Invalid integrator_coupling_mode.") + if walk_height_coupling_mode not in _LEG_COUPLING_DICT: + raise ValueError("Invalid walk_height_coupling_mode.") + + # Set the phase couplings and build a list of legs per phase coupling. + self._integrator_id_per_leg = _LEG_COUPLING_DICT[integrator_coupling_mode] + self._num_integrators = max( + self._integrator_id_per_leg) + 1 if self._integrator_id_per_leg else 0 + self._legs_per_integrator_id = [[], [], [], []] + for idx, phase_id in enumerate(self._integrator_id_per_leg): + self._legs_per_integrator_id[phase_id].append(self._legs[idx]) + + # For each integrator coupling, create a integrator unit. + # For each leg controlled by that phase generator, mark the phase offset. + self._integrator_units = [] + for legs_per_integrator in self._legs_per_integrator_id: + if legs_per_integrator: + circular_integrator = CircularAsymmetricalIntegratorUnit( + legs_per_integrator[0].phase) + self._integrator_units.append(circular_integrator) + for leg in legs_per_integrator: + leg.phase_offset = leg.phase - circular_integrator.phase + + # Set the walking heights couplings. + self._walk_height_id_per_leg = _LEG_COUPLING_DICT[walk_height_coupling_mode] + self._num_walk_heights = max( + self._walk_height_id_per_leg) + 1 if self._walk_height_id_per_leg else 0 + self._variable_swing_stance_ratio = variable_swing_stance_ratio + self._swing_stance_ratio = swing_stance_ratio + + def reset(self): + """Resets leg phase offsets to their initial values.""" + for leg in self._legs: + leg.reset() + for circular_integrator in self._integrator_units: + circular_integrator.reset() + + def get_parameter_bounds(self): + """Lower and upper bounds for the parameters generator's parameters. + + Returns: + 2-tuple of: + - Lower bounds for the parameters such as intensity, walking height and + lift fraction. + - Upper bounds for the same parameters. + """ + lower_bounds = [self._intensity_lower_bound] + upper_bounds = [self._intensity_upper_bound] + lower_bounds += [self._walk_height_lower_bound] * self._num_walk_heights + upper_bounds += [self._walk_height_upper_bound] * self._num_walk_heights + lower_bounds += [self._swing_stance_lower_bound + ] * self._variable_swing_stance_ratio + upper_bounds += [self._swing_stance_upper_bound + ] * self._variable_swing_stance_ratio + + return lower_bounds, upper_bounds + + def get_actions(self, delta_real_time, tg_params): + """Get actions for 8 motors after increasing the phase delta_time. + + Args: + delta_real_time: Time in seconds that have actually passed since the last + step of the trajectory generator. + tg_params: An ndarray of the parameters for generating the trajectory. The + parameters must be in the correct order (time_scale, intensity, + walking_height, and swing vs stance) + + Raises: + ValueError: In case the input dimension does not match expected. + Returns: + The rotations for all the 8 motors for this time step + returned in an array [front_left_motor_1, front_left_motor_2, etc]. + """ + speeds, intensity, heights, swing_stance_ratio = self._process_tg_params( + tg_params) + # Adjust the swing stance ratio of the controller (used for all four legs). + if swing_stance_ratio: + self.adjust_swing_stance_ratio(swing_stance_ratio) + # Adjust the walking height, intensity and swing vs stance of the legs. + for idx, leg in enumerate(self._legs): + leg.adjust_intensity(intensity) + if heights: + leg.adjust_center_extension(heights[self._walk_height_id_per_leg[idx]]) + + # Progress all the phase generators based on delta time. + for idx, integrator_unit in enumerate(self._integrator_units): + integrator_unit.progress_phase(speeds[idx] * delta_real_time, + self._swing_stance_ratio) + + # Set the phases for the legs based on their offsets with phase generators. + for phase_id, leg_list in enumerate(self._legs_per_integrator_id): + for leg in leg_list: + delta_period = leg.phase_offset / (2.0 * math.pi) + leg.phase = self._integrator_units[phase_id].calculate_progressed_phase( + delta_period, self._swing_stance_ratio) + + # Calculate swingextend and convert it to the motor rotations. + actions = [] + for idx, leg in enumerate(self._legs): + swing, extend = leg.get_swing_extend() + actions.extend([swing, extend]) + return actions + + def _process_tg_params(self, tg_params): + """Process the trajectory generator parameters and split them. + + Args: + tg_params: A list consisting of time_scales, intensity, walking_heights, + swing_stance_ratio. The size depends on the configuration and inital + flags. + + Returns: + time_scales: A list of multipliers of delta time (one per integrator). + intensity: Intensity of the trajectory generator (one variable). + walking_heights: Walking heights used for the legs. The length depends on + the coupling between the legs selected at the initialization. + swing_stance_ratio: The ratio of the speed of the leg during swing stance + vs stance phase. + """ + + # Check if the given input's dimension matches the expectation considering + # the number of parameters the trajectory generator uses. + if isinstance(tg_params, np.ndarray): + tg_params = tg_params.tolist() + expected_action_dim = 1 + self._num_integrators + self._num_walk_heights + if self._variable_swing_stance_ratio: + expected_action_dim += 1 + if len(tg_params) != expected_action_dim: + raise ValueError( + "Action dimension does not match the expectation {} vs {}".format( + len(tg_params), expected_action_dim)) + # Split input into different parts based on type. The order must match the + # order given by the order in get_parameter_bounds + time_scales = tg_params[0:self._num_integrators] + intensity = tg_params[self._num_integrators] + walking_heights = tg_params[(self._num_integrators + 1):( + 1 + self._num_integrators + self._num_walk_heights)] + swing_stance_ratio = None + if self._variable_swing_stance_ratio: + swing_stance_ratio = tg_params[1 + self._num_integrators + + self._num_walk_heights] + + return time_scales, intensity, walking_heights, swing_stance_ratio + + def get_state(self): + """Returns a list of floats representing the phase of the controller. + + The phase of the controller is composed of the phases of the integrators. + For each integrator, the phase is composed of 2 floats that represents the + sine and cosine of the phase of that integrator. + + Returns: + List containing sine and cosine of the phases of all the integrators. + """ + return [x for y in self._integrator_units for x in y.get_state()] + + def get_state_lower_bounds(self): + """Lower bounds for the internal state. + + Returns: + The list containing the lower bounds. + """ + return [PHASE_LOWER_BOUND] * 2 * self._num_integrators + + def get_state_upper_bounds(self): + """Upper bounds for the internal state. + + Returns: + The list containing the upper bounds. + """ + return [PHASE_UPPER_BOUND] * 2 * self._num_integrators + + def adjust_swing_stance_ratio(self, target_swing_stance_ratio): + """Adjust the parameter swing_stance_ratio towards a given target value. + + Args: + target_swing_stance_ratio: The target value for the ratio between swing + and stance phases. + """ + delta = min(_DELTA_SWING_STANCE_CAP, + target_swing_stance_ratio - self._swing_stance_ratio) + self._swing_stance_ratio += delta + + @property + def num_integrators(self): + """Gets the number of integrators used based on coupling mode.""" + return self._num_integrators + + +class CircularAsymmetricalIntegratorUnit(object): + """A circular integrator with asymmetry between first and second half. + + An integrator is a memory unit that accumulates the given parameter at every + time step. + A circular integrator is when the integrator cycles within [0,2pi]. + The phase of a circular integrator indicates the accumulated number and it is + stored as fmod of 2Pi. + Asymmetrical circular integrator has a further characteristic where it + distinguishes between the first half of the period vs the second half. It + allows the integrator to move at different speeds during these two periods. + From a locomotion perspective these two halves of the period can be considered + as swing and stance phases. The speed difference is calculated using the + variable swing_stance_ratio provided at every time step. + CircularAsymmetricalIntegratorUnit can be used to control one or multiple legs + depending on the preference. If more than one leg is assigned to a single unit + the other legs are calculated based on their initial phase difference. + """ + + def __init__(self, init_phase=0): + self._init_phase = init_phase + self.reset() + + def reset(self): + self.phase = self._init_phase + + def calculate_progressed_phase(self, delta_period, swing_stance_speed_ratio): + """Calculate a hypotethical phase based on the current phase and args. + + This is used to both calculate the new phase, as well as the current phase + of the other legs with a given offset of delta_period. + + Args: + delta_period: The fraction of the period to add to the current phase of + the integrator. If set to 1, the integrator will accomplish one full + period and return the same phase. The calculated phase will depend on + the current phase (if it is in first half vs second half) and swing vs + stance speed ratio. + swing_stance_speed_ratio: The ratio of the speed of the phase when it is + in swing (second half) vs stance (first half). Set to 1.0 by default, + making it symettric, same as a classical integrator. + + Returns: + The new phase between 0 and 2 * pi. + """ + stance_speed_coef = ( + swing_stance_speed_ratio + 1) * 0.5 / swing_stance_speed_ratio + swing_speed_coef = (swing_stance_speed_ratio + 1) * 0.5 + delta_left = delta_period + new_phase = self.phase + while delta_left > 0: + if 0 <= new_phase < math.pi: + delta_phase_multiplier = stance_speed_coef * _TWO_PI + new_phase += delta_left * delta_phase_multiplier + delta_left = 0 + if new_phase < math.pi: + delta_left = 0 + else: + delta_left = (new_phase - math.pi) / delta_phase_multiplier + new_phase = math.pi + else: + delta_phase_multiplier = swing_speed_coef * _TWO_PI + new_phase += delta_left * delta_phase_multiplier + if math.pi <= new_phase < _TWO_PI: + delta_left = 0 + else: + delta_left = (new_phase - _TWO_PI) / delta_phase_multiplier + new_phase = 0 + return math.fmod(new_phase, _TWO_PI) + + def progress_phase(self, delta_period, swing_stance_ratio): + """Updates the phase based on the current phase, delta period and ratio. + + Args: + delta_period: The fraction of the period to add to the current phase of + the integrator. If set to 1, the integrator will accomplish one full + period and return the same phase. The calculated phase will depend on + the current phase (if it is in first half vs second half) and swing vs + stance speed ratio. + swing_stance_ratio: The ratio of the speed of the phase when it is in + swing (second half) vs stance (first half). Set to 1.0 by default, + making it symettric, same as a classical integrator. + """ + self.phase = self.calculate_progressed_phase(delta_period, + swing_stance_ratio) + + def get_state(self): + """Returns the sin and cos of the phase as state.""" + return [(math.cos(self.phase) + 1) / 2.0, (math.sin(self.phase) + 1) / 2.0] diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/__init__.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/base_client.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/base_client.py new file mode 100644 index 000000000..523780124 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/base_client.py @@ -0,0 +1,63 @@ +"""Base class for simulation client.""" + +import enum +from typing import Text + +GRAY = (0.3, 0.3, 0.3, 1) + + +class ClientType(enum.Enum): + """Type of client.""" + BULLET = "pybullet" + + + +class ClientMode(enum.Enum): + """Client running mode.""" + + # Client is being initialized, object is being loaded, teleported, etc. + CONFIGURATION = 1 + + # Client is in a mode that simulate motion according to physics and control. + SIMULATION = 2 + + +class WrongClientModeError(Exception): + """Client mode does not meet expectation (e.g. load object in sim mode).""" + + +class BaseClient(object): + """Base class for simulation client.""" + + def __init__(self, client_type: Text = ""): + self._client_type = client_type + + # Default to configuration mode. + self._client_mode = ClientMode.CONFIGURATION + + @property + def client_type(self) -> ClientType: + return self._client_type + + def switch_mode(self, mode: ClientMode) -> bool: + """Switches running mode of simulation client and return if mode changed.""" + if mode not in (ClientMode.CONFIGURATION, ClientMode.SIMULATION): + raise ValueError(f"Invalid client mode {mode}.") + if mode == self._client_mode: + return False + self._client_mode = mode + return True + + @property + def client_mode(self) -> ClientMode: + """Returns current client mode.""" + return self._client_mode + + def _assert_in_configuration_mode(self, operation: Text = "this operation"): + """Raises exception if client is not in configuration mode.""" + if self._client_mode != ClientMode.CONFIGURATION: + raise WrongClientModeError( + f"Sim client is expected to be in configuration mode for " + f"{operation}.") + + diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/curriculum_reset_helpers.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/curriculum_reset_helpers.py new file mode 100644 index 000000000..86fa8cfc3 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/curriculum_reset_helpers.py @@ -0,0 +1,62 @@ +"""Implements dynamic locomotion gym env that changes based on iteration.""" +import gin + +import pybullet + + +# TODO(b/142642890): Make this reset to the initial world state first. +@gin.configurable +def gap_task_curriculum_update(env, + num_iter, + distance_to_gap_or_hurdle=1.5, + initial_gap_length=0.1, + max_iterations=500, + gap_delta=0.0008): + """Linearly increase the gap width wrt the iteration number. + + This is specific to BuildSingleGapWorld. + + Args: + env: An instance of a LocomotionGymEnv. + num_iter: The training iteration we are on. + distance_to_gap_or_hurdle: The distance to the gap. + initial_gap_length: The starting gap length. + max_iterations: The number of iterations up to which we will modify the + environment. + gap_delta: The amount to increase the gap width by for each increase of 1 in + the iteration. + """ + + gap_length = initial_gap_length + gap_delta * min(max_iterations, num_iter) + env.task.reset( + env, + distance_to_gap_or_hurdle=distance_to_gap_or_hurdle, + gap_or_hurdle_width=gap_length) + + +@gin.configurable +def gap_world_curriculum_update(env, + num_iter, + initial_second_block_x=8.15, + max_iterations=500, + gap_delta=0.0008): + """Update the world, linearly increasing gap width wrt iteration number. + + This is specific to SingleGapScene. + + Args: + env: An instance of a LocomotionGymEnv. + num_iter: The training iteration we are on. + initial_second_block_x: The initial x position of the second block. + max_iterations: The number of iterations up to which we will modify the + environment. + gap_delta: The amount to increase the gap width by for each increase of 1 in + the iteration. + """ + + ground = env.scene.ground_ids + pos = pybullet.getBasePositionAndOrientation(ground[-1])[0] + # Linearly increase the gap width to 0.5m by the last iteration. + next_x = initial_second_block_x + gap_delta * min(max_iterations, num_iter) + pybullet.resetBasePositionAndOrientation(ground[-1], (next_x, pos[1], pos[2]), + [0, 0, 0, 1]) diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_loader.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_loader.py new file mode 100644 index 000000000..aa4afe495 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_loader.py @@ -0,0 +1,75 @@ +"""Load the locomotion gym env using the gin config files.""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import gin +from pybullet_envs.minitaur.envs_v2 import locomotion_gym_env +from pybullet_envs.minitaur.envs_v2 import multiagent_mobility_gym_env + +ROBOT_FIELD_IN_CONFIG = 'robot_params' +TASK_FIELD_IN_CONFIG = 'task_params' +PMTG_FIELD_IN_CONFIG = 'pmtg_params' +_PMTG_GIN_QUERY = 'pmtg_wrapper_env.PmtgWrapperEnv.' + + +@gin.configurable +def load(wrapper_classes=None, multiagent=False, **kwargs): + """load a pre-defined locomotion gym environment. + + The env specific settings should have been set in the gin files. + + Args: + wrapper_classes: A list of wrapper_classes. + multiagent: Whether to use multiagent environment. + **kwargs: Keyword arguments to be passed to the environment constructor. + + Returns: + env: The instance of the minitaur gym environment. + """ + # Gin config are not always specified this way (e.g. namescoped config). + # Only guery parameters when it is necessary. + if any( + k in (PMTG_FIELD_IN_CONFIG, TASK_FIELD_IN_CONFIG, ROBOT_FIELD_IN_CONFIG) + for k in kwargs): + with gin.unlock_config(): + if multiagent: + # Currently assume robots and tasks are identical + robot_class = gin.query_parameter( + 'multiagent_mobility_gym_env.MultiagentMobilityGymEnv.robot_classes' + )[0].selector + task = gin.query_parameter( + 'multiagent_mobility_gym_env.MultiagentMobilityGymEnv.tasks' + )[0].selector + else: + robot_class = gin.query_parameter( + 'locomotion_gym_env.LocomotionGymEnv.robot_class').selector + task = gin.query_parameter( + 'locomotion_gym_env.LocomotionGymEnv.task').selector + gin_prefix_dict = { + PMTG_FIELD_IN_CONFIG: _PMTG_GIN_QUERY, + TASK_FIELD_IN_CONFIG: task + '.', + ROBOT_FIELD_IN_CONFIG: robot_class + '.', + } + for field_name, field_values in kwargs.items(): + if field_name in gin_prefix_dict: + for var_name, value in field_values.items(): + gin.bind_parameter(gin_prefix_dict[field_name] + var_name, value) + else: + raise ValueError( + 'Environment argument type is not found in gin_prefix_dict.') + if multiagent: + env = multiagent_mobility_gym_env.MultiagentMobilityGymEnv() + else: + env = locomotion_gym_env.LocomotionGymEnv() + if wrapper_classes is not None: + # A little macro for the automatic list expansion + if not isinstance(wrapper_classes, list): + wrapper_classes = [wrapper_classes] + + # Wrap environments with user-provided wrappers + # (e.g. TrajectoryGeneratorWrapperEnv) + for wrapper_cls in wrapper_classes: + env = wrapper_cls(env) + return env diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/__init__.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/action_denormalize_wrapper.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/action_denormalize_wrapper.py new file mode 100644 index 000000000..edfead1ab --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/action_denormalize_wrapper.py @@ -0,0 +1,41 @@ +"""Denormalize the action from [-1, 1] to the env.action_space.""" + +import gin +import gym +import numpy as np + + +def _denomralize(env, action): + action = np.array(action) + low = np.array(env.action_space.low) + high = np.array(env.action_space.high) + return (high - low) / 2.0 * action + (high + low) / 2.0 + + +@gin.configurable +class ActionDenormalizeWrapper(object): + """An env wrapper that denormalize the action from [-1, 1] to the bounds.""" + + def __init__(self, gym_env): + """Initializes the wrapper.""" + self._gym_env = gym_env + self.action_space = gym.spaces.Box( + low=-1.0, + high=1.0, + shape=self._gym_env.action_space.low.shape, + dtype=np.float32) + + def __getattr__(self, attr): + return getattr(self._gym_env, attr) + + def step(self, action): + """Steps the wrapped environment. + + Args: + action: Numpy array between [-1.0, 1.0]. + + Returns: + The tuple containing the observation, the reward, and the epsiode + end indicator. + """ + return self._gym_env.step(_denomralize(self._gym_env, action)) diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/alternating_legs_openloop.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/alternating_legs_openloop.py new file mode 100644 index 000000000..85a8d99c2 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/alternating_legs_openloop.py @@ -0,0 +1,125 @@ +"""A trajectory generator that return signals for alternating legs.""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import google_type_annotations +from __future__ import print_function + +import math +import attr +import gin +from gym import spaces +import numpy as np +from pybullet_envs.minitaur.envs.utilities import laikago_pose_utils + +TROT_GAIT = "trot" +PACE_GAIT = "pace" +NUM_MOTORS_LAIKAGO = 12 +STD_FOR_GAUSSIAN_TRAJECTORY = 0.15 +MOTION_FREQUENCY = 1.0 +MOTION_AMPLITUDE = 0.25 +ACTION_BOUND = 0.25 + + +# TODO(b/131193449): Add a test to this class. +@gin.configurable +class LaikagoAlternatingLegsTrajectoryGenerator(object): + """A trajectory generator that return signals for alternating legs.""" + + def __init__( + self, + init_abduction=laikago_pose_utils.LAIKAGO_DEFAULT_ABDUCTION_ANGLE, + init_hip=laikago_pose_utils.LAIKAGO_DEFAULT_HIP_ANGLE, + init_knee=laikago_pose_utils.LAIKAGO_DEFAULT_KNEE_ANGLE, + amplitude=MOTION_AMPLITUDE, + frequency=MOTION_FREQUENCY, + gait=PACE_GAIT, # can be TROT_GAIT or PACE_GAIT + ): + """Initializes the controller.""" + self._pose = np.array( + attr.astuple( + laikago_pose_utils.LaikagoPose( + abduction_angle_0=init_abduction, + hip_angle_0=init_hip, + knee_angle_0=init_knee, + abduction_angle_1=init_abduction, + hip_angle_1=init_hip, + knee_angle_1=init_knee, + abduction_angle_2=init_abduction, + hip_angle_2=init_hip, + knee_angle_2=init_knee, + abduction_angle_3=init_abduction, + hip_angle_3=init_hip, + knee_angle_3=init_knee))) + action_high = np.array([ACTION_BOUND] * NUM_MOTORS_LAIKAGO) + self.action_space = spaces.Box(-action_high, action_high, dtype=np.float32) + self.amplitude = amplitude + self.period = 1.0 / frequency + self.gait = gait + + def _alternating_legs_trajectory(self, t): + """The reference trajectory of each joint when alternating legs. + + Args: + t: The time since the latest robot reset. + + Returns: + An array of 12 desired motor angles. + """ + phase_in_period = (t % self.period) / self.period + is_first_half_gait = phase_in_period < 0.5 + if self.gait == TROT_GAIT and is_first_half_gait: + phases = [0, 1, 1, 0] # 0 means stance and 1 means retraction. + elif self.gait == TROT_GAIT and not is_first_half_gait: + phases = [1, 0, 0, 1] + elif self.gait == PACE_GAIT and is_first_half_gait: + phases = [0, 1, 0, 1] + elif self.gait == PACE_GAIT and not is_first_half_gait: + phases = [1, 0, 1, 0] + else: + raise ValueError("{} gait is not supported in alternating legs.".format( + self.gait)) + + phase_step_center = 0.25 if is_first_half_gait else 0.75 + std = STD_FOR_GAUSSIAN_TRAJECTORY + # Uses Gaussian instead of sine for gentle foot touch down. + # The following joint angles are added to self._pose. + retract_hip_angle = self.amplitude * math.exp( + -(phase_in_period - phase_step_center) * + (phase_in_period - phase_step_center) / (std * std)) + retract_knee_angle = -2.0 * retract_hip_angle + retract_abduction_angle = 0.0 + stance_hip_angle = 0.0 + stance_knee_angle = 0.0 + stance_abduction_angle = 0.0 + angles = [] + for is_retract in phases: + if is_retract: + angles.extend([retract_abduction_angle, retract_hip_angle, + retract_knee_angle]) + else: + angles.extend([stance_abduction_angle, stance_hip_angle, + stance_knee_angle]) + return np.array(angles) + + def reset(self): + pass + + def get_action(self, current_time, input_action): + """Computes the trajectory according to input time and action. + + Args: + current_time: The time in gym env since reset. + input_action: A numpy array. The input leg pose from a NN controller. + + Returns: + A numpy array. The desired motor angles. + """ + + return self._pose + self._alternating_legs_trajectory( + current_time) + input_action + + def get_observation(self, input_observation): + """Get the trajectory generator's observation.""" + + return input_observation diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/curriculum_wrapper_env.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/curriculum_wrapper_env.py new file mode 100644 index 000000000..1e2f33586 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/curriculum_wrapper_env.py @@ -0,0 +1,50 @@ +"""A wrapped LocomotionGymEnv with functions that change the world and task.""" + +import gin + + +@gin.configurable +class CurriculumWrapperEnv(object): + """A wrapped LocomotionGymEnv with an evolving environment.""" + + def __init__(self, + gym_env, + num_iter=0, + curriculum_world_update=None, + curriculum_task_update=None): + """Initializes the wrapped env. + + Args: + gym_env: An instance of a (potentially previously wrapped) + LocomotionGymEnv. + num_iter: The training iteration we are on. + curriculum_world_update: A function that updates the environment based on + the iteration. Takes in the environment as an argument. + curriculum_task_update: A function that updates the task (eg. + observations) based on the iteration. Takes in the environment as an + argument. + """ + self._gym_env = gym_env + self._num_iter = num_iter + self._curriculum_world_update = curriculum_world_update + self._curriculum_task_update = curriculum_task_update + + def modify(self, step=0): + self._num_iter = step + + def __getattr__(self, attr): + return getattr(self._gym_env, attr) + + def reset(self, *args, **kwargs): + """Reset and adjust the environment.""" + self._gym_env.reset(*args, **kwargs) + if self._curriculum_world_update is not None: + self._curriculum_world_update(self._gym_env, self._num_iter) + if self._curriculum_task_update is not None: + self._curriculum_task_update(self._gym_env, self._num_iter) + return self._get_observation() + + # Used for testing. + @property + def num_iter(self): + return self._num_iter diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/depth_uv_to_footplacement_wrapper.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/depth_uv_to_footplacement_wrapper.py new file mode 100644 index 000000000..4b86b6df6 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/depth_uv_to_footplacement_wrapper.py @@ -0,0 +1,357 @@ +"""Change the action from uv of the depth map to xyz in world frame.""" + +import copy +import math +from typing import Sequence +import gin +import gym +import numpy as np + +from pybullet_envs.minitaur.robots import laikago_kinematic_constants +from pybullet_envs.minitaur.robots import quadruped_base +from pybullet_envs.minitaur.robots import wheeled_robot_base_sim + +UNIT_QUATERNION = (0, 0, 0, 1) +# A small gap between the target foot position and the floor. +FLOOR_HEIGHT_EPSILON = 0.02 +FOOT_HEIGHT_CLEARNCE = 0.075 +BASE_MOVEMENT_SPEED = 0.3 +INIT_ABDUCTION_ANGLE = laikago_kinematic_constants.INIT_ABDUCTION_ANGLE +INIT_HIP_ANGLE = laikago_kinematic_constants.INIT_HIP_ANGLE +INIT_KNEE_ANGLE = laikago_kinematic_constants.INIT_KNEE_ANGLE +NUM_LEGS = laikago_kinematic_constants.NUM_LEGS +COM_VIZ_BOX_SIZE = [0.025, 0.025, 0.005] +_DEFAULT_JOINT_POSE = (INIT_ABDUCTION_ANGLE, INIT_HIP_ANGLE, + INIT_KNEE_ANGLE) * NUM_LEGS +# Weights for computing the target COM from the supporting feet locations. +# The target COM for the front feet are biased forward for better robot +# stability and seeing farther in distance, which enables larger steps. +_SUPPORT_WEIGHT_MAP = [[0.0, 0.4, 0.3, 0.3], [0.4, 0.0, 0.3, 0.3], + [1.0 / 3, 1.0 / 3, 0.0, 1.0 / 3], + [1.0 / 3, 1.0 / 3, 1.0 / 3, 0.0]] +_TASK_SENSOR_NAME = "sensors" + + +@gin.configurable +class DepthUVToFootPlacementWrapper(object): + """Changes the action from a point in depth map to a point in the world frame. + + Attributes: + observation: The current observation of the environment. + last_action: The last that was used to step the environment. + env_step_counter: The number of control steps that have been elapesed since + the environment is reset. + action_space: The action space of the environment. + """ + + def __init__(self, + gym_env, + visualization=True, + foot_movement=False, + foot_clearance_height=FOOT_HEIGHT_CLEARNCE, + base_movement_speed=BASE_MOVEMENT_SPEED, + foothold_update_frequency=4): + """Initializes the wrapper. + + Args: + gym_env: the wrapped gym environment. The robot is controlled + kinematically when gym_env.robot inherits from WheeledRobotBase and is + controlled dynamically using a static gait controller when gym_env.robot + inherits from QudrupedBase. + visualization: whether to draw a sphere that represents the foothold + position. + foot_movement: whether move the toe to the desired foothold position using + IK for visualization/debugging purpose. + foot_clearance_height: the maximum height of the swing foot. + base_movement_speed: the speed of the robot base. + foothold_update_frequency: the frequency of updating the foothold, which + is the same as the frequency of the steps. The default value 4 means + four steps (1 complete cycle of static gait) per second. + """ + self._gym_env = gym_env + self._num_control_steps_per_foothold_update = max( + 1, int(1.0 / foothold_update_frequency / self._gym_env.env_time_step)) + self.last_action = None + self._visualization = visualization + self._foot_movement = foot_movement + self._foot_clearance_height = foot_clearance_height + self._base_movement_speed = base_movement_speed + self._step_counter = 0 + self.observation_space.spaces["toe_position"] = gym.spaces.Box( + np.array([-1.0] * 3), np.array([1.0] * 3)) + self.action_space = gym.spaces.Box( + np.array([-1.0] * 2), np.array([1.0] * 2)) + self.task.reset(self) + if hasattr(self.task, _TASK_SENSOR_NAME): + self.observation_space.spaces[ + self.task.get_name()] = self.task.observation_space + + def __getattr__(self, attr): + return getattr(self._gym_env, attr) + + def reset(self, **kwargs): + """Reset the environment.""" + obs = self._gym_env.reset(**kwargs) + self.task.reset(self) + self._step_counter = 0 + current_end_effector_pos = np.array( + self._gym_env.robot.foot_positions()[self.task.swing_foot_id]) + self.last_action = [0, 0] + if self._visualization: + self._create_foot_placement_visualization() + self._create_com_visualization() + self._initial_local_toe_positions = np.array( + self._gym_env.robot.foot_positions(position_in_world_frame=False)) + + # Move COM to prepare for the first swing step. + if isinstance(self._gym_env.robot, quadruped_base.QuadrupedBase): + obs, _ = self._move_com_dynamic( + self.task.swing_foot_id, + self._num_control_steps_per_foothold_update // 3 * 2) + + # TODO(b/157614175): Adds a toe_position_sensor. + obs["toe_position"] = current_end_effector_pos + obs["vision"] = self.task.get_depth_image_for_foot() + obs["LastAction"] = self.last_action + + self._observation = obs + return self._observation + + def _move_kinematic(self): + """Move robot kinematically. + + Returns: + The tuple containing the observation and env info. + """ + if self._foot_movement: + toe_positions = np.array( + self._gym_env.robot.foot_positions(position_in_world_frame=True)) + toe_positions[:, 2] = FLOOR_HEIGHT_EPSILON + destination_foothold_xyz_global = self.task.get_foothold_location( + self.last_action, use_world_frame=True) + destination_foothold_xyz_global[2] = FLOOR_HEIGHT_EPSILON + joint_pose = _DEFAULT_JOINT_POSE + for i in range(self._num_control_steps_per_foothold_update): + if self._foot_movement: + alpha = i / (self._num_control_steps_per_foothold_update - 1) + toe_positions_over_time = copy.deepcopy(toe_positions) + toe_positions_over_time[self.task.swing_foot_id] = ( + self._construct_foot_trajectories( + alpha, toe_positions[self.task.swing_foot_id], + destination_foothold_xyz_global, self._foot_clearance_height)) + joint_pose = np.array( + self.robot.motor_angles_from_foot_positions( + toe_positions_over_time, position_in_world_frame=True)[1]) + action = { + wheeled_robot_base_sim.BASE_ACTION_NAME: + (self._base_movement_speed, 0), + wheeled_robot_base_sim.BODY_ACTION_NAME: + joint_pose, + } + obs, _, _, info = self._gym_env.step(action) + return obs, info + + def _move_com_dynamic(self, swing_foot_id, num_control_steps): + """Move robot COM to the weightd center of the support polygon through dynamics. + + Args: + swing_foot_id: Index of the swing foot. + num_control_steps: Total number of control steps for moving the COM. + + Returns: + The tuple containing the observation and env info. + """ + + toe_positions = np.array( + self._gym_env.robot.foot_positions(position_in_world_frame=False)) + support_polygon_center = np.array([0.0, 0.0, 0.0]) + for i in range(NUM_LEGS): + if i != swing_foot_id: + support_polygon_center += toe_positions[i] * _SUPPORT_WEIGHT_MAP[ + swing_foot_id][i] + support_polygon_center[2] = 0.0 + + for i in range(num_control_steps): + alpha = i / (num_control_steps - 1) + # Create a flat phase towards the end to stabilize the com movement. + alpha = np.clip(alpha * 1.1, 0, 1) + toe_positions_over_time = copy.deepcopy( + toe_positions) - alpha * support_polygon_center + # Use initial toe height to maintain the overal base height. + for j in range(len(toe_positions_over_time)): + toe_positions_over_time[j][2] = self._initial_local_toe_positions[j][2] + joint_pose = np.array( + self.robot.motor_angles_from_foot_positions( + toe_positions_over_time, position_in_world_frame=False)[1]) + obs, _, _, info = self._gym_env.step(joint_pose) + self._update_com_visualization() + return obs, info + + def _swing_leg_dynamic(self, swing_foot_id, destination_foothold_xyz_local, + num_control_steps): + """Move swing leg to the target foothold through IK and dynamics. + + Args: + swing_foot_id: Index of the swing foot. + destination_foothold_xyz_local: Target foothold position. + num_control_steps: Total number of control steps for swinging the leg. + + Returns: + The tuple containing the observation and env info. + """ + + local_toe_positions = np.array( + self._gym_env.robot.foot_positions(position_in_world_frame=False)) + + # Move swing leg + for i in range(num_control_steps): + alpha = i / (num_control_steps - 1) + toe_positions_over_time = copy.deepcopy(local_toe_positions) + toe_positions_over_time[swing_foot_id] = ( + self._construct_foot_trajectories(alpha, + local_toe_positions[swing_foot_id], + destination_foothold_xyz_local, + self._foot_clearance_height)) + joint_pose = np.array( + self.robot.motor_angles_from_foot_positions( + toe_positions_over_time, position_in_world_frame=False)[1]) + + obs, _, _, info = self._gym_env.step(joint_pose) + return obs, info + + def _move_dynamic(self): + """Move robot dynamically. + + Returns: + The tuple containing the observation and env info. + """ + destination_foothold_xyz_local = self.task.get_foothold_location( + self.last_action, use_world_frame=False) + # Lift the target foothold slightly to account for thickness of the feet. + destination_foothold_xyz_local[2] += FLOOR_HEIGHT_EPSILON + + # Swing leg in the first 1/3 of the duration. + self._swing_leg_dynamic(self.task.swing_foot_id, + destination_foothold_xyz_local, + self._num_control_steps_per_foothold_update // 3) + + # Move COM in the rest 2/3 of the duration. + obs, info = self._move_com_dynamic( + self.task.next_swing_foot_id, + self._num_control_steps_per_foothold_update // 3 * 2) + + return obs, info + + def step(self, action: Sequence[float]): + """Steps the wrapped environment. + + Args: + action: 2 dimensional numpy array between [-1.0, 1.0]. They represents the + depth image pixel index. We assume that only one foot is swinging in + this wrapper, and this is the foothold location for that swinging leg. + The order of the swinging leg and the index of the current swinging leg + is defined in stepstone_visiontask.py. + + Returns: + The tuple containing the observation, the reward, and the episode + end indicator. + """ + self.last_action = action + reward = self.task(self) + done = self.task.done(self) + if self._visualization: + self._update_foothold_visualization(action) + + if isinstance(self._gym_env.robot, quadruped_base.QuadrupedBase): + obs, info = self._move_dynamic() + else: + obs, info = self._move_kinematic() + + self._step_counter += 1 + current_end_effector_pos = np.array( + self._gym_env.robot.foot_positions()[self.task.swing_foot_id]) + obs["toe_position"] = current_end_effector_pos + obs["vision"] = self.task.get_depth_image_for_foot() + self._observation = obs + return obs, reward, done, info + + def _construct_foot_trajectories(self, alpha, swing_foot_start_position, + swing_foot_destination, + foot_clearance_height): + """Construct the target foot position for the swing foot. + + Args: + alpha: a float in [0.0, 1.0] indicating the phase of the swing foot. + swing_foot_start_position: foot position at the beginning of the swing + motion. + swing_foot_destination: target foot position at the end of the swing + motion. + foot_clearance_height: the maximum height of the swing foot. + + Returns: + The interpolated swing foot position. + """ + new_swing_foot_position = swing_foot_start_position + alpha * ( + swing_foot_destination - swing_foot_start_position) + new_swing_foot_position[2] += ( + foot_clearance_height * math.sin((alpha) * math.pi)) + return new_swing_foot_position + + def _create_foot_placement_visualization(self): + """Creates a visualization sphere that represents the foothold position.""" + visual_id = self._gym_env.pybullet_client.createVisualShape( + self._gym_env.pybullet_client.GEOM_SPHERE, + radius=0.02, + rgbaColor=[0.7, 0.7, 0.7, 1]) + self._foothold_visual_body = self._gym_env.pybullet_client.createMultiBody( + baseMass=0, baseVisualShapeIndex=visual_id, basePosition=[0, 0, 0]) + + def _update_foothold_visualization(self, action): + """Moves the visualization sphere that represents the next foothold.""" + foothold_xyz = self.task.get_foothold_location( + action, use_world_frame=True) + self._gym_env.pybullet_client.resetBasePositionAndOrientation( + self._foothold_visual_body, foothold_xyz, UNIT_QUATERNION) + + def _create_com_visualization(self): + """Creates visualization boxes for COM and support polygon center.""" + visual_id = self._gym_env.pybullet_client.createVisualShape( + self._gym_env.pybullet_client.GEOM_BOX, + halfExtents=COM_VIZ_BOX_SIZE, + rgbaColor=[0.7, 0.5, 0.5, 1]) + self._support_polygon_center_visual_body = self._gym_env.pybullet_client.createMultiBody( + baseMass=0, baseVisualShapeIndex=visual_id, basePosition=[0, 0, 0]) + + visual_id = self._gym_env.pybullet_client.createVisualShape( + self._gym_env.pybullet_client.GEOM_BOX, + halfExtents=COM_VIZ_BOX_SIZE, + rgbaColor=[0.5, 0.75, 0.5, 1]) + self._projected_com_visual_body = self._gym_env.pybullet_client.createMultiBody( + baseMass=0, baseVisualShapeIndex=visual_id, basePosition=[0, 0, 0]) + + def _update_com_visualization(self): + """Moves the visualization for the COM and support polygon center.""" + toe_positions = np.array( + self._gym_env.robot.foot_positions(position_in_world_frame=True)) + support_polygon_center_global = np.array([0.0, 0.0, 0.0]) + for i in range(NUM_LEGS): + if i != self.task.next_swing_foot_id: + support_polygon_center_global += toe_positions[i] * _SUPPORT_WEIGHT_MAP[ + self.task.next_swing_foot_id][i] + support_polygon_center_global[2] = 0.0 + self._gym_env.pybullet_client.resetBasePositionAndOrientation( + self._support_polygon_center_visual_body, support_polygon_center_global, + UNIT_QUATERNION) + + com = np.copy(self._gym_env.robot.base_position) + com[2] = 0.0 + self._gym_env.pybullet_client.resetBasePositionAndOrientation( + self._projected_com_visual_body, com, UNIT_QUATERNION) + + @property + def observation(self): + return self._observation + + @property + def env_step_counter(self): + return self._step_counter diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/fixed_steptime_wrapper_env.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/fixed_steptime_wrapper_env.py new file mode 100644 index 000000000..c06ffacab --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/fixed_steptime_wrapper_env.py @@ -0,0 +1,92 @@ +"""A wrapper that controls the timing between steps. +""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import google_type_annotations +from __future__ import print_function + +import time +import gin + + +@gin.configurable +class FixedSteptimeWrapperEnv(object): + """A wrapped LocomotionGymEnv with timing control between steps.""" + + def __init__(self, + gym_env, + desired_time_between_steps=None): + """Initializes the wrapper env. + + Args: + gym_env: An instance of LocomotionGymEnv. + desired_time_between_steps: The desired time between steps in seconds. + If this is None, it is set to the env_time_step of the gym_env. + """ + self._gym_env = gym_env + if desired_time_between_steps is None: + self._desired_time_between_steps = gym_env.env_time_step + else: + self._desired_time_between_steps = desired_time_between_steps + + self._last_reset_time = time.time() + self._last_step_time = time.time() + self._step_counter = 0 + + def __getattr__(self, attr): + return getattr(self._gym_env, attr) + + def reset(self, initial_motor_angles=None, reset_duration=1.0): + """Reset the environment. + + This function records the timing of the reset. + + Args: + initial_motor_angles: Not used. + reset_duration: Not used. + + Returns: + The observation of the environment after reset. + """ + obs = self._gym_env.reset(initial_motor_angles=initial_motor_angles, + reset_duration=reset_duration) + self._last_reset_time = time.time() + self._last_step_time = time.time() + self._step_counter = 0 + return obs + + def step(self, action): + """Steps the wrapped environment. + + Args: + action: Numpy array. The input action from an NN agent. + + Returns: + The tuple containing the observation, the reward, the epsiode end + indicator. + + Raises: + ValueError if input action is None. + """ + time_between_steps = time.time() - self._last_step_time + if time_between_steps < self._desired_time_between_steps: + time.sleep(self._desired_time_between_steps - time_between_steps) + self._last_step_time = time.time() + self._step_counter += 1 + return self._gym_env.step(action) + + @property + def elapsed_time(self): + """Returns the elapsed time in seconds.""" + return time.time() - self._last_reset_time + + @property + def steps_per_second(self): + """Returns the average number of time steps for 1 second.""" + return self._step_counter / self.elapsed_time + + @property + def seconds_per_step(self): + """Returns the average time between steps.""" + return self.elapsed_time / self._step_counter diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/ik_based_wrapper_env.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/ik_based_wrapper_env.py new file mode 100644 index 000000000..da80bf159 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/ik_based_wrapper_env.py @@ -0,0 +1,109 @@ +"""A wrapped Quadruped with Inverse Kinematics based controller.""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import gin +import gym +import numpy as np +from pybullet_envs.minitaur.robots import vision60 +from pybullet_envs.minitaur.robots.utilities import kinematics + +ACTION_DIM_PER_LEG = 3 +ACTION_DIM_BASE = 7 +ACTION_DIM_TOTAL = vision60.NUM_LEGS * ACTION_DIM_PER_LEG + ACTION_DIM_BASE + + +@gin.configurable +class IKBasedWrapperEnv(object): + """An env using IK to convert toe positions to joint angles.""" + + def __init__(self, + gym_env, + toe_indices=(3, 7, 11, 15), + abduction_motor_ids=(0, 3, 6, 9)): + """Initialzes the wrapped env. + + Args: + gym_env: An instance of LocomotionGymEnv. + toe_indices: A list of four pybullet joint indices for the four toes. [3, + 7, 11, 15] for the vision60. + abduction_motor_ids: A list of four pybullet joint indices for the four + abuduction motors. [0, 3, 6, 9] for the vision60. + """ + lower_bound = np.array([-1.0] * ACTION_DIM_TOTAL) + upper_bound = np.array([1.0] * ACTION_DIM_TOTAL) + self._gym_env = gym_env + self.action_space = gym.spaces.Box(lower_bound, upper_bound) + self._toe_ids = toe_indices + self._abduction_motor_ids = abduction_motor_ids + + def __getattr__(self, attr): + return getattr(self._gym_env, attr) + + def get_toe_indices(self): + return self._toe_ids + + def _joint_angles_from_toe_positions_and_base_pose(self, ik_actions): + """Uses Inverse Kinematics to calculate jont angles. + + Args: + ik_actions: The action should be local (x, y, z) for each toe. action for + each leg [x, y, z] in a local frame. This local frame is transformed + relative to the COM frame using a given translation, and rotation. The + total action space would be 3 + 4 + 3 * ACTION_DIM_PER_LEG = 16. + + Returns: + A list of joint angles. + """ + assert len(ik_actions) == ACTION_DIM_TOTAL + + base_translation_index = vision60.NUM_LEGS * ACTION_DIM_PER_LEG + base_rotation_index = vision60.NUM_LEGS * ACTION_DIM_PER_LEG + 3 + + base_translation = ik_actions[ + base_translation_index:base_translation_index + 3] + base_rotation = ik_actions[base_rotation_index:base_rotation_index + 4] + desired_joint_angles = [] + for i in range(vision60.NUM_LEGS): + local_toe_pos = ik_actions[i * ACTION_DIM_PER_LEG:i * ACTION_DIM_PER_LEG + + ACTION_DIM_PER_LEG] + leg_joint_ids = [ + self._abduction_motor_ids[i], self._abduction_motor_ids[i] + 1, + self._abduction_motor_ids[i] + 2 + ] + + desired_joint_angles.extend( + kinematics.joint_angles_from_link_position( + robot=self._gym_env.robot, + link_position=local_toe_pos, + link_id=self._toe_ids[i], + joint_ids=leg_joint_ids, + base_translation=base_translation, + base_rotation=base_rotation)) + + return desired_joint_angles + + def step(self, action): + """Steps the wrapped environment. + + Args: + action: Numpy array. The input action from an NN agent. + + Returns: + The tuple containing the modified observation, the reward, the epsiode end + indicator. + + Raises: + ValueError if input action is None. + + """ + if action is None: + raise ValueError('Action cannot be None') + + desired_joint_angles = self._joint_angles_from_toe_positions_and_base_pose( + ik_actions=action) + observation, reward, done, _ = self._gym_env.step(desired_joint_angles) + + return observation, reward, done, _ diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/imitation_wrapper_env.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/imitation_wrapper_env.py new file mode 100644 index 000000000..bbe14ea83 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/imitation_wrapper_env.py @@ -0,0 +1,101 @@ +"""A wrapper for motion imitation environment.""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import gin +import gym +import numpy as np + + +@gin.configurable +class ImitationWrapperEnv(object): + """An env using for training policy with motion imitation.""" + + def __init__(self, gym_env): + """Initialzes the wrapped env. + + Args: + gym_env: An instance of LocomotionGymEnv. + """ + self._gym_env = gym_env + self.observation_space = self._build_observation_space() + + self.seed() + return + + def __getattr__(self, attr): + return getattr(self._gym_env, attr) + + def step(self, action): + """Steps the wrapped environment. + + Args: + action: Numpy array. The input action from an NN agent. + + Returns: + The tuple containing the modified observation, the reward, the epsiode end + indicator. + + Raises: + ValueError if input action is None. + + """ + original_observation, reward, done, _ = self._gym_env.step(action) + observation = self._modify_observation(original_observation) + + return observation, reward, done, _ + + @gin.configurable('imitation_wrapper_env.ImitationWrapperEnv.reset') + def reset(self, initial_motor_angles=None, reset_duration=1.0): + """Resets the robot's position in the world or rebuild the sim world. + + The simulation world will be rebuilt if self._hard_reset is True. + + Args: + initial_motor_angles: A list of Floats. The desired joint angles after + reset. If None, the robot will use its built-in value. + reset_duration: Float. The time (in seconds) needed to rotate all motors + to the desired initial values. + + Returns: + A numpy array contains the initial observation after reset. + """ + original_observation = self._gym_env.reset(initial_motor_angles, reset_duration) + observation = self._modify_observation(original_observation) + return observation + + def _modify_observation(self, original_observation): + """Appends target observations from the reference motion to the observations. + + Args: + original_observation: A numpy array containing the original observations. + + Returns: + A numpy array contains the initial original concatenated with target + observations from the reference motion. + """ + target_observation = self._task.build_target_obs() + observation = np.concatenate([original_observation, target_observation], axis=-1) + return observation + + def _build_observation_space(self): + """Constructs the observation space, including target observations from + the reference motion. + + Returns: + Observation space representing the concatenations of the original + observations and target observations. + """ + obs_space0 = self._gym_env.observation_space + low0 = obs_space0.low + high0 = obs_space0.high + + task_low, task_high = self._task.get_target_obs_bounds() + low = np.concatenate([low0, task_low], axis=-1) + high = np.concatenate([high0, task_high], axis=-1) + + obs_space = gym.spaces.Box(low, high) + + return obs_space diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/mpc_locomotion_wrapper.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/mpc_locomotion_wrapper.py new file mode 100644 index 000000000..faebcdfea --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/mpc_locomotion_wrapper.py @@ -0,0 +1,794 @@ +"""An env that uses MPC-based motion controller to realize higher level footstep planning.""" + +import copy +import enum +from typing import Sequence + +import dataclasses +import gin +import gym +import numpy as np + +from pybullet_envs.minitaur.agents.baseline_controller import com_height_estimator +from pybullet_envs.minitaur.agents.baseline_controller import gait_generator as gait_generator_lib +from pybullet_envs.minitaur.agents.baseline_controller import imu_based_com_velocity_estimator +from pybullet_envs.minitaur.agents.baseline_controller import multi_state_estimator +from pybullet_envs.minitaur.agents.baseline_controller import openloop_gait_generator +from pybullet_envs.minitaur.agents.baseline_controller import torque_stance_leg_controller +from pybullet_envs.minitaur.robots import laikago_kinematic_constants + +_UNIT_QUATERNION = (0, 0, 0, 1) +_NUM_LEGS = laikago_kinematic_constants.NUM_LEGS +_MOTORS_PER_LEG = 3 +_DEFAULT_BODY_HEIGHT = 0.45 +_DEFAULT_BASE_SPEED = (0.0, 0.0) +_DEFAULT_BASE_TWIST_SPEED = 0.0 +_DEFAULT_ROLL_PITCH = (0.0, 0.0) +_DEFAULT_SWING_TARGET = (0.0, 0.0, 0.0) +_DEFAULT_SWING_CLERANCE = 0.05 +_MOTOR_KP = [220.0] * 12 +_MOTOR_KD = [0.3, 2.0, 2.0] * 4 +_BASE_VELOCITY_ACTION_RANGE = ((-1.0, -0.1), (1.0, 0.1)) +_BASE_TWIST_SPEED_ACTION_RANGE = (-0.5, 0.5) +_BASE_HEIGHT_ACTION_RANGE = (0.3, 0.5) +# Action bound for the swing target in local x, y, z direction. +_SWING_TARGET_ACTION_RANGE = ((-0.3, -0.1, -0.25), (0.3, 0.1, 0.25)) +_PITCH_ROLL_ACTION_RANGE = (-0.35, 0.35) +_SWING_CLEARANCE_ACTION_RANGE = (0.05, 0.3) +_SWING_TARGET_DELTA_ACTION_RANGE = ((-0.02, -0.01, -0.02), (0.02, 0.01, 0.02)) +_SWING_CLEARANCE_DELTA_RANGE = (-0.02, 0.02) + + +@gin.configurable +@dataclasses.dataclass +class BaseTargetHorizontalComVelocityHeuristic(object): + """A class for mapping swing foot targets to a heuristic target com velocity.""" + horizontal_com_velocity_heuristic: np.ndarray = np.zeros(2) + + def update_horizontal_com_velocity_heuristic(self, hip_relative_swing_targets, + com_velocity, swing_durations): + del hip_relative_swing_targets, com_velocity, swing_durations + pass + + def reset(self): + self.horizontal_com_velocity_heuristic = np.zeros(2) + + +# TODO(magicmelon): Add a one-pager to explain the inverse raibert heuristics. +@gin.configurable +class InverseRaibertTargetHorizontalComVelocityHeuristic( + BaseTargetHorizontalComVelocityHeuristic): + """A class for mapping swing foot targets to a target com velocity with Raibert Heuristics.""" + + def __init__(self, gains=(-0.25, -0.1)): + self._gains = np.array(gains) + + def update_horizontal_com_velocity_heuristic(self, hip_relative_swing_targets, + com_velocity, swing_durations): + assert len(hip_relative_swing_targets) == len(swing_durations) + target_com_horizontal_velocities = [] + for i in range(len(hip_relative_swing_targets)): + target_com_horizontal_velocity = ( + com_velocity / 2.0 * swing_durations[i] - + hip_relative_swing_targets[i]) / self._gains + com_velocity + target_com_horizontal_velocities.append(target_com_horizontal_velocity) + if target_com_horizontal_velocities: + self.horizontal_com_velocity_heuristic = np.mean( + target_com_horizontal_velocities, axis=0) + + +@gin.constants_from_enum +class Gait(enum.Enum): + """The possible gaits.""" + WALK = 0 + TROT = 1 + + +def _select_gait(gait_type=Gait.WALK): + """Selects a gait pattern. + + Args: + gait_type: which gait to use. + + Returns: + A tuple of (stance_duration, duty_factor, initial_phase) + """ + # Each gait is composed of stance_duration, duty_factor, and + # init_phase_full_cycle. + if gait_type == Gait.TROT: + return [0.3] * 4, [0.6] * 4, [0, 0.5, 0.5, 0] + elif gait_type == Gait.WALK: + return [0.75] * 4, [0.8] * 4, [0.25, 0.75, 0.5, 0] + else: + raise NotImplementedError + + +@gin.configurable +class MPCLocomotionWrapper(object): + """An env that uses MPC-based motion controller to realize footstep planning. + + The env takes as input the target position of the swing feet and the target + base movements, and internally uses an MPC-based controller to achieve these + targets. It assumes that the robot follows a given gait pattern, specified + during initialization. + Before each foot starts to swing, the env will request from the policy a + target swing location and height defined in the local frame w.r.t the + default toe position. During the swing of the foot, the policy can adjust + the base velocity, height, roll, pitch, and twist. Optionally, the policy + can also output a delta to the last target swing location to adjust the + swing trajectory during the swing + Observations (introduced in this env): + gait_phases (4D): Normalized phase within the gait cycle for each foot. + feet_states (4D): State of each foot. -1: stance, 1: swing, -2: lose + contact, 2: early contact. + need_new_swing_target (4D): Whether the foot needs a new swing target at + the current step. Set to 1 when the foot switches to swing from a + different state. When equals to 0, the corresponding foot target will + not have effect. + estimated_base_speed (3D): Estimated base velocity. + estimated_body_height (1D): Estimated base height. + heuristics_com_velocity (3D): Target base velocity calculated from the + input step-length using inverse Raibert heuristics. Used when + compute_heuristic_com_speed is True. + current_toe_target: Immediate tracking targets for the four feet in the + local frame. + Action components: + swing_targets (12D): Used in HL_LL and HL_only mode. Specifies + the swing target for each foot w.r.t the default local toe position. + swing_clearance (4D): Used in HL_LL and HL_only mode. Specifies + the height of the highest point in the swing trajectory. + swing_targets_delta (12D): Used if policy_output_swing_action_delta. + Specifies the change in the swing target for each foot. + swing_clearance_delta (4D): Used if policy_output_swing_action_delta. + Specifies the change in the swing clearance for each foot. + target_base_velocity (2D): Target base velocity in the horizontal plane. + Used when compute_heuristic_com_speed is False. + base_twist (1D): Target base twist. + base_height (1D): Target base height. + base_roll_pitch (2D): Target base roll and pitch. + + Attributes: + observation: The current observation of the environment. + last_action: The last that was used to step the environment. + env_step_counter: The number of control steps that have been elapesed since + the environment is reset. + action_space: The action space of the environment. + """ + + def __init__( + self, + gym_env, + swing_target_action_range=_SWING_TARGET_ACTION_RANGE, + swing_clearance_action_range=_SWING_CLEARANCE_ACTION_RANGE, + pitch_action_range=_PITCH_ROLL_ACTION_RANGE, + roll_action_range=_PITCH_ROLL_ACTION_RANGE, + base_velocity_action_range=_BASE_VELOCITY_ACTION_RANGE, + base_twist_action_range=_BASE_TWIST_SPEED_ACTION_RANGE, + base_height_action_range=_BASE_HEIGHT_ACTION_RANGE, + policy_output_swing_action_delta=False, + swing_target_delta_range=_SWING_TARGET_DELTA_ACTION_RANGE, + swing_clearance_delta_range=_SWING_CLEARANCE_DELTA_RANGE, + foot_friction_coeff=0.5, + contact_detection_force_threshold=0.0, + locomotion_gait=Gait.WALK, + target_horizontal_com_velocity_heuristic=BaseTargetHorizontalComVelocityHeuristic( + ), + robot_mass_in_mpc=235.0 / 9.8, + control_frequency=20, + com_velocity_estimator_class=imu_based_com_velocity_estimator + .IMUBasedCOMVelocityEstimator): + """Initializes the wrapper. + + Args: + gym_env: the wrapped gym environment. + swing_target_action_range: range for the swing targets specified before + each swing. + swing_clearance_action_range: range for the swing clearance. + pitch_action_range: range for the target body pitch. + roll_action_range: range for the target body roll. + base_velocity_action_range: range for the base velocity. + base_twist_action_range: range for the base twist. + base_height_action_range: range for the base height. + policy_output_swing_action_delta: whether to allow the policy to output an + adjustment to the last swing target during the swing motion. + swing_target_delta_range: range for the adjustment of the swing target. + swing_clearance_delta_range: range for the swing clearance adjustments. + foot_friction_coeff: friction on the feet. + contact_detection_force_threshold: Threshold of the contact sensor for + determining whether a foot is in contact. Use 20 for real robot and 0 + for simulation. + locomotion_gait: Gait to be used. + target_horizontal_com_velocity_heuristic: . + robot_mass_in_mpc: mass of the robot used in MPC. + control_frequency: frequency of querying the policy. The internal MPC + controller can have higher frequency. Note that the policy outputs a + swing target and clearance at each query, however, it is only used by + the environment at the beginning of each swing phase (when + need_new_swing_target is 1). + com_velocity_estimator_class: class of the com velocity estimator. Use + IMUBasedCOMVelocityEstimator for estimating velocity from IMU sensor and + contact states. Use COMVelocityEstimator for using the ground-truth com + velocity (e.g. when mocap is available). + """ + self._gym_env = gym_env + self._time_per_control_step = 1.0 / control_frequency + self._foot_friction_coeff = foot_friction_coeff + self._contact_detection_force_threshold = contact_detection_force_threshold + self._locomotion_gait = locomotion_gait + self._policy_output_swing_action_delta = policy_output_swing_action_delta + self._target_horizontal_com_velocity_heuristic = target_horizontal_com_velocity_heuristic + + self.last_action = None + + self._configure_action_space( + swing_target_action_range, swing_clearance_action_range, + pitch_action_range, roll_action_range, base_velocity_action_range, + base_twist_action_range, base_height_action_range, + policy_output_swing_action_delta, swing_target_delta_range, + swing_clearance_delta_range) + + self._configure_observation_space() + + # Set up the MPC controller + stance_duration, duty_factor, initial_phase = _select_gait(locomotion_gait) + self._gait_generator = openloop_gait_generator.OpenloopGaitGenerator( + self._gym_env.robot, stance_duration, duty_factor, initial_phase, + contact_detection_force_threshold) + self._com_velocity_estimator = com_velocity_estimator_class( + self._gym_env.robot) + self._com_height_estimator = com_height_estimator.COMHeightEstimator( + self._gym_env.robot) + self._state_estimator = multi_state_estimator.MultiStateEstimator( + self._gym_env.robot, + state_estimators=[ + self._com_velocity_estimator, self._com_height_estimator + ]) + self._stance_controller = torque_stance_leg_controller.TorqueStanceLegController( + self._gym_env.robot, + self._gait_generator, + self._state_estimator, + desired_speed=np.array(_DEFAULT_BASE_SPEED), + desired_twisting_speed=_DEFAULT_BASE_TWIST_SPEED, + desired_body_height=_DEFAULT_BODY_HEIGHT, + desired_roll_pitch=np.array(_DEFAULT_ROLL_PITCH), + body_mass=robot_mass_in_mpc) + + def _configure_observation_space(self): + """Configure the observation space.""" + self.observation_space.spaces["gait_phases"] = gym.spaces.Box( + np.array([-1.0] * 4), np.array([1.0] * 4)) + self.observation_space.spaces["feet_states"] = gym.spaces.Box( + np.array([-2.0] * 4), np.array([2.0] * 4)) + self.observation_space.spaces["need_new_swing_target"] = gym.spaces.Box( + np.array([0.0] * 4), np.array([1.0] * 4)) + self.observation_space.spaces["estimated_base_speed"] = gym.spaces.Box( + np.array([-1.0, -1.0, -1.0]), np.array([1.0, 1.0, 1.0])) + self.observation_space.spaces["estimated_body_height"] = gym.spaces.Box( + np.array([0.35]), np.array([0.5])) + self.observation_space.spaces["heuristics_com_velocity"] = gym.spaces.Box( + np.array([-1.0] * 2), np.array([1.0] * 2)) + self.observation_space.spaces["current_toe_target"] = gym.spaces.Box( + np.array([-1.0, -1.0, -1.0] * _NUM_LEGS), + np.array([1.0, 1.0, 1.0] * _NUM_LEGS)) + + # Needed so that LastActionSensor uses the correct action space. + for s in self.all_sensors(): + s.on_reset(self) + for sensor in self.all_sensors(): + if sensor.get_name() not in self._gym_config.ignored_sensor_list: + if hasattr(sensor, "observation_space"): + self.observation_space.spaces[ + sensor.get_name()] = sensor.observation_space + + self.task.reset(self) + if hasattr(self.task, "observation_space"): + self.observation_space.spaces[ + self.task.get_name()] = self.task.observation_space + + def _configure_action_space(self, swing_target_action_range, + swing_clearance_action_range, pitch_action_range, + roll_action_range, base_velocity_action_range, + base_twist_action_range, base_height_action_range, + policy_output_swing_action_delta, + swing_target_delta_range, + swing_clearance_delta_range): + """Configure the action space.""" + ac_lb = np.array([]) + ac_ub = np.array([]) + + # Index of different part of the actions within the action array. + self._action_start_indices = {} + self._action_dimensions = {} + self._action_names = [] + + # Swing targets and swing clearance. + for leg_id in range(_NUM_LEGS): + self._action_start_indices["swing_targets_" + str(leg_id)] = len(ac_lb) + self._action_dimensions["swing_targets_" + str(leg_id)] = len( + swing_target_action_range[0]) + self._action_names.append("swing_targets_" + str(leg_id)) + ac_lb = np.concatenate([ac_lb, swing_target_action_range[0]]) + ac_ub = np.concatenate([ac_ub, swing_target_action_range[1]]) + for leg_id in range(_NUM_LEGS): + self._action_start_indices["swing_clearance_" + str(leg_id)] = len(ac_lb) + self._action_dimensions["swing_clearance_" + str(leg_id)] = 1 + self._action_names.append("swing_clearance_" + str(leg_id)) + ac_lb = np.concatenate([ac_lb, [swing_clearance_action_range[0]]]) + ac_ub = np.concatenate([ac_ub, [swing_clearance_action_range[1]]]) + + # Delta to the swing targets and clearance. + if policy_output_swing_action_delta: + for leg_id in range(_NUM_LEGS): + self._action_start_indices["swing_targets_delta_" + + str(leg_id)] = len(ac_lb) + self._action_dimensions["swing_targets_delta_" + str(leg_id)] = len( + swing_target_delta_range[0]) + self._action_names.append("swing_targets_delta_" + str(leg_id)) + ac_lb = np.concatenate([ac_lb, swing_target_delta_range[0]]) + ac_ub = np.concatenate([ac_ub, swing_target_delta_range[1]]) + for leg_id in range(_NUM_LEGS): + self._action_start_indices["swing_clearance_delta_" + + str(leg_id)] = len(ac_lb) + self._action_dimensions["swing_clearance_delta_" + str(leg_id)] = 1 + self._action_names.append("swing_clearance_delta_" + str(leg_id)) + ac_lb = np.concatenate([ac_lb, [swing_clearance_delta_range[0]]]) + ac_ub = np.concatenate([ac_ub, [swing_clearance_delta_range[1]]]) + + # Desired CoM velocity actions + # Do not include the action if bounds are all equal to zero + if not np.all(np.array(base_velocity_action_range) == 0): + self._action_start_indices["target_base_velocity"] = len(ac_lb) + self._action_dimensions["target_base_velocity"] = 2 + self._action_names.append("target_base_velocity") + ac_lb = np.concatenate([ + ac_lb, + [base_velocity_action_range[0][0], base_velocity_action_range[0][1]] + ]) + ac_ub = np.concatenate([ + ac_ub, + [base_velocity_action_range[1][0], base_velocity_action_range[1][1]] + ]) + + # Base twist speed action + self._action_start_indices["base_twist"] = len(ac_lb) + self._action_dimensions["base_twist"] = 1 + self._action_names.append("base_twist") + ac_lb = np.concatenate([ac_lb, [base_twist_action_range[0]]]) + ac_ub = np.concatenate([ac_ub, [base_twist_action_range[1]]]) + + # Base height action + self._action_start_indices["base_height"] = len(ac_lb) + self._action_dimensions["base_height"] = 1 + self._action_names.append("base_height") + ac_lb = np.concatenate([ac_lb, [base_height_action_range[0]]]) + ac_ub = np.concatenate([ac_ub, [base_height_action_range[1]]]) + + # Roll-pitch action + self._action_start_indices["base_roll_pitch"] = len(ac_lb) + self._action_dimensions["base_roll_pitch"] = 2 + self._action_names.append("base_roll_pitch") + ac_lb = np.concatenate( + [ac_lb, [roll_action_range[0], pitch_action_range[0]]]) + ac_ub = np.concatenate( + [ac_ub, [roll_action_range[1], pitch_action_range[1]]]) + + self.action_space = gym.spaces.Box(ac_lb, ac_ub) + + def __getattr__(self, attr): + return getattr(self._gym_env, attr) + + def _fill_observations(self, obs): + """Fill the additional observations from this wrapper.""" + phase_offset = np.array([ + 0 if leg_state == gait_generator_lib.LegState.STANCE else 1 + for leg_state in self._gait_generator.desired_leg_state + ]) + obs["gait_phases"] = self._gait_generator.normalized_phase - phase_offset + obs["feet_states"] = [] + for leg_state in self._gait_generator.desired_leg_state: + if leg_state == gait_generator_lib.LegState.STANCE: + obs["feet_states"].append(-1) + if leg_state == gait_generator_lib.LegState.SWING: + obs["feet_states"].append(1) + if leg_state == gait_generator_lib.LegState.EARLY_CONTACT: + obs["feet_states"].append(2) + if leg_state == gait_generator_lib.LegState.LOSE_CONTACT: + obs["feet_states"].append(-2) + obs["need_new_swing_target"] = np.copy(self._need_new_swing_target) + obs["estimated_base_speed"] = self._state_estimator.com_velocity_body_yaw_aligned_frame + obs["estimated_body_height"] = [self._state_estimator.estimated_com_height] + obs["heuristics_com_velocity"] = np.copy( + self._target_horizontal_com_velocity_heuristic + .horizontal_com_velocity_heuristic) + obs["current_toe_target"] = np.copy(self._current_toe_target) + + def _reset_mpc_controller(self): + """Reset the state of the MPC controller.""" + self._gait_generator.reset(0.0) + self._state_estimator.reset(0.0) + self._stance_controller.reset(0.0) + self._stance_controller.desired_speed = np.array(_DEFAULT_BASE_SPEED) + self._stance_controller.desired_twisting_speed = _DEFAULT_BASE_TWIST_SPEED + self._stance_controller.desired_body_height = _DEFAULT_BODY_HEIGHT + self._stance_controller.desired_roll_pitch = np.array(_DEFAULT_ROLL_PITCH) + self._mpc_reset_time = self.robot.GetTimeSinceReset() + + def reset(self, **kwargs): + """Reset the environment.""" + self._gym_env.reset(**kwargs) + + self._reset_mpc_controller() + + self._last_leg_state = copy.copy(self._gait_generator.leg_state) + + self._initial_local_toe_positions = np.array( + self._gym_env.robot.foot_positions(position_in_world_frame=False)) + + self._current_toe_target = np.reshape( + copy.deepcopy(self._initial_local_toe_positions), 3 * _NUM_LEGS) + + # Record last lift off position for each foot for computing swing + # trajectory. + self._lift_off_positions = copy.deepcopy(self._initial_local_toe_positions) + + # Swing command by policy at the beginning of each swing phase. + self._nominal_swing_leg_commands = [] + for _ in range(_NUM_LEGS): + self._nominal_swing_leg_commands.append({ + "swing_target": np.array(_DEFAULT_SWING_TARGET), + "swing_clearance": _DEFAULT_SWING_CLERANCE + }) + # Actual swing leg commands that incorporated potential delta adjustments + # from the policy. + self._actual_swing_leg_commands = [] + for _ in range(_NUM_LEGS): + self._actual_swing_leg_commands.append({ + "swing_target": np.array(_DEFAULT_SWING_TARGET), + "swing_clearance": _DEFAULT_SWING_CLERANCE + }) + + self._need_new_swing_target = np.array([0.0] * _NUM_LEGS) + + self._target_horizontal_com_velocity_heuristic.reset() + + self.last_action = [] + for leg_id in range(_NUM_LEGS): + self.last_action.extend( + [0.0] * self._action_dimensions["swing_targets_" + str(leg_id)]) + for leg_id in range(_NUM_LEGS): + self.last_action.extend( + [0.0] * self._action_dimensions["swing_clearance_" + str(leg_id)]) + if self._policy_output_swing_action_delta: + for leg_id in range(_NUM_LEGS): + self.last_action.extend( + [0.0] * + self._action_dimensions["swing_targets_delta_" + str(leg_id)]) + for leg_id in range(_NUM_LEGS): + self.last_action.extend( + [0.0] * + self._action_dimensions["swing_clearance_delta_" + str(leg_id)]) + print("=========", len(self.last_action)) + if "target_base_velocity" in self._action_names: + self.last_action.extend([0.0] * + self._action_dimensions["target_base_velocity"]) + self.last_action.extend([0.0] * self._action_dimensions["base_twist"]) + self.last_action.extend([0.0] * self._action_dimensions["base_height"]) + self.last_action.extend([0.0] * self._action_dimensions["base_roll_pitch"]) + + # Needed for LastActionSensor to use the correct last_action. + for s in self.all_sensors(): + s.on_reset(self) + obs = self._get_observation() + self._fill_observations(obs) + + self.task.reset(self) + self._step_counter = 0 + + # Change feet friction. + for link_id in list( + self.robot.urdf_loader.get_end_effector_id_dict().values()): + self.pybullet_client.changeDynamics( + self.robot.robot_id, + link_id, + lateralFriction=self._foot_friction_coeff) + self._observation = obs + + return self._observation + + def _clean_up_action(self, action): + """Return a cleaned up action to use previous value or zero for components not used. + + Args: + action: Input action from the policy. + + Returns: + A cleaned up action where components not used in this step is replaced + with zero or value from previous steps. + """ + cleaned_action = np.copy(action) + for leg_id in range(_NUM_LEGS): + if not self._need_new_swing_target[leg_id]: + swing_target_name = "swing_targets_" + str(leg_id) + swing_targets_start_index = self._action_start_indices[ + swing_target_name] + swing_targets_end_index = swing_targets_start_index + self._action_dimensions[ + swing_target_name] + cleaned_action[swing_targets_start_index: + swing_targets_end_index] = self.last_action[ + swing_targets_start_index:swing_targets_end_index] + + swing_clearance_name = "swing_clearance_" + str(leg_id) + swing_clearance_start_index = self._action_start_indices[ + swing_clearance_name] + cleaned_action[swing_clearance_start_index] = self.last_action[ + swing_clearance_start_index] + if self._policy_output_swing_action_delta: + for leg_id in range(_NUM_LEGS): + if self._observation["feet_states"][leg_id] != 1: + swing_target_delta_name = "swing_targets_delta_" + str(leg_id) + swing_targets_delta_start_index = self._action_start_indices[ + swing_target_delta_name] + swing_targets_delta_end_index = swing_targets_delta_start_index + self._action_dimensions[ + swing_target_delta_name] + cleaned_action[ + swing_targets_delta_start_index: + swing_targets_delta_end_index] = self.last_action[ + swing_targets_delta_start_index:swing_targets_delta_end_index] + + swing_clearance_delta_name = "swing_clearance_delta_" + str(leg_id) + swing_clearance_delta_start_index = self._action_start_indices[ + swing_clearance_delta_name] + cleaned_action[swing_clearance_delta_start_index] = self.last_action[ + swing_clearance_delta_start_index] + + return cleaned_action + + def _get_toe_tracking_target(self, lift_off_position, phase, swing_clearance, + landing_position): + """Get the tracking target for the toes during the swing phase. + + The swing toe will move 70% of the distance in the first half of the swing. + Intuitely, we want to move the swing foot quickly to the target landing + location and stay above the ground, in this way the control is more robust + to perturbations to the body that may cause the swing foot to drop onto + the ground earlier than expected. This is a common practice similar + to the MIT cheetah and Marc Raibert's original controllers. After the + designated swing motion finishes, we also command the foot to go down + for a short ditance (0.03m). This is to mitigate issues when the swing + finishes before it touches the ground. + + Args: + lift_off_position: Local position when the foot leaves ground. + phase: Normalized phase of the foot in the current swing cycle. + swing_clearance: Height of the highest point in the swing trajectory. + landing_position: Target landing position in the local space. + + Returns: + The interpolated foot target for the current step. + """ + # Up vector in the world coordinate (without considering yaw). + rotated_up_vec = np.array( + self.pybullet_client.multiplyTransforms( + (0, 0, 0), + self.pybullet_client.getQuaternionFromEuler( + (self.robot.base_roll_pitch_yaw[0], + self.robot.base_roll_pitch_yaw[1], 0)), (0, 0, 1), + _UNIT_QUATERNION)[0]) + + # Linearly interpolate the trajectory to get the foot target. + keyframe_timings = [0.0, 0.45, 0.9, 0.9001, 1.0] + peak_toe_position = 0.3 * lift_off_position + 0.7 * landing_position + rotated_up_vec * swing_clearance + # TODO(magicmelon): Update the gait generator to warp the gait and keep + # the swing leg going down until it touches the ground. + landing_position_pressing_down = landing_position - rotated_up_vec * 0.03 + keyframe_positions = np.array([ + lift_off_position, peak_toe_position, landing_position, + landing_position_pressing_down, landing_position_pressing_down + ]) + + target_toe_positions = np.array([ + np.interp(phase, keyframe_timings, keyframe_positions[:, 0]), + np.interp(phase, keyframe_timings, keyframe_positions[:, 1]), + np.interp(phase, keyframe_timings, keyframe_positions[:, 2]) + ]) + return target_toe_positions + + def step(self, action: Sequence[float]): + """Steps the wrapped environment. + + Args: + action: + + Returns: + The tuple containing the observation, the reward, and the episode + end indicator. + """ + self.last_action = self._clean_up_action(action) + + obs, reward, done, info = self._step_motion_controller(self.last_action) + self._step_counter += 1 + self._fill_observations(obs) + self._observation = obs + + return obs, reward, done, info + + def _extract_action(self, action, name): + return action[self. + _action_start_indices[name]:self._action_start_indices[name] + + self._action_dimensions[name]] + + def _get_swing_foot_ids(self): + swing_foot_ids = [] + for leg_id in range(_NUM_LEGS): + if self._gait_generator.leg_state[ + leg_id] == gait_generator_lib.LegState.SWING: + swing_foot_ids.append(leg_id) + return swing_foot_ids + + def _update_gait_states_and_flags(self): + """Update gait-related variables and flags.""" + current_leg_state = self._gait_generator.leg_state + for leg_id in range(_NUM_LEGS): + if current_leg_state[ + leg_id] == gait_generator_lib.LegState.SWING and self._last_leg_state[ + leg_id] != gait_generator_lib.LegState.SWING: + self._lift_off_positions[leg_id] = self._gym_env.robot.foot_positions( + )[leg_id] + self._need_new_swing_target[leg_id] = 1 + self._last_leg_state = copy.copy(current_leg_state) + + com_estimate_leg_indices = [] + for leg_id in range(_NUM_LEGS): + # Use the ones not swinging to estimate the com height + if leg_id not in self._get_swing_foot_ids(): + com_estimate_leg_indices.append(leg_id) + self._com_height_estimator.com_estimate_leg_indices = com_estimate_leg_indices + self._state_estimator.update(self.robot.GetTimeSinceReset() - + self._mpc_reset_time) + self._gait_generator.update(self.robot.GetTimeSinceReset() - + self._mpc_reset_time) + + def _process_action(self, action): + """Process the action and set relevant variables.""" + # Extract the swing targets from the input action. + for leg_id in range(_NUM_LEGS): + if self._need_new_swing_target[leg_id]: + self._nominal_swing_leg_commands[leg_id]["swing_target"] = ( + self._extract_action(action, "swing_targets_" + str(leg_id))) + self._nominal_swing_leg_commands[leg_id]["swing_clearance"] = ( + self._extract_action(action, "swing_clearance_" + str(leg_id))) + + self._actual_swing_leg_commands[leg_id]["swing_target"] = np.copy( + self._nominal_swing_leg_commands[leg_id]["swing_target"]) + self._actual_swing_leg_commands[leg_id][ + "swing_clearance"] = self._nominal_swing_leg_commands[leg_id][ + "swing_clearance"] + + # Reset the flags so the next high level commands are not used until the + # next swing happens. + self._need_new_swing_target = np.zeros(_NUM_LEGS) + + # Extract the delta swing targets from the input action. + if self._policy_output_swing_action_delta: + for leg_id in self._get_swing_foot_ids(): + self._actual_swing_leg_commands[leg_id]["swing_target"] = ( + self._nominal_swing_leg_commands[leg_id]["swing_target"] + + self._extract_action(action, "swing_targets_delta_" + str(leg_id))) + self._actual_swing_leg_commands[leg_id]["swing_clearance"] = ( + self._nominal_swing_leg_commands[leg_id]["swing_clearance"] + + self._extract_action(action, + "swing_clearance_delta_" + str(leg_id))) + # Extract the target base movement commands from the input action. + if "target_base_velocity" in self._action_names: + self._target_base_velocity_from_policy = self._extract_action( + action, "target_base_velocity") + else: + self._target_base_velocity_from_policy = np.zeros(3) + desired_twist_speed = self._extract_action(action, "base_twist") + desired_body_height = self._extract_action(action, "base_height") + desired_roll_pitch = self._extract_action(action, "base_roll_pitch") + + self._stance_controller.desired_twisting_speed = desired_twist_speed + self._stance_controller.desired_body_height = desired_body_height + self._stance_controller.desired_roll_pitch = desired_roll_pitch + + def _compute_swing_action(self): + """Compute actions for the swing legs.""" + local_toe_positions = np.array( + self._gym_env.robot.foot_positions(position_in_world_frame=False)) + toe_positions_over_time = copy.deepcopy(local_toe_positions) + + for leg_id in self._get_swing_foot_ids(): + target_toe_positions_local = self._get_toe_tracking_target( + self._lift_off_positions[leg_id], + self._gait_generator.normalized_phase[leg_id], + self._actual_swing_leg_commands[leg_id]["swing_clearance"], + self._actual_swing_leg_commands[leg_id]["swing_target"] + + self._initial_local_toe_positions[leg_id]) + toe_positions_over_time[leg_id] = target_toe_positions_local + self._current_toe_target = np.reshape( + copy.deepcopy(toe_positions_over_time), 3 * _NUM_LEGS) + return np.array( + self.robot.motor_angles_from_foot_positions( + toe_positions_over_time, position_in_world_frame=False)[1]) + + def _compute_stance_action(self): + """Compute actions for the stance legs.""" + + # update target com velocity by combining policy output and heuristics + hip_relative_swing_targets = [] + swing_durations = [] + com_horizontal_velocity = np.array( + self._state_estimator.com_velocity_body_yaw_aligned_frame)[0:2] + for swing_id in self._get_swing_foot_ids(): + hip_relative_swing_targets.append( + np.array([ + self._actual_swing_leg_commands[swing_id]["swing_target"][0], + self._actual_swing_leg_commands[swing_id]["swing_target"][1] + ])) + swing_durations.append(self._gait_generator.swing_duration[swing_id]) + + self._target_horizontal_com_velocity_heuristic.update_horizontal_com_velocity_heuristic( + hip_relative_swing_targets, com_horizontal_velocity, swing_durations) + self._stance_controller.desired_speed = np.array( + self._target_base_velocity_from_policy) + self._stance_controller.desired_speed[ + 0: + 2] += self._target_horizontal_com_velocity_heuristic.horizontal_com_velocity_heuristic + + # compute actions for the stance leg + return self._stance_controller.get_action() + + def _combine_swing_stance_action(self, swing_action, stance_action): + """Combine stance and swing leg actions.""" + feet_contact_states = copy.copy(self._gait_generator.leg_state) + actions = [] + for leg_id in range(_NUM_LEGS): + if leg_id in self._get_swing_foot_ids( + ) and feet_contact_states[leg_id] == gait_generator_lib.LegState.SWING: + for motor_id_in_leg in range(_MOTORS_PER_LEG): + actions.extend( + (swing_action[leg_id * _MOTORS_PER_LEG + motor_id_in_leg], + _MOTOR_KP[leg_id * _MOTORS_PER_LEG + motor_id_in_leg], 0.0, + _MOTOR_KD[leg_id * _MOTORS_PER_LEG + motor_id_in_leg], 0.0)) + else: + for motor_id_in_leg in range(_MOTORS_PER_LEG): + actions.extend(stance_action[leg_id * _MOTORS_PER_LEG + + motor_id_in_leg]) + return actions + + def _step_motion_controller(self, action): + """Run the MPC controller to advance the robot's state.""" + + self._process_action(action) + + # run MPC-based control for a certain amount of time + total_reward = 0.0 + start_time = self._gym_env.robot.GetTimeSinceReset() + while self._gym_env.robot.GetTimeSinceReset( + ) - start_time < self._time_per_control_step: + self._update_gait_states_and_flags() + + swing_action = self._compute_swing_action() + + stance_action = self._compute_stance_action() + + actions = self._combine_swing_stance_action(swing_action, stance_action) + + obs, rew, done, info = self._gym_env.step(actions) + if self._stance_controller.qp_solver_fail: + done = True + total_reward += rew + + if done: + return obs, 0.0, done, info + + return obs, total_reward, done, info + + @property + def observation(self): + return self._observation + + @property + def env_step_counter(self): + return self._step_counter diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/observation_dictionary_to_array_wrapper.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/observation_dictionary_to_array_wrapper.py new file mode 100644 index 000000000..34e6049cc --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/observation_dictionary_to_array_wrapper.py @@ -0,0 +1,65 @@ +"""An env wrapper that flattens the observation dictionary to an array.""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import gym +import gin +from pybullet_envs.minitaur.envs_v2.utilities import env_utils + + +@gin.configurable +class ObservationDictionaryToArrayWrapper(gym.Env): + """An env wrapper that flattens the observation dictionary to an array.""" + + def __init__(self, gym_env, observation_excluded=()): + """Initializes the wrapper.""" + self.observation_excluded = observation_excluded + self._gym_env = gym_env + self.observation_space = self._flatten_observation_spaces( + self._gym_env.observation_space) + self.action_space = self._gym_env.action_space + + def __getattr__(self, attr): + return getattr(self._gym_env, attr) + + def _flatten_observation_spaces(self, observation_spaces): + flat_observation_space = env_utils.flatten_observation_spaces( + observation_spaces=observation_spaces, + observation_excluded=self.observation_excluded) + return flat_observation_space + + def _flatten_observation(self, input_observation): + """Flatten the dictionary to an array.""" + return env_utils.flatten_observations( + observation_dict=input_observation, + observation_excluded=self.observation_excluded) + + def seed(self, seed=None): + return self._gym_env.seed(seed) + + def reset(self, initial_motor_angles=None, reset_duration=1.0): + observation = self._gym_env.reset( + initial_motor_angles=initial_motor_angles, + reset_duration=reset_duration) + return self._flatten_observation(observation) + + def step(self, action): + """Steps the wrapped environment. + + Args: + action: Numpy array. The input action from an NN agent. + + Returns: + The tuple containing the flattened observation, the reward, the epsiode + end indicator. + """ + observation_dict, reward, done, _ = self._gym_env.step(action) + return self._flatten_observation(observation_dict), reward, done, _ + + def render(self, mode='human'): + return self._gym_env.render(mode) + + def close(self): + return self._gym_env.close() diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/pmtg_inplace_wrapper_env.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/pmtg_inplace_wrapper_env.py new file mode 100644 index 000000000..0a274d399 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/pmtg_inplace_wrapper_env.py @@ -0,0 +1,176 @@ +"""A wrapped MinitaurGymEnv with a built-in controller.""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function +import attr +from gym import spaces +import numpy as np +import gin +from pybullet_envs.minitaur.agents.trajectory_generator import tg_inplace +from pybullet_envs.minitaur.envs.utilities import laikago_pose_utils +from pybullet_envs.minitaur.envs.utilities import minitaur_pose_utils + +_NUM_LEGS = 4 +_LAIKAGO_NUM_ACTIONS = 12 +_FREQ_LOWER_BOUND = 0.0 +_FREQ_UPPER_BOUND = 3 +_DEFAULT_AMPLITUDE_STANCE = -0.02 +_DEFAULT_AMPLITUDE_LIFT = 0.9 +_DEFAULT_CENTER_EXTENSION = 0 +_DEFAULT_STANCE_LIFT_CUTOFF = 2 * np.pi * 0.67 +_DEFAULT_RESIDUAL_RANGE = 0.4 +_LAIKAGO_KNEE_ACTION_INDEXES = [2, 5, 8, 11] +MINITAUR_INIT_EXTENSION_POS = 2.0 +MINITAUR_INIT_SWING_POS = 0.0 + + +@gin.configurable +class PmtgInplaceWrapperEnv(object): + """A wrapped LocomotionGymEnv with a built-in trajectory generator.""" + + def __init__(self, + gym_env, + freq_lower_bound=_FREQ_LOWER_BOUND, + freq_upper_bound=_FREQ_UPPER_BOUND, + residual_range=_DEFAULT_RESIDUAL_RANGE, + amplitude_stance=_DEFAULT_AMPLITUDE_STANCE, + amplitude_lift=_DEFAULT_AMPLITUDE_LIFT, + center_extension=_DEFAULT_CENTER_EXTENSION, + stance_lift_cutoff=_DEFAULT_STANCE_LIFT_CUTOFF): + """Initializes the TG inplace wrapper class. + + Args: + gym_env: the gym environment to wrap on. + freq_lower_bound: minimum frequency that the TGs can be propagated at. + freq_upper_bound: maximum frequency that the TGs can be propagated at. + residual_range: range of residuals that can be added to tg outputs. + amplitude_stance: stance amplitude of TG (see tg_inplace.py for details). + amplitude_lift: swing amplitude of TG (see tg_inplace.py for details). + center_extension: center extension of TG (see tg_inplace.py for details). + stance_lift_cutoff: phase cutoff between stance and lift phase (see + tg_inplace.py for details). + """ + self._gym_env = gym_env + self._num_actions = gym_env.robot.num_motors + self._tg_phases = tg_inplace.reset() + self._tg_params = dict( + amplitude_stance=amplitude_stance, + amplitude_lift=amplitude_lift, + center_extension=center_extension, + stance_lift_cutoff=stance_lift_cutoff) + + # Add the action boundaries for delta time, one per integrator. + action_low = np.hstack( + ([-residual_range] * self._num_actions, [freq_lower_bound] * _NUM_LEGS)) + action_high = np.hstack( + ([residual_range] * self._num_actions, [freq_upper_bound] * _NUM_LEGS)) + self.action_space = spaces.Box(action_low, action_high) + + # Set the observation space and boundaries. + if hasattr(self._gym_env.observation_space, "spaces"): + self.observation_space = self._gym_env.observation_space + self.observation_space.spaces["pmtg_inplace"] = spaces.Box( + -1 * np.ones(2 * _NUM_LEGS), np.ones(2 * _NUM_LEGS)) + else: + lower_bound = self._gym_env.observation_space.low + upper_bound = self._gym_env.observation_space.high + lower_bound = np.hstack((lower_bound, [-1.] * 2 * _NUM_LEGS)) + upper_bound = np.hstack((upper_bound, [1.] * 2 * _NUM_LEGS)) + self.observation_space = spaces.Box(lower_bound, upper_bound) + + def __getattr__(self, attrb): + return getattr(self._gym_env, attrb) + + def _modify_observation(self, observation): + if isinstance(observation, dict): + observation["tg_inplace"] = np.hstack( + (np.cos(self._tg_phases), np.sin(self._tg_phases))) + return observation + else: + return np.hstack( + (observation, np.cos(self._tg_phases), np.sin(self._tg_phases))) + + def reset(self, initial_motor_angles=None, reset_duration=1.0): + """Resets the environment as well as trajectory generators.""" + self._last_real_time = 0 + self._num_step = 0 + self._tg_phases = tg_inplace.reset() + if self._num_actions == _LAIKAGO_NUM_ACTIONS: + # Use laikago's init pose as zero action. + init_pose = np.array( + attr.astuple( + laikago_pose_utils.LaikagoPose( + abduction_angle_0=laikago_pose_utils + .LAIKAGO_DEFAULT_ABDUCTION_ANGLE, + hip_angle_0=laikago_pose_utils.LAIKAGO_DEFAULT_HIP_ANGLE, + knee_angle_0=laikago_pose_utils.LAIKAGO_DEFAULT_KNEE_ANGLE, + abduction_angle_1=laikago_pose_utils + .LAIKAGO_DEFAULT_ABDUCTION_ANGLE, + hip_angle_1=laikago_pose_utils.LAIKAGO_DEFAULT_HIP_ANGLE, + knee_angle_1=laikago_pose_utils.LAIKAGO_DEFAULT_KNEE_ANGLE, + abduction_angle_2=laikago_pose_utils + .LAIKAGO_DEFAULT_ABDUCTION_ANGLE, + hip_angle_2=laikago_pose_utils.LAIKAGO_DEFAULT_HIP_ANGLE, + knee_angle_2=laikago_pose_utils.LAIKAGO_DEFAULT_KNEE_ANGLE, + abduction_angle_3=laikago_pose_utils + .LAIKAGO_DEFAULT_ABDUCTION_ANGLE, + hip_angle_3=laikago_pose_utils.LAIKAGO_DEFAULT_HIP_ANGLE, + knee_angle_3=laikago_pose_utils.LAIKAGO_DEFAULT_KNEE_ANGLE))) + self._init_pose = init_pose + observation = self._gym_env.reset(init_pose, reset_duration) + else: + # Use minitaur's init pose as zero action. + init_pose = np.array( + attr.astuple( + minitaur_pose_utils.MinitaurPose( + swing_angle_0=MINITAUR_INIT_SWING_POS, + swing_angle_1=MINITAUR_INIT_SWING_POS, + swing_angle_2=MINITAUR_INIT_SWING_POS, + swing_angle_3=MINITAUR_INIT_SWING_POS, + extension_angle_0=MINITAUR_INIT_EXTENSION_POS, + extension_angle_1=MINITAUR_INIT_EXTENSION_POS, + extension_angle_2=MINITAUR_INIT_EXTENSION_POS, + extension_angle_3=MINITAUR_INIT_EXTENSION_POS))) + initial_motor_angles = minitaur_pose_utils.leg_pose_to_motor_angles( + init_pose) + observation = self._gym_env.reset(initial_motor_angles, reset_duration) + return self._modify_observation(observation) + + def step(self, action): + """Steps the wrapped PMTG inplace environment.""" + time = self._gym_env.get_time_since_reset() + + # Convert the policy's residual actions to motor space. + if self._num_actions == _LAIKAGO_NUM_ACTIONS: + action_residual = np.array( + attr.astuple( + laikago_pose_utils.LaikagoPose(*(action[0:self._num_actions])))) + else: + action_residual = minitaur_pose_utils.leg_pose_to_motor_angles( + action[0:self._num_actions]) + + self._last_real_time = time + self._tg_phases, tg_extensions = tg_inplace.step( + self._tg_phases, action[-_NUM_LEGS:], self._gym_env.env_time_step, + self._tg_params) + # Convert TG's actions to motor space depending on the robot type. + if self._num_actions == _LAIKAGO_NUM_ACTIONS: + # If the legs have 3 DOF, apply extension directly to knee joints + action_tg_motor_space = np.zeros(self._num_actions) + for tg_idx, knee_idx in zip( + range(_NUM_LEGS), _LAIKAGO_KNEE_ACTION_INDEXES): + action_tg_motor_space[knee_idx] = tg_extensions[tg_idx] + else: + # Conversion to motor space for minitaur robot. + action_tg_motor_space = [] + for idx in range(_NUM_LEGS): + extend = tg_extensions[idx] + action_tg_motor_space.extend( + minitaur_pose_utils.swing_extend_to_motor_angles(idx, 0, extend)) + new_action = action_tg_motor_space + action_residual + if self._num_actions == _LAIKAGO_NUM_ACTIONS: + new_action += self._init_pose + original_observation, reward, done, _ = self._gym_env.step(new_action) + + return self._modify_observation(original_observation), reward, done, _ diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/pmtg_wrapper_env.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/pmtg_wrapper_env.py new file mode 100644 index 000000000..1df14a296 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/pmtg_wrapper_env.py @@ -0,0 +1,290 @@ +"""A wrapped MinitaurGymEnv with a built-in controller.""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function +from gym import spaces +import numpy as np +import gin +from pybullet_envs.minitaur.agents.trajectory_generator import tg_simple +from pybullet_envs.minitaur.envs_v2.utilities import robot_pose_utils +from pybullet_envs.minitaur.robots.utilities import action_filter + +_DELTA_TIME_LOWER_BOUND = 0.0 +_DELTA_TIME_UPPER_BOUND = 3 + +_GAIT_PHASE_MAP = { + "walk": [0, 0.25, 0.5, 0.75], + "trot": [0, 0.5, 0.5, 0], + "bound": [0, 0.5, 0, 0.5], + "pace": [0, 0, 0.5, 0.5], + "pronk": [0, 0, 0, 0] +} + + +@gin.configurable +class PmtgWrapperEnv(object): + """A wrapped LocomotionGymEnv with a built-in trajectory generator.""" + + def __init__(self, + gym_env, + intensity_upper_bound=1.5, + min_delta_time=_DELTA_TIME_LOWER_BOUND, + max_delta_time=_DELTA_TIME_UPPER_BOUND, + integrator_coupling_mode="all coupled", + walk_height_coupling_mode="all coupled", + variable_swing_stance_ratio=True, + swing_stance_ratio=1.0, + residual_range=0.15, + init_leg_phase_offsets=None, + init_gait=None, + default_walk_height=0, + action_filter_enable=True, + action_filter_order=1, + action_filter_low_cut=0, + action_filter_high_cut=3.0, + action_filter_initialize=False, + leg_pose_class=None): + """Initialzes the wrapped env. + + Args: + gym_env: An instance of LocomotionGymEnv. + intensity_upper_bound: The upper bound for intensity of the trajectory + generator. It can be used to limit the leg movement. + min_delta_time: Lower limit for the time in seconds that the trajectory + generator can be moved forward at each simulation step. The effective + frequency of the gait is based on the delta time multiplied by the + internal frequency of the trajectory generator. + max_delta_time: Upper limit for the time in seconds that the trajectory + generator can be moved forward at each simulation step. + integrator_coupling_mode: How the legs should be coupled for integrators. + walk_height_coupling_mode: The same coupling mode used for walking walking + heights for the legs. + variable_swing_stance_ratio: A boolean to indicate if the swing stance + ratio can change per time step or not. + swing_stance_ratio: Time taken by swing phase vs stance phase. This is + only relevant if variable_swing_stance_ratio is False. + residual_range: The upper limit for the residual actions that adds to the + leg motion. It is 0.15 by default, can be increased for more flexibility + or decreased to only to use the trajectory generator's motion. + init_leg_phase_offsets: The initial phases of the legs. A list of 4 + variables within [0,1). The order is front-left, rear-left, front-right + and rear-right. + init_gait: The initial gait that sets the starting phase difference + between the legs. Overrides the arg init_phase_offsets. Has to be + "walk", "trot", "bound" or "pronk". Used in vizier search. + default_walk_height: Offset for the extension of the legs for the robot. + Applied to the legs at every time step. Implicitly affects the walking + and standing height of the policy. Zero by default. Units is in + extension space (can be considered in radiant since it is a linear + transformation to motor angles based on the robot's geometry). + action_filter_enable: Use a butterworth filter for the output of the PMTG + actions (before conversion to leg swing-extend model). It forces + smoother behaviors depending on the parameters used. + action_filter_order: The order for the action_filter (1 by default). + action_filter_low_cut: The cut for the lower frequencies (0 by default). + action_filter_high_cut: The cut for the higher frequencies (3 by default). + action_filter_initialize: If the action filter should be initialized when + the first action is taken. If enabled, the filter does not affect action + value the first time it is called and fills the history with that value. + leg_pose_class: A class providing a convert_leg_pose_to_motor_angle + instance method or None. If None, robot_pose_utils is used. + + Raises: + ValueError if the controller does not implement get_action and + get_observation. + + """ + self._gym_env = gym_env + self._num_actions = gym_env.robot.num_motors + self._residual_range = residual_range + self._min_delta_time = min_delta_time + self._max_delta_time = max_delta_time + self._leg_pose_util = leg_pose_class() if leg_pose_class else None + # If not specified, default leg phase offsets to walking. + if init_gait: + if init_gait in _GAIT_PHASE_MAP: + init_leg_phase_offsets = _GAIT_PHASE_MAP[init_gait] + else: + raise ValueError("init_gait is not one of the defined gaits.") + else: + init_leg_phase_offsets = init_leg_phase_offsets or [0, 0.25, 0.5, 0.75] + # Create the Trajectory Generator based on the parameters. + self._trajectory_generator = tg_simple.TgSimple( + intensity_upper_bound=intensity_upper_bound, + integrator_coupling_mode=integrator_coupling_mode, + walk_height_coupling_mode=walk_height_coupling_mode, + variable_swing_stance_ratio=variable_swing_stance_ratio, + swing_stance_ratio=swing_stance_ratio, + init_leg_phase_offsets=init_leg_phase_offsets) + + action_dim = self._extend_action_space() + self._extend_obs_space() + + self._default_walk_height = default_walk_height + self._action_filter_enable = action_filter_enable + if self._action_filter_enable: + self._action_filter_initialize = action_filter_initialize + self._action_filter_order = action_filter_order + self._action_filter_low_cut = action_filter_low_cut + self._action_filter_high_cut = action_filter_high_cut + self._action_filter = self._build_action_filter(action_dim) + + def _extend_obs_space(self): + """Extend observation space to include pmtg phase variables.""" + # Set the observation space and boundaries. + lower_bound, upper_bound = self._get_observation_bounds() + if hasattr(self._gym_env.observation_space, "spaces"): + new_obs_space = spaces.Box(np.array(lower_bound), np.array(upper_bound)) + self.observation_space.spaces.update({"pmtg_phase": new_obs_space}) + else: + lower_bound = np.append(self._gym_env.observation_space.low, lower_bound) + upper_bound = np.append(self._gym_env.observation_space.high, upper_bound) + self.observation_space = spaces.Box( + np.array(lower_bound), np.array(upper_bound), dtype=np.float32) + + def _extend_action_space(self): + """Extend the action space to include pmtg parameters.""" + # Add the action boundaries for delta time, one per integrator. + action_low = [-self._residual_range] * self._num_actions + action_high = [self._residual_range] * self._num_actions + action_low = np.append(action_low, [self._min_delta_time] * + self._trajectory_generator.num_integrators) + action_high = np.append(action_high, [self._max_delta_time] * + self._trajectory_generator.num_integrators) + + # Add the action boundaries for parameters of the trajectory generator. + l_bound, u_bound = self._trajectory_generator.get_parameter_bounds() + action_low = np.append(action_low, l_bound) + action_high = np.append(action_high, u_bound) + self.action_space = spaces.Box( + np.array(action_low), np.array(action_high), dtype=np.float32) + return len(action_high) + + def __getattr__(self, attrb): + return getattr(self._gym_env, attrb) + + def _modify_observation(self, observation): + if isinstance(observation, dict): + observation["pmtg_phase"] = self._trajectory_generator.get_state() + return observation + else: + return np.append(observation, self._trajectory_generator.get_state()) + + def reset(self, initial_motor_angles=None, reset_duration=1.0): + """Resets the environment as well as the trajectory generator(s). + + Args: + initial_motor_angles: Unused for PMTG. Instead, it sets the legs to a pose + with the neutral action for the trajectory generator. + reset_duration: Float. The time (in seconds) needed to rotate all motors + to the desired initial values. + + Returns: + A numpy array contains the initial observation after reset. + """ + del initial_motor_angles + if self._action_filter_enable: + self._reset_action_filter() + self._last_real_time = 0 + self._num_step = 0 + self._target_speed_coef = 0.0 + if self._trajectory_generator: + self._trajectory_generator.reset() + if self._leg_pose_util: + initial_motor_angles = self._leg_pose_util.convert_leg_pose_to_motor_angles( + [0, 0, 0] * 4) + else: + initial_motor_angles = robot_pose_utils.convert_leg_pose_to_motor_angles( + self._gym_env.robot_class, [0, 0, 0] * 4) + observation = self._gym_env.reset(initial_motor_angles, reset_duration) + return self._modify_observation(observation) + + def step(self, action): + """Steps the wrapped environment. + + Args: + action: Numpy array. The input action from an NN agent. + + Returns: + The tuple containing the modified observation, the reward, the epsiode end + indicator. + + Raises: + ValueError if input action is None. + + """ + + if action is None: + raise ValueError("Action cannot be None") + + if self._action_filter_enable: + action = self._filter_action(action) + + time = self._gym_env.get_time_since_reset() + + action_residual = action[0:self._num_actions] + # Add the default walking height offset to extension. + dimensions = len(action_residual) // 4 + action_residual[dimensions - 1::dimensions] += self._default_walk_height + # Calculate trajectory generator's output based on the rest of the actions. + delta_real_time = time - self._last_real_time + self._last_real_time = time + action_tg = self._trajectory_generator.get_actions( + delta_real_time, action[self._num_actions:]) + # If the residuals have a larger dimension, extend trajectory generator's + # actions to include abduction motors. + if len(action_tg) == 8 and len(action_residual) == 12: + for i in [0, 3, 6, 9]: + action_tg.insert(i, 0) + # Add TG actions with residual actions (in swing - extend space). + action_total = [a + b for a, b in zip(action_tg, action_residual)] + # Convert them to motor space based on the robot-specific conversions. + if self._leg_pose_util: + action_motor_space = self._leg_pose_util.convert_leg_pose_to_motor_angles( + action_total) + else: + action_motor_space = robot_pose_utils.convert_leg_pose_to_motor_angles( + self._gym_env.robot_class, action_total) + original_observation, reward, done, _ = self._gym_env.step( + action_motor_space) + + return self._modify_observation(original_observation), np.float32( + reward), done, _ + + def _get_observation_bounds(self): + """Get the bounds of the observation added from the trajectory generator. + + Returns: + lower_bounds: Lower bounds for observations. + upper_bounds: Upper bounds for observations. + """ + lower_bounds = self._trajectory_generator.get_state_lower_bounds() + upper_bounds = self._trajectory_generator.get_state_upper_bounds() + return lower_bounds, upper_bounds + + def _build_action_filter(self, num_joints): + order = self._action_filter_order + low_cut = self._action_filter_low_cut + high_cut = self._action_filter_high_cut + sampling_rate = 1 / (0.01) + a_filter = action_filter.ActionFilterButter([low_cut], [high_cut], + sampling_rate, order, + num_joints) + return a_filter + + def _reset_action_filter(self): + self._action_filter.reset() + self._action_filter_empty = True + return + + def _filter_action(self, action): + if self._action_filter_empty and self._action_filter_initialize: + # If initialize is selected and it is the first time filter is called, + # fill the buffer with that action so that it starts from that value + # instead of zero(s). + init_action = np.array(action).reshape(len(action), 1) + self._action_filter.reset(init_action) + self._action_filter_empty = False + filtered_action = self._action_filter.filter(np.array(action)) + return filtered_action diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/simple_openloop.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/simple_openloop.py new file mode 100644 index 000000000..65cb6446f --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/simple_openloop.py @@ -0,0 +1,127 @@ +"""Simple openloop trajectory generators.""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import attr +from gym import spaces +import numpy as np + +import gin +from pybullet_envs.minitaur.envs_v2.utilities import laikago_pose_utils +from pybullet_envs.minitaur.envs_v2.utilities import minitaur_pose_utils + + +@gin.configurable +class MinitaurPoseOffsetGenerator(object): + """A trajectory generator that return a constant leg pose.""" + + def __init__(self, + init_swing=0, + init_extension=2.0, + init_pose=None, + action_scale=1.0, + action_limit=0.5): + """Initializes the controller. + + Args: + init_swing: the swing of the default pose offset + init_extension: the extension of the default pose offset + init_pose: the default pose offset, which is None by default. If not None, + it will define the default pose offset while ignoring init_swing and + init_extension. + action_scale: changes the magnitudes of actions + action_limit: clips actions + """ + if init_pose is None: + self._pose = np.array( + attr.astuple( + minitaur_pose_utils.MinitaurPose( + swing_angle_0=init_swing, + swing_angle_1=init_swing, + swing_angle_2=init_swing, + swing_angle_3=init_swing, + extension_angle_0=init_extension, + extension_angle_1=init_extension, + extension_angle_2=init_extension, + extension_angle_3=init_extension))) + else: # Ignore init_swing and init_extension + self._pose = np.array(init_pose) + action_high = np.array([action_limit] * minitaur_pose_utils.NUM_MOTORS) + self.action_space = spaces.Box(-action_high, action_high, dtype=np.float32) + self._action_scale = action_scale + + def reset(self): + pass + + def get_action(self, current_time=None, input_action=None): + """Computes the trajectory according to input time and action. + + Args: + current_time: The time in gym env since reset. + input_action: A numpy array. The input leg pose from a NN controller. + + Returns: + A numpy array. The desired motor angles. + """ + del current_time + return minitaur_pose_utils.leg_pose_to_motor_angles( + self._pose + self._action_scale * np.array(input_action)) + + def get_observation(self, input_observation): + """Get the trajectory generator's observation.""" + + return input_observation + + +@gin.configurable +class LaikagoPoseOffsetGenerator(object): + """A trajectory generator that return constant motor angles.""" + + def __init__( + self, + init_abduction=laikago_pose_utils.LAIKAGO_DEFAULT_ABDUCTION_ANGLE, + init_hip=laikago_pose_utils.LAIKAGO_DEFAULT_HIP_ANGLE, + init_knee=laikago_pose_utils.LAIKAGO_DEFAULT_KNEE_ANGLE, + action_limit=0.5, + ): + """Initializes the controller.""" + self._pose = np.array( + attr.astuple( + laikago_pose_utils.LaikagoPose( + abduction_angle_0=init_abduction, + hip_angle_0=init_hip, + knee_angle_0=init_knee, + abduction_angle_1=init_abduction, + hip_angle_1=init_hip, + knee_angle_1=init_knee, + abduction_angle_2=init_abduction, + hip_angle_2=init_hip, + knee_angle_2=init_knee, + abduction_angle_3=init_abduction, + hip_angle_3=init_hip, + knee_angle_3=init_knee))) + action_high = np.array([action_limit] * 12) + self.action_space = spaces.Box(-action_high, action_high, dtype=np.float32) + + def reset(self): + pass + + def get_action(self, current_time=None, input_action=None): + """Computes the trajectory according to input time and action. + + Args: + current_time: The time in gym env since reset. + input_action: A numpy array. The input leg pose from a NN controller. + + Returns: + A numpy array. The desired motor angles. + """ + del current_time + return self._pose + input_action + + def get_observation(self, input_observation): + """Get the trajectory generator's observation.""" + + return input_observation diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/state_machine_based_wrapper_env.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/state_machine_based_wrapper_env.py new file mode 100644 index 000000000..56a92dcd0 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/state_machine_based_wrapper_env.py @@ -0,0 +1,321 @@ +"""A wrapped Quadruped with State-machine based controller.""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import enum +import gin +import gym +import numpy as np + +NUM_LEGS = 4 +ACTION_DIM_COM = 2 +ACTION_DIM_TOE = 1 +ACTION_DIM_TOTAL = ACTION_DIM_COM + ACTION_DIM_TOE +OBSERVATION_DIM_LEG_ID = NUM_LEGS +OBSERVATION_DIM_TOE_POS = 2 * NUM_LEGS +OBSERVATION_DIM_TOTAL = OBSERVATION_DIM_TOE_POS + OBSERVATION_DIM_LEG_ID + + +# States of the state machine. +class GaitStateMachine(enum.IntEnum): + """The state machine for quadruped gait.""" + STEP_LEFT_FRONT_TOE = 0 + STEP_RIGHT_HIND_TOE = 1 + STEP_RIGHT_FRONT_TOE = 2 + STEP_LEFT_HIND_TOE = 3 + TOTAL_GAIT_STATE_NUM = 4 + + +@gin.configurable +class StateMachineBasedWrapperEnv(object): + """An env using IK to convert toe positions to joint angles. + + The state machine consists of 4 states. During each state, the center of + mass of the base link is moved first, then one of the legs will take a + step by following a planned elliptical trajectory. The legs will move in + the order of front left -> hind right -> front right -> hind left. + The state transition is determined by elapsed time since last transition. + Observation (16 dimensions): + [one hot vector of the state id, local toe positions in x and y direction] + Action (3 dimensions): + [target moving distance of the current moving leg in x direction, + target moving distance of base COM in x direction, + target moving distance of base COM in y direction] + """ + + def __init__(self, + gym_env, + default_local_toe_positions, + toe_link_indices=(3, 7, 11, 15), + foot_lift_height=0.15, + state_duration=2.0, + action_lower_bound=(-0.0, -0.25, -0.25), + action_upper_bound=(0.3, 0.25, 0.25), + state_to_foot_id=(0, 3, 2, 1)): + """Initialzes the wrapped env. + + Args: + gym_env: An instance of LocomotionGymEnv. + default_local_toe_positions: A list of vectors that contains the default + local position of each toe. + toe_link_indices: A list of indices to the toe link. Used for calculating + local toe positions. + foot_lift_height: Specifies how high the foot lifts during swing stage. + state_duration: Specifies the duration of each state. + action_lower_bound: Lower bound for the actions. + action_upper_bound: Upper bound for the actions. + state_to_foot_id: Mapping from state machine state to foot id. + """ + self._gym_env = gym_env + + assert len(action_lower_bound) == ACTION_DIM_TOTAL + assert len(action_upper_bound) == ACTION_DIM_TOTAL + self.action_space = gym.spaces.Box( + np.array(action_lower_bound), np.array(action_upper_bound)) + observation_lower_bound = np.array([-1.0] * OBSERVATION_DIM_TOTAL) + observation_upper_bound = np.array([1.0] * OBSERVATION_DIM_TOTAL) + self.observation_space = gym.spaces.Box(observation_lower_bound, + observation_upper_bound) + self._default_local_toe_positions = default_local_toe_positions + self._toe_link_indices = toe_link_indices + self._foot_lift_height = foot_lift_height + self._state_to_foot_id = state_to_foot_id + + # Use the largest value for bounding the toe movement + self._toe_move_bound = np.max( + np.abs(np.concatenate([action_lower_bound, action_upper_bound]))) + + # Duration of each state + self.state_machine_state_duration = [state_duration] * int( + GaitStateMachine.TOTAL_GAIT_STATE_NUM) + + def __getattr__(self, attr): + return getattr(self._gym_env, attr) + + def _state_machine_observation(self): + """Get the current observation: [state_id, local_toe_positions].""" + observation = [] + # One-hot vector for the current state machine state. + one_hot_foot_id = np.zeros(GaitStateMachine.TOTAL_GAIT_STATE_NUM) + one_hot_foot_id[self.current_state_machine_state] = 1 + observation.extend(one_hot_foot_id) + + # Toe positions in X and Y direction in the local space. + for toe_index in range(NUM_LEGS): + toe_pos_local = self.current_local_toe_positions[toe_index] + toe_pos_local_xy = [toe_pos_local[0], toe_pos_local[1]] + observation.extend(toe_pos_local_xy) + + return observation + + def _get_constant_accel_interpolation(self, interp_ratio): + """Modify an interpolation between 0 and 1 to have constant acceleration.""" + assert interp_ratio <= 1.0 and interp_ratio >= 0.0 + if interp_ratio < 0.5: + return 0.5 * (2 * interp_ratio)**2 + else: + return -0.5 * (2 * interp_ratio - 2)**2 + 1 + + def _move_com(self, target_com_movement, time_since_transition, + state_duration): + """Get the ik action for moving the COM. + + Args: + target_com_movement: Target COM movement relative to the previous COM + position in the x-y plane. + time_since_transition: Time elapsed since last state machien transition. + state_duration: Duration of the state machine. The first half will be used + for moving COM and the second half for moving the swing leg. + + Returns: + ik_action: ik targets for moving the COM. + """ + com_movement_ratio = np.clip( + time_since_transition / ((state_duration - 0.0) / 2.0), 0, 1) + com_movement_ratio = self._get_constant_accel_interpolation( + com_movement_ratio) + current_com_movement = np.array(target_com_movement) * com_movement_ratio + + ik_action = [] + for toe_index in range(NUM_LEGS): + toe_pos_local = np.copy(self.current_local_toe_positions[toe_index]) + toe_pos_local[2] = self._default_local_toe_positions[toe_index][2] + toe_pos_local[0] -= current_com_movement[0] + toe_pos_local[1] -= current_com_movement[1] + toe_pos_local[0] = np.clip( + toe_pos_local[0], self._default_local_toe_positions[toe_index][0] - + self._toe_move_bound, + self._default_local_toe_positions[toe_index][0] + + self._toe_move_bound) + toe_pos_local[1] = np.clip( + toe_pos_local[1], self._default_local_toe_positions[toe_index][1] - + self._toe_move_bound, + self._default_local_toe_positions[toe_index][1] + + self._toe_move_bound) + ik_action.extend(toe_pos_local) + + zero_translation = [0, 0, 0] + identity_rotation = [0, 0, 0, 1] + ik_action.extend(zero_translation) + ik_action.extend(identity_rotation) + + return ik_action + + def _move_leg(self, target_toe_movement, time_since_transition, + state_duration): + """Get the ik action for moving the swing leg. + + Args: + target_toe_movement: Target toe movement relative to the default toe + position in the positive x direction. + time_since_transition: Time elapsed since last state machien transition. + state_duration: Duration of the state machine. The first half will be used + for moving COM and the second half for moving the swing leg. + + Returns: + ik_action: ik targets for moving the swing leg. + """ + + # The target toe position at the end of the movement. + target_toe_local_position = np.array(self._default_local_toe_positions[ + self._state_to_foot_id[self.current_state_machine_state]]) + target_toe_local_position[0] += target_toe_movement + + # Toe position at the beginning of the movement. + initial_toe_local_position = np.array(self.current_local_toe_positions[ + self._state_to_foot_id[self.current_state_machine_state]]) + + # Auxiliary variables for computing the interpolation between the current + # toe position and the target toe position. + toe_circle_radius = 0.5 * np.linalg.norm( + np.array(target_toe_local_position) - initial_toe_local_position) + toe_moving_direction = np.array( + target_toe_local_position) - initial_toe_local_position + toe_moving_direction /= np.max([np.linalg.norm(toe_moving_direction), 1e-5]) + toe_traj_scale_ratio = self._foot_lift_height / np.max( + [toe_circle_radius, 1e-5]) + + # Current percentage of time into the state machine. + toe_movement_ratio = np.clip( + (time_since_transition - state_duration / 2.0) / + ((state_duration - 0.0) / 2.0), 0, 1) + toe_movement_ratio = self._get_constant_accel_interpolation( + toe_movement_ratio) + toe_circle_moved_angle = np.pi * toe_movement_ratio + + # Target horizontal movement from the previous local toe position. + target_toe_horizontal_movement = toe_circle_radius - np.cos( + toe_circle_moved_angle) * toe_circle_radius + current_toe_target = np.array([ + target_toe_horizontal_movement * toe_moving_direction[0], + target_toe_horizontal_movement * toe_moving_direction[1], + np.sin(toe_circle_moved_angle) * toe_circle_radius * + toe_traj_scale_ratio + ]) + initial_toe_local_position + + ik_action = [] + for toe_index in range(NUM_LEGS): + toe_pos_local = np.copy(self.current_local_toe_positions[toe_index]) + toe_pos_local[2] = self._default_local_toe_positions[toe_index][2] + if toe_index == self._state_to_foot_id[self.current_state_machine_state]: + toe_pos_local[0] = current_toe_target[0] + toe_pos_local[1] = current_toe_target[1] + toe_pos_local[2] = current_toe_target[2] + + ik_action.extend(toe_pos_local) + + zero_translation = [0, 0, 0] + identity_rotation = [0, 0, 0, 1] + ik_action.extend(zero_translation) + ik_action.extend(identity_rotation) + return ik_action + + def _update_state_machine_transition(self): + """Update the state machine state if the duration has been reached.""" + self.current_state_machine_state = (self.current_state_machine_state + 1 + ) % GaitStateMachine.TOTAL_GAIT_STATE_NUM + self.last_state_transition_time = self.robot.GetTimeSinceReset() + + def _update_local_toe_positions(self): + """Update the local position of the toes.""" + identity_orientation = [0, 0, 0, 1] + base_position = self.robot.GetBasePosition() + base_orientation = self.robot.GetBaseOrientation() + inv_base_position, inv_base_orientation = self.pybullet_client.invertTransform( + base_position, base_orientation) + for toe_index in range(NUM_LEGS): + toe_pose_world = self.pybullet_client.getLinkState( + self.robot.quadruped, self._toe_link_indices[toe_index])[0] + toe_pos_local, _ = self.pybullet_client.multiplyTransforms( + inv_base_position, inv_base_orientation, toe_pose_world, + identity_orientation) + self.current_local_toe_positions[toe_index] = np.array(toe_pos_local) + + def step(self, action): + """Steps the wrapped environment. + + Args: + action: Numpy array. The input action from an NN agent. + + Returns: + The tuple containing the modified observation, the reward, the epsiode end + indicator. + + Raises: + ValueError if input action is None. + + """ + if action is None: + raise ValueError("Action cannot be None") + action = np.clip(action, self.action_space.low, self.action_space.high) + sum_reward = 0 + step_num = 0 + state_duration = self.state_machine_state_duration[ + self.current_state_machine_state] + time_since_transition = self.robot.GetTimeSinceReset( + ) - self.last_state_transition_time + + # Move COM + while time_since_transition < state_duration / 2.0: + ik_actions = self._move_com(action[1:3], time_since_transition, + state_duration) + _, reward, done, _ = self._gym_env.step(ik_actions) + sum_reward += reward + step_num += 1 + time_since_transition = self.robot.GetTimeSinceReset( + ) - self.last_state_transition_time + if done: + break + self._update_local_toe_positions() + # Move Leg + while time_since_transition < state_duration: + ik_actions = self._move_leg(action[0], time_since_transition, + state_duration) + _, reward, done, _ = self._gym_env.step(ik_actions) + sum_reward += reward + step_num += 1 + time_since_transition = self.robot.GetTimeSinceReset( + ) - self.last_state_transition_time + if done: + break + self._update_local_toe_positions() + self._update_state_machine_transition() + + state_machine_observation = self._state_machine_observation() + + return state_machine_observation, sum_reward, done, _ + + def reset(self): + """Reset the simulation and state machine states.""" + self.current_state_machine_state = GaitStateMachine.STEP_LEFT_FRONT_TOE + self.last_state_transition_time = 0 + self.current_local_toe_positions = np.copy( + self._default_local_toe_positions) + + self._gym_env.reset() + + state_machine_observation = self._state_machine_observation() + + return state_machine_observation diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/step_based_curriculum_wrapper_env.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/step_based_curriculum_wrapper_env.py new file mode 100644 index 000000000..e6296cd80 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/step_based_curriculum_wrapper_env.py @@ -0,0 +1,231 @@ +"""A wrapped LocomotionGymEnv with functions that change the world and task.""" + +import numbers +from typing import Optional, Sequence, Text, Tuple, Union + +import numpy as np + +import gin + + +@gin.configurable +class CurriculumParameter(object): + """Definition of a env parameter tuned by a curriculum.""" + + def __init__(self, + name: Text, + init_val: numbers.Real, + bounds: Tuple[numbers.Real, numbers.Real]): + """A parameter to tune throughout the curriculum. + + Args: + name: The name of the curriculum parameter. This must be the name of + attribute of the scene class. + init_val: The value to use at the start of the curriculum. + bounds: A tuple of [lower_bound, upper_bound] defining the minimum and + maximum values of the parameter. + """ + self.name = name + + if not isinstance(bounds[0], type(bounds[1])): + raise ValueError("All elements in [bounds] must be of the same type.") + + if (init_val < min(bounds)) or (init_val > max(bounds)): + raise ValueError("Initial parameter value must lie in range defined" + " by [bounds].") + + if not isinstance(init_val, type(bounds[0])): + raise ValueError("[init_val] type must match the type of the elements" + " in [bounds].") + + self.init_val = init_val + self.bounds = bounds + self.dtype = type(init_val) + + +@gin.configurable +class RandomSamplingCurriculumParameter(CurriculumParameter): + """Env parameter whose value is sampled randomly without curriculum.""" + + def __init__(self, name: Text, bounds: Tuple[numbers.Real, numbers.Real]): + """A parameter whose value to sample randomly. + + Args: + name: The name of the parameter. + bounds: A tuple of [lower_bound, upper_bound] defining the minimum and + maximum values of the parameter. + """ + super(RandomSamplingCurriculumParameter, self).__init__( + name=name, init_val=bounds[0], bounds=bounds) + + def sample( + self, step: numbers.Real, + curriculum_steps: Optional[numbers.Real] = None) -> Union[int, float]: + del step, curriculum_steps + sampled_val = np.random.uniform(*self.bounds) + + if not isinstance(self.bounds[0], float): + sampled_val = int(round(sampled_val)) + + return sampled_val + + def __call__( + self, step: numbers.Real, + curriculum_steps: Optional[numbers.Real] = None) -> Union[int, float]: + return self.sample(step, curriculum_steps) + + +@gin.configurable +class LinearStepBasedCurriculumParameter(CurriculumParameter): + """Definition of a env parameter tuned by a linear time-based curriculum.""" + + def __init__(self, + name: Text, + init_val: numbers.Real, + bounds: Tuple[numbers.Real, numbers.Real], + curriculum_steps: Optional[numbers.Real] = None): + """A parameter to tune throughout the curriculum. + + Args: + name: The name of the curriculum parameter. This must be the name of + attribute of the scene class. + init_val: The value to use at the start of the curriculum. + bounds: A tuple of [lower_bound, upper_bound] defining the minimum and + maximum values of the parameter. + curriculum_steps: Integer defining the number of steps to take when + varying the curriculum parameter value from the init_val to either + bound. If None is specified, then the curriculum must provide the + curriculum_steps when sampling. + """ + super(LinearStepBasedCurriculumParameter, self).__init__( + name=name, init_val=init_val, bounds=bounds) + self.curriculum_steps = curriculum_steps + + def get_bounds_at_step( + self, step: numbers.Real, + curriculum_steps: Optional[numbers.Real] = None + ) -> Tuple[Union[int, float], Union[int, float]]: + """Compute the bounds of the parameter at the current step. + + Args: + step: An integer defining the current timestep. + curriculum_steps: Optional curriculum steps. Must be passed if not passed + during initialization. + Returns: + A tuple containing the lower bound and upper bound at the current step. + """ + + if not self.curriculum_steps and not curriculum_steps: + raise ValueError("curriculum_steps not defined. Must be passed upon" + " initialization or must specified by curriculum" + " wrapper env on method call.") + + if self.curriculum_steps: + curriculum_steps = self.curriculum_steps + + prog = min(float(step) / curriculum_steps, 1.0) + curr_lower_bound = self.init_val - prog * (self.init_val - self.bounds[0]) + curr_upper_bound = self.init_val + prog * (self.bounds[1] - self.init_val) + + if not isinstance(self.bounds[0], float): + curr_lower_bound = int(round(curr_lower_bound)) + curr_upper_bound = int(round(curr_upper_bound)) + + return (curr_lower_bound, curr_upper_bound) + + def sample( + self, step: numbers.Real, + curriculum_steps: Optional[numbers.Real] = None) -> Union[int, float]: + sampled_val = np.random.uniform(*self.get_bounds_at_step( + step, curriculum_steps)) + + if not isinstance(self.bounds[0], float): + sampled_val = int(round(sampled_val)) + + return sampled_val + + def __call__( + self, step: numbers.Real, + curriculum_steps: Optional[numbers.Real] = None) -> Union[int, float]: + return self.sample(step, curriculum_steps) + + +@gin.configurable +class Task(object): + """Defines a single task in the environment and its corresponding params.""" + + def __init__(self, name: Text, + curriculum_parameters: Sequence[CurriculumParameter]): + """Initialize the task. + + Args: + name: The name of the task. + curriculum_parameters: A list of CurriculumParameter instances which + define the parameters that this task makes use of. + """ + self.name = name + self.curriculum_parameters = curriculum_parameters + + +@gin.configurable +class StepBasedCurriculumWrapperEnv(object): + """A wrapper to tune the scene parameters linearly with the steps taken.""" + + def __init__(self, env, tasks: Sequence[Task], + default_curriculum_steps: Optional[numbers.Real] = None, + reset_total_step_count_val: numbers.Real = -1, + steps_before_curriculum_start: numbers.Real = 0): + """Initializes the linear curriculum wrapper env. + + Args: + env: An instance of a (potentially previously wrapped) LocomotionGymEnv. + tasks: Various tasks to shuffle through throughout the curriculum. + default_curriculum_steps: Optional default value for curriculum steps. + reset_total_step_count_val: Step at which to reset the total step count. + The internal total_step_count is reset to 0 once this value is reached. + steps_before_curriculum_start: Steps to take in environment before the + curriculum begins. + """ + self._gym_env = env + self._tasks = tasks + self._default_curriculum_steps = default_curriculum_steps + self._reset_total_step_count_val = reset_total_step_count_val + self._steps_before_curriculum_start = steps_before_curriculum_start + + # Total number of environment steps. + self._total_step_count = 0 + + def __getattr__(self, attr): + return getattr(self._gym_env, attr) + + def set_scene_params(self): + # Choose a task at random. + curr_task = np.random.choice(self._tasks) + + # Cycle through the task's parameters and set them in the scene. + self._gym_env.scene.reset_scene_params() + self._gym_env.scene.scene_type = curr_task.name + for curriculum_parameter in curr_task.curriculum_parameters: + setattr( + self._gym_env.scene, curriculum_parameter.name, + curriculum_parameter( + self._total_step_count - self._steps_before_curriculum_start, + self._default_curriculum_steps)) + + def reset(self, *args, **kwargs): + """Reset and adjust the environment.""" + + # Update the total step count. + self._total_step_count += self._gym_env.env_step_counter + if self._reset_total_step_count_val >= 0: + if self._total_step_count >= self._reset_total_step_count_val: + self._total_step_count = 0 + + if self._total_step_count < self._steps_before_curriculum_start: + return self._get_observation() + + self.set_scene_params() + self._gym_env.reset(*args, **kwargs) + + return self._get_observation() + diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/trajectory_generator_wrapper_env.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/trajectory_generator_wrapper_env.py new file mode 100644 index 000000000..a2c6f0bf6 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/trajectory_generator_wrapper_env.py @@ -0,0 +1,81 @@ +"""A wrapped MinitaurGymEnv with a built-in controller.""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + + +import gin + + +@gin.configurable +class TrajectoryGeneratorWrapperEnv(object): + """A wrapped LocomotionGymEnv with a built-in trajectory generator.""" + + def __init__(self, gym_env, trajectory_generator): + """Initialzes the wrapped env. + + Args: + gym_env: An instance of LocomotionGymEnv. + trajectory_generator: A trajectory_generator that can potentially modify + the action and observation. Typticall generators includes the PMTG and + openloop signals. Expected to have get_action and get_observation + interfaces. + + Raises: + ValueError if the controller does not implement get_action and + get_observation. + + """ + self._gym_env = gym_env + if not hasattr(trajectory_generator, 'get_action') or not hasattr( + trajectory_generator, 'get_observation'): + raise ValueError( + 'The controller does not have the necessary interface(s) implemented.' + ) + + self._trajectory_generator = trajectory_generator + + # The trajectory generator can subsume the action/observation space. + if hasattr(trajectory_generator, 'observation_space'): + self.observation_space = self._trajectory_generator.observation_space + + if hasattr(trajectory_generator, 'action_space'): + self.action_space = self._trajectory_generator.action_space + + def __getattr__(self, attr): + return getattr(self._gym_env, attr) + + def _modify_observation(self, observation): + return self._trajectory_generator.get_observation(observation) + + def reset(self, initial_motor_angles=None, reset_duration=1.0): + if getattr(self._trajectory_generator, 'reset'): + self._trajectory_generator.reset() + observation = self._gym_env.reset(initial_motor_angles, reset_duration) + return self._modify_observation(observation) + + def step(self, action): + """Steps the wrapped environment. + + Args: + action: Numpy array. The input action from an NN agent. + + Returns: + The tuple containing the modified observation, the reward, the epsiode end + indicator. + + Raises: + ValueError if input action is None. + + """ + + if action is None: + raise ValueError('Action cannot be None') + + new_action = self._trajectory_generator.get_action( + self._gym_env.robot.GetTimeSinceReset(), action) + + original_observation, reward, done, _ = self._gym_env.step(new_action) + + return self._modify_observation(original_observation), reward, done, _ diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/walking_wrapper.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/walking_wrapper.py new file mode 100644 index 000000000..6235a8536 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/env_wrappers/walking_wrapper.py @@ -0,0 +1,134 @@ +"""Wraps a quadruped walking controller for navigation control.""" + +from typing import Any +import gin +from gym import spaces +import numpy as np + +from pybullet_envs.minitaur.agents.baseline_controller import com_velocity_estimator +from pybullet_envs.minitaur.agents.baseline_controller import locomotion_controller +from pybullet_envs.minitaur.agents.baseline_controller import openloop_gait_generator +from pybullet_envs.minitaur.agents.baseline_controller import raibert_swing_leg_controller +from pybullet_envs.minitaur.agents.baseline_controller import torque_stance_leg_controller + +_N_LEGS = 4 +_STANCE_DURATION_SECONDS = [ + 0.25 +] * _N_LEGS # The stance phase duration for each leg. +_DUTY_FACTOR = [ + 0.6 +] * _N_LEGS # Percentage of the leg in the stance phase within the cycle. +_BODY_HEIGHT = 0.45 +_INIT_PHASE_FULL_CYCLE = [0, 0.5, 0.5, 0] + + +def _setup_controller(robot: Any) -> locomotion_controller.LocomotionController: + """Creates the controller.""" + desired_speed = (0, 0) + desired_twisting_speed = 0 + + gait_generator = openloop_gait_generator.OpenloopGaitGenerator( + robot, + stance_duration=_STANCE_DURATION_SECONDS, + duty_factor=_DUTY_FACTOR, + initial_leg_phase=_INIT_PHASE_FULL_CYCLE) + state_estimator = com_velocity_estimator.COMVelocityEstimator(robot) + sw_controller = raibert_swing_leg_controller.RaibertSwingLegController( + robot, + gait_generator, + state_estimator, + desired_speed=desired_speed, + desired_twisting_speed=desired_twisting_speed, + desired_height=_BODY_HEIGHT, + ) + st_controller = torque_stance_leg_controller.TorqueStanceLegController( + robot, + gait_generator, + state_estimator, + desired_speed=desired_speed, + desired_twisting_speed=desired_twisting_speed, + desired_body_height=_BODY_HEIGHT, + body_mass=215 / 9.8, + body_inertia=(0.07335, 0, 0, 0, 0.25068, 0, 0, 0, 0.25447), + ) + + controller = locomotion_controller.LocomotionController( + robot=robot, + gait_generator=gait_generator, + state_estimator=state_estimator, + swing_leg_controller=sw_controller, + stance_leg_controller=st_controller, + clock=robot.GetTimeSinceReset) + return controller + + +def _update_controller_params( + controller: locomotion_controller.LocomotionController, + lin_speed: np.ndarray, ang_speed: float): + """Apply the desired speed and twisting speed.""" + controller.swing_leg_controller.desired_speed = lin_speed + controller.swing_leg_controller.desired_twisting_speed = ang_speed + controller.stance_leg_controller.desired_speed = lin_speed + controller.stance_leg_controller.desired_twisting_speed = ang_speed + + +@gin.configurable +class WalkingWrapper(object): + """Wraps a baseline walking controller for Laikago/Vision60.""" + + def __init__(self, + gym_env: Any, + action_repeat=20, + speed_bound=(-0.3, 0.3), + angular_speed_bound=(-0.3, 0.3)): + """Initialzes the wrapped env. + + Args: + gym_env: An instance of LocomotionGymEnv. + action_repeat: Number of control steps to run low level controller with + the high level inputs per step(). + speed_bound: The min/max of the input speed. + angular_speed_bound: The min/max of the twisting speed. + """ + self._gym_env = gym_env + self._controller = _setup_controller(self._gym_env.robot) + self._action_repeat = action_repeat + + action_low = np.array(speed_bound) + action_high = np.array(angular_speed_bound) + + # Overwrite the action space. + self.action_space = spaces.Box(action_low, action_high) + + def reset(self, *args, **kwargs) -> Any: + obs = self._gym_env.reset(*args, **kwargs) + # The robot instance might have been replaced if hard_reset is called. We + # just recreate the controller. + self._controller = _setup_controller(self._gym_env.robot) + self._controller.reset() + return obs + + def __getattr__(self, attr): + return getattr(self._gym_env, attr) + + def step(self, action) -> Any: + """Steps the wrapped env with high level commands. + + Args: + action: A high level command containing the desired linear and angular + speed of the robot base. The speed can be adjusted at any time. + + Returns: + The gym env observation, reward, termination, and additional info. + + """ + lin_speed = np.array((action[0], 0, 0)) + ang_speed = action[1] + _update_controller_params(self._controller, lin_speed, ang_speed) + for _ in range(self._action_repeat): + self._controller.update() + hybrid_action = self._controller.get_action() + obs, reward, done, info = self._gym_env.step(hybrid_action) + if done: + break + return obs, reward, done, info diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/evaluation/__init__.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/evaluation/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/evaluation/metric.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/evaluation/metric.py new file mode 100644 index 000000000..00dea1800 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/evaluation/metric.py @@ -0,0 +1,125 @@ +"""The metric reporting system used in our env. + +In the gym environment, there are many variables or quantities that can help +researchers to debug, evaluate policy performance. Such quantities may +include: Motor torques for quadrupeds, even when they are controlled in +POSITION mode; Distance to walls while a wheeled robot is navigating the +indoor environment. Often, these metrics are private variables (or can only be +computed from private variables). To expose the user interested metrics +outside the environment's observations, we designed this Metric system that +can be invoked in any modules (robot, tasks, sensors) inside the gym env. +""" + +import enum +import logging +from typing import Any, Callable, Dict, Sequence, Text +import gin + + +@gin.constants_from_enum +class MetricScope(enum.Enum): + """The supported scope of metrics.""" + # The performance metrics. + PERFORMANCE = 1, + + # The debug metrics for diagnostic purposes. + DEBUG = 2, + + # The safety metrics. + SAFETY = 3, + + # The statistics of episodes in metric format. + STATISTIC = 4, + + +class MetricCore(object): + """Aggregates values of interest to compute statistics.""" + + def __init__( + self, + name: Text, + scope: MetricScope, + single_ep_aggregator: Callable[[Sequence[Any]], Any], + multi_ep_aggregator: Callable[[Sequence[Any]], Dict[Text, Any]], + ): + """Initializes the class. + + Args: + name: The name of the metric, for example "motor_torques", + "distance_to_wall", etc. The full name of the metric will have scope + name in the prefix, i.e. "scope/name". + scope: The scope of this metric. Most metric should be for DEBUG purpose. + The scope name will be added to the final name of metric in this way: + "scope/name", which is standarded format for Tensorboard to group + named variables. + single_ep_aggregator: The function to process all aggregated metric + values. The derived MetricReporter (see below) will implements + reset_episode() which clears the episode data, and will be called during + env.reset(). + multi_ep_aggregator: The functions to process multi-episode metric values. + We assume the inputs to the functions is a list of per episode metric + values, i.e. each element of the list is the output from the + single_ep_aggregator. + """ + self._name = scope.name + "/" + name + self._single_ep_aggregator = single_ep_aggregator + self._multi_ep_aggregator = multi_ep_aggregator + self._episode_data = [] + + def report(self, metric_value: Any): + """Stores the reported metric in the internal buffer. + + Args: + metric_value: The metric we are interested to report. + """ + self._episode_data.append(metric_value) + + +class MetricReporter(MetricCore): + """Reports the metric using the provided aggregator functions.""" + + def get_episode_metric(self) -> Dict[Text, Sequence[Any]]: + """Processes and returns episode metric values. + + Returns: + Aggregated metrics for the current episode. + """ + if self._episode_data: + return {self._name: self._single_ep_aggregator(self._episode_data)} + else: + return {} + + def get_multi_ep_metric( + self, episodic_metric: Dict[Text, Sequence[Any]]) -> Dict[Text, Any]: + """Processes the aggregated metrics over many episodes. + + Will not be affected by reset_episode, since we take multi-episode data as + inputs. + + Args: + episodic_metric: The per episode metrics. We expect the inputs to contain + the same key as self._name, and that the value is a list of metric + values computed using self.get_episode_metrc(). + + Returns: + The processed multi-episode metrics. + """ + if self._name not in episodic_metric: + logging.warning( + "The inputs does not contain the key for the current metric: %s", + self._name) + return {} + outputs = {} + for key, val in self._multi_ep_aggregator( + episodic_metric[self._name]).items(): + outputs[self._name + "_" + key] = val + return outputs + + def reset_episode(self): + """Clears the episode data stored. + + Will be invoked during env.reset(). This will effect how get_episode_metric + gets computed. + + """ + self._episode_data = [] diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/evaluation/metric_logger.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/evaluation/metric_logger.py new file mode 100644 index 000000000..05d24b4e1 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/evaluation/metric_logger.py @@ -0,0 +1,155 @@ +# Lint as: python3 +"""The system to log and manage all metrics.""" + +import logging +from typing import Any, Callable, Dict, Sequence, Text, Union +import numpy as np + +from pybullet_envs.minitaur.envs_v2.evaluation import metric as metric_lib + + +def _merge_dict_throw_on_duplicates( + dict_1: Dict[Text, Any], + dict_2: Dict[Text, Any], +): + """Merge the contents of dict_2 to dict_1. + + Args: + dict_1: The dictionary to merge into. + dict_2: The dictionary to merge from. + + Raises: + KeyError: if duplicated keys are found. + """ + for key, val in dict_2.items(): + if key in dict_1: + raise KeyError(f"Duplicate key: {key} found in both " + f"dictionaries: {dict_1} {dict_2}.") + dict_1[key] = val + + +def common_stats(x: Sequence[Union[float, Sequence[float]]], + flatten_array=False): + out = x + if flatten_array: + # Deals with array of arrays. + out = np.concatenate(x).flatten() + return { + "mean": np.mean(out), + "max": np.max(out), + "min": np.min(out), + "std": np.std(out), + } + + +class MetricLogger(object): + """The central system to manage all metrics.""" + + def __init__(self, ignore_duplicate_metrics: bool = True): + """Initializes the system. + + Args: + ignore_duplicate_metrics: Don't throw error when users want to recreate + the same metric. + """ + self._metric_reporters = {} + self._ignore_duplicate_metrics = ignore_duplicate_metrics + + def reset_episode(self): + """Resets all metric reporters's internal buffer. + + Will be called by the gym env during reset. + """ + for metric in self._metric_reporters.values(): + metric.reset_episode() + + def create_metric( + self, + name: Text, + scope: metric_lib.MetricScope, + single_ep_aggregator: Callable[[Sequence[Any]], Any], + multi_ep_aggregator: Callable[[Sequence[Any]], Dict[Text, Any]], + ) -> metric_lib.MetricCore: + """Creates a new metric. + + Args: + name: The name of the metric, for example "motor_torques", + "distance_to_wall", etc. The full name of the metric will have scope + name in the prefix, i.e. "scope/name". + scope: The scope of this metric. Most metric should be for DEBUG purpose. + The scope name will be added to the final name of metric in this way: + "scope/name", which is standarded format for Tensorboard to group + named variables. + single_ep_aggregator: The function to process all aggregated metric + values. The derived MetricReporter (see below) will implements + reset_episode() which clears the episode data, and will be called during + env.reset(). + multi_ep_aggregator: The function to process multi-episode metric values. + We assume the inputs to the function is a list of per episode metric + values, i.e. each element of the list is the output from the + single_ep_aggregator. + + Returns: + A MetricCore which can be used to report values of interest. + """ + if name in self._metric_reporters: + if self._ignore_duplicate_metrics: + logging.warning("Trying to create an existing metric: %s", name) + name = self._get_valid_duplicate_name(name) + logging.warning("Changed duplicate metric to new name: %s", name) + else: + raise ValueError(f"Duplicated metrics found: {name}") + + self._metric_reporters[name] = metric_lib.MetricReporter( + name, scope, single_ep_aggregator, multi_ep_aggregator) + return self._metric_reporters[name] + + def create_scalar_metric( + self, + name: Text, + scope: metric_lib.MetricScope, + single_ep_aggregator: Callable[[Sequence[Any]], Any], + ) -> metric_lib.MetricCore: + """Shortcut to create a metric for scalar variables.""" + return self.create_metric( + name, + scope, + single_ep_aggregator, + multi_ep_aggregator=common_stats, + ) + + def _get_valid_duplicate_name(self, original_name: Text) -> Text: + counter = 1 + test_name = "{}_duplicate_{}".format(original_name, str(counter)) + while test_name in self._metric_reporters: + counter += 1 + test_name = "{}_duplicate_{}".format(original_name, str(counter)) + return test_name + + def get_episode_metrics(self) -> Dict[Text, Any]: + """Return all metrics registered in the logger for the current episode.""" + ep_stats = {} + for metric in self._metric_reporters.values(): + _merge_dict_throw_on_duplicates(ep_stats, metric.get_episode_metric()) + return ep_stats + + def get_multi_episode_metrics( + self, episodic_metrics: Dict[Text, Sequence[Any]]) -> Dict[Text, Any]: + """Processes the aggregated metrics over many episodes. + + Will not be affected by reset_episode, since we take multi-episode data as + inputs. + + Args: + episodic_metrics: The per episode metrics. For each key in the inputs, we + expect at least one metric reporter can process the corresponding value, + which contains a list of episodic metrics. + + Returns: + The processed multi-episode metrics. + """ + stats = {} + for metric in self._metric_reporters.values(): + _merge_dict_throw_on_duplicates( + stats, metric.get_multi_ep_metric(episodic_metrics)) + return stats diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/evaluation/metric_utils.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/evaluation/metric_utils.py new file mode 100644 index 000000000..1defba977 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/evaluation/metric_utils.py @@ -0,0 +1,29 @@ +"""Helper class and functions to make computing meteric statistics easier.""" +from typing import Any, Sequence + +import numpy as np + + +class MetricStats(object): + """Helper class to make computing meteric statistics easier to manage.""" + + def __init__(self, data: Sequence[Any]): + if None or not list(data): + raise ValueError("Input data for ComputeMetricStats cannot be empty.") + self._data = np.asarray(data).flatten() + + @property + def avg(self): + return np.mean(self._data) + + @property + def min(self): + return np.min(self._data) + + @property + def max(self): + return np.max(self._data) + + @property + def sum(self): + return np.sum(self._data) diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/examples/laikago_mpc_wrapper_example.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/examples/laikago_mpc_wrapper_example.py new file mode 100644 index 000000000..ad41f5633 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/examples/laikago_mpc_wrapper_example.py @@ -0,0 +1,96 @@ +# Lint as: python3 +r"""An example where Laikago walks forward using mpc controller. + +This script illustrates an example of MPCLocomotionWrapper class for +controlling a simulated Laikago robot to walk on a flat ground. The wrapped +environment takes as input the target local foothold locations and the desired +base pose. An MPC-based controller is executed internally to compute the +required forces to achieve the desired foothold position and base movement. + + +blaze run -c opt \ +//robotics/reinforcement_learning/minitaur/envs_v2/examples\ +:laikago_mpc_wrapper_example +""" +import os +import tempfile + +from absl import app +from absl import flags +import gin +import numpy as np +import pybullet_data as pd + +from pybullet_envs.minitaur.envs_v2 import env_loader + +FLAGS = flags.FLAGS +flags.DEFINE_string("video_file", None, "The filename for saving the videos.") + +CONFIG_FILE_SIM = (pd.getDataPath()+"/configs/laikago_mpc_example_flat.gin") + +NUM_STEPS = 100 +ENABLE_RENDERING = True # Will be disabled for tests +ENV_RANDOM_SEED = 100 +DEFAULT_TARGET_FOOTHOLD = (0.05, 0.0, -0.01) +DEFAULT_BASE_VELOCITY = (0.0, 0.0) +DEFAULT_TWIST_SPEED = 0.0 +DEFAULT_BODY_HEIGHT = 0.45 +DEFAULT_ROLL_PITCH = (0.0, 0.0) +DEFAULT_SWING_HEIGHT = 0.07 + + +def _build_env(): + """Builds the environment for the Laikago robot. + + Returns: + The OpenAI gym environment. + """ + gin.parse_config_file(CONFIG_FILE_SIM) + gin.bind_parameter("SimulationParameters.enable_rendering", ENABLE_RENDERING) + env = env_loader.load() + env.seed(ENV_RANDOM_SEED) + + return env + + +def _run_example(): + """An example that Laikago moves with a constant speed and predicts foothold. + + Returns: + env: the environment after the simulation + """ + + env = _build_env() + + env.reset() + if FLAGS.video_file is not None: + pybullet = env.pybullet_client + pybullet.configureDebugVisualizer(pybullet.COV_ENABLE_GUI, 0) + log_id = pybullet.startStateLogging(pybullet.STATE_LOGGING_VIDEO_MP4, + FLAGS.video_file) + + try: + max_step = NUM_STEPS + for _ in range(max_step): + target_foothold = np.array(DEFAULT_TARGET_FOOTHOLD) + action = np.concatenate([ + target_foothold, target_foothold, target_foothold, target_foothold, + [ + DEFAULT_SWING_HEIGHT, DEFAULT_SWING_HEIGHT, DEFAULT_SWING_HEIGHT, + DEFAULT_SWING_HEIGHT + ], DEFAULT_BASE_VELOCITY, [DEFAULT_TWIST_SPEED], + [DEFAULT_BODY_HEIGHT], DEFAULT_ROLL_PITCH + ]) + _ = env.step(action) + finally: + if FLAGS.video_dir is not None: + pybullet.stopStateLogging(log_id) + + +def main(argv): + del argv + _run_example() + + +if __name__ == "__main__": + app.run(main) diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/examples/laikago_pmtg_example.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/examples/laikago_pmtg_example.py new file mode 100644 index 000000000..c86c10db4 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/examples/laikago_pmtg_example.py @@ -0,0 +1,84 @@ +r"""An example to run an OpenAI gym environment with laikago and PMTG wrapper. + +This is an open-loop controller where we use 0 residuals and only execute the +trajectory generator. The parameters that are (normally modulated by the policy) +are fixed (except the intensity) and not optimized. They are hand picked as +follows: + - The gait cycle frequency is 3 Hz. + - Walking height is neutral (0). + - Swing vs stance ratio is 2 (swing takes half the time vs stance). + - Intensity starts from zero and is gradually increased over time. + +blaze run -c opt \ +//robotics/reinforcement_learning/minitaur/envs_v2/examples\ +:laikago_pmtg_example +""" +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import os + +import gin +import tensorflow.compat.v1 as tf +from pybullet_envs.minitaur.envs_v2 import env_loader +import pybullet_data as pd + +CONFIG_DIR = pd.getDataPath()+"/configs_v2/" +CONFIG_FILES = [ + os.path.join(CONFIG_DIR, "base/laikago_with_imu.gin"), + os.path.join(CONFIG_DIR, "tasks/fwd_task_no_termination.gin"), + os.path.join(CONFIG_DIR, "wrappers/pmtg_wrapper.gin"), + os.path.join(CONFIG_DIR, "scenes/simple_scene.gin") +] +# Constants used to show example PMTG behavior with zero residual. +# Since we use the default PMTG configuration, there is only one trajectory +# generator. So the parameters that can be changed are: +# - Multiplier for delta time (similar to frequency but per time step). +# - Intensity of the trajectory generator. +# - Walking heights used for the legs. +# - The ratio of the speed of the leg during swing vs stance phase. +# For more details, check out TgSimple._process_tg_params method. +_PMTG_DELTA_TIME_MULTIPLIER = 2.0 +_PMTG_INTENSITY_RANGE = (0.0, 1.5) +_PMTG_INTENSITY_STEP_SIZE = 0.0001 +_PMTG_WALKING_HEIGHT = -0.3 +_PMTG_SWING_VS_STANCE = 2 +_NUM_MOTORS = 12 + + +def main(argv): + del argv # Unused. + + # Parse the gym config and create the environment. + for gin_file in CONFIG_FILES: + gin.parse_config_file(gin_file) + gin.bind_parameter("SimulationParameters.enable_rendering", True) + gin.bind_parameter("terminal_conditions.maxstep_terminal_condition.max_step", + 10000) + env = env_loader.load() + tg_intensity = _PMTG_INTENSITY_RANGE[0] + sum_reward = 0 + env.reset() + done = False + # Use zero residual, only use the output of the trajectory generator. + residual = [0] * _NUM_MOTORS + # Since we fix residuals and all the parameters of the TG, this example + # is practically an open loop controller. A learned policy would provide + # different values for these parameters at every timestep. + while not done: + # Increase the intensity of the trajectory generator gradually + # to illustrate increasingly larger steps. + if tg_intensity < _PMTG_INTENSITY_RANGE[1]: + tg_intensity += _PMTG_INTENSITY_STEP_SIZE + tg_params = [ + _PMTG_DELTA_TIME_MULTIPLIER, tg_intensity, _PMTG_WALKING_HEIGHT, + _PMTG_SWING_VS_STANCE + ] + action = residual + tg_params + _, reward, done, _ = env.step(action) + sum_reward += reward + + +if __name__ == "__main__": + tf.app.run(main) diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/examples/laikago_static_gait_example.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/examples/laikago_static_gait_example.py new file mode 100644 index 000000000..13e2387cc --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/examples/laikago_static_gait_example.py @@ -0,0 +1,52 @@ +# Lint as: python3 +r"""An example that the Laikago walks forward using a static gait. + +blaze run -c opt //robotics/reinforcement_learning/minitaur/envs_v2/examples:\ +laikago_static_gait_example +""" +from absl import app +from absl import flags +import gin +from pybullet_envs.minitaur.agents.baseline_controller import static_gait_controller +from pybullet_envs.minitaur.envs_v2 import env_loader +import pybullet_data as pd + +flags.DEFINE_bool("render", True, "Whether to render the example.") + +FLAGS = flags.FLAGS +_CONFIG_FILE = pd.getDataPath()+"/configs/laikago_walk_static_gait.gin" +_NUM_STEPS = 10000 +_ENV_RANDOM_SEED = 13 + + +def _load_config(render=False): + gin.parse_config_file(_CONFIG_FILE) + gin.bind_parameter("SimulationParameters.enable_rendering", render) + + +def run_example(num_max_steps=_NUM_STEPS): + """Runs the example. + + Args: + num_max_steps: Maximum number of steps this example should run for. + """ + env = env_loader.load() + + env.seed(_ENV_RANDOM_SEED) + observation = env.reset() + policy = static_gait_controller.StaticGaitController(env.robot) + + for _ in range(num_max_steps): + action = policy.act(observation) + _, _, done, _ = env.step(action) + if done: + break + + +def main(_): + _load_config(FLAGS.render) + run_example() + + +if __name__ == "__main__": + app.run(main) diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/locomotion_gym_config.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/locomotion_gym_config.py new file mode 100644 index 000000000..7b9ad955a --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/locomotion_gym_config.py @@ -0,0 +1,58 @@ +"""A gin-config class for locomotion_gym_env. + +This should be identical to locomotion_gym_config.proto. +""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +from typing import Sequence, Text + +import attr +import gin + + +@gin.configurable +@attr.s +class SimulationParameters(object): + """Parameters specific for the pyBullet simulation.""" + sim_time_step_s = attr.ib(type=float, default=0.002) + num_action_repeat = attr.ib(type=int, default=5) + enable_hard_reset = attr.ib(type=bool, default=False) + enable_rendering = attr.ib(type=bool, default=False) + enable_rendering_gui = attr.ib(type=bool, default=True) + robot_on_rack = attr.ib(type=bool, default=False) + camera_target = attr.ib(type=Sequence[float], default=None) + camera_distance = attr.ib(type=float, default=1.0) + camera_yaw = attr.ib(type=float, default=0) + camera_pitch = attr.ib(type=float, default=-30) + render_width = attr.ib(type=int, default=480) + render_height = attr.ib(type=int, default=360) + egl_rendering = attr.ib(type=bool, default=False) + + +@gin.configurable +@attr.s +class ScalarField(object): + """A named scalar space with bounds.""" + # TODO(sehoonha) extension to vector fields. + name = attr.ib(type=str) + upper_bound = attr.ib(type=float) + lower_bound = attr.ib(type=float) + + +@gin.configurable +@attr.s +class LocomotionGymConfig(object): + """Grouped Config Parameters for LocomotionGym.""" + simulation_parameters = attr.ib(type=SimulationParameters) + # TODO(sehoonha) implement attr validators for the list + actions = attr.ib(type=list, default=None) # pylint: disable=g-bare-generic + log_path = attr.ib(type=Text, default=None) + data_dir = attr.ib( + type=Text, + default='robotics/reinforcement_learning/minitaur/data/') + profiling_path = attr.ib(type=Text, default=None) + seed = attr.ib(type=int, default=None) + ignored_sensor_list = attr.ib(type=Sequence[Text], default=()) diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/locomotion_gym_config_test.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/locomotion_gym_config_test.py new file mode 100644 index 000000000..fc53f02e7 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/locomotion_gym_config_test.py @@ -0,0 +1,75 @@ +"""Tests for pybullet_envs.minitaur.envs.locomotion_gym_config.""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import gin +from pybullet_envs.minitaur.envs_v2 import locomotion_gym_config +import tensorflow.compat.v1 as tf +from absl.testing import parameterized + + + +class LocomotionGymConfigTest(tf.test.TestCase, parameterized.TestCase): + + def testSimulationParametersFromGinString(self): + config_text = ( + 'import pybullet_envs.minitaur' + '.envs_v2.locomotion_gym_config\n' + 'locomotion_gym_config.SimulationParameters.sim_time_step_s = 0.005\n' + 'locomotion_gym_config.SimulationParameters.camera_distance = 5.0\n' + 'locomotion_gym_config.SimulationParameters.camera_yaw = 10\n' + 'locomotion_gym_config.SimulationParameters.camera_pitch = -50\n' + ) + gin.parse_config(config_text) + + cfg = locomotion_gym_config.SimulationParameters() + self.assertEqual(cfg.sim_time_step_s, 0.005) + self.assertFalse(cfg.enable_hard_reset) + self.assertEqual(cfg.camera_distance, 5.0) + self.assertEqual(cfg.camera_yaw, 10) + self.assertEqual(cfg.camera_pitch, -50) + + def testScalarFieldFromGinString(self): + config_text = ( + 'import pybullet_envs.minitaur' + '.envs_v2.locomotion_gym_config\n' + 'locomotion_gym_config.ScalarField.name = "MotorUpperLimit"\n' + 'locomotion_gym_config.ScalarField.upper_bound = 1.0\n' + 'locomotion_gym_config.ScalarField.lower_bound = -1.0\n' + ) + gin.parse_config(config_text) + + cfg = locomotion_gym_config.ScalarField() + self.assertEqual(cfg.name, 'MotorUpperLimit') + self.assertEqual(cfg.upper_bound, 1.0) + self.assertEqual(cfg.lower_bound, -1.0) + + def testLocomotionGymConfigFromGinString(self): + config_text = ( + 'import pybullet_envs.minitaur' + '.envs_v2.locomotion_gym_config\n' + # SimulationParameters + 'locomotion_gym_config.SimulationParameters.sim_time_step_s = 0.005\n' + # Actions + 'Motor/locomotion_gym_config.ScalarField.name = "MotorUpperLimit"\n' + 'Motor/locomotion_gym_config.ScalarField.upper_bound = 1.0\n' + 'Motor/locomotion_gym_config.ScalarField.lower_bound = -1.0\n' + # LocomotionGymConfigs + 'locomotion_gym_config.LocomotionGymConfig.simulation_parameters = ' + '@locomotion_gym_config.SimulationParameters()\n' + 'locomotion_gym_config.LocomotionGymConfig.actions = [' + '@Motor/locomotion_gym_config.ScalarField()]\n' + 'locomotion_gym_config.LocomotionGymConfig.ignored_sensor_list = [' + '"Collisions"]\n') + gin.parse_config(config_text) + + cfg = locomotion_gym_config.LocomotionGymConfig() + self.assertEqual(cfg.simulation_parameters.sim_time_step_s, 0.005) + self.assertEqual(cfg.actions[0].upper_bound, 1.0) + self.assertEqual(cfg.ignored_sensor_list, ['Collisions']) + + +if __name__ == '__main__': + tf.test.main() diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/locomotion_gym_env.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/locomotion_gym_env.py new file mode 100644 index 000000000..0c30e5b8e --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/locomotion_gym_env.py @@ -0,0 +1,731 @@ +# Lint as: python3 +"""This file implements the locomotion gym env.""" + +import atexit +import collections +import time +from typing import Any, Callable, Sequence, Text, Union +import gin +import gym +import numpy as np + +from pybullet_envs.minitaur.envs_v2 import base_client +from pybullet_utils import bullet_client +import pybullet_data +import pybullet +from pybullet_envs.minitaur.envs import minitaur_logging +from pybullet_envs.minitaur.envs import minitaur_logging_pb2 +#from pybullet_envs.minitaur.envs import minitaur_logging +#from pybullet_envs.minitaur.envs import minitaur_logging_pb2 +from pybullet_envs.minitaur.envs_v2.evaluation import metric_logger +from pybullet_envs.minitaur.envs_v2.scenes import scene_base +from pybullet_envs.minitaur.envs_v2.sensors import sensor +from pybullet_envs.minitaur.envs_v2.sensors import space_utils +from pybullet_envs.minitaur.envs_v2.utilities import rendering_utils +from pybullet_envs.minitaur.robots import autonomous_object +from pybullet_envs.minitaur.robots import robot_base + +_ACTION_EPS = 0.01 +_NUM_SIMULATION_ITERATION_STEPS = 300 +_LOG_BUFFER_LENGTH = 5000 + +SIM_CLOCK = 'SIM_CLOCK' + +# Exports this symbol so we can use it in the config file. +gin.constant('locomotion_gym_env.SIM_CLOCK', SIM_CLOCK) + +# This allows us to bind @time.time in the gin configuration. +gin.external_configurable(time.time, module='time') + + +# TODO(b/122048194): Enable position/torque/hybrid control mode. +@gin.configurable +class LocomotionGymEnv(gym.Env): + """The gym environment for the locomotion tasks.""" + metadata = { + 'render.modes': ['human', 'rgb_array', 'topdown'], + 'video.frames_per_second': 100 + } + + def __init__(self, + gym_config, + clock: Union[Callable[..., float], Text] = 'SIM_CLOCK', + robot_class: Any = None, + scene: scene_base.SceneBase = None, + sensors: Sequence[sensor.Sensor] = None, + task: Any = None, + env_randomizers: Any = None): + """Initializes the locomotion gym environment. + + Args: + gym_config: An instance of LocomotionGymConfig. + clock: The clock source to be used for the gym env. The clock should + return a timestamp in seconds. Setting clock == "SIM_CLOCK" will enable + the built-in simulation clock. For real robot experiments, we can use + time.time or other clock wall clock sources. + robot_class: A class of a robot. We provide a class rather than an + instance due to hard_reset functionality. Parameters are expected to be + configured with gin. + scene: An object for managing the robot's surroundings. + sensors: A list of environmental sensors for observation. + task: A callable function/class to calculate the reward and termination + condition. Takes the gym env as the argument when calling. + env_randomizers: A list of EnvRandomizer(s). An EnvRandomizer may + randomize the physical property of minitaur, change the terrrain during + reset(), or add perturbation forces during step(). + client_factory: A function to create a simulation client, it can be a + pybullet client. + + Raises: + ValueError: If the num_action_repeat is less than 1. + + """ + self._pybullet_client = None + self._metric_logger = metric_logger.MetricLogger() + # TODO(sehoonha) split observation and full-state sensors (b/129858214) + + # Makes sure that close() is always called to flush out the logs to the + # disk. + atexit.register(self.close) + self.seed() + self._gym_config = gym_config + if robot_class is None: + raise ValueError('robot_class cannot be None.') + self._robot_class = robot_class + if issubclass(self._robot_class, robot_base.RobotBase): + self._use_new_robot_class = True + else: + self._use_new_robot_class = False + self._robot = None + + self._scene = scene or scene_base.SceneBase() + + # TODO(sehoonha) change the data structure to dictionary + self._env_sensors = list(sensors) if sensors is not None else list() + + # TODO(b/152161457): Make logging a standalone module. + self._log_path = gym_config.log_path + self._logging = minitaur_logging.MinitaurLogging(self._log_path) + self._episode_proto = minitaur_logging_pb2.MinitaurEpisode() + self._data_dir = gym_config.data_dir + + self._task = task + + self._env_randomizers = env_randomizers if env_randomizers else [] + + # Simulation related parameters. + self._num_action_repeat = gym_config.simulation_parameters.num_action_repeat + self._on_rack = gym_config.simulation_parameters.robot_on_rack + if self._num_action_repeat < 1: + raise ValueError('number of action repeats should be at least 1.') + # TODO(b/73829334): Fix the value of self._num_bullet_solver_iterations. + self._num_bullet_solver_iterations = int(_NUM_SIMULATION_ITERATION_STEPS / + self._num_action_repeat) + + self._sim_time_step = gym_config.simulation_parameters.sim_time_step_s + # The sim step counter is an internal varialbe to count the number of + # pybullet stepSimulation() has been called since last reset. + self._sim_step_counter = 0 + + self._env_time_step = self._num_action_repeat * self._sim_time_step + # The env step counter accounts for how many times env.step has been + # called since reset. + self._env_step_counter = 0 + + if clock == SIM_CLOCK: + self._clock = self._get_sim_time + else: + self._clock = clock + + # Creates the bullet client. + self._is_render = gym_config.simulation_parameters.enable_rendering + # The wall-clock time at which the last frame is rendered. + self._last_frame_time = 0.0 + + if gym_config.simulation_parameters.enable_rendering: + self._pybullet_client = bullet_client.BulletClient(connection_mode=pybullet.GUI) + self._pybullet_client.configureDebugVisualizer( + pybullet.COV_ENABLE_GUI, + gym_config.simulation_parameters.enable_rendering_gui) + else: + self._pybullet_client = bullet_client.BulletClient() + if gym_config.simulation_parameters.egl_rendering: + self._pybullet_client.loadPlugin('eglRendererPlugin') + + self._pybullet_client.setAdditionalSearchPath( + pybullet_data.getDataPath()) + + # If enabled, save the performance profile to profiling_path + # Use Google Chrome about://tracing to open the file + if gym_config.profiling_path is not None: + self._profiling_slot = self._pybullet_client.startStateLogging( + self._pybullet_client.STATE_LOGGING_PROFILE_TIMINGS, + gym_config.profiling_path) + self._profiling_counter = 10 + else: + self._profiling_slot = -1 + + # Set the default render options. TODO(b/152161124): Make rendering a + # standalone module. + self._camera_target = gym_config.simulation_parameters.camera_target + self._camera_dist = gym_config.simulation_parameters.camera_distance + self._camera_yaw = gym_config.simulation_parameters.camera_yaw + self._camera_pitch = gym_config.simulation_parameters.camera_pitch + self._render_width = gym_config.simulation_parameters.render_width + self._render_height = gym_config.simulation_parameters.render_height + + # Loads the environment and robot. Actions space will be created as well. + self._hard_reset = True + self._observation_dict = {} + self.reset() + self._hard_reset = gym_config.simulation_parameters.enable_hard_reset + + # Construct the observation space from the list of sensors. + self.observation_space = ( + space_utils.convert_sensors_to_gym_space_dictionary([ + sensor for sensor in self.all_sensors() + if sensor.get_name() not in self._gym_config.ignored_sensor_list + ])) + + def __del__(self): + self.close() + + def _load_old_robot_class(self): + self._robot = self._robot_class( + pybullet_client=self._pybullet_client, on_rack=self._on_rack) + self._action_list = [] + action_upper_bound = [] + action_lower_bound = [] + for action in self._gym_config.actions: + self._action_list.append(action.name) + action_upper_bound.append(action.upper_bound) + action_lower_bound.append(action.lower_bound) + self.action_space = gym.spaces.Box( + np.array(action_lower_bound), + np.array(action_upper_bound), + dtype=np.float32) + + def _load_new_robot_class(self): + self._robot = self._robot_class( + pybullet_client=self._pybullet_client, clock=self._clock) + self.action_space = self._robot.action_space + + def _load(self): + self._pybullet_client.resetSimulation() + self._pybullet_client.setPhysicsEngineParameter( + numSolverIterations=self._num_bullet_solver_iterations) + self._pybullet_client.setTimeStep(self._sim_time_step) + self._pybullet_client.setGravity(0, 0, -10) + self._pybullet_client.setPhysicsEngineParameter(enableConeFriction=0) + + # Disable rendering during scene loading will speed up simulation. + if self._is_render: + self._pybullet_client.configureDebugVisualizer( + self._pybullet_client.COV_ENABLE_RENDERING, 0) + + # Rebuild the scene. + self._scene.build_scene(self._pybullet_client) + + # TODO(b/151975607): Deprecate old robot support. + if self._use_new_robot_class: + self._load_new_robot_class() + else: + self._load_old_robot_class() + + # Check action space. + if (isinstance(self.action_space, gym.spaces.Box) and + not np.all(self.action_space.low < self.action_space.high)): + raise ValueError(f'Action space contains invalid dimensions, ' + f'action space low = {self.action_space.low}, ' + f'action space high = {self.action_space.high}') + + for an_object in self._dynamic_objects(): + an_object.set_clock(self._clock) + + # Enable rendering after loading finishes. + if self._is_render: + self._pybullet_client.configureDebugVisualizer( + self._pybullet_client.COV_ENABLE_RENDERING, 1) + + def close(self): + atexit.unregister(self.close) + #if self._pybullet_client: + + if self._log_path is not None: + self._logging.save_episode(self._episode_proto) + for sensor_ in self.all_sensors(): + sensor_.on_terminate(self) + if self._robot: + if self._use_new_robot_class: + self._robot.terminate() + else: + self._robot.Terminate() + if self._pybullet_client: + self._pybullet_client.disconnect() + self._pybullet_client = None + + def seed(self, seed=None): + self.np_random, self.np_random_seed = gym.utils.seeding.np_random(seed) + return [self.np_random_seed] + + def _dynamic_objects(self): + """Returns the python objects controlling moving obstacles.""" + if self._scene: + return self._scene.dynamic_objects + else: + return [] + + def all_sensors(self): + """Returns all robot, environmental and dynamic objects sensors.""" + if self._use_new_robot_class: + all_sensors = list(self._env_sensors) + if self._robot: + all_sensors.extend(list(self._robot.sensors)) + for obj in self._dynamic_objects(): + all_sensors.extend(obj.sensors) + + # The new way of adding task specific sensors to the sensor lists. + if hasattr(self._task, 'sensors'): + all_sensors.extend(self._task.sensors) + return all_sensors + else: + # This is a workaround due to the issue in b/130128505#comment5 + task_sensor = ([self._task] + if isinstance(self._task, sensor.Sensor) else []) + robot_sensors = [] + if self._robot: + robot_sensors = self._robot.GetAllSensors() + return robot_sensors + self._env_sensors + task_sensor + + def sensor_by_name(self, name): + """Returns the sensor with the given name, or None if not exist.""" + # TODO(b/154162104): Store sensors as dictionary. + for sensor_ in self.all_sensors(): + if sensor_.get_name() == name: + return sensor_ + return None + + @gin.configurable('locomotion_gym_env.LocomotionGymEnv.reset') + def reset( + self, + initial_motor_angles=None, + reset_duration=1.0, + reset_visualization_camera=True, + ): + """Resets the robot's position in the world or rebuild the sim world. + + The simulation world will be rebuilt if self._hard_reset is True. + + Args: + initial_motor_angles: A list of Floats. The desired joint angles after + reset. If None, the robot will use its built-in value. + reset_duration: Float. The time (in seconds) needed to rotate all motors + to the desired initial values. + reset_visualization_camera: Whether to reset debug visualization camera on + reset. + + Returns: + A numpy array contains the initial observation after reset. + """ + + + self._env_step_counter = 0 + self._sim_step_counter = 0 + self._last_reset_time = self._clock() + self._metric_logger.reset_episode() + + # Clear the simulation world and rebuild the robot interface. + if self._hard_reset: + self._load() + + # Resets the scene + self._scene.reset() + + # Resets the robot with the provided init parameters. + if self._use_new_robot_class: + self._robot.reset() + else: + self._robot.Reset( + reload_urdf=False, + default_motor_angles=initial_motor_angles, + reset_time=reset_duration) + + # Flush the logs to disc and reinitialize the logging system. + if self._log_path is not None: + self._logging.save_episode(self._episode_proto) + self._episode_proto = minitaur_logging_pb2.MinitaurEpisode() + minitaur_logging.preallocate_episode_proto(self._episode_proto, + _LOG_BUFFER_LENGTH, + self._robot) + + # TODO(b/152161124): Move this part to the renderer module. + if reset_visualization_camera: + self._pybullet_client.resetDebugVisualizerCamera(self._camera_dist, + self._camera_yaw, + self._camera_pitch, + [0, 0, 0]) + + # Create an example last action based on the type of action space. + self._last_action = space_utils.create_constant_action(self.action_space) + + for s in self.all_sensors(): + s.on_reset(self) + + if self._task and hasattr(self._task, 'reset'): + self._task.reset(self) + + # Loop over all env randomizers. + for env_randomizer in self._env_randomizers: + env_randomizer.randomize_env(self) + + for obj in self._dynamic_objects(): + obj.reset() + + # Initialize the robot base position. + if self._use_new_robot_class: + self._last_base_position = self._robot.base_position + else: + self._last_base_position = self._robot.GetBasePosition() + + # Resets the observations again, since randomizers might change the env. + for s in self.all_sensors(): + s.on_reset(self) + + + self._last_reset_time = self._clock() + return self._get_observation() + + def _wait_for_rendering(self): + # Sleep, otherwise the computation takes less time than real time, + # which will make the visualization like a fast-forward video. + time_spent = time.time() - self._last_frame_time + self._last_frame_time = time.time() + time_to_sleep = self._env_time_step - time_spent + if time_to_sleep > 0: + time.sleep(time_to_sleep) + + # Also keep the previous orientation of the camera set by the user. + [yaw, pitch, dist] = self._pybullet_client.getDebugVisualizerCamera()[8:11] + self._pybullet_client.resetDebugVisualizerCamera(dist, yaw, pitch, + self._last_base_position) + + def _step_old_robot_class(self, action): + self._last_base_position = self._robot.GetBasePosition() + self._last_action = action + + if self._is_render: + self._wait_for_rendering() + + for env_randomizer in self._env_randomizers: + env_randomizer.randomize_step(self) + + self._robot.Step(action) + + if self._profiling_slot >= 0: + self._profiling_counter -= 1 + if self._profiling_counter == 0: + self._pybullet_client.stopStateLogging(self._profiling_slot) + + if self._log_path is not None: + minitaur_logging.update_episode_proto(self._episode_proto, self._robot, + action, self._env_step_counter) + reward = self._reward() + + for s in self.all_sensors(): + s.on_step(self) + + if self._task and hasattr(self._task, 'update'): + self._task.update(self) # TODO(b/154635313): resolve API mismatch + + done = self._termination() + self._env_step_counter += 1 + # TODO(b/161941829): terminate removed for now, change terminate to other + # names. + return self._get_observation(), reward, done, {} + + def _step_new_robot_class(self, action): + self._last_base_position = self._robot.base_position + self._last_action = action + + if self._is_render: + self._wait_for_rendering() + + for env_randomizer in self._env_randomizers: + env_randomizer.randomize_step(self) + + action = self._robot.pre_control_step(action, self._env_time_step) + for obj in self._dynamic_objects(): + obj.pre_control_step(autonomous_object.AUTONOMOUS_ACTION) + for _ in range(self._num_action_repeat): + self._robot.apply_action(action) + for obj in self._dynamic_objects(): + obj.update(self.get_time_since_reset(), self._observation_dict) + obj.apply_action(autonomous_object.AUTONOMOUS_ACTION) + + self._pybullet_client.stepSimulation() + self._sim_step_counter += 1 + + self._robot.receive_observation() + for obj in self._dynamic_objects(): + obj.receive_observation() + + for s in self.all_sensors(): + s.on_new_observation() + + self._robot.post_control_step() + for obj in self._dynamic_objects(): + obj.post_control_step() + + if self._profiling_slot >= 0: + self._profiling_counter -= 1 + if self._profiling_counter == 0: + self._pybullet_client.stopStateLogging(self._profiling_slot) + + if self._log_path is not None: + minitaur_logging.update_episode_proto(self._episode_proto, self._robot, + action, self._env_step_counter) + reward = self._reward() + + for s in self.all_sensors(): + s.on_step(self) + + if self._task and hasattr(self._task, 'update'): + self._task.update(self) # TODO(b/154635313): resolve API mismatch + + done = self._termination() + self._env_step_counter += 1 + # TODO(b/161941829): terminate removed for now, change terminate to other + # names. + return self._get_observation(), reward, done, {} + + def step(self, action): + """Step forward the simulation, given the action. + + Args: + action: Can be a list of desired motor angles for all motors when the + robot is in position control mode; A list of desired motor torques. Or a + list of tuples (q, qdot, kp, kd, tau) for hybrid control mode. The + action must be compatible with the robot's motor control mode. Also, we + are not going to use the leg space (swing/extension) definition at the + gym level, since they are specific to Minitaur. + + Returns: + observations: The observation dictionary. The keys are the sensor names + and the values are the sensor readings. + reward: The reward for the current state-action pair. + done: Whether the episode has ended. + info: A dictionary that stores diagnostic information. + + Raises: + ValueError: The action dimension is not the same as the number of motors. + ValueError: The magnitude of actions is out of bounds. + """ + # TODO(b/151975607): Finish the migration and remove old robot class + # support. + if self._use_new_robot_class: + return self._step_new_robot_class(action) + else: + return self._step_old_robot_class(action) + + @gin.configurable('locomotion_gym_env.LocomotionGymEnv.render') + def render(self, mode='rgb_array'): + + if mode == 'topdown': + # Provide ground height if we know it. Otherwise leave it as gin + # configurable. + if hasattr(self.scene, 'ground_height'): + return rendering_utils.render_topdown( + self._pybullet_client, ground_height=self.scene.ground_height) + else: + return rendering_utils.render_topdown(self._pybullet_client) + + if mode != 'rgb_array': + raise ValueError('Unsupported render mode:{}'.format(mode)) + + if self._camera_target is not None: + target_position = self._camera_target + else: + target_position = self._last_base_position + view_matrix = self._pybullet_client.computeViewMatrixFromYawPitchRoll( + cameraTargetPosition=target_position, + distance=self._camera_dist, + yaw=self._camera_yaw, + pitch=self._camera_pitch, + roll=0, + upAxisIndex=2) + proj_matrix = self._pybullet_client.computeProjectionMatrixFOV( + fov=60, + aspect=float(self._render_width) / self._render_height, + nearVal=0.1, + farVal=100.0) + return rendering_utils.render_image(self._pybullet_client, + self._render_width, self._render_height, + view_matrix, proj_matrix) + + @property + def scene(self): + return self._scene + + @property + def rendering_enabled(self): + return self._is_render + + @property + def env_randomizers(self): + return self._env_randomizers + + @property + def last_base_position(self): + return self._last_base_position + + @property + def gym_config(self): + return self._gym_config + + def _termination(self): + if not self._robot.is_safe: + return True + + if self._task and hasattr(self._task, 'done'): + return self._task.done(self) # TODO(b/154635313): resolve API mismatch + + return False + + def _reward(self): + if self._task: + return self._task.reward(self) # TODO(b/154635313): resolve API mismatch + return 0 + + def _get_observation(self): + """Get observation of this environment from a list of sensors. + + Returns: + observations: dictionary of sensory observation with sensor name as key + and corresponding observation in numpy array as value. + """ + sensors_dict = {} + for s in self.all_sensors(): + if s.get_name() in self._gym_config.ignored_sensor_list: + continue + + obs = s.get_observation() + if isinstance(obs, dict): + sensors_dict.update(obs) + else: + sensors_dict[s.get_name()] = obs + + self._observation_dict = collections.OrderedDict( + sorted(sensors_dict.items())) + return self._observation_dict + + def set_time_step(self, num_action_repeat, sim_step=0.001): + """Sets the time step of the environment. + + Args: + num_action_repeat: The number of simulation steps/action repeats to be + executed when calling env.step(). + sim_step: The simulation time step in PyBullet. By default, the simulation + step is 0.001s, which is a good trade-off between simulation speed and + accuracy. + + Raises: + ValueError: If the num_action_repeat is less than 1. + """ + if num_action_repeat < 1: + raise ValueError('number of action repeats should be at least 1.') + self._sim_time_step = sim_step + self._num_action_repeat = num_action_repeat + self._env_time_step = sim_step * num_action_repeat + self._num_bullet_solver_iterations = int( + _NUM_SIMULATION_ITERATION_STEPS / self._num_action_repeat) + self._pybullet_client.setPhysicsEngineParameter( + numSolverIterations=self._num_bullet_solver_iterations) + self._pybullet_client.setTimeStep(self._sim_time_step) + if not self._use_new_robot_class: + self._robot.SetTimeSteps(self._num_action_repeat, self._sim_time_step) + + def _get_sim_time(self): + """Returns the simulation time since the sim resets.""" + return self._sim_step_counter * self._sim_time_step + + def get_time_since_reset(self): + """Get the time passed (in seconds) since the last reset. + + Returns: + Time in seconds since the last reset. + """ + if self._use_new_robot_class: + return self._clock() - self._last_reset_time + else: + return self._robot.GetTimeSinceReset() + + def get_time(self): + """Gets the time reading from the clock source.""" + return self._clock() + + @property + def observation(self): + return self._observation_dict + + @property + def pybullet_client(self): + return self._pybullet_client + + @property + def robot(self): + return self._robot + + @property + def num_action_repeat(self): + return self._num_action_repeat + + @property + def sim_time_step(self): + return self._sim_time_step + + @property + def env_step_counter(self): + return self._env_step_counter + + @property + def hard_reset(self): + return self._hard_reset + + @property + def last_action(self): + return self._last_action + + @property + def env_time_step(self): + return self._env_time_step + + @property + def data_dir(self): + return self._data_dir + + @property + def task(self): + return self._task + + @property + def robot_class(self): + return self._robot_class + + @property + def action_names(self): + """Name of each action in the action space. + + By default this returns the actions the robot executes (e.g. + "VELOCITY_elbow_joint"), but env wrappers may override this if they change + the action space (e.g. if they convert twist to motor commands). + + Returns: + Tuple of strings, the action names. + """ + if self._use_new_robot_class: + return self._robot.action_names + return self._action_list + + @property + def metric_logger(self): + return self._metric_logger diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/locomotion_gym_env_test.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/locomotion_gym_env_test.py new file mode 100644 index 000000000..51f3c9ae6 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/locomotion_gym_env_test.py @@ -0,0 +1,241 @@ +# Lint as: python3 +r"""Tests for locomotion_gym_env. + + +""" + +import math +import random + +import gin +import mock +import numpy as np +import tensorflow.compat.v1 as tf +from absl.testing import parameterized + +from pybullet_envs.minitaur.envs_v2 import locomotion_gym_env +from pybullet_envs.minitaur.envs_v2.evaluation import metric as metric_lib +from pybullet_envs.minitaur.envs_v2.scenes import scene_base +from pybullet_envs.minitaur.envs_v2.scenes import simple_scene +from pybullet_envs.minitaur.envs_v2.tasks import task_interface +from pybullet_envs.minitaur.envs_v2.utilities import env_utils +from pybullet_envs.minitaur.robots import autonomous_object +from pybullet_envs.minitaur.robots import minitaur_v2 +import pybullet_data as pd + +import unittest + + +_POSITION_GAIN = 1.0 +_VELOCITY_GAIN = 0.015 +_CONTROL_LATENCY = 0.015 +_CONFIG_FILE = (pd.getDataPath()+'/configs/minitaur_gym_env.gin') +_CONFIG_FILE_NEW_ROBOT = (pd.getDataPath()+'/configs_v2/base/laikago_reactive.gin') + + +class TestTask(task_interface.Task): + """A step counter task for test purpose.""" + + def __init__(self): + self._counter = 0 + + def reset(self, env): + del env + self._counter = 0 + + def reward(self, env): + del env # TODO(b/154635313): resolve the API mismatch + self._counter += 1 + return self._counter + + def update(self, env): + del env # TODO(b/154635313): resolve the API mismatch + + def done(self, env): + del env # TODO(b/154635313): resolve the API mismatch + return False + + +class LocomotionGymEnvTest(tf.test.TestCase, parameterized.TestCase): + + def setUp(self): + super().setUp() + gin.clear_config() + + def test_env_from_gin(self): + # TODO(sehoonha) rename locomotion_gym_*test.gin to locomotion_gym_*.gin + gin.parse_config_file(_CONFIG_FILE) + env = locomotion_gym_env.LocomotionGymEnv() + self.assertIsInstance(env.robot, minitaur_v2.Minitaur) + # The robot will stand on the ground. + self.assertNear(env.robot.base_position[2], 0.25, 5e-2) + + def test_reset_gym(self): + gin.parse_config_file(_CONFIG_FILE) + env = locomotion_gym_env.LocomotionGymEnv(task=None) + + desired_init_motor_angle = math.pi / 2 + action_dim = len(env.action_space.high) + observations = env.reset(initial_motor_angles=[desired_init_motor_angle] * + action_dim) + observations = env_utils.flatten_observations(observations) + self.assertEqual(observations.size, 12) + self.assertNear(observations[0], 0, 1e-2) + self.assertNear(observations[4], desired_init_motor_angle, 2e-1) + + def test_step_gym(self): + gin.parse_config_file(_CONFIG_FILE) + env = locomotion_gym_env.LocomotionGymEnv(task=TestTask()) + + desired_motor_angle = math.pi / 3 + steps = 1000 + action_dim = len(env.action_space.high) + for _ in range(steps): + observations, reward, done, _ = env.step([desired_motor_angle] * + action_dim) + observations = env_utils.flatten_observations(observations) + + self.assertFalse(done) + self.assertEqual(reward, steps) + self.assertEqual(observations.size, 12) + self.assertNear(observations[0], 0, 1e-2) + self.assertNear(observations[4], desired_motor_angle, 2e-1) + np.testing.assert_allclose(env._last_action, + [desired_motor_angle] * action_dim, 2e-1) + + def test_scene(self): + gin.parse_config_file(_CONFIG_FILE) + data_root = 'urdf/' + env = locomotion_gym_env.LocomotionGymEnv( + task=TestTask(), scene=simple_scene.SimpleScene(data_root=data_root)) + desired_motor_angle = math.pi / 3 + steps = 2 + action_dim = len(env.action_space.high) + for _ in range(steps): + _, reward, _, _ = env.step([desired_motor_angle] * action_dim) + self.assertEqual(reward, steps) + + def test_except_on_invalid_config(self): + gin.parse_config_file(_CONFIG_FILE) + gin.bind_parameter('SimulationParameters.num_action_repeat', 0) + with self.assertRaises(ValueError): + locomotion_gym_env.LocomotionGymEnv(task=None) + + def test_no_scene(self): + gin.parse_config_file(_CONFIG_FILE) + env = locomotion_gym_env.LocomotionGymEnv(task=None, scene=None) + + # The robot will free fall. + self.assertNear(env.robot.base_position[2], 0.15, 5e-2) + + def test_seed_draw_with_np(self): + gin.parse_config_file(_CONFIG_FILE) + env = locomotion_gym_env.LocomotionGymEnv(task=None) + # first draw + env.seed(42) + nums1 = [] + for _ in range(3): + nums1.append(env.np_random.randint(2**31 - 1)) + # second draw + env.seed(42) + nums2 = [] + for _ in range(3): + nums2.append(env.np_random.randint(2**31 - 1)) + self.assertListEqual(nums1, nums2) + + def test_get_observations(self): + gin.parse_config_file(_CONFIG_FILE) + env = locomotion_gym_env.LocomotionGymEnv(task=None) + desired_init_motor_angle = math.pi / 2 + action_dim = len(env.action_space.high) + observations = env.reset(initial_motor_angles=[desired_init_motor_angle] * + action_dim) + self.assertLen(observations, 2) + self.assertLen(observations['IMU'], 4) + self.assertNear(observations['IMU'][0], 0, 1e-2) + self.assertLen(observations['MotorAngle'], 8) + self.assertNear(observations['MotorAngle'][0], desired_init_motor_angle, + 2e-1) + + + + + + def test_step_with_dynamic_objects(self): + gin.parse_config_file(_CONFIG_FILE_NEW_ROBOT) + + gin.parse_config([ + 'AutonomousObject.urdf_file = "urdf/mug.urdf"', + 'SceneBase.dynamic_objects = [@AutonomousObject(), @AutonomousObject()]', + 'LocomotionGymEnv.scene = @SceneBase()', + ]) + env = locomotion_gym_env.LocomotionGymEnv() + + self.assertLen(env.scene.dynamic_objects, 2) + for obj in env.scene.dynamic_objects: + self.assertIsInstance(obj, autonomous_object.AutonomousObject) + + # Replace dynamic objects with mocks for step tests. + mock_objects = [ + mock.create_autospec(autonomous_object.AutonomousObject), + mock.create_autospec(autonomous_object.AutonomousObject) + ] + env.scene._type_to_objects_dict[ + scene_base.ObjectType.DYNAMIC_OBJECT] = mock_objects + env.step(env.robot.action_space.sample()) + + expected_update_calls = [ + mock.call(i * env.sim_time_step, mock.ANY) + for i in range(env.num_action_repeat) + ] + expected_apply_action_calls = [ + mock.call(autonomous_object.AUTONOMOUS_ACTION) + for i in range(env.num_action_repeat) + ] + expected_receive_observation_calls = [ + mock.call() for i in range(env.num_action_repeat) + ] + + for mock_obj in mock_objects: + mock_obj.pre_control_step.assert_called_once_with( + autonomous_object.AUTONOMOUS_ACTION) + self.assertEqual(mock_obj.update.call_args_list, expected_update_calls) + self.assertEqual(mock_obj.apply_action.call_args_list, + expected_apply_action_calls) + self.assertEqual(mock_obj.receive_observation.call_args_list, + expected_receive_observation_calls) + mock_obj.post_control_step.assert_called_once_with() + + + def test_env_metrics(self): + gin.parse_config_file(_CONFIG_FILE_NEW_ROBOT) + env = locomotion_gym_env.LocomotionGymEnv() + metric_logger = env.metric_logger + test_metric_1 = metric_logger.create_scalar_metric( + 'test_metric_1', + scope=metric_lib.MetricScope.DEBUG, + single_ep_aggregator=np.mean) + test_metric_1.report(22) + + test_metric_2 = metric_logger.create_scalar_metric( + 'test_metric_2', + scope=metric_lib.MetricScope.PERFORMANCE, + single_ep_aggregator=np.max) + test_metric_2.report(15) + test_metric_2.report(16) + + all_metrics = metric_logger.get_episode_metrics() + + self.assertDictEqual(all_metrics, { + 'DEBUG/test_metric_1': 22, + 'PERFORMANCE/test_metric_2': 16 + }) + + env.reset() + + all_metrics = metric_logger.get_episode_metrics() + self.assertDictEqual(all_metrics, {}) + + +if __name__ == '__main__': + tf.test.main() diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/multiagent_mobility_gym_env.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/multiagent_mobility_gym_env.py new file mode 100644 index 000000000..c716d367b --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/multiagent_mobility_gym_env.py @@ -0,0 +1,485 @@ +"""This file implements the locomotion gym env.""" +# pylint: disable=dangerous-default-value + +import atexit +import collections +import time + +import gin +from gym import spaces +import numpy as np + +from pybullet_utils import bullet_client +from pybullet_envs.minitaur.envs import minitaur_logging +from pybullet_envs.minitaur.envs import minitaur_logging_pb2 +from pybullet_envs.minitaur.envs_v2 import locomotion_gym_env +from pybullet_envs.minitaur.envs_v2.scenes import scene_base +from pybullet_envs.minitaur.envs_v2.sensors import sensor +from pybullet_envs.minitaur.envs_v2.sensors import space_utils +import pybullet + +_ACTION_EPS = 0.01 +_NUM_SIMULATION_ITERATION_STEPS = 300 +_LOG_BUFFER_LENGTH = 5000 + + +@gin.configurable +class MultiagentMobilityGymEnv(locomotion_gym_env.LocomotionGymEnv): + """The gym environment for the locomotion tasks.""" + metadata = { + 'render.modes': ['human', 'rgb_array'], + 'video.frames_per_second': 100 + } + + def __init__(self, + gym_config, + robot_classes, + scene: scene_base.SceneBase = scene_base.SceneBase(), + sensors=None, + tasks=[], + global_task=None, + single_reward=False, + env_randomizers=None): + """Initializes the locomotion gym environment. + + Args: + gym_config: An instance of LocomotionGymConfig. + robot_classes: A list of robot classes. We provide a class rather than an + instance due to hard_reset functionality. Parameters are expected to be + configured with gin. + scene: An object for managing the robot's surroundings. + sensors: A list of environmental sensors for observation. This does not + include on-robot sensors. + tasks: A list of callable function/class to calculate the reward and + termination condition. Takes the gym env as the argument when calling. + global_task: A callable function/class to calculate the reward and + termination condition for all robots. Takes the gym env as the argument + when calling. + single_reward: Whether the environment returns a single reward for all + agents or a dictionary. + env_randomizers: A list of EnvRandomizer(s). An EnvRandomizer may + randomize the physical property of minitaur, change the terrrain during + reset(), or add perturbation forces during step(). + + Raises: + ValueError: If the num_action_repeat is less than 1, or if number of + unique robot names do not match the number of robot classes. + + """ + # TODO(sehoonha) split observation and full-state sensors (b/129858214) + + # Makes sure that close() is always called to flush out the logs to the + # disk. + atexit.register(self.close) + self.seed() + self._gym_config = gym_config + self._robot_classes = robot_classes + # Checking uniqueness of names and number of names + self._scene = scene + # TODO(sehoonha) change the data structure to dictionary + # TODO(b/144521291) make sure sensors have their own robot names + self._sensors = sensors if sensors is not None else list() + self._log_path = gym_config.log_path + self._logging = minitaur_logging.MinitaurLogging(self._log_path) + self._episode_proto = minitaur_logging_pb2.MinitaurEpisode() + self._data_dir = gym_config.data_dir + + # A dictionary containing the objects in the world other than the robot. + self._tasks = tasks + self._global_task = global_task + self._single_reward = single_reward + + self._env_randomizers = env_randomizers if env_randomizers else [] + + # This is a workaround due to the issue in b/130128505#comment5 + for task in self._tasks: + if isinstance(task, sensor.Sensor): + self._sensors.append(task) + if global_task and isinstance(global_task, sensor.Sensor): + self._sensors.append(global_task) + + # Simulation related parameters. + self._num_action_repeat = gym_config.simulation_parameters.num_action_repeat + self._on_rack = gym_config.simulation_parameters.robot_on_rack + if self._num_action_repeat < 1: + raise ValueError('number of action repeats should be at least 1.') + self._sim_time_step = gym_config.simulation_parameters.sim_time_step_s + self._env_time_step = self._num_action_repeat * self._sim_time_step + self._env_step_counter = 0 + + # TODO(b/73829334): Fix the value of self._num_bullet_solver_iterations. + self._num_bullet_solver_iterations = int(_NUM_SIMULATION_ITERATION_STEPS / + self._num_action_repeat) + self._is_render = gym_config.simulation_parameters.enable_rendering + + # The wall-clock time at which the last frame is rendered. + self._last_frame_time = 0.0 + if self._is_render: + self._pybullet_client = bullet_client.BulletClient( + connection_mode=pybullet.GUI) + else: + self._pybullet_client = bullet_client.BulletClient() + + if gym_config.simulation_parameters.egl_rendering: + self._pybullet_client.loadPlugin('eglRendererPlugin') + self._pybullet_client.enable_cns() + + # If enabled, save the performance profile to profiling_path + # Use Google Chrome about://tracing to open the file + if gym_config.profiling_path is not None: + self._profiling_slot = self._pybullet_client.startStateLogging( + self._pybullet_client.STATE_LOGGING_PROFILE_TIMINGS, + gym_config.profiling_path) + self._profiling_counter = 10 + else: + self._profiling_slot = -1 + # Build the action space. The action space must be compatible with the + # robot configuration. + + # The action list contains the name of all actions. + # TODO(b/144479707): Allow robots to set the action space automatically. + + action_space = collections.OrderedDict() + for robot_name, action in gym_config.actions.items(): + action_lower_bound = [] + action_upper_bound = [] + for action_scalar in action: + action_upper_bound.append(action_scalar.upper_bound) + action_lower_bound.append(action_scalar.lower_bound) + action_space[robot_name] = spaces.Box( + np.asarray(action_lower_bound), + np.asarray(action_upper_bound), + dtype=np.float32) + self.action_space = spaces.Dict(action_space) + + # Set the default render options. + self._camera_dist = gym_config.simulation_parameters.camera_distance + self._camera_yaw = gym_config.simulation_parameters.camera_yaw + self._camera_pitch = gym_config.simulation_parameters.camera_pitch + self._render_width = gym_config.simulation_parameters.render_width + self._render_height = gym_config.simulation_parameters.render_height + + self._hard_reset = True + self.reset() + + self._hard_reset = gym_config.simulation_parameters.enable_hard_reset + + # Construct the observation space from the list of sensors. Note that we + # will reconstruct the observation_space after the robot is created. + self.observation_space = ( + space_utils.convert_sensors_to_gym_space_dictionary(self.all_sensors())) + + def close(self): + if self._log_path is not None: + self._logging.save_episode(self._episode_proto) + + for robot in self._robots: + robot.Terminate() + + def all_sensors(self): + """Returns all robot and environmental sensors.""" + robot_sensors = [] + for robot in self._robots: + robot_sensors += robot.GetAllSensors() + return robot_sensors + self._sensors + + @gin.configurable('multiagent_mobility_gym_env.MultiagentMobilityGymEnv.reset' + ) + def reset(self, + initial_motor_angles=None, + reset_duration=1.0, + reset_visualization_camera=True): + """Resets the robot's position in the world or rebuild the sim world. + + The simulation world will be rebuilt if self._hard_reset is True. + + Args: + initial_motor_angles: A list of Floats. The desired joint angles after + reset. If None, the robot will use its built-in value. + reset_duration: Float. The time (in seconds) needed to rotate all motors + to the desired initial values. + reset_visualization_camera: Whether to reset debug visualization camera on + reset. + + Returns: + A numpy array contains the initial observation after reset. + """ + if self._is_render: + self._pybullet_client.configureDebugVisualizer( + self._pybullet_client.COV_ENABLE_RENDERING, 0) + + # Clear the simulation world and rebuild the robot interface. + if self._hard_reset: + self._pybullet_client.resetSimulation() + self._pybullet_client.setPhysicsEngineParameter( + numSolverIterations=self._num_bullet_solver_iterations) + self._pybullet_client.setTimeStep(self._sim_time_step) + self._pybullet_client.setGravity(0, 0, -10) + + # Rebuild the world. + self._scene.build_scene(self._pybullet_client) + + # Rebuild the robots + # TODO(b/144545080): Make this scale to more than two agents + # Have multiple robot classes as a list. + self._robots = [] + for robot_class in self._robot_classes: + + self._robots.append( + robot_class( + pybullet_client=self._pybullet_client, + # TODO(rosewang): Remove on rack in multiagent acase + on_rack=self._on_rack)) + + # Reset the pose of the robot. + for robot in self._robots: + robot.Reset( + reload_urdf=False, + default_motor_angles=initial_motor_angles, + reset_time=reset_duration) + + self._env_step_counter = 0 + self._pybullet_client.resetDebugVisualizerCamera(self._camera_dist, + self._camera_yaw, + self._camera_pitch, + [0, 0, 0]) + + # Flush the logs to disc and reinitialize the logging system. + if self._log_path is not None: + self._logging.save_episode(self._episode_proto) + self._episode_proto = minitaur_logging_pb2.MinitaurEpisode() + minitaur_logging.preallocate_episode_proto(self._episode_proto, + _LOG_BUFFER_LENGTH, + self._robots[0]) + self._pybullet_client.setPhysicsEngineParameter(enableConeFriction=0) + self._env_step_counter = 0 + if reset_visualization_camera: + self._pybullet_client.resetDebugVisualizerCamera(self._camera_dist, + self._camera_yaw, + self._camera_pitch, + [0, 0, 0]) + + self._last_action = { + robot_name: np.zeros(space.shape) + for robot_name, space in self.action_space.spaces.items() + } + + if self._is_render: + self._pybullet_client.configureDebugVisualizer( + self._pybullet_client.COV_ENABLE_RENDERING, 1) + + for s in self.all_sensors(): + # set name + if any([r.name in s.get_name() for r in self.robots]): + robot = [r for r in self.robots if r.name in s.get_name()][0] + s.set_robot(robot) + + for task in self._tasks: + if hasattr(task, 'reset'): + task.reset(self) + if self._global_task and hasattr(self._global_task, 'reset'): + self._global_task.reset(self) + + # Loop over all env randomizers. + for env_randomizer in self._env_randomizers: + env_randomizer.randomize_env(self) + + for s in self.all_sensors(): + s.on_reset(self) + + return self._get_observation() + + def get_robot(self, name): + for robot in self.robots: + if robot.name == name: + return robot + + def _reward(self): + """Returns a list of rewards. + + Returns: + A list of rewards corresponding to each robot and their task. + """ + global_reward = 0 + if self._global_task: + global_reward = self._global_task(self) + if self._single_reward: # Needed for tfagents compatibility. + if self._tasks: + return min([task(self) + global_reward for task in self._tasks]) + return 0 + else: + if self._tasks: + return [task(self) + global_reward for task in self._tasks] + return [0 for _ in self.robots] + + def step(self, actions): + """Step forward the simulation, given the actions. + + Args: + actions: A dictionary of actions for all robots. The action for each robot + can be joint angles for legged platforms like Laikago, and base + velocity/steering for kinematic robots such like Fetch. + + Returns: + observations: The observation dictionary. The keys are the sensor names + and the values are the sensor readings. + reward: The reward for the current state-action pair. + done: Whether the episode has ended. + info: A dictionary that stores diagnostic information. + + Raises: + ValueError: The action dimension is not the same as the number of motors. + ValueError: The magnitude of actions is out of bounds. + """ + self._last_base_position = [ + robot.GetBasePosition() for robot in self._robots + ] + self._last_action = actions + + if self._is_render: + # Sleep, otherwise the computation takes less time than real time, + # which will make the visualization like a fast-forward video. + time_spent = time.time() - self._last_frame_time + self._last_frame_time = time.time() + time_to_sleep = self._env_time_step - time_spent + if time_to_sleep > 0: + time.sleep(time_to_sleep) + camera_target = np.mean( + [robot.GetBasePosition() for robot in self._robots], axis=0) + + # Also keep the previous orientation of the camera set by the user. + [yaw, pitch, + dist] = self._pybullet_client.getDebugVisualizerCamera()[8:11] + self._pybullet_client.resetDebugVisualizerCamera(dist, yaw, pitch, + camera_target) + + for env_randomizer in self._env_randomizers: + env_randomizer.randomize_step(self) + + # Stepping broken down into their parts + for robot in self._robots: + robot.PreStepPerStep(actions) + + for _ in range(self._num_action_repeat): + for robot in self._robots: + robot.PreStepPerActionRepeat(actions) + + self._pybullet_client.stepSimulation() + + for robot in self._robots: + robot.PostStepPerActionRepeat() + + for robot in self._robots: + robot.PostStepPerStep() + + if self._profiling_slot >= 0: + self._profiling_counter -= 1 + if self._profiling_counter == 0: + self._pybullet_client.stopStateLogging(self._profiling_slot) + if self._log_path is not None: + minitaur_logging.update_episode_proto(self._episode_proto, + self._robots[0], actions, + self._env_step_counter) + reward = self._reward() + + for s in self.all_sensors(): + s.on_step(self) + + for task in self._tasks: + if hasattr(task, 'update'): + task.update(self) + if self._global_task and hasattr(self._global_task, 'update'): + self._global_task.update(self) + + done = self._termination() + self._env_step_counter += 1 + if done: + for robot in self._robots: + robot.Terminate() + return self._get_observation(), reward, done, {} + + def render(self, mode='rgb_array'): + if mode != 'rgb_array': + raise ValueError('Unsupported render mode:{}'.format(mode)) + base_pos = np.mean([robot.GetBasePosition() for robot in self._robots], + axis=0) + view_matrix = self._pybullet_client.computeViewMatrixFromYawPitchRoll( + cameraTargetPosition=base_pos, + distance=self._camera_dist, + yaw=self._camera_yaw, + pitch=self._camera_pitch, + roll=0, + upAxisIndex=2) + proj_matrix = self._pybullet_client.computeProjectionMatrixFOV( + fov=60, + aspect=float(self._render_width) / self._render_height, + nearVal=0.1, + farVal=100.0) + (_, _, px, _, _) = self._pybullet_client.getCameraImage( + width=self._render_width, + height=self._render_height, + renderer=self._pybullet_client.ER_BULLET_HARDWARE_OPENGL, + viewMatrix=view_matrix, + projectionMatrix=proj_matrix) + rgb_array = np.array(px) + rgb_array = rgb_array[:, :, :3] + return rgb_array + + def _termination(self): + if not all([robot.is_safe for robot in self._robots]): + return True + + if self._tasks: + return (self._global_task and self._global_task.done(self)) or any( + [task.done(self) for task in self._tasks]) + + for s in self.all_sensors(): + s.on_terminate(self) + + return False + + def set_time_step(self, num_action_repeat, sim_step=0.001): + """Sets the time step of the environment. + + Args: + num_action_repeat: The number of simulation steps/action repeats to be + executed when calling env.step(). + sim_step: The simulation time step in PyBullet. By default, the simulation + step is 0.001s, which is a good trade-off between simulation speed and + accuracy. + + Raises: + ValueError: If the num_action_repeat is less than 1. + """ + if num_action_repeat < 1: + raise ValueError('number of action repeats should be at least 1.') + self._sim_time_step = sim_step + self._num_action_repeat = num_action_repeat + self._env_time_step = sim_step * num_action_repeat + self._num_bullet_solver_iterations = ( + _NUM_SIMULATION_ITERATION_STEPS / self._num_action_repeat) + self._pybullet_client.setPhysicsEngineParameter( + numSolverIterations=self._num_bullet_solver_iterations) + self._pybullet_client.setTimeStep(self._sim_time_step) + for robot in self._robots: + robot.SetTimeSteps(self._num_action_repeat, self._sim_time_step) + + def get_time_since_reset(self): + """Get the time passed (in seconds) since the last reset. + + Returns: + List of time in seconds since the last reset for each robot. + """ + return self._robots[0].GetTimeSinceReset() + + @property + def tasks(self): + return self._tasks + + @property + def robots(self): + return self._robots + + @property + def num_robots(self): + return len(self._robots) diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/scenes/scene_base.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/scenes/scene_base.py new file mode 100644 index 000000000..c52ce10f6 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/scenes/scene_base.py @@ -0,0 +1,256 @@ +# Lint as: python3 +"""Class for loading and managing a scene in pybullet.""" + +import enum +from typing import Any, Dict, List, Optional, Sequence, Text +import gin +import numpy as np + +from pybullet_envs.minitaur.envs_v2.scenes import world_asset_pb2 +from pybullet_envs.minitaur.envs_v2 import base_client +from pybullet_utils import bullet_client +from pybullet_envs.minitaur.robots import autonomous_object + + + +# The 2D coordinates of the corners of a polygon. The corners are specified in +# counterclock-wise direction. +Polygon = Sequence[Sequence[float]] + + +class ObjectType(enum.Enum): + """Categories of objects that may be found in a scene.""" + OTHER = 0 + GROUND = 1 + OBSTACLE = 2 + GOAL = 3 + DYNAMIC_OBJECT = 4 + + +@gin.configurable +class SceneBase(object): + """Class for loading and managing a scene.""" + + def __init__( + self, + data_root: Text = None, + dynamic_objects: Sequence[autonomous_object.AutonomousObject] = ()): + """Initializes SceneBase. + + Args: + data_root: Root directory for finding object models. + dynamic_objects: Dynamic objects to be added into the scene. + crowd_builders: Builders of crowds formed by autonomous objects. + """ + self._pybullet_client = None + self._data_root = data_root + temp_dynamic_objects = list(dynamic_objects) + + self._dynamic_objects = tuple(temp_dynamic_objects) + # Dictionaries and world_asset are declared outside init to make sure they + # are all reset in _reset_scene_tracking(). + self._reset_scene_tracking() + + def _reset_scene_tracking(self): + """Clears all scene dicts. Used when the simulation is reset.""" + self._type_to_ids_dict = {object_type: [] for object_type in ObjectType} + self._type_to_objects_dict = {object_type: [] for object_type in ObjectType} + self._id_to_type_dict = {} + self._id_to_object_dict = {} + self._world_asset = None + + def destroy_scene(self): + """Destroys contents of scene to get ready for another build_scene call.""" + id_to_remove = list(self._id_to_object_dict.keys()) + for object_id in id_to_remove: + self.remove_object(object_id) + self._reset_scene_tracking() + + def build_scene(self, pybullet_client: bullet_client.BulletClient): + """Loads and positions all scene objects in pybullet. + + Override this function in subclass to implement customized scene. The + overriding function must call base function first. + + Args: + pybullet_client: A pybullet client in which the scene will be built. + """ + self._reset_scene_tracking() + self._pybullet_client = pybullet_client + self._init_dynamic_objects() + + def reset(self): + """The soft reset of scene. + + Unlike "build_scene", this is called at each env.reset() before robot + resetting. Typically we use this API to do some soft resetting like putting + objects back to its place. Howevever, for special cases such as P2P multimap + training, we can reload a different mesh scene once a while. + """ + pass + + def _init_dynamic_objects(self): + """Adds dynamic objects to scene.""" + for an_object in self._dynamic_objects: + an_object.set_sim_client(self._pybullet_client) + self.add_object(an_object.sim_object_id, ObjectType.DYNAMIC_OBJECT, + an_object) + + @property + def pybullet_client(self) -> bullet_client.BulletClient: + if self._pybullet_client is None: + raise ValueError("pybullet_client is None; did you call build_scene()?") + return self._pybullet_client + + @property + def ground_height(self) -> float: + """Returns ground height of the scene.""" + return 0.0 + + @property + def ground_ids(self) -> List[int]: + """Returns the pybullet ids of the ground.""" + return self._type_to_ids_dict[ObjectType.GROUND] + + @property + def obstacle_ids(self) -> List[int]: + """Returns the pybullet ids of all obstacles in the scene.""" + return self._type_to_ids_dict[ObjectType.OBSTACLE] + + @property + def goal_ids(self) -> List[int]: + """Returns the pybullet ids of any goals in the scene.""" + return self._type_to_ids_dict[ObjectType.GOAL] + + @property + def dynamic_object_ids(self) -> List[int]: + """Returns the pybullet ids of dynamic objects.""" + return self._type_to_ids_dict[ObjectType.DYNAMIC_OBJECT] + + @property + def dynamic_objects(self) -> List[autonomous_object.AutonomousObject]: + """Returns the dynamic objects python object (AutonomousObject).""" + return self._type_to_objects_dict[ObjectType.DYNAMIC_OBJECT] + + @property + def world_asset(self) -> world_asset_pb2.WorldAsset: + """Returns a proto describing the semantics of the scene. + + If the scene keeps a WorldAsset, then mutating this proto will mutate it for + everyone. If the scene generates a WorldAsset from _type_to_ids_dict, then + this is not an issue. + """ + if self._world_asset: + return self._world_asset + return self._dict_to_world_asset(self._type_to_ids_dict) + + def add_object(self, + object_id: int, + class_label: ObjectType, + python_object: Optional[Any] = None): + """Adds an object to be tracked. + + Does not load anything into pybullet. + + Args: + object_id: objectUniqueId from pybullet. + class_label: What type to consider the new object. + python_object: Associated python object for the pybullet object of + objectUniqueId == object_id. Environment uses the python object to + control object in pybullet in these cases. One example is python objects + of class label DYNAMIC_OBJECT: they are associated with python objects + of type AutonomousObject. + """ + if python_object is not None: + if (isinstance(python_object, autonomous_object.AutonomousObject) and + python_object.sim_object_id != object_id): + raise ValueError( + f"Mismatch object ids, object_id = {object_id}, sim_object_id = " + f"{python_object.sim_object_id}") + self._type_to_objects_dict[class_label].append(python_object) + self._type_to_ids_dict[class_label].append(object_id) + self._id_to_type_dict[object_id] = class_label + self._id_to_object_dict[object_id] = python_object + + def remove_object(self, object_id: int): + """Removes an object from tracking and from pybullet. + + Args: + object_id: objectUniqueID from pybullet. + + Raises: + KeyError: if object_id does not exist in the record. + """ + if object_id not in self._id_to_type_dict.keys(): + raise KeyError( + f"Object with object_id = {object_id} does not exist in the record.") + + self.pybullet_client.removeBody(object_id) + object_type = self._id_to_type_dict[object_id] + self._type_to_ids_dict[object_type].remove(object_id) + + object_to_remove = self.id_to_object(object_id) + if object_to_remove is not None: + # Removes item by identity comparison and avoid slow down due to objects + # with complex equality comparison function. list.remove() compares + # equality instead of identity. + for i, an_object in enumerate(self._type_to_objects_dict[object_type]): + if an_object is object_to_remove: + del self._type_to_objects_dict[object_type][i] + break + del self._id_to_type_dict[object_id] + del self._id_to_object_dict[object_id] + + def id_to_object(self, object_id: int) -> Any: + """Returns underlying python object from sim object id. + + Args: + object_id: objectUniqueID from pybullet. + + Returns: + None is returned if the sim object does not have a corresponding python + object. + """ + return self._id_to_object_dict[object_id] + + def _dict_to_world_asset( + self, type_to_ids_dict: Dict[ObjectType, + List[int]]) -> world_asset_pb2.WorldAsset: + """Converts a dictionary to a WorldAsset. + + Args: + type_to_ids_dict: Dictionary that describes the scene. Keys are + ObjectTypes and values are lists of integers, where each integer is a + pybullet id for an object of a given type. + + Returns: + A WorldAsset proto with the types, locations and bounding boxes of all + objects in the scene. + """ + world_asset = world_asset_pb2.WorldAsset() + for object_type in type_to_ids_dict.keys(): + for obj_id in type_to_ids_dict[object_type]: + bbox = np.array(self.pybullet_client.getAABB(obj_id)) + bbox_center = np.mean(bbox, axis=0) + bbox_dimensions = bbox[1] - bbox[0] + + obj = world_asset_pb2.Object() + obj.id = str(obj_id) + obj.label = str(object_type) + obj.bounding_box.center.x = bbox_center[0] + obj.bounding_box.center.y = bbox_center[1] + obj.bounding_box.center.z = bbox_center[2] + obj.bounding_box.dimensions.x = bbox_dimensions[0] + obj.bounding_box.dimensions.y = bbox_dimensions[1] + obj.bounding_box.dimensions.z = bbox_dimensions[2] + world_asset.objects.append(obj) + return world_asset + + def close(self): + """Closes the scene at the end of life cycle of the environment.""" + pass + + @property + def vectorized_map(self) -> Sequence[Polygon]: + """Returns vectorized map containing a list of polygon obstacles.""" + raise NotImplementedError("vectorized_map is not implemented by default.") diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/scenes/simple_scene.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/scenes/simple_scene.py new file mode 100644 index 000000000..0099e9e96 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/scenes/simple_scene.py @@ -0,0 +1,35 @@ +# Lint as: python3 +"""A scene containing only a planar floor.""" + +from typing import Sequence + +import gin +from pybullet_envs.minitaur.envs_v2 import base_client +from pybullet_envs.minitaur.envs_v2.scenes import scene_base + +_PLANE_URDF = ( + "plane.urdf") + + +@gin.configurable +class SimpleScene(scene_base.SceneBase): + """A scene containing only a planar floor.""" + + def build_scene(self, pybullet_client): + super().build_scene(pybullet_client) + + visual_shape_id = self._pybullet_client.createVisualShape( + shapeType=self._pybullet_client.GEOM_PLANE) + collision_shape_id = self._pybullet_client.createCollisionShape( + shapeType=self._pybullet_client.GEOM_PLANE) + ground_id = self._pybullet_client.createMultiBody( + baseMass=0, + baseCollisionShapeIndex=collision_shape_id, + baseVisualShapeIndex=visual_shape_id) + self._pybullet_client.changeDynamics(ground_id, -1, lateralFriction=1.0) + self.add_object(ground_id, scene_base.ObjectType.GROUND) + + @property + def vectorized_map(self) -> Sequence[scene_base.Polygon]: + """Returns vectorized map containing a list of polygon obstacles.""" + return [] diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/scenes/world_asset.proto b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/scenes/world_asset.proto new file mode 100644 index 000000000..0e0b97cc4 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/scenes/world_asset.proto @@ -0,0 +1,86 @@ +// A set of protocol buffer definitions for representing 'Worlds' for +// used by simulation engines. +syntax = "proto3"; + +package robotics.messages; +option cc_enable_arenas = true; + + +// A single precision quaternion. +message QQuaternionf { + // The x-component. + float x = 1; + // The y-component. + float y = 2; + // The z-component. + float z = 3; + // The w-component. + float w = 4; +} + + + + +// A three-dimensional single precision vector. +message VVector3f { + float x = 1; + float y = 2; + float z = 3; +} + + + +message Labels { + map label = 1; +} + +// A general bounding box is specified by its center, dimensions and +// orientation. If the orientation field is not specified, then the bounding box +// is aligned with the axes of the world coordinate system. +message GeneralBox3f { + VVector3f center = 1; + VVector3f dimensions = 2; + QQuaternionf orientation = 3; +} + +// An object is specified by its label, bounding box, and a path to an obj +// file containing its mesh. Not all to be specified. +message Object { + string id = 1; + string label = 2; + GeneralBox3f bounding_box = 3; + string mesh_path = 4; +} + +message Polygon3f { + repeated VVector3f vertex = 1; +} + +// A region is specified by its label, spatial extent, and a path to an obj +// file containing its mesh. Not all to be specified. +message Region { + string id = 1; + string label = 2; + oneof spatial_extent { + GeneralBox3f bounding_box = 3; + Polygon3f polygon = 5; + } + string mesh_path = 6; +} + +// A world consist of a mesh, and potentially a set of object and regions. +message WorldAsset { + // A set of labels for objects. This the space of all object labels. + Labels object_labels = 1; + repeated Object objects = 2; + + // A set of labels for regions. This the space of all region labels. + Labels region_labels = 3; + repeated Region regions = 4; + + // A path to a mesh (as obj file) containing the geometry of the world. + string mesh_path = 5; + + // A path to a mesh (as obj file) containing the semantic labels of the world. + string segmentation_mesh_path = 6; +} diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/scenes/world_asset_pb2.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/scenes/world_asset_pb2.py new file mode 100644 index 000000000..a7d99baea --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/scenes/world_asset_pb2.py @@ -0,0 +1,555 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: world_asset.proto +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='world_asset.proto', + package='robotics.messages', + syntax='proto3', + serialized_options=b'\370\001\001', + create_key=_descriptor._internal_create_key, + serialized_pb=b'\n\x11world_asset.proto\x12\x11robotics.messages\":\n\x0cQQuaternionf\x12\t\n\x01x\x18\x01 \x01(\x02\x12\t\n\x01y\x18\x02 \x01(\x02\x12\t\n\x01z\x18\x03 \x01(\x02\x12\t\n\x01w\x18\x04 \x01(\x02\",\n\tVVector3f\x12\t\n\x01x\x18\x01 \x01(\x02\x12\t\n\x01y\x18\x02 \x01(\x02\x12\t\n\x01z\x18\x03 \x01(\x02\"k\n\x06Labels\x12\x33\n\x05label\x18\x01 \x03(\x0b\x32$.robotics.messages.Labels.LabelEntry\x1a,\n\nLabelEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xa4\x01\n\x0cGeneralBox3f\x12,\n\x06\x63\x65nter\x18\x01 \x01(\x0b\x32\x1c.robotics.messages.VVector3f\x12\x30\n\ndimensions\x18\x02 \x01(\x0b\x32\x1c.robotics.messages.VVector3f\x12\x34\n\x0borientation\x18\x03 \x01(\x0b\x32\x1f.robotics.messages.QQuaternionf\"m\n\x06Object\x12\n\n\x02id\x18\x01 \x01(\t\x12\r\n\x05label\x18\x02 \x01(\t\x12\x35\n\x0c\x62ounding_box\x18\x03 \x01(\x0b\x32\x1f.robotics.messages.GeneralBox3f\x12\x11\n\tmesh_path\x18\x04 \x01(\t\"9\n\tPolygon3f\x12,\n\x06vertex\x18\x01 \x03(\x0b\x32\x1c.robotics.messages.VVector3f\"\xb2\x01\n\x06Region\x12\n\n\x02id\x18\x01 \x01(\t\x12\r\n\x05label\x18\x02 \x01(\t\x12\x37\n\x0c\x62ounding_box\x18\x03 \x01(\x0b\x32\x1f.robotics.messages.GeneralBox3fH\x00\x12/\n\x07polygon\x18\x05 \x01(\x0b\x32\x1c.robotics.messages.Polygon3fH\x00\x12\x11\n\tmesh_path\x18\x06 \x01(\tB\x10\n\x0espatial_extent\"\xfb\x01\n\nWorldAsset\x12\x30\n\robject_labels\x18\x01 \x01(\x0b\x32\x19.robotics.messages.Labels\x12*\n\x07objects\x18\x02 \x03(\x0b\x32\x19.robotics.messages.Object\x12\x30\n\rregion_labels\x18\x03 \x01(\x0b\x32\x19.robotics.messages.Labels\x12*\n\x07regions\x18\x04 \x03(\x0b\x32\x19.robotics.messages.Region\x12\x11\n\tmesh_path\x18\x05 \x01(\t\x12\x1e\n\x16segmentation_mesh_path\x18\x06 \x01(\tB\x03\xf8\x01\x01\x62\x06proto3' +) + + + + +_QQUATERNIONF = _descriptor.Descriptor( + name='QQuaternionf', + full_name='robotics.messages.QQuaternionf', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='x', full_name='robotics.messages.QQuaternionf.x', index=0, + number=1, type=2, cpp_type=6, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='y', full_name='robotics.messages.QQuaternionf.y', index=1, + number=2, type=2, cpp_type=6, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='z', full_name='robotics.messages.QQuaternionf.z', index=2, + number=3, type=2, cpp_type=6, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='w', full_name='robotics.messages.QQuaternionf.w', index=3, + number=4, type=2, cpp_type=6, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=40, + serialized_end=98, +) + + +_VVECTOR3F = _descriptor.Descriptor( + name='VVector3f', + full_name='robotics.messages.VVector3f', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='x', full_name='robotics.messages.VVector3f.x', index=0, + number=1, type=2, cpp_type=6, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='y', full_name='robotics.messages.VVector3f.y', index=1, + number=2, type=2, cpp_type=6, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='z', full_name='robotics.messages.VVector3f.z', index=2, + number=3, type=2, cpp_type=6, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=100, + serialized_end=144, +) + + +_LABELS_LABELENTRY = _descriptor.Descriptor( + name='LabelEntry', + full_name='robotics.messages.Labels.LabelEntry', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='key', full_name='robotics.messages.Labels.LabelEntry.key', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='value', full_name='robotics.messages.Labels.LabelEntry.value', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=b'8\001', + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=209, + serialized_end=253, +) + +_LABELS = _descriptor.Descriptor( + name='Labels', + full_name='robotics.messages.Labels', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='label', full_name='robotics.messages.Labels.label', index=0, + number=1, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[_LABELS_LABELENTRY, ], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=146, + serialized_end=253, +) + + +_GENERALBOX3F = _descriptor.Descriptor( + name='GeneralBox3f', + full_name='robotics.messages.GeneralBox3f', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='center', full_name='robotics.messages.GeneralBox3f.center', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='dimensions', full_name='robotics.messages.GeneralBox3f.dimensions', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='orientation', full_name='robotics.messages.GeneralBox3f.orientation', index=2, + number=3, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=256, + serialized_end=420, +) + + +_OBJECT = _descriptor.Descriptor( + name='Object', + full_name='robotics.messages.Object', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='id', full_name='robotics.messages.Object.id', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='label', full_name='robotics.messages.Object.label', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='bounding_box', full_name='robotics.messages.Object.bounding_box', index=2, + number=3, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='mesh_path', full_name='robotics.messages.Object.mesh_path', index=3, + number=4, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=422, + serialized_end=531, +) + + +_POLYGON3F = _descriptor.Descriptor( + name='Polygon3f', + full_name='robotics.messages.Polygon3f', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='vertex', full_name='robotics.messages.Polygon3f.vertex', index=0, + number=1, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=533, + serialized_end=590, +) + + +_REGION = _descriptor.Descriptor( + name='Region', + full_name='robotics.messages.Region', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='id', full_name='robotics.messages.Region.id', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='label', full_name='robotics.messages.Region.label', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='bounding_box', full_name='robotics.messages.Region.bounding_box', index=2, + number=3, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='polygon', full_name='robotics.messages.Region.polygon', index=3, + number=5, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='mesh_path', full_name='robotics.messages.Region.mesh_path', index=4, + number=6, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + _descriptor.OneofDescriptor( + name='spatial_extent', full_name='robotics.messages.Region.spatial_extent', + index=0, containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[]), + ], + serialized_start=593, + serialized_end=771, +) + + +_WORLDASSET = _descriptor.Descriptor( + name='WorldAsset', + full_name='robotics.messages.WorldAsset', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='object_labels', full_name='robotics.messages.WorldAsset.object_labels', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='objects', full_name='robotics.messages.WorldAsset.objects', index=1, + number=2, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='region_labels', full_name='robotics.messages.WorldAsset.region_labels', index=2, + number=3, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='regions', full_name='robotics.messages.WorldAsset.regions', index=3, + number=4, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='mesh_path', full_name='robotics.messages.WorldAsset.mesh_path', index=4, + number=5, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='segmentation_mesh_path', full_name='robotics.messages.WorldAsset.segmentation_mesh_path', index=5, + number=6, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=774, + serialized_end=1025, +) + +_LABELS_LABELENTRY.containing_type = _LABELS +_LABELS.fields_by_name['label'].message_type = _LABELS_LABELENTRY +_GENERALBOX3F.fields_by_name['center'].message_type = _VVECTOR3F +_GENERALBOX3F.fields_by_name['dimensions'].message_type = _VVECTOR3F +_GENERALBOX3F.fields_by_name['orientation'].message_type = _QQUATERNIONF +_OBJECT.fields_by_name['bounding_box'].message_type = _GENERALBOX3F +_POLYGON3F.fields_by_name['vertex'].message_type = _VVECTOR3F +_REGION.fields_by_name['bounding_box'].message_type = _GENERALBOX3F +_REGION.fields_by_name['polygon'].message_type = _POLYGON3F +_REGION.oneofs_by_name['spatial_extent'].fields.append( + _REGION.fields_by_name['bounding_box']) +_REGION.fields_by_name['bounding_box'].containing_oneof = _REGION.oneofs_by_name['spatial_extent'] +_REGION.oneofs_by_name['spatial_extent'].fields.append( + _REGION.fields_by_name['polygon']) +_REGION.fields_by_name['polygon'].containing_oneof = _REGION.oneofs_by_name['spatial_extent'] +_WORLDASSET.fields_by_name['object_labels'].message_type = _LABELS +_WORLDASSET.fields_by_name['objects'].message_type = _OBJECT +_WORLDASSET.fields_by_name['region_labels'].message_type = _LABELS +_WORLDASSET.fields_by_name['regions'].message_type = _REGION +DESCRIPTOR.message_types_by_name['QQuaternionf'] = _QQUATERNIONF +DESCRIPTOR.message_types_by_name['VVector3f'] = _VVECTOR3F +DESCRIPTOR.message_types_by_name['Labels'] = _LABELS +DESCRIPTOR.message_types_by_name['GeneralBox3f'] = _GENERALBOX3F +DESCRIPTOR.message_types_by_name['Object'] = _OBJECT +DESCRIPTOR.message_types_by_name['Polygon3f'] = _POLYGON3F +DESCRIPTOR.message_types_by_name['Region'] = _REGION +DESCRIPTOR.message_types_by_name['WorldAsset'] = _WORLDASSET +_sym_db.RegisterFileDescriptor(DESCRIPTOR) + +QQuaternionf = _reflection.GeneratedProtocolMessageType('QQuaternionf', (_message.Message,), { + 'DESCRIPTOR' : _QQUATERNIONF, + '__module__' : 'world_asset_pb2' + # @@protoc_insertion_point(class_scope:robotics.messages.QQuaternionf) + }) +_sym_db.RegisterMessage(QQuaternionf) + +VVector3f = _reflection.GeneratedProtocolMessageType('VVector3f', (_message.Message,), { + 'DESCRIPTOR' : _VVECTOR3F, + '__module__' : 'world_asset_pb2' + # @@protoc_insertion_point(class_scope:robotics.messages.VVector3f) + }) +_sym_db.RegisterMessage(VVector3f) + +Labels = _reflection.GeneratedProtocolMessageType('Labels', (_message.Message,), { + + 'LabelEntry' : _reflection.GeneratedProtocolMessageType('LabelEntry', (_message.Message,), { + 'DESCRIPTOR' : _LABELS_LABELENTRY, + '__module__' : 'world_asset_pb2' + # @@protoc_insertion_point(class_scope:robotics.messages.Labels.LabelEntry) + }) + , + 'DESCRIPTOR' : _LABELS, + '__module__' : 'world_asset_pb2' + # @@protoc_insertion_point(class_scope:robotics.messages.Labels) + }) +_sym_db.RegisterMessage(Labels) +_sym_db.RegisterMessage(Labels.LabelEntry) + +GeneralBox3f = _reflection.GeneratedProtocolMessageType('GeneralBox3f', (_message.Message,), { + 'DESCRIPTOR' : _GENERALBOX3F, + '__module__' : 'world_asset_pb2' + # @@protoc_insertion_point(class_scope:robotics.messages.GeneralBox3f) + }) +_sym_db.RegisterMessage(GeneralBox3f) + +Object = _reflection.GeneratedProtocolMessageType('Object', (_message.Message,), { + 'DESCRIPTOR' : _OBJECT, + '__module__' : 'world_asset_pb2' + # @@protoc_insertion_point(class_scope:robotics.messages.Object) + }) +_sym_db.RegisterMessage(Object) + +Polygon3f = _reflection.GeneratedProtocolMessageType('Polygon3f', (_message.Message,), { + 'DESCRIPTOR' : _POLYGON3F, + '__module__' : 'world_asset_pb2' + # @@protoc_insertion_point(class_scope:robotics.messages.Polygon3f) + }) +_sym_db.RegisterMessage(Polygon3f) + +Region = _reflection.GeneratedProtocolMessageType('Region', (_message.Message,), { + 'DESCRIPTOR' : _REGION, + '__module__' : 'world_asset_pb2' + # @@protoc_insertion_point(class_scope:robotics.messages.Region) + }) +_sym_db.RegisterMessage(Region) + +WorldAsset = _reflection.GeneratedProtocolMessageType('WorldAsset', (_message.Message,), { + 'DESCRIPTOR' : _WORLDASSET, + '__module__' : 'world_asset_pb2' + # @@protoc_insertion_point(class_scope:robotics.messages.WorldAsset) + }) +_sym_db.RegisterMessage(WorldAsset) + + +DESCRIPTOR._options = None +_LABELS_LABELENTRY._options = None +# @@protoc_insertion_point(module_scope) diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/sensors/accelerometer_sensor.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/sensors/accelerometer_sensor.py new file mode 100644 index 000000000..954e8ecb3 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/sensors/accelerometer_sensor.py @@ -0,0 +1,86 @@ +# Lint as: python3 +"""A sensor that measures the acceleration of the robot base.""" + +from typing import Any, Callable, Sequence, Type, Text, Union + +import gin +import gym +import numpy as np + +from pybullet_envs.minitaur.envs_v2.sensors import sensor +from pybullet_envs.minitaur.envs_v2.utilities import noise_generators + +_ACCELEROMETER_DIM = 3 +_DEFAULT_ACCELEROMETER_LOWER_BOUND = (-1, -1, -1) +_DEFAULT_ACCELEROMETER_UPPER_BOUND = (1, 1, 1) + + +@gin.configurable +class AccelerometerSensor(sensor.Sensor): + """An Accelerometer sensor.""" + + def __init__( + self, + name: Text = "Accelerometer", + dtype: Type[Any] = np.float64, + lower_bound: Sequence[float] = _DEFAULT_ACCELEROMETER_LOWER_BOUND, + upper_bound: Sequence[float] = _DEFAULT_ACCELEROMETER_UPPER_BOUND, + noise_generator: Union[Callable[..., Any], + noise_generators.NoiseGenerator] = None, + sensor_latency: Union[float, Sequence[float]] = 0.0, + ): + """Constructs AccelerometerSensor. + + Generates separate IMU value channels as per configuration. + + Args: + name: the name of the sensor. + dtype: data type of sensor value. + lower_bound: The lower bounds of the sensor reading. + upper_bound: The upper bounds of the sensor reading. + noise_generator: Used to add noise to the readings. + sensor_latency: There are two ways to use this expected sensor latency. + For both methods, the latency should be in the same unit as the sensor + data timestamp. 1. As a single float number, the observation will be a + 1D array. For real robots, this should be set to 0.0. 2. As a array of + floats, the observation will be a 2D array based on how long the history + need to be. Thus, [0.0, 0.1, 0.2] is a history length of 3. + + """ + super().__init__( + name=name, + sensor_latency=sensor_latency, + interpolator_fn=sensor.linear_obs_blender) + + self._noise_generator = noise_generator + self._dtype = dtype + + if lower_bound is None or upper_bound is None: + raise ValueError("Must provides bounds for the Accelerometer readings.") + + if len(lower_bound) != _ACCELEROMETER_DIM or len( + upper_bound) != _ACCELEROMETER_DIM: + raise ValueError( + "Bounds must be {} dimensions.".format(_ACCELEROMETER_DIM)) + + lower_bound = np.array(lower_bound, dtype=dtype) + upper_bound = np.array(upper_bound, dtype=dtype) + + self._observation_space = self._stack_space( + gym.spaces.Box( + low=np.array(lower_bound, dtype=self._dtype), + high=np.array(upper_bound, dtype=self._dtype), + dtype=self._dtype)) + + def _get_original_observation(self): + return self._robot.timestamp, np.array( + self._robot.base_acceleration_accelerometer, dtype=self._dtype) + + def get_observation(self) -> np.ndarray: + delayed_observation = super().get_observation() + if self._noise_generator: + if callable(self._noise_generator): + return self._noise_generator(delayed_observation) + else: + return self._noise_generator.add_noise(delayed_observation) + return delayed_observation diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/sensors/camera_sensor.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/sensors/camera_sensor.py new file mode 100644 index 000000000..d1c6bde8c --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/sensors/camera_sensor.py @@ -0,0 +1,184 @@ +# Lint as: python3 +"""A sensor for robot-mounted 1D lidar (laser scan).""" + +from typing import Any, Iterable, Sequence, Type, Union + +import gin +import gym +import numpy as np + +from pybullet_envs.minitaur.envs_v2.sensors import sensor +from pybullet_envs.minitaur.vision import point_cloud_utils +from pybullet_envs.minitaur.vision import sim_camera + +_MODE_TO_NUM_CHANNELS_DICT = { + sim_camera.CameraMode.DEPTH: 1, + sim_camera.CameraMode.RGB: 3, + sim_camera.CameraMode.RGBD: 4, + sim_camera.CameraMode.POINTCLOUD_WORLD_FRAME: 3, + sim_camera.CameraMode.POINTCLOUD_ROBOT_FRAME: 3, +} + + +@gin.configurable +class CameraSensor(sensor.Sensor): + """A robot-mounted sensor that returns RGBD images. + + Attributes: + resolution: A 2-tuple (width, height) that represents the resolution of the + camera. + fov_degree: A floating point value that represents the field of view of the + camera in the vertical direction. The unit is degree. + """ + + def __init__(self, + camera_translation_from_base, + camera_rotation_from_base, + parent_link_id=-1, + camera_mode=sim_camera.CameraMode.DEPTH, + camera_update_frequency_hz=10, + camera_stabilized=False, + fov_degree=60, + resolution=(32, 32), + lower_bound: Union[float, Iterable[float]] = 0.0, + upper_bound: Union[float, Iterable[float]] = 255.0, + sensor_latency: Union[float, Sequence[float]] = 0.0, + dtype: Type[Any] = np.float64, + name="vision"): + """Initializes the CameraSensor. + + Args: + camera_translation_from_base: A 3-vector translation from the center of + the specified link. + camera_rotation_from_base: A 4-vector quaternion represents the rotation + of the camera relative to the specified link. + parent_link_id: The pybullet link id, where the camera is mounted on. + camera_mode: An enum that specifies the mode that the camera operates. See + sim_camera.CameraMode for more details. + camera_update_frequency_hz: The frequency at which the camera will capture + a frame. + camera_stabilized: Whether the camera is stabilized. See + sim_camera.MountedCamera for more details. + fov_degree: The vertical field of view of the camera (in degree). + resolution: A 2-tuple that represents the width and the height of the + camera image. + lower_bound: The lower bound of values of the camera output. It could be a + single float or an array of floats with shape (height, width, channels). + upper_bound: The upper bound of values of the camera output. It could be a + single float or an array of floats with shape (height, width, + channels).. + sensor_latency: See base class. + dtype: See base class. + name: The name of the sensor. + """ + super().__init__( + name=name, + sensor_latency=sensor_latency, + interpolator_fn=sensor.closest_obs_blender) + self._parent_link_id = parent_link_id + self._camera_mode = camera_mode + self._camera_translation_from_base = camera_translation_from_base + self._camera_rotation_from_base = camera_rotation_from_base + self.camera_update_frequency_hz = camera_update_frequency_hz + self._time_interval_every_camera_update = (1.0 / + self.camera_update_frequency_hz) + self._camera_stabilized = camera_stabilized + self._fov_degree = fov_degree + self._resolution = resolution + num_channels = _MODE_TO_NUM_CHANNELS_DICT[self._camera_mode] + self._camera = None + self._camera_image = None + self._dtype = dtype + if isinstance(lower_bound, list): + lower_bound = np.array(lower_bound, dtype=self._dtype) + else: + lower_bound = lower_bound * np.ones( + shape=(resolution[1], resolution[0], num_channels), dtype=self._dtype) + if isinstance(upper_bound, list): + upper_bound = np.array(upper_bound, dtype=self._dtype) + else: + upper_bound = upper_bound * np.ones( + shape=(resolution[1], resolution[0], num_channels), dtype=self._dtype) + self._observation_space = gym.spaces.Box( + low=lower_bound, high=upper_bound, dtype=self._dtype) + self._last_camera_image_timestamp = None + + def change_mounting_point( + self, + camera_translation_from_link: Sequence[float] = (0, 0, 0), + camera_rotation_from_link: Sequence[float] = (0, 0, 0, 1), + parent_link_id: int = -1): + """Changes mounting point. Must be called before calls to set_robot(). + + Args: + camera_translation_from_link: A 3-vector translation from the center of + the specified link. + camera_rotation_from_link: A 4-vector quaternion represents the rotation + of the camera relative to the specified link. + parent_link_id: The pybullet link id, where the camera is mounted on. + """ + self._parent_link_id = parent_link_id + self._camera_translation_from_base = camera_translation_from_link + self._camera_rotation_from_base = camera_rotation_from_link + + def set_robot(self, robot): + super().set_robot(robot) + + self._camera = sim_camera.MountedCamera( + pybullet_client=robot.pybullet_client, + body_id=robot.robot_id, + parent_link_id=self._parent_link_id, + relative_translation=self._camera_translation_from_base, + relative_rotation=self._camera_rotation_from_base, + stabilized=self._camera_stabilized, + camera_mode=self._camera_mode, + fov_degree=self._fov_degree, + resolution=self._resolution) + + def on_reset(self, env): + self._env = env + self._last_camera_image_timestamp = None + super().on_reset(env) + + def _get_original_observation(self): + if self._last_camera_image_timestamp is None or ( + self._robot.timestamp >= self._last_camera_image_timestamp + + self._time_interval_every_camera_update): + self._camera_image = self._camera.render_image().astype(self._dtype) + self._last_camera_image_timestamp = self._robot.timestamp + return self._robot.timestamp, self._camera_image + + def project_depth_map_to_point_cloud(self, depth_map, use_world_frame=True): + """Convert the depth map into a 3D point cloud. + + Args: + depth_map: A 2D numpy array with shape (height, width) which represents + the depth map. + use_world_frame: Whether converts the depth map into a point cloud in the + world frame. If False, the point cloud is in the robot's local frame. If + True, the point cloud is in the world frame if the robot's base + position/orientation can be measured (e.g. in sim, using SLAM or mocap). + + Returns: + A point cloud represented by a numpy array of shape (height, width, 3). + """ + point_cloud = point_cloud_utils.distance_map_to_point_cloud( + np.squeeze(depth_map), self.fov_degree / 180.0 * np.pi, + depth_map.shape[1], depth_map.shape[0]) + if use_world_frame: + point_cloud = ( + self._camera.transform_point_cloud_from_camera_to_world_frame( + point_cloud)) + else: + point_cloud = ( + self._camera.transform_point_cloud_from_camera_to_robot_frame( + point_cloud)) + return point_cloud + + @property + def resolution(self): + return self._camera.resolution + + @property + def fov_degree(self): + return self._camera.fov_degree diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/sensors/imu_sensor.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/sensors/imu_sensor.py new file mode 100644 index 000000000..a26cf491d --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/sensors/imu_sensor.py @@ -0,0 +1,133 @@ +# Lint as: python3 +"""The on robot sensor classes.""" + +import enum +from typing import Any, Callable, Iterable, Sequence, Type, Text, Union + +import gin +import gym +import numpy as np + +from pybullet_envs.minitaur.envs_v2.sensors import sensor +from pybullet_envs.minitaur.envs_v2.utilities import noise_generators + + +@gin.constants_from_enum +class IMUChannel(enum.Enum): + ROLL = 1, + PITCH = 2, + YAW = 3, + ROLL_RATE = 4, + PITCH_RATE = 5, + YAW_RATE = 6, + + +@gin.configurable +class IMUSensor(sensor.Sensor): + """An IMU sensor.""" + + def __init__( + self, + name: Text = "IMU", + dtype: Type[Any] = np.float64, + channels: Sequence[IMUChannel] = None, + lower_bound: Union[float, Iterable[float]] = None, + upper_bound: Union[float, Iterable[float]] = None, + noise_generator: Union[Callable[..., Any], + noise_generators.NoiseGenerator] = None, + sensor_latency: Union[float, Sequence[float]] = 0.0, + ): + """Constructs IMUSensor. + + Generates separate IMU value channels as per configuration. + + Args: + name: the name of the sensor. + dtype: data type of sensor value. + channels: value channels wants to subscribe. Must be members of the + IMUChannel class. + lower_bound: The lower bounds of the sensor reading. + upper_bound: The upper bounds of the sensor reading. + noise_generator: Used to add noise to the readings. + sensor_latency: There are two ways to use this expected sensor latency. + For both methods, the latency should be in the same unit as the sensor + data timestamp. 1. As a single float number, the observation will be a + 1D array. For real robots, this should be set to 0.0. 2. As a array of + floats, the observation will be a 2D array based on how long the history + need to be. Thus, [0.0, 0.1, 0.2] is a history length of 3. + + Raises: + ValueError: If no IMU channel is provided and no bounds for the channels. + """ + super().__init__( + name=name, + sensor_latency=sensor_latency, + interpolator_fn=sensor.linear_obs_blender) + if channels is None: + raise ValueError("IMU channels are not provided.") + self._channels = channels + self._num_channels = len(self._channels) + self._noise_generator = noise_generator + self._dtype = dtype + + if lower_bound is None or upper_bound is None: + raise ValueError("Must provides bounds for the IMU readings.") + + if isinstance(lower_bound, (float, int)): + lower_bound = np.full(self._num_channels, lower_bound, dtype=dtype) + else: + lower_bound = np.array(lower_bound, dtype=dtype) + + if len(lower_bound) != self._num_channels: + raise ValueError("length of sensor lower bound {lower_bound} does not" + " match the number of channels.") + + if isinstance(upper_bound, (float, int)): + upper_bound = np.full(self._num_channels, upper_bound, dtype=dtype) + else: + upper_bound = np.array(upper_bound, dtype=dtype) + + if len(upper_bound) != self._num_channels: + raise ValueError("length of sensor upper bound {upper_bound} does not" + " match the number of channels.") + + self._observation_space = self._stack_space( + gym.spaces.Box( + low=np.array(lower_bound, dtype=self._dtype), + high=np.array(upper_bound, dtype=self._dtype), + dtype=self._dtype)) + + def get_channels(self) -> Sequence[IMUChannel]: + return self._channels + + def get_num_channels(self) -> int: + return self._num_channels + + def _get_original_observation(self): + rpy = self._robot.base_roll_pitch_yaw + observations = np.zeros(self._num_channels) + for i, channel in enumerate(self._channels): + if channel == IMUChannel.ROLL: + observations[i] = rpy[0] + elif channel == IMUChannel.PITCH: + observations[i] = rpy[1] + elif channel == IMUChannel.YAW: + observations[i] = rpy[2] + elif channel == IMUChannel.ROLL_RATE: + observations[i] = self._robot.base_roll_pitch_yaw_rate[0] + elif channel == IMUChannel.PITCH_RATE: + observations[i] = self._robot.base_roll_pitch_yaw_rate[1] + elif channel == IMUChannel.YAW_RATE: + observations[i] = self._robot.base_roll_pitch_yaw_rate[2] + + return self._robot.timestamp, np.array(observations, dtype=self._dtype) + + def get_observation(self) -> np.ndarray: + delayed_observation = super().get_observation() + if self._noise_generator: + if callable(self._noise_generator): + return self._noise_generator(delayed_observation) + else: + return self._noise_generator.add_noise(delayed_observation) + + return delayed_observation diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/sensors/last_action_sensor.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/sensors/last_action_sensor.py new file mode 100644 index 000000000..e61299f02 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/sensors/last_action_sensor.py @@ -0,0 +1,60 @@ +# Lint as: python3 +"""A sensor that returns the last action(s) sent to the environment.""" + +from typing import Any, Dict, Sequence, Text, Type, Tuple, Union +import gin +import gym +import numpy as np + +from pybullet_envs.minitaur.envs_v2.sensors import sensor +from pybullet_envs.minitaur.envs_v2.sensors import space_utils + + +@gin.configurable +class LastActionSensor(sensor.Sensor): + """A sensor that reports the last action taken.""" + + def __init__(self, + name: Text = "LastAction", + dtype: Type[Any] = np.float64, + sensor_latency: Union[float, Sequence[float]] = 0): + """Constructs LastActionSensor. + + We do not provide a robot instance during __init__, as robot instances may + be reloaded/recreated during the simulation. + + Args: + name: the name of the sensor + dtype: data type of sensor value. + sensor_latency: There are two ways to use this expected sensor latency. + For both methods, the latency should be in the same unit as the sensor + data timestamp. 1. As a single float number, the observation will be a + 1D array. For real robots, this should be set to 0.0. 2. As a array of + floats, the observation will be a 2D array based on how long the history + need to be. Thus, [0.0, 0.1, 0.2] is a history length of 3. + """ + super().__init__(name=name, + sensor_latency=sensor_latency, + # We generally don't interpolate actions. + interpolator_fn=sensor.older_obs_blender) + + self._dtype = dtype + self._env = None + + def on_reset(self, env: gym.Env): + """From the callback, the sensor remembers the environment. + + Args: + env: the environment who invokes this callback function. + """ + # Constructs the observation space using the env's action space. + self._observation_space = self._stack_space( + env.action_space, dtype=self._dtype) + + # Call the super class methods to initialize the buffers + super().on_reset(env) + + def _get_original_observation( + self) -> Tuple[float, Union[Dict[Text, np.ndarray], np.ndarray]]: + return self._env.get_time(), space_utils.action_astype( + self._env.last_action, self._dtype) diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/sensors/motor_angle_sensor.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/sensors/motor_angle_sensor.py new file mode 100644 index 000000000..ce1754547 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/sensors/motor_angle_sensor.py @@ -0,0 +1,122 @@ +# Lint as: python3 +"""The on robot sensor classes.""" + +from typing import Any, Callable, Iterable, Optional, Sequence, Type, Text, Tuple, Union + +import gin +import gym +import numpy as np + +from pybullet_envs.minitaur.envs_v2.sensors import sensor + +from pybullet_envs.minitaur.envs_v2.utilities import noise_generators + + +def _convert_to_np_array(inputs: Union[float, Tuple[float], np.ndarray], dim): + """Converts the inputs to a numpy array. + + Args: + inputs: The input scalar or array. + dim: The dimension of the converted numpy array. + + Returns: + The converted numpy array. + + Raises: + ValueError: If the inputs is an array whose dimension does not match the + provided dimension. + """ + outputs = None + if isinstance(inputs, (tuple, np.ndarray)): + outputs = np.array(inputs) + else: + outputs = np.full(dim, inputs) + + if len(outputs) != dim: + raise ValueError("The inputs array has a different dimension {}" + " than provided, which is {}.".format(len(outputs), dim)) + + return outputs + + +@gin.configurable +class MotorAngleSensor(sensor.Sensor): + """A sensor that reads motor angles from the robot.""" + + def __init__(self, + name: Text = "MotorAngle", + dtype: Type[Any] = np.float64, + lower_bound: Optional[Union[float, Iterable[float]]] = None, + upper_bound: Optional[Union[float, Iterable[float]]] = None, + noise_generator: Union[Callable[..., Any], + noise_generators.NoiseGenerator] = None, + sensor_latency: Union[float, Sequence[float]] = 0.0, + observe_sine_cosine: bool = False): + """Initializes the class. + + Args: + name: The name of the sensor. + dtype: The datatype of this sensor. + lower_bound: The optional lower bounds of the sensor reading. If not + provided, will extract from the motor limits of the robot class. + upper_bound: The optional upper bounds of the sensor reading. If not + provided, will extract from the motor limits of the robot class. + noise_generator: Adds noise to the sensor readings. + sensor_latency: There are two ways to use this expected sensor latency. + For both methods, the latency should be in the same unit as the sensor + data timestamp. 1. As a single float number, the observation will be a + 1D array. For real robots, this should be set to 0.0. 2. As a array of + floats, the observation will be a 2D array based on how long the history + need to be. Thus, [0.0, 0.1, 0.2] is a history length of 3. + observe_sine_cosine: whether to observe motor angles as sine and cosine + values. + """ + super().__init__( + name=name, + sensor_latency=sensor_latency, + interpolator_fn=sensor.linear_obs_blender) + self._noise_generator = noise_generator + self._dtype = dtype + self._lower_bound = lower_bound + self._upper_bound = upper_bound + self._observe_sine_cosine = observe_sine_cosine + + def set_robot(self, robot): + self._robot = robot + # Creates the observation space based on the robot motor limitations. + if self._observe_sine_cosine: + lower_bound = _convert_to_np_array(-1, 2 * self._robot.num_motors) + elif self._lower_bound: + lower_bound = _convert_to_np_array(self._lower_bound, + self._robot.num_motors) + else: + lower_bound = _convert_to_np_array( + self._robot.motor_limits.angle_lower_limits, self._robot.num_motors) + if self._observe_sine_cosine: + upper_bound = _convert_to_np_array(1, 2 * self._robot.num_motors) + elif self._upper_bound: + upper_bound = _convert_to_np_array(self._upper_bound, + self._robot.num_motors) + else: + upper_bound = _convert_to_np_array( + self._robot.motor_limits.angle_upper_limits, self._robot.num_motors) + + self._observation_space = self._stack_space( + gym.spaces.Box(low=lower_bound, high=upper_bound, dtype=self._dtype)) + + def _get_original_observation(self): + if self._observe_sine_cosine: + return self._robot.timestamp, np.hstack( + (np.cos(self._robot.motor_angles), np.sin(self._robot.motor_angles))) + else: + return self._robot.timestamp, self._robot.motor_angles + + def get_observation(self) -> np.ndarray: + delayed_observation = super().get_observation() + if self._noise_generator: + if callable(self._noise_generator): + return self._noise_generator(delayed_observation) + else: + return self._noise_generator.add_noise(delayed_observation) + + return delayed_observation diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/sensors/sensor.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/sensors/sensor.py new file mode 100644 index 000000000..e3208cdc3 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/sensors/sensor.py @@ -0,0 +1,451 @@ +# Lint as: python3 +"""A sensor prototype class. + +The concept is explained in: go/minitaur-gym-redesign-1.1 +""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +from typing import Any, Iterable, Optional, Sequence, Text, Tuple, Union + +import gin +import gym +import numpy as np + +from pybullet_envs.minitaur.robots import robot_base +from pybullet_envs.minitaur.robots import time_ordered_buffer + +_ARRAY = Sequence[float] +_FloatOrArray = Union[float, _ARRAY] +_DataTypeList = Iterable[Any] + +# For sensor with multiput outputs, key of the main observation in output dict. +MAIN_OBS_KEY = "" + +# This allows referencing np.float32 in gin config files. For example: +# lidar_sensor.LidarSensor.dtype = @np.float32 +gin.external_configurable(np.float32, module="np") +gin.external_configurable(np.float64, module="np") +gin.external_configurable(np.uint8, module="np") + + +# Observation blenders take a pair of low/high values. The low/high is measured +# by the latency of the observation. So the low value is actually newer in time +# and high value older. The coeff [0, 1] can be thinked as the distance between +# the low and high value value, with 0 being 100% low value and 1 as 100% high +# value. +def linear_obs_blender(low_value: Any, high_value: Any, coeff: float): + """Linear interpolation of low/high values based on coefficient value.""" + return low_value * (1 - coeff) + high_value * coeff + + +def closest_obs_blender(low_value: Any, high_value: Any, coeff: float): + """Choosing the high or low value based on coefficient value.""" + return low_value if coeff < 0.5 else high_value + + +def newer_obs_blender(low_value: Any, unused_high_value: Any, + unused_coeff: float): + """Always choosing low value, which is the newer value between low/high.""" + return low_value + + +def older_obs_blender(unused_low_value: Any, high_value: Any, + unused_coeff: float): + """Always choosing the high value, which is the older value between low/high.""" + return high_value + + +@gin.configurable +class Sensor(object): + """A prototype class of sensors.""" + + def __init__( + self, + name: Text, + sensor_latency: _FloatOrArray, + interpolator_fn: Any, + enable_debug_visualization: bool = False, + ): + """A basic constructor of the sensor. + + We do not provide a robot instance during __init__, as robot instances may + be reloaded/recreated during the simulation. + + Args: + name: the name of the sensor + sensor_latency: There are two ways to use this expected sensor latency. + For both methods, the latency should be in the same unit as the sensor + data timestamp. 1. As a single float number, the observation will be a + 1D array. For real robots, this should be set to 0.0. 2. As an array of + floats, the observation will be a 2D array based on how long the history + need to be. Thus, [0.0, 0.1, 0.2] is a history length of 3. Observations + are stacked on a new axis appended after existing axes. + interpolator_fn: Function that controls how to interpolate the two values + that is returned from the time ordered buffer. + enable_debug_visualization: Whether to draw debugging visualization. + """ + self._robot = None + self._name = name + # Observation space will be implemented by derived classes. + self._observation_space = None + self._sensor_latency = sensor_latency + self._single_latency = True if isinstance(sensor_latency, + (float, int)) else False + self._enable_debug_visualization = enable_debug_visualization + if not self._is_valid_latency(): + raise ValueError("sensor_latency is expected to be a non-negative number " + "or a non-empty list of non-negative numbers.") + self._interpolator_fn = interpolator_fn or newer_obs_blender + self._axis = -1 + timespan = sensor_latency if self._single_latency else max(sensor_latency) + self._observation_buffer = time_ordered_buffer.TimeOrderedBuffer( + max_buffer_timespan=timespan) + + def _is_valid_latency(self): + if self._single_latency: + return self._sensor_latency >= 0 + if self._sensor_latency: + return all(value >= 0 for value in self._sensor_latency) + return False + + def get_name(self) -> Text: + return self._name + + @property + def is_single_latency(self) -> bool: + return self._single_latency + + @property + def observation_space(self) -> gym.spaces.Space: + return self._observation_space + + @property + def enable_debug_visualization(self): + return self._enable_debug_visualization + + @enable_debug_visualization.setter + def enable_debug_visualization(self, enable): + self._enable_debug_visualization = enable + + def get_observation_datatype(self): + """Returns the data type for the numpy structured array. + + It is recommended to define a list of tuples: (name, datatype, shape) + Reference: https://docs.scipy.org/doc/numpy-1.15.0/user/basics.rec.html + Ex: + return [('motor_angles', np.float64, (8, ))] # motor angle sensor + return [('IMU_x', np.float64), ('IMU_z', np.float64), ] # IMU + Will be deprecated (b/150818246) in favor of observation_space. + + Returns: + datatype: a list of data types. + """ + raise NotImplementedError("Deprecated. Are you using the old robot class?") + + def get_lower_bound(self): + """Returns the lower bound of the observation. + + Will be deprecated (b/150818246) in favor of observation_space. + + Returns: + lower_bound: the lower bound of sensor values in np.array format + """ + raise NotImplementedError("Deprecated. Are you using the old robot class?") + + def get_upper_bound(self): + """Returns the upper bound of the observation. + + Will be deprecated (b/150818246) in favor of observation_space. + + Returns: + upper_bound: the upper bound of sensor values in np.array format + """ + raise NotImplementedError("Deprecated. Are you using the old robot class?") + + def _get_original_observation(self) -> Tuple[float, Any]: + """Gets the non-modified observation. + + Different from the get_observation, which can pollute and sensor data with + noise and latency, this method shall return the best effort measurements of + the sensor. For simulated robots, this will return the clean data. For reals + robots, just return the measurements as is. All inherited class shall + implement this method. + + Returns: + The timestamp and the original sensor measurements. + + Raises: + NotImplementedError for the base class. + + """ + raise NotImplementedError("Not implemented for base class." "") + + def get_observation(self): + """Returns the observation data. + + Returns: + observation: the observed sensor values in np.array format + """ + obs = self._observation_buffer.get_delayed_value(self._sensor_latency) + + if self._single_latency: + if isinstance(self._observation_space, gym.spaces.Dict): + return self._interpolator_fn(obs.value_0, obs.value_1, obs.coeff) + else: + return np.asarray( + self._interpolator_fn(obs.value_0, obs.value_1, obs.coeff)) + else: + if isinstance(self._observation_space, gym.spaces.Dict): + # interpolate individual sub observation + interpolated = [ + self._interpolator_fn(data.value_0, data.value_1, data.coeff) + for data in obs + ] + + stacked_per_sub_obs = {} + for k in interpolated[0]: + stacked_per_sub_obs[k] = np.stack( + np.asarray([d[k] for d in interpolated]), axis=self._axis) + return stacked_per_sub_obs + else: + obs = np.asarray([ + self._interpolator_fn(data.value_0, data.value_1, data.coeff) + for data in obs + ]) + return np.stack(obs, axis=self._axis) + + def set_robot(self, robot: robot_base.RobotBase): + """Set a robot instance.""" + self._robot = robot + + def get_robot(self): + """Returns the robot instance.""" + return self._robot + + def on_reset(self, env): + """A callback function for the reset event. + + Args: + env: the environment who invokes this callback function. + """ + self._env = env + self._observation_buffer.reset() + self.on_new_observation() + + def on_step(self, env): + """A callback function for the control step event. + + Args: + env: the environment who invokes this callback function. + """ + pass + + def visualize(self): + """Visualizes the sensor information.""" + pass + + def on_new_observation(self): + """A callback for each observation received. + + To be differentiated from on_step, which will be called only once per + control step (i.e. env.step), this API will be called everytime in the + substep/action repeat loop, when new observations are expected. Each derived + sensor class should implement this API by implementing: + + my_obs = call env/robot api to get the observation + self._observation_buffer.add(my_obs) + """ + timestamp, obs = self._get_original_observation() + if self._enable_debug_visualization: + self.visualize() + self._observation_buffer.add(timestamp, obs) + + def on_terminate(self, env): + """A callback function for the terminate event. + + Args: + env: the environment who invokes this callback function. + """ + pass + + def _stack_space(self, + space: Union[gym.spaces.Box, gym.spaces.Dict], + dtype: np.dtype = None) -> Any: + """Returns stacked version of observation space. + + This stacks a gym.spaces.Box or gym.spaces.Dict action space based on the + length of the sensor latency and the axis for stacking specified in the + sensor. A gym.spaces.Box is just stacked, but a gym.spaces.Dict is + recursively stacked, preserving its dictionary structure while stacking + any gym.spaces.Box contained within. For example, the input action space: + + gym.spaces.Dict({ + 'space_1': gym.spaces.Box(low=0, high=10, shape=(1,)), + 'space_2': gym.spaces.Dict({ + 'space_3': gym.spaces.Box(low=0, high=10, shape=(2,)), + }), + })) + + would be converted to the following if sensor latency was [0, 1]: + + gym.spaces.Dict({ + 'space_1': gym.spaces.Box(low=0, high=10, shape=(1, 2)), + 'space_2': gym.spaces.Dict({ + 'space_3': gym.spaces.Box(low=0, high=10, shape=(2, 2)), + }), + })) + + Args: + space: A gym.spaces.Dict or gym.spaces.Box to be stacked. + dtype: Datatype for the stacking. + + Returns: + stacked_space: A stacked version of the action space. + """ + if self._single_latency: + return space + + # Allow sensors such as last_action_sensor to override the dtype. + dtype = dtype or space.dtype + + if isinstance(space, gym.spaces.Box): + return self._stack_space_box(space, dtype) + elif isinstance(space, gym.spaces.Dict): + return self._stack_space_dict(space, dtype) + else: + raise ValueError(f"Space {space} is an unsupported type.") + + def _stack_space_box(self, space: gym.spaces.Box, + dtype: np.dtype) -> gym.spaces.Box: + """Returns stacked version of a box observation space. + + This stacks a gym.spaces.Box action space based on the length of the sensor + latency and the axis for stacking specified in the sensor. + + Args: + space: A gym.spaces.Box to be stacked. + dtype: Datatype for the stacking + + Returns: + stacked_space: A stacked version of the gym.spaces.Box action space. + """ + length = len(self._sensor_latency) + stacked_space = gym.spaces.Box( + low=np.repeat( + np.expand_dims(space.low, axis=self._axis), length, + axis=self._axis), + high=np.repeat( + np.expand_dims(space.high, axis=self._axis), + length, + axis=self._axis), + dtype=dtype) + + return stacked_space + + def _stack_space_dict(self, space: gym.spaces.Dict, + dtype: np.dtype) -> gym.spaces.Dict: + """Returns stacked version of a dict observation space. + + This stacks a gym.spaces.Dict action space based on the length of the sensor + latency and the recursive structure of the gym.spaces.Dict itself. + + Args: + space: A gym.spaces.Dict to be stacked. + dtype: Datatype for the stacking. + + Returns: + stacked_space: A stacked version of the dictionary action space. + """ + return gym.spaces.Dict([ + (k, self._stack_space(v, dtype)) for k, v in space.spaces.items() + ]) + + def _encode_obs_dict_keys(self, obs_dict): + """Encodes sub obs keys of observation dict or observsation space dict.""" + return {encode_sub_obs_key(self, k): v for k, v in obs_dict.items()} + + +class BoxSpaceSensor(Sensor): + """A prototype class of sensors with Box shapes.""" + + def __init__(self, + name: Text, + shape: Tuple[int, ...], + lower_bound: _FloatOrArray = -np.pi, + upper_bound: _FloatOrArray = np.pi, + dtype=np.float64) -> None: + """Constructs a box type sensor. + + Will be deprecated (b/150818246) once we switch to gym spaces. + Args: + name: the name of the sensor + shape: the shape of the sensor values + lower_bound: the lower_bound of sensor value, in float or np.array. + upper_bound: the upper_bound of sensor value, in float or np.array. + dtype: data type of sensor value + """ + super(BoxSpaceSensor, self).__init__( + name=name, sensor_latency=0.0, interpolator_fn=newer_obs_blender) + self._shape = shape + self._dtype = dtype + + if isinstance(lower_bound, float): + self._lower_bound = np.full(shape, lower_bound, dtype=dtype) + else: + self._lower_bound = np.array(lower_bound) + + if isinstance(upper_bound, float): + self._upper_bound = np.full(shape, upper_bound, dtype=dtype) + else: + self._upper_bound = np.array(upper_bound) + + def set_robot(self, robot): + # Since all old robot class do not inherit from RobotBase, we can enforce + # the checking here. + if isinstance(robot, robot_base.RobotBase): + raise ValueError( + "Cannot use new robot interface RobotBase with old sensor calss.") + self._robot = robot + + def get_shape(self) -> Tuple[int, ...]: + return self._shape + + def get_dimension(self) -> int: + return len(self._shape) + + def get_dtype(self): + return self._dtype + + def get_observation_datatype(self) -> _DataTypeList: + """Returns box-shape data type.""" + return [(self._name, self._dtype, self._shape)] + + def get_lower_bound(self) -> _ARRAY: + """Returns the computed lower bound.""" + return self._lower_bound + + def get_upper_bound(self) -> _ARRAY: + """Returns the computed upper bound.""" + return self._upper_bound + + def get_observation(self) -> np.ndarray: + return np.asarray(self._get_observation(), dtype=self._dtype) + + def _get_original_observation(self) -> Tuple[float, Any]: + # Maintains compatibility with the new sensor classes.""" + raise NotImplementedError("Not implemented for this class.") + + def on_new_observation(self): + # Maintains compatibility with the new sensor classes.""" + pass + + +def encode_sub_obs_key(s: Sensor, sub_obs_name: Optional[Text]): + """Returns a sub observation key for use in observation dictionary.""" + if sub_obs_name == MAIN_OBS_KEY: + return s.get_name() + else: + return f"{s.get_name()}/{sub_obs_name}" diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/sensors/space_utils.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/sensors/space_utils.py new file mode 100644 index 000000000..270bee2f1 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/sensors/space_utils.py @@ -0,0 +1,137 @@ +# Lint as: python3 +"""Converts a list of sensors to gym space.""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +from typing import List +import gin +import gym +from gym import spaces +import numpy as np + +from pybullet_envs.minitaur.envs_v2.sensors import sensor + + +class UnsupportedConversionError(NotImplementedError): + """An exception when the function cannot convert sensors to the gym space.""" + + +class AmbiguousDataTypeError(TypeError): + """An exception when the function cannot determine the data type.""" + + +@gin.configurable +def convert_sensors_to_gym_space(sensors: List[sensor.Sensor]) -> gym.Space: + """Convert a list of sensors to the corresponding gym space. + + Args: + sensors: a list of the current sensors + + Returns: + space: the converted gym space + + Raises: + UnsupportedConversionError: raises when the function cannot convert the + given list of sensors. + """ + + if all([ + isinstance(s, sensor.BoxSpaceSensor) and s.get_dimension() == 1 + for s in sensors + ]): + return convert_1d_box_sensors_to_gym_space(sensors) + raise UnsupportedConversionError('sensors = ' + str(sensors)) + + +@gin.configurable +def convert_1d_box_sensors_to_gym_space( + sensors: List[sensor.Sensor]) -> gym.Space: + """Convert a list of 1D BoxSpaceSensors to the corresponding gym space. + + Args: + sensors: a list of the current sensors + + Returns: + space: the converted gym space + + Raises: + UnsupportedConversionError: raises when the function cannot convert the + given list of sensors. + AmbiguousDataTypeError: raises when the function cannot determine the + data types because they are not uniform. + """ + # Check if all sensors are 1D BoxSpaceSensors + if not all([ + isinstance(s, sensor.BoxSpaceSensor) and s.get_dimension() == 1 + for s in sensors + ]): + raise UnsupportedConversionError('sensors = ' + str(sensors)) + + # Check if all sensors have the same data type + sensor_dtypes = [s.get_dtype() for s in sensors] + if sensor_dtypes.count(sensor_dtypes[0]) != len(sensor_dtypes): + raise AmbiguousDataTypeError('sensor datatypes are inhomogeneous') + + lower_bound = np.concatenate([s.get_lower_bound() for s in sensors]) + upper_bound = np.concatenate([s.get_upper_bound() for s in sensors]) + observation_space = spaces.Box( + np.array(lower_bound), np.array(upper_bound), dtype=np.float32) + return observation_space + + +@gin.configurable +def convert_sensors_to_gym_space_dictionary( + sensors: List[sensor.Sensor]) -> gym.Space: + """Convert a list of sensors to the corresponding gym space dictionary. + + Args: + sensors: a list of the current sensors + + Returns: + space: the converted gym space dictionary + + Raises: + UnsupportedConversionError: raises when the function cannot convert the + given list of sensors. + """ + gym_space_dict = {} + for s in sensors: + if isinstance(s, sensor.BoxSpaceSensor): + gym_space_dict[s.get_name()] = spaces.Box( + np.array(s.get_lower_bound()), + np.array(s.get_upper_bound()), + dtype=np.float32) + elif isinstance(s, sensor.Sensor): + if isinstance(s.observation_space, spaces.Box): + gym_space_dict[s.get_name()] = s.observation_space + elif isinstance(s.observation_space, spaces.Dict): + gym_space_dict.update(s.observation_space.spaces) + else: + raise UnsupportedConversionError( + f'Unsupported space type {type(s.observation_space)}, ' + f'must be Box or Dict. sensor = {s}') + else: + raise UnsupportedConversionError('sensors = ' + str(sensors)) + return spaces.Dict(gym_space_dict) + + +def create_constant_action(action_space, action_value=0): + """Create an uniform value action based on the type of action space.""" + if isinstance(action_space, gym.spaces.Dict): + # gym.spaces.Dict has a shape of None, so construct action over subspaces. + return { + sub_name: create_constant_action(sub_space, action_value) + for sub_name, sub_space in action_space.spaces.items() + } + else: # Presumably gym.spaces.Box, but in case it is not ... + return np.full(action_space.shape, action_value) + + +def action_astype(action, dtype): + """Transform an action to a different datatype.""" + if isinstance(action, dict): + return {key: action_astype(value, dtype) for key, value in action.items()} + else: + return np.array(action, dtype=dtype) diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/sensors/toe_position_sensor.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/sensors/toe_position_sensor.py new file mode 100644 index 000000000..5e875045a --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/sensors/toe_position_sensor.py @@ -0,0 +1,100 @@ +# Lint as: python3 +"""Quadruped toe position sensor.""" + +from typing import Any, Callable, Sequence, Text, Tuple, Type, Union + +import gin +import gym +import numpy as np + +from pybullet_envs.minitaur.envs_v2.sensors import sensor +from pybullet_envs.minitaur.envs_v2.utilities import noise_generators + + +def _convert_to_np_array(inputs: Union[float, Tuple[float], np.ndarray], dim): + """Converts the inputs to a numpy array. + + Args: + inputs: The input scalar or array. + dim: The dimension of the converted numpy array. + + Returns: + The converted numpy array. + + Raises: + ValueError: If the inputs is an array whose dimension does not match the + provided dimension. + """ + outputs = None + if isinstance(inputs, (tuple, np.ndarray)): + outputs = np.array(inputs) + else: + outputs = np.full(dim, inputs) + + if len(outputs) != dim: + raise ValueError("The inputs array has a different dimension {}" + " than provided, which is {}.".format(len(outputs), dim)) + + return outputs + + +@gin.configurable +class ToePositionSensor(sensor.Sensor): + """A sensor that outputs the toe positions of attached robots or objects.""" + + def __init__( + self, + name: Text = "toe_position", + dtype: Type[Any] = np.float64, + lower_bound: Union[float, Sequence[float]] = -1.0, + upper_bound: Union[float, Sequence[float]] = 1.0, + noise_generator: Union[Callable[..., Any], + noise_generators.NoiseGenerator] = None, + sensor_latency: Union[float, Sequence[float]] = 0.0, + ): + """Constructor. + + Args: + name: Name of the sensor. + dtype: Data type of sensor value. + lower_bound: The optional lower bounds of the sensor reading. + upper_bound: The optional upper bounds of the sensor reading. + noise_generator: Used to add noise to the readings. + sensor_latency: Single or multiple latency in seconds. See sensor.Sensor + docstring for details. + """ + super().__init__( + name=name, + sensor_latency=sensor_latency, + interpolator_fn=sensor.linear_obs_blender) + self._dtype = dtype + self._lower_bound = lower_bound + self._upper_bound = upper_bound + self._noise_generator = noise_generator + + def set_robot(self, robot): + self._robot = robot + num_legs = len(robot.urdf_loader.get_end_effector_id_dict().values()) + lower_bound = _convert_to_np_array(self._lower_bound, num_legs * 3) + + upper_bound = _convert_to_np_array(self._upper_bound, num_legs * 3) + + self._observation_space = self._stack_space( + gym.spaces.Box(low=lower_bound, high=upper_bound, dtype=self._dtype)) + + def _get_original_observation(self) -> Tuple[float, np.ndarray]: + """Returns raw observation with timestamp.""" + toe_position = np.array( + self._robot.foot_positions(), dtype=self._dtype).flatten() + + return self._robot.timestamp, toe_position + + def get_observation(self) -> np.ndarray: + delayed_observation = super().get_observation() + if self._noise_generator: + if callable(self._noise_generator): + return self._noise_generator(delayed_observation) + else: + return self._noise_generator.add_noise(delayed_observation) + + return delayed_observation diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/tasks/__init__.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/tasks/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/tasks/simple_locomotion_task.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/tasks/simple_locomotion_task.py new file mode 100644 index 000000000..9046f9d8d --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/tasks/simple_locomotion_task.py @@ -0,0 +1,125 @@ +"""A simple locomotion taskand termination condition.""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import numpy as np + +import gin +from pybullet_envs.minitaur.envs_v2.tasks import task_interface +from pybullet_envs.minitaur.envs_v2.tasks import task_utils +from pybullet_envs.minitaur.envs_v2.tasks import terminal_conditions +from pybullet_envs.minitaur.envs_v2.utilities import env_utils_v2 as env_utils + + +@gin.configurable +class SimpleForwardTask(task_interface.Task): + """A basic "move forward" task.""" + + def __init__(self, + weight=1.0, + terminal_condition=terminal_conditions + .default_terminal_condition_for_minitaur, + divide_with_dt=False, + clip_velocity=None, + energy_penalty_coef=0.0, + min_com_height=None, + weight_action_accel=None): + """Initializes the task. + + Args: + weight: Float. The scaling factor for the reward. + terminal_condition: Callable object or function. Determines if the task is + done. + divide_with_dt: if True, we divide the velocity reward with dt. + clip_velocity: if not None, we will clip the velocity with this value. + energy_penalty_coef: Coefficient for the energy penalty that will be added + to the reward. 0 by default. + min_com_height: Minimum height for the center of mass of the robot that + will be used to terminate the task. This is used to obtain task specific + gaits and set by the config or gin files based on the task and robot. + weight_action_accel: if not None, penalize the action acceleration. + + Raises: + ValueError: The energey coefficient is smaller than zero. + """ + self._weight = weight + self._terminal_condition = terminal_condition + self._last_base_position = None + self._divide_with_dt = divide_with_dt + self._clip_velocity = clip_velocity + self._weight_action_accel = weight_action_accel + self._action_history_sensor = None + self._min_com_height = min_com_height + self._energy_penalty_coef = energy_penalty_coef + self._env = None + self._step_count = 0 + if energy_penalty_coef < 0: + raise ValueError("Energy Penalty Coefficient should be >= 0") + + def __call__(self, env): + return self.reward(env) + + def reset(self, env): + self._env = env + self._last_base_position = env_utils.get_robot_base_position( + self._env.robot) + + if self._weight_action_accel is not None: + sensor_name = "LastAction" + self._action_history_sensor = env.sensor_by_name(sensor_name) + + @property + def step_count(self): + return self._step_count + + def update(self, env): + """Updates the internal state of the task.""" + del env + self._last_base_position = env_utils.get_robot_base_position( + self._env.robot) + + def reward(self, env): + """Get the reward without side effects.""" + del env + + self._step_count += 1 + env = self._env + current_base_position = env_utils.get_robot_base_position(self._env.robot) + velocity = current_base_position[0] - self._last_base_position[0] + if self._divide_with_dt: + velocity /= env.env_time_step + if self._clip_velocity is not None: + limit = float(self._clip_velocity) + velocity = np.clip(velocity, -limit, limit) + + if self._weight_action_accel is None: + action_acceleration_penalty = 0.0 + else: + past_actions = self._action_history_sensor.get_observation().T + action = past_actions[0] + prev_action = past_actions[1] + prev_prev_action = past_actions[2] + acc = action - 2 * prev_action + prev_prev_action + action_acceleration_penalty = ( + float(self._weight_action_accel) * np.mean(np.abs(acc))) + + reward = velocity + reward -= action_acceleration_penalty + + # Energy + if self._energy_penalty_coef > 0: + energy_reward = -task_utils.calculate_estimated_energy_consumption( + self._env.robot.motor_torques, self._env.robot.motor_velocities, + self._env.sim_time_step, self._env.num_action_repeat) + reward += energy_reward * self._energy_penalty_coef + + return reward * self._weight + + def done(self, env): + del env + position = env_utils.get_robot_base_position(self._env.robot) + if self._min_com_height and position[2] < self._min_com_height: + return True + return self._terminal_condition(self._env) diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/tasks/task_interface.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/tasks/task_interface.py new file mode 100644 index 000000000..720d45010 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/tasks/task_interface.py @@ -0,0 +1,37 @@ +# Lint as: python3 +"""Interface that specifies tasks.""" +# TODO(tingnan): Def. proper task interface - see TODO(b/154635313) in comments. + +import abc +from typing import Sequence + +import gym + +from pybullet_envs.minitaur.envs_v2.sensors import sensor + + +class Task(metaclass=abc.ABCMeta): + """Base class for tasks.""" + + # TODO(b/154635313): Deprecate this method. Consolidate it into update(). + @abc.abstractmethod + def reward(self, env: gym.Env) -> float: + """Returns the reward for the current state of the environment.""" + + @abc.abstractmethod + def reset(self, env: gym.Env) -> None: + """Resets the task.""" + + @abc.abstractmethod + def update(self, env: gym.Env) -> None: + """Updates the internal state of the task.""" + + # TODO(b/154635313): Deprecate this method. Consolidate it into update(). + @abc.abstractmethod + def done(self, env: gym.Env) -> bool: + """Determines whether the task is done.""" + + @property + def sensors(self) -> Sequence[sensor.Sensor]: + """Returns sensors used by task.""" + return [] diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/tasks/task_utils.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/tasks/task_utils.py new file mode 100644 index 000000000..90ac2814a --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/tasks/task_utils.py @@ -0,0 +1,108 @@ +"""Common tools and functionalities used in different tasks.""" +import numpy as np + + +def calculate_target_speed_at_timestep(speed_stages): + """Interpolates the speed based on a speed profile and simulation steps. + + Args: + speed_stages: The list of timesteps (in increasing order) and speed (float + or a list of floats for x and y components) at that specific timestep. + Example formats can be found on task_utils_test.py and at the header of + the speed_reward_task.py. + + Returns: + Target speed for the specific step (meters per simulation step). + Raises: + ValueError if the input is not in the expected format. + """ + if len(speed_stages) != 2 or len(speed_stages[0]) != len(speed_stages[1]): + raise ValueError('Speed stages for the task is not in correct format!') + steps = np.array(speed_stages[0]) + speeds = np.array(speed_stages[1]) + num_steps = steps[-1] + if len(speeds.shape) == 1: + return np.interp(range(num_steps), steps, speeds) + speed_at_timestep = np.interp(range(num_steps), steps, speeds[:, 0]).reshape( + (num_steps, 1)) + speed_at_timestep = speed_at_timestep.reshape((num_steps, 1)) + if speeds.shape[1] == 2: + speed_y = np.interp(range(num_steps), steps, speeds[:, 1]).reshape( + (num_steps, 1)) + speed_at_timestep = np.concatenate((speed_at_timestep, speed_y), axis=1) + else: + speed_at_timestep = np.concatenate( + (speed_at_timestep, np.zeros((num_steps, 1))), axis=1) + return speed_at_timestep + + +def calculate_distance(vector_1, vector_2): + """Calculates the distance between 2 vectors. + + This is used to calculate distance between 2 points in 3D space as well as + distances between two orientation vectors. + + Args: + vector_1: First vector that will be used for comparison with the other. + vector_2: Second vector used for comparison. + + Returns: + Distance between the two vectors represented by a float. + """ + return np.linalg.norm(np.array(vector_1) - np.array(vector_2)) + + +def turn_angle(new_vector, reference_vector): + """Calculates the change in orientation of the two vectors. + + This is used to calculate the relative angle perception for the + robot. + + Args: + new_vector: The front vector of the robot at current timestep. + reference_vector: The front vector of the robot at previous timestep. + + Returns: + Angle representing the change in orientation of the robot projected to + x-y plane. + """ + # Project the vectors to x-y plane + v1 = np.resize(new_vector, 3) + v2 = np.resize(reference_vector, 3) + v1[2] = 0 + v2[2] = 0 + # Calculate the right hand rotation between two vectors using z vector + # (0,0,-1) as reference cross product vector. + # Compatible with the yaw rotation of pyBullet. + return np.arctan2(np.dot(np.cross(v2, v1), (0, 0, -1)), np.dot(v1, v2)) + + +def front_vector(pybullet_client, orientation): + """Calculates the front vector of the robot on x-y plane. + + Args: + pybullet_client: Pybullet client instantiation. + orientation: Orientation of the robot in quaternion form. + + Returns: + 3D vector where z component is set to 0. + """ + rot_matrix = pybullet_client.getMatrixFromQuaternion(orientation) + return [rot_matrix[0], -rot_matrix[1], 0] + + +def calculate_estimated_energy_consumption(motor_torques, motor_velocities, + sim_time_step, num_action_repeat): + """Calculates energy consumption based on the args listed. + + Args: + motor_torques: Torques of all the motors + motor_velocities: Velocities of all the motors. + sim_time_step: Simulation time step length (seconds). + num_action_repeat: How many steps the simulation repeats the same action. + + Returns: + Total energy consumption of all the motors (watts). + """ + return np.abs(np.dot(motor_torques, + motor_velocities)) * sim_time_step * num_action_repeat diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/tasks/terminal_conditions.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/tasks/terminal_conditions.py new file mode 100644 index 000000000..9fe512057 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/tasks/terminal_conditions.py @@ -0,0 +1,301 @@ +"""Contains the terminal conditions for locomotion tasks.""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import gin +import numpy as np + +from pybullet_envs.minitaur.envs_v2.utilities import minitaur_pose_utils +from pybullet_envs.minitaur.envs_v2.utilities import env_utils_v2 as env_utils +from pybullet_envs.minitaur.envs_v2.utilities import termination_reason as tr + + +@gin.configurable +def default_terminal_condition_for_minitaur(env): + """A default terminal condition for Minitaur. + + Minitaur is considered as fallen if the base position is too low or the base + tilts/rolls too much. + + Args: + env: An instance of MinitaurGymEnv + + Returns: + A boolean indicating if Minitaur is fallen. + """ + orientation = env_utils.get_robot_base_orientation(env.robot) + rot_mat = env.pybullet_client.getMatrixFromQuaternion(orientation) + local_up = rot_mat[6:] + pos = env_utils.get_robot_base_position(env.robot) + return (np.dot(np.asarray([0, 0, 1]), np.asarray(local_up)) < 0.85 or + pos[2] < 0.13) + + +@gin.configurable +def terminal_condition_for_minitaur_extended_env(env): + """Returns a bool indicating that the extended env is terminated. + + This predicate checks whether 1) the legs are bent inward too much or + 2) the body is tilted too much. + + Args: + env: An instance of MinitaurGymEnv + """ + motor_angles = env.robot.motor_angles + leg_pose = minitaur_pose_utils.motor_angles_to_leg_pose(motor_angles) + + swing_threshold = np.radians(35.0) + if (leg_pose[0] > swing_threshold or leg_pose[2] > swing_threshold or # Front + leg_pose[1] < -swing_threshold or leg_pose[3] < -swing_threshold): # Rear + return True + roll, _, _ = env.robot.base_roll_pitch_yaw + if abs(roll) > np.radians(30.0): + return True + + return False + + +@gin.configurable +def default_terminal_condition_for_laikago(env): + """A default terminal condition for Laikago. + + Minitaur is considered as fallen if the base position is too low or the base + tilts/rolls too much. + + Args: + env: An instance of MinitaurGymEnv + + Returns: + A boolean indicating if Minitaur is fallen. + """ + roll, pitch, _ = env.robot.base_roll_pitch_yaw + pos = env_utils.get_robot_base_position(env.robot) + return abs(roll) > 0.2 or abs(pitch) > 0.2 or pos[2] < 0.35 + + +@gin.configurable +def default_terminal_condition_for_laikago_v2( + env, + max_roll: float = 1.2, + max_pitch: float = 1.2, + min_height: float = 0.15, + enforce_foot_contacts: bool = False): + """A default terminal condition for Laikago_v2. + + Laikago is considered as fallen if the base position is too low or the base + tilts/rolls too much. + + Args: + env: An instance of MinitaurGymEnv + max_roll: Max roll before the episode terminates. + max_pitch: Max pitch before the episode terminates. + min_height: Min height before the episode terminates. + enforce_foot_contacts: Ensure that contacts are established with the feet. + + Returns: + A boolean indicating if Minitaur is fallen. + """ + # Make sure that contacts are only made with the robot's feet. + unwanted_collision = False + if enforce_foot_contacts: + # Get list of foot and knee link ids. Sometimes, the simulation will + # register a contact as having been made with the knee link, even though it + # was actually the foot that made the contact. Checking both the foot and + # knee links for contact accounts for that. + foot_link_ids = list( + env.robot.urdf_loader.get_end_effector_id_dict().values()) + knee_link_ids = [foot_link_id - 1 for foot_link_id in foot_link_ids] + contacts = env.pybullet_client.getContactPoints(bodyA=env.robot.robot_id) + for contact in contacts: + # Two different bodies made contact (i.e. not a self-collision). + if contact[1] != contact[2]: + foot_contact = (contact[3] in foot_link_ids) or ( + contact[3] in knee_link_ids) + unwanted_collision = unwanted_collision or not foot_contact + + roll, pitch, _ = env.robot.base_roll_pitch_yaw + pos = env.robot.base_position + return (abs(roll) > max_roll or abs(pitch) > max_pitch or + pos[2] < min_height or unwanted_collision) + + +@gin.configurable +def default_terminal_condition_for_agility(env, + max_roll: float = 1.8, + max_pitch: float = 1.8, + min_height: float = 0.0, + enforce_foot_contacts: bool = False): + """A default terminal condition for more agile tasks (i.e. jumping). + + The robot is considered as fallen if the base position is too low, the base + tilts/rolls too much or parts of the body other than the feet touch the + ground. + + Args: + env: An instance of the gym env. + max_roll: Max roll before the episode terminates. + max_pitch: Max pitch before the episode terminates. + min_height: Min height before the episode terminates. + enforce_foot_contacts: Ensure that contacts are established with the feet. + + Returns: + A boolean indicating if the episode should be terminated. + """ + + # Make sure that contacts are only made with the robot's feet. + unwanted_collision = False + if enforce_foot_contacts: + knee_link_ids = [2, 5, 8, 11] + contacts = env.pybullet_client.getContactPoints(bodyA=env.robot.robot_id) + for contact in contacts: + if contact[1] != contact[2]: + foot_contact = contact[3] in knee_link_ids + unwanted_collision = unwanted_collision or not foot_contact + + roll, pitch, _ = env.robot.base_roll_pitch_yaw + pos = env.robot.base_position + return (abs(roll) > max_roll or abs(pitch) > max_pitch or + pos[2] < min_height or unwanted_collision) + + +@gin.configurable +def get_terminal_reason(collisions, task): + termination_reason = None + # Checking collision termination + if collisions: + termination_reason = tr.TerminationReason.AGENT_COLLISION + if task.is_task_success(): + termination_reason = tr.TerminationReason.GOAL_REACHED + return termination_reason + + +@gin.configurable +def maxstep_terminal_condition(env, max_step=500): + """A terminal condition based on the time step. + + Args: + env: An instance of MinitaurGymEnv + max_step: The maximum time step allowed for the environment + + Returns: + A boolean indicating if the env.step exceeds the given limit + """ + return env.env_step_counter > max_step + + +@gin.configurable +class MaxTimeTerminalCondition(object): + """Terminal condition based on time, independent of step length.""" + + def __init__(self, max_time_s: float): + """Initializes the MaxTimeTerminalCondition. + + Args: + max_time_s: Time limit in seconds. In sim, this is the simulation time, + not wall time. + """ + if max_time_s <= 0: + raise ValueError("Max time for MaxTimeTerminalCondition cannot be zero " + "or less. Input value: %s" % max_time_s) + self._max_time_s = max_time_s + + def __call__(self, env): + if self._max_time_s is None: + return False, None + is_done = env.get_time_since_reset() >= self._max_time_s + term_reason = tr.TerminationReason.RUN_TIME_LIMIT if is_done else None + return is_done, term_reason + + +@gin.configurable +class MovementDetectorTerminalCondition(object): + """Terminal condition for not moving past a distance in specified time.""" + + def __init__(self, + max_time_s: float = None, + min_travel_distance_m: float = 1.0): + """Initializes the MovementDetectorTerminalCondition. + + Args: + max_time_s: Time limit in seconds. In sim, this is the simulation time, + not wall time. + min_travel_distance_m: Minimum distance in meters to travel in time limit. + """ + if max_time_s is not None and max_time_s <= 0: + raise ValueError("Max time for MovementDetectorTerminalCondition cannot " + "be zero or less. Input value: %s" % max_time_s) + if min_travel_distance_m is not None and min_travel_distance_m < 0: + raise ValueError( + "Minimum travel distance for MovementDetectorTerminalCondition " + "cannot be less than zero. Input value: %s" % min_travel_distance_m) + self._max_time_s = max_time_s + self._min_travel_distance_m = min_travel_distance_m + self._not_advancing_limit = None + self._reference_position = None + + def _update_limit_time(self, env): + self._not_advancing_limit = env.get_time_since_reset() + self._max_time_s + + def _current_position(self, env): + return np.asarray(env.robot.base_position[:2]) + + def _exceed_time_limit(self, env): + return self._not_advancing_limit < env.get_time_since_reset() + + def __call__(self, env): + is_done = False + term_reason = None + + if self._max_time_s is None: + return is_done, term_reason + + if self._not_advancing_limit is None or self._reference_position is None: + self._update_limit_time(env) + self._reference_position = self._current_position(env) + + distance_shifted = np.linalg.norm( + self._current_position(env) - self._reference_position) + if distance_shifted >= self._min_travel_distance_m: + self._update_limit_time(env) + self._reference_position = self._current_position(env) + + if self._exceed_time_limit(env): + is_done = True + term_reason = tr.TerminationReason.NOT_ADVANCING_LIMIT + + return is_done, term_reason + + + +@gin.configurable +def bad_front_leg_terminal_condition(env, max_angle=0.8): + """A terminal condition for checking whether front legs are bent backward. + + Args: + env: An instance of MinitaurGymEnv + max_angle: The maximum angle allowed for front legs + + Returns: + A boolean indicating if front legs are bent backward or not + """ + motor_angles = env.robot.motor_angles + leg_pose = minitaur_pose_utils.motor_angles_to_leg_pose(motor_angles) + swing0 = leg_pose[0] + swing1 = leg_pose[2] + return swing0 > max_angle or swing1 > max_angle + + +@gin.configurable +def logical_any_terminal_condition(env, conditions): + """A logical "Any" operator for terminal conditions. + + Args: + env: An instance of MinitaurGymEnv + conditions: a list of terminal conditions + + Returns: + A boolean indicating if any of terminal conditions is satisfied + """ + return any([cond(env) for cond in conditions]) diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/utilities/env_utils.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/utilities/env_utils.py new file mode 100644 index 000000000..f82283bf3 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/utilities/env_utils.py @@ -0,0 +1,175 @@ +"""Utility functions to manipulate environment.""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import collections +import gin +from gym import spaces +import numpy as np + +import tensorflow.compat.v1 as tf + + + + +def flatten_observations(observation_dict, observation_excluded=()): + """Flattens the observation dictionary to an array. + + If observation_excluded is passed in, it will still return a dictionary, + which includes all the (key, observation_dict[key]) in observation_excluded, + and ('other': the flattened array). + + Args: + observation_dict: A dictionary of all the observations. + observation_excluded: A list/tuple of all the keys of the observations to be + ignored during flattening. + + Returns: + An array or a dictionary of observations based on whether + observation_excluded is empty. + """ + if not isinstance(observation_excluded, (list, tuple)): + observation_excluded = [observation_excluded] + observations = [] + for key, value in observation_dict.items(): + if key not in observation_excluded: + observations.append(np.asarray(value).flatten()) + flat_observations = np.float32(np.concatenate(observations)) + if not observation_excluded: + return flat_observations + else: + observation_dict_after_flatten = {"other": flat_observations} + for key in observation_excluded: + if key in observation_dict: + observation_dict_after_flatten[key] = observation_dict[key] + return collections.OrderedDict( + sorted(list(observation_dict_after_flatten.items()))) + + +def flatten_observation_dim(observation_dim, observation_excluded=()): + """Flattens the observation dimensions to an array. + + If observation_excluded is passed in, it will still return a dictionary, + which includes all the (key, observation_dict[key]) in observation_excluded, + and ('other': the flattened array). + + Args: + observation_dim: A dictionary of all the observation dimensions. + observation_excluded: A list/tuple of all the keys of the observations to be + ignored during flattening. + + Returns: + An array or a dictionary of observation dimensions based on whether + observation_excluded is empty. + """ + if not isinstance(observation_excluded, (list, tuple)): + observation_excluded = [observation_excluded] + observation_dims = 0 + for key, value in observation_dim.items(): + if key not in observation_excluded: + observation_dims += value + if not observation_excluded: + return observation_dims + else: + dim_dict_after_flatten = {"other": observation_dims} + for key in observation_excluded: + if key in observation_dim: + dim_dict_after_flatten[key] = observation_dim[key] + return collections.OrderedDict(sorted(list(dim_dict_after_flatten.items()))) + + +def flatten_observation_spaces(observation_spaces, observation_excluded=()): + """Flattens the dictionary observation spaces to gym.spaces.Box. + + If observation_excluded is passed in, it will still return a dictionary, + which includes all the (key, observation_spaces[key]) in observation_excluded, + and ('other': the flattened Box space). + + Args: + observation_spaces: A dictionary of all the observation spaces. + observation_excluded: A list/tuple of all the keys of the observations to be + ignored during flattening. + + Returns: + A box space or a dictionary of observation spaces based on whether + observation_excluded is empty. + """ + if not isinstance(observation_excluded, (list, tuple)): + observation_excluded = [observation_excluded] + lower_bound = [] + upper_bound = [] + for key, value in observation_spaces.spaces.items(): + if key not in observation_excluded: + lower_bound.append(np.asarray(value.low).flatten()) + upper_bound.append(np.asarray(value.high).flatten()) + lower_bound = np.concatenate(lower_bound) + upper_bound = np.concatenate(upper_bound) + observation_space = spaces.Box( + np.array(lower_bound), np.array(upper_bound), dtype=np.float32) + if not observation_excluded: + return observation_space + else: + observation_spaces_after_flatten = {"other": observation_space} + for key in observation_excluded: + if key in observation_spaces.spaces: + observation_spaces_after_flatten[key] = observation_spaces[key] + return spaces.Dict(observation_spaces_after_flatten) + + + +@gin.configurable +def get_action_spec(action_spec): + """Get action spec for one agent from the environment specs.""" + return list(action_spec.values())[0] + + + +@gin.configurable +def get_get_actions_fn(agent_name_to_index): + """Get function which returns other agents' actions.""" + + def get_actions(action): + """Returns a list of actions. + + Args: + action: A dictionary of action tensors with keys matching agent names + + Returns: + critic_actions: A list of action tensors for (N-1) other agents. + Shape: (B x N, N-1, D) + """ + critic_actions = [] + for agent_name in sorted(agent_name_to_index.keys()): + other_agent_actions = [] + for other_agent_name in sorted(agent_name_to_index.keys()): + if other_agent_name != agent_name: + other_agent_actions.append(action[other_agent_name]) + critic_actions.append(other_agent_actions) + print([tf.shape(critic_action) for critic_action in critic_actions]) + # Shape goes from (N, N-1, B, D) to (B x N, N-1, D) + critic_actions = tf.transpose(tf.concat(critic_actions, axis=1), (1, 0, 2)) + return critic_actions + + return get_actions + + + + +def get_robot_base_position(robot): + """Gets the base position of robot.""" + # TODO(b/151975607): Clean this after robot interface migration. + if hasattr(robot, "GetBasePosition"): + return robot.GetBasePosition() + else: + return robot.base_position + + +def get_robot_base_orientation(robot): + """Gets the base orientation of robot.""" + # TODO(b/151975607): Clean this after robot interface migration. + if hasattr(robot, "GetBaseOrientation"): + return robot.GetBaseOrientation() + else: + return robot.base_orientation_quaternion diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/utilities/env_utils_v2.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/utilities/env_utils_v2.py new file mode 100644 index 000000000..02d2eeaef --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/utilities/env_utils_v2.py @@ -0,0 +1,22 @@ + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + + +def get_robot_base_position(robot): + """Gets the base position of robot.""" + # TODO(b/151975607): Clean this after robot interface migration. + if hasattr(robot, "GetBasePosition"): + return robot.GetBasePosition() + else: + return robot.base_position + + +def get_robot_base_orientation(robot): + """Gets the base orientation of robot.""" + # TODO(b/151975607): Clean this after robot interface migration. + if hasattr(robot, "GetBaseOrientation"): + return robot.GetBaseOrientation() + else: + return robot.base_orientation_quaternion \ No newline at end of file diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/utilities/laikago_pose_utils.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/utilities/laikago_pose_utils.py new file mode 100644 index 000000000..f328c3418 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/utilities/laikago_pose_utils.py @@ -0,0 +1,50 @@ +# coding=utf-8 +# Copyright 2020 The Google Research Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Utility functions to calculate Laikago's pose and motor angles.""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import attr + +LAIKAGO_DEFAULT_ABDUCTION_ANGLE = 0 +LAIKAGO_DEFAULT_HIP_ANGLE = 0.67 +LAIKAGO_DEFAULT_KNEE_ANGLE = -1.25 + + +@attr.s +class LaikagoPose(object): + """Default pose of the Laikago. + + Leg order: + 0 -> Front Right. + 1 -> Front Left. + 2 -> Rear Right. + 3 -> Rear Left. + """ + abduction_angle_0 = attr.ib(type=float, default=0) + hip_angle_0 = attr.ib(type=float, default=0) + knee_angle_0 = attr.ib(type=float, default=0) + abduction_angle_1 = attr.ib(type=float, default=0) + hip_angle_1 = attr.ib(type=float, default=0) + knee_angle_1 = attr.ib(type=float, default=0) + abduction_angle_2 = attr.ib(type=float, default=0) + hip_angle_2 = attr.ib(type=float, default=0) + knee_angle_2 = attr.ib(type=float, default=0) + abduction_angle_3 = attr.ib(type=float, default=0) + hip_angle_3 = attr.ib(type=float, default=0) + knee_angle_3 = attr.ib(type=float, default=0) diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/utilities/mini_cheetah_pose_utils.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/utilities/mini_cheetah_pose_utils.py new file mode 100644 index 000000000..37d12fe95 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/utilities/mini_cheetah_pose_utils.py @@ -0,0 +1,35 @@ +"""Utility functions to calculate Mini Cheetah's pose and motor angles.""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import attr + +MINI_CHEETAH_DEFAULT_ABDUCTION_ANGLE = 0 +MINI_CHEETAH_DEFAULT_HIP_ANGLE = -1.2 +MINI_CHEETAH_DEFAULT_KNEE_ANGLE = 2.1 + + +@attr.s +class MiniCheetahPose(object): + """Default pose of the Laikago. + + Leg order: + 0 -> Front Right. + 1 -> Front Left. + 2 -> Rear Right. + 3 -> Rear Left. + """ + abduction_angle_0 = attr.ib(type=float, default=0) + hip_angle_0 = attr.ib(type=float, default=0) + knee_angle_0 = attr.ib(type=float, default=0) + abduction_angle_1 = attr.ib(type=float, default=0) + hip_angle_1 = attr.ib(type=float, default=0) + knee_angle_1 = attr.ib(type=float, default=0) + abduction_angle_2 = attr.ib(type=float, default=0) + hip_angle_2 = attr.ib(type=float, default=0) + knee_angle_2 = attr.ib(type=float, default=0) + abduction_angle_3 = attr.ib(type=float, default=0) + hip_angle_3 = attr.ib(type=float, default=0) + knee_angle_3 = attr.ib(type=float, default=0) diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/utilities/minitaur_pose_utils.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/utilities/minitaur_pose_utils.py new file mode 100644 index 000000000..34ad9da01 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/utilities/minitaur_pose_utils.py @@ -0,0 +1,187 @@ +# coding=utf-8 +# Copyright 2020 The Google Research Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Utility functions to calculate Minitaur's pose and motor angles.""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import math +import attr +import numpy as np + +NUM_MOTORS = 8 +NUM_LEGS = 4 +MOTOR_SIGNS = (1, 1, -1, -1) +# Constants for the function swing_extend_to_motor_angles +EPS = 0.1 +# Range of motion for the legs (does not allow pointing towards the body). +LEG_SWING_LIMIT_LOW = -math.pi / 2 + EPS +LEG_SWING_LIMIT_HIGH = 3 * math.pi / 2 - EPS +# Range of gap between motors for feasibility. +MOTORS_GAP_LIMIT_HIGH = 2 * math.pi - EPS +MOTORS_GAP_LIMIT_LOW = EPS + + +@attr.s +class MinitaurPose(object): + """Default pose of the Minitaur.""" + swing_angle_0 = attr.ib(type=float, default=0) + swing_angle_1 = attr.ib(type=float, default=0) + swing_angle_2 = attr.ib(type=float, default=0) + swing_angle_3 = attr.ib(type=float, default=0) + extension_angle_0 = attr.ib(type=float, default=0) + extension_angle_1 = attr.ib(type=float, default=0) + extension_angle_2 = attr.ib(type=float, default=0) + extension_angle_3 = attr.ib(type=float, default=0) + + +def motor_angles_to_leg_pose(motor_angles): + """Convert motor angles to the leg pose. + + A single leg pose is a tuple (swing, extension). The definition can be find + in: + Sim-to-Real: Learning Agile Locomotion For Quadruped Robot + + Args: + motor_angles: A numpy array. Contains all eight motor angles for Minitaur. + + Returns: + A numpy array. Contains the leg pose for all four legs: [swing_0, swing_1, + swing_2, swing_3, extension_0, extension_1, extension_2, extension_3] + + """ + motor_angles = np.array(motor_angles) + + swings = 0.5 * np.multiply( + np.array(MOTOR_SIGNS), (motor_angles[1::2] - motor_angles[::2])) + extensions = 0.5 * (motor_angles[::2] + motor_angles[1::2]) + + return np.concatenate((swings, extensions), axis=None) + + +def leg_pose_to_motor_angles(leg_pose): + """Converts the leg pose to the motor angles. + + Args: + leg_pose: A numpy array. Contains the leg pose for all four legs: [swing_0, + swing_1, swing_2, swing_3, extension_0, extension_1, extension_2, + extension_3] + + Returns: + A numpy array. All eight motor angles. + """ + leg_pose = np.array(leg_pose) + + # swings multiplied with the sign array. + signed_swings = np.multiply(np.array(MOTOR_SIGNS), leg_pose[0:NUM_LEGS]) + extensions = leg_pose[NUM_LEGS:] + + motor_angles = np.zeros(NUM_MOTORS) + motor_angles[1::2] = signed_swings + extensions + motor_angles[::2] = extensions - signed_swings + return motor_angles + + +# This method also does the same conversion, but 0 swing and 0 extension maps +# to a neutral standing still motor positions with motors at + or - pi. It also +# contains a safety layer so that the legs don't swing or extend too much to hit +# the body of the robot. +def leg_pose_to_motor_angles_with_half_pi_offset_and_safety(leg_pose): + """Converts the swing extension poses to the motor angles with safety limits. + + Args: + leg_pose: A numpy array. Contains the leg pose for all four legs: [swing_0, + extension_0, swing_1, extension_1, swing_2, extension_2, swing_3, + extension_3] + + Returns: + A numpy array. All eight motor angles. + """ + + motor_angles = [] + for idx in range(4): + swing = leg_pose[idx * 2] + extend = leg_pose[idx * 2 + 1] + motor_angles.extend(swing_extend_to_motor_angles(idx, swing, extend)) + return motor_angles + + +def swing_extend_to_motor_angles(leg_id, swing, extension, noise_stdev=0): + """Swing - extension based leg model for minitaur. + + Swing extension leg model calculates motor positions using 2 separate motions: + swing and extension. Swing rotates the whole leg by rotating both motors + equally towards same direction. Extension increases or decreases the length + of the leg by turning both motors equally in opposite direction. + + This method also does the same conversion as leg_pose_to_motor_angles, but 0 + swing and 0 extension maps to a neutral standing still motor positions with + motors at + or - pi. + Args: + leg_id: The id of the leg that the conversion is made for (0, 1, 2, 3). + swing: Swing degree for the leg (in radians). 0 means perpendicular to the + body). + extension: Extension level (length) of the leg, limited to [-1, 1]. + noise_stdev: Standard deviation of the introduced noise at the motor + position level. Noise is turned off by default. + + Returns: + motor0: Position for the first motor for that leg. + motor1: Position for the second motor for that leg. + Raises: + ValueError: In case calculated positions are outside the allowed boundaries. + """ + # Check if the leg_id is in valid range + if not 0 <= leg_id <= 3: + raise ValueError('leg {} does not exist for a quadruped.'.format(leg_id)) + + # Front legs can not swing too much towards the body. + if leg_id % 2 == 0: + swing = np.clip(swing, LEG_SWING_LIMIT_LOW, LEG_SWING_LIMIT_HIGH) + # Back legs can not swing too much towards the body (opposite direction). + else: + swing = np.clip(swing, -LEG_SWING_LIMIT_HIGH, -LEG_SWING_LIMIT_LOW) + + # Check if the motors are too close or too far away to make it impossible + # for the physical robot. + gap = math.pi - 2 * extension + if gap < MOTORS_GAP_LIMIT_LOW or gap > MOTORS_GAP_LIMIT_HIGH: + top_extension = (math.pi - MOTORS_GAP_LIMIT_LOW) / 2.0 + least_extension = (math.pi - MOTORS_GAP_LIMIT_HIGH) / 2.0 + extension = np.clip(extension, least_extension, top_extension) + + # Initialization to neutral standing position where both motors point to + # opposite directions + motor0 = math.pi / 2 + motor1 = math.pi / 2 + # Rotational move + if leg_id in (0, 1): + motor0 += swing + motor1 -= swing + elif leg_id in (2, 3): + motor0 -= swing + motor1 += swing + # Extension + motor0 += extension + motor1 += extension + + # Add noise if requested. + if noise_stdev > 0: + motor0 += np.random.normal(0, noise_stdev) + motor1 += np.random.normal(0, noise_stdev) + + return motor0, motor1 diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/utilities/noise_generators.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/utilities/noise_generators.py new file mode 100644 index 000000000..012a93421 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/utilities/noise_generators.py @@ -0,0 +1,255 @@ +"""Noise generators to simulate noise in sensor / actuator classes.""" + +import abc +import gin +import numpy as np + + +class NoiseGenerator(metaclass=abc.ABCMeta): + """Base class for noise generators.""" + + @abc.abstractmethod + def _get_noise(self, shape, dtype=None): + """Gets noise as a numpy array in the specified shape and dtype. + + Tensorflow requires the shape and dtype of noise to be correctly specified, + so the generator needs to know this to produce data of the correct type. + + Args: + shape: Shape of the returned array. + dtype: Datatype of returned array (None for default). + """ + + @abc.abstractmethod + def add_noise(self, data): + """Adds noise generated by _get_noise to the given data with clipping. + + Args: + data: Numpy array of data to be modified with noise. + """ + + +@gin.configurable +class BiasNoise(NoiseGenerator): + """Adds bias to the data, possibly with clipping.""" + + def __init__(self, + bias=0.0, + clipping_lower_bound=-np.inf, + clipping_upper_bound=np.inf): + """Create a bias noise generator. + + Args: + bias: Absolute magnitude of bias applied to input. + clipping_lower_bound: lower bound of add_noise (use -np.inf to ignore). + clipping_upper_bound: Upper bound of add_noise (use np.inf to ignore). + """ + self._bias = bias + self._clipping_lower_bound = clipping_lower_bound + self._clipping_upper_bound = clipping_upper_bound + + def _get_noise(self, shape, dtype=None): + """Create bias noise of the given direction and datatype.""" + return np.full(shape, self._bias, dtype) + + def add_noise(self, data): + """Add bias noise to the given data, clipping to the given range.""" + noise = self._get_noise(data.shape, data.dtype) + return np.clip(data + noise, self._clipping_lower_bound, + self._clipping_upper_bound) + + +@gin.configurable +class NormalNoise(BiasNoise): + """Adds Gaussian noise to the data, possibly with clipping.""" + + def __init__(self, scale, **kwargs): + """Create a normal noise generator. + + Args: + scale: Absolute magnitude of standard deviation of Gaussian noise. Note + numpy will throw an error if scale < 0. + **kwargs: Arguments passed to BiasNoise (e.g. bias and clipping). + """ + super(NormalNoise, self).__init__(**kwargs) + self._scale = scale + + def _get_noise(self, shape, dtype=None): + """Create normal noise of the given direction and datatype.""" + return np.random.normal(self._bias, self._scale, shape).astype(dtype) + + +@gin.configurable +class UniformNoise(NoiseGenerator): + """Generates uniform noise in the given range.""" + + def __init__(self, + low, + high, + clipping_lower_bound=-np.inf, + clipping_upper_bound=np.inf): + """Creates a uniform noise generator. + + Args: + low: the lower bound of the noise. + high: the higher bound of the noise. + clipping_lower_bound: lower bound of add_noise (use -np.inf to ignore). + clipping_upper_bound: Upper bound of add_noise (use np.inf to ignore). + """ + super().__init__() + self._low = low + self._high = high + self._clipping_lower_bound = clipping_lower_bound + self._clipping_upper_bound = clipping_upper_bound + + def _get_noise(self, shape, dtype=None): + """Generates a noise using the given shape and data type.""" + return np.random.uniform(self._low, self._high, shape).astype(dtype) + + def add_noise(self, data): + """Adds noise to the given data, clipping to the given bound.""" + noise = self._get_noise(data.shape, data.dtype) + return np.clip(data + noise, self._clipping_lower_bound, + self._clipping_upper_bound) + + +@gin.configurable +class RangeNoise(NormalNoise): + """Add normally distributed noise in m, applied to hit fractions in (0, 1). + + This enables us to specify range noise in terms of meters of Gaussian noise + between a maximum and minimum range, but the add_noise is applied as above + to values expected to be in a hit fraction range of (0, 1) as needed for the + SimLidarSensor API. Separate methods return noise or noisify data in meters. + """ + + def __init__(self, range_noise_m, max_range_m, min_range_m=0.0, **kwargs): + """Create a normal noise generator suitable for use in a range scanner. + + Args: + range_noise_m: Absolute magnitude of standard deviation of Gaussian noise, + applied to range observation readngs, measured in meters. + max_range_m: Maximum range in meters of the data, used for clipping. + min_range_m: Minimum range in meters of the data, used for clipping. + **kwargs: Other arguments passed to NormalNoise (principally bias). + """ + # Validate range values. + if range_noise_m < 0.0: + raise ValueError("Range noise should not be negative: %r" % range_noise_m) + if min_range_m >= max_range_m: + raise ValueError("min_range_m %s must be less than max_range_m %s" % + (min_range_m, max_range_m)) + + self._range_noise_m = range_noise_m + self._max_range_m = max_range_m + self._min_range_m = min_range_m + self._total_range = max_range_m - min_range_m + super(RangeNoise, self).__init__( + scale=range_noise_m / self._total_range, + clipping_lower_bound=0.0, + clipping_upper_bound=1.0, + **kwargs) + + def _get_noise_m(self, shape, dtype=None): + """Create normal noise of the given direction and datatype, in meters.""" + return self.range_to_m(self._get_noise(shape=shape, dtype=dtype)) + + def add_noise_m(self, data): + """Add normal noise to the given data, scaled in meters.""" + return self.range_to_m(self.add_noise(self.m_to_range(data))) + + def m_to_range(self, data): + """Scale data in meters to a range of (0, 1).""" + return (data - self._min_range_m) / self._total_range + + def range_to_m(self, data): + """Scale data in range of (0, 1) to meters.""" + return data * self._total_range + self._min_range_m + + +@gin.configurable +class TwistNoise(object): + """Add normally distributed noise to twist actions. + + Note this is a simplified noise model in action space designed for parity + with DriveWorld's r/s/e/drive_models/twist_drive.py;rcl=307540784;l=161. + This assumes that the TwistNoise will be applied to a twist action which is + then clipped, as currently done in wheeled_robot_base.py: + + robotics/reinforcement_learning/minitaur/robots/wheeled_robot_base.py;l=533 + # We assume that the velocity clipping would be absorbed in this API. + if self._action_filter: + action = self._action_filter.filter(action) + + where action is a linear_velocity, angular_velocity pair, which is clipped + to limits subsequently by the _compute_kinematic_base_velocity method. + """ + + def __init__(self, + linear_velocity_noise_stdev_mps: float, + linear_velocity_noise_max_stdevs: float, + angular_velocity_noise_stdev_rps: float, + angular_velocity_noise_max_stdevs: float, + noise_scaling_cutoff_mps: float = 0.0): + """Create a normal noise generator suitable for use in a range scanner. + + Supports the API specified in the DriveWorld TwistDrive class: + robotics/simulation/environments/drive_models/twist_drive.py;l=54 + + Args: + linear_velocity_noise_stdev_mps: One standard deviation of normal noise + for linear velocity in meters per second. + linear_velocity_noise_max_stdevs: Max stdevs for linear velocity noise. + This ensures that the noise values do not spike too crazy. + angular_velocity_noise_stdev_rps: One standard deviation of normal noise + for angular velocity in radians per second. + angular_velocity_noise_max_stdevs: Max stdevs for angular velocity noise. + noise_scaling_cutoff_mps: If linear velocity is less than this cutoff, + linear and angular noise are scaled so that zero velocity produces zero + noise. This enables a robot at rest to remain at rest, while still + applying reasonable noise values to finite velocities. Angular velocity + does not contribute to this computation to keep the model simple. + """ + # Validate range values. + if linear_velocity_noise_stdev_mps < 0.0: + raise ValueError("Linear action noise should not be negative: %r" % + linear_velocity_noise_stdev_mps) + if linear_velocity_noise_max_stdevs < 0.0: + raise ValueError("Maximum linear noise should not be negative: %r" % + linear_velocity_noise_max_stdevs) + if angular_velocity_noise_stdev_rps < 0.0: + raise ValueError("Angular action noise should not be negative: %r" % + angular_velocity_noise_stdev_rps) + if angular_velocity_noise_max_stdevs < 0.0: + raise ValueError("Maximum action noise should not be negative: %r" % + angular_velocity_noise_max_stdevs) + if noise_scaling_cutoff_mps < 0.0: + raise ValueError("Noise scaling cutoff should not be negative: %r" % + noise_scaling_cutoff_mps) + + # Save the values to create our noise later. + self._noise_shape = [ + linear_velocity_noise_stdev_mps, angular_velocity_noise_stdev_rps + ] + # The noise clipping is performed using one standard deviation as the unit. + self._noise_lower_bound = np.array([ + -linear_velocity_noise_max_stdevs * linear_velocity_noise_stdev_mps, + -angular_velocity_noise_max_stdevs * angular_velocity_noise_stdev_rps + ]) + self._noise_upper_bound = -self._noise_lower_bound + self._noise_scaling_cutoff_mps = noise_scaling_cutoff_mps + + def filter(self, action): + """Filter the linear and angular velocity by adding noise.""" + linear_velocity, angular_velocity = action + linear_noise, angular_noise = np.clip( + np.random.normal(0, self._noise_shape, 2), self._noise_lower_bound, + self._noise_upper_bound) + if self._noise_scaling_cutoff_mps: + clipped_velocity = min(abs(linear_velocity), + self._noise_scaling_cutoff_mps) + scaling_factor = clipped_velocity / self._noise_scaling_cutoff_mps + linear_noise *= scaling_factor + angular_noise *= scaling_factor + + return (linear_velocity + linear_noise, angular_velocity + angular_noise) diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/utilities/rendering_utils.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/utilities/rendering_utils.py new file mode 100644 index 000000000..99568108b --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/utilities/rendering_utils.py @@ -0,0 +1,272 @@ +"""Rendering utilities.""" + +import enum +import math +import os +from typing import Any, Callable, Dict, Iterable, Optional, Text +from absl import logging +import gin +import numpy as np + + +# These matrices will change by any call to render() and should be saved +# immediately to the local object. +last_used_view_matrix = None +last_used_proj_matrix = None +last_rendered_image_size = None + +# Bounds of plane loaded with GEOM_PLANE. +_INFINITY = 1.0e30 +# In case of infinite plane, use this scene bounding box. +_DEFAULT_BOUNDING_BOX = ((-15, -15, -10), (15, 15, 0)) + + +def render_image(pybullet_client, width, height, view_matrix, proj_matrix): + """Renders image as numpy array given view and projection matrices.""" + global last_used_view_matrix, last_used_proj_matrix, last_rendered_image_size + last_used_view_matrix = view_matrix + last_used_proj_matrix = proj_matrix + + (_, _, px, _, _) = pybullet_client.getCameraImage( + width=width, + height=height, + renderer=pybullet_client.ER_BULLET_HARDWARE_OPENGL, + viewMatrix=view_matrix, + projectionMatrix=proj_matrix) + rgb_array = np.array(px) + image = rgb_array[:, :, :3] + last_rendered_image_size = (image.shape[1], image.shape[0]) + return image + + +def project_world_to_image(points, + view_matrix=None, + proj_matrix=None, + image_size=None, + include_z_coord=False): + """Projects 3D world-space points to 2D or 3D image-space points. + + If no projection matrices or image_size are given, the last ones are used. + This means that you can render an image with `render_image` function (or other + functions that use this one) and then project points to that image immediately + after that call. Otherwise, you can save `last_used_view_matrix` and + `last_used_proj_matrix` variables and pass them in later. + + Args: + points: Sequence of 3D points. + view_matrix: Optional view matrix (column-major). + proj_matrix: Optional projection matrix (column-major). + image_size: Optional image size for resulting coords. + include_z_coord: Whether to include Z coordinate in the resulting + projection. Z coordinate goes from 0 (far plane) to 1 (near plane). + + Returns: + A Numpy array of shape (points_count, 2) or (points_count, 3) when + `include_z_coord` is True, with dtype of np.float32. + """ + # Note that these matrices are column-major. + view_matrix = np.array( + view_matrix or last_used_view_matrix, dtype=np.float32).reshape((4, 4)) + proj_matrix = np.array( + proj_matrix or last_used_proj_matrix, dtype=np.float32).reshape((4, 4)) + mvp_matrix = np.matmul(view_matrix, proj_matrix) + + # Add w component equal to 1 (for perspective projection). + points = np.asarray(points, dtype=np.float32) + points_4d = np.concatenate( + [points, np.ones((points.shape[0], 1), dtype=np.float32)], axis=-1) + points_proj = np.matmul(points_4d, mvp_matrix) + + if include_z_coord: + # Perspective divide (only keep X, Y, and Z, discard W). + points_proj_3d = points_proj[:, 0:3] / np.expand_dims(points_proj[:, 3], -1) + # Shift origin to bottom left and rescale range to [0,1]. This assumes + # OpenGL projection space. + points_proj_3d = (points_proj_3d + 1) * 0.5 + # Invert y-axis to have a coordinate with (0,0) on the top left. + points_proj_3d[:, 1] = 1 - points_proj_3d[:, 1] + # Scale projection to image size, ignore Z. + image_size = np.asarray( + image_size or last_rendered_image_size, dtype=np.float32) + image_size = np.append(image_size, 1) + return points_proj_3d * image_size + else: + # Perspective divide (only keep X and Y, discard Z and W). + points_proj_2d = points_proj[:, 0:2] / np.expand_dims(points_proj[:, 3], -1) + # Shift origin to bottom left and rescale range to [0,1]. This assumes + # OpenGL projection space. + points_proj_2d = (points_proj_2d + 1) * 0.5 + # Invert y-axis to have a coordinate with (0,0) on the top left. + points_proj_2d[:, 1] = 1 - points_proj_2d[:, 1] + # Scale projection to image size. + image_size = np.asarray( + image_size or last_rendered_image_size, dtype=np.float32) + return points_proj_2d * image_size + + +def get_scene_bounding_box(pybullet_client, scene=None): + """Computes scene axis-aligned bounding box. + + Args: + pybullet_client: PyBullet client. + scene: Scene instance for filtering the bounding box of camera. + + Returns: + A tuple of min and max 3D coordinates. Returns (None, None) if the scene + is empty. + """ + aabb_min = None + aabb_max = None + + for i in range(pybullet_client.getNumBodies()): + body_id = pybullet_client.getBodyUniqueId(i) + + # If a scene has been provided, only count bodes which are in + # either the ground or obstacle id lists. + if scene is not None: + if body_id not in scene.ground_ids and body_id not in scene.obstacle_ids: + continue + + aabb = pybullet_client.getAABB(body_id) + if np.any(np.abs(aabb) >= _INFINITY): + aabb = _DEFAULT_BOUNDING_BOX + if aabb_min is None: + aabb_min = aabb[0] + aabb_max = aabb[1] + else: + aabb_min = np.minimum(aabb_min, aabb[0]) + aabb_max = np.maximum(aabb_max, aabb[1]) + + return aabb_min, aabb_max + + +@gin.configurable +def render_topdown( + pybullet_client, + result_size=(1280, 720), + scale_px_per_meter=None, + camera_height=50, + ground_height=None, + low_render_height_from_ground=None, + high_render_height_from_ground=None, + scene=None, + use_y_as_up_axis=False, + rendered_origin_and_size=None, +): + """Renders top-down image of the environment. + + Args: + pybullet_client: PyBullet client. + result_size: Resulting image size. + scale_px_per_meter: Resulting image scale in pixels per meter. This + overrides `result_size`. + camera_height: Height of the camera above the environment. This is not very + significant, the lower the height, the larger perspective distortion. + ground_height: Ground height for following two parameters. + low_render_height_from_ground: If set, rendering is cut below this distance + from ground. + high_render_height_from_ground: If set, rendering is cut above this + distance from ground. + scene: Scene instance for filtering the bounding box of camera. + use_y_as_up_axis: Whether to consider Y axis as world's "up" instead of Z. + rendered_origin_and_size: If set, sets rendered origin (bounding box min) + and size (bounding box size) instead of computing that from the scene. + Expected format: two tuples of [x, y z] coords containing origin and size + of rendered bounding box. + + Returns: + RGB image as 3D numpy array. + """ + # Get bounds of the current environment. + if rendered_origin_and_size is not None: + aabb_min, aabb_size = rendered_origin_and_size + if len(aabb_min) != 3: + raise ValueError( + "Invalid render origin, expected [x, y, z]: {}".format(aabb_min)) + if len(aabb_size) != 3: + raise ValueError( + "Invalid render size, expected [x, y, z]: {}".format(aabb_size)) + aabb_max = tuple(m + s for m, s in zip(aabb_min, aabb_size)) + else: + aabb_min, aabb_max = get_scene_bounding_box(pybullet_client, scene) + + if use_y_as_up_axis: + width = aabb_max[0] - aabb_min[0] + height = aabb_max[2] - aabb_min[2] + z_size = aabb_max[1] - aabb_min[1] + z_max = aabb_max[1] + else: + width = aabb_max[0] - aabb_min[0] + height = aabb_max[1] - aabb_min[1] + z_size = aabb_max[2] - aabb_min[2] + z_max = aabb_max[2] + + if scale_px_per_meter is not None: + result_size = (int(width * scale_px_per_meter), + int(height * scale_px_per_meter)) + else: + # Adjust scene size to fit inside of the given result size. + if len(result_size) != 2 or result_size[0] <= 0 or result_size[1] <= 0: + raise ValueError("Invalid result size: {}".format(result_size)) + img_width, img_height = result_size + if img_width / width < img_height / height: + # Width is limiting. Adjust height to match. + adjusted_height = img_height * width / img_width + assert adjusted_height >= height, (adjusted_height, height) + height = adjusted_height + else: + # Height is limiting. Adjust width to match. + adjusted_width = img_width * height / img_height + assert adjusted_width >= width, (adjusted_width, width) + width = adjusted_width + + # Compute view and projection matrices. + if use_y_as_up_axis: + center_x = (aabb_min[0] + aabb_max[0]) / 2.0 + center_z = (aabb_min[2] + aabb_max[2]) / 2.0 + view_matrix = pybullet_client.computeViewMatrix( + cameraEyePosition=(center_x, aabb_max[1] + camera_height, center_z), + cameraTargetPosition=(center_x, aabb_max[1], center_z), + cameraUpVector=(0, 0, 1)) + else: + center_x = (aabb_min[0] + aabb_max[0]) / 2.0 + center_y = (aabb_min[1] + aabb_max[1]) / 2.0 + view_matrix = pybullet_client.computeViewMatrix( + cameraEyePosition=(center_x, center_y, aabb_max[2] + camera_height), + cameraTargetPosition=(center_x, center_y, aabb_max[2]), + cameraUpVector=(0, 1, 0)) + + near_plane = camera_height + far_plane = camera_height + z_size + if ground_height is not None: + if low_render_height_from_ground is not None: + far_plane = ( + camera_height + z_max - ground_height - low_render_height_from_ground) + if high_render_height_from_ground is not None: + near_plane = ( + camera_height + z_max - ground_height - + high_render_height_from_ground) + else: + if (low_render_height_from_ground is not None or + high_render_height_from_ground is not None): + raise ValueError( + "The `low_render_height_from_ground` or " + "`high_render_height_from_ground` were specified but no reference " + "ground height was given.") + vertical_fov = 2 * math.atan2(height / 2, camera_height) + proj_matrix = pybullet_client.computeProjectionMatrixFOV( + fov=math.degrees(vertical_fov), + aspect=width / height, + nearVal=near_plane, + farVal=far_plane) + + # Render and return image. + return render_image( + pybullet_client, + result_size[0], + result_size[1], + view_matrix, + proj_matrix, + ) + + diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/utilities/robot_pose_utils.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/utilities/robot_pose_utils.py new file mode 100644 index 000000000..6e0e92243 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/utilities/robot_pose_utils.py @@ -0,0 +1,189 @@ +"""This file implements the robot specific pose tools.""" +import math + +import attr +import numpy as np + +from pybullet_envs.minitaur.envs_v2.utilities import laikago_pose_utils +from pybullet_envs.minitaur.envs_v2.utilities import mini_cheetah_pose_utils +from pybullet_envs.minitaur.envs_v2.utilities import minitaur_pose_utils +from pybullet_envs.minitaur.robots import laikago +from pybullet_envs.minitaur.robots import laikago_v2 +from pybullet_envs.minitaur.robots import mini_cheetah +from pybullet_envs.minitaur.robots import minitaur_v2 + +_ABDUCTION_ACTION_INDEXES = [0, 3, 6, 9] + +# The default values used to give a neutral pose for minitaur. +_MINITAUR_DEFAULT_EXTENSION_POS = math.pi / 2 +_MINITAUR_DEFAULT_SWING_POS = 0 + +_LAIKAGO_NEUTRAL_POSE_HIP_ANGLE = math.pi / 4 +_LAIKAGO_NEUTRAL_POSE_KNEE_ANGLE = -math.pi / 2 +_LAIKAGO_EXTENSION_CONVERSION_MULTIPLIER = 1.0 +_LAIKAGO_SWING_CONVERSION_MULTIPLIER = -1.0 + +_MINI_CHEETAH_NEUTRAL_POSE_HIP_ANGLE = -math.pi / 4 +_MINI_CHEETAH_NEUTRAL_POSE_KNEE_ANGLE = math.pi / 2 +_MINI_CHEETAH_EXTENSION_CONVERSION_MULTIPLIER = -1.0 +_MINI_CHEETAH_SWING_CONVERSION_MULTIPLIER = 1.0 + + +def get_neutral_motor_angles(robot_class): + """Return a neutral (standing) pose for a given robot type. + + Args: + robot_class: This returns the class (not the instance) for the robot. + Currently it supports minitaur, laikago and mini-cheetah. + + Returns: + Pose object for the given robot. It's either MinitaurPose, LaikagoPose or + MiniCheetahPose. + + Raises: + ValueError: If the given robot_class is different than the supported robots. + """ + if str(robot_class) in [ + str(minitaur_v2.Minitaur) + ]: + init_pose = minitaur_pose_utils.leg_pose_to_motor_angles( + np.array( + attr.astuple( + minitaur_pose_utils.MinitaurPose( + swing_angle_0=_MINITAUR_DEFAULT_SWING_POS, + swing_angle_1=_MINITAUR_DEFAULT_SWING_POS, + swing_angle_2=_MINITAUR_DEFAULT_SWING_POS, + swing_angle_3=_MINITAUR_DEFAULT_SWING_POS, + extension_angle_0=_MINITAUR_DEFAULT_EXTENSION_POS, + extension_angle_1=_MINITAUR_DEFAULT_EXTENSION_POS, + extension_angle_2=_MINITAUR_DEFAULT_EXTENSION_POS, + extension_angle_3=_MINITAUR_DEFAULT_EXTENSION_POS)))) + elif str(robot_class) in [ + str(laikago.Laikago), + str(laikago_v2.Laikago), + ]: + init_pose = np.array( + attr.astuple( + laikago_pose_utils.LaikagoPose( + abduction_angle_0=0, + hip_angle_0=_LAIKAGO_NEUTRAL_POSE_HIP_ANGLE, + knee_angle_0=_LAIKAGO_NEUTRAL_POSE_KNEE_ANGLE, + abduction_angle_1=0, + hip_angle_1=_LAIKAGO_NEUTRAL_POSE_HIP_ANGLE, + knee_angle_1=_LAIKAGO_NEUTRAL_POSE_KNEE_ANGLE, + abduction_angle_2=0, + hip_angle_2=_LAIKAGO_NEUTRAL_POSE_HIP_ANGLE, + knee_angle_2=_LAIKAGO_NEUTRAL_POSE_KNEE_ANGLE, + abduction_angle_3=0, + hip_angle_3=_LAIKAGO_NEUTRAL_POSE_HIP_ANGLE, + knee_angle_3=_LAIKAGO_NEUTRAL_POSE_KNEE_ANGLE))) + elif str(robot_class) == str(mini_cheetah.MiniCheetah): + init_pose = np.array( + attr.astuple( + mini_cheetah_pose_utils.MiniCheetahPose( + abduction_angle_0=0, + hip_angle_0=_MINI_CHEETAH_NEUTRAL_POSE_HIP_ANGLE, + knee_angle_0=_MINI_CHEETAH_NEUTRAL_POSE_KNEE_ANGLE, + abduction_angle_1=0, + hip_angle_1=_MINI_CHEETAH_NEUTRAL_POSE_HIP_ANGLE, + knee_angle_1=_MINI_CHEETAH_NEUTRAL_POSE_KNEE_ANGLE, + abduction_angle_2=0, + hip_angle_2=_MINI_CHEETAH_NEUTRAL_POSE_HIP_ANGLE, + knee_angle_2=_MINI_CHEETAH_NEUTRAL_POSE_KNEE_ANGLE, + abduction_angle_3=0, + hip_angle_3=_MINI_CHEETAH_NEUTRAL_POSE_HIP_ANGLE, + knee_angle_3=_MINI_CHEETAH_NEUTRAL_POSE_KNEE_ANGLE))) + else: + init_pose = robot_class.get_neutral_motor_angles() + return init_pose + + +def convert_leg_pose_to_motor_angles(robot_class, leg_poses): + """Convert swing-extend coordinate space to motor angles for a robot type. + + Args: + robot_class: This returns the class (not the instance) for the robot. + Currently it supports minitaur, laikago and mini-cheetah. + leg_poses: A list of leg poses in [swing,extend] or [abduction, swing, + extend] space for all 4 legs. The order is [abd_0, swing_0, extend_0, + abd_1, swing_1, extend_1, ...] or [swing_0, extend_0, swing_1, extend_1, + ...]. Zero swing and zero extend gives a neutral standing pose for all the + robots. For minitaur, the conversion is fully accurate, for laikago and + mini-cheetah the conversion is approximate where swing is reflected to hip + and extend is reflected to both knee and the hip. + + Returns: + List of motor positions for the selected robot. The list include 8 or 12 + motor angles depending on the given robot type as an argument. Currently + laikago and mini-cheetah has motors for abduction which does not exist for + minitaur robot. + + Raises: + ValueError: Conversion fails due to wrong inputs. + """ + default_leg_order = ["front_left", "back_left", "front_right", "back_right"] + leg_order = default_leg_order + if len(leg_poses) not in [8, 12]: + raise ValueError("Dimension of the leg pose provided is not 8 or 12.") + neutral_motor_angles = get_neutral_motor_angles(robot_class) + motor_angles = leg_poses + # If it is a robot with 12 motors but the provided leg pose does not contain + # abduction, extend the pose to include abduction. + if len(neutral_motor_angles) == 12 and len(leg_poses) == 8: + for i in _ABDUCTION_ACTION_INDEXES: + motor_angles.insert(i, 0) + # If the robot does not have abduction (minitaur) but the input contains them, + # ignore the abduction angles for the conversion. + elif len(neutral_motor_angles) == 8 and len(leg_poses) == 12: + del leg_poses[::3] + # Minitaur specific conversion calculations using minitaur-specific safety + # limits. + if str(robot_class) in [ + + str(minitaur_v2.Minitaur) + ]: + motor_angles = minitaur_pose_utils.leg_pose_to_motor_angles_with_half_pi_offset_and_safety( + leg_poses) + # Laikago and mini-cheetah specific conversion calculations. + elif str(robot_class) in [ + str(mini_cheetah.MiniCheetah), + str(laikago.Laikago), + str(laikago_v2.Laikago), + + ]: + swing_scale = 1.0 + extension_scale = 1.0 + # Laikago specific conversion multipliers. + if str(robot_class) in [ + str(laikago.Laikago), + str(laikago_v2.Laikago), + + ]: + swing_scale = _LAIKAGO_SWING_CONVERSION_MULTIPLIER + extension_scale = _LAIKAGO_EXTENSION_CONVERSION_MULTIPLIER + leg_order = ["front_right", "front_left", "back_right", "back_left"] + # Mini-cheetah specific multipliers. + elif str(robot_class) in [str(mini_cheetah.MiniCheetah)]: + swing_scale = _MINI_CHEETAH_SWING_CONVERSION_MULTIPLIER + extension_scale = _MINI_CHEETAH_EXTENSION_CONVERSION_MULTIPLIER + # In this approximate conversion for mini-cheetah and laikago we set hip + # angle swing + half of the extend and knee angle to extend as rotation. + # We also scale swing and extend based on some hand-tuned constants. + multipliers = np.array([1.0, swing_scale, extension_scale] * 4) + swing_extend_scaled = leg_poses * multipliers + # Swing is (swing - half of the extension) due to the geometry of the leg. + extra_swing = swing_extend_scaled * ([0, 0, -0.5] * 4) + swing_extend_scaled += np.roll(extra_swing, -1) + motor_angles = list(swing_extend_scaled) + motor_angles = neutral_motor_angles + motor_angles + # Change the order of the legs if it is different for the specific robot. + if leg_order != default_leg_order: + leg_order = [default_leg_order.index(leg) for leg in leg_order] + ordered_motor_angles = [] + for i in leg_order: + ordered_motor_angles.extend(motor_angles[3 * i:3 * i + 3]) + motor_angles = ordered_motor_angles + else: + motor_angles = robot_class.convert_leg_pose_to_motor_angles(leg_poses) + + return motor_angles diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/utilities/termination_reason.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/utilities/termination_reason.py new file mode 100644 index 000000000..5a943d9e4 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/utilities/termination_reason.py @@ -0,0 +1,40 @@ +"""Enum for classifying the termination reason of an episode.""" + +import enum +import gin + + +@gin.constants_from_enum +class TerminationReason(enum.IntEnum): + """Enum that identifies termination reasons of an episode. + + For any new termination reason added here, please update the corresponding + termination reward files to make sure it is used properly. + """ + UNKNOWN = 0 + STEP_LIMIT = 1 + WALL_COLLISION = 2 + BAD_LOCATION = 3 + AGENT_COLLISION = 4 + GOAL_REACHED = 5 + INVALID_STEP_REVERT_AND_CONTINUE = 6 + INVALID_EPISODE = 7 + RUN_TIME_LIMIT = 8 + NOT_ADVANCING_LIMIT = 9 + NOT_LOCALIZED = 10 + + +COLORMAP = { + TerminationReason.UNKNOWN: (64, 64, 64), # Dark gray. + TerminationReason.STEP_LIMIT: (128, 64, 192), # Purple. + TerminationReason.WALL_COLLISION: (255, 64, 128), # Bright red. + TerminationReason.BAD_LOCATION: (255, 0, 192), # Magenta. + TerminationReason.AGENT_COLLISION: (255, 128, 0), # Orange. + TerminationReason.GOAL_REACHED: (96, 255, 96), # Bright green. + TerminationReason.INVALID_STEP_REVERT_AND_CONTINUE: (255, 255, + 255), # White. + TerminationReason.INVALID_EPISODE: (0, 0, 0), # Black. + TerminationReason.RUN_TIME_LIMIT: (128, 64, 192), # Purple. + TerminationReason.NOT_ADVANCING_LIMIT: (128, 64, 192), # Purple. + TerminationReason.NOT_LOCALIZED: (255, 0, 192), # Magenta. +} \ No newline at end of file diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/robots/__init__.py b/examples/pybullet/gym/pybullet_envs/minitaur/robots/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/robots/autonomous_object.py b/examples/pybullet/gym/pybullet_envs/minitaur/robots/autonomous_object.py new file mode 100644 index 000000000..44c9d65ec --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/robots/autonomous_object.py @@ -0,0 +1,286 @@ +# Lint as: python3 +"""A module that defines autonomous object class and related functions.""" +from typing import Any, Callable, Dict, Optional, Sequence, Text, Union + +from absl import logging +import gin +import numpy as np + +from pybullet_utils import bullet_client +from pybullet_envs.minitaur.envs_v2 import base_client +from pybullet_envs.minitaur.envs_v2.sensors import sensor +from pybullet_envs.minitaur.robots import object_controller +from pybullet_envs.minitaur.robots import robot_base + +# The action value to pass into AutonomousObject pre_control_step() and +# apply_action(). +AUTONOMOUS_ACTION = None + +# Maximum force used in constraint based actuation. +_MAX_FORCE = 1000 + + +# TODO(b/155124699): find a better way actuate object than using constraint or +# modifying URDF. +@gin.configurable +class AutonomousObject(robot_base.RobotBase): + """Autonomous object that moves/acts in simulation guided by a controller.""" + + def __init__(self, + urdf_file: Text, + sensors: Sequence[sensor.Sensor] = (), + controller: object_controller.ControllerBase = None, + actuate_by_reset: bool = False): + """Constructor. + + Args: + urdf_file: The path to urdf file of the object. + sensors: A list of sensor objects to attach to autonomous object. + controller: A controller object that governs autonomous object's motion. + If not specified, StationaryController is used. + actuate_by_reset: Use pybullet resetBasePositionAndOrientation to actuate + the object. Default is False, which means actuate by constraint. In the + actuate by constrained mode, be extra cautious when the position or + orientation control is based on position or orientation sensor reading + of the same object. This loop-back condition is known to be problematic + and causes slower than expected motion. + """ + self._urdf_file = urdf_file + self._controller = controller or object_controller.StationaryController() + self._actuate_by_reset = actuate_by_reset + self._actuate_function = ( + self._actuate_base_pose + if not actuate_by_reset else self._reset_base_pose) + + self._sensors = list(sensors) + self._object_id = -1 + self._constraint_id = -1 + + self._pybullet_client = None # will be initialized in set_sim_client() + self._clock = None # will be initialized in set_clock() + self._init_internal_states() + + def _init_internal_states(self) -> None: + self._observations_time_since_reset = 0 + self._observations = {} + self._position = np.zeros(3) + self._orientation = np.array([0, 0, 0, 1]) + + def set_sim_client(self, pybullet_client: bullet_client.BulletClient) -> None: + """Sets new simulation client and reload assets.""" + self._pybullet_client = pybullet_client + self._init_internal_states() + self.load() + + def set_clock(self, clock: Callable[[], float]) -> None: + """Sets monotonic clock when adding into simulation environment.""" + self._clock = clock + + @property + def sim_object_id(self): + return self._object_id + + def update(self, time_since_reset_sec: float, + observations: Dict[Text, Any]) -> None: + """Updates simulation time and observations. + + This function should be called before apply_action in each simulation step. + + Args: + time_since_reset_sec: Time from start of simulation reset in seconds. + observations: A dict of observations. + """ + if time_since_reset_sec < self._observations_time_since_reset: + raise ValueError( + "Time cannot go backwards. Current t = %f, new t = %f." % + (self._observations_time_since_reset, time_since_reset_sec)) + self._observations_time_since_reset = time_since_reset_sec + self._observations = observations + + def _load_urdf(self): + """Loads object URDF file.""" + try: + print("loading: ", self._urdf_file) + self._object_id = self._pybullet_client.loadURDF(self._urdf_file) + except: + print("Error: cannot load ", self._urdf_file) + import sys + sys.exit(0) + + def load(self) -> None: + """Reconstructs the robot and resets its states.""" + self._load_urdf() + if not self._actuate_by_reset: + self._constraint_id = self._pybullet_client.createConstraint( + parentBodyUniqueId=self._object_id, + parentLinkIndex=-1, + childBodyUniqueId=-1, + childLinkIndex=-1, + jointType=self._pybullet_client.JOINT_FIXED, + jointAxis=(0, 0, 0), + parentFramePosition=(0, 0, 0), + childFramePosition=(0, 0, 0), + childFrameOrientation=(0, 0, 0, 1)) + + for s in self._sensors: + s.set_robot(self) + + # Resets the pose and updates the initial observations. + self.reset() + + def reset( + self, + base_position: Optional[Sequence[float]] = None, + base_orientation_quaternion: Optional[Sequence[float]] = None, + controller: Optional[object_controller.ControllerBase] = None) -> None: + """Resets the states (e.g. + + pose and sensor readings) of the robot. + + This is called at the start of each episode by the environment. + + Args: + base_position: Robot base position after reset. Must be None. + base_orientation_quaternion: Robot base orientation after reset. Must be + None. + controller: A new controller to replace original controller. + """ + if base_position is not None or base_orientation_quaternion is not None: + raise ValueError("Reset position and orientation of AutonomousObject is " + "specified in controller.") + + if controller is not None: + self._controller = controller + + self._init_internal_states() + self._position, self._orientation, _ = self._controller.get_action( + object_controller.INIT_TIME, self._observations) + + self._reset_base_pose(self._position, self._orientation) + self.receive_observation() + + def terminate(self) -> None: + """Shuts down the robot, no-op in simulation.""" + + def pre_control_step(self, action: Any) -> Any: + """Processes the input action before the action repeat loop. + + Args: + action: expect it to be `AUTONOMOUS_ACTION` at present. + + Returns: + the action as is. + """ + # Environment should not pass action other than AUTONOMOUS_ACTION. + if action is not AUTONOMOUS_ACTION: + raise ValueError("AutonomousObject only accept AUTONOMOUS_ACTION as " + "action value input.") + return action + + def apply_action(self, action: Any) -> None: + """Applies the action to the robot.""" + # Environment should not pass action other than AUTONOMOUS_ACTION. + if action is not AUTONOMOUS_ACTION: + raise ValueError("AutonomousObject only accept AUTONOMOUS_ACTION as " + "action value input.") + position, orientation, _ = self._controller.get_action( + self._observations_time_since_reset, self._observations) + + self._actuate_function(position, orientation) + + def receive_observation(self) -> None: + """Updates the robot sensor readings.""" + position, orientation = ( + self._pybullet_client.getBasePositionAndOrientation(self._object_id)) + self._position = np.array(position) + self._orientation = np.array(orientation) + + def post_control_step(self) -> None: + """Updates internal variables. Not yet used in AutonomousObject.""" + pass + + def _reset_base_pose(self, + position: Union[Sequence[float], np.ndarray] = None, + orientation_quat: Union[Sequence[float], + np.ndarray] = None): + """Resets the base to the desired position and orientation. + + Args: + position: The desired base position. If omitted, current location is used. + orientation_quat: The desired base orientation in quaternion. If omitted, + current orientation is used. + """ + if position is None: + position = self._position + + if orientation_quat is None: + orientation_quat = self._orientation + + self._pybullet_client.resetBaseVelocity(self._object_id, (0, 0, 0), + (0, 0, 0)) + self._pybullet_client.resetBasePositionAndOrientation( + self._object_id, position, orientation_quat) + + def _actuate_base_pose(self, position: Union[Sequence[float], np.ndarray], + orientation_quat: Union[Sequence[float], np.ndarray]): + """Actuates the base to the desired position and orientation. + + Difference of this function from _reset_base_pose() is that this function + considers dynamics along the path and collisions along the motion path. + + Args: + position: The desired base position. + orientation_quat: The desired base orientation in quaternion. + """ + self._pybullet_client.changeConstraint( + self._constraint_id, + position, + jointChildFrameOrientation=orientation_quat, + maxForce=_MAX_FORCE) + + def _reset_joint_angles(self, joint_angles=None): + """Resets the joint angles. Not yet used in AutonomousObject.""" + del joint_angles + + @property + def action_names(self) -> Sequence[Text]: + """Returns a sequence of action names. Always () for AutonomousObject.""" + return () + + @property + def sensors(self) -> Sequence[sensor.Sensor]: + """Returns the sensors on this robot.""" + return self._sensors + + @property + def base_orientation_quaternion(self) -> np.ndarray: + """Returns the base pose as a quaternion in format (x, y, z, w).""" + return self._orientation.copy() + + @property + def base_roll_pitch_yaw(self) -> np.ndarray: + """Returns the base roll, pitch, and yaw angles in radians.""" + return np.array( + self._pybullet_client.getEulerFromQuaternion(self._orientation)) + + @property + def base_position(self) -> np.ndarray: + """Returns the base cartesian coordinates in meters.""" + return self._position.copy() + + @property + def timestamp(self): + """Simulation monotonic time.""" + if self._clock is None: + raise RuntimeError("Must call set_clock() before accessing timestamp.") + return self._clock() + + # This is need for CameraSensor.set_robot() to work. + @property + def pybullet_client(self): + return self._pybullet_client + + # This is need for CameraSensor.set_robot() to work. + @property + def robot_id(self) -> int: + return self._object_id diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/robots/crowd_controller.py b/examples/pybullet/gym/pybullet_envs/minitaur/robots/crowd_controller.py new file mode 100644 index 000000000..409c029cf --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/robots/crowd_controller.py @@ -0,0 +1,706 @@ +# Lint as: python3 +"""Crowd objects/human controllers module.""" + +import abc +import collections +from typing import Any, Callable, Dict, Iterable, List, Optional, Union, Sequence, Text + +from absl import logging +import dataclasses +import gin +import numpy as np +#import rvo2 + +from pybullet_envs.minitaur.envs_v2.sensors import base_position_sensor +from pybullet_envs.minitaur.envs_v2.sensors import sensor as generic_sensor +from pybullet_envs.minitaur.robots import autonomous_object +from pybullet_envs.minitaur.robots import object_controller + + +POSITION_SENSOR_POSTFIX = "_pos" + + +@dataclasses.dataclass +class MovingObjectRecord: + position_key: Text + agent_id: int + radius: float + last_position: Optional[np.ndarray] = None + + +@gin.configurable +def sample_start_target_position(scene, + start=None, + start_circles=None, + target_circles=None, + num_sampling_retries=1, + min_wall_distance=0.0, + min_goal_euclidean_distance=0.0, + max_goal_euclidean_distance=np.Inf, + min_path_clearance=None): + """Sample valid start and target position reachable from start. + + Args: + scene: a SceneBase instance implementing get_random_valid_position function. + start: a 2-tuple (x, y) of start position. If specified, no start is + sampled. + start_circles: a list of circle specification. Each circle is specified as + a tuple ((x, y), r) of a center (x, y) and radius r. If specified, start + position is sampled from within one of the start_circles. + target_circles: same as start_circle. If specified, target positions is + sampled from within one of the start_circles. + num_sampling_retries: a positive int, number of attempts to sample a + start, target pair. + min_wall_distance: a float, the minimum distance to a wall. + min_goal_euclidean_distance: a positive float, the minimum distance between + start and target. + max_goal_euclidean_distance: a positive float, the maximum distance between + start and target. + min_path_clearance: float, clearance of shortest path to walls. + + Returns: + A 4 tuple (start, target, shortest_path, is_valid). start and target are + start and target positions, shortest_path is a list of 2-tuples specifying + the shortest path from start to target, is_valid is bool specifying whether + the start, target pair is valid. If min_path_clearance is not specified, + then shortest_path is None. + """ + if not hasattr(scene, "get_random_valid_position"): + raise ValueError( + "Incompatible scene {}. Expected to have `get_random_valid_position` " + "method.".format(scene)) + + def _print_counters(counters): + for name, value in counters.items(): + logging.info(" %s: %d", name, value) + + sampling_counters = collections.defaultdict(lambda: 0) + for _ in range(num_sampling_retries): + if start is None: + start_pos = scene.get_random_valid_position( + min_wall_distance, inclusion_circles=start_circles) + else: + if start_circles is not None: + raise ValueError("At most one of the arguments start and start_circles " + "can be not None.") + start_pos = start + target_pos = scene.get_random_valid_position( + min_wall_distance, inclusion_circles=target_circles) + sampling_counters["attempts"] += 1 + + euclidean_distance = np.linalg.norm(target_pos - start_pos) + if euclidean_distance < min_goal_euclidean_distance: + sampling_counters["min_euclidean"] += 1 + continue + if euclidean_distance > max_goal_euclidean_distance: + sampling_counters["max_euclidean"] += 1 + continue + + # Skip the path computation is no path clearance is provided. + if min_path_clearance is None: + logging.info("Valid goal with no minimum path clearance checking.") + _print_counters(sampling_counters) + return start_pos, target_pos, None, True + + # Check the goal clearance along the shortest path + if not hasattr(scene, "find_shortest_path"): + raise ValueError( + f"scene %s missing find_shortest_path method {scene}") + + # This is a slow process. + shortest_path = scene.find_shortest_path( + start_pos[:2], target_pos[:2], min_path_clearance) + # No path exists between current robot position and goal satisfying the + # clearance. + if shortest_path is None: + sampling_counters["path_clearance"] += 1 + continue + + logging.info("Valid start/target with path clearance checking.") + _print_counters(sampling_counters) + return start_pos, target_pos, shortest_path, True + + logging.info("No valid start/target found.") + _print_counters(sampling_counters) + return start_pos, target_pos, None, False + + +class CrowdController(metaclass=abc.ABCMeta): + """Crowd controller interface.""" + + def __init__(self, names: Iterable[Text], + position_key_formatter="%s" + POSITION_SENSOR_POSTFIX): + """Constructor. + + Args: + names: Name of instance (dynamic object or human). + position_key_formatter: Formatter to convert name to position sensor name. + """ + self._names = list(names) + self._position_key_formatter = position_key_formatter + self._num_instance = len(self._names) + + self._current_time = 0 + + def _validate_instance_id(self, instance_id): + if not 0 <= instance_id < self._num_instance: + raise ValueError( + f"instance_id must be an integer in [0, {self.num_instance}), " + f"got {instance_id}.") + + @property + def num_instance(self): + """Returns the number of crowd instances.""" + return self._num_instance + + def instance_name(self, instance_id: int) -> Text: + """Returns the name of instance.""" + self._validate_instance_id(instance_id) + return self._names[instance_id] + + def instance_controller( + self, instance_id: int) -> object_controller.ControllerBase: + """Returns the individual controller of certain instance.""" + self._validate_instance_id(instance_id) + return _IndividualController(self, instance_id) + + def instance_get_action( + self, instance_id: int, time_sec: float, + observations: Dict[Text, Any]) -> object_controller.ControllerOutput: + """Returns action of specific instance given observation. + + This method is for _IndividualController. + + Args: + instance_id: Identifier of an object in the crowd. + time_sec: Time since simulation reset in seconds. If time < 0, returns + initial values and ignores observations. + observations: A dict of all observations. + + Returns: + Position, orientation and an extra info dict for robot joints, human + skeletal pose, etc. + """ + if time_sec < 0: + self._recalculate_actions(object_controller.INIT_TIME, {}) + self._current_time = object_controller.INIT_TIME + elif time_sec > self._current_time: + self._current_time = time_sec + self._recalculate_actions(self._current_time, observations) + + self._validate_instance_id(instance_id) + + return self._get_action_of_instance(instance_id) + + @abc.abstractmethod + def _recalculate_actions( + self, time_sec: float, observations: Dict[Text, Any]) -> None: + """Calculates crowd command for all instances in crowd.""" + raise NotImplementedError( + "_recalculate_actions() should be implemented by subclass.") + + @abc.abstractmethod + def _get_action_of_instance( + self, instance_id: int) -> object_controller.ControllerOutput: + """Returns calculated actions of specific instance.""" + raise NotImplementedError( + "_get_action_of_instance() should be implemented by subclass.") + + def set_scene(self, scene) -> None: + """Sets the scene for crowd controller to obtain scene information.""" + del scene + + +class _IndividualController(object_controller.ControllerBase): + """A utility class that wraps crowd controller in ControllerBase interface.""" + + def __init__(self, crowd_controller: CrowdController, instance_id: int): + """Constructor. + + Args: + crowd_controller: The controller of crowd to which this instance belong. + instance_id: Identifier of a crowd instance. + """ + self._instance_id = instance_id + self._crowd_controller = crowd_controller + + def get_action( + self, time_sec: float, + observations: Dict[Text, Any]) -> object_controller.ControllerOutput: + """Returns position, orientation and pose based on time and observations. + + Args: + time_sec: Time since simulation reset in seconds. If time < 0, returns + initial values and ignores observations. + observations: A dict of all observations. + + Returns: + Position, orientation and an extra info dict for robot joints, human + skeletal pose, etc. + """ + return self._crowd_controller.instance_get_action( + self._instance_id, time_sec, observations) + + +@gin.configurable +class StationaryController(CrowdController): + """A crowd controller that places crowd objects at fixed positions.""" + + def __init__( + self, positions: Sequence[Sequence[float]], + orientations: Optional[Sequence[Sequence[float]]] = None, **kwargs): + """Constructor. + + Args: + positions: Fixed positions (3D points) of crowd instances. + orientations: Fixed orientations in quaternion of crowd instances. + **kwargs: Keyword arguments to pass on to base class. + """ + super().__init__(**kwargs) + + if orientations is None: + orientations = np.array(((0, 0, 0, 1),) * self.num_instance) + + if not len(positions) == len(orientations) == self.num_instance: + raise ValueError( + f"positions and orientations should all have the same length " + f"{self.num_instance}. Got len(positions) = {len(positions)}, " + f"len(orientations) = {len(orientations)}.") + + self._positions = positions + self._orientations = orientations + + def _recalculate_actions( + self, time_sec: float, observations: Dict[Text, Any]) -> None: + """Calculates crowd command for all instances in crowd.""" + del time_sec + del observations + + def _get_action_of_instance( + self, instance_id: int) -> object_controller.ControllerOutput: + """Returns calculated actions of specific instance.""" + self._validate_instance_id(instance_id) + return self._positions[instance_id], self._orientations[instance_id], {} + + +@gin.configurable +class OrcaController(CrowdController): + """A crowd controller that controls crowd instances using ORCA algorithm. + + Crowd instance will be initialized at a specified start position and move + towards specified target position in a linear path while avoid collision with + each other. + """ + + _DEFAULT_NEIGHBOR_DISTANCE_M = 5 + _DEFAULT_MAX_NEIGHBORS = 10 + _DEFAULT_RADIUS_M = 0.5 + _DEFAULT_MAX_SPEED_MPS = 2 + _DEFAULT_TIME_HORIZON_SEC = 1.0 + _DEFAULT_OBSTACLE_TIME_HORIZON_SEC = 0.3 + + def __init__( + self, + timestep: float, + start_positions: Optional[Sequence[Sequence[float]]] = None, + target_positions: Optional[Sequence[Sequence[float]]] = None, + use_position_generator: Optional[bool] = False, + group_sizes: Sequence[int] = None, + radius: float = _DEFAULT_RADIUS_M, + max_speed_mps: float = _DEFAULT_MAX_SPEED_MPS, + time_horizon_sec: float = _DEFAULT_TIME_HORIZON_SEC, + obstacle_time_horizon_sec: float = _DEFAULT_OBSTACLE_TIME_HORIZON_SEC, + neighbor_distance_m: float = _DEFAULT_NEIGHBOR_DISTANCE_M, + max_neighbors: int = _DEFAULT_MAX_NEIGHBORS, + workaround_erp_issue: bool = True, + moving_objects_pos_key: Sequence[Text] = (), + moving_objects_radius: Union[float, Sequence[float]] = _DEFAULT_RADIUS_M, + endless_trajectory: bool = True, + **kwargs): + """Constructor. + + Args: + timestep: Timestep of simulation. + start_positions: A list of position (x, y, z) for crowd instances as + their starting position. + target_positions: A list of position (x, y, z) for crowd instances as + their target position. + use_position_generator: a boolean, if True than the start and end + positions are sampled. start_positions and target_positions must be None + group_sizes: If set, then crowd is split in groups randomly, whose sizes + are picked in random from this group_size list. In this way, the + crowd simulator sumulaters clusters of objects moving around. + radius: Radius of crowd instances. + max_speed_mps: Maximum crowd instance speed. + time_horizon_sec: Time horizon in second. + obstacle_time_horizon_sec: Time horizon for static obstacle in second. + neighbor_distance_m: Neighbor distance in meters. Instances closer than + this distance are considered neighbors. + max_neighbors: Max number of neighbors. + workaround_erp_issue: There is an issue with pybullet constraint that the + constraint is solved only 20% per timestep. Need to amplify position + delta by 5x to workaround this issue. + moving_objects_pos_key: Position observation key of moving objects not + controlled by the ORCA controller. + moving_objects_radius: Radius of moving objects. Should be a float, which + applies to all moving objects, or a sequence of float, which should be + of the same length as moving_objects_pos_key. + endless_trajectory: Only valid if use_position_generator is True. Agent + returns to starting point after reaching goal to achieve endless motion. + **kwargs: Keyword arguments to pass on to base class. + """ + super().__init__(**kwargs) + + assert ((start_positions is not None and target_positions is not None) or + use_position_generator) + if not use_position_generator: + if not len(start_positions) == len(target_positions) == self.num_instance: + raise ValueError( + f"start_positions and target_positions should both have length " + f"equals {self.num_instance}: " + f"len(start_positions) = {len(start_positions)}, " + f"len(target_positions) = {len(target_positions)}.") + + self._timestep = timestep + self._radius = radius + self._max_speed_mps = max_speed_mps + self._time_horizon_sec = time_horizon_sec + self._obstacle_time_horizon_sec = obstacle_time_horizon_sec + self._neighbor_distance_m = neighbor_distance_m + self._max_neighbors = max_neighbors + self._use_position_generator = use_position_generator + self._endless_trajectory = endless_trajectory + self._scene = None + if isinstance(moving_objects_radius, float): + moving_objects_radius = [ + moving_objects_radius] * len(moving_objects_pos_key) + if len(moving_objects_radius) != len(moving_objects_pos_key): + raise ValueError( + "moving_objects_radius should be either a float or a sequence of " + "float with the same length as moving_objects_pos_key.") + self._moving_objects = [ + MovingObjectRecord(position_key=key, agent_id=-1, radius=radius) + for key, radius in zip(moving_objects_pos_key, moving_objects_radius)] + + self._paths = None + self._path_indices = None + if self._use_position_generator: + self._start_positions = None + self._target_positions = None + else: + self._start_positions = np.array(start_positions, dtype=np.float64) + self._target_positions = np.array(target_positions, dtype=np.float64) + # A guard against multiple initializations. See recalculate_actions below. + self._already_initialized = False + self._group_sizes = [1] if group_sizes is None else group_sizes + + # The following variables are initialized in _recalculate_actions() + self._current_positions = None + self._command_positions = None + self._command_orientations = None + + #self._orca = rvo2.PyRVOSimulator( + # self._timestep, # timestep + # self._neighbor_distance_m, # neighborDist + # self._max_neighbors, # maxNeighbors + # self._time_horizon_sec, # timeHorizon + # self._obstacle_time_horizon_sec, # timeHorizonObst + # self._radius, # radius + # self._max_speed_mps # maxSpeed + #) + for i in range(self.num_instance): + if self._use_position_generator: + start_position = (0, 0) + else: + start_position = self._start_positions[i, :2] + agent_id = self._orca.addAgent( + tuple(start_position), + self._neighbor_distance_m, # neighborDist + self._max_neighbors, # maxNeighbors + self._time_horizon_sec, # timeHorizon + self._obstacle_time_horizon_sec, # timeHorizonObst + self._radius, # radius + self._max_speed_mps, # maxSpeed + (0.0, 0.0)) # velocity + assert agent_id == i + + for obj in self._moving_objects: + obj.agent_id = self._orca.addAgent( + (0.0, 0.0), # position (will adjust after simulation starts) + self._neighbor_distance_m, # neighborDist + self._max_neighbors, # maxNeighbors + self._timestep, # timeHorizon + self._timestep, # timeHorizonObst + obj.radius, # radius + self._max_speed_mps, # maxSpeed + (0.0, 0.0)) # velocity + + self._workaround_erp_issue = workaround_erp_issue + + def _subsample_path(self, path, subsample_step=1.0): + subsampled_path = [path[0]] + traveled_dist = 0.0 + for i, (s, t) in enumerate(zip(path[:-1], path[1:])): + traveled_dist += np.sqrt( + np.square(s[0] - t[0]) + np.square(s[1] - t[1])) + if traveled_dist > subsample_step or i >= len(path) - 2: + subsampled_path.append(t) + traveled_dist = 0.0 + return subsampled_path + + def _generate_start_target_positions(self): + """Generates start and target positions using goal generartors.""" + assert self._scene is not None + self._start_positions = np.zeros((self.num_instance, 3), dtype=np.float64) + self._target_positions = np.zeros((self.num_instance, 3), dtype=np.float64) + + self._paths = [] + self._path_indices = [] + start_circles, target_circles = None, None + group_radius = 1.0 + current_group_size = np.random.choice(self._group_sizes) + index_in_current_group = 0 + for i in range(self._num_instance): + start_pos, target_pos, path, is_valid = sample_start_target_position( + self._scene, + start_circles=start_circles, + target_circles=target_circles) + if index_in_current_group == current_group_size - 1: + start_circles, target_circles = None, None + index_in_current_group = 0 + current_group_size = np.random.choice(self._group_sizes) + else: + if start_circles is None: + start_circles = [(start_pos[:2], group_radius)] + target_circles = [(target_pos[:2], group_radius)] + else: + start_circles += [(start_pos[:2], group_radius)] + target_circles += [(target_pos[:2], group_radius)] + index_in_current_group += 1 + if not is_valid: + raise ValueError("No valid start/target positions.") + self._start_positions[i, :] = start_pos + self._target_positions[i, :] = target_pos + + subsampled_path = self._subsample_path(path) + self._paths.append(np.array(subsampled_path, dtype=np.float32)) + self._path_indices.append(0) + + def _recalculate_actions( + self, time_sec: float, observations: Dict[Text, Any]) -> None: + """Calculates crowd command for all crowd instances.""" + if self._use_position_generator: + if (time_sec == object_controller.INIT_TIME and + self._start_positions is None and + not self._already_initialized): + self._generate_start_target_positions() + # Initialize only once per initial time even if recalculate actions + # is called multiple times. + self._already_initialized = True + if time_sec == object_controller.INIT_TIME: + # Resets orca simulator. + for i in range(len(self._names)): + self._orca.setAgentPosition(i, tuple(self._start_positions[i, :2])) + + self._command_positions = self._start_positions.copy() + self._current_positions = self._start_positions.copy() + self._command_orientations = np.repeat( + ((0.0, 0.0, 0.0, 1.0),), len(self._names), axis=0) + self._last_target_recalculation_sec = time_sec + return + else: + # The moment we step beyond initial time, we can initialize again. + self._already_initialized = False + + if self._use_position_generator: + for i in range(self._num_instance): + dist = np.linalg.norm( + self._current_positions[i, :] - self._target_positions[i, :]) + if dist < 2.0: + _, target_pos, path, is_valid = sample_start_target_position( + self._scene, self._current_positions[i, :]) + if is_valid: + self._target_positions[i, :] = target_pos + subsampled_path = self._subsample_path(path) + self._paths.append(np.array(subsampled_path, dtype=np.float32)) + self._path_indices.append(0) + + # Sets agent position and preferred velocity based on target. + for i, agent_name in enumerate(self._names): + position = observations[self._position_key_formatter % agent_name] + self._orca.setAgentPosition( + i, tuple(position[:2])) # ORCA uses 2D position. + self._current_positions[i, :2] = position[:2] + + if self._paths is not None: + # Find closest point on the path from start to target, which (1) hasn't + # been covered already; (2) is at least max_coverage_distance away from + # current position. + distances = np.sqrt(np.sum(np.square( + self._paths[i] - position[:2]), axis=1)) + max_coverage_distance = 1.0 + index = self._path_indices[i] + while True: + if index >= len(self._paths[i]) - 1: + if self._endless_trajectory: + self._paths[i] = self._paths[i][::-1] + distances = distances[::-1] + index = 0 + break + elif distances[index] > max_coverage_distance: + break + else: + index += 1 + self._path_indices[i] = index + target_position = self._paths[i][index, :] + else: + target_position = self._target_positions[i][:2] + + goal_vector = target_position - position[:2] + goal_vector_norm = np.linalg.norm(goal_vector) + np.finfo(np.float32).eps + goal_unit_vector = goal_vector / goal_vector_norm + + kv = 1 + velocity = min(kv * goal_vector_norm, + self._DEFAULT_MAX_SPEED_MPS) * goal_unit_vector + self._orca.setAgentPrefVelocity(i, tuple(velocity)) + + for obj in self._moving_objects: + position = observations[obj.position_key] + self._orca.setAgentPosition(obj.agent_id, tuple(position[:2])) + if obj.last_position is None: + self._orca.setAgentPrefVelocity(obj.agent_id, (0.0, 0.0)) + else: + velocity = (position - obj.last_position) / self._timestep + self._orca.setAgentPrefVelocity(obj.agent_id, tuple(velocity[:2])) + obj.last_position = position.copy() + + # Advances orca simulator. + self._orca.doStep() + + # Retrieve agent position and save in buffer. + for i in range(len(self._names)): + x, y = self._orca.getAgentPosition(i) + self._command_positions[i, :2] = (x, y) + + yaw = np.arctan2(y - self._current_positions[i, 1], + x - self._current_positions[i, 0]) + self._command_orientations[i] = (0, 0, np.sin(yaw / 2), np.cos(yaw / 2)) + + def _get_action_of_instance( + self, instance_id) -> object_controller.ControllerOutput: + """Returns calculated actions of specific instance.""" + + if self._command_positions is None: + raise RuntimeError( + "Attempted to get action of instance before _recalculate_actions().") + + self._validate_instance_id(instance_id) + + if self._workaround_erp_issue: + k_erp = 1 / 0.2 + delta_position = ( + self._command_positions[instance_id] - + self._current_positions[instance_id]) + command_position = ( + self._current_positions[instance_id] + k_erp * delta_position) + else: + command_position = self._command_positions[instance_id].copy() + return command_position, self._command_orientations[instance_id], {} + + def set_scene(self, scene) -> None: + """Sets the scene for crowd controller to obtain scene information.""" + try: + polygons = scene.vectorized_map + for polygon in polygons: + self._orca.addObstacle([tuple(point) for point in polygon]) + self._orca.processObstacles() + self._scene = scene + except NotImplementedError: + logging.exception("Scene does not implement vectorized_map property. " + "Crowd agent cannot avoid static obstacles.") + + +@gin.configurable +def uniform_object_factory( + instance_id: int, + object_factory: Callable[..., autonomous_object.AutonomousObject], + *args, **kwargs) -> autonomous_object.AutonomousObject: + """A wrapper that removes instance_id in default crowd object factory.""" + del instance_id + return object_factory(*args, **kwargs) + + +@gin.configurable +def random_object_factory( + instance_id: int, + object_factories: Iterable[ + Callable[..., autonomous_object.AutonomousObject]], + *args, **kwargs) -> autonomous_object.AutonomousObject: + """A wrapper that removes instance_id in default crowd object factory.""" + del instance_id + object_factory = np.random.choice(object_factories) + return object_factory(*args, **kwargs) + + +@gin.configurable +def sensor_factory(instance_id: int, sensor: Callable[..., + generic_sensor.Sensor], + *args, **kwargs) -> generic_sensor.Sensor: + del instance_id + return sensor(*args, **kwargs) + + +@gin.configurable +class CrowdBuilder(object): + """A helper class to construct a crowd.""" + + def __init__( + self, + num_instance: int, + crowd_controller_factory: Callable[..., CrowdController], + object_factory: Callable[..., autonomous_object.AutonomousObject], + sensor_factories: Iterable[Callable[..., generic_sensor.Sensor]] = None): + """Constructor. + + Args: + num_instance: Number of autonomous objects in the crowd. + crowd_controller_factory: A callable that returns a crowd controller + object. + object_factory: Callable that returns an autonomous object. + sensor_factories: list of sensor callables. + """ + self._objects = [] + crowd_id_prefix = "crowd" + names = [crowd_id_prefix + "_%d" % i for i in range(num_instance)] + + self._controller = crowd_controller_factory(names=names) + + for i in range(num_instance): + position_sensor = base_position_sensor.BasePositionSensor( + name=names[i] + POSITION_SENSOR_POSTFIX) + + # Add additional per agent sensors (e.g. camera, occupancy, etc.). + add_sensors = [] + if sensor_factories: + for s in sensor_factories: + add_sensors.append( + sensor_factory( + instance_id=i, sensor=s, name=names[i] + "_" + s.__name__)) + + an_object = object_factory( + instance_id=i, + sensors=(position_sensor,) + tuple(add_sensors), + controller=self._controller.instance_controller(i)) + + self._objects.append(an_object) + + @property + def crowd_objects(self) -> List[autonomous_object.AutonomousObject]: + """Returns list of AutonomousObjects in the crowd.""" + return self._objects + + @property + def crowd_controller(self) -> CrowdController: + """Returns the crowd controller.""" + return self._controller diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/robots/hybrid_motor_model.py b/examples/pybullet/gym/pybullet_envs/minitaur/robots/hybrid_motor_model.py new file mode 100644 index 000000000..4a15422b9 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/robots/hybrid_motor_model.py @@ -0,0 +1,278 @@ +# Lint as: python3 +"""A generic PD motor model.""" + +from typing import Tuple, Union +import gin +import numpy as np + +from pybullet_envs.minitaur.robots import robot_config +from pybullet_envs.minitaur.robots import time_ordered_buffer + +_DEFAULT_BUFFER_SIZE = 200 + +_HYBRID_ACTION_LEN = len(robot_config.HybridActionIndex) +_HYBRID_POS_INDEX = robot_config.HybridActionIndex.POSITION.value +_HYBRID_KP_INDEX = robot_config.HybridActionIndex.POSITION_GAIN.value +_HYBRID_VEL_INDEX = robot_config.HybridActionIndex.VELOCITY.value +_HYBRID_KD_INDEX = robot_config.HybridActionIndex.VELOCITY_GAIN.value +_HYBRID_TORQUE_INDEX = robot_config.HybridActionIndex.TORQUE.value + + +def _convert_to_np_array(inputs: Union[float, Tuple[float], np.ndarray], dim): + """Converts the inputs to a numpy array. + + Args: + inputs: The input scalar or array. + dim: The dimension of the converted numpy array. + + Returns: + The converted numpy array. + + Raises: + ValueError: If the inputs is an array whose dimension does not match the + provied dimension. + """ + outputs = None + if isinstance(inputs, (tuple, np.ndarray)): + outputs = np.array(inputs) + else: + outputs = np.full(dim, inputs) + + if len(outputs) != dim: + raise ValueError("The inputs array has a different dimension {}" + " than provided, which is {}.".format(len(outputs), dim)) + + return outputs + + +@gin.configurable +class HybridMotorModel(object): + """A simple motor model that supports proportional and derivative control. + + When in POSITION mode, the torque is calculated according to the difference + between current and desired joint angle, as well as the joint velocity + differences. For more information about PD control, please refer to: + https://en.wikipedia.org/wiki/PID_controller. + + The model supports a HYBRID mode in which each motor command can be a tuple + (desired_motor_angle, position_gain, desired_motor_velocity, velocity_gain, + torque). + """ + + def __init__( + self, + num_motors: int, + pd_latency: float = 0, + motor_control_mode=robot_config.MotorControlMode.POSITION, + kp: Union[float, Tuple[float], np.ndarray] = 60, + kd: Union[float, Tuple[float], np.ndarray] = 1, + strength_ratios: Union[float, Tuple[float], np.ndarray] = 1, + torque_lower_limits: Union[float, Tuple[float], np.ndarray] = None, + torque_upper_limits: Union[float, Tuple[float], np.ndarray] = None, + ): + """Initializes the class. + + Args: + num_motors: The number of motors for parallel computation. + pd_latency: Simulates the motor controller's latency in reading motor + angles and velocities. + motor_control_mode: Can be POSITION, TORQUE, or HYBRID. In POSITION + control mode, the PD formula is used to track a desired position and a + zero desired velocity. In TORQUE control mode, we assume a pass through + of the provided torques. In HYBRID control mode, the users need to + provie (desired_position, position_gain, desired_velocity, + velocity_gain, feedfoward_torque) for each motor. + kp: The default position gains for motors. + kd: The default velocity gains for motors. + strength_ratios: The scaling ratio for motor torque outputs. This can be + useful for quick debugging when sim-to-real gap is observed in the + actuator behavior. + torque_lower_limits: The lower bounds for torque outputs. + torque_upper_limits: The upper bounds for torque outputs. The output + torques will be clipped by the lower and upper bounds. + + Raises: + ValueError: If the number of motors provided is negative or zero. + """ + if num_motors <= 0: + raise ValueError( + "Number of motors must be positive, not {}".format(num_motors)) + self._num_motors = num_motors + self._zero_array = np.full(num_motors, 0) + self._pd_latency = pd_latency + self._hybrid_command_dim = _HYBRID_ACTION_LEN * self._num_motors + self.set_motor_gains(kp, kd) + self.set_strength_ratios(strength_ratios) + self._torque_lower_limits = None + if torque_lower_limits: + self._torque_lower_limits = _convert_to_np_array(torque_lower_limits, + self._num_motors) + + self._torque_upper_limits = None + if torque_upper_limits: + self._torque_upper_limits = _convert_to_np_array(torque_upper_limits, + self._num_motors) + self._motor_control_mode = motor_control_mode + + # The history buffer is used to simulate the pd latency effect. + # TODO(b/157786642): remove hacks on duplicate timestep once the sim clock + # is fixed. + self._observation_buffer = time_ordered_buffer.TimeOrderedBuffer( + max_buffer_timespan=pd_latency, + error_on_duplicate_timestamp=False, + replace_value_on_duplicate_timestamp=True) + + def set_strength_ratios( + self, + strength_ratios: Union[float, Tuple[float], np.ndarray], + ): + """Sets the strength of each motor relative to the default value. + + Args: + strength_ratios: The relative strength of motor output, ranging from [0, + 1] inclusive. + """ + self._strength_ratios = np.clip( + _convert_to_np_array(strength_ratios, self._num_motors), 0, 1) + + def set_motor_gains( + self, + kp: Union[float, Tuple[float], np.ndarray], + kd: Union[float, Tuple[float], np.ndarray], + ): + """Sets the gains of all motors. + + These gains are PD gains for motor positional control. kp is the + proportional gain and kd is the derivative gain. + + Args: + kp: Proportional gain of the motors. + kd: Derivative gain of the motors. + """ + self._kp = _convert_to_np_array(kp, self._num_motors) + self._kd = _convert_to_np_array(kd, self._num_motors) + + def get_motor_gains(self): + """Get the PD gains of all motors. + + Returns: + Proportional and derivative gain of the motors. + """ + return self._kp, self._kd + + def reset(self): + self._observation_buffer.reset() + + def update(self, timestamp, true_motor_positions: np.ndarray, + true_motor_velocities: np.ndarray): + # Push these to the buffer + self._observation_buffer.add(timestamp, + (true_motor_positions, true_motor_velocities)) + + def get_motor_torques( + self, + motor_commands: np.ndarray, + motor_control_mode=None) -> Tuple[np.ndarray, np.ndarray]: + """Computes the motor torques. + + Args: + motor_commands: The desired motor angle if the motor is in position + control mode. The pwm signal if the motor is in torque control mode. + motor_control_mode: A MotorControlMode enum. + + Returns: + observed_torque: The torque observed. This emulates the limitations in + torque measurement, which is generally obtained from current estimations. + actual_torque: The torque that needs to be applied to the motor. + + Raises: + NotImplementedError if the motor_control_mode is not supported. + + """ + if not motor_control_mode: + motor_control_mode = self._motor_control_mode + + motor_torques = None + + if motor_control_mode is robot_config.MotorControlMode.TORQUE: + motor_torques = motor_commands + + if motor_control_mode is robot_config.MotorControlMode.POSITION: + motor_torques = self._compute_pd_torques( + desired_motor_angles=motor_commands, + kp=self._kp, + desired_motor_velocities=self._zero_array, + kd=self._kd) + + if motor_control_mode is robot_config.MotorControlMode.HYBRID: + motor_torques = self._compute_hybrid_action_torques(motor_commands) + + if motor_torques is None: + raise ValueError( + "{} is not a supported motor control mode".format(motor_control_mode)) + + # Rescale and clip the motor torques as needed. + motor_torques = self._strength_ratios * motor_torques + if (self._torque_lower_limits is not None or + self._torque_upper_limits is not None): + motor_torques = np.clip(motor_torques, self._torque_lower_limits, + self._torque_upper_limits) + + return motor_torques, motor_torques + + def get_motor_states(self, latency=None): + """Computes observation of motor angle and velocity under latency.""" + if latency is None: + latency = self._pd_latency + buffer = self._observation_buffer.get_delayed_value(latency) + angle_vel_t0 = buffer.value_0 + angle_vel_t1 = buffer.value_1 + coeff = buffer.coeff + + pos_idx = 0 + motor_angles = angle_vel_t0[pos_idx] * ( + 1 - coeff) + coeff * angle_vel_t1[pos_idx] + vel_idx = 1 + motor_velocities = angle_vel_t0[vel_idx] * ( + 1 - coeff) + coeff * angle_vel_t1[vel_idx] + return motor_angles, motor_velocities + + def _compute_pd_torques( + self, + desired_motor_angles: np.ndarray, + kp: np.ndarray, + desired_motor_velocities, + kd: np.ndarray, + ) -> Tuple[np.ndarray, np.ndarray]: + """Computes the pd torques. + + Args: + desired_motor_angles: The motor angles to track. + kp: The position gains. + desired_motor_velocities: The motor velocities to track. + kd: The velocity gains. + + Returns: + The computed motor torques. + """ + motor_angles, motor_velocities = self.get_motor_states() + motor_torques = -kp * (motor_angles - desired_motor_angles) - kd * ( + motor_velocities - desired_motor_velocities) + + return motor_torques + + def _compute_hybrid_action_torques( + self, motor_commands: np.ndarray) -> Tuple[np.ndarray, np.ndarray]: + """Computes the pd torques in the HYBRID mode.""" + assert len(motor_commands) == self._hybrid_command_dim + kp = motor_commands[_HYBRID_KP_INDEX::_HYBRID_ACTION_LEN] + kd = motor_commands[_HYBRID_KD_INDEX::_HYBRID_ACTION_LEN] + desired_motor_angles = motor_commands[_HYBRID_POS_INDEX::_HYBRID_ACTION_LEN] + desired_motor_velocities = motor_commands[ + _HYBRID_VEL_INDEX::_HYBRID_ACTION_LEN] + additional_torques = motor_commands[ + _HYBRID_TORQUE_INDEX::_HYBRID_ACTION_LEN] + + return self._compute_pd_torques(desired_motor_angles, kp, + desired_motor_velocities, + kd) + additional_torques diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/robots/laikago.py b/examples/pybullet/gym/pybullet_envs/minitaur/robots/laikago.py new file mode 100644 index 000000000..bcfcbdc3e --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/robots/laikago.py @@ -0,0 +1,319 @@ +"""Pybullet simulation of a Laikago robot.""" +import math +import os +import re +import gin +import numpy as np +from pybullet_utils import transformations +from pybullet_envs.minitaur.envs_v2.utilities import laikago_pose_utils +from pybullet_envs.minitaur.robots import laikago_constants +from pybullet_envs.minitaur.robots import laikago_motor +from pybullet_envs.minitaur.robots import minitaur +from pybullet_envs.minitaur.robots import robot_config + +NUM_MOTORS = 12 +NUM_LEGS = 4 +MOTOR_NAMES = [ + "FR_hip_motor_2_chassis_joint", + "FR_upper_leg_2_hip_motor_joint", + "FR_lower_leg_2_upper_leg_joint", + "FL_hip_motor_2_chassis_joint", + "FL_upper_leg_2_hip_motor_joint", + "FL_lower_leg_2_upper_leg_joint", + "RR_hip_motor_2_chassis_joint", + "RR_upper_leg_2_hip_motor_joint", + "RR_lower_leg_2_upper_leg_joint", + "RL_hip_motor_2_chassis_joint", + "RL_upper_leg_2_hip_motor_joint", + "RL_lower_leg_2_upper_leg_joint", +] +INIT_RACK_POSITION = [0, 0, 1] +INIT_POSITION = [0, 0, 0.48] +JOINT_DIRECTIONS = np.array([-1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1]) +HIP_JOINT_OFFSET = 0.0 +UPPER_LEG_JOINT_OFFSET = -0.6 +KNEE_JOINT_OFFSET = 0.66 +DOFS_PER_LEG = 3 +JOINT_OFFSETS = np.array( + [HIP_JOINT_OFFSET, UPPER_LEG_JOINT_OFFSET, KNEE_JOINT_OFFSET] * 4) +PI = math.pi + +MAX_MOTOR_ANGLE_CHANGE_PER_STEP = 0.12 +_DEFAULT_HIP_POSITIONS = ( + (0.21, -0.1157, 0), + (0.21, 0.1157, 0), + (-0.21, -0.1157, 0), + (-0.21, 0.1157, 0), +) + +# Bases on the readings from Laikago's default pose. +INIT_MOTOR_ANGLES = np.array([ + laikago_pose_utils.LAIKAGO_DEFAULT_ABDUCTION_ANGLE, + laikago_pose_utils.LAIKAGO_DEFAULT_HIP_ANGLE, + laikago_pose_utils.LAIKAGO_DEFAULT_KNEE_ANGLE +] * NUM_LEGS) + +CHASSIS_NAME_PATTERN = re.compile(r"\w+_chassis_\w+") +MOTOR_NAME_PATTERN = re.compile(r"\w+_hip_motor_\w+") +KNEE_NAME_PATTERN = re.compile(r"\w+_lower_leg_\w+") +TOE_NAME_PATTERN = re.compile(r"jtoe\d*") + +URDF_NO_TOES = "laikago.urdf" +URDF_WITH_TOES = "laikago_toes_zup.urdf" + +_BODY_B_FIELD_NUMBER = 2 +_LINK_A_FIELD_NUMBER = 3 + + +@gin.configurable +class Laikago(minitaur.Minitaur): + """A simulation for the Laikago robot.""" + + def __init__(self, urdf_filename=URDF_WITH_TOES, **kwargs): + self._urdf_filename = urdf_filename + if "motor_kp" not in kwargs: + kwargs["motor_kp"] = 100.0 + if "motor_kd" not in kwargs: + kwargs["motor_kd"] = 2.0 + if "motor_torque_limits" not in kwargs: + kwargs["motor_torque_limits"] = None + + # enable_clip_motor_commands: Boolean indicating if clipping should be + # applied to motor commands, which limits the amount of change in joint + # pose between timesteps. + if "enable_clip_motor_commands" in kwargs: + self._enable_clip_motor_commands = kwargs["enable_clip_motor_commands"] + del kwargs["enable_clip_motor_commands"] + else: + self._enable_clip_motor_commands = False + + # The follwing parameters are fixed for the Laikago robot. + kwargs["num_motors"] = NUM_MOTORS + kwargs["dofs_per_leg"] = DOFS_PER_LEG + kwargs["motor_direction"] = JOINT_DIRECTIONS + kwargs["motor_offset"] = JOINT_OFFSETS + kwargs["motor_overheat_protection"] = False + kwargs["motor_model_class"] = laikago_motor.LaikagoMotorModel + kwargs["safety_config"] = None + + super(Laikago, self).__init__(**kwargs) + + def _LoadRobotURDF(self): + laikago_urdf_path = self.GetURDFFile() + if self._self_collision_enabled: + self.quadruped = self._pybullet_client.loadURDF( + laikago_urdf_path, + self._GetDefaultInitPosition(), + self._GetDefaultInitOrientation(), + flags=self._pybullet_client.URDF_USE_SELF_COLLISION) + else: + self.quadruped = self._pybullet_client.loadURDF( + laikago_urdf_path, self._GetDefaultInitPosition(), + self._GetDefaultInitOrientation()) + + def _SettleDownForReset(self, default_motor_angles, reset_time): + self.ReceiveObservation() + + if reset_time <= 0: + return + + for _ in range(500): + self._StepInternal( + INIT_MOTOR_ANGLES, + motor_control_mode=robot_config.MotorControlMode.POSITION) + if default_motor_angles is not None: + num_steps_to_reset = int(reset_time / self.time_step) + for _ in range(num_steps_to_reset): + self._StepInternal( + default_motor_angles, + motor_control_mode=robot_config.MotorControlMode.POSITION) + + def GetHipPositionsInBaseFrame(self): + return _DEFAULT_HIP_POSITIONS + + def GetFootContacts(self): + all_contacts = self._pybullet_client.getContactPoints(bodyA=self.quadruped) + + contacts = [False, False, False, False] + for contact in all_contacts: + # Ignore self contacts + if contact[_BODY_B_FIELD_NUMBER] == self.quadruped: + continue + try: + toe_link_index = self._foot_link_ids.index( + contact[_LINK_A_FIELD_NUMBER]) + contacts[toe_link_index] = True + except ValueError: + continue + return contacts + + def ComputeJacobian(self, leg_id): + """Compute the Jacobian for a given leg.""" + # Because of the default rotation in the Laikago URDF, we need to reorder + # the rows in the Jacobian matrix. + if self._urdf_filename == URDF_WITH_TOES: + return super(Laikago, self).ComputeJacobian(leg_id) + else: + return super(Laikago, self).ComputeJacobian(leg_id)[(2, 0, 1), :] + + def ResetPose(self, add_constraint): + del add_constraint + for name in self._joint_name_to_id: + joint_id = self._joint_name_to_id[name] + self._pybullet_client.setJointMotorControl2( + bodyIndex=self.quadruped, + jointIndex=(joint_id), + controlMode=self._pybullet_client.VELOCITY_CONTROL, + targetVelocity=0, + force=0) + for name, i in zip(MOTOR_NAMES, range(len(MOTOR_NAMES))): + if "hip_motor_2_chassis_joint" in name: + angle = INIT_MOTOR_ANGLES[i] + HIP_JOINT_OFFSET + elif "upper_leg_2_hip_motor_joint" in name: + angle = INIT_MOTOR_ANGLES[i] + UPPER_LEG_JOINT_OFFSET + elif "lower_leg_2_upper_leg_joint" in name: + angle = INIT_MOTOR_ANGLES[i] + KNEE_JOINT_OFFSET + else: + raise ValueError("The name %s is not recognized as a motor joint." % + name) + self._pybullet_client.resetJointState( + self.quadruped, self._joint_name_to_id[name], angle, targetVelocity=0) + + def GetURDFFile(self): + return os.path.join(self._urdf_root, "laikago/" + self._urdf_filename) + + def _BuildUrdfIds(self): + """Build the link Ids from its name in the URDF file. + + Raises: + ValueError: Unknown category of the joint name. + """ + num_joints = self._pybullet_client.getNumJoints(self.quadruped) + self._chassis_link_ids = [-1] + self._leg_link_ids = [] + self._motor_link_ids = [] + self._knee_link_ids = [] + self._foot_link_ids = [] + + for i in range(num_joints): + joint_info = self._pybullet_client.getJointInfo(self.quadruped, i) + joint_name = joint_info[1].decode("UTF-8") + joint_id = self._joint_name_to_id[joint_name] + if CHASSIS_NAME_PATTERN.match(joint_name): + self._chassis_link_ids.append(joint_id) + elif MOTOR_NAME_PATTERN.match(joint_name): + self._motor_link_ids.append(joint_id) + # We either treat the lower leg or the toe as the foot link, depending on + # the urdf version used. + elif KNEE_NAME_PATTERN.match(joint_name): + self._knee_link_ids.append(joint_id) + elif TOE_NAME_PATTERN.match(joint_name): + assert self._urdf_filename == URDF_WITH_TOES + self._foot_link_ids.append(joint_id) + else: + raise ValueError("Unknown category of joint %s" % joint_name) + + self._leg_link_ids.extend(self._knee_link_ids) + self._leg_link_ids.extend(self._foot_link_ids) + + if self._urdf_filename == URDF_NO_TOES: + self._foot_link_ids.extend(self._knee_link_ids) + + assert len(self._foot_link_ids) == NUM_LEGS + self._chassis_link_ids.sort() + self._motor_link_ids.sort() + self._knee_link_ids.sort() + self._foot_link_ids.sort() + self._leg_link_ids.sort() + + return + + def _GetMotorNames(self): + return MOTOR_NAMES + + def _GetDefaultInitPosition(self): + if self._on_rack: + return INIT_RACK_POSITION + else: + return INIT_POSITION + + def _GetDefaultInitOrientation(self): + # The Laikago URDF assumes the initial pose of heading towards z axis, + # and belly towards y axis. The following transformation is to transform + # the Laikago initial orientation to our commonly used orientation: heading + # towards -x direction, and z axis is the up direction. + if self._urdf_filename == URDF_WITH_TOES: + return [0, 0, 0, 1] + else: + return transformations.quaternion_from_euler( + ai=math.pi / 2.0, aj=0, ak=math.pi / 2.0, axes="sxyz") + + def GetDefaultInitPosition(self): + """Get default initial base position.""" + return self._GetDefaultInitPosition() + + def GetDefaultInitOrientation(self): + """Get default initial base orientation.""" + return self._GetDefaultInitOrientation() + + def GetDefaultInitJointPose(self): + """Get default initial joint pose.""" + joint_pose = (INIT_MOTOR_ANGLES + JOINT_OFFSETS) * JOINT_DIRECTIONS + return joint_pose + + def ApplyAction(self, motor_commands, motor_control_mode=None): + """Clips and then apply the motor commands using the motor model. + + Args: + motor_commands: np.array. Can be motor angles, torques, hybrid commands, + or motor pwms (for Minitaur only).N + motor_control_mode: A MotorControlMode enum. + """ + if self._enable_clip_motor_commands: + motor_commands = self._ClipMotorCommands(motor_commands) + + super(Laikago, self).ApplyAction(motor_commands, motor_control_mode) + return + + def _ClipMotorCommands(self, motor_commands): + """Clips motor commands. + + Args: + motor_commands: np.array. Can be motor angles, torques, hybrid commands, + or motor pwms (for Minitaur only). + + Returns: + Clipped motor commands. + """ + + # clamp the motor command by the joint limit, in case weired things happens + max_angle_change = MAX_MOTOR_ANGLE_CHANGE_PER_STEP + current_motor_angles = self.GetMotorAngles() + motor_commands = np.clip(motor_commands, + current_motor_angles - max_angle_change, + current_motor_angles + max_angle_change) + return motor_commands + + @classmethod + def GetConstants(cls): + del cls + return laikago_constants + + # The following functions are added for the migration purpose. Will be removed + # after the migration is complete. + + @property + def robot_id(self): + return self.quadruped + + @property + def base_position(self): + return self.GetBasePosition() + + @property + def base_roll_pitch_yaw(self): + return self.GetTrueBaseRollPitchYaw() + + @property + def timestamp(self): + return self.GetTimeSinceReset() diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/robots/laikago_constants.py b/examples/pybullet/gym/pybullet_envs/minitaur/robots/laikago_constants.py new file mode 100644 index 000000000..d07e73071 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/robots/laikago_constants.py @@ -0,0 +1,120 @@ +# Lint as: python3 +"""Defines the laikago robot related constants and URDF specs.""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import collections +import gin + +URDF_PATH = "laikago/laikago_toes_zup.urdf" + +NUM_MOTORS = 12 +NUM_LEGS = 4 +MOTORS_PER_LEG = 3 + +INIT_RACK_POSITION = [0, 0, 1] +INIT_POSITION = [0, 0, 0.48] + +# Will be default to (0, 0, 0, 1) once the new laikago_toes_zup.urdf checked in. +INIT_ORIENTATION = [0, 0, 0, 1] + +# Can be different from the motors, although for laikago they are the same list. +JOINT_NAMES = ( + # front right leg + "FR_hip_motor_2_chassis_joint", + "FR_upper_leg_2_hip_motor_joint", + "FR_lower_leg_2_upper_leg_joint", + # front left leg + "FL_hip_motor_2_chassis_joint", + "FL_upper_leg_2_hip_motor_joint", + "FL_lower_leg_2_upper_leg_joint", + # rear right leg + "RR_hip_motor_2_chassis_joint", + "RR_upper_leg_2_hip_motor_joint", + "RR_lower_leg_2_upper_leg_joint", + # rear left leg + "RL_hip_motor_2_chassis_joint", + "RL_upper_leg_2_hip_motor_joint", + "RL_lower_leg_2_upper_leg_joint", +) + +INIT_ABDUCTION_ANGLE = 0 +INIT_HIP_ANGLE = 0.67 +INIT_KNEE_ANGLE = -1.25 + +# Note this matches the Laikago SDK/control convention, but is different from +# URDF's internal joint angles which needs to be computed using the joint +# offsets and directions. The conversion formula is (sdk_joint_angle + offset) * +# joint direction. +INIT_JOINT_ANGLES = collections.OrderedDict( + zip(JOINT_NAMES, + (INIT_ABDUCTION_ANGLE, INIT_HIP_ANGLE, INIT_KNEE_ANGLE) * NUM_LEGS)) + +# Used to convert the robot SDK joint angles to URDF joint angles. +JOINT_DIRECTIONS = collections.OrderedDict( + zip(JOINT_NAMES, (-1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1))) + +HIP_JOINT_OFFSET = 0.0 +UPPER_LEG_JOINT_OFFSET = -0.6 +KNEE_JOINT_OFFSET = 0.66 + +# Used to convert the robot SDK joint angles to URDF joint angles. +JOINT_OFFSETS = collections.OrderedDict( + zip(JOINT_NAMES, + [HIP_JOINT_OFFSET, UPPER_LEG_JOINT_OFFSET, KNEE_JOINT_OFFSET] * + NUM_LEGS)) + +LEG_NAMES = ( + "front_right", + "front_left", + "rear_right", + "rear_left", +) + +LEG_ORDER = ( + "front_right", + "front_left", + "back_right", + "back_left", +) + +END_EFFECTOR_NAMES = ( + "jtoeFR", + "jtoeFL", + "jtoeRR", + "jtoeRL", +) + +MOTOR_NAMES = JOINT_NAMES +MOTOR_GROUP = collections.OrderedDict(( + (LEG_NAMES[0], JOINT_NAMES[0:3]), + (LEG_NAMES[1], JOINT_NAMES[3:6]), + (LEG_NAMES[2], JOINT_NAMES[6:9]), + (LEG_NAMES[3], JOINT_NAMES[9:12]), +)) + +# Regulates the joint angle change when in position control mode. +MAX_MOTOR_ANGLE_CHANGE_PER_STEP = 0.12 + +# The hip joint location in the CoM frame. +HIP_POSITIONS = collections.OrderedDict(( + (LEG_NAMES[0], (0.21, -0.1157, 0)), + (LEG_NAMES[1], (0.21, 0.1157, 0)), + (LEG_NAMES[2], (-0.21, -0.1157, 0)), + (LEG_NAMES[3], (-0.21, 0.1157, 0)), +)) + +# Add the gin constants to be used for gin binding in config. Append "LAIKAGO_" +# for unique binding names. +gin.constant("laikago_constants.LAIKAGO_NUM_MOTORS", NUM_MOTORS) +gin.constant("laikago_constants.LAIKAGO_URDF_PATH", URDF_PATH) +gin.constant("laikago_constants.LAIKAGO_INIT_POSITION", INIT_POSITION) +gin.constant("laikago_constants.LAIKAGO_INIT_ORIENTATION", INIT_ORIENTATION) +gin.constant("laikago_constants.LAIKAGO_INIT_JOINT_ANGLES", INIT_JOINT_ANGLES) +gin.constant("laikago_constants.LAIKAGO_JOINT_DIRECTIONS", JOINT_DIRECTIONS) +gin.constant("laikago_constants.LAIKAGO_JOINT_OFFSETS", JOINT_OFFSETS) +gin.constant("laikago_constants.LAIKAGO_MOTOR_NAMES", MOTOR_NAMES) +gin.constant("laikago_constants.LAIKAGO_END_EFFECTOR_NAMES", END_EFFECTOR_NAMES) +gin.constant("laikago_constants.LAIKAGO_MOTOR_GROUP", MOTOR_GROUP) diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/robots/laikago_interface.proto b/examples/pybullet/gym/pybullet_envs/minitaur/robots/laikago_interface.proto new file mode 100644 index 000000000..3e2a31a97 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/robots/laikago_interface.proto @@ -0,0 +1,181 @@ +syntax = "proto3"; + +package minitaur_fluxworks.control; + +import "timestamp.proto"; +import "vector.proto"; + +// A general motor command. +message MotorCommand { + // The unique motor id. + uint32 motor_id = 1; + + // The motor angle. + float position = 2; + + float position_gain = 3; + + // The motor velocity. + float velocity = 4; + float velocity_gain = 5; + + // The feed forward torque. + float torque = 6; +} + +// LED command for the foot. +message Led { + uint32 leg_id = 1; + uint32 r = 2; + uint32 g = 3; + uint32 b = 4; +} + +// The message type for Laikago's motor command. +message LaikagoCommand { + google.protobuf.Timestamp timestamp = 1; + enum ControlMode { + CONTROL_MODE_UNSPECIFIED = 0; + CONTROL_MODE_POSITION = 1; + CONTROL_MODE_TORQUE = 2; + CONTROL_MODE_HYBRID = 3; + } + ControlMode control_mode = 2; + repeated MotorCommand motor_command = 3; + repeated Led led = 4; +} + +// Empty message just to request a state from the control server. +message LaikagoStateRequest {} + +message Imu { + robotics.messages.Vector4f quaternion = 1; + + // The unit is rad/s + robotics.messages.Vector3f gyroscope = 2; + + // The unit is m/s^2 + robotics.messages.Vector3f acceleration = 3; + + // The unit is rad + robotics.messages.Vector3f rpy = 4; + + // The IMU temperature. + float temperature = 5; +} + +message MotorState { + uint32 motor_id = 1; + uint32 mode = 2; + + float position = 3; + // Position/Velocity gains cannot be read from the motor. We just save the + // last used value. + float position_gain = 4; + float velocity = 5; + float velocity_gain = 6; + float torque = 7; + float temperature = 8; +} + +message ContactState { + uint32 leg_id = 1; + + // Contact force is measured in one dimension for Laikago. + float force = 2; + + // The contact force measurement direction. + robotics.messages.Vector3f axis = 3; +} + +// The message type for Laikago's low level state. +message LaikagoState { + google.protobuf.Timestamp timestamp = 1; + uint32 control_level = 2; + Imu imu = 3; + repeated MotorState motor_state = 4; + repeated ContactState contact_state = 5; + // The microcontroller_time is millis. + uint32 microcontroller_time_millis = 6; + bytes wireless_remote = 7; + uint32 crc = 8; +} + +message LaikagoCommandState { + LaikagoCommand command = 1; + LaikagoState state = 2; +} + +// The optional gRPC interface for Laikago control. +service LaikagoControlGrpcInterface { + // Sends the low level control command and receives a state. + rpc SendCommand(LaikagoCommand) returns (LaikagoState) {} + + // Receives a robot state without sending motor commands. + rpc GetState(LaikagoStateRequest) returns (LaikagoState) {} +} + +// Reserved for Laikago's high level command. +message LaikagoHighLevelCommand { + google.protobuf.Timestamp timestamp = 1; + uint32 control_level = 2; + + // 1 for standing and 2 for walking. + uint32 control_mode = 3; + + // The normalized speed tuple (x, y, \omega_z) + robotics.messages.Vector3f walk_speed = 4; + + float body_height = 5; + float foot_clearance_height = 6; + + // The target roll, pitch, yaw of the body in the stand mode. + robotics.messages.Vector3f rpy = 7; +} + +// Reserved for Laikago's high level status. +message LaikagoHighLevelState { + google.protobuf.Timestamp timestamp = 1; + uint32 control_level = 2; + + // 1 for standing and 2 for walking. + uint32 control_mode = 3; + Imu imu = 4; + + // The normalized speed tuple (x, y, \omega_z) + robotics.messages.Vector3f walk_speed = 5; + + // In stand mode. + float body_height = 8; + float up_down_speed = 9; + + // The com position estimation. Will drift in x-y plane. + robotics.messages.Vector3f com_position = 10; + repeated robotics.messages.Vector3f foot_position_to_com = 11; + repeated robotics.messages.Vector3f foot_velocity_to_com = 12; + repeated ContactState contact_state = 13; + // The microcontroller_time is millis. + uint32 microcontroller_time_millis = 14; + // Bytes 4-7: slider_lx (side step speed); Bytes 8-11: slider_rx (twisting + // speed); Bytes 12-15: -slider_ry. Bytes 16-19: (slider_r + 1) / 2; Bytes + // 20-23: -slider_ly (forward/backward speed). Each float number (4 bytes) are + // packed using big endian convention. + bytes wireless_remote = 15; + uint32 crc = 16; +} + +message LaikagoHighLevelStateRequest {} + +message LaikagoHighLevelCommandState { + LaikagoHighLevelCommand command = 1; + LaikagoHighLevelState state = 2; +} + +// The optional gRPC interface for Laikago control. +service LaikagoHighLevelControlGrpcInterface { + // Sends the high level control command and receives a state. + rpc SendCommand(LaikagoHighLevelCommand) returns (LaikagoHighLevelState) {} + + // Requests a state without sending commands. + rpc GetState(LaikagoHighLevelStateRequest) returns (LaikagoHighLevelState) {} +} diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/robots/laikago_interface_pb2.py b/examples/pybullet/gym/pybullet_envs/minitaur/robots/laikago_interface_pb2.py new file mode 100644 index 000000000..7d67f55cc --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/robots/laikago_interface_pb2.py @@ -0,0 +1,1040 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: laikago_interface.proto +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from pybullet_envs.minitaur.robots import timestamp_pb2 as timestamp__pb2 +from pybullet_envs.minitaur.robots import vector_pb2 as vector__pb2 + + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='laikago_interface.proto', + package='minitaur_fluxworks.control', + syntax='proto3', + serialized_options=None, + create_key=_descriptor._internal_create_key, + serialized_pb=b'\n\x17laikago_interface.proto\x12\x1aminitaur_fluxworks.control\x1a\x0ftimestamp.proto\x1a\x0cvector.proto\"\x82\x01\n\x0cMotorCommand\x12\x10\n\x08motor_id\x18\x01 \x01(\r\x12\x10\n\x08position\x18\x02 \x01(\x02\x12\x15\n\rposition_gain\x18\x03 \x01(\x02\x12\x10\n\x08velocity\x18\x04 \x01(\x02\x12\x15\n\rvelocity_gain\x18\x05 \x01(\x02\x12\x0e\n\x06torque\x18\x06 \x01(\x02\"6\n\x03Led\x12\x0e\n\x06leg_id\x18\x01 \x01(\r\x12\t\n\x01r\x18\x02 \x01(\r\x12\t\n\x01g\x18\x03 \x01(\r\x12\t\n\x01\x62\x18\x04 \x01(\r\"\xf6\x02\n\x0eLaikagoCommand\x12-\n\ttimestamp\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12L\n\x0c\x63ontrol_mode\x18\x02 \x01(\x0e\x32\x36.minitaur_fluxworks.control.LaikagoCommand.ControlMode\x12?\n\rmotor_command\x18\x03 \x03(\x0b\x32(.minitaur_fluxworks.control.MotorCommand\x12,\n\x03led\x18\x04 \x03(\x0b\x32\x1f.minitaur_fluxworks.control.Led\"x\n\x0b\x43ontrolMode\x12\x1c\n\x18\x43ONTROL_MODE_UNSPECIFIED\x10\x00\x12\x19\n\x15\x43ONTROL_MODE_POSITION\x10\x01\x12\x17\n\x13\x43ONTROL_MODE_TORQUE\x10\x02\x12\x17\n\x13\x43ONTROL_MODE_HYBRID\x10\x03\"\x15\n\x13LaikagoStateRequest\"\xd8\x01\n\x03Imu\x12/\n\nquaternion\x18\x01 \x01(\x0b\x32\x1b.robotics.messages.Vector4f\x12.\n\tgyroscope\x18\x02 \x01(\x0b\x32\x1b.robotics.messages.Vector3f\x12\x31\n\x0c\x61\x63\x63\x65leration\x18\x03 \x01(\x0b\x32\x1b.robotics.messages.Vector3f\x12(\n\x03rpy\x18\x04 \x01(\x0b\x32\x1b.robotics.messages.Vector3f\x12\x13\n\x0btemperature\x18\x05 \x01(\x02\"\xa3\x01\n\nMotorState\x12\x10\n\x08motor_id\x18\x01 \x01(\r\x12\x0c\n\x04mode\x18\x02 \x01(\r\x12\x10\n\x08position\x18\x03 \x01(\x02\x12\x15\n\rposition_gain\x18\x04 \x01(\x02\x12\x10\n\x08velocity\x18\x05 \x01(\x02\x12\x15\n\rvelocity_gain\x18\x06 \x01(\x02\x12\x0e\n\x06torque\x18\x07 \x01(\x02\x12\x13\n\x0btemperature\x18\x08 \x01(\x02\"X\n\x0c\x43ontactState\x12\x0e\n\x06leg_id\x18\x01 \x01(\r\x12\r\n\x05\x66orce\x18\x02 \x01(\x02\x12)\n\x04\x61xis\x18\x03 \x01(\x0b\x32\x1b.robotics.messages.Vector3f\"\xcb\x02\n\x0cLaikagoState\x12-\n\ttimestamp\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x15\n\rcontrol_level\x18\x02 \x01(\r\x12,\n\x03imu\x18\x03 \x01(\x0b\x32\x1f.minitaur_fluxworks.control.Imu\x12;\n\x0bmotor_state\x18\x04 \x03(\x0b\x32&.minitaur_fluxworks.control.MotorState\x12?\n\rcontact_state\x18\x05 \x03(\x0b\x32(.minitaur_fluxworks.control.ContactState\x12#\n\x1bmicrocontroller_time_millis\x18\x06 \x01(\r\x12\x17\n\x0fwireless_remote\x18\x07 \x01(\x0c\x12\x0b\n\x03\x63rc\x18\x08 \x01(\r\"\x8b\x01\n\x13LaikagoCommandState\x12;\n\x07\x63ommand\x18\x01 \x01(\x0b\x32*.minitaur_fluxworks.control.LaikagoCommand\x12\x37\n\x05state\x18\x02 \x01(\x0b\x32(.minitaur_fluxworks.control.LaikagoState\"\x84\x02\n\x17LaikagoHighLevelCommand\x12-\n\ttimestamp\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x15\n\rcontrol_level\x18\x02 \x01(\r\x12\x14\n\x0c\x63ontrol_mode\x18\x03 \x01(\r\x12/\n\nwalk_speed\x18\x04 \x01(\x0b\x32\x1b.robotics.messages.Vector3f\x12\x13\n\x0b\x62ody_height\x18\x05 \x01(\x02\x12\x1d\n\x15\x66oot_clearance_height\x18\x06 \x01(\x02\x12(\n\x03rpy\x18\x07 \x01(\x0b\x32\x1b.robotics.messages.Vector3f\"\xb3\x04\n\x15LaikagoHighLevelState\x12-\n\ttimestamp\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x15\n\rcontrol_level\x18\x02 \x01(\r\x12\x14\n\x0c\x63ontrol_mode\x18\x03 \x01(\r\x12,\n\x03imu\x18\x04 \x01(\x0b\x32\x1f.minitaur_fluxworks.control.Imu\x12/\n\nwalk_speed\x18\x05 \x01(\x0b\x32\x1b.robotics.messages.Vector3f\x12\x13\n\x0b\x62ody_height\x18\x08 \x01(\x02\x12\x15\n\rup_down_speed\x18\t \x01(\x02\x12\x31\n\x0c\x63om_position\x18\n \x01(\x0b\x32\x1b.robotics.messages.Vector3f\x12\x39\n\x14\x66oot_position_to_com\x18\x0b \x03(\x0b\x32\x1b.robotics.messages.Vector3f\x12\x39\n\x14\x66oot_velocity_to_com\x18\x0c \x03(\x0b\x32\x1b.robotics.messages.Vector3f\x12?\n\rcontact_state\x18\r \x03(\x0b\x32(.minitaur_fluxworks.control.ContactState\x12#\n\x1bmicrocontroller_time_millis\x18\x0e \x01(\r\x12\x17\n\x0fwireless_remote\x18\x0f \x01(\x0c\x12\x0b\n\x03\x63rc\x18\x10 \x01(\r\"\x1e\n\x1cLaikagoHighLevelStateRequest\"\xa6\x01\n\x1cLaikagoHighLevelCommandState\x12\x44\n\x07\x63ommand\x18\x01 \x01(\x0b\x32\x33.minitaur_fluxworks.control.LaikagoHighLevelCommand\x12@\n\x05state\x18\x02 \x01(\x0b\x32\x31.minitaur_fluxworks.control.LaikagoHighLevelState2\xed\x01\n\x1bLaikagoControlGrpcInterface\x12\x65\n\x0bSendCommand\x12*.minitaur_fluxworks.control.LaikagoCommand\x1a(.minitaur_fluxworks.control.LaikagoState\"\x00\x12g\n\x08GetState\x12/.minitaur_fluxworks.control.LaikagoStateRequest\x1a(.minitaur_fluxworks.control.LaikagoState\"\x00\x32\x9a\x02\n$LaikagoHighLevelControlGrpcInterface\x12w\n\x0bSendCommand\x12\x33.minitaur_fluxworks.control.LaikagoHighLevelCommand\x1a\x31.minitaur_fluxworks.control.LaikagoHighLevelState\"\x00\x12y\n\x08GetState\x12\x38.minitaur_fluxworks.control.LaikagoHighLevelStateRequest\x1a\x31.minitaur_fluxworks.control.LaikagoHighLevelState\"\x00\x62\x06proto3' + , + dependencies=[timestamp__pb2.DESCRIPTOR,vector__pb2.DESCRIPTOR,]) + + + +_LAIKAGOCOMMAND_CONTROLMODE = _descriptor.EnumDescriptor( + name='ControlMode', + full_name='minitaur_fluxworks.control.LaikagoCommand.ControlMode', + filename=None, + file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, + values=[ + _descriptor.EnumValueDescriptor( + name='CONTROL_MODE_UNSPECIFIED', index=0, number=0, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='CONTROL_MODE_POSITION', index=1, number=1, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='CONTROL_MODE_TORQUE', index=2, number=2, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='CONTROL_MODE_HYBRID', index=3, number=3, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + ], + containing_type=None, + serialized_options=None, + serialized_start=530, + serialized_end=650, +) +_sym_db.RegisterEnumDescriptor(_LAIKAGOCOMMAND_CONTROLMODE) + + +_MOTORCOMMAND = _descriptor.Descriptor( + name='MotorCommand', + full_name='minitaur_fluxworks.control.MotorCommand', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='motor_id', full_name='minitaur_fluxworks.control.MotorCommand.motor_id', index=0, + number=1, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='position', full_name='minitaur_fluxworks.control.MotorCommand.position', index=1, + number=2, type=2, cpp_type=6, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='position_gain', full_name='minitaur_fluxworks.control.MotorCommand.position_gain', index=2, + number=3, type=2, cpp_type=6, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='velocity', full_name='minitaur_fluxworks.control.MotorCommand.velocity', index=3, + number=4, type=2, cpp_type=6, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='velocity_gain', full_name='minitaur_fluxworks.control.MotorCommand.velocity_gain', index=4, + number=5, type=2, cpp_type=6, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='torque', full_name='minitaur_fluxworks.control.MotorCommand.torque', index=5, + number=6, type=2, cpp_type=6, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=87, + serialized_end=217, +) + + +_LED = _descriptor.Descriptor( + name='Led', + full_name='minitaur_fluxworks.control.Led', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='leg_id', full_name='minitaur_fluxworks.control.Led.leg_id', index=0, + number=1, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='r', full_name='minitaur_fluxworks.control.Led.r', index=1, + number=2, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='g', full_name='minitaur_fluxworks.control.Led.g', index=2, + number=3, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='b', full_name='minitaur_fluxworks.control.Led.b', index=3, + number=4, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=219, + serialized_end=273, +) + + +_LAIKAGOCOMMAND = _descriptor.Descriptor( + name='LaikagoCommand', + full_name='minitaur_fluxworks.control.LaikagoCommand', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='timestamp', full_name='minitaur_fluxworks.control.LaikagoCommand.timestamp', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='control_mode', full_name='minitaur_fluxworks.control.LaikagoCommand.control_mode', index=1, + number=2, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='motor_command', full_name='minitaur_fluxworks.control.LaikagoCommand.motor_command', index=2, + number=3, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='led', full_name='minitaur_fluxworks.control.LaikagoCommand.led', index=3, + number=4, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + _LAIKAGOCOMMAND_CONTROLMODE, + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=276, + serialized_end=650, +) + + +_LAIKAGOSTATEREQUEST = _descriptor.Descriptor( + name='LaikagoStateRequest', + full_name='minitaur_fluxworks.control.LaikagoStateRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=652, + serialized_end=673, +) + + +_IMU = _descriptor.Descriptor( + name='Imu', + full_name='minitaur_fluxworks.control.Imu', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='quaternion', full_name='minitaur_fluxworks.control.Imu.quaternion', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='gyroscope', full_name='minitaur_fluxworks.control.Imu.gyroscope', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='acceleration', full_name='minitaur_fluxworks.control.Imu.acceleration', index=2, + number=3, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='rpy', full_name='minitaur_fluxworks.control.Imu.rpy', index=3, + number=4, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='temperature', full_name='minitaur_fluxworks.control.Imu.temperature', index=4, + number=5, type=2, cpp_type=6, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=676, + serialized_end=892, +) + + +_MOTORSTATE = _descriptor.Descriptor( + name='MotorState', + full_name='minitaur_fluxworks.control.MotorState', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='motor_id', full_name='minitaur_fluxworks.control.MotorState.motor_id', index=0, + number=1, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='mode', full_name='minitaur_fluxworks.control.MotorState.mode', index=1, + number=2, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='position', full_name='minitaur_fluxworks.control.MotorState.position', index=2, + number=3, type=2, cpp_type=6, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='position_gain', full_name='minitaur_fluxworks.control.MotorState.position_gain', index=3, + number=4, type=2, cpp_type=6, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='velocity', full_name='minitaur_fluxworks.control.MotorState.velocity', index=4, + number=5, type=2, cpp_type=6, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='velocity_gain', full_name='minitaur_fluxworks.control.MotorState.velocity_gain', index=5, + number=6, type=2, cpp_type=6, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='torque', full_name='minitaur_fluxworks.control.MotorState.torque', index=6, + number=7, type=2, cpp_type=6, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='temperature', full_name='minitaur_fluxworks.control.MotorState.temperature', index=7, + number=8, type=2, cpp_type=6, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=895, + serialized_end=1058, +) + + +_CONTACTSTATE = _descriptor.Descriptor( + name='ContactState', + full_name='minitaur_fluxworks.control.ContactState', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='leg_id', full_name='minitaur_fluxworks.control.ContactState.leg_id', index=0, + number=1, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='force', full_name='minitaur_fluxworks.control.ContactState.force', index=1, + number=2, type=2, cpp_type=6, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='axis', full_name='minitaur_fluxworks.control.ContactState.axis', index=2, + number=3, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1060, + serialized_end=1148, +) + + +_LAIKAGOSTATE = _descriptor.Descriptor( + name='LaikagoState', + full_name='minitaur_fluxworks.control.LaikagoState', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='timestamp', full_name='minitaur_fluxworks.control.LaikagoState.timestamp', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='control_level', full_name='minitaur_fluxworks.control.LaikagoState.control_level', index=1, + number=2, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='imu', full_name='minitaur_fluxworks.control.LaikagoState.imu', index=2, + number=3, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='motor_state', full_name='minitaur_fluxworks.control.LaikagoState.motor_state', index=3, + number=4, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='contact_state', full_name='minitaur_fluxworks.control.LaikagoState.contact_state', index=4, + number=5, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='microcontroller_time_millis', full_name='minitaur_fluxworks.control.LaikagoState.microcontroller_time_millis', index=5, + number=6, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='wireless_remote', full_name='minitaur_fluxworks.control.LaikagoState.wireless_remote', index=6, + number=7, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=b"", + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='crc', full_name='minitaur_fluxworks.control.LaikagoState.crc', index=7, + number=8, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1151, + serialized_end=1482, +) + + +_LAIKAGOCOMMANDSTATE = _descriptor.Descriptor( + name='LaikagoCommandState', + full_name='minitaur_fluxworks.control.LaikagoCommandState', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='command', full_name='minitaur_fluxworks.control.LaikagoCommandState.command', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='state', full_name='minitaur_fluxworks.control.LaikagoCommandState.state', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1485, + serialized_end=1624, +) + + +_LAIKAGOHIGHLEVELCOMMAND = _descriptor.Descriptor( + name='LaikagoHighLevelCommand', + full_name='minitaur_fluxworks.control.LaikagoHighLevelCommand', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='timestamp', full_name='minitaur_fluxworks.control.LaikagoHighLevelCommand.timestamp', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='control_level', full_name='minitaur_fluxworks.control.LaikagoHighLevelCommand.control_level', index=1, + number=2, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='control_mode', full_name='minitaur_fluxworks.control.LaikagoHighLevelCommand.control_mode', index=2, + number=3, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='walk_speed', full_name='minitaur_fluxworks.control.LaikagoHighLevelCommand.walk_speed', index=3, + number=4, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='body_height', full_name='minitaur_fluxworks.control.LaikagoHighLevelCommand.body_height', index=4, + number=5, type=2, cpp_type=6, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='foot_clearance_height', full_name='minitaur_fluxworks.control.LaikagoHighLevelCommand.foot_clearance_height', index=5, + number=6, type=2, cpp_type=6, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='rpy', full_name='minitaur_fluxworks.control.LaikagoHighLevelCommand.rpy', index=6, + number=7, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1627, + serialized_end=1887, +) + + +_LAIKAGOHIGHLEVELSTATE = _descriptor.Descriptor( + name='LaikagoHighLevelState', + full_name='minitaur_fluxworks.control.LaikagoHighLevelState', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='timestamp', full_name='minitaur_fluxworks.control.LaikagoHighLevelState.timestamp', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='control_level', full_name='minitaur_fluxworks.control.LaikagoHighLevelState.control_level', index=1, + number=2, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='control_mode', full_name='minitaur_fluxworks.control.LaikagoHighLevelState.control_mode', index=2, + number=3, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='imu', full_name='minitaur_fluxworks.control.LaikagoHighLevelState.imu', index=3, + number=4, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='walk_speed', full_name='minitaur_fluxworks.control.LaikagoHighLevelState.walk_speed', index=4, + number=5, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='body_height', full_name='minitaur_fluxworks.control.LaikagoHighLevelState.body_height', index=5, + number=8, type=2, cpp_type=6, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='up_down_speed', full_name='minitaur_fluxworks.control.LaikagoHighLevelState.up_down_speed', index=6, + number=9, type=2, cpp_type=6, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='com_position', full_name='minitaur_fluxworks.control.LaikagoHighLevelState.com_position', index=7, + number=10, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='foot_position_to_com', full_name='minitaur_fluxworks.control.LaikagoHighLevelState.foot_position_to_com', index=8, + number=11, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='foot_velocity_to_com', full_name='minitaur_fluxworks.control.LaikagoHighLevelState.foot_velocity_to_com', index=9, + number=12, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='contact_state', full_name='minitaur_fluxworks.control.LaikagoHighLevelState.contact_state', index=10, + number=13, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='microcontroller_time_millis', full_name='minitaur_fluxworks.control.LaikagoHighLevelState.microcontroller_time_millis', index=11, + number=14, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='wireless_remote', full_name='minitaur_fluxworks.control.LaikagoHighLevelState.wireless_remote', index=12, + number=15, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=b"", + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='crc', full_name='minitaur_fluxworks.control.LaikagoHighLevelState.crc', index=13, + number=16, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1890, + serialized_end=2453, +) + + +_LAIKAGOHIGHLEVELSTATEREQUEST = _descriptor.Descriptor( + name='LaikagoHighLevelStateRequest', + full_name='minitaur_fluxworks.control.LaikagoHighLevelStateRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=2455, + serialized_end=2485, +) + + +_LAIKAGOHIGHLEVELCOMMANDSTATE = _descriptor.Descriptor( + name='LaikagoHighLevelCommandState', + full_name='minitaur_fluxworks.control.LaikagoHighLevelCommandState', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='command', full_name='minitaur_fluxworks.control.LaikagoHighLevelCommandState.command', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='state', full_name='minitaur_fluxworks.control.LaikagoHighLevelCommandState.state', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=2488, + serialized_end=2654, +) + +_LAIKAGOCOMMAND.fields_by_name['timestamp'].message_type = timestamp__pb2._TIMESTAMP +_LAIKAGOCOMMAND.fields_by_name['control_mode'].enum_type = _LAIKAGOCOMMAND_CONTROLMODE +_LAIKAGOCOMMAND.fields_by_name['motor_command'].message_type = _MOTORCOMMAND +_LAIKAGOCOMMAND.fields_by_name['led'].message_type = _LED +_LAIKAGOCOMMAND_CONTROLMODE.containing_type = _LAIKAGOCOMMAND +_IMU.fields_by_name['quaternion'].message_type = vector__pb2._VECTOR4F +_IMU.fields_by_name['gyroscope'].message_type = vector__pb2._VECTOR3F +_IMU.fields_by_name['acceleration'].message_type = vector__pb2._VECTOR3F +_IMU.fields_by_name['rpy'].message_type = vector__pb2._VECTOR3F +_CONTACTSTATE.fields_by_name['axis'].message_type = vector__pb2._VECTOR3F +_LAIKAGOSTATE.fields_by_name['timestamp'].message_type = timestamp__pb2._TIMESTAMP +_LAIKAGOSTATE.fields_by_name['imu'].message_type = _IMU +_LAIKAGOSTATE.fields_by_name['motor_state'].message_type = _MOTORSTATE +_LAIKAGOSTATE.fields_by_name['contact_state'].message_type = _CONTACTSTATE +_LAIKAGOCOMMANDSTATE.fields_by_name['command'].message_type = _LAIKAGOCOMMAND +_LAIKAGOCOMMANDSTATE.fields_by_name['state'].message_type = _LAIKAGOSTATE +_LAIKAGOHIGHLEVELCOMMAND.fields_by_name['timestamp'].message_type = timestamp__pb2._TIMESTAMP +_LAIKAGOHIGHLEVELCOMMAND.fields_by_name['walk_speed'].message_type = vector__pb2._VECTOR3F +_LAIKAGOHIGHLEVELCOMMAND.fields_by_name['rpy'].message_type = vector__pb2._VECTOR3F +_LAIKAGOHIGHLEVELSTATE.fields_by_name['timestamp'].message_type = timestamp__pb2._TIMESTAMP +_LAIKAGOHIGHLEVELSTATE.fields_by_name['imu'].message_type = _IMU +_LAIKAGOHIGHLEVELSTATE.fields_by_name['walk_speed'].message_type = vector__pb2._VECTOR3F +_LAIKAGOHIGHLEVELSTATE.fields_by_name['com_position'].message_type = vector__pb2._VECTOR3F +_LAIKAGOHIGHLEVELSTATE.fields_by_name['foot_position_to_com'].message_type = vector__pb2._VECTOR3F +_LAIKAGOHIGHLEVELSTATE.fields_by_name['foot_velocity_to_com'].message_type = vector__pb2._VECTOR3F +_LAIKAGOHIGHLEVELSTATE.fields_by_name['contact_state'].message_type = _CONTACTSTATE +_LAIKAGOHIGHLEVELCOMMANDSTATE.fields_by_name['command'].message_type = _LAIKAGOHIGHLEVELCOMMAND +_LAIKAGOHIGHLEVELCOMMANDSTATE.fields_by_name['state'].message_type = _LAIKAGOHIGHLEVELSTATE +DESCRIPTOR.message_types_by_name['MotorCommand'] = _MOTORCOMMAND +DESCRIPTOR.message_types_by_name['Led'] = _LED +DESCRIPTOR.message_types_by_name['LaikagoCommand'] = _LAIKAGOCOMMAND +DESCRIPTOR.message_types_by_name['LaikagoStateRequest'] = _LAIKAGOSTATEREQUEST +DESCRIPTOR.message_types_by_name['Imu'] = _IMU +DESCRIPTOR.message_types_by_name['MotorState'] = _MOTORSTATE +DESCRIPTOR.message_types_by_name['ContactState'] = _CONTACTSTATE +DESCRIPTOR.message_types_by_name['LaikagoState'] = _LAIKAGOSTATE +DESCRIPTOR.message_types_by_name['LaikagoCommandState'] = _LAIKAGOCOMMANDSTATE +DESCRIPTOR.message_types_by_name['LaikagoHighLevelCommand'] = _LAIKAGOHIGHLEVELCOMMAND +DESCRIPTOR.message_types_by_name['LaikagoHighLevelState'] = _LAIKAGOHIGHLEVELSTATE +DESCRIPTOR.message_types_by_name['LaikagoHighLevelStateRequest'] = _LAIKAGOHIGHLEVELSTATEREQUEST +DESCRIPTOR.message_types_by_name['LaikagoHighLevelCommandState'] = _LAIKAGOHIGHLEVELCOMMANDSTATE +_sym_db.RegisterFileDescriptor(DESCRIPTOR) + +MotorCommand = _reflection.GeneratedProtocolMessageType('MotorCommand', (_message.Message,), { + 'DESCRIPTOR' : _MOTORCOMMAND, + '__module__' : 'laikago_interface_pb2' + # @@protoc_insertion_point(class_scope:minitaur_fluxworks.control.MotorCommand) + }) +_sym_db.RegisterMessage(MotorCommand) + +Led = _reflection.GeneratedProtocolMessageType('Led', (_message.Message,), { + 'DESCRIPTOR' : _LED, + '__module__' : 'laikago_interface_pb2' + # @@protoc_insertion_point(class_scope:minitaur_fluxworks.control.Led) + }) +_sym_db.RegisterMessage(Led) + +LaikagoCommand = _reflection.GeneratedProtocolMessageType('LaikagoCommand', (_message.Message,), { + 'DESCRIPTOR' : _LAIKAGOCOMMAND, + '__module__' : 'laikago_interface_pb2' + # @@protoc_insertion_point(class_scope:minitaur_fluxworks.control.LaikagoCommand) + }) +_sym_db.RegisterMessage(LaikagoCommand) + +LaikagoStateRequest = _reflection.GeneratedProtocolMessageType('LaikagoStateRequest', (_message.Message,), { + 'DESCRIPTOR' : _LAIKAGOSTATEREQUEST, + '__module__' : 'laikago_interface_pb2' + # @@protoc_insertion_point(class_scope:minitaur_fluxworks.control.LaikagoStateRequest) + }) +_sym_db.RegisterMessage(LaikagoStateRequest) + +Imu = _reflection.GeneratedProtocolMessageType('Imu', (_message.Message,), { + 'DESCRIPTOR' : _IMU, + '__module__' : 'laikago_interface_pb2' + # @@protoc_insertion_point(class_scope:minitaur_fluxworks.control.Imu) + }) +_sym_db.RegisterMessage(Imu) + +MotorState = _reflection.GeneratedProtocolMessageType('MotorState', (_message.Message,), { + 'DESCRIPTOR' : _MOTORSTATE, + '__module__' : 'laikago_interface_pb2' + # @@protoc_insertion_point(class_scope:minitaur_fluxworks.control.MotorState) + }) +_sym_db.RegisterMessage(MotorState) + +ContactState = _reflection.GeneratedProtocolMessageType('ContactState', (_message.Message,), { + 'DESCRIPTOR' : _CONTACTSTATE, + '__module__' : 'laikago_interface_pb2' + # @@protoc_insertion_point(class_scope:minitaur_fluxworks.control.ContactState) + }) +_sym_db.RegisterMessage(ContactState) + +LaikagoState = _reflection.GeneratedProtocolMessageType('LaikagoState', (_message.Message,), { + 'DESCRIPTOR' : _LAIKAGOSTATE, + '__module__' : 'laikago_interface_pb2' + # @@protoc_insertion_point(class_scope:minitaur_fluxworks.control.LaikagoState) + }) +_sym_db.RegisterMessage(LaikagoState) + +LaikagoCommandState = _reflection.GeneratedProtocolMessageType('LaikagoCommandState', (_message.Message,), { + 'DESCRIPTOR' : _LAIKAGOCOMMANDSTATE, + '__module__' : 'laikago_interface_pb2' + # @@protoc_insertion_point(class_scope:minitaur_fluxworks.control.LaikagoCommandState) + }) +_sym_db.RegisterMessage(LaikagoCommandState) + +LaikagoHighLevelCommand = _reflection.GeneratedProtocolMessageType('LaikagoHighLevelCommand', (_message.Message,), { + 'DESCRIPTOR' : _LAIKAGOHIGHLEVELCOMMAND, + '__module__' : 'laikago_interface_pb2' + # @@protoc_insertion_point(class_scope:minitaur_fluxworks.control.LaikagoHighLevelCommand) + }) +_sym_db.RegisterMessage(LaikagoHighLevelCommand) + +LaikagoHighLevelState = _reflection.GeneratedProtocolMessageType('LaikagoHighLevelState', (_message.Message,), { + 'DESCRIPTOR' : _LAIKAGOHIGHLEVELSTATE, + '__module__' : 'laikago_interface_pb2' + # @@protoc_insertion_point(class_scope:minitaur_fluxworks.control.LaikagoHighLevelState) + }) +_sym_db.RegisterMessage(LaikagoHighLevelState) + +LaikagoHighLevelStateRequest = _reflection.GeneratedProtocolMessageType('LaikagoHighLevelStateRequest', (_message.Message,), { + 'DESCRIPTOR' : _LAIKAGOHIGHLEVELSTATEREQUEST, + '__module__' : 'laikago_interface_pb2' + # @@protoc_insertion_point(class_scope:minitaur_fluxworks.control.LaikagoHighLevelStateRequest) + }) +_sym_db.RegisterMessage(LaikagoHighLevelStateRequest) + +LaikagoHighLevelCommandState = _reflection.GeneratedProtocolMessageType('LaikagoHighLevelCommandState', (_message.Message,), { + 'DESCRIPTOR' : _LAIKAGOHIGHLEVELCOMMANDSTATE, + '__module__' : 'laikago_interface_pb2' + # @@protoc_insertion_point(class_scope:minitaur_fluxworks.control.LaikagoHighLevelCommandState) + }) +_sym_db.RegisterMessage(LaikagoHighLevelCommandState) + + + +_LAIKAGOCONTROLGRPCINTERFACE = _descriptor.ServiceDescriptor( + name='LaikagoControlGrpcInterface', + full_name='minitaur_fluxworks.control.LaikagoControlGrpcInterface', + file=DESCRIPTOR, + index=0, + serialized_options=None, + create_key=_descriptor._internal_create_key, + serialized_start=2657, + serialized_end=2894, + methods=[ + _descriptor.MethodDescriptor( + name='SendCommand', + full_name='minitaur_fluxworks.control.LaikagoControlGrpcInterface.SendCommand', + index=0, + containing_service=None, + input_type=_LAIKAGOCOMMAND, + output_type=_LAIKAGOSTATE, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='GetState', + full_name='minitaur_fluxworks.control.LaikagoControlGrpcInterface.GetState', + index=1, + containing_service=None, + input_type=_LAIKAGOSTATEREQUEST, + output_type=_LAIKAGOSTATE, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), +]) +_sym_db.RegisterServiceDescriptor(_LAIKAGOCONTROLGRPCINTERFACE) + +DESCRIPTOR.services_by_name['LaikagoControlGrpcInterface'] = _LAIKAGOCONTROLGRPCINTERFACE + + +_LAIKAGOHIGHLEVELCONTROLGRPCINTERFACE = _descriptor.ServiceDescriptor( + name='LaikagoHighLevelControlGrpcInterface', + full_name='minitaur_fluxworks.control.LaikagoHighLevelControlGrpcInterface', + file=DESCRIPTOR, + index=1, + serialized_options=None, + create_key=_descriptor._internal_create_key, + serialized_start=2897, + serialized_end=3179, + methods=[ + _descriptor.MethodDescriptor( + name='SendCommand', + full_name='minitaur_fluxworks.control.LaikagoHighLevelControlGrpcInterface.SendCommand', + index=0, + containing_service=None, + input_type=_LAIKAGOHIGHLEVELCOMMAND, + output_type=_LAIKAGOHIGHLEVELSTATE, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='GetState', + full_name='minitaur_fluxworks.control.LaikagoHighLevelControlGrpcInterface.GetState', + index=1, + containing_service=None, + input_type=_LAIKAGOHIGHLEVELSTATEREQUEST, + output_type=_LAIKAGOHIGHLEVELSTATE, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), +]) +_sym_db.RegisterServiceDescriptor(_LAIKAGOHIGHLEVELCONTROLGRPCINTERFACE) + +DESCRIPTOR.services_by_name['LaikagoHighLevelControlGrpcInterface'] = _LAIKAGOHIGHLEVELCONTROLGRPCINTERFACE + +# @@protoc_insertion_point(module_scope) diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/robots/laikago_kinematic_constants.py b/examples/pybullet/gym/pybullet_envs/minitaur/robots/laikago_kinematic_constants.py new file mode 100644 index 000000000..eae1662da --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/robots/laikago_kinematic_constants.py @@ -0,0 +1,106 @@ +# Lint as: python3 +"""Defines the LaikagoKinematic robot related constants and URDF specs.""" + +import collections +import gin + +LAIKAGO_KINEMATIC_URDF_PATH = "robotics/reinforcement_learning/minitaur/robots/data/urdf/laikago/laikago_toes_zup_kinematic.urdf" +INIT_POSITION = (0, 0, 0.5) +INIT_ORIENTATION_QUAT = (0, 0, 0, 1) +INIT_ORIENTATION_RPY = (0, 0, 0) + +NUM_LEGS = 4 +# TODO(b/153405332): Use link name instead of joint name to identify the +# base link. +BASE_NAMES = ("kinematic_drive_joint_th",) + +JOINT_NAMES = ( + "kinematic_drive_joint_x", + "kinematic_drive_joint_y", + "kinematic_drive_joint_th", + # front right leg + "FR_hip_motor_2_chassis_joint", + "FR_upper_leg_2_hip_motor_joint", + "FR_lower_leg_2_upper_leg_joint", + # front left leg + "FL_hip_motor_2_chassis_joint", + "FL_upper_leg_2_hip_motor_joint", + "FL_lower_leg_2_upper_leg_joint", + # rear right leg + "RR_hip_motor_2_chassis_joint", + "RR_upper_leg_2_hip_motor_joint", + "RR_lower_leg_2_upper_leg_joint", + # rear left leg + "RL_hip_motor_2_chassis_joint", + "RL_upper_leg_2_hip_motor_joint", + "RL_lower_leg_2_upper_leg_joint", +) + +# A default joint pose where the arm is tucked near the base, and head looking +# forward. +INIT_ABDUCTION_ANGLE = 0 +INIT_HIP_ANGLE = 0.67 +INIT_KNEE_ANGLE = -1.25 + +# Note this matches the Laikago SDK/control convention, but is different from +# URDF's internal joint angles which needs to be computed using the joint +# offsets and directions. The conversion formula is (sdk_joint_angle + offset) * +# joint direction. +INIT_JOINT_ANGLES = collections.OrderedDict( + zip(JOINT_NAMES, (0, 0, 0) + + (INIT_ABDUCTION_ANGLE, INIT_HIP_ANGLE, INIT_KNEE_ANGLE) * NUM_LEGS)) + +# Used to convert the robot SDK joint angles to URDF joint angles. +JOINT_DIRECTIONS = collections.OrderedDict( + zip(JOINT_NAMES, (1, 1, 1, -1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1))) + +HIP_JOINT_OFFSET = 0.0 +UPPER_LEG_JOINT_OFFSET = -0.6 +KNEE_JOINT_OFFSET = 0.66 + +# Used to convert the robot SDK joint angles to URDF joint angles. +JOINT_OFFSETS = collections.OrderedDict( + zip(JOINT_NAMES, [0, 0, 0] + + [HIP_JOINT_OFFSET, UPPER_LEG_JOINT_OFFSET, KNEE_JOINT_OFFSET] * + NUM_LEGS)) + +LEG_NAMES = ( + "front_right", + "front_left", + "rear_right", + "rear_left", +) + +LEG_ORDER = ( + "front_right", + "front_left", + "back_right", + "back_left", +) + +END_EFFECTOR_NAMES = ( + "jtoeFR", + "jtoeFL", + "jtoeRR", + "jtoeRL", +) + +MOTOR_NAMES = JOINT_NAMES +MOTOR_GROUP = collections.OrderedDict((("body_motors", JOINT_NAMES[3:]),)) + +# Add the gin constants to be used for gin binding in config. +gin.constant("laikago_kinematic_constants.LAIKAGO_KINEMATIC_URDF_PATH", + LAIKAGO_KINEMATIC_URDF_PATH) +gin.constant("laikago_kinematic_constants.INIT_POSITION", INIT_POSITION) +gin.constant("laikago_kinematic_constants.INIT_ORIENTATION_QUAT", + INIT_ORIENTATION_QUAT) +gin.constant("laikago_kinematic_constants.INIT_ORIENTATION_RPY", + INIT_ORIENTATION_RPY) +gin.constant("laikago_kinematic_constants.BASE_NAMES", BASE_NAMES) +gin.constant("laikago_kinematic_constants.INIT_JOINT_ANGLES", INIT_JOINT_ANGLES) +gin.constant("laikago_kinematic_constants.JOINT_DIRECTIONS", JOINT_DIRECTIONS) +gin.constant("laikago_kinematic_constants.JOINT_OFFSETS", JOINT_OFFSETS) +gin.constant("laikago_kinematic_constants.MOTOR_NAMES", MOTOR_NAMES) +gin.constant("laikago_kinematic_constants.END_EFFECTOR_NAMES", + END_EFFECTOR_NAMES) +gin.constant("laikago_kinematic_constants.MOTOR_GROUP", MOTOR_GROUP) diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/robots/laikago_motor.py b/examples/pybullet/gym/pybullet_envs/minitaur/robots/laikago_motor.py new file mode 100644 index 000000000..a57c0a964 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/robots/laikago_motor.py @@ -0,0 +1,149 @@ +"""Motor model for laikago.""" + +import collections +import numpy as np + +from pybullet_envs.minitaur.robots import robot_config + +NUM_MOTORS = 12 + +MOTOR_COMMAND_DIMENSION = 5 + +# These values represent the indices of each field in the motor command tuple +POSITION_INDEX = 0 +POSITION_GAIN_INDEX = 1 +VELOCITY_INDEX = 2 +VELOCITY_GAIN_INDEX = 3 +TORQUE_INDEX = 4 + + +class LaikagoMotorModel(object): + """A simple motor model for Laikago. + + When in POSITION mode, the torque is calculated according to the difference + between current and desired joint angle, as well as the joint velocity. + For more information about PD control, please refer to: + https://en.wikipedia.org/wiki/PID_controller. + + The model supports a HYBRID mode in which each motor command can be a tuple + (desired_motor_angle, position_gain, desired_motor_velocity, velocity_gain, + torque). + + """ + + def __init__(self, + kp=60, + kd=1, + torque_limits=None, + motor_control_mode=robot_config.MotorControlMode.POSITION): + self._kp = kp + self._kd = kd + self._torque_limits = torque_limits + if torque_limits is not None: + if isinstance(torque_limits, (collections.Sequence, np.ndarray)): + self._torque_limits = np.asarray(torque_limits) + else: + self._torque_limits = np.full(NUM_MOTORS, torque_limits) + self._motor_control_mode = motor_control_mode + self._strength_ratios = np.full(NUM_MOTORS, 1) + + def set_strength_ratios(self, ratios): + """Set the strength of each motors relative to the default value. + + Args: + ratios: The relative strength of motor output. A numpy array ranging from + 0.0 to 1.0. + """ + self._strength_ratios = ratios + + def set_motor_gains(self, kp, kd): + """Set the gains of all motors. + + These gains are PD gains for motor positional control. kp is the + proportional gain and kd is the derivative gain. + + Args: + kp: proportional gain of the motors. + kd: derivative gain of the motors. + """ + self._kp = kp + self._kd = kd + + def set_voltage(self, voltage): + pass + + def get_voltage(self): + return 0.0 + + def set_viscous_damping(self, viscous_damping): + pass + + def get_viscous_dampling(self): + return 0.0 + + def convert_to_torque(self, + motor_commands, + motor_angle, + motor_velocity, + true_motor_velocity, + motor_control_mode=None): + """Convert the commands (position control or torque control) to torque. + + Args: + motor_commands: The desired motor angle if the motor is in position + control mode. The pwm signal if the motor is in torque control mode. + motor_angle: The motor angle observed at the current time step. It is + actually the true motor angle observed a few milliseconds ago (pd + latency). + motor_velocity: The motor velocity observed at the current time step, it + is actually the true motor velocity a few milliseconds ago (pd latency). + true_motor_velocity: The true motor velocity. The true velocity is used to + compute back EMF voltage and viscous damping. + motor_control_mode: A MotorControlMode enum. + + Returns: + actual_torque: The torque that needs to be applied to the motor. + observed_torque: The torque observed by the sensor. + """ + del true_motor_velocity + if not motor_control_mode: + motor_control_mode = self._motor_control_mode + + # No processing for motor torques + if motor_control_mode is robot_config.MotorControlMode.TORQUE: + assert len(motor_commands) == NUM_MOTORS + motor_torques = self._strength_ratios * motor_commands + return motor_torques, motor_torques + + desired_motor_angles = None + desired_motor_velocities = None + kp = None + kd = None + additional_torques = np.full(NUM_MOTORS, 0) + if motor_control_mode is robot_config.MotorControlMode.POSITION: + assert len(motor_commands) == NUM_MOTORS + kp = self._kp + kd = self._kd + desired_motor_angles = motor_commands + desired_motor_velocities = np.full(NUM_MOTORS, 0) + elif motor_control_mode is robot_config.MotorControlMode.HYBRID: + # The input should be a 60 dimension vector + assert len(motor_commands) == MOTOR_COMMAND_DIMENSION * NUM_MOTORS + kp = motor_commands[POSITION_GAIN_INDEX::MOTOR_COMMAND_DIMENSION] + kd = motor_commands[VELOCITY_GAIN_INDEX::MOTOR_COMMAND_DIMENSION] + desired_motor_angles = motor_commands[ + POSITION_INDEX::MOTOR_COMMAND_DIMENSION] + desired_motor_velocities = motor_commands[ + VELOCITY_INDEX::MOTOR_COMMAND_DIMENSION] + additional_torques = motor_commands[TORQUE_INDEX::MOTOR_COMMAND_DIMENSION] + motor_torques = -1 * (kp * (motor_angle - desired_motor_angles)) - kd * ( + motor_velocity - desired_motor_velocities) + additional_torques + motor_torques = self._strength_ratios * motor_torques + if self._torque_limits is not None: + if len(self._torque_limits) != len(motor_torques): + raise ValueError( + "Torque limits dimension does not match the number of motors.") + motor_torques = np.clip(motor_torques, -1.0 * self._torque_limits, + self._torque_limits) + + return motor_torques, motor_torques diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/robots/laikago_v2.py b/examples/pybullet/gym/pybullet_envs/minitaur/robots/laikago_v2.py new file mode 100644 index 000000000..dcabd05df --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/robots/laikago_v2.py @@ -0,0 +1,34 @@ +# Lint as: python3 +"""Add the new laikago robot.""" +import gin + +from pybullet_envs.minitaur.robots import laikago_constants +from pybullet_envs.minitaur.robots import quadruped_base +from pybullet_envs.minitaur.robots import robot_urdf_loader + + +@gin.configurable +class Laikago(quadruped_base.QuadrupedBase): + """The Laikago class that simulates the quadruped from Unitree.""" + + def _pre_load(self): + """Import the Laikago specific constants. + """ + self._urdf_loader = robot_urdf_loader.RobotUrdfLoader( + pybullet_client=self._pybullet_client, + urdf_path=laikago_constants.URDF_PATH, + enable_self_collision=True, + init_base_position=laikago_constants.INIT_POSITION, + init_base_orientation_quaternion=laikago_constants.INIT_ORIENTATION, + init_joint_angles=laikago_constants.INIT_JOINT_ANGLES, + joint_offsets=laikago_constants.JOINT_OFFSETS, + joint_directions=laikago_constants.JOINT_DIRECTIONS, + motor_names=laikago_constants.MOTOR_NAMES, + end_effector_names=laikago_constants.END_EFFECTOR_NAMES, + user_group=laikago_constants.MOTOR_GROUP, + ) + + @classmethod + def get_constants(cls): + del cls + return laikago_constants diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/robots/mini_cheetah.py b/examples/pybullet/gym/pybullet_envs/minitaur/robots/mini_cheetah.py new file mode 100644 index 000000000..bc8fb1089 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/robots/mini_cheetah.py @@ -0,0 +1,133 @@ +"""Pybullet simulation of a vision60 robot.""" +import math +import os + +import gin +import numpy as np + +from pybullet_envs.minitaur.robots import laikago_motor +from pybullet_envs.minitaur.robots import minitaur +from pybullet_envs.minitaur.robots import robot_config + +NUM_MOTORS = 12 +NUM_LEGS = 4 +MOTOR_NAMES = [ + "torso_to_abduct_fl_j", # Left front abduction (hip0). + "abduct_fl_to_thigh_fl_j", # Left front hip (upper0). + "thigh_fl_to_knee_fl_j", # Left front knee (lower0). + "torso_to_abduct_hl_j", # Left rear abduction (hip1). + "abduct_hl_to_thigh_hl_j", # Left rear hip (upper1). + "thigh_hl_to_knee_hl_j", # Left rear knee (lower1). + "torso_to_abduct_fr_j", # Right front abduction (hip2). + "abduct_fr_to_thigh_fr_j", # Right front hip (upper2). + "thigh_fr_to_knee_fr_j", # Right front knee (lower2). + "torso_to_abduct_hr_j", # Right rear abduction (hip3). + "abduct_hr_to_thigh_hr_j", # Right rear hip (upper3). + "thigh_hr_to_knee_hr_j", # Right rear knee (lower3). +] +_DEFAULT_TORQUE_LIMITS = [12, 18, 12] * 4 +INIT_RACK_POSITION = [0, 0, 1.4] +INIT_POSITION = [0, 0, 0.4] +JOINT_DIRECTIONS = np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]) +HIP_JOINT_OFFSET = 0.0 +UPPER_LEG_JOINT_OFFSET = 0.0 +KNEE_JOINT_OFFSET = 0.0 +DOFS_PER_LEG = 3 +JOINT_OFFSETS = np.array( + [HIP_JOINT_OFFSET, UPPER_LEG_JOINT_OFFSET, KNEE_JOINT_OFFSET] * 4) +PI = math.pi +DEFAULT_ABDUCTION_ANGLE = 0.0 +DEFAULT_HIP_ANGLE = -1.1 +DEFAULT_KNEE_ANGLE = 2.3 +# Bases on the readings from 's default pose. +INIT_MOTOR_ANGLES = [ + DEFAULT_ABDUCTION_ANGLE, DEFAULT_HIP_ANGLE, DEFAULT_KNEE_ANGLE +] * NUM_LEGS +DEFAULT_LOCAL_TOE_POSITIONS = [[0.17, -0.11, -0.16], [0.17, 0.11, -0.16], + [-0.20, -0.11, -0.16], [-0.20, 0.11, -0.16]] + + +@gin.configurable +class MiniCheetah(minitaur.Minitaur): + """A simulation for the mini cheetah robot.""" + + def __init__(self, **kwargs): + if "motor_kp" not in kwargs: + kwargs["motor_kp"] = 100.0 + if "motor_kd" not in kwargs: + kwargs["motor_kd"] = 2.0 + if "motor_torque_limits" not in kwargs: + kwargs["motor_torque_limits"] = _DEFAULT_TORQUE_LIMITS + + # The follwing parameters are fixed for the vision60 robot. + kwargs["num_motors"] = NUM_MOTORS + kwargs["dofs_per_leg"] = DOFS_PER_LEG + kwargs["motor_direction"] = JOINT_DIRECTIONS + kwargs["motor_offset"] = JOINT_OFFSETS + kwargs["motor_overheat_protection"] = False + kwargs["motor_model_class"] = laikago_motor.LaikagoMotorModel + super(MiniCheetah, self).__init__(**kwargs) + + def _LoadRobotURDF(self): + mini_cheetah_urdf_path = "mini_cheetah/mini_cheetah.urdf" + if self._self_collision_enabled: + self.quadruped = self._pybullet_client.loadURDF( + mini_cheetah_urdf_path, + self._GetDefaultInitPosition(), + self._GetDefaultInitOrientation(), + flags=self._pybullet_client.URDF_USE_SELF_COLLISION) + else: + self.quadruped = self._pybullet_client.loadURDF( + mini_cheetah_urdf_path, self._GetDefaultInitPosition(), + self._GetDefaultInitOrientation()) + + def _SettleDownForReset(self, default_motor_angles, reset_time): + self.ReceiveObservation() + for _ in range(500): + self.ApplyAction( + INIT_MOTOR_ANGLES, + motor_control_mode=robot_config.MotorControlMode.POSITION) + self._pybullet_client.stepSimulation() + self.ReceiveObservation() + if default_motor_angles is not None: + num_steps_to_reset = int(reset_time / self.time_step) + for _ in range(num_steps_to_reset): + self.ApplyAction( + default_motor_angles, + motor_control_mode=robot_config.MotorControlMode.POSITION) + self._pybullet_client.stepSimulation() + self.ReceiveObservation() + + def GetURDFFile(self): + return os.path.join(self._urdf_root, "mini_cheetah/mini_cheetah.urdf") + + def ResetPose(self, add_constraint): + del add_constraint + for name in self._joint_name_to_id: + joint_id = self._joint_name_to_id[name] + self._pybullet_client.setJointMotorControl2( + bodyIndex=self.quadruped, + jointIndex=(joint_id), + controlMode=self._pybullet_client.VELOCITY_CONTROL, + targetVelocity=0, + force=0) + for name, i in zip(MOTOR_NAMES, range(len(MOTOR_NAMES))): + angle = INIT_MOTOR_ANGLES[i] + self._pybullet_client.resetJointState( + self.quadruped, self._joint_name_to_id[name], angle, targetVelocity=0) + + def _BuildUrdfIds(self): + pass + + def _GetMotorNames(self): + return MOTOR_NAMES + + def _GetDefaultInitPosition(self): + if self._on_rack: + return INIT_RACK_POSITION + else: + return INIT_POSITION + + def _GetDefaultInitOrientation(self): + init_orientation = [0, 0, 0, 1.0] + return init_orientation diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/robots/mini_cheetah_test.py b/examples/pybullet/gym/pybullet_envs/minitaur/robots/mini_cheetah_test.py new file mode 100644 index 000000000..94acf54c0 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/robots/mini_cheetah_test.py @@ -0,0 +1,58 @@ +"""Tests for pybullet_envs.minitaur.robots.mini_cheetah. + +blaze test -c opt +//robotics/reinforcement_learning/minitaur/robots:mini_cheetah_test +""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import math +import numpy as np +from pybullet_envs.minitaur.envs import bullet_client +from pybullet_envs.minitaur.robots import mini_cheetah +from google3.testing.pybase import googletest + +PI = math.pi +NUM_STEPS = 500 +TIME_STEP = 0.002 +INIT_MOTOR_ANGLES = [0, -0.6, 1.4] * 4 + + +class MiniCheetahTest(googletest.TestCase): + + def test_init(self): + pybullet_client = bullet_client.BulletClient() + pybullet_client.enable_cns() + robot = mini_cheetah.MiniCheetah( + pybullet_client=pybullet_client, time_step=TIME_STEP, on_rack=True) + self.assertIsNotNone(robot) + + def test_static_pose_on_rack(self): + pybullet_client = bullet_client.BulletClient() + pybullet_client.enable_cns() + pybullet_client.resetSimulation() + pybullet_client.setPhysicsEngineParameter(numSolverIterations=60) + pybullet_client.setTimeStep(TIME_STEP) + pybullet_client.setGravity(0, 0, -10) + + robot = ( + mini_cheetah.MiniCheetah( + pybullet_client=pybullet_client, + action_repeat=5, + time_step=0.002, + on_rack=True)) + robot.Reset( + reload_urdf=False, + default_motor_angles=INIT_MOTOR_ANGLES, + reset_time=0.5) + for _ in range(NUM_STEPS): + robot.Step(INIT_MOTOR_ANGLES) + motor_angles = robot.GetMotorAngles() + np.testing.assert_array_almost_equal( + motor_angles, INIT_MOTOR_ANGLES, decimal=2) + + +if __name__ == '__main__': + googletest.main() diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/robots/minitaur.py b/examples/pybullet/gym/pybullet_envs/minitaur/robots/minitaur.py new file mode 100644 index 000000000..9494c9ef0 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/robots/minitaur.py @@ -0,0 +1,1479 @@ +"""This file implements the functionalities of a minitaur using pybullet.""" +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import collections +import copy +import logging +import math +import re +import numpy as np +import gin +from pybullet_envs.minitaur.robots import minitaur_constants +from pybullet_envs.minitaur.robots import minitaur_motor +from pybullet_envs.minitaur.robots import robot_config +from pybullet_envs.minitaur.robots.safety import safety_checker +from pybullet_envs.minitaur.robots.safety import safety_error +from pybullet_envs.minitaur.robots.utilities import action_filter +from pybullet_envs.minitaur.robots.utilities import kinematics + +INIT_POSITION = [0, 0, .2] +INIT_RACK_POSITION = [0, 0, 1] +INIT_ORIENTATION = [0, 0, 0, 1] +KNEE_CONSTRAINT_POINT_RIGHT = [0, 0.005, 0.2] +KNEE_CONSTRAINT_POINT_LEFT = [0, 0.01, 0.2] +OVERHEAT_SHUTDOWN_TORQUE = 2.45 +OVERHEAT_SHUTDOWN_TIME = 1.0 +LEG_POSITION = ["front_left", "back_left", "front_right", "back_right"] +MOTOR_NAMES = [ + "motor_front_leftL_joint", "motor_front_leftR_joint", + "motor_back_leftL_joint", "motor_back_leftR_joint", + "motor_front_rightL_joint", "motor_front_rightR_joint", + "motor_back_rightL_joint", "motor_back_rightR_joint" +] +_CHASSIS_NAME_PATTERN = re.compile(r"chassis\D*center") +_MOTOR_NAME_PATTERN = re.compile(r"motor\D*joint") +_KNEE_NAME_PATTERN = re.compile(r"knee\D*") +_BRACKET_NAME_PATTERN = re.compile(r"motor\D*_bracket_joint") +_LEG_NAME_PATTERN1 = re.compile(r"hip\D*joint") +_LEG_NAME_PATTERN2 = re.compile(r"hip\D*link") +_LEG_NAME_PATTERN3 = re.compile(r"motor\D*link") +SENSOR_NOISE_STDDEV = (0.0, 0.0, 0.0, 0.0, 0.0) +MINITAUR_DEFAULT_MOTOR_DIRECTIONS = (-1, -1, -1, -1, 1, 1, 1, 1) +MINITAUR_DEFAULT_MOTOR_OFFSETS = (0, 0, 0, 0, 0, 0, 0, 0) +MINITAUR_NUM_MOTORS = 8 +TWO_PI = 2 * math.pi +MINITAUR_DOFS_PER_LEG = 2 + +URDF_ROOT = "robotics/reinforcement_learning/minitaur/robots/data/urdf/" + + +def MapToMinusPiToPi(angles): + """Maps a list of angles to [-pi, pi]. + + Args: + angles: A list of angles in rad. + + Returns: + A list of angle mapped to [-pi, pi]. + """ + mapped_angles = copy.deepcopy(angles) + for i in range(len(angles)): + mapped_angles[i] = math.fmod(angles[i], TWO_PI) + if mapped_angles[i] >= math.pi: + mapped_angles[i] -= TWO_PI + elif mapped_angles[i] < -math.pi: + mapped_angles[i] += TWO_PI + return mapped_angles + + +@gin.configurable +class Minitaur(object): + """The minitaur class that simulates a quadruped robot from Ghost Robotics.""" + + def __init__(self, + pybullet_client, + num_motors=MINITAUR_NUM_MOTORS, + dofs_per_leg=MINITAUR_DOFS_PER_LEG, + urdf_root=URDF_ROOT, + time_step=0.01, + action_repeat=1, + self_collision_enabled=False, + motor_control_mode=robot_config.MotorControlMode.POSITION, + motor_model_class=minitaur_motor.MotorModel, + motor_kp=1.0, + motor_kd=0.02, + motor_torque_limits=None, + pd_latency=0.0, + control_latency=0.0, + observation_noise_stdev=SENSOR_NOISE_STDDEV, + motor_overheat_protection=False, + motor_direction=MINITAUR_DEFAULT_MOTOR_DIRECTIONS, + motor_offset=MINITAUR_DEFAULT_MOTOR_OFFSETS, + on_rack=False, + reset_at_current_position=False, + sensors=None, + safety_config=None, + enable_action_interpolation=False, + enable_action_filter=False): + """Constructs a minitaur and reset it to the initial states. + + Args: + pybullet_client: The instance of BulletClient to manage different + simulations. + num_motors: The number of the motors on the robot. + dofs_per_leg: The number of degrees of freedom for each leg. + urdf_root: The path to the urdf folder. + time_step: The time step of the simulation. + action_repeat: The number of ApplyAction() for each control step. + self_collision_enabled: Whether to enable self collision. + motor_control_mode: Enum. Can either be POSITION, TORQUE, or HYBRID. + motor_model_class: We can choose from simple pd model to more accureate DC + motor models. + motor_kp: proportional gain for the motors. + motor_kd: derivative gain for the motors. + motor_torque_limits: Torque limits for the motors. Can be a single float + or a list of floats specifying different limits for different robots. If + not provided, the default limit of the robot is used. + pd_latency: The latency of the observations (in seconds) used to calculate + PD control. On the real hardware, it is the latency between the + microcontroller and the motor controller. + control_latency: The latency of the observations (in second) used to + calculate action. On the real hardware, it is the latency from the motor + controller, the microcontroller to the host (Nvidia TX2). + observation_noise_stdev: The standard deviation of a Gaussian noise model + for the sensor. It should be an array for separate sensors in the + following order [motor_angle, motor_velocity, motor_torque, + base_roll_pitch_yaw, base_angular_velocity] + motor_overheat_protection: Whether to shutdown the motor that has exerted + large torque (OVERHEAT_SHUTDOWN_TORQUE) for an extended amount of time + (OVERHEAT_SHUTDOWN_TIME). See ApplyAction() in minitaur.py for more + details. + motor_direction: A list of direction values, either 1 or -1, to compensate + the axis difference of motors between the simulation and the real robot. + motor_offset: A list of offset value for the motor angles. This is used to + compensate the angle difference between the simulation and the real + robot. + on_rack: Whether to place the minitaur on rack. This is only used to debug + the walking gait. In this mode, the minitaur's base is hanged midair so + that its walking gait is clearer to visualize. + reset_at_current_position: Whether to reset the minitaur at the current + position and orientation. This is for simulating the reset behavior in + the real world. + sensors: a list of sensors that are attached to the robot. + safety_config: A SafetyConfig class to configure the safety layer. If + None, the safety layer will be disabled. + enable_action_interpolation: Whether to interpolate the current action + with the previous action in order to produce smoother motions + enable_action_filter: Boolean specifying if a lowpass filter should be + used to smooth actions. + """ + self.num_motors = num_motors + self.num_legs = self.num_motors // dofs_per_leg + self._pybullet_client = pybullet_client + self._action_repeat = action_repeat + self._urdf_root = urdf_root + self._self_collision_enabled = self_collision_enabled + self._motor_direction = motor_direction + self._motor_offset = motor_offset + self._observed_motor_torques = np.zeros(self.num_motors) + self._applied_motor_torques = np.zeros(self.num_motors) + self._max_force = 3.5 + self._pd_latency = pd_latency + self._control_latency = control_latency + self._observation_noise_stdev = observation_noise_stdev + self._observation_history = collections.deque(maxlen=100) + self._control_observation = [] + self._chassis_link_ids = [-1] + self._leg_link_ids = [] + self._motor_link_ids = [] + self._foot_link_ids = [] + self._motor_overheat_protection = motor_overheat_protection + self._on_rack = on_rack + self._reset_at_current_position = reset_at_current_position + self.SetAllSensors(sensors if sensors is not None else list()) + self.safety_config = safety_config + self._is_safe = True + self._safety_checker = None + + self._enable_action_interpolation = enable_action_interpolation + self._enable_action_filter = enable_action_filter + self._last_action = None + + if not motor_model_class: + raise ValueError("Must provide a motor model class!") + + if self._on_rack and self._reset_at_current_position: + raise ValueError("on_rack and reset_at_current_position " + "cannot be enabled together") + + if isinstance(motor_kp, (collections.Sequence, np.ndarray)): + self._motor_kps = np.asarray(motor_kp) + else: + self._motor_kps = np.full(num_motors, motor_kp) + + if isinstance(motor_kd, (collections.Sequence, np.ndarray)): + self._motor_kds = np.asarray(motor_kd) + else: + self._motor_kds = np.full(num_motors, motor_kd) + + if isinstance(motor_torque_limits, (collections.Sequence, np.ndarray)): + self._motor_torque_limits = np.asarray(motor_torque_limits) + elif motor_torque_limits is None: + self._motor_torque_limits = None + else: + self._motor_torque_limits = motor_torque_limits + + self._motor_control_mode = motor_control_mode + self._motor_model = motor_model_class( + kp=motor_kp, + kd=motor_kd, + torque_limits=self._motor_torque_limits, + motor_control_mode=motor_control_mode) + + self.time_step = time_step + self._step_counter = 0 + + # This also includes the time spent during the Reset motion. + self._state_action_counter = 0 + _, self._init_orientation_inv = self._pybullet_client.invertTransform( + position=[0, 0, 0], orientation=self._GetDefaultInitOrientation()) + + if self._enable_action_filter: + self._action_filter = self._BuildActionFilter() + # reset_time=-1.0 means skipping the reset motion. + # See Reset for more details. + self.Reset(reset_time=-1.0) + self.ReceiveObservation() + + return + + def GetTimeSinceReset(self): + return self._step_counter * self.time_step + + def _StepInternal(self, action, motor_control_mode=None): + self.ApplyAction(action, motor_control_mode) + self._pybullet_client.stepSimulation() + self.ReceiveObservation() + self._state_action_counter += 1 + + return + + def Step(self, action): + """Steps simulation.""" + if self._enable_action_filter: + action = self._FilterAction(action) + + for i in range(self._action_repeat): + proc_action = self.ProcessAction(action, i) + self._StepInternal(proc_action) + self._step_counter += 1 + + self._last_action = action + return + + def Terminate(self): + pass + + def GetKneeLinkIDs(self): + """Get list of IDs for all knee links.""" + return self._knee_link_ids + + def GetFootLinkIDs(self): + """Get list of IDs for all foot links.""" + return self._foot_link_ids + + def _RecordMassInfoFromURDF(self): + """Records the mass information from the URDF file.""" + self._base_mass_urdf = [] + for chassis_id in self._chassis_link_ids: + self._base_mass_urdf.append( + self._pybullet_client.getDynamicsInfo(self.quadruped, chassis_id)[0]) + self._leg_masses_urdf = [] + for leg_id in self._leg_link_ids: + self._leg_masses_urdf.append( + self._pybullet_client.getDynamicsInfo(self.quadruped, leg_id)[0]) + for motor_id in self._motor_link_ids: + self._leg_masses_urdf.append( + self._pybullet_client.getDynamicsInfo(self.quadruped, motor_id)[0]) + + def _RecordInertiaInfoFromURDF(self): + """Record the inertia of each body from URDF file.""" + self._link_urdf = [] + num_bodies = self._pybullet_client.getNumJoints(self.quadruped) + for body_id in range(-1, num_bodies): # -1 is for the base link. + inertia = self._pybullet_client.getDynamicsInfo(self.quadruped, + body_id)[2] + self._link_urdf.append(inertia) + # We need to use id+1 to index self._link_urdf because it has the base + # (index = -1) at the first element. + self._base_inertia_urdf = [ + self._link_urdf[chassis_id + 1] for chassis_id in self._chassis_link_ids + ] + self._leg_inertia_urdf = [ + self._link_urdf[leg_id + 1] for leg_id in self._leg_link_ids + ] + self._leg_inertia_urdf.extend( + [self._link_urdf[motor_id + 1] for motor_id in self._motor_link_ids]) + + def _BuildJointNameToIdDict(self): + num_joints = self._pybullet_client.getNumJoints(self.quadruped) + self._joint_name_to_id = {} + for i in range(num_joints): + joint_info = self._pybullet_client.getJointInfo(self.quadruped, i) + self._joint_name_to_id[joint_info[1].decode("UTF-8")] = joint_info[0] + + def _BuildUrdfIds(self): + """Build the link Ids from its name in the URDF file. + + Raises: + ValueError: Unknown category of the joint name. + """ + num_joints = self._pybullet_client.getNumJoints(self.quadruped) + self._chassis_link_ids = [-1] + # The self._leg_link_ids include both the upper and lower links of the leg. + self._leg_link_ids = [] + self._motor_link_ids = [] + self._foot_link_ids = [] + self._bracket_link_ids = [] + for i in range(num_joints): + joint_info = self._pybullet_client.getJointInfo(self.quadruped, i) + joint_name = joint_info[1].decode("UTF-8") + joint_id = self._joint_name_to_id[joint_name] + if _CHASSIS_NAME_PATTERN.match(joint_name): + self._chassis_link_ids.append(joint_id) + elif _BRACKET_NAME_PATTERN.match(joint_name): + self._bracket_link_ids.append(joint_id) + elif _MOTOR_NAME_PATTERN.match(joint_name): + self._motor_link_ids.append(joint_id) + elif _KNEE_NAME_PATTERN.match(joint_name): + self._foot_link_ids.append(joint_id) + elif (_LEG_NAME_PATTERN1.match(joint_name) or + _LEG_NAME_PATTERN2.match(joint_name) or + _LEG_NAME_PATTERN3.match(joint_name)): + self._leg_link_ids.append(joint_id) + else: + raise ValueError("Unknown category of joint %s" % joint_name) + + self._leg_link_ids.extend(self._foot_link_ids) + self._chassis_link_ids.sort() + self._motor_link_ids.sort() + self._foot_link_ids.sort() + self._leg_link_ids.sort() + self._bracket_link_ids.sort() + + def _RemoveDefaultJointDamping(self): + num_joints = self._pybullet_client.getNumJoints(self.quadruped) + for i in range(num_joints): + joint_info = self._pybullet_client.getJointInfo(self.quadruped, i) + self._pybullet_client.changeDynamics( + joint_info[0], -1, linearDamping=0, angularDamping=0) + + def _BuildMotorIdList(self): + self._motor_id_list = [ + self._joint_name_to_id[motor_name] + for motor_name in self._GetMotorNames() + ] + + def _CreateRackConstraint(self, init_position, init_orientation): + """Create a constraint that keeps the chassis at a fixed frame. + + This frame is defined by init_position and init_orientation. + + Args: + init_position: initial position of the fixed frame. + init_orientation: initial orientation of the fixed frame in quaternion + format [x,y,z,w]. + + Returns: + Return the constraint id. + """ + fixed_constraint = self._pybullet_client.createConstraint( + parentBodyUniqueId=self.quadruped, + parentLinkIndex=-1, + childBodyUniqueId=-1, + childLinkIndex=-1, + jointType=self._pybullet_client.JOINT_FIXED, + jointAxis=[0, 0, 0], + parentFramePosition=[0, 0, 0], + childFramePosition=init_position, + childFrameOrientation=init_orientation) + return fixed_constraint + + def IsObservationValid(self): + """Whether the observation is valid for the current time step. + + In simulation, observations are always valid. In real hardware, it may not + be valid from time to time when communication error happens between the + Nvidia TX2 and the microcontroller. + + Returns: + Whether the observation is valid for the current time step. + """ + return True + + def Reset(self, reload_urdf=True, default_motor_angles=None, reset_time=3.0): + """Reset the minitaur to its initial states. + + Args: + reload_urdf: Whether to reload the urdf file. If not, Reset() just place + the minitaur back to its starting position. + default_motor_angles: The default motor angles. If it is None, minitaur + will hold a default pose (motor angle math.pi / 2) for 100 steps. In + torque control mode, the phase of holding the default pose is skipped. + reset_time: The duration (in seconds) to hold the default motor angles. If + reset_time <= 0 or in torque control mode, the phase of holding the + default pose is skipped. + """ + if reload_urdf: + self._LoadRobotURDF() + if self._on_rack: + self.rack_constraint = ( + self._CreateRackConstraint(self._GetDefaultInitPosition(), + self._GetDefaultInitOrientation())) + self._BuildJointNameToIdDict() + self._BuildUrdfIds() + self._RemoveDefaultJointDamping() + self._BuildMotorIdList() + self._RecordMassInfoFromURDF() + self._RecordInertiaInfoFromURDF() + self.ResetPose(add_constraint=True) + else: + self._pybullet_client.resetBasePositionAndOrientation( + self.quadruped, self._GetDefaultInitPosition(), + self._GetDefaultInitOrientation()) + self._pybullet_client.resetBaseVelocity(self.quadruped, [0, 0, 0], + [0, 0, 0]) + self.ResetPose(add_constraint=False) + + self._overheat_counter = np.zeros(self.num_motors) + self._motor_enabled_list = [True] * self.num_motors + self._observation_history.clear() + self._step_counter = 0 + self._state_action_counter = 0 + self._is_safe = True + self._last_action = None + + # Enable the safety layer before we perform any reset motions. + if self.safety_config: + self._safety_checker = safety_checker.SafetyChecker(self) + self._SettleDownForReset(default_motor_angles, reset_time) + + if self._enable_action_filter: + self._ResetActionFilter() + + return + + def _LoadRobotURDF(self): + """Loads the URDF file for the robot.""" + urdf_file = self.GetURDFFile() + if self._self_collision_enabled: + self.quadruped = self._pybullet_client.loadURDF( + urdf_file, + self._GetDefaultInitPosition(), + self._GetDefaultInitOrientation(), + flags=self._pybullet_client.URDF_USE_SELF_COLLISION) + else: + self.quadruped = self._pybullet_client.loadURDF( + urdf_file, self._GetDefaultInitPosition(), + self._GetDefaultInitOrientation()) + + def _SettleDownForReset(self, default_motor_angles, reset_time): + """Sets the default motor angles and waits for the robot to settle down. + + The reset is skipped is reset_time is less than zereo. + + Args: + default_motor_angles: A list of motor angles that the robot will achieve + at the end of the reset phase. + reset_time: The time duration for the reset phase. + """ + if reset_time <= 0: + return + + # Important to fill the observation buffer. + self.ReceiveObservation() + for _ in range(100): + self._StepInternal( + [math.pi / 2] * self.num_motors, + motor_control_mode=robot_config.MotorControlMode.POSITION) + # Don't continue to reset if a safety error has occurred. + if not self._is_safe: + return + + if default_motor_angles is None: + return + + num_steps_to_reset = int(reset_time / self.time_step) + for _ in range(num_steps_to_reset): + self._StepInternal( + default_motor_angles, + motor_control_mode=robot_config.MotorControlMode.POSITION) + # Don't continue to reset if a safety error has occurred. + if not self._is_safe: + return + + def _SetMotorTorqueById(self, motor_id, torque): + self._pybullet_client.setJointMotorControl2( + bodyIndex=self.quadruped, + jointIndex=motor_id, + controlMode=self._pybullet_client.TORQUE_CONTROL, + force=torque) + + def _SetMotorTorqueByIds(self, motor_ids, torques): + self._pybullet_client.setJointMotorControlArray( + bodyIndex=self.quadruped, + jointIndices=motor_ids, + controlMode=self._pybullet_client.TORQUE_CONTROL, + forces=torques) + + def _SetDesiredMotorAngleByName(self, motor_name, desired_angle): + self._SetDesiredMotorAngleById(self._joint_name_to_id[motor_name], + desired_angle) + + def GetURDFFile(self): + return "%s/quadruped/minitaur.urdf" % self._urdf_root + + def ResetPose(self, add_constraint): + """Reset the pose of the minitaur. + + Args: + add_constraint: Whether to add a constraint at the joints of two feet. + """ + for i in range(self.num_legs): + self._ResetPoseForLeg(i, add_constraint) + + def _ResetPoseForLeg(self, leg_id, add_constraint): + """Reset the initial pose for the leg. + + Args: + leg_id: It should be 0, 1, 2, or 3, which represents the leg at + front_left, back_left, front_right and back_right. + add_constraint: Whether to add a constraint at the joints of two feet. + """ + knee_friction_force = 0 + half_pi = math.pi / 2.0 + knee_angle = -2.1834 + + leg_position = LEG_POSITION[leg_id] + self._pybullet_client.resetJointState( + self.quadruped, + self._joint_name_to_id["motor_" + leg_position + "L_joint"], + self._motor_direction[2 * leg_id] * half_pi, + targetVelocity=0) + self._pybullet_client.resetJointState( + self.quadruped, + self._joint_name_to_id["knee_" + leg_position + "L_link"], + self._motor_direction[2 * leg_id] * knee_angle, + targetVelocity=0) + self._pybullet_client.resetJointState( + self.quadruped, + self._joint_name_to_id["motor_" + leg_position + "R_joint"], + self._motor_direction[2 * leg_id + 1] * half_pi, + targetVelocity=0) + self._pybullet_client.resetJointState( + self.quadruped, + self._joint_name_to_id["knee_" + leg_position + "R_link"], + self._motor_direction[2 * leg_id + 1] * knee_angle, + targetVelocity=0) + if add_constraint: + self._pybullet_client.createConstraint( + self.quadruped, + self._joint_name_to_id["knee_" + leg_position + "R_link"], + self.quadruped, + self._joint_name_to_id["knee_" + leg_position + "L_link"], + self._pybullet_client.JOINT_POINT2POINT, [0, 0, 0], + KNEE_CONSTRAINT_POINT_RIGHT, KNEE_CONSTRAINT_POINT_LEFT) + + # Disable the default motor in pybullet. + self._pybullet_client.setJointMotorControl2( + bodyIndex=self.quadruped, + jointIndex=(self._joint_name_to_id["motor_" + leg_position + + "L_joint"]), + controlMode=self._pybullet_client.VELOCITY_CONTROL, + targetVelocity=0, + force=knee_friction_force) + self._pybullet_client.setJointMotorControl2( + bodyIndex=self.quadruped, + jointIndex=(self._joint_name_to_id["motor_" + leg_position + + "R_joint"]), + controlMode=self._pybullet_client.VELOCITY_CONTROL, + targetVelocity=0, + force=knee_friction_force) + + self._pybullet_client.setJointMotorControl2( + bodyIndex=self.quadruped, + jointIndex=(self._joint_name_to_id["knee_" + leg_position + "L_link"]), + controlMode=self._pybullet_client.VELOCITY_CONTROL, + targetVelocity=0, + force=knee_friction_force) + self._pybullet_client.setJointMotorControl2( + bodyIndex=self.quadruped, + jointIndex=(self._joint_name_to_id["knee_" + leg_position + "R_link"]), + controlMode=self._pybullet_client.VELOCITY_CONTROL, + targetVelocity=0, + force=knee_friction_force) + + def GetBasePosition(self): + """Get the position of minitaur's base. + + Returns: + The position of minitaur's base. + """ + return self._base_position + + def GetBaseVelocity(self): + """Get the linear velocity of minitaur's base. + + Returns: + The velocity of minitaur's base. + """ + velocity, _ = self._pybullet_client.getBaseVelocity(self.quadruped) + return velocity + + def GetTrueBaseRollPitchYaw(self): + """Get minitaur's base orientation in euler angle in the world frame. + + Returns: + A tuple (roll, pitch, yaw) of the base in world frame. + """ + orientation = self.GetTrueBaseOrientation() + roll_pitch_yaw = self._pybullet_client.getEulerFromQuaternion(orientation) + return np.asarray(roll_pitch_yaw) + + def GetBaseRollPitchYaw(self): + """Get minitaur's base orientation in euler angle in the world frame. + + This function mimicks the noisy sensor reading and adds latency. + Returns: + A tuple (roll, pitch, yaw) of the base in world frame polluted by noise + and latency. + """ + delayed_orientation = np.array( + self._control_observation[3 * self.num_motors:3 * self.num_motors + 4]) + delayed_roll_pitch_yaw = self._pybullet_client.getEulerFromQuaternion( + delayed_orientation) + roll_pitch_yaw = self._AddSensorNoise( + np.array(delayed_roll_pitch_yaw), self._observation_noise_stdev[3]) + return roll_pitch_yaw + + def GetHipPositionsInBaseFrame(self): + """Get the hip joint positions of the robot within its base frame.""" + raise NotImplementedError("Not implemented for Minitaur.") + + def _EndEffectorIK(self, leg_id, position, position_in_world_frame): + """Calculate the joint positions from the end effector position.""" + assert len(self._foot_link_ids) == self.num_legs + toe_id = self._foot_link_ids[leg_id] + motors_per_leg = self.num_motors // self.num_legs + joint_position_idxs = [ + i for i in range(leg_id * motors_per_leg, leg_id * motors_per_leg + + motors_per_leg) + ] + joint_angles = kinematics.joint_angles_from_link_position( + robot=self, + link_position=position, + link_id=toe_id, + joint_ids=joint_position_idxs, + position_in_world_frame=position_in_world_frame) + # Joint offset is necessary for Laikago. + joint_angles = np.multiply( + np.asarray(joint_angles) - + np.asarray(self._motor_offset)[joint_position_idxs], + self._motor_direction[joint_position_idxs]) + # Return the joing index (the same as when calling GetMotorAngles) as well + # as the angles. + return joint_position_idxs, joint_angles.tolist() + + # TODO(b/154361633): Implements an array version of this following function. + def ComputeMotorAnglesFromFootWorldPosition(self, leg_id, + foot_world_position): + """Use IK to compute the motor angles, given the foot link's position. + + Args: + leg_id: The leg index. + foot_world_position: The foot link's position in the world frame. + + Returns: + A tuple. The position indices and the angles for all joints along the + leg. The position indices is consistent with the joint orders as returned + by GetMotorAngles API. + """ + return self._EndEffectorIK( + leg_id, foot_world_position, position_in_world_frame=True) + + def ComputeMotorAnglesFromFootLocalPosition(self, leg_id, + foot_local_position): + """Use IK to compute the motor angles, given the foot link's local position. + + Args: + leg_id: The leg index. + foot_local_position: The foot link's position in the base frame. + + Returns: + A tuple. The position indices and the angles for all joints along the + leg. The position indices is consistent with the joint orders as returned + by GetMotorAngles API. + """ + return self._EndEffectorIK( + leg_id, foot_local_position, position_in_world_frame=False) + + def ComputeJacobian(self, leg_id): + """Compute the Jacobian for a given leg.""" + # Does not work for Minitaur which has the four bar mechanism for now. + assert len(self._foot_link_ids) == self.num_legs + return kinematics.compute_jacobian( + robot=self, + link_id=self._foot_link_ids[leg_id], + ) + + def MapContactForceToJointTorques(self, leg_id, contact_force): + """Maps the foot contact force to the leg joint torques.""" + jv = self.ComputeJacobian(leg_id) + all_motor_torques = np.matmul(contact_force, jv) + motor_torques = {} + motors_per_leg = self.num_motors // self.num_legs + com_dof = 6 + for joint_id in range(leg_id * motors_per_leg, + (leg_id + 1) * motors_per_leg): + motor_torques[joint_id] = all_motor_torques[ + com_dof + joint_id] * self._motor_direction[joint_id] + + return motor_torques + + def GetFootContacts(self): + """Get minitaur's foot contact situation with the ground. + + Returns: + A list of 4 booleans. The ith boolean is True if leg i is in contact with + ground. + """ + contacts = [] + for leg_idx in range(MINITAUR_NUM_MOTORS // 2): + link_id_1 = self._foot_link_ids[leg_idx * 2] + link_id_2 = self._foot_link_ids[leg_idx * 2 + 1] + contact_1 = bool( + self._pybullet_client.getContactPoints( + bodyA=0, + bodyB=self.quadruped, + linkIndexA=-1, + linkIndexB=link_id_1)) + contact_2 = bool( + self._pybullet_client.getContactPoints( + bodyA=0, + bodyB=self.quadruped, + linkIndexA=-1, + linkIndexB=link_id_2)) + contacts.append(contact_1 or contact_2) + return contacts + + def GetFootPositionsInWorldFrame(self): + """Get the robot's foot position in the base frame.""" + assert len(self._foot_link_ids) == self.num_legs + foot_positions = [] + for foot_id in self.GetFootLinkIDs(): + foot_positions.append( + kinematics.link_position_in_world_frame( + robot=self, + link_id=foot_id, + )) + return np.array(foot_positions) + + def GetFootPositionsInBaseFrame(self): + """Get the robot's foot position in the base frame.""" + assert len(self._foot_link_ids) == self.num_legs + foot_positions = [] + for foot_id in self.GetFootLinkIDs(): + foot_positions.append( + kinematics.link_position_in_base_frame( + robot=self, + link_id=foot_id, + )) + return np.array(foot_positions) + + def GetTrueMotorAngles(self): + """Gets the eight motor angles at the current moment, mapped to [-pi, pi]. + + Returns: + Motor angles, mapped to [-pi, pi]. + """ + motor_angles = [state[0] for state in self._joint_states] + motor_angles = np.multiply( + np.asarray(motor_angles) - np.asarray(self._motor_offset), + self._motor_direction) + return motor_angles + + def GetMotorAngles(self): + """Gets the eight motor angles. + + This function mimicks the noisy sensor reading and adds latency. The motor + angles that are delayed, noise polluted, and mapped to [-pi, pi]. + + Returns: + Motor angles polluted by noise and latency, mapped to [-pi, pi]. + """ + motor_angles = self._AddSensorNoise( + np.array(self._control_observation[0:self.num_motors]), + self._observation_noise_stdev[0]) + return MapToMinusPiToPi(motor_angles) + + def GetTrueMotorVelocities(self): + """Get the velocity of all eight motors. + + Returns: + Velocities of all eight motors. + """ + motor_velocities = [state[1] for state in self._joint_states] + + motor_velocities = np.multiply(motor_velocities, self._motor_direction) + return motor_velocities + + def GetMotorVelocities(self): + """Get the velocity of all eight motors. + + This function mimicks the noisy sensor reading and adds latency. + Returns: + Velocities of all eight motors polluted by noise and latency. + """ + return self._AddSensorNoise( + np.array(self._control_observation[self.num_motors:2 * + self.num_motors]), + self._observation_noise_stdev[1]) + + def GetTrueMotorTorques(self): + """Get the amount of torque the motors are exerting. + + Returns: + Motor torques of all eight motors. + """ + return self._observed_motor_torques + + def GetMotorTorques(self): + """Get the amount of torque the motors are exerting. + + This function mimicks the noisy sensor reading and adds latency. + Returns: + Motor torques of all eight motors polluted by noise and latency. + """ + return self._AddSensorNoise( + np.array(self._control_observation[2 * self.num_motors:3 * + self.num_motors]), + self._observation_noise_stdev[2]) + + def GetEnergyConsumptionPerControlStep(self): + """Get the amount of energy used in last one time step. + + Returns: + Energy Consumption based on motor velocities and torques (Nm^2/s). + """ + return np.abs(np.dot( + self.GetMotorTorques(), + self.GetMotorVelocities())) * self.time_step * self._action_repeat + + def GetTrueBaseOrientation(self): + """Get the orientation of minitaur's base, represented as quaternion. + + Returns: + The orientation of minitaur's base. + """ + return self._base_orientation + + def GetBaseOrientation(self): + """Get the orientation of minitaur's base, represented as quaternion. + + This function mimicks the noisy sensor reading and adds latency. + Returns: + The orientation of minitaur's base polluted by noise and latency. + """ + return self._pybullet_client.getQuaternionFromEuler( + self.GetBaseRollPitchYaw()) + + def GetTrueBaseRollPitchYawRate(self): + """Get the rate of orientation change of the minitaur's base in euler angle. + + Returns: + rate of (roll, pitch, yaw) change of the minitaur's base. + """ + angular_velocity = self._pybullet_client.getBaseVelocity(self.quadruped)[1] + orientation = self.GetTrueBaseOrientation() + return self.TransformAngularVelocityToLocalFrame(angular_velocity, + orientation) + + def TransformAngularVelocityToLocalFrame(self, angular_velocity, orientation): + """Transform the angular velocity from world frame to robot's frame. + + Args: + angular_velocity: Angular velocity of the robot in world frame. + orientation: Orientation of the robot represented as a quaternion. + + Returns: + angular velocity of based on the given orientation. + """ + # Treat angular velocity as a position vector, then transform based on the + # orientation given by dividing (or multiplying with inverse). + # Get inverse quaternion assuming the vector is at 0,0,0 origin. + _, orientation_inversed = self._pybullet_client.invertTransform([0, 0, 0], + orientation) + # Transform the angular_velocity at neutral orientation using a neutral + # translation and reverse of the given orientation. + relative_velocity, _ = self._pybullet_client.multiplyTransforms( + [0, 0, 0], orientation_inversed, angular_velocity, + self._pybullet_client.getQuaternionFromEuler([0, 0, 0])) + return np.asarray(relative_velocity) + + def GetBaseRollPitchYawRate(self): + """Get the rate of orientation change of the minitaur's base in euler angle. + + This function mimicks the noisy sensor reading and adds latency. + Returns: + rate of (roll, pitch, yaw) change of the minitaur's base polluted by noise + and latency. + """ + return self._AddSensorNoise( + np.array(self._control_observation[3 * self.num_motors + + 4:3 * self.num_motors + 7]), + self._observation_noise_stdev[4]) + + def GetActionDimension(self): + """Get the length of the action list. + + Returns: + The length of the action list. + """ + return self.num_motors + + def _ApplyOverheatProtection(self, actual_torque): + if self._motor_overheat_protection: + for i in range(self.num_motors): + if abs(actual_torque[i]) > OVERHEAT_SHUTDOWN_TORQUE: + self._overheat_counter[i] += 1 + else: + self._overheat_counter[i] = 0 + if (self._overheat_counter[i] > + OVERHEAT_SHUTDOWN_TIME / self.time_step): + self._motor_enabled_list[i] = False + + def ApplyAction(self, motor_commands, motor_control_mode=None): + """Apply the motor commands using the motor model. + + Args: + motor_commands: np.array. Can be motor angles, torques, hybrid commands, + or motor pwms (for Minitaur only). + motor_control_mode: A MotorControlMode enum. + """ + self.last_action_time = self._state_action_counter * self.time_step + control_mode = motor_control_mode + if control_mode is None: + control_mode = self._motor_control_mode + if self._safety_checker: + try: + self._safety_checker.check_motor_action(motor_commands, control_mode) + except safety_error.SafetyError as e: + logging.info("A safety error occurred: %s", e) + self._is_safe = False + return + motor_commands = np.asarray(motor_commands) + + q, qdot = self._GetPDObservation() + qdot_true = self.GetTrueMotorVelocities() + actual_torque, observed_torque = self._motor_model.convert_to_torque( + motor_commands, q, qdot, qdot_true, control_mode) + + # May turn off the motor + self._ApplyOverheatProtection(actual_torque) + + # The torque is already in the observation space because we use + # GetMotorAngles and GetMotorVelocities. + self._observed_motor_torques = observed_torque + + # Transform into the motor space when applying the torque. + self._applied_motor_torque = np.multiply(actual_torque, + self._motor_direction) + motor_ids = [] + motor_torques = [] + + for motor_id, motor_torque, motor_enabled in zip(self._motor_id_list, + self._applied_motor_torque, + self._motor_enabled_list): + if motor_enabled: + motor_ids.append(motor_id) + motor_torques.append(motor_torque) + else: + motor_ids.append(motor_id) + motor_torques.append(0) + self._SetMotorTorqueByIds(motor_ids, motor_torques) + + def ConvertFromLegModel(self, actions): + """Convert the actions that use leg model to the real motor actions. + + Args: + actions: The theta, phi of the leg model. + + Returns: + The eight desired motor angles that can be used in ApplyActions(). + """ + motor_angle = copy.deepcopy(actions) + scale_for_singularity = 1 + offset_for_singularity = 1.5 + half_num_motors = self.num_motors // 2 + quater_pi = math.pi / 4 + for i in range(self.num_motors): + action_idx = i // 2 + forward_backward_component = ( + -scale_for_singularity * quater_pi * + (actions[action_idx + half_num_motors] + offset_for_singularity)) + extension_component = (-1)**i * quater_pi * actions[action_idx] + if i >= half_num_motors: + extension_component = -extension_component + motor_angle[i] = ( + math.pi + forward_backward_component + extension_component) + return motor_angle + + def GetBaseMassesFromURDF(self): + """Get the mass of the base from the URDF file.""" + return self._base_mass_urdf + + def GetBaseInertiasFromURDF(self): + """Get the inertia of the base from the URDF file.""" + return self._base_inertia_urdf + + def GetLegMassesFromURDF(self): + """Get the mass of the legs from the URDF file.""" + return self._leg_masses_urdf + + def GetLegInertiasFromURDF(self): + """Get the inertia of the legs from the URDF file.""" + return self._leg_inertia_urdf + + def SetBaseMasses(self, base_mass): + """Set the mass of minitaur's base. + + Args: + base_mass: A list of masses of each body link in CHASIS_LINK_IDS. The + length of this list should be the same as the length of CHASIS_LINK_IDS. + + Raises: + ValueError: It is raised when the length of base_mass is not the same as + the length of self._chassis_link_ids. + """ + if len(base_mass) != len(self._chassis_link_ids): + raise ValueError( + "The length of base_mass {} and self._chassis_link_ids {} are not " + "the same.".format(len(base_mass), len(self._chassis_link_ids))) + for chassis_id, chassis_mass in zip(self._chassis_link_ids, base_mass): + self._pybullet_client.changeDynamics( + self.quadruped, chassis_id, mass=chassis_mass) + + def SetLegMasses(self, leg_masses): + """Set the mass of the legs. + + A leg includes leg_link and motor. 4 legs contain 16 links (4 links each) + and 8 motors. First 16 numbers correspond to link masses, last 8 correspond + to motor masses (24 total). + + Args: + leg_masses: The leg and motor masses for all the leg links and motors. + + Raises: + ValueError: It is raised when the length of masses is not equal to number + of links + motors. + """ + if len(leg_masses) != len(self._leg_link_ids) + len(self._motor_link_ids): + raise ValueError("The number of values passed to SetLegMasses are " + "different than number of leg links and motors.") + for leg_id, leg_mass in zip(self._leg_link_ids, leg_masses): + self._pybullet_client.changeDynamics( + self.quadruped, leg_id, mass=leg_mass) + motor_masses = leg_masses[len(self._leg_link_ids):] + for link_id, motor_mass in zip(self._motor_link_ids, motor_masses): + self._pybullet_client.changeDynamics( + self.quadruped, link_id, mass=motor_mass) + + def SetBaseInertias(self, base_inertias): + """Set the inertias of minitaur's base. + + Args: + base_inertias: A list of inertias of each body link in CHASIS_LINK_IDS. + The length of this list should be the same as the length of + CHASIS_LINK_IDS. + + Raises: + ValueError: It is raised when the length of base_inertias is not the same + as the length of self._chassis_link_ids and base_inertias contains + negative values. + """ + if len(base_inertias) != len(self._chassis_link_ids): + raise ValueError( + "The length of base_inertias {} and self._chassis_link_ids {} are " + "not the same.".format( + len(base_inertias), len(self._chassis_link_ids))) + for chassis_id, chassis_inertia in zip(self._chassis_link_ids, + base_inertias): + for inertia_value in chassis_inertia: + if (np.asarray(inertia_value) < 0).any(): + raise ValueError("Values in inertia matrix should be non-negative.") + self._pybullet_client.changeDynamics( + self.quadruped, chassis_id, localInertiaDiagonal=chassis_inertia) + + def SetLegInertias(self, leg_inertias): + """Set the inertias of the legs. + + A leg includes leg_link and motor. 4 legs contain 16 links (4 links each) + and 8 motors. First 16 numbers correspond to link inertia, last 8 correspond + to motor inertia (24 total). + + Args: + leg_inertias: The leg and motor inertias for all the leg links and motors. + + Raises: + ValueError: It is raised when the length of inertias is not equal to + the number of links + motors or leg_inertias contains negative values. + """ + + if len(leg_inertias) != len(self._leg_link_ids) + len(self._motor_link_ids): + raise ValueError("The number of values passed to SetLegMasses are " + "different than number of leg links and motors.") + for leg_id, leg_inertia in zip(self._leg_link_ids, leg_inertias): + for inertia_value in leg_inertias: + if (np.asarray(inertia_value) < 0).any(): + raise ValueError("Values in inertia matrix should be non-negative.") + self._pybullet_client.changeDynamics( + self.quadruped, leg_id, localInertiaDiagonal=leg_inertia) + + motor_inertias = leg_inertias[len(self._leg_link_ids):] + for link_id, motor_inertia in zip(self._motor_link_ids, motor_inertias): + for inertia_value in motor_inertias: + if (np.asarray(inertia_value) < 0).any(): + raise ValueError("Values in inertia matrix should be non-negative.") + self._pybullet_client.changeDynamics( + self.quadruped, link_id, localInertiaDiagonal=motor_inertia) + + def SetFootFriction(self, foot_friction): + """Set the lateral friction of the feet. + + Args: + foot_friction: The lateral friction coefficient of the foot. This value is + shared by all four feet. + """ + for link_id in self._foot_link_ids: + self._pybullet_client.changeDynamics( + self.quadruped, link_id, lateralFriction=foot_friction) + + # TODO(b/73748980): Add more API's to set other contact parameters. + def SetFootRestitution(self, foot_restitution): + """Set the coefficient of restitution at the feet. + + Args: + foot_restitution: The coefficient of restitution (bounciness) of the feet. + This value is shared by all four feet. + """ + for link_id in self._foot_link_ids: + self._pybullet_client.changeDynamics( + self.quadruped, link_id, restitution=foot_restitution) + + def SetJointFriction(self, joint_frictions): + for knee_joint_id, friction in zip(self._foot_link_ids, joint_frictions): + self._pybullet_client.setJointMotorControl2( + bodyIndex=self.quadruped, + jointIndex=knee_joint_id, + controlMode=self._pybullet_client.VELOCITY_CONTROL, + targetVelocity=0, + force=friction) + + def GetNumKneeJoints(self): + return len(self._foot_link_ids) + + def SetBatteryVoltage(self, voltage): + self._motor_model.set_voltage(voltage) + + def SetMotorViscousDamping(self, viscous_damping): + self._motor_model.set_viscous_damping(viscous_damping) + + def GetTrueObservation(self): + observation = [] + observation.extend(self.GetTrueMotorAngles()) + observation.extend(self.GetTrueMotorVelocities()) + observation.extend(self.GetTrueMotorTorques()) + observation.extend(self.GetTrueBaseOrientation()) + observation.extend(self.GetTrueBaseRollPitchYawRate()) + return observation + + def ReceiveObservation(self): + """Receive the observation from sensors. + + This function is called once per step. The observations are only updated + when this function is called. + """ + self._joint_states = self._pybullet_client.getJointStates( + self.quadruped, self._motor_id_list) + self._base_position, orientation = ( + self._pybullet_client.getBasePositionAndOrientation(self.quadruped)) + # Computes the relative orientation relative to the robot's + # initial_orientation. + _, self._base_orientation = self._pybullet_client.multiplyTransforms( + positionA=[0, 0, 0], + orientationA=orientation, + positionB=[0, 0, 0], + orientationB=self._init_orientation_inv) + self._observation_history.appendleft(self.GetTrueObservation()) + self._control_observation = self._GetControlObservation() + self.last_state_time = self._state_action_counter * self.time_step + if self._safety_checker: + try: + self._safety_checker.check_state() + except safety_error.SafetyError as e: + logging.info("A safety error occurred: %s", e) + self._is_safe = False + + def _GetDelayedObservation(self, latency): + """Get observation that is delayed by the amount specified in latency. + + Args: + latency: The latency (in seconds) of the delayed observation. + + Returns: + observation: The observation which was actually latency seconds ago. + """ + if latency <= 0 or len(self._observation_history) == 1: + observation = self._observation_history[0] + else: + n_steps_ago = int(latency / self.time_step) + if n_steps_ago + 1 >= len(self._observation_history): + return self._observation_history[-1] + remaining_latency = latency - n_steps_ago * self.time_step + blend_alpha = remaining_latency / self.time_step + observation = ( + (1.0 - blend_alpha) * np.array(self._observation_history[n_steps_ago]) + + blend_alpha * np.array(self._observation_history[n_steps_ago + 1])) + return observation + + def _GetPDObservation(self): + pd_delayed_observation = self._GetDelayedObservation(self._pd_latency) + q = pd_delayed_observation[0:self.num_motors] + qdot = pd_delayed_observation[self.num_motors:2 * self.num_motors] + return (np.array(q), np.array(qdot)) + + def _GetControlObservation(self): + control_delayed_observation = self._GetDelayedObservation( + self._control_latency) + return control_delayed_observation + + def _AddSensorNoise(self, sensor_values, noise_stdev): + if noise_stdev <= 0: + return sensor_values + observation = sensor_values + np.random.normal( + scale=noise_stdev, size=sensor_values.shape) + return observation + + def SetControlLatency(self, latency): + """Set the latency of the control loop. + + It measures the duration between sending an action from Nvidia TX2 and + receiving the observation from microcontroller. + + Args: + latency: The latency (in seconds) of the control loop. + """ + self._control_latency = latency + + def GetControlLatency(self): + """Get the control latency. + + Returns: + The latency (in seconds) between when the motor command is sent and when + the sensor measurements are reported back to the controller. + """ + return self._control_latency + + # TODO(b/73666007): Change the API to SetMotorPGains and SetMotorDGains. + def SetMotorGains(self, kp, kd): + """Set the gains of all motors. + + These gains are PD gains for motor positional control. kp is the + proportional gain and kd is the derivative gain. + + Args: + kp: proportional gain(s) of the motors. + kd: derivative gain(s) of the motors. + """ + if isinstance(kp, (collections.Sequence, np.ndarray)): + self._motor_kps = np.asarray(kp) + else: + self._motor_kps = np.full(self.num_motors, kp) + + if isinstance(kd, (collections.Sequence, np.ndarray)): + self._motor_kds = np.asarray(kd) + else: + self._motor_kds = np.full(self.num_motors, kd) + + self._motor_model.set_motor_gains(kp, kd) + + # TODO(b/73666007): Change the API to GetMotorPGains and GetMotorDGains. + def GetMotorGains(self): + """Get the gains of the motor. + + Returns: + The proportional gain. + The derivative gain. + """ + return self._motor_kps, self._motor_kds + + def GetMotorPositionGains(self): + """Get the position gains of the motor. + + Returns: + The proportional gain. + """ + return self._motor_kps + + def GetMotorVelocityGains(self): + """Get the velocity gains of the motor. + + Returns: + The derivative gain. + """ + return self._motor_kds + + def SetMotorStrengthRatio(self, ratio): + """Set the strength of all motors relative to the default value. + + Args: + ratio: The relative strength. A scalar range from 0.0 to 1.0. + """ + self._motor_model.set_strength_ratios([ratio] * self.num_motors) + + def SetMotorStrengthRatios(self, ratios): + """Set the strength of each motor relative to the default value. + + Args: + ratios: The relative strength. A numpy array ranging from 0.0 to 1.0. + """ + self._motor_model.set_strength_ratios(ratios) + + def SetTimeSteps(self, action_repeat, simulation_step): + """Set the time steps of the control and simulation. + + Args: + action_repeat: The number of simulation steps that the same action is + repeated. + simulation_step: The simulation time step. + """ + self.time_step = simulation_step + self._action_repeat = action_repeat + + def _GetMotorNames(self): + return MOTOR_NAMES + + def _GetDefaultInitPosition(self): + """Returns the init position of the robot. + + It can be either 1) origin (INIT_POSITION), 2) origin with a rack + (INIT_RACK_POSITION), or 3) the previous position. + """ + # If we want continuous resetting and is not the first episode. + if self._reset_at_current_position and self._observation_history: + x, y, _ = self.GetBasePosition() + _, _, z = INIT_POSITION + return [x, y, z] + + if self._on_rack: + return INIT_RACK_POSITION + else: + return INIT_POSITION + + def _GetDefaultInitOrientation(self): + """Returns the init position of the robot. + + It can be either 1) INIT_ORIENTATION or 2) the previous rotation in yaw. + """ + # If we want continuous resetting and is not the first episode. + if self._reset_at_current_position and self._observation_history: + _, _, yaw = self.GetBaseRollPitchYaw() + return self._pybullet_client.getQuaternionFromEuler([0.0, 0.0, yaw]) + return INIT_ORIENTATION + + @property + def chassis_link_ids(self): + return self._chassis_link_ids + + def SetAllSensors(self, sensors): + """set all sensors to this robot and move the ownership to this robot. + + Args: + sensors: a list of sensors to this robot. + """ + for s in sensors: + s.set_robot(self) + self._sensors = sensors + + def GetAllSensors(self): + """get all sensors associated with this robot. + + Returns: + sensors: a list of all sensors. + """ + return self._sensors + + def GetSensor(self, name): + """get the first sensor with the given name. + + This function return None if a sensor with the given name does not exist. + + Args: + name: the name of the sensor we are looking + + Returns: + sensor: a sensor with the given name. None if not exists. + """ + for s in self._sensors: + if s.get_name() == name: + return s + return None + + @property + def is_safe(self): + return self._is_safe + + @property + def last_action(self): + return self._last_action + + def ProcessAction(self, action, substep_count): + """If enabled, interpolates between the current and previous actions. + + Args: + action: current action. + substep_count: the step count should be between [0, self.__action_repeat). + + Returns: + If interpolation is enabled, returns interpolated action depending on + the current action repeat substep. + """ + if self._enable_action_interpolation: + if self._last_action is not None: + prev_action = self._last_action + else: + prev_action = self.GetMotorAngles() + + lerp = float(substep_count + 1) / self._action_repeat + proc_action = prev_action + lerp * (action - prev_action) + else: + proc_action = action + + return proc_action + + def _BuildActionFilter(self): + sampling_rate = 1 / (self.time_step * self._action_repeat) + num_joints = self.GetActionDimension() + a_filter = action_filter.ActionFilterButter( + sampling_rate=sampling_rate, num_joints=num_joints) + return a_filter + + def _ResetActionFilter(self): + self._action_filter.reset() + return + + def _FilterAction(self, action): + # initialize the filter history, since resetting the filter will fill + # the history with zeros and this can cause sudden movements at the start + # of each episode + if self._step_counter == 0: + default_action = self.GetMotorAngles() + self._action_filter.init_history(default_action) + + filtered_action = self._action_filter.filter(action) + return filtered_action + + @property + def pybullet_client(self): + return self._pybullet_client + + @property + def joint_states(self): + return self._joint_states + + @classmethod + def GetConstants(cls): + del cls + return minitaur_constants diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/robots/minitaur_constants.py b/examples/pybullet/gym/pybullet_envs/minitaur/robots/minitaur_constants.py new file mode 100644 index 000000000..9a9ed2e69 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/robots/minitaur_constants.py @@ -0,0 +1,62 @@ +# Lint as: python3 +"""Defines the minitaur robot related constants and URDF specs.""" + +import collections +import math + +import gin + +MINITAUR_URDF_PATH = "quadruped/minitaur_rainbow_dash.urdf" + +INIT_POSITION = (0, 0, 0.2) +INIT_RACK_POSITION = (0, 0, 1) +INIT_ORIENTATION_QUAT = (0, 0, 0, 1) +INIT_ORIENTATION_RPY = (0, 0, 0) + +NUM_LEGS = 4 + +JOINT_NAMES = ("motor_front_leftL_joint", "motor_front_leftR_joint", + "motor_back_leftL_joint", "motor_back_leftR_joint", + "motor_front_rightL_joint", "motor_front_rightR_joint", + "motor_back_rightL_joint", "motor_back_rightR_joint") + +INIT_JOINT_ANGLES = collections.OrderedDict( + zip(JOINT_NAMES, [math.pi / 2, math.pi / 2] * NUM_LEGS)) + +# Used to convert the robot SDK joint angles to URDF joint angles. +JOINT_DIRECTIONS = collections.OrderedDict( + zip(JOINT_NAMES, (-1, -1, -1, -1, 1, 1, 1, 1))) + +# Used to convert the robot SDK joint angles to URDF joint angles. +JOINT_OFFSETS = collections.OrderedDict( + zip(JOINT_NAMES, (0, 0, 0, 0, 0, 0, 0, 0))) + +LEG_ORDER = ["front_left", "back_left", "front_right", "back_right"] + +END_EFFECTOR_NAMES = ( + "knee_front_rightR_joint", + "knee_front_leftL_joint", + "knee_back_rightR_joint", + "knee_back_leftL_joint", +) + +MOTOR_NAMES = JOINT_NAMES +MOTOR_GROUP = collections.OrderedDict((("body_motors", JOINT_NAMES),)) + +KNEE_CONSTRAINT_POINT_LONG = [0, 0.0045, 0.088] +KNEE_CONSTRAINT_POINT_SHORT = [0, 0.0045, 0.100] + +# Add the gin constants to be used for gin binding in config. +gin.constant("minitaur_constants.MINITAUR_URDF_PATH", MINITAUR_URDF_PATH) +gin.constant("minitaur_constants.MINITAUR_INIT_POSITION", INIT_POSITION) +gin.constant("minitaur_constants.MINITAUR_INIT_ORIENTATION_QUAT", + INIT_ORIENTATION_QUAT) +gin.constant("minitaur_constants.MINITAUR_INIT_ORIENTATION_RPY", + INIT_ORIENTATION_RPY) +gin.constant("minitaur_constants.MINITAUR_INIT_JOINT_ANGLES", INIT_JOINT_ANGLES) +gin.constant("minitaur_constants.MINITAUR_JOINT_DIRECTIONS", JOINT_DIRECTIONS) +gin.constant("minitaur_constants.MINITAUR_JOINT_OFFSETS", JOINT_OFFSETS) +gin.constant("minitaur_constants.MINITAUR_MOTOR_NAMES", MOTOR_NAMES) +gin.constant("minitaur_constants.MINITAUR_END_EFFECTOR_NAMES", + END_EFFECTOR_NAMES) +gin.constant("minitaur_constants.MINITAUR_MOTOR_GROUP", MOTOR_GROUP) diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/robots/minitaur_motor.py b/examples/pybullet/gym/pybullet_envs/minitaur/robots/minitaur_motor.py new file mode 100644 index 000000000..2ec0c927e --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/robots/minitaur_motor.py @@ -0,0 +1,171 @@ +"""This file implements an accurate motor model.""" + +import numpy as np + +from pybullet_envs.minitaur.robots import robot_config + +VOLTAGE_CLIPPING = 50 +# TODO(b/73728631): Clamp the pwm signal instead of the OBSERVED_TORQUE_LIMIT. +OBSERVED_TORQUE_LIMIT = 5.7 +MOTOR_VOLTAGE = 16.0 +MOTOR_RESISTANCE = 0.186 +MOTOR_TORQUE_CONSTANT = 0.0954 +MOTOR_VISCOUS_DAMPING = 0 +MOTOR_SPEED_LIMIT = MOTOR_VOLTAGE / ( + MOTOR_VISCOUS_DAMPING + MOTOR_TORQUE_CONSTANT) +NUM_MOTORS = 8 +MOTOR_POS_LB = 0.5 +MOTOR_POS_UB = 2.5 + + +class MotorModel(object): + """The accurate motor model, which is based on the physics of DC motors. + + The motor model support two types of control: position control and torque + control. In position control mode, a desired motor angle is specified, and a + torque is computed based on the internal motor model. When the torque control + is specified, a pwm signal in the range of [-1.0, 1.0] is converted to the + torque. + + The internal motor model takes the following factors into consideration: + pd gains, viscous friction, back-EMF voltage and current-torque profile. + """ + + def __init__(self, + kp=1.2, + kd=0, + torque_limits=None, + motor_control_mode=robot_config.MotorControlMode.POSITION): + self._kp = kp + self._kd = kd + self._torque_limits = torque_limits + self._motor_control_mode = motor_control_mode + self._resistance = MOTOR_RESISTANCE + self._voltage = MOTOR_VOLTAGE + self._torque_constant = MOTOR_TORQUE_CONSTANT + self._viscous_damping = MOTOR_VISCOUS_DAMPING + self._current_table = [0, 10, 20, 30, 40, 50, 60] + self._torque_table = [0, 1, 1.9, 2.45, 3.0, 3.25, 3.5] + self._strength_ratios = [1.0] * NUM_MOTORS + + def set_strength_ratios(self, ratios): + """Set the strength of each motors relative to the default value. + + Args: + ratios: The relative strength of motor output. A numpy array ranging from + 0.0 to 1.0. + """ + self._strength_ratios = np.array(ratios) + + def set_motor_gains(self, kp, kd): + """Set the gains of all motors. + + These gains are PD gains for motor positional control. kp is the + proportional gain and kd is the derivative gain. + + Args: + kp: proportional gain of the motors. + kd: derivative gain of the motors. + """ + self._kp = kp + self._kd = kd + + def set_voltage(self, voltage): + self._voltage = voltage + + def get_voltage(self): + return self._voltage + + def set_viscous_damping(self, viscous_damping): + self._viscous_damping = viscous_damping + + def get_viscous_dampling(self): + return self._viscous_damping + + def convert_to_torque(self, + motor_commands, + motor_angle, + motor_velocity, + true_motor_velocity, + motor_control_mode=None): + """Convert the commands (position control or pwm control) to torque. + + Args: + motor_commands: The desired motor angle if the motor is in position + control mode. The pwm signal if the motor is in torque control mode. + motor_angle: The motor angle observed at the current time step. It is + actually the true motor angle observed a few milliseconds ago (pd + latency). + motor_velocity: The motor velocity observed at the current time step, it + is actually the true motor velocity a few milliseconds ago (pd latency). + true_motor_velocity: The true motor velocity. The true velocity is used to + compute back EMF voltage and viscous damping. + motor_control_mode: A MotorControlMode enum. + + Returns: + actual_torque: The torque that needs to be applied to the motor. + observed_torque: The torque observed by the sensor. + """ + if not motor_control_mode: + motor_control_mode = self._motor_control_mode + + if (motor_control_mode is robot_config.MotorControlMode.TORQUE) or ( + motor_control_mode is robot_config.MotorControlMode.HYBRID): + raise ValueError( + "{} is not a supported motor control mode".format(motor_control_mode)) + + kp = self._kp + kd = self._kd + + if motor_control_mode is robot_config.MotorControlMode.PWM: + # The following implements a safety controller that softly enforces the + # joint angles to remain within safe region: If PD controller targeting + # the positive (negative) joint limit outputs a negative (positive) + # signal, the corresponding joint violates the joint constraint, so + # we should add the PD output to motor_command to bring it back to the + # safe region. + pd_max = -1 * kp * (motor_angle - MOTOR_POS_UB) - kd / 2. * motor_velocity + pd_min = -1 * kp * (motor_angle - MOTOR_POS_LB) - kd / 2. * motor_velocity + pwm = motor_commands + np.minimum(pd_max, 0) + np.maximum(pd_min, 0) + else: + pwm = -1 * kp * (motor_angle - motor_commands) - kd * motor_velocity + pwm = np.clip(pwm, -1.0, 1.0) + return self._convert_to_torque_from_pwm(pwm, true_motor_velocity) + + def _convert_to_torque_from_pwm(self, pwm, true_motor_velocity): + """Convert the pwm signal to torque. + + Args: + pwm: The pulse width modulation. + true_motor_velocity: The true motor velocity at the current moment. It is + used to compute the back EMF voltage and the viscous damping. + + Returns: + actual_torque: The torque that needs to be applied to the motor. + observed_torque: The torque observed by the sensor. + """ + observed_torque = np.clip( + self._torque_constant * + (np.asarray(pwm) * self._voltage / self._resistance), + -OBSERVED_TORQUE_LIMIT, OBSERVED_TORQUE_LIMIT) + if self._torque_limits is not None: + observed_torque = np.clip(observed_torque, -1.0 * self._torque_limits, + self._torque_limits) + + # Net voltage is clipped at 50V by diodes on the motor controller. + voltage_net = np.clip( + np.asarray(pwm) * self._voltage - + (self._torque_constant + self._viscous_damping) * + np.asarray(true_motor_velocity), -VOLTAGE_CLIPPING, VOLTAGE_CLIPPING) + current = voltage_net / self._resistance + current_sign = np.sign(current) + current_magnitude = np.absolute(current) + # Saturate torque based on empirical current relation. + actual_torque = np.interp(current_magnitude, self._current_table, + self._torque_table) + actual_torque = np.multiply(current_sign, actual_torque) + actual_torque = np.multiply(self._strength_ratios, actual_torque) + if self._torque_limits is not None: + actual_torque = np.clip(actual_torque, -1.0 * self._torque_limits, + self._torque_limits) + return actual_torque, observed_torque diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/robots/minitaur_motor_model_v2.py b/examples/pybullet/gym/pybullet_envs/minitaur/robots/minitaur_motor_model_v2.py new file mode 100644 index 000000000..40927cc7c --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/robots/minitaur_motor_model_v2.py @@ -0,0 +1,145 @@ +# Lint as: python3 +"""This file implements an accurate motor model.""" + +from typing import Tuple + +import gin +import numpy as np + +from pybullet_envs.minitaur.robots import hybrid_motor_model +from pybullet_envs.minitaur.robots import robot_config + +VOLTAGE_CLIPPING = 50 +# TODO(b/73728631): Clamp the pwm signal instead of the OBSERVED_TORQUE_LIMIT. +OBSERVED_TORQUE_LIMIT = 5.7 +MOTOR_VOLTAGE = 16.0 +MOTOR_RESISTANCE = 0.186 +MOTOR_TORQUE_CONSTANT = 0.0954 +MOTOR_VISCOUS_DAMPING = 0 +MOTOR_POS_LB = 0.5 +MOTOR_POS_UB = 2.5 + + +@gin.configurable +class MinitaurMotorModel(hybrid_motor_model.HybridMotorModel): + """The accurate motor model, which is based on the physics of DC motors. + + The motor model support two types of control: position control and torque + control. In position control mode, a desired motor angle is specified, and a + torque is computed based on the internal motor model. When the torque control + is specified, a pwm signal in the range of [-1.0, 1.0] is converted to the + torque. + + The internal motor model takes the following factors into consideration: + pd gains, viscous friction, back-EMF voltage and current-torque profile. + """ + + def __init__(self, + num_motors: int, + voltage_clipping: float = VOLTAGE_CLIPPING, + observed_torque_limit: float = OBSERVED_TORQUE_LIMIT, + motor_voltage: float = MOTOR_VOLTAGE, + motor_resistance: float = MOTOR_RESISTANCE, + motor_torque_constant: float = MOTOR_TORQUE_CONSTANT, + motor_viscous_damping: float = MOTOR_VISCOUS_DAMPING, + motor_pos_lb: float = MOTOR_POS_LB, + motor_pos_ub: float = MOTOR_POS_UB, + **kwargs): + super(MinitaurMotorModel, self).__init__(num_motors, **kwargs) + self._voltage_clipping = voltage_clipping + self._observed_torque_limit = observed_torque_limit + self._voltage = motor_voltage + self._resistance = motor_resistance + self._torque_constant = motor_torque_constant + self._viscous_damping = motor_viscous_damping + self._motor_pos_lb = motor_pos_lb + self._motor_pos_ub = motor_pos_ub + self._current_table = [0, 10, 20, 30, 40, 50, 60] + self._torque_table = [0, 1, 1.9, 2.45, 3.0, 3.25, 3.5] + + def set_voltage(self, voltage): + self._voltage = voltage + + def get_voltage(self): + return self._voltage + + def set_viscous_damping(self, viscous_damping): + self._viscous_damping = viscous_damping + + def get_viscous_dampling(self): + return self._viscous_damping + + def get_motor_torques( + self, + motor_commands: np.ndarray, + motor_control_mode=None) -> Tuple[np.ndarray, np.ndarray]: + """Convert the commands (position control or pwm control) to torque. + + Args: + motor_commands: The desired motor angle if the motor is in position + control mode. The pwm signal if the motor is in torque control mode. + motor_control_mode: A MotorControlMode enum. + + Returns: + actual_torque: The torque that needs to be applied to the motor. + observed_torque: The torque observed by the sensor. + """ + if not motor_control_mode: + motor_control_mode = self._motor_control_mode + + if (motor_control_mode is robot_config.MotorControlMode.TORQUE) or ( + motor_control_mode is robot_config.MotorControlMode.HYBRID): + raise ValueError( + "{} is not a supported motor control mode".format(motor_control_mode)) + + motor_angle, motor_velocity = self.get_motor_states() + _, true_motor_velocity = self.get_motor_states(latency=0) + + kp = self._kp + kd = self._kd + + pwm = -1 * kp * (motor_angle - motor_commands) - kd * motor_velocity + pwm = np.clip(pwm, -1.0, 1.0) + return self._convert_to_torque_from_pwm(pwm, true_motor_velocity) + + def _convert_to_torque_from_pwm(self, pwm: np.ndarray, + true_motor_velocity: np.ndarray): + """Convert the pwm signal to torque. + + Args: + pwm: The pulse width modulation. + true_motor_velocity: The true motor velocity at the current moment. It is + used to compute the back EMF voltage and the viscous damping. + + Returns: + actual_torque: The torque that needs to be applied to the motor. + observed_torque: The torque observed by the sensor. + """ + observed_torque = np.clip( + self._torque_constant * + (np.asarray(pwm) * self._voltage / self._resistance), + -self._observed_torque_limit, self._observed_torque_limit) + if (self._torque_lower_limits is not None or + self._torque_upper_limits is not None): + observed_torque = np.clip(observed_torque, self._torque_lower_limits, + self._torque_upper_limits) + + # Net voltage is clipped at 50V by diodes on the motor controller. + voltage_net = np.clip( + np.asarray(pwm) * self._voltage - + (self._torque_constant + self._viscous_damping) * + np.asarray(true_motor_velocity), -self._voltage_clipping, + self._voltage_clipping) + current = voltage_net / self._resistance + current_sign = np.sign(current) + current_magnitude = np.absolute(current) + # Saturate torque based on empirical current relation. + actual_torque = np.interp(current_magnitude, self._current_table, + self._torque_table) + actual_torque = np.multiply(current_sign, actual_torque) + actual_torque = np.multiply(self._strength_ratios, actual_torque) + if (self._torque_lower_limits is not None or + self._torque_upper_limits is not None): + actual_torque = np.clip(actual_torque, self._torque_lower_limits, + self._torque_upper_limits) + return observed_torque, actual_torque diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/robots/minitaur_v2.py b/examples/pybullet/gym/pybullet_envs/minitaur/robots/minitaur_v2.py new file mode 100644 index 000000000..34d97a50d --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/robots/minitaur_v2.py @@ -0,0 +1,122 @@ +# Lint as: python3 +"""Pybullet simulation of Minitaur robot.""" +import math +from typing import Dict, Tuple, Union, Text + +from absl import logging +import gin + +from pybullet_envs.minitaur.robots import minitaur_constants +from pybullet_envs.minitaur.robots import quadruped_base +from pybullet_envs.minitaur.robots import robot_config +from pybullet_envs.minitaur.robots import robot_urdf_loader + + +@gin.configurable +class Minitaur(quadruped_base.QuadrupedBase): + """Minitaur simulation model in pyBullet.""" + + def _pre_load(self): + try: + use_constrained_base = gin.query_parameter( + "robot_urdf_loader.RobotUrdfLoader.constrained_base") + except ValueError: + use_constrained_base = False + if use_constrained_base: + logging.warn( + "use_constrained_base is currently not compatible with Minitaur's " + "leg constraints." + ) + + self._urdf_loader = robot_urdf_loader.RobotUrdfLoader( + pybullet_client=self._pybullet_client, + enable_self_collision=True, + urdf_path=minitaur_constants.MINITAUR_URDF_PATH, + init_base_position=minitaur_constants.INIT_POSITION, + init_base_orientation_quaternion=minitaur_constants + .INIT_ORIENTATION_QUAT, + init_base_orientation_rpy=minitaur_constants.INIT_ORIENTATION_RPY, + init_joint_angles=minitaur_constants.INIT_JOINT_ANGLES, + joint_offsets=minitaur_constants.JOINT_OFFSETS, + joint_directions=minitaur_constants.JOINT_DIRECTIONS, + motor_names=minitaur_constants.MOTOR_NAMES, + end_effector_names=minitaur_constants.END_EFFECTOR_NAMES, + user_group=minitaur_constants.MOTOR_GROUP, + ) + + def _on_load(self): + """Add hinge constraint for Minitaur's diamond shaped leg after loading.""" + half_pi = math.pi / 2.0 + knee_angle = -2.1834 + for (leg_id, leg_position) in enumerate(minitaur_constants.LEG_ORDER): + self._pybullet_client.resetJointState( + self._urdf_loader.robot_id, + self._joint_id_dict["motor_" + leg_position + "L_joint"], + self._motor_directions[2 * leg_id] * half_pi, + targetVelocity=0) + self._pybullet_client.resetJointState( + self._urdf_loader.robot_id, + self._joint_id_dict["knee_" + leg_position + "L_joint"], + self._motor_directions[2 * leg_id] * knee_angle, + targetVelocity=0) + self._pybullet_client.resetJointState( + self._urdf_loader.robot_id, + self._joint_id_dict["motor_" + leg_position + "R_joint"], + self._motor_directions[2 * leg_id + 1] * half_pi, + targetVelocity=0) + self._pybullet_client.resetJointState( + self._urdf_loader.robot_id, + self._joint_id_dict["knee_" + leg_position + "R_joint"], + self._motor_directions[2 * leg_id + 1] * knee_angle, + targetVelocity=0) + + if leg_id < 2: + self._pybullet_client.createConstraint( + self._urdf_loader.robot_id, + self._joint_id_dict["knee_" + leg_position + "R_joint"], + self._urdf_loader.robot_id, + self._joint_id_dict["knee_" + leg_position + "L_joint"], + self._pybullet_client.JOINT_POINT2POINT, [0, 0, 0], + minitaur_constants.KNEE_CONSTRAINT_POINT_SHORT, + minitaur_constants.KNEE_CONSTRAINT_POINT_LONG) + else: + self._pybullet_client.createConstraint( + self._urdf_loader.robot_id, + self._joint_id_dict["knee_" + leg_position + "R_joint"], + self._urdf_loader.robot_id, + self._joint_id_dict["knee_" + leg_position + "L_joint"], + self._pybullet_client.JOINT_POINT2POINT, [0, 0, 0], + minitaur_constants.KNEE_CONSTRAINT_POINT_LONG, + minitaur_constants.KNEE_CONSTRAINT_POINT_SHORT) + self.receive_observation() + + def _reset_joint_angles(self, + joint_angles: Union[Tuple[float], Dict[Text, + float]] = None, + num_reset_steps: int = 100): + """Resets joint angles of the robot. + + Note that since Minitaur has additional leg constraints on the end + effectors, directly setting joint angles will lead to constraint violation. + Instead, we apply motor commands to move the motors to the desired position. + + Args: + joint_angles: the desired joint angles to reset to. + num_reset_steps: number of reset steps. + """ + if joint_angles is None: + joint_angles = minitaur_constants.INIT_JOINT_ANGLES + actions = joint_angles + if isinstance(joint_angles, dict): + actions = [ + joint_angles[joint_name] + for joint_name in minitaur_constants.JOINT_NAMES + ] + + # TODO(b/157786642): since the simulation clock is not stepped here, this + # reset behaves slightly different compared to the old robot class. + for _ in range(num_reset_steps): + self.apply_action( + actions, motor_control_mode=robot_config.MotorControlMode.POSITION) + self._pybullet_client.stepSimulation() + self.receive_observation() diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/robots/object_controller.py b/examples/pybullet/gym/pybullet_envs/minitaur/robots/object_controller.py new file mode 100644 index 000000000..2e7dbae81 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/robots/object_controller.py @@ -0,0 +1,810 @@ +# Lint as: python3 +"""Module for controllers of autonomous objects.""" + +import abc +import bisect +import enum +from typing import Any, Dict, Optional, Sequence, Text, Tuple, Union + +from absl import logging +import dataclasses +import gin +import numpy as np + + +# A constant to be passed into act as parameter t for initial value. +INIT_TIME = -1.0 + +# Distance that is deemed close enough in ChaseController. +_EPS_DISTANCE = 1e-4 + +ControllerOutput = Tuple[np.ndarray, np.ndarray, Dict[Text, Any]] + +ANIMATION_FRAME_NUMBER_KEY = "animation_frame_number" + + +class ControllerBase(metaclass=abc.ABCMeta): + """Base class of object controllers. + + Controller is similar to a policy in that its output controls autonomous + object just as policy output controls agent. To reflect this similarity, + get_action(), the function that "commands" to autonomous object, is named + similar to the counterpart in policy. + """ + + @abc.abstractmethod + def get_action(self, + time_sec: float, + observations: Dict[Text, Any]) -> ControllerOutput: + """Returns position, orientation and pose based on time and observations. + + Args: + time_sec: Time since simulation reset in seconds. If time < 0, returns + initial values and ignores observations. + observations: A dict of all observations. + + Returns: + Position, orientation and an extra info dict for robot joints, human + skeletal pose, etc. + """ + + +@gin.configurable +class StationaryController(ControllerBase): + """Controller that keeps constant position and orientation.""" + + def __init__(self, + position: Sequence[float] = None, + orientation: Sequence[float] = None): + self._position = np.array(position if position is not None else (0, 0, 0)) + self._orientation = np.array( + orientation if orientation is not None else (0, 0, 0, 1)) + + def get_action(self, + t: float, + observations: Dict[Text, Any]) -> ControllerOutput: + """Returns constant position orientation.""" + del t, observations + return self._position, self._orientation, {} + + +@gin.configurable +class CircularMotionController(ControllerBase): + """Controller for circular motion. + + The motion trajectory goes around a center in a circle in xy-plane. + """ + + def __init__(self, + center: Sequence[float], + radius: float, + angular_velocity: float = np.pi, + face_travel_direction: bool = False): + """Constructor. + + Args: + center: Center of circular motion, [x, y, z] in meters. + radius: Radius of the circle in meters. + angular_velocity: Angular velocity of motion, unit rad/s, e.g. pi means + completing a circle in 2 sec. + face_travel_direction: If True, object will face direction of motion. + """ + + self._center = np.array(center) + self._radius = radius + self._angular_velocity = angular_velocity + self._face_travel_direction = face_travel_direction + + def get_action(self, + t: float, + observations: Dict[Text, Any]) -> ControllerOutput: + """Returns position on the circle based on time and constant orientation.""" + del observations + + t = max(0.0, t) + position = np.array( + [np.cos(self._angular_velocity * t), + np.sin(self._angular_velocity * t), + 0]) * self._radius + self._center + if self._face_travel_direction: + yaw = self._angular_velocity * t + ( + np.sign(self._angular_velocity) * np.pi / 2) + orientation = np.array((0, 0, np.sin(yaw / 2), np.cos(yaw / 2))) + else: + orientation = np.array((0, 0, 0, 1)) + return position, orientation, {} + + +class PatrolRepeatMode(enum.Enum): + """Enums that defines trajectory repeat mode for patrol type controller.""" + + # Trajectory does not repeat. For 3 points a, b, c, the trajectory moves + # along a -> b -> c and then stops at c forever. + NO_REPEAT = 0 + + # Trajectory repeats as a loop. For 3 points a, b, c, the trajectory moves + # along a -> b -> c -> a -> b ... + LOOP = 1 + + # Trajectory repeats back tracking previous point first. For 3 points a, b, c, + # the trajectory moves along a -> b -> c -> b -> a -> b -> c ... + BACK_TRACK = 2 + + # Trajectory repeats by resetting to the initial position after reaching end. + # For 3 points a, b, c, the trajectory moves a -> b -> c then immediately + # jumps back to a before continue moving along a -> b -> c again. + RESET = 3 + + +@dataclasses.dataclass +class PatrolSegmentData: + """A data class that describes a patrol segment.""" + + # Time in a single cycle to start this segment, range [0, cycle_time). + start_time: float + + # Segment start position. + start_position: np.ndarray + + # Segment velocity vector. + velocity: np.ndarray + + # Orientation quaternion of this segment. + orientation: np.ndarray + + +@gin.configurable +class WayPointPatrolController(ControllerBase): + """Controller for patrolling along define waypoints.""" + + def __init__(self, + points: Sequence[Sequence[float]], + yaw_angle: float = 0, + face_travel_direction: bool = True, + repeat_mode: Union[ + PatrolRepeatMode, Text] = PatrolRepeatMode.NO_REPEAT, + speed_mps: Optional[float] = 1.0, + time_points: Optional[Sequence[float]] = None): + """Constructor. + + Args: + points: List of waypoints, shape Nx3 or Nx2, N is number of points. + yaw_angle: Yaw angle of the object in radians. + face_travel_direction: If True, yaw angle 'zero' will be redefined to be + object's travel direction. Setting yaw_angle to zero with + face_travel_direction == True will results in object always facing its + travel direction. Non-zero yaw_angle will cause additional yaw offsets. + repeat_mode: Behavior of object after reaching the last way point in list. + If the value is Text, it is converted to PatrolRepeatMode. + speed_mps: Speed in meters per second. + time_points: List of times associated with points. These times + represent when the object should arrive at the associated waypoint. + Optional, but if provided it must have the same length as 'points'. + If 'speed_mps' is None, then 'time_points' will be used as-is and there + is no maximum segment speed. If 'speed_mps' is also defined, then it + serves as a maximum speed value and time points which would result in a + segment speed above this value will be altered such that the maximum + segment speed is 'speed_mps'. + """ + self._repeat = (repeat_mode if isinstance(repeat_mode, PatrolRepeatMode) + else PatrolRepeatMode[repeat_mode]) + self._yaw_angle = yaw_angle + self._face_travel_direction = face_travel_direction + self._speed_mps = speed_mps + + if len(points) < 2: + raise ValueError( + f"Need at least two points in 'points', got {len(points)}") + + if time_points is not None and self._repeat is PatrolRepeatMode.LOOP: + raise ValueError("Time points are not compatible with LOOP mode.") + + if (self._repeat is PatrolRepeatMode.NO_REPEAT or + self._repeat is PatrolRepeatMode.RESET): + augmented_points = points + + if time_points is not None: + augmented_time_points = time_points + elif self._repeat is PatrolRepeatMode.LOOP: + augmented_points = list(points) + [points[0]] + elif self._repeat is PatrolRepeatMode.BACK_TRACK: + augmented_points = list(points) + list(reversed(points[:-1])) + + if time_points is not None: + # Time strictly increases, so add the timepoints again on top + # of the last entry. We add the difference between the last time + # and the previous elements (in reverse order), on top of the last + # element where we left off. + augmented_time_points = list(time_points) + \ + list(time_points[-1] + (time_points[-1] - np.array(time_points[1::-1]))) + else: + raise NotImplementedError( + f"Repeat mode {self._repeat} is not supported yet.") + + augmented_points = np.array(augmented_points) + # For Nx2 inputs, pad it to Nx3 with default z value of 0. + if augmented_points.shape[1] == 2: + augmented_points = np.hstack( + augmented_points, np.zeros(augmented_points.shape[0], 1)) + elif augmented_points.shape[1] != 3: + raise ValueError("Expect 'points' to be Nx2 or Nx3.") + + t = 0 + self._segments = [] + + if time_points is None: + for from_point, to_point in zip( + augmented_points[:-1], augmented_points[1:]): + segment, t = self._get_patrol_segment_by_speed(from_point, to_point, t) + self._segments.append(segment) + else: + for from_point, to_point, from_time, to_time in zip( + augmented_points[:-1], augmented_points[1:], + augmented_time_points[:-1], augmented_time_points[1:]): + segment, t = self._get_patrol_segment_by_time(from_point, to_point, t, + t + (to_time - from_time)) + self._segments.append(segment) + + self._segment_times = [l.start_time for l in self._segments] + + self._cycle_time = t + + def _get_patrol_segment_by_time(self, + from_point, + to_point, + from_time, + to_time): + """Returns a PatrolSegmentData for the given points and times.""" + unit_vector, length = self._get_vector(from_point, to_point) + orientation = self._get_orientation(unit_vector) + + if np.isclose(to_time, from_time): + speed_mps = 0 + else: + speed_mps = length / (to_time - from_time) + + if self._speed_mps is not None: + speed_mps = np.min([self._speed_mps, speed_mps]) + + if np.isclose(0, speed_mps): + new_to_time = to_time + else: + new_to_time = np.max([to_time, from_time + (length / speed_mps)]) + + segment = PatrolSegmentData( + start_time=from_time, + start_position=np.array(from_point), + velocity=unit_vector * speed_mps, + orientation=orientation) + + return segment, new_to_time + + def _get_patrol_segment_by_speed(self, from_point, to_point, current_time): + """Returns a PatrolSegmentData for the given points and a constant speed.""" + unit_vector, length = self._get_vector(from_point, to_point) + orientation = self._get_orientation(unit_vector) + + segment = PatrolSegmentData( + start_time=current_time, + start_position=np.array(from_point), + velocity=unit_vector * self._speed_mps, + orientation=orientation) + time = current_time + length / self._speed_mps + + return segment, time + + def _get_vector(self, from_point, to_point): + """Gets the unit vector and length of a from/to point pair.""" + vector = np.array(to_point) - np.array(from_point) + length = np.linalg.norm(vector) + + if length == 0: + raise ValueError(f"Length of patrol segment equal to 0, " + f"from {from_point} to {to_point}.") + unit_vector = vector / length + + return unit_vector, length + + def _get_orientation(self, unit_vector): + """Gets the orientation quaternion given a unit vector.""" + yaw = (np.arctan2(unit_vector[1], unit_vector[0]) + if self._face_travel_direction else 0) + self._yaw_angle + + orientation = np.array((0, 0, np.sin(yaw / 2), np.cos(yaw / 2))) + + return orientation + + def get_action(self, + t: float, + observations: Dict[Text, Any]) -> ControllerOutput: + """Returns position on, and orientation along the patrol segment.""" + del observations + + # t < 0 means initial condition, which is the same as the value at t = 0. + t = max(0, t) + + if t > self._cycle_time: + t = (self._cycle_time if self._repeat is PatrolRepeatMode.NO_REPEAT + else np.fmod(t, self._cycle_time)) + + segment = self._segments[bisect.bisect_right(self._segment_times, t) - 1] + position = ( + segment.start_position + segment.velocity * (t - segment.start_time)) + + return position, segment.orientation.copy(), {} + + +@gin.configurable +class LinearPatrolController(WayPointPatrolController): + """Controller for patrolling along a line segment (back and forth).""" + + def __init__(self, + from_point: Sequence[float], + to_point: Sequence[float], + **kwargs): + """Constructor. + + Args: + from_point: Starting point of motion, [x, y, z] in meters. + to_point: Returning point of motion, [x, y, z] in meters. + **kwargs: Keyword arguments to pass onto base class. + """ + super().__init__([from_point, to_point], + repeat_mode=PatrolRepeatMode.LOOP, + **kwargs) + + +# TODO(b/156126975): migrates this to use difference equation controller. +@gin.configurable +class ChaseController(ControllerBase): + """Controller for an object to chase another object at certain speed.""" + + def __init__(self, + self_key: Text, + target_key: Text, + initial_position: Sequence[float] = (0, 0, 0), + initial_orientation: Sequence[float] = (0, 0, 0, 1), + speed_mps: float = 1.0, + verbose: bool = False): + """Constructor. + + Args: + self_key: Observation dict key of position of object being controlled. + target_key: Observation dict key of position of target object. + initial_position: Initial position of the object. + initial_orientation: Initial orientation of the object in xyzw quaternion. + speed_mps: Speed in meters per second, always positive. + verbose: If True, log details of get_action() calculation for debugging. + """ + self._init_position = np.array(initial_position) + self._init_orientation = np.array(initial_orientation) + self._previous_orientation = self._init_orientation + if speed_mps <= 0: + raise ValueError( + f"'speed_mps' should be a positive value, got {speed_mps}.") + self._speed_mps = speed_mps + + self._self_key = self_key + self._target_key = target_key + self._verbose = verbose + + self._time_sec = 0 + + def get_action(self, + time_sec: float, + observations: Dict[Text, Any]) -> ControllerOutput: + """Returns position and orientation of the object being controlled. + + Args: + time_sec: Time since simulation reset in seconds. If time < 0, returns + initial values and ignores observations. + observations: A dict of all observations. + """ + if time_sec < 0: + # Initializes internal time. + self._time_sec = 0 + return self._init_position.copy(), self._init_orientation.copy(), {} + + self_position = observations[self._self_key] + target_position = observations[self._target_key] + + # Calculates delta vector and projects it to xy-plane. + delta_vector = (target_position - self_position) * (1, 1, 0) + delta_t = time_sec - self._time_sec + + # Advances internal time. + self._time_sec = time_sec + + if self._verbose: + with np.printoptions(precision=3, suppress=True): + logging.info("t = %.1f, self %s: %s, target %s: %s, v: %s, dt %.1f.", + self._t, + self._self_key, observations[self._self_key], + self._target_key, observations[self._target_key], + delta_vector, delta_t) + + # Avoids sigularity when it is close enough. Keeps previous orientation. + distance = np.linalg.norm(delta_vector) + if distance < _EPS_DISTANCE: + return target_position.copy(), self._previous_orientation.copy(), {} + + unit_delta_vector = delta_vector / distance + new_position = (unit_delta_vector * min(self._speed_mps * delta_t, distance) + + self_position) + + new_yaw = np.arctan2(unit_delta_vector[1], unit_delta_vector[0]) + new_orientation = np.array((0, 0, np.sin(new_yaw / 2), np.cos(new_yaw / 2))) + self._previous_orientation = new_orientation + + return new_position, new_orientation.copy(), {} + + +@gin.configurable +class AnimationFrameController(ControllerBase): + """An extra action controller to control playback of animation sequence.""" + + def __init__(self, fps: float = 10.0, + pause_between_repeat_sec: float = 0.0, + start_time_sec: float = 0.0): + """Constructor. + + Args: + fps: Frame per second of animation. + pause_between_repeat_sec: Pause between repeat in second. + start_time_sec: The time when animation starts to play. + """ + self._fps = fps + self._total_length = None + self._pause_between_repeat_sec = pause_between_repeat_sec + self._start_time_sec = start_time_sec + + def set_total_length(self, total_length: int): + """Sets total animation frame length.""" + if total_length <= 0: + raise ValueError( + f"Total number of frame must be >= 0, got {total_length}.") + self._total_length = total_length + + def get_action(self, + time_sec: float, + observations: Dict[Text, Any]) -> ControllerOutput: + """Returns animation frame number with default position and orientation. + + Args: + time_sec: Time since simulation reset in seconds. If time < 0, returns + initial values and ignores observations. + observations: A dict of all observations. + """ + time_sec = max(0, time_sec - self._start_time_sec) + frame = int(time_sec * self._fps) + if self._total_length: + frame = frame % ( + self._total_length + int(self._pause_between_repeat_sec * self._fps)) + frame = min(frame, self._total_length - 1) + return np.ndarray((0, 0, 0)), np.ndarray((0, 0, 0, 1)), { + ANIMATION_FRAME_NUMBER_KEY: frame} + + +@gin.configurable +class ConversationController(ControllerBase): + """Controller for an object that mimics conversational behavior. + + A controlled object is arrayed in a conversation about a center point. + When a target object reaches a thresholded distance away from the center, + the controlled object will face the target object and move away from + the target's intended path along an orthogonal direction vector until it + passes. + """ + + def __init__(self, + self_key: Text, + target_key: Text, + position: Sequence[float] = None, + orientation: Sequence[float] = None, + conversation_center: Sequence[float] = None, + proximity_threshold: float = 1.0, + speed_mps: float = 0.1): + """Constructor. + + Args: + self_key: Observation dict key of position of object being controlled. + target_key: Observation dict key of position of target object. + position: Initial position of the object. + orientation: Initial orientation of the object in xyzw quaternion. + conversation_center: Position of the center of the conversation group. + proximity_threshold: The distance from the conversation center that the + target must reach in order to prompt a response from the controlled + object. + speed_mps: Speed in meters per second, always positive. + """ + self._self_key = self_key + self._target_key = target_key + self._position = np.array(position or (0, 0, 0)) + self._orientation = np.array(orientation or (0, 0, 0, 1)) + self._conversation_center = np.array(conversation_center or (0, 0, 0)) + self._proximity_threshold = proximity_threshold + self._speed_mps = speed_mps + + self._prev_target_position = None + self._wait_position = None + + def _get_wait_position(self, self_position, target_position): + """Gets the waiting position for the controlled object. + + This returns the position that the controlled object should move towards + to create physical space such that the target object may pass through + the conversation space. + + Args: + self_position: The current position of the controlled object. + target_position: The current position of the target object. + + Returns: + An xyz position representing the waiting position that the controlled + object should move towards to create space. + """ + # Find an orthogonal projection to the target's path + target_path = np.array(target_position - self._prev_target_position) + self_path = np.array(self_position - self._prev_target_position) + + unit_target_path = target_path / np.linalg.norm(target_path) + + projected_point = np.dot(self_path, unit_target_path) * unit_target_path + projected_point += self._prev_target_position + + # Get the position that lies along the orthogonal projection vector + # but in the opposite direction from the target's path and exactly + # proximity_threshold distance away. + return self._get_position( + projected_point, + self_position, + self._proximity_threshold, + self._proximity_threshold) + + def _get_orientation(self, source_position, target_position): + """Gets orientation required to face target_position from source_position. + + Args: + source_position: The source position where an object would be located. + target_position: The target position that an object should face. + + Returns: + A xyzw quaternion indicating the orientation. + """ + if np.allclose(source_position, target_position): + return self._orientation + + delta_vector = (target_position - source_position) * (1, 1, 0) + + new_yaw = np.arctan2(delta_vector[1], delta_vector[0]) + new_orientation = np.array( + (0, 0, np.sin(new_yaw / 2), np.cos(new_yaw / 2))) + + return new_orientation + + def _get_position(self, + source_position, + target_position, + min_delta, + max_delta): + """Gets the next position along the vector from source to target. + + This returns the position that should be moved to next which lies along + the direction vector from source -> target with a minimum length of + min_delta and a maximum distance of max_delta. + + Args: + source_position: The current position of the controlled object. + target_position: The target position to move to. + min_delta: The minimum amount of distance to move. + max_delta: The maximum amount of distance to move. + + Returns: + An xyz position representing the next position to move to. + """ + delta_vector = (target_position - source_position) * (1, 1, 0) + distance = np.linalg.norm(delta_vector) + + # If the distance to the target is greater than the maximum step delta, + # then normalize the vector and set it to the max step delta. + if distance > max_delta: + delta_vector = (delta_vector / distance) * max_delta + # If the distance is less than the minimum step delta, then normalize + # the vector and set it to the min step delta. + elif distance < min_delta: + delta_vector = (delta_vector / distance) * min_delta + + new_position = (delta_vector + source_position) + + return new_position + + def _get_target_distance_to_center(self, target_position): + """Gets the distance from the target to the conversation center point. + + Args: + target_position: The target position. + + Returns: + The scalar distance from the target position to the conversation center. + """ + # Calculates delta vector and projects it to xy-plane. + delta_vector = (target_position - self._conversation_center) * (1, 1, 0) + + # Compute the length of the delta vector. + return np.linalg.norm(delta_vector) + + def get_action(self, + t: float, + observations: Dict[Text, Any]) -> ControllerOutput: + """Gets the position and orientation of the controlled object. + + Args: + t: The current time step. + observations: Dict containing sensor observations for current time step. + + Returns: + The new position and orientation for the controlled object. + """ + + position = self._position + orientation = self._orientation + + # Observations are only available for positive time steps. + if t >= 0: + self_position = observations[self._self_key] + target_position = observations[self._target_key] + + target_distance = self._get_target_distance_to_center(target_position) + + # Check if the target is within the threshold distance of the + # conversation center. + if(target_distance < self._proximity_threshold and + self._prev_target_position is not None): + + # If it is, get the position that the controlled object should move to + # in order to create space and get the resulting action/orientation. + wait_position = self._get_wait_position(self_position, target_position) + + orientation = self._get_orientation( + self_position, + target_position) + + position = self._get_position( + self_position, + wait_position, + 0.0, + self._speed_mps) + else: + # Otherwise, get the position/orientation required to move back to + # the original position and face the conversation center. + orientation = self._get_orientation( + self_position, + self._conversation_center) + + position = self._get_position( + self_position, + self._position, + 0.0, + self._speed_mps) + + self._prev_target_position = target_position + + # Only return a new position along the x/y axis, z should be unaffected. + position = np.array([position[0], position[1], self._position[2]]) + return position, orientation, {} + + +@gin.configurable +class PauseIfCloseByWrapper(ControllerBase): + """A controller wrapper that pauses controller if object is close to others. + + This wrapper works best if the underlying controller is time based. It is + intended to be a simple way to stop agent when blocked and is not for + reliable collision avoidance. + """ + + _DEFAULT_PAUSE_DISTANCE_M = 1.0 + + def __init__( + self, + wrapped_controller: ControllerBase, + self_pos_key: Text, + others_pos_keys: Sequence[Text], + pause_distance: Union[float, Sequence[float]] = _DEFAULT_PAUSE_DISTANCE_M, + self_yaw_key: Optional[Text] = None, + active_front_sector: Optional[float] = None): + """Constructor. + + Args: + wrapped_controller: The controller being wrapped. + self_pos_key: Observation key of self position. + others_pos_keys: Observation keys of others' positions. + pause_distance: The distance limit before the controller pauses in meters. + Can be a float value which applies to all objects specified in + others_pos_keys or a Sequence of float values with the same length + as others_pos_keys denoting the pause distance for each individual + object in the same order in others_pos_keys. Default pause distance is + one meter. + self_yaw_key: Observation key of self yaw. Required if active_front_sector + is specified. + active_front_sector: If specified, it defines pie-shaped active region in + front of controlled object. The pie-shaped area is symmetric about the + forward direction of controlled object with it angle defined by this + arg in radians, Only when other objects shows up in this region and + pause distance requirement is met, pause is actived. + """ + + self._controller = wrapped_controller + self._pause_start_t = -1 + self._shift_t = 0 + self._last_action = None + self._self_pos_key = self_pos_key + self._others_pos_keys = list(others_pos_keys) # Make a copy. + + if isinstance(pause_distance, float): + pause_distance = [pause_distance] * len(others_pos_keys) + + if len(pause_distance) != len(others_pos_keys): + raise ValueError( + "pause_distance and others_pos_keys must have the same length.") + self._pause_distance = list(pause_distance) # Make a copy. + + if active_front_sector is not None and self_yaw_key is None: + raise ValueError( + "self_yaw_key must be specified if active_front_sector is specified.") + + self._self_yaw_key = self_yaw_key + self._active_front_sector = active_front_sector + + def get_action(self, + t: float, + observations: Dict[Text, Any]) -> ControllerOutput: + + """Gets the position and orientation of the controlled object. + + Args: + t: The current time step. + observations: Dict containing sensor observations for current time step. + + Returns: + The new position and orientation for the controlled object. + """ + if t < 0: + self._pause_start_t = -1 + self._shift_t = 0 + self._last_action = self._controller.get_action( + t, observations) + return self._last_action + + if self._should_pause(observations): + # Only record the start time of pause. + if self._pause_start_t < 0: + self._pause_start_t = t + return self._last_action + else: + if self._pause_start_t >= 0: + self._shift_t += t - self._pause_start_t + self._pause_start_t = -1 + + self._last_action = self._controller.get_action( + t - self._shift_t, observations) + return self._last_action + + def _should_pause(self, observations) -> bool: + """Determines whether the controller should pause.""" + self_position_2d = observations[self._self_pos_key][:2] + for pos_key, pause_distance in zip( + self._others_pos_keys, self._pause_distance): + position_2d = observations[pos_key][:2] + vector_2d = position_2d - self_position_2d + distance = np.linalg.norm(vector_2d) + + if self._active_front_sector is None: + return distance <= pause_distance + else: + yaw = observations[self._self_yaw_key][0] + dot = np.dot(vector_2d / distance, np.array([np.cos(yaw), np.sin(yaw)])) + return (distance <= pause_distance and + np.arccos(dot) < self._active_front_sector / 2) + + return False diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/robots/quadruped_base.py b/examples/pybullet/gym/pybullet_envs/minitaur/robots/quadruped_base.py new file mode 100644 index 000000000..960c278ed --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/robots/quadruped_base.py @@ -0,0 +1,724 @@ +# Lint as: python3 +"""The base class for all quadrupeds.""" +from typing import Any, Callable, Dict, Sequence, Tuple, Text, Union +import gin +import gym +import numpy as np + +from pybullet_utils import bullet_client +from pybullet_envs.minitaur.envs_v2.sensors import sensor as sensor_lib +from pybullet_envs.minitaur.robots import hybrid_motor_model +from pybullet_envs.minitaur.robots import robot_base +from pybullet_envs.minitaur.robots import robot_config +from pybullet_envs.minitaur.robots import robot_urdf_loader +from pybullet_envs.minitaur.robots.safety import data_types as safety_data_types +from pybullet_envs.minitaur.robots.utilities import kinematics_utils + +_UNIT_QUATERNION = (0, 0, 0, 1) +_GRAVITY_ACCELERATION_OFFSET = (0, 0, 10) + + +@gin.configurable +class QuadrupedBase(robot_base.RobotBase): + """The basic quadruped class for both sim and real robots.""" + + def __init__( + self, + pybullet_client: bullet_client.BulletClient, + clock: Callable[..., float], + motor_control_mode: robot_config.MotorControlMode, + motor_limits: robot_config.MotorLimits, + motor_model_class: Any = hybrid_motor_model.HybridMotorModel, + action_filter: Any = None, + sensors: Sequence[sensor_lib.Sensor] = (), + safety_config: safety_data_types.SafetyConfig = None, + **kwargs, + ): + """Initializes the class. + + Args: + pybullet_client: The PyBullet client. + clock: The sim or real clock. The clock function is typically provided by + the gym environment. + motor_control_mode: Specifies in which mode the motor operates. + motor_limits: The motor limits of the robot. Used by the motor_model_class + and action space building. + motor_model_class: The motor model to use. Not needed for real robots. + action_filter: The filter to smooth and/or regulate the actions. + sensors: All sensors mounted on the robot. + safety_config: The safety setting for the robot. + **kwargs: Additional args. + """ + + self._pybullet_client = pybullet_client + self._clock = clock + self._motor_control_mode = motor_control_mode + self._motor_model_class = motor_model_class + self._motor_limits = motor_limits + self._action_space = None + self._action_names = None + self._action_filter = action_filter + self._sensors = sensors + self._safety_config = safety_config + self._urdf_loader = None + self._last_base_velocity = np.zeros(3) + self._last_observation_time = self._clock() + self._last_base_acceleration_world = np.zeros(3) + self._last_base_acceleration_accelerometer = np.zeros(3) + + self.load() + + def load( + self, + base_position: Tuple[float] = None, + base_orientation_quaternion: Tuple[float] = None, + joint_angles: Union[Dict[Text, float], Tuple[float]] = None, + ): + """Loads the URDF with the configured pose. + + Args: + base_position: The base position after URDF loading. Will use the + configured pose in gin if None. + base_orientation_quaternion: The base orientation after URDF loading. Will + use the configured values in gin if not specified. + joint_angles: The desired joint angles after loading. Will use the + configured values if None. + """ + # A robot specific pre loading routing. + self._pre_load() + + if not self._urdf_loader: + self._urdf_loader = robot_urdf_loader.RobotUrdfLoader( + pybullet_client=self._pybullet_client) + + # Record the urdf pose at loading, which will be used as the rotation + # reference for base rotation computation. + self._init_urdf_position, self._init_orientation_quat = ( + self._pybullet_client.getBasePositionAndOrientation( + self._urdf_loader.robot_id)) + unused_position, self._init_orientation_inv_quat = ( + self._pybullet_client.invertTransform( + position=(0, 0, 0), orientation=self._init_orientation_quat)) + + # Joint ids may be different from the motor ids. + self._joint_id_dict = self._urdf_loader.get_joint_id_dict() + for joint_id in self._joint_id_dict.values(): + # Disables the default motors in PyBullet. + self._pybullet_client.setJointMotorControl2( + bodyIndex=self._urdf_loader.robot_id, + jointIndex=joint_id, + controlMode=self._pybullet_client.VELOCITY_CONTROL, + targetVelocity=0, + force=0) + # Removes the default joint damping in PyBullet. + self._pybullet_client.changeDynamics( + self._urdf_loader.robot_id, + joint_id, + linearDamping=0, + angularDamping=0) + + # We expect that this is non-empty for all quadrupedes, and should be an + # OrderedDict. + self._motor_id_dict = self._urdf_loader.get_motor_id_dict() + if not self._motor_id_dict: + raise ValueError("Motor id dict cannot be empty for quadrupeds.") + self._motor_ids = self._motor_id_dict.values() + self._num_motors = len(self._motor_id_dict) + + self._build_action_space() + + # Not needed for real robots. + if self._motor_model_class: + # TODO(b/151664871): Also supports position/velocity limits in the motor + # model. + self._motor_model = self._motor_model_class( + num_motors=self._num_motors, + motor_control_mode=self._motor_control_mode, + torque_lower_limits=self._motor_limits.torque_lower_limits, + torque_upper_limits=self._motor_limits.torque_upper_limits, + ) + + # Caches the variable for faster computation during stepping. + self._motor_direction_dict = self._urdf_loader.get_joint_direction_dict( + self._motor_id_dict.keys()) + self._motor_directions = np.array(list(self._motor_direction_dict.values())) + + self._motor_offset_dict = self._urdf_loader.get_joint_offset_dict( + self._motor_id_dict.keys()) + self._motor_offsets = np.array(list(self._motor_offset_dict.values())) + + # A robot specific routine post loading. + self._on_load() + + # Robot sensors may use information from the class. So we initialize them + # after the loading is done. + for sensor in self._sensors: + sensor.set_robot(self) + + def _build_action_space(self): + """Builds the action space of the robot using the motor limits.""" + if self._motor_control_mode == robot_config.MotorControlMode.POSITION: + self._action_space = gym.spaces.Box( + low=self._motor_limits.angle_lower_limits, + high=self._motor_limits.angle_upper_limits, + shape=(self._num_motors,), + dtype=np.float32) # TODO(b/159160184) Make dtype configurable. + self._action_names = tuple( + "POSITION_{}".format(motor) for motor in self._motor_id_dict.keys()) + elif self._motor_control_mode == robot_config.MotorControlMode.TORQUE: + self._action_space = gym.spaces.Box( + low=self._motor_limits.torque_lower_limits, + high=self._motor_limits.torque_upper_limits, + shape=(self._num_motors,), + dtype=np.float32) + self._action_names = tuple( + "TORQUE_{}".format(motor) for motor in self._motor_id_dict.keys()) + elif self._motor_control_mode == robot_config.MotorControlMode.HYBRID: + hybrid_action_limits_low = [ + self._motor_limits.angle_lower_limits, # q + # q_dot + self._motor_limits.velocity_lower_limits, + 0, # kp + 0, # kd + self._motor_limits.torque_lower_limits + ] # tau + hybrid_action_limits_high = [ + self._motor_limits.angle_upper_limits, + self._motor_limits.velocity_upper_limits, np.inf, np.inf, + self._motor_limits.torque_upper_limits + ] + space_low = np.full( + (self._num_motors, robot_config.HYBRID_ACTION_DIMENSION), + hybrid_action_limits_low).ravel() + space_high = np.full( + (self._num_motors, robot_config.HYBRID_ACTION_DIMENSION), + hybrid_action_limits_high).ravel() + self._action_space = gym.spaces.Box( + low=space_low, high=space_high, dtype=np.float32) + self._action_names = tuple( + "HYBRID_{}".format(motor) for motor in self._motor_id_dict.keys()) + else: + raise NotImplementedError("Not yet implemented!") + + def _pre_load(self): + """Robot specific pre load routine. + + For example, this allows configuration of the URDF loader. + """ + pass + + def _on_load(self): + """Robot specific post load routine. + + For example, we need to add add additional hinge constraints to the leg + components of Minitaur after loading. + + """ + pass + + @gin.configurable + def reset( + self, + base_position: Tuple[float] = None, + base_orientation_quaternion: Tuple[float] = None, + joint_angles: Union[Dict[Text, float], Tuple[float]] = None, + save_base_pose: bool = False, + **kwargs, + ): + """Resets the robot base and joint pose without reloading the URDF. + + Base pose resetting only works for simulated robots or visualization of real + robots. This routine also updates the initial observation dict. + + Args: + base_position: The desired base position. Will use the configured pose in + gin if None. Does not affect the position of the real robots in general. + base_orientation_quaternion: The base orientation after resetting. Will + use the configured values in gin if not specified. + joint_angles: The desired joint angles after resetting. Will use the + configured values if None. + save_base_pose: Save the base position and orientation as the default pose + after resetting. + **kwargs: Other args for backward compatibility. TODO(b/151975607): Remove + after migration. + """ + # Reset the robot's motor model. + self._motor_model.reset() + + # Reset the quantities for computing base acceleration. + self._last_base_velocity = np.zeros(3) + self._last_observation_time = self._clock() + self._last_base_acceleration_world = np.zeros(3) + self._last_base_acceleration_accelerometer = np.zeros(3) + + # Solves chicken and egg problem. We need to run a control step to obtain + # the first motor torques. + self._motor_torques = np.zeros(self._num_motors) + + # Receives a set of observation from the robot in case the reset function + # needs to use them. + self.receive_observation() + + self._reset_base_pose(base_position, base_orientation_quaternion) + self._reset_joint_angles(joint_angles) + + if save_base_pose: + # Records the base pose at resetting again, in case Reset is called with a + # different base orientation. This base pose will be used as zero + # rotation reference for base rotation computation. + self._init_urdf_position, self._init_orientation_quat = ( + self._pybullet_client.getBasePositionAndOrientation( + self._urdf_loader.robot_id)) + unused_position, self._init_orientation_inv_quat = ( + self._pybullet_client.invertTransform( + position=(0, 0, 0), orientation=self._init_orientation_quat)) + + # Updates the observation at the end of resetting. + self.receive_observation() + self._time_at_reset = self._clock() + + def GetTimeSinceReset(self): + return self._clock() - self._time_at_reset + + def _reset_base_pose(self, position=None, orientation_quat=None): + """Resets the pose of the robot's base. + + Base pose resetting only works for simulated robots or visualization of real + robots. + + Args: + position: The desired base position. Will use the configured pose in gin + if None. + orientation_quat: The desired base rotation. Will use the configured + default pose in None. + """ + self._urdf_loader.reset_base_pose(position, orientation_quat) + + def _reset_joint_angles(self, + joint_angles: Union[Tuple[float], + Dict[Text, float]] = None): + """Resets the joint pose. + + Real robots need to specify their routine to send joint angles. Simulated + Minitaur robots also needs to use dynamics to drive the motor joints, due to + the additional hinge joints not present in the URDF. + + Args: + joint_angles: The joint pose if provided. Will use the robot default pose + from configuration. + """ + # TODO(b/148897311): Supports tuple as the input. + self._urdf_loader.reset_joint_angles(joint_angles) + + def terminate(self): + """The safe exit routine for the robot. + + Only implemented for real robots. + + """ + pass + + def step(self, action: Any, num_sub_steps: int = 1): + """Steps the simulation. + + This is maintained for backward compatibility with the old robot class. + + Args: + action: The control command to be executed by the robot. + num_sub_steps: Each action can be applied (possibly with interpolation) + multiple timesteps, to simulate the elapsed time between two consecutive + commands on real robots. + """ + action = self.pre_control_step(action) + + for _ in range(num_sub_steps): + # TODO(b/149252003): Add sub sampling. + self.apply_action(action) + # Timestep is pre-determined at simulation setup. + self._pybullet_client.stepSimulation() + self.receive_observation() + + self.post_control_step() + + def pre_control_step(self, action: Any, control_timestep: float = None): + """Processes the action and updates per control step quantities. + + Args: + action: The input control command. + control_timestep: The control time step in the environment. + TODO(b/153835005), we can remove this once we pass env to the robot. + + Returns: + The filtered action. + """ + if self._action_filter: + # We assume the filter will create a set of interpolated results. + action = self._action_filter.filter(action) + return action + + def apply_action(self, motor_commands, motor_control_mode=None): + + # TODO(b/148897311): Supports dict in the future. + motor_commands = np.asarray(motor_commands) + + # We always use torque based control at the lowest level for quadrupeds. + unused_observed_torques, actual_torques = ( + self._motor_model.get_motor_torques(motor_commands, motor_control_mode)) + self._motor_torques = actual_torques + + # Converts the motor torques to URDF joint space, which may have different + # directions. + applied_motor_torques = np.multiply(actual_torques, self._motor_directions) + + self._pybullet_client.setJointMotorControlArray( + bodyIndex=self._urdf_loader.robot_id, + jointIndices=self._motor_ids, + controlMode=self._pybullet_client.TORQUE_CONTROL, + forces=applied_motor_torques) + + def _get_base_roll_pitch_yaw_rate(self): + _, angular_velocity = self._pybullet_client.getBaseVelocity( + self._urdf_loader.robot_id) + return kinematics_utils.rotate_to_base_frame( + self._pybullet_client, self.urdf_loader.robot_id, angular_velocity, + self._init_orientation_inv_quat) + + def _get_base_velocity(self): + base_velocity, _ = self._pybullet_client.getBaseVelocity( + self._urdf_loader.robot_id) + return base_velocity + + def _update_base_acceleration(self): + """Update the base acceleration using finite difference.""" + if self._last_observation_time < self.timestamp: + self._last_base_acceleration_world = ( + np.array(self._base_velocity) - self._last_base_velocity) / ( + self.timestamp - self._last_observation_time) + _, inv_base_orientation = self.pybullet_client.invertTransform( + np.zeros(3), np.array(self.base_orientation_quaternion)) + + # An offset is added to the acceleration measured in the world frame + # because the accelerometer reading is in the frame of free-falling robot. + base_acceleration_accelerometer = self.pybullet_client.multiplyTransforms( + np.zeros(3), inv_base_orientation, + self._last_base_acceleration_world + _GRAVITY_ACCELERATION_OFFSET, + _UNIT_QUATERNION)[0] + self._last_base_acceleration_accelerometer = np.array( + base_acceleration_accelerometer) + + def receive_observation(self): + """Receives the observations for all sensors.""" + # Update the intrinsic values including the joint angles, joint + # velocities, and imu readings. + self._base_position, base_orientation_quat = ( + self._pybullet_client.getBasePositionAndOrientation( + self._urdf_loader.robot_id)) + _, self._base_orientation_quat = self._pybullet_client.multiplyTransforms( + positionA=(0, 0, 0), + orientationA=self._init_orientation_inv_quat, + positionB=(0, 0, 0), + orientationB=base_orientation_quat) + self._base_velocity = self._get_base_velocity() + self._base_roll_pitch_yaw = self._pybullet_client.getEulerFromQuaternion( + self._base_orientation_quat) + + self._base_roll_pitch_yaw_rate = self._get_base_roll_pitch_yaw_rate() + + self._joint_states = self._pybullet_client.getJointStates( + self._urdf_loader.robot_id, self._motor_ids) + self._motor_angles = np.array( + [joint_state[0] for joint_state in self._joint_states]) + self._motor_angles = (self._motor_angles - + self._motor_offsets) * self._motor_directions + + self._motor_velocities = np.array( + [joint_state[1] for joint_state in self._joint_states]) + self._motor_velocities = self._motor_velocities * self._motor_directions + + # We use motor models to track the delayed motor positions and velocities + # buffer. + if self._motor_model: + self._motor_model.update(self._clock(), self._motor_angles, + self._motor_velocities) + + self._update_base_acceleration() + # Update the latest base velocity and timestamp at the end of the API. + self._last_base_velocity = np.array(self._base_velocity) + self._last_observation_time = self.timestamp + + def post_control_step(self): + """Called at the end of a control step outside the action repeat loop.""" + pass + + # TODO(tingnan): Change from "foot_positions" to "feet_positions". + def motor_angles_from_foot_positions(self, + foot_positions, + position_in_world_frame=False): + """Use IK to compute the motor angles, given the feet links' positions. + + Args: + foot_positions: The foot links' positions in frame specified by the next + parameter. The input is a numpy array of size (4, 3). + position_in_world_frame: Whether the foot_positions are specified in the + world frame. + + Returns: + A tuple. The position indices and the angles for all joints along the + leg. The position indices is consistent with the joint orders as returned + by GetMotorAngles API. + """ + joint_position_idxs = np.arange(self.num_motors) + foot_link_ids = tuple(self._urdf_loader.get_end_effector_id_dict().values()) + joint_angles = kinematics_utils.joint_angles_from_link_positions( + pybullet_client=self.pybullet_client, + urdf_id=self.robot_id, + link_positions=foot_positions, + link_ids=foot_link_ids, + joint_dof_ids=joint_position_idxs, + positions_are_in_world_frame=position_in_world_frame) + joint_angles = np.multiply( + np.asarray(joint_angles) - np.asarray(self._motor_offsets), + self._motor_directions) + return joint_position_idxs, joint_angles + + # TODO(tingnan): Change from "foot_positions" to "feet_positions". + def foot_positions(self, position_in_world_frame=False): + """Returns the robot's foot positions in the base/world frame.""" + foot_positions = [] + foot_link_ids = tuple(self._urdf_loader.get_end_effector_id_dict().values()) + for foot_id in foot_link_ids: + if not position_in_world_frame: + foot_positions.append( + kinematics_utils.link_position_in_base_frame( + pybullet_client=self.pybullet_client, + urdf_id=self.robot_id, + link_id=foot_id, + )) + else: + foot_positions.append( + kinematics_utils.link_position_in_world_frame( + pybullet_client=self.pybullet_client, + urdf_id=self.robot_id, + link_id=foot_id, + )) + return np.array(foot_positions) + + def feet_contact_forces(self) -> Sequence[np.ndarray]: + """Gets the contact forces on all feet. + + Reals robot may use a robot specific implementation. For example, the + Laikago will measure each contact force in the corresponding foot's local + frame, and this force will not be the total contact force due to the sensor + limitation. + + For simulated robots, we wll always report the force in the base frame. + + Returns: + A list of foot contact forces. + """ + foot_link_ids = tuple(self._urdf_loader.get_end_effector_id_dict().values()) + contact_forces = [np.zeros(3) for _ in range(len(foot_link_ids))] + + all_contacts = self._pybullet_client.getContactPoints( + bodyA=self._urdf_loader.robot_id) + + for contact in all_contacts: + (unused_flag, body_a_id, body_b_id, link_a_id, unused_link_b_id, + unused_pos_on_a, unused_pos_on_b, contact_normal_b_to_a, unused_distance, + normal_force, friction_1, friction_direction_1, friction_2, + friction_direction_2) = contact + + # Ignore self contacts + if body_b_id == body_a_id: + continue + + if link_a_id in foot_link_ids: + normal_force = np.array(contact_normal_b_to_a) * normal_force + friction_force = np.array(friction_direction_1) * friction_1 + np.array( + friction_direction_2) * friction_2 + force = normal_force + friction_force + local_force = kinematics_utils.rotate_to_base_frame( + self._pybullet_client, self.urdf_loader.robot_id, force, + self._init_orientation_inv_quat) + local_force_norm = np.linalg.norm(local_force) + toe_link_order = foot_link_ids.index(link_a_id) + if local_force_norm > 0: + contact_forces[toe_link_order] += local_force + else: + continue + return contact_forces + + def compute_jacobian_for_one_leg(self, leg_id: int) -> np.ndarray: + """Compute the Jacobian for a given leg. + + Args: + leg_id: Index of the leg for which the jacobian is computed. + + Returns: + The 3 x N transposed Jacobian matrix. where N is the total DoFs of the + robot. For a quadruped, the first 6 columns of the matrix corresponds to + the CoM translation and rotation. The columns corresponds to a leg can be + extracted with indices [6 + leg_id * 3: 6 + leg_id * 3 + 3]. Note that + the jacobian is calculated for motors, which takes motor directions into + consideration. + """ + com_dof = self._urdf_loader.com_dof + foot_link_ids = tuple(self._urdf_loader.get_end_effector_id_dict().values()) + return kinematics_utils.compute_jacobian( + pybullet_client=self.pybullet_client, + urdf_id=self.robot_id, + link_id=foot_link_ids[leg_id], + all_joint_positions=[ + state[0] for state in self._joint_states + ]) * np.concatenate([np.ones(com_dof), self._motor_directions]) + + def map_contact_force_to_joint_torques( + self, leg_id: int, contact_force: np.ndarray) -> Dict[int, float]: + """Maps the foot contact force to the leg joint torques. + + Args: + leg_id: Index of the leg for which the jacobian is computed. + contact_force: Desired contact force experted by the leg. + + Returns: + A dict containing the torques for each motor on the leg. + """ + foot_link_ids = tuple(self._urdf_loader.get_end_effector_id_dict().values()) + jv = self.compute_jacobian_for_one_leg(leg_id) + all_motor_torques = np.matmul(contact_force, jv) + motor_torques = {} + motors_per_leg = self.num_motors // len(foot_link_ids) + com_dof = self._urdf_loader.com_dof + for joint_id in range(leg_id * motors_per_leg, + (leg_id + 1) * motors_per_leg): + motor_torques[joint_id] = all_motor_torques[com_dof + joint_id] + + return motor_torques + + @classmethod + def get_constants(cls): + raise NotImplementedError("Not yet implemented!") + + @property + def timestamp(self): + return self._clock() + + @property + def action_space(self): + return self._action_space + + @property + def action_names(self): + return self._action_names + + @property + def base_orientation_quaternion(self): + """Gets the base orientation as a quaternion. + + The base orientation is always relative to the init_orientation, which + can be updated by Reset function. This is necessary as many URDF can have an + internal frame that is not z-up, so if we don't provide an init_orientation + (through Reset), the loaded robot can have its belly facing the horizontal + direction. + + Returns: + The base orientation in quaternion. + """ + return self._base_orientation_quat + + @property + def base_orientation_quaternion_default_frame(self): + """Gets the base orientation in the robot's default frame. + + This is the base orientation in whatever frame the robot specifies. For + simulated robot this is the URDF's internal frame. For real robot this can + be based on the rpy reading determined by the IMU. + + Returns: + The base orientation in quaternion in a robot default frame. + """ + _, base_orientation_quat = ( + self._pybullet_client.getBasePositionAndOrientation( + self._urdf_loader.robot_id)) + return base_orientation_quat + + @property + def sensors(self): + return self._sensors + + @property + def base_roll_pitch_yaw(self): + return self._base_roll_pitch_yaw + + @property + def base_roll_pitch_yaw_rate(self): + return self._base_roll_pitch_yaw_rate + + @property + def base_position(self): + return self._base_position + + @property + def base_velocity(self): + return self._base_velocity + + @property + def is_safe(self): + return True + + @property + def num_motors(self): + return self._num_motors + + @property + def motor_model(self): + return self._motor_model + + @property + def motor_limits(self) -> robot_config.MotorLimits: + return self._motor_limits + + @property + def motor_angles(self): + return self._motor_angles + + @property + def motor_velocities(self): + return self._motor_velocities + + @property + def motor_torques(self): + return self._motor_torques + + @property + def pybullet_client(self): + return self._pybullet_client + + @property + def urdf_loader(self): + return self._urdf_loader + + @property + def robot_id(self): + return self._urdf_loader.robot_id + + @property + def initital_orientation_inverse_quaternion(self): + return self._init_orientation_inv_quat + + @property + def base_acceleration_accelerometer(self): + """Get the base acceleration measured by an accelerometer. + + The acceleration is measured in the local frame of a free-falling robot, + which is consistent with the robot's IMU measurements. Here the + gravitational acceleration is first added to the acceleration in the world + frame, which is then converted to the local frame of the robot. + + """ + return np.array(self._last_base_acceleration_accelerometer) + + @property + def base_acceleration(self): + """Get the base acceleration in the world frame.""" + return np.array(self._last_base_acceleration_world) diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/robots/robot_base.py b/examples/pybullet/gym/pybullet_envs/minitaur/robots/robot_base.py new file mode 100644 index 000000000..75dc127cb --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/robots/robot_base.py @@ -0,0 +1,133 @@ +# Lint as: python3 +"""The abstract robot class.""" + +import abc +from typing import Optional, Sequence + +# Action names for robots operating kinematically. +LINEAR_VELOCITY = "linear_velocity" +ANGULAR_VELOCITY = "angular_velocity" + + +class RobotBase(metaclass=abc.ABCMeta): + """The base class for all robots used in the mobility team.""" + + @abc.abstractmethod + def reset( + self, + base_position: Optional[Sequence[float]] = None, + base_orientation_quaternion: Optional[Sequence[float]] = None) -> None: + """Resets the states (e.g. pose and sensor readings) of the robot. + + This is called at the start of each episode by the environment. + + Args: + base_position: Robot base position after reset. If None, robot stay where + it was after reset. For robot that does not support reset with position + change, a ValueError should be raised. + base_orientation_quaternion: Robot base orientation after reset. If None, + robot stays in pre-reset orientation. For robot that does not support + reset with orientation change, a ValueError should be raised. + """ + pass + + @abc.abstractmethod + def terminate(self): + """Shuts down the robot.""" + pass + + @abc.abstractmethod + def pre_control_step(self, action): + """Processes the input action before the action repeat loop. + + We assume that an action sent to the real robot is sticky, i.e. it will be + executed until a new action is received after some time. To simulate this, + we introduced the action_repeat parameter, to reflect how many time steps it + takes for the policy to generate a new action. That is, for each control + step, the simulation contains an inner loop: + + robot.pre_control_step(action) # Smooth or interpolate the action + for i in range(action_repeat): + robot.apply_action(action) + bullet.stepSimulation(time_step) # Step the sim for one time step + robot.receive_observation() # Update the sensor observations + robot.post_control_step() # Update some internal variables. + + Args: + action: Data type depends on the robot. Can be desired motor + position/torques for legged robots, or desired velocity/angular velocity + for wheeled robots. + """ + pass + + @abc.abstractmethod + def apply_action(self, action): + """Applies the action to the robot.""" + pass + + @abc.abstractmethod + def receive_observation(self): + """Updates the robot sensor readings.""" + pass + + @abc.abstractmethod + def post_control_step(self): + """Updates some internal variables such as step counters.""" + pass + + @property + def action_space(self): + """The action spec of the robot.""" + raise NotImplementedError("action_space is not implemented") + + @property + @abc.abstractmethod + def action_names(self): + """Name of each action in the action_space. + + This is a structure of strings with the same shape as the action space, + where each string describes the corresponding element of the action space + (for example, a kinematic robot might return ("linear_velocity", + "angular_velocity")). Used for logging in the safety layer. + """ + + @property + def sensors(self): + """Returns the sensors on this robot. + + Sensors are the main interface between the robot class and the gym + environment. Sensors can return what the robot can measure (e.g. + joint angles, IMU readings), and can represent more general quantities, i.e. + the last action taken, that can be part of the observation space. + Sensor classes are used by the robot class to the specify its observation + space. + + """ + raise NotImplementedError("sensors property not implemented") + + @property + def base_orientation_quaternion(self): + """Returns the base pose as a quaternion in format (x, y, z, w). + + These properties differ from the sensor interfaces, as they represent + the built-in measurable quantities. We assume most robots have an IMU at + its base to measure the base pose. Actually, some sensor classes like the + base pose sensor and joint angle sensor will call these built-in methods. In + general, how these quantities can be extracted depends on the specific real + robots. + + """ + raise NotImplementedError("base_orientation_quaternion is not implemented") + + @property + def base_roll_pitch_yaw(self): + """Returns the base roll, pitch, and yaw angles.""" + raise NotImplementedError("base_roll_pitch_yaw is not implemented") + + @property + def base_roll_pitch_yaw_rate(self): + raise NotImplementedError("base_roll_pitch_yaw_rate is not implemented") + + @property + def base_position(self): + raise NotImplementedError("base_position is not implemented") diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/robots/robot_config.py b/examples/pybullet/gym/pybullet_envs/minitaur/robots/robot_config.py new file mode 100644 index 000000000..255e686d2 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/robots/robot_config.py @@ -0,0 +1,105 @@ +# Lint as: python3 +"""The configuration parameters for our robots.""" +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import enum +from typing import Sequence, Union +import dataclasses +import gin +import numpy as np + + +@gin.constants_from_enum +class MotorControlMode(enum.Enum): + """The supported motor control modes.""" + POSITION = 1, + + # Apply motor torques directly. + TORQUE = 2, + + # Apply a tuple (q, qdot, kp, kd, tau) for each motor. Here q, qdot are motor + # position and velocities. kp and kd are PD gains. tau is the additional + # motor torque. This is the most flexible control mode. + HYBRID = 3, + + # PWM mode is only availalbe for Minitaur + PWM = 4 + + +# TODO(b/127675924): Group other parameters in the named attrib class. + +# Each hybrid action is a tuple (position, position_gain, velocity, +# velocity_gain, torque) +HYBRID_ACTION_DIMENSION = 5 + + +class HybridActionIndex(enum.Enum): + # The index of each component within the hybrid action tuple. + POSITION = 0 + POSITION_GAIN = 1 + VELOCITY = 2 + VELOCITY_GAIN = 3 + TORQUE = 4 + + +@gin.configurable +class MotorLimits(object): + """The data class for motor limits.""" + + def __init__( + self, + angle_lower_limits: Union[float, Sequence[float]] = float('-inf'), + angle_upper_limits: Union[float, Sequence[float]] = float('inf'), + velocity_lower_limits: Union[float, Sequence[float]] = float('-inf'), + velocity_upper_limits: Union[float, Sequence[float]] = float('inf'), + torque_lower_limits: Union[float, Sequence[float]] = float('-inf'), + torque_upper_limits: Union[float, Sequence[float]] = float('inf'), + ): + """Initializes the class.""" + self.angle_lower_limits = angle_lower_limits + self.angle_upper_limits = angle_upper_limits + self.velocity_lower_limits = velocity_lower_limits + self.velocity_upper_limits = velocity_upper_limits + self.torque_lower_limits = torque_lower_limits + self.torque_upper_limits = torque_upper_limits + + +@gin.constants_from_enum +class WheeledRobotControlMode(enum.Enum): + """The control mode for wheeled robots.""" + # Controls the base of the robot (i.e. in kinematic mode.) or the base wheels + # using motor commands. + BASE = 1 + # Controls arm only + ARM = 2 + # Controls both base and arm + BASE_AND_ARM = 3 + # Controls both base and head + BASE_AND_HEAD = 4 + # Controls the non-wheel motors. This include arms and heads. + BODY = 5 + # Controls all degrees of freedom, i.e. the base and arm/head simultaneously. + ALL = 6 + # High-level navigation target. + NAVIGATION_TARGET = 7 + # Individually addressable actions for body joints, with nested dict actions. + ADDRESSABLE = 8 + + +@dataclasses.dataclass +class TwistActionLimits: + """The data class for twist action limits. + + Common abbreviations used in variable names suffix: + mps = Meters per Second + rps = Radians per Second + """ + max_linear_mps: float + min_linear_mps: float + max_angular_rps: float + min_angular_rps: float + + + diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/robots/robot_urdf_loader.py b/examples/pybullet/gym/pybullet_envs/minitaur/robots/robot_urdf_loader.py new file mode 100644 index 000000000..2d4bf710a --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/robots/robot_urdf_loader.py @@ -0,0 +1,371 @@ +# Lint as: python3 +"""Helper class to load and manage the robot URDF file in simulation.""" + +import collections +from typing import Dict, Text, Tuple + +import gin +import numpy as np + +from pybullet_utils import bullet_client + +# Base link does not have a parent joint. So we just use the string "robot_base" +# for reference. The corresponding link/joint id is always -1 in pybullet. +ROBOT_BASE = "robot_base" + + +def _sub_dict(joint_name_to_id: Dict[Text, int], + joint_names: Tuple[Text]) -> Dict[Text, int]: + sub_dict = collections.OrderedDict() + if joint_names is None: + return sub_dict + for name in joint_names: + sub_dict[name] = joint_name_to_id[name] + return sub_dict + + +def convert_to_urdf_joint_angles( + robot_space_joint_angles: np.ndarray, + joint_offsets: np.ndarray, + joint_directions: np.ndarray, +): + return robot_space_joint_angles * joint_directions + joint_offsets + + +def convert_to_robot_joint_angles( + urdf_space_joint_angles: np.ndarray, + joint_offsets: np.ndarray, + joint_directions: np.ndarray, +): + return (urdf_space_joint_angles - joint_offsets) * joint_directions + + +@gin.configurable +class RobotUrdfLoader(object): + """A abstract class to manage the robot urdf in sim.""" + + def __init__( + self, + pybullet_client: bullet_client.BulletClient, + urdf_path: Text, + constrained_base: bool = False, + enable_self_collision: bool = True, + init_base_position: Tuple[float] = (0, 0, 0), + init_base_orientation_quaternion: Tuple[float] = None, + init_base_orientation_rpy: Tuple[float] = None, + base_names: Tuple[Text] = None, + init_joint_angles: Dict[Text, float] = None, + joint_offsets: Dict[Text, float] = None, + joint_directions: Dict[Text, int] = None, + motor_names: Tuple[Text] = None, + end_effector_names: Tuple[Text] = None, + user_group: Dict[Text, Tuple[Text]] = None, + ): + """Initialize the class. + + Args: + pybullet_client: A pybullet client. + urdf_path: The path to the URDF to load. + constrained_base: Whether to create a FIXED constraint to the base of the + URDF. Needs to be True for kinematic robots. This allows us to "hang" + the simulated robot in air, and the hanging point can follow arbitrary + provided paths. + enable_self_collision: Determines if the robot can collide with itself. + init_base_position: The base x, y, z after loading. + init_base_orientation_quaternion: The base rotation after loading. + init_base_orientation_rpy: The base rotation after loading, presented in + roll, pitch, yaw. + base_names: The base joint names. Used to find additional links that + belong to the base. Optional because the base might only contain a + single mesh/block, which always has the id of "-1". + init_joint_angles: Maps joint name to the desired joint pose after loading + URDF. If not provided, will use the URDF default. This can be a subset + of all joints in the URDF. This should be in the robot joint convention, + which can be different from the URDF convention. + joint_offsets: The "zero" position of joint angles in the URDF space. + joint_directions: To convert between robot sdk/control and urdf joint + convention. + motor_names: The motor joint names in the URDF. Typically a subset of all + movable joints/DoFs. + end_effector_names: A subset of joints specifying the end-effector + joint(s). For example for legged robots the end effectors are the toe + joints (if provided). For arms this group includes left and right + grippers. + user_group: User defined joint groups. For example for quadrupeds, we may + want to organize all joints according to which leg they belong to. + """ + self._pybullet_client = pybullet_client + self._urdf_path = urdf_path + self._init_base_position = init_base_position + if init_base_orientation_quaternion is not None: + self._init_base_orientation_quaternion = init_base_orientation_quaternion + else: + if init_base_orientation_rpy is None: + raise ValueError("Either init_base_orientation_quaterion " + "or init_base_orientation_rpy is required") + self._init_base_orientation_quaternion = ( + self._pybullet_client.getQuaternionFromEuler( + init_base_orientation_rpy)) + self._constrained_base = constrained_base + self._enable_self_collision = enable_self_collision + self._base_names = base_names + self._init_joint_angles = init_joint_angles + self._joint_offsets = joint_offsets + self._joint_directions = joint_directions + self._motor_names = motor_names + self._end_effector_names = end_effector_names + self._user_group = user_group + self.load( + enable_self_collision=enable_self_collision, + init_base_position=init_base_position, + init_base_orientation_quaternion=init_base_orientation_quaternion, + init_joint_angles=init_joint_angles) + + def get_base_id_dict(self, name: Tuple[Text] = None) -> Dict[Text, int]: + if name is None: + return self._base_dict + return _sub_dict(self._base_dict, name) + + def get_joint_id_dict(self, name: Tuple[Text] = None) -> Dict[Text, int]: + if name is None: + return self._joint_name_to_id + return _sub_dict(self._joint_name_to_id, name) + + def get_link_id_dict(self, name: Tuple[Text] = None) -> Dict[Text, int]: + if name is None: + return self._link_name_to_id + return _sub_dict(self._link_name_to_id, name) + + def get_motor_id_dict(self, name: Tuple[Text] = None) -> Dict[Text, int]: + if name is None: + return self._motor_dict + return _sub_dict(self._motor_dict, name) + + def get_joint_direction_dict(self, + name: Tuple[Text] = None) -> Dict[Text, int]: + if name is None: + return self._joint_directions + return _sub_dict(self._joint_directions, name) + + def get_joint_offset_dict(self, + name: Tuple[Text] = None) -> Dict[Text, float]: + if name is None: + return self._joint_offsets + return _sub_dict(self._joint_offsets, name) + + def get_end_effector_id_dict(self, + name: Tuple[Text] = None) -> Dict[Text, int]: + if name is None: + return self._end_effector_dict + return _sub_dict(self._end_effector_dict, name) + + @property + def robot_id(self): + """Returns the unique object instance id of this loaded URDF in pybullet. + + Note this is different from all other get_{}_id APIs, which returns the + joint/link id within this robot instance. + + Returns: + The object id as returned by loadURDF. + """ + return self._robot_id + + @property + def all_joint_info(self): + return self._all_joint_info + + @property + def user_dict(self): + return self._user_dict + + @property + def motor_names(self): + return self._motor_names + + @property + def constrained_base(self): + return self._constrained_base + + def _build_base_dict(self): + """Builds the base joints dictionary. + + In pybullet, a link's id within the robot always equal to its parent joint + id. So this base joint dict functionaly is equivalent to the base link dict. + The dictionary may only contain {ROBOT_BASE: -1} if self._base_names is + empty. + + Returns: + The base link (joint) ordered dictionary. + """ + base_dict = collections.OrderedDict() + if self._base_names is None: + base_dict[ROBOT_BASE] = -1 + else: + base_dict.update(_sub_dict(self._joint_name_to_id, self._base_names)) + return base_dict + + def _build_user_dict(self): + """Builds a dictionary using user defined joint groups.""" + user_dict = collections.OrderedDict() + if self._user_group is None: + return user_dict + for group_name, group_joint_names in self._user_group.items(): + user_dict[group_name] = collections.OrderedDict() + user_dict[group_name].update( + _sub_dict(self._joint_name_to_id, group_joint_names)) + return user_dict + + def _build_all_joint_dict(self): + """Extracts all joints from the URDF. + + Finds all joints (fixed or movable) in the URDF and extracts the info. This + includes actuated joints (i.e. motors), and non-actuated joints, e.g. the + passive joints in Minitaur's four bar mechanism, and fixed joints connecting + the toe and the lower legs, etc. + + Returns: + number of joints, all joint information as returned by pybullet, and the + joint_name_to_id dictionary. + + """ + num_joints = self._pybullet_client.getNumJoints(self._robot_id) + all_joint_info = [ + self._pybullet_client.getJointInfo(self._robot_id, i) + for i in range(num_joints) + ] + + # Remove the default joint dampings to increase sim fidelity. + for joint_info in all_joint_info: + joint_id = joint_info[0] + self._pybullet_client.changeDynamics( + joint_id, -1, linearDamping=0, angularDamping=0) + + joint_name_to_id = collections.OrderedDict() + link_name_to_id = collections.OrderedDict([(ROBOT_BASE, -1)]) + for joint_info in all_joint_info: + joint_name = joint_info[1].decode("UTF-8") + joint_id = joint_info[0] + joint_name_to_id[joint_name] = joint_id + # Index 12 is the name of the joint's child link, and in PyBullet a child + # link id is always equal to its parent joint id. + link_name_to_id[joint_info[12].decode("UTF-8")] = joint_id + + return num_joints, all_joint_info, joint_name_to_id, link_name_to_id + + def load( + self, + enable_self_collision: bool = None, + init_base_position: Tuple[float] = None, + init_base_orientation_quaternion: Tuple[float] = None, + init_joint_angles: Dict[Text, float] = None, + ): + """Reloads the URDF and rebuilds the dictionaries.""" + if enable_self_collision is None: + enable_self_collision = self._enable_self_collision + if init_base_position is None: + init_base_position = self._init_base_position + if init_base_orientation_quaternion is None: + init_base_orientation_quaternion = self._init_base_orientation_quaternion + + self._robot_id = self._load_urdf(enable_self_collision, init_base_position, + init_base_orientation_quaternion) + + (self._num_joints, self._all_joint_info, self._joint_name_to_id, + self._link_name_to_id) = self._build_all_joint_dict() + self._base_dict = self._build_base_dict() + self._motor_dict = _sub_dict(self._joint_name_to_id, self._motor_names) + self._end_effector_dict = _sub_dict(self._joint_name_to_id, + self._end_effector_names) + self._user_dict = self._build_user_dict() + + self.reset_base_pose(init_base_position, init_base_orientation_quaternion) + self.reset_joint_angles(init_joint_angles) + + def _load_urdf(self, enable_self_collision: bool, + init_base_position: Tuple[float], + init_base_orientation_quaternion: Tuple[float]) -> int: + """Loads the URDF and returns the pybullet id.""" + try: + if enable_self_collision: + return self._pybullet_client.loadURDF( + self._urdf_path, + init_base_position, + init_base_orientation_quaternion, + useFixedBase=self._constrained_base, + flags=self._pybullet_client.URDF_USE_SELF_COLLISION) + else: + return self._pybullet_client.loadURDF( + self._urdf_path, + init_base_position, + init_base_orientation_quaternion, + useFixedBase=self._constrained_base, + ) + except: + print("!!!!!!!!!!!!!!!!") + print("Error: cannot find file:") + print(self._urdf_path) + import sys + sys.exit(0) + + def reset_joint_angles(self, joint_angles: Dict[Text, float] = None): + """Resets the joint angles. + + Resets the joint poses. This is instanteneously and will ignore the physics + (e.g. collisions, inertias, etc). Should only be used during the episode + reset time. Does not work for real robots (other than changing the + visualization). This API has no effect if both the input joint_angles and + the self._init_joint_angles are None. + + Args: + joint_angles: The joint angles in the robot's joint space. + + Raises: + AttributeError if the joint directions and joint offsets are not provided + during init. + """ + if self._init_joint_angles is None: + return + + if joint_angles is None: + joint_angles = self._init_joint_angles + + if self._joint_directions is None or self._joint_offsets is None: + raise AttributeError( + "joint directions and joint offsets not provided in __init__") + + for joint_name, angle in joint_angles.items(): + urdf_joint_angle = angle * self._joint_directions[ + joint_name] + self._joint_offsets[joint_name] + self._pybullet_client.resetJointState( + self._robot_id, + self._joint_name_to_id[joint_name], + urdf_joint_angle, + targetVelocity=0) + + def reset_base_pose( + self, + base_position: Tuple[float] = None, + base_orientation_quaternion: Tuple[float] = None, + ): + """Resets the base position and orientation. + + Instanteneously re-position the base pose of the robot. Does not work for + real robots except for the visualization. + + Args: + base_position: Base x, y, z position. + base_orientation_quaternion: Base rotation. + """ + if base_position is None: + base_position = self._init_base_position + if base_orientation_quaternion is None: + base_orientation_quaternion = self._init_base_orientation_quaternion + self._pybullet_client.resetBasePositionAndOrientation( + self._robot_id, base_position, base_orientation_quaternion) + self._pybullet_client.resetBaseVelocity(self._robot_id, (0, 0, 0), + (0, 0, 0)) + + @property + def com_dof(self): + return 0 if self._constrained_base else 6 diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/robots/safety/__init__.py b/examples/pybullet/gym/pybullet_envs/minitaur/robots/safety/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/robots/safety/data_types.py b/examples/pybullet/gym/pybullet_envs/minitaur/robots/safety/data_types.py new file mode 100644 index 000000000..853bb567b --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/robots/safety/data_types.py @@ -0,0 +1,67 @@ +"""Definitions of safety layer data types.""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import attr + + +@attr.s +class Bound(object): + """Struct for inclusive lower and upper bounds.""" + lower = attr.ib(type=float, default=0) + upper = attr.ib(type=float, default=0) + + @upper.validator # pytype: disable=attribute-error + def _upper_greator_equal_to_lower(self, attribute, value): + del attribute + assert value >= self.lower, ( + "upper bound {} is less than lower bound {}".format(value, self.lower)) + + +@attr.s +class SafetyConfig(object): + """Struct to configure the safety module.""" + motor_position_bound = attr.ib(type=list) + motor_position_gain_bound = attr.ib(type=list) + motor_velocity_bound = attr.ib(type=list) + motor_velocity_gain_bound = attr.ib(type=list) + motor_torque_bound = attr.ib(type=list) + timestamp_delta_bound = attr.ib(type=Bound) + motor_average_abs_velocity_bound = attr.ib(type=list) + motor_average_abs_power_bound = attr.ib(type=list) + state_action_timestamp_delta_bound = attr.ib(type=float) + motor_delta_position_bound = attr.ib(type=list) + motor_average_abs_delta_position_bound = attr.ib(type=list) + + +@attr.s +class MotorState(object): + """A generic type for motor state. + + Motor states are what we can potentially read from the motor encoder or + firmware APIs. + + """ + timestamp = attr.ib(type=float, default=None) + position = attr.ib(type=float, default=None) + position_gain = attr.ib(type=float, default=None) + velocity = attr.ib(type=float, default=None) + velocity_gain = attr.ib(type=float, default=None) + torque = attr.ib(type=float, default=None) + + +@attr.s +class MotorAction(object): + """A generic type for motor action. + + Motor actions are the potential command structure we can send to the motor. + While similar to MotorState, they are logically very different entities. + """ + timestamp = attr.ib(type=float, default=None) + position = attr.ib(type=float, default=None) + position_gain = attr.ib(type=float, default=None) + velocity = attr.ib(type=float, default=None) + velocity_gain = attr.ib(type=float, default=None) + torque = attr.ib(type=float, default=None) diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/robots/safety/motor_action_validator.py b/examples/pybullet/gym/pybullet_envs/minitaur/robots/safety/motor_action_validator.py new file mode 100644 index 000000000..567add414 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/robots/safety/motor_action_validator.py @@ -0,0 +1,128 @@ +"""Validates the motor commands.""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import typing +from pybullet_envs.minitaur.robots import robot_config +from pybullet_envs.minitaur.robots.safety import data_types +from pybullet_envs.minitaur.robots.safety import utilities +from pybullet_envs.minitaur.robots.safety.python import moving_window_filter + +_DEQUE_SIZE = 200 + + +class MotorActionValidator(object): + """A safety guard to check motor actions. + + Monitors the commands sent to the motor and detect unsafe behaviors. + """ + + def __init__( + self, + motor_id: typing.Any, + position_bound: data_types.Bound, + position_gain_bound: data_types.Bound, + velocity_bound: data_types.Bound, + velocity_gain_bound: data_types.Bound, + torque_bound: data_types.Bound, + timestamp_delta_bound: data_types.Bound, + delta_position_bound: data_types.Bound, + average_abs_delta_position_bound: data_types.Bound, + state_buffer_size: int = _DEQUE_SIZE, + ): + """Initializes the class. + + Args: + motor_id: Unique ID for the motor. + position_bound: The lower/upper bound of the motor angle. + position_gain_bound: The lower/upper bound of the motor position gain for + PD control. + velocity_bound: The lower/upper bound of the motor speed. + velocity_gain_bound: The lower/upper bound of the motor velocity gain for + PD control. + torque_bound: The lower/upper bound of the measured motor torque. + timestamp_delta_bound: The range of timestamp difference between two + consecutively received motor states. + delta_position_bound: The bound between the current motor position and the + command position, in position control mode. + average_abs_delta_position_bound: The bound for average motor position and + command poisition difference. + state_buffer_size: The buffer size used to calculate the average. + """ + assert state_buffer_size > 1 + self._last_motor_state = None + + self._motor_id = motor_id + self._position_bound = position_bound + self._position_gain_bound = position_gain_bound + self._velocity_bound = velocity_bound + self._velocity_gain_bound = velocity_gain_bound + self._torque_bound = torque_bound + self._timestamp_delta_bound = timestamp_delta_bound + self._delta_position_bound = delta_position_bound + self._average_abs_delta_position_bound = average_abs_delta_position_bound + self._abs_delta_position_filter = moving_window_filter.MovingWindowFilter( + state_buffer_size) + + def on_state(self, new_state: data_types.MotorState): + """Updates the last motor state. + + Args: + new_state: The latest motor state. + """ + self._last_motor_state = new_state + + def on_action(self, new_action: data_types.MotorAction, + control_mode: robot_config.MotorControlMode): + """Adds a new motor action and validates it. + + Args: + new_action: A new action that will be send to the motor. + control_mode: The motor control mode. + + Raises: + safety_error.OutOfBoundError: When any of the motor action fields or + state-action difference is out of bound. + """ + + # We first validate the new state. + + motor_str = "motor {} ".format(self._motor_id) + if (control_mode == robot_config.MotorControlMode.POSITION or + control_mode == robot_config.MotorControlMode.HYBRID): + utilities.assert_in_bound(motor_str + "position", new_action.position, + self._position_bound) + utilities.assert_in_bound(motor_str + "velocity", new_action.velocity, + self._velocity_bound) + utilities.assert_in_bound(motor_str + "position gain", + new_action.position_gain, + self._position_gain_bound) + utilities.assert_in_bound(motor_str + "velocity gain", + new_action.velocity_gain, + self._velocity_gain_bound) + + utilities.assert_in_bound(motor_str + "torque", new_action.torque, + self._torque_bound) + + if self._last_motor_state is None: + return + + delta_time = new_action.timestamp - self._last_motor_state.timestamp + utilities.assert_in_bound(motor_str + "state-action timestamp difference", + delta_time, self._timestamp_delta_bound) + + # To detect the bang-bang type controller behavior. + if (control_mode == robot_config.MotorControlMode.POSITION or + control_mode == robot_config.MotorControlMode.HYBRID): + delta_position = new_action.position - self._last_motor_state.position + utilities.assert_in_bound(motor_str + "state-action position difference", + delta_position, self._delta_position_bound) + + average_abs_delta_position = ( + self._abs_delta_position_filter.CalculateAverage( + abs(delta_position))) + utilities.assert_in_bound( + motor_str + "average state-action position difference", + average_abs_delta_position, self._average_abs_delta_position_bound) diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/robots/safety/motor_state_validator.py b/examples/pybullet/gym/pybullet_envs/minitaur/robots/safety/motor_state_validator.py new file mode 100644 index 000000000..3ccf34c02 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/robots/safety/motor_state_validator.py @@ -0,0 +1,137 @@ +"""Software safety layer for robot control. + +Validates the motor states received from the motor encoder. + +""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import typing + +from pybullet_envs.minitaur.robots.safety import data_types +from pybullet_envs.minitaur.robots.safety import utilities +from pybullet_envs.minitaur.robots.safety.python import moving_window_filter + +# The default internal buffer size for the MotorStateValidator. +_DEQUE_SIZE = 200 + + +class MotorStateValidator(object): + """A safety guard to check motor states. + + Monitors the status of the motor and detects anomalies in the + readings. For example, the class will throw safety errors if the motor + velocity is too large. Currently we support checking of motor angle, velocity, + gain, torque, as well as the timestamp interval. + + Attributes: + last_state: The last received motor state. + """ + + def __init__( + self, + motor_id: typing.Any, + position_bound: data_types.Bound, + position_gain_bound: data_types.Bound, + velocity_bound: data_types.Bound, + velocity_gain_bound: data_types.Bound, + torque_bound: data_types.Bound, + timestamp_delta_bound: data_types.Bound, + average_abs_velocity_bound: data_types.Bound, + average_abs_power_bound: data_types.Bound, + state_buffer_size: int = _DEQUE_SIZE, + ): + """Initializes the class. + + Args: + motor_id: Unique ID for the motor. + position_bound: The lower/upper bound of the motor angle. + position_gain_bound: The lower/upper bound of the motor position gain for + PD control. + velocity_bound: The lower/upper bound of the motor speed. + velocity_gain_bound: The lower/upper bound of the motor velocity gain for + PD control. + torque_bound: The lower/upper bound of the measured motor torque. + timestamp_delta_bound: The range of timestamp difference between two + consecutively received motor states. + average_abs_velocity_bound: The average absolute velocity limit. + average_abs_power_bound: The average absolute mechanical power limit. + state_buffer_size: The buffer size used to calculate the average. + """ + assert state_buffer_size > 1 + self.last_state = None + + self._motor_id = motor_id + self._position_bound = position_bound + self._position_gain_bound = position_gain_bound + self._velocity_bound = velocity_bound + self._velocity_gain_bound = velocity_gain_bound + self._torque_bound = torque_bound + self._timestamp_delta_bound = timestamp_delta_bound + self._average_abs_velocity_bound = average_abs_velocity_bound + self._average_abs_power_bound = average_abs_power_bound + + # For velocity/power, we use a filter to compute their averages + # over a small period. This is to avoid the noisy readings giving false + # positive. + self._abs_velocity_filter = moving_window_filter.MovingWindowFilter( + state_buffer_size) + self._abs_power_filter = moving_window_filter.MovingWindowFilter( + state_buffer_size) + + def on_state(self, new_state: data_types.MotorState): + """Adds a new motor state and validates it. + + Will validate both the instantenous state as well as statitical + averages. + + Args: + new_state: A new state from the motor encoder. + + Raises: + safety_error.OutOfBoundError: When any of the motor readings (e.g. + position, torque) is out of bound. + """ + + # We first validate the new state. + + motor_str = "motor {} ".format(self._motor_id) + utilities.assert_in_bound(motor_str + "position", new_state.position, + self._position_bound) + utilities.assert_in_bound(motor_str + "velocity", new_state.velocity, + self._velocity_bound) + utilities.assert_in_bound(motor_str + "position gain", + new_state.position_gain, + self._position_gain_bound) + utilities.assert_in_bound(motor_str + "velocity gain", + new_state.velocity_gain, + self._velocity_gain_bound) + utilities.assert_in_bound(motor_str + "torque", new_state.torque, + self._torque_bound) + + if not self.last_state: + self.last_state = new_state + return + + last_state = self.last_state + + # Check if the time interval between two received states are large. + + delta_time = new_state.timestamp - last_state.timestamp + utilities.assert_in_bound(motor_str + "timestamp", delta_time, + self._timestamp_delta_bound) + + average_abs_velocity = self._abs_velocity_filter.CalculateAverage( + abs(new_state.velocity)) + utilities.assert_in_bound(motor_str + "average velocity", + average_abs_velocity, + self._average_abs_velocity_bound) + + average_abs_power = self._abs_power_filter.CalculateAverage( + abs(new_state.velocity * new_state.torque)) + utilities.assert_in_bound(motor_str + "average power", average_abs_power, + self._average_abs_power_bound) + + self.last_state = new_state diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/robots/safety/python/moving_window_filter.py b/examples/pybullet/gym/pybullet_envs/minitaur/robots/safety/python/moving_window_filter.py new file mode 100644 index 000000000..4249677c5 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/robots/safety/python/moving_window_filter.py @@ -0,0 +1,68 @@ +"""Moving window filter to smooth out sensor readings.""" + +import collections + +class MovingWindowFilter(object): + """A stable O(1) moving filter for incoming data streams. + + We implement the Neumaier's algorithm to calculate the moving window average, + which is numerically stable. + + """ + + def __init__(self, window_size: int): + """Initializes the class. + + Args: + window_size: The moving window size. + """ + assert window_size > 0 + self._window_size = window_size + self._value_deque = collections.deque(maxlen=window_size) + # The moving window sum. + self._sum = 0 + # The correction term to compensate numerical precision loss during + # calculation. + self._correction = 0 + + def _neumaier_sum(self, value: float): + """Update the moving window sum using Neumaier's algorithm. + + For more details please refer to: + https://en.wikipedia.org/wiki/Kahan_summation_algorithm#Further_enhancements + + Args: + value: The new value to be added to the window. + """ + + new_sum = self._sum + value + if abs(self._sum) >= abs(value): + # If self._sum is bigger, low-order digits of value are lost. + self._correction += (self._sum - new_sum) + value + else: + # low-order digits of sum are lost + self._correction += (value - new_sum) + self._sum + + self._sum = new_sum + + def calculate_average(self, new_value: float) -> float: + """Computes the moving window average in O(1) time. + + Args: + new_value: The new value to enter the moving window. + + Returns: + The average of the values in the window. + + """ + deque_len = len(self._value_deque) + if deque_len < self._value_deque.maxlen: + pass + else: + # The left most value to be subtracted from the moving sum. + self._neumaier_sum(-self._value_deque[0]) + + self._neumaier_sum(new_value) + self._value_deque.append(new_value) + + return (self._sum + self._correction) / self._window_size diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/robots/safety/safety_checker.py b/examples/pybullet/gym/pybullet_envs/minitaur/robots/safety/safety_checker.py new file mode 100644 index 000000000..765028c0e --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/robots/safety/safety_checker.py @@ -0,0 +1,119 @@ +"""The generic safety checking interface. + +Defines the generic safety checker class that can detect bad motor states, imu +states, self-collisions, unsafe motor commands, unusual temperature reading, +etc. Safety criterions are provided by the robot class. +""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import typing +from pybullet_envs.minitaur.robots import robot_config +from pybullet_envs.minitaur.robots.safety import data_types +from pybullet_envs.minitaur.robots.safety import motor_action_validator +from pybullet_envs.minitaur.robots.safety import motor_state_validator +from pybullet_envs.minitaur.robots.safety import utilities + +_MOTOR_STATE_BUFFER_SIZE = 500 + + +class SafetyChecker(object): + """The generic safety checking interface.""" + + def __init__( + self, + robot: typing.Any, + ): + """Initilaizes the class. + + TODO(b/131377892): Implement other state checkings including the + IMU/temperature/contact force if enabled. + + Args: + robot: A robot instance such like Minitaur/Laikago/Vision60. + """ + self._robot = robot + + self._motor_state_validators = [] + self._motor_action_validators = [] + for i in range(robot.num_motors): + self._motor_state_validators.append( + motor_state_validator.MotorStateValidator( + motor_id=i, + position_bound=robot.safety_config.motor_position_bound[i], + position_gain_bound=robot.safety_config + .motor_position_gain_bound[i], + velocity_bound=robot.safety_config.motor_velocity_bound[i], + velocity_gain_bound=robot.safety_config + .motor_velocity_gain_bound[i], + torque_bound=robot.safety_config.motor_torque_bound[i], + timestamp_delta_bound=robot.safety_config.timestamp_delta_bound, + average_abs_velocity_bound=robot.safety_config + .motor_average_abs_velocity_bound[i], + average_abs_power_bound=robot.safety_config + .motor_average_abs_power_bound[i], + state_buffer_size=_MOTOR_STATE_BUFFER_SIZE, + )) + self._motor_action_validators.append( + motor_action_validator.MotorActionValidator( + motor_id=i, + position_bound=robot.safety_config.motor_position_bound[i], + position_gain_bound=robot.safety_config + .motor_position_gain_bound[i], + velocity_bound=robot.safety_config.motor_velocity_bound[i], + velocity_gain_bound=robot.safety_config + .motor_velocity_gain_bound[i], + torque_bound=robot.safety_config.motor_torque_bound[i], + timestamp_delta_bound=robot.safety_config + .state_action_timestamp_delta_bound, + delta_position_bound=robot.safety_config + .motor_delta_position_bound[i], + average_abs_delta_position_bound=robot.safety_config + .motor_average_abs_delta_position_bound[i], + state_buffer_size=_MOTOR_STATE_BUFFER_SIZE, + )) + + def check_state(self) -> None: + """Validates the state of the robot. + + TODO(b/131377892): Implement other state checkings including the + IMU/temperature/contact force if enabled. + + Raises: + A safety exception if any state checking (motor/imu/etc) fails. + """ + + for motor_id, state_validator, action_validator in zip( + range(self._robot.num_motors), self._motor_state_validators, + self._motor_action_validators): + motor_state = data_types.MotorState( + timestamp=self._robot.last_state_time, + position=self._robot.GetMotorAngles()[motor_id], + velocity=self._robot.GetMotorVelocities()[motor_id], + position_gain=self._robot.GetMotorPositionGains()[motor_id], + velocity_gain=self._robot.GetMotorVelocityGains()[motor_id], + torque=self._robot.GetMotorTorques()[motor_id], + ) + state_validator.on_state(motor_state) + action_validator.on_state(motor_state) + + def check_motor_action( + self, + action: typing.Sequence[float], + control_mode: robot_config.MotorControlMode, + ) -> None: + """Validate the action w.r.t to the motor states. + + Args: + action: The motor commands sent to the robot. + control_mode: The motor control mode. + + Raises: + A safety exception if action checking fails. + """ + motor_action_list = utilities.convert_to_motor_action( + self._robot, action, control_mode) + for motor_id, validator in enumerate(self._motor_action_validators): + validator.on_action(motor_action_list[motor_id], control_mode) diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/robots/safety/safety_error.py b/examples/pybullet/gym/pybullet_envs/minitaur/robots/safety/safety_error.py new file mode 100644 index 000000000..5ff078a6f --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/robots/safety/safety_error.py @@ -0,0 +1,11 @@ +"""Exception types for safety related error.""" + + +class SafetyError(Exception): + """The base safety exception.""" + pass + + +class OutOfBoundError(SafetyError): + """Rasied when values like motor position or velocity is out of bound.""" + pass diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/robots/safety/utilities.py b/examples/pybullet/gym/pybullet_envs/minitaur/robots/safety/utilities.py new file mode 100644 index 000000000..9703b6bf0 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/robots/safety/utilities.py @@ -0,0 +1,163 @@ +"""Utilities for safety layers.""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import collections +import typing +from pybullet_envs.minitaur.robots import robot_config +from pybullet_envs.minitaur.robots.safety import data_types +from pybullet_envs.minitaur.robots.safety import safety_error + + +def assert_in_bound(name: typing.Text, value: float, bound: data_types.Bound): + """Check if the given value is within the provided bound. + + Args: + name: The name of the value. + value: Number to be checked. + bound: Contains the lower and upper bounds. The bound is inclusive. + + Raises: + safety_error.OutofBoundError: when the value is outside the bound. + """ + if bound.lower <= value <= bound.upper: + return + else: + raise safety_error.OutOfBoundError("{} is out of bound {} for {}".format( + value, bound, name)) + + +def convert_to_motor_action( + robot: typing.Any, + action: typing.Sequence[float], + control_mode: robot_config.MotorControlMode, +): + """Converts the input action to generic MotorAction classes. + + Args: + robot: An robot instance. + action: The motor commands sent to the robot. + control_mode: The motor control mode. + + Returns: + The list of converted MotorAction instances. + """ + motor_action_list = [] + if control_mode == robot_config.MotorControlMode.POSITION: + for motor_id, position in enumerate(action): + motor_action_list.append( + data_types.MotorAction( + timestamp=robot.last_action_time, + position=position, + position_gain=robot.GetMotorPositionGains()[motor_id], + velocity=0, + velocity_gain=robot.GetMotorVelocityGains()[motor_id], + torque=0)) + + if (control_mode == robot_config.MotorControlMode.TORQUE or + control_mode == robot_config.MotorControlMode.PWM): + for motor_id, torque in enumerate(action): + motor_action_list.append( + data_types.MotorAction( + timestamp=robot.last_action_time, + position=0, + position_gain=0, + velocity=0, + velocity_gain=0, + torque=torque)) + + if control_mode == robot_config.MotorControlMode.HYBRID: + for motor_id in range(robot.num_motors): + position_index = ( + motor_id * robot_config.HYBRID_ACTION_DIMENSION + + robot_config.HybridActionIndex.POSITION.value) + position_gain_index = ( + motor_id * robot_config.HYBRID_ACTION_DIMENSION + + robot_config.HybridActionIndex.POSITION_GAIN.value) + velocity_index = ( + motor_id * robot_config.HYBRID_ACTION_DIMENSION + + robot_config.HybridActionIndex.VELOCITY.value) + velocity_gain_index = ( + motor_id * robot_config.HYBRID_ACTION_DIMENSION + + robot_config.HybridActionIndex.VELOCITY_GAIN.value) + torque_index = ( + motor_id * robot_config.HYBRID_ACTION_DIMENSION + + robot_config.HybridActionIndex.TORQUE.value) + motor_action_list.append( + data_types.MotorAction( + timestamp=robot.last_action_time, + position=action[position_index], + position_gain=action[position_gain_index], + velocity=action[velocity_index], + velocity_gain=action[velocity_gain_index], + torque=action[torque_index])) + + return motor_action_list + + +class MovingWindowFilter(object): + """A stable O(1) moving filter for incoming data streams. + + We implement the Neumaier's algorithm to calculate the moving window average, + which is numerically stable. + + """ + + def __init__(self, window_size: int): + """Initializes the class. + + Args: + window_size: The moving window size. + """ + assert window_size > 0 + self._window_size = window_size + self._value_deque = collections.deque(maxlen=window_size) + # The moving window sum. + self._sum = 0 + # The correction term to compensate numerical precision loss during + # calculation. + self._correction = 0 + + def _neumaier_sum(self, value: float): + """Update the moving window sum using Neumaier's algorithm. + + For more details please refer to: + https://en.wikipedia.org/wiki/Kahan_summation_algorithm#Further_enhancements + + Args: + value: The new value to be added to the window. + """ + + new_sum = self._sum + value + if abs(self._sum) >= abs(value): + # If self._sum is bigger, low-order digits of value are lost. + self._correction += (self._sum - new_sum) + value + else: + # low-order digits of sum are lost + self._correction += (value - new_sum) + self._sum + + self._sum = new_sum + + def calculate_average(self, new_value: float) -> float: + """Computes the moving window average in O(1) time. + + Args: + new_value: The new value to enter the moving window. + + Returns: + The average of the values in the window. + + """ + deque_len = len(self._value_deque) + if deque_len < self._value_deque.maxlen: + pass + else: + # The left most value to be subtracted from the moving sum. + self._neumaier_sum(-self._value_deque[0]) + + self._neumaier_sum(new_value) + self._value_deque.append(new_value) + + return (self._sum + self._correction) / self._window_size diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/robots/time_ordered_buffer.py b/examples/pybullet/gym/pybullet_envs/minitaur/robots/time_ordered_buffer.py new file mode 100644 index 000000000..52cf6b86d --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/robots/time_ordered_buffer.py @@ -0,0 +1,263 @@ +# Lint as: python3 +"""The common class to manage the a stream of past data.""" + +import collections +from typing import Any, List, Sequence, Union +import dataclasses +import gin +import numpy as np + + +@dataclasses.dataclass +class BufferTuple: + value_0: Any + value_1: Any + coeff: float + + +FloatOrArray = Union[float, Sequence[float]] +BufferTupleOrArray = Union[BufferTuple, Sequence[BufferTuple]] +TIME_IDX = 0 +VALUE_IDX = 1 + + +@gin.configurable +class TimeOrderedBuffer(object): + """A buffer to hold and extract history data.""" + + def __init__(self, + max_buffer_timespan: float, + error_on_timestamp_reversal: bool = True, + error_on_duplicate_timestamp: bool = True, + replace_value_on_duplicate_timestamp: bool = False, + ): + """Initializes the class. + + Args: + max_buffer_timespan: Maximum amount of buffer by time to keep. + error_on_timestamp_reversal: Whether to throw error if inverted timestamps + are found. + error_on_duplicate_timestamp: Whether to throw error if the incoming + data has the same timestamp as the latest timestamp in the buffer. + replace_value_on_duplicate_timestamp: Whether to keep the new value when + a duplicate timestamp has occurred. This only applies if we are not + throwing an error on duplicate timestamps. + """ + if max_buffer_timespan < 0: + raise ValueError( + "Invalid max_buffer_timespan: {}".format(max_buffer_timespan)) + self._max_buffer_timespan = max_buffer_timespan + self._error_on_timestamp_reversal = error_on_timestamp_reversal + self._error_on_duplicate_timestamp = error_on_duplicate_timestamp + self._replace_value_on_duplicate_timestamp = ( + replace_value_on_duplicate_timestamp) + # TODO(tsangwei): Look for a ring buffer implementation. + self._buffer = collections.deque() + + def reset(self): + self._buffer.clear() + + def _compute_coeff(self, + newer_time: float, + older_time: float, + target_time: float, + ) -> float: + """Compute the coefficient value between the two timestamps. + + Args: + newer_time: The newer timestamp. + older_time: The older timestamp. + target_time: Target timestamp that is between the newer and older values. + + Returns: + The coefficient as a float. + """ + coeff = 0.0 + # Prevents divide by 0 error. + if newer_time != older_time: + assert older_time <= target_time <= newer_time + coeff = (newer_time - target_time) / (newer_time - older_time) + return coeff + + def _pack_data(self, + obs_newer: Any, + obs_older: Any, + target_time: float, + ) -> BufferTuple: + """Packs up buffer data as BufferTuple dataclass. + + Args: + obs_newer: Timestamp and value of newer observation. + obs_older: Timestamp and value of older observation. + target_time: Target timestamp of the observation we are looking for. + + Returns: + BufferTuple dataclass. + """ + coeff = self._compute_coeff(newer_time=obs_newer[TIME_IDX], + older_time=obs_older[TIME_IDX], + target_time=target_time) + return BufferTuple(value_0=obs_newer[VALUE_IDX], + value_1=obs_older[VALUE_IDX], + coeff=coeff) + + def _find_values_at(self, timestamp_targets: Sequence[float]) -> List[Any]: + """Get the lower/upper bound values for given target timestamp. + + Args: + timestamp_targets: Actual timestamp value to match against. + + Returns: + List of BufferTuple dataclass. + """ + results = [None] * len(timestamp_targets) + oldest_obs = self._buffer[0] + latest_obs = self._buffer[-1] + + search_start_idx = None + search_end_idx = None + + # Check to make sure we do not try to search for values outside of the + # current buffer. + for i in range(len(timestamp_targets)): + # Oldest observation have the smallest timestamp. + if timestamp_targets[i] <= oldest_obs[TIME_IDX]: + results[i] = self._pack_data(obs_newer=oldest_obs, + obs_older=oldest_obs, + target_time=timestamp_targets[i]) + elif timestamp_targets[i] >= latest_obs[TIME_IDX]: + results[i] = self._pack_data(obs_newer=latest_obs, + obs_older=latest_obs, + target_time=timestamp_targets[i]) + else: + if search_end_idx is None: + search_end_idx = i + search_start_idx = i + + if search_end_idx is not None: + results = self._walkthrough_buffer(timestamp_targets=timestamp_targets, + search_start_idx=search_start_idx, + search_end_idx=search_end_idx, + results=results) + + return results + + def _walkthrough_buffer(self, + timestamp_targets: List[float], + search_start_idx: int, + search_end_idx: int, + results: List[BufferTuple], + ) -> List[BufferTuple]: + """Actual method to walk through the buffer looking for requested values. + + Args: + timestamp_targets: List of timestamps to search for in buffer. + search_start_idx: Index number for timestamp_targets to start searching + from. + search_end_idx: Index number for timestamp_targets to stop searching at. + results: List of BufferTuple values that covers out of bound results. + + Returns: + List of BufferTuple values. + """ + value_older = None + target_idx = search_start_idx + target_timestamp = timestamp_targets[target_idx] + value_older = self._buffer[0] + + # Searching from oldest timestamp to latest timestamp. + for value_newer in self._buffer: + # Catch edge case scenario where multiple timestamp targets are between + # the same two buffer timestamps. (b/157104935) + while value_newer[TIME_IDX] >= target_timestamp: + # Catch special edge case scenario if using older_obs_blender method. + obs_older = value_newer if ( + value_newer[TIME_IDX] == target_timestamp) else value_older + results[target_idx] = self._pack_data(obs_newer=value_newer, + obs_older=obs_older, + target_time=target_timestamp) + if target_idx - 1 >= search_end_idx: + target_idx -= 1 + target_timestamp = timestamp_targets[target_idx] + else: + return results + value_older = value_newer + + return results + + def add(self, timestamp: float, value: Any): + """Inserts timestamp and value into buffer. + + Args: + timestamp: Timestamp of the data value. + value: Data value to be saved into the buffer. + """ + if self._buffer: + last_timestamp = self._buffer[-1][TIME_IDX] + if last_timestamp == timestamp: + if (not np.array_equal(self._buffer[-1][VALUE_IDX], value) and + self._error_on_duplicate_timestamp): + raise ValueError("Duplicate timestamp detected: {}".format(timestamp)) + else: + # Duplicate message detected. + if self._replace_value_on_duplicate_timestamp: + self._buffer[-1] = (timestamp, value) + return + if last_timestamp > timestamp and self._error_on_timestamp_reversal: + raise ValueError( + "Time reversal detected: new timestamp is {} vs last timestamp {}" + .format(timestamp, last_timestamp)) + # Dropping old buffer data that exceed buffer timespan limit and making + # sure the buffer does not go empty. + while (len(self._buffer) > 1 and self._max_buffer_timespan < + (timestamp - self._buffer[1][TIME_IDX])): + self._buffer.popleft() + self._buffer.append((timestamp, value)) + + def get_delayed_value(self, latency: FloatOrArray) -> BufferTupleOrArray: + """Retrieves value in the history buffer according to latency. + + Finds the closest pair of values that are some time (i.e. latency) ago from + the most recent timestamp. Suppose the history buffer looks like this: + + [(0, val_x),...,(0.6, val_k-1), (0.7, val_k), (0.8, val_k+1),...,(2, val_0)] + + And the latency is '1.33', then this API will locate the values with + timestamps close to 2 - 1.33 = 0.67. So in this case, it will return the + pair (0.7, val_k) and (0.6, val_k+1), as well as a blending coefficient + which is calculated by (0.7 - 0.67) / (0.7 - 0.6) = 0.3. This blending coeff + can be used to linearly interpolate the returned values, i.e. val_1 * (1 - + coeff) + val_2 * coeff, if the multiply operator is defined. + + Args: + latency: The time interval(s) to look backwards in the history buffer from + the most recent timestamp. + + Returns: + An array of BufferTuple dataclass. + + Raises: + ValueError: if the latency is negative. + BufferError: if the buffer is empty. + """ + buffer_len = len(self._buffer) + if buffer_len == 0: + raise BufferError("The buffer is empty. Have you called 'add'?") + + single_latency = isinstance(latency, (int, float)) + + if single_latency: + if latency < 0: + raise ValueError("Latency cannot be negative.") + else: + if any(value < 0 for value in latency): + raise ValueError("Latency list contains negative values.") + if latency != sorted(latency): + raise ValueError("Invalid unsorted latency list.") + + target_list = [latency] if single_latency else latency + current_time = self._buffer[-1][TIME_IDX] + target_list = [current_time - offset for offset in target_list] + + result = self._find_values_at(target_list) + return result[0] if single_latency else result diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/robots/timestamp.proto b/examples/pybullet/gym/pybullet_envs/minitaur/robots/timestamp.proto new file mode 100644 index 000000000..9c4c75cc3 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/robots/timestamp.proto @@ -0,0 +1,147 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto3"; + +package google.protobuf; + +option csharp_namespace = "Google.Protobuf.WellKnownTypes"; +option cc_enable_arenas = true; +option go_package = "google.golang.org/protobuf/types/known/timestamppb"; +option java_package = "com.google.protobuf"; +option java_outer_classname = "TimestampProto"; +option java_multiple_files = true; +option objc_class_prefix = "GPB"; + +// A Timestamp represents a point in time independent of any time zone or local +// calendar, encoded as a count of seconds and fractions of seconds at +// nanosecond resolution. The count is relative to an epoch at UTC midnight on +// January 1, 1970, in the proleptic Gregorian calendar which extends the +// Gregorian calendar backwards to year one. +// +// All minutes are 60 seconds long. Leap seconds are "smeared" so that no leap +// second table is needed for interpretation, using a [24-hour linear +// smear](https://developers.google.com/time/smear). +// +// The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By +// restricting to that range, we ensure that we can convert to and from [RFC +// 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings. +// +// # Examples +// +// Example 1: Compute Timestamp from POSIX `time()`. +// +// Timestamp timestamp; +// timestamp.set_seconds(time(NULL)); +// timestamp.set_nanos(0); +// +// Example 2: Compute Timestamp from POSIX `gettimeofday()`. +// +// struct timeval tv; +// gettimeofday(&tv, NULL); +// +// Timestamp timestamp; +// timestamp.set_seconds(tv.tv_sec); +// timestamp.set_nanos(tv.tv_usec * 1000); +// +// Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`. +// +// FILETIME ft; +// GetSystemTimeAsFileTime(&ft); +// UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime; +// +// // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z +// // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. +// Timestamp timestamp; +// timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); +// timestamp.set_nanos((INT32) ((ticks % 10000000) * 100)); +// +// Example 4: Compute Timestamp from Java `System.currentTimeMillis()`. +// +// long millis = System.currentTimeMillis(); +// +// Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) +// .setNanos((int) ((millis % 1000) * 1000000)).build(); +// +// +// Example 5: Compute Timestamp from Java `Instant.now()`. +// +// Instant now = Instant.now(); +// +// Timestamp timestamp = +// Timestamp.newBuilder().setSeconds(now.getEpochSecond()) +// .setNanos(now.getNano()).build(); +// +// +// Example 6: Compute Timestamp from current time in Python. +// +// timestamp = Timestamp() +// timestamp.GetCurrentTime() +// +// # JSON Mapping +// +// In JSON format, the Timestamp type is encoded as a string in the +// [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the +// format is "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z" +// where {year} is always expressed using four digits while {month}, {day}, +// {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional +// seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution), +// are optional. The "Z" suffix indicates the timezone ("UTC"); the timezone +// is required. A proto3 JSON serializer should always use UTC (as indicated by +// "Z") when printing the Timestamp type and a proto3 JSON parser should be +// able to accept both UTC and other timezones (as indicated by an offset). +// +// For example, "2017-01-15T01:30:15.01Z" encodes 15.01 seconds past +// 01:30 UTC on January 15, 2017. +// +// In JavaScript, one can convert a Date object to this format using the +// standard +// [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString) +// method. In Python, a standard `datetime.datetime` object can be converted +// to this format using +// [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with +// the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use +// the Joda Time's [`ISODateTimeFormat.dateTime()`]( +// http://www.joda.org/joda-time/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime%2D%2D +// ) to obtain a formatter capable of generating timestamps in this format. +// +// +message Timestamp { + // Represents seconds of UTC time since Unix epoch + // 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to + // 9999-12-31T23:59:59Z inclusive. + int64 seconds = 1; + + // Non-negative fractions of a second at nanosecond resolution. Negative + // second values with fractions must still have non-negative nanos values + // that count forward in time. Must be from 0 to 999,999,999 + // inclusive. + int32 nanos = 2; +} \ No newline at end of file diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/robots/timestamp_pb2.py b/examples/pybullet/gym/pybullet_envs/minitaur/robots/timestamp_pb2.py new file mode 100644 index 000000000..b14188991 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/robots/timestamp_pb2.py @@ -0,0 +1,78 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: timestamp.proto +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='timestamp.proto', + package='google.protobuf', + syntax='proto3', + serialized_options=b'\n\023com.google.protobufB\016TimestampProtoP\001Z2google.golang.org/protobuf/types/known/timestamppb\370\001\001\242\002\003GPB\252\002\036Google.Protobuf.WellKnownTypes', + create_key=_descriptor._internal_create_key, + serialized_pb=b'\n\x0ftimestamp.proto\x12\x0fgoogle.protobuf\"+\n\tTimestamp\x12\x0f\n\x07seconds\x18\x01 \x01(\x03\x12\r\n\x05nanos\x18\x02 \x01(\x05\x42\x85\x01\n\x13\x63om.google.protobufB\x0eTimestampProtoP\x01Z2google.golang.org/protobuf/types/known/timestamppb\xf8\x01\x01\xa2\x02\x03GPB\xaa\x02\x1eGoogle.Protobuf.WellKnownTypesb\x06proto3' +) + + + + +_TIMESTAMP = _descriptor.Descriptor( + name='Timestamp', + full_name='google.protobuf.Timestamp', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='seconds', full_name='google.protobuf.Timestamp.seconds', index=0, + number=1, type=3, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='nanos', full_name='google.protobuf.Timestamp.nanos', index=1, + number=2, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=36, + serialized_end=79, +) + +DESCRIPTOR.message_types_by_name['Timestamp'] = _TIMESTAMP +_sym_db.RegisterFileDescriptor(DESCRIPTOR) + +Timestamp = _reflection.GeneratedProtocolMessageType('Timestamp', (_message.Message,), { + 'DESCRIPTOR' : _TIMESTAMP, + '__module__' : 'timestamp_pb2' + # @@protoc_insertion_point(class_scope:google.protobuf.Timestamp) + }) +_sym_db.RegisterMessage(Timestamp) + + +DESCRIPTOR._options = None +# @@protoc_insertion_point(module_scope) diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/robots/utilities/__init__.py b/examples/pybullet/gym/pybullet_envs/minitaur/robots/utilities/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/robots/utilities/action_filter.py b/examples/pybullet/gym/pybullet_envs/minitaur/robots/utilities/action_filter.py new file mode 100644 index 000000000..6fb100cb3 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/robots/utilities/action_filter.py @@ -0,0 +1,239 @@ +"""Two types of filters which can be applied to policy output sequences. + +1. Simple exponential filter +2. Butterworth filter - lowpass or bandpass + +The implementation of the butterworth filter follows scipy's lfilter +https://github.com/scipy/scipy/blob/v1.2.1/scipy/signal/signaltools.py + +We re-implement the logic in order to explicitly manage the y states + +The filter implements:: + a[0]*y[n] = b[0]*x[n] + b[1]*x[n-1] + ... + b[M]*x[n-M] + - a[1]*y[n-1] - ... - a[N]*y[n-N] + +We assume M == N. +""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import collections +from absl import logging +import gin +import numpy as np +from scipy.signal import butter + +ACTION_FILTER_ORDER = 2 +ACTION_FILTER_LOW_CUT = 0.0 +ACTION_FILTER_HIGH_CUT = 4.0 + + +@gin.configurable +class ActionFilter(object): + """Implements a generic lowpass or bandpass action filter.""" + + def __init__(self, a, b, order, num_joints, ftype='lowpass'): + """Initializes filter. + + Either one per joint or same for all joints. + + Args: + a: filter output history coefficients + b: filter input coefficients + order: filter order + num_joints: robot DOF + ftype: filter type. 'lowpass' or 'bandpass' + """ + self.num_joints = num_joints + if isinstance(a, list): + self.a = a + self.b = b + else: + self.a = [a] + self.b = [b] + + # Either a set of parameters per joint must be specified as a list + # Or one filter is applied to every joint + if not ((len(self.a) == len(self.b) == num_joints) or ( + len(self.a) == len(self.b) == 1)): + raise ValueError('Incorrect number of filter values specified') + + # Normalize by a[0] + for i in range(len(self.a)): + self.b[i] /= self.a[i][0] + self.a[i] /= self.a[i][0] + + # Convert single filter to same format as filter per joint + if len(self.a) == 1: + self.a *= num_joints + self.b *= num_joints + self.a = np.stack(self.a) + self.b = np.stack(self.b) + + if ftype == 'bandpass': + assert len(self.b[0]) == len(self.a[0]) == 2 * order + 1 + self.hist_len = 2 * order + elif ftype == 'lowpass': + assert len(self.b[0]) == len(self.a[0]) == order + 1 + self.hist_len = order + else: + raise ValueError('%s filter type not supported' % (ftype)) + + logging.info('Filter shapes: a: %s, b: %s', self.a.shape, self.b.shape) + logging.info('Filter type:%s', ftype) + + self.yhist = collections.deque(maxlen=self.hist_len) + self.xhist = collections.deque(maxlen=self.hist_len) + self.reset() + + def reset(self): + """Resets the history buffers to 0.""" + self.yhist.clear() + self.xhist.clear() + for _ in range(self.hist_len): + self.yhist.appendleft(np.zeros((self.num_joints, 1))) + self.xhist.appendleft(np.zeros((self.num_joints, 1))) + + def filter(self, x): + """Returns filtered x.""" + xs = np.concatenate(list(self.xhist), axis=-1) + ys = np.concatenate(list(self.yhist), axis=-1) + y = np.multiply(x, self.b[:, 0]) + np.sum( + np.multiply(xs, self.b[:, 1:]), axis=-1) - np.sum( + np.multiply(ys, self.a[:, 1:]), axis=-1) + self.xhist.appendleft(x.reshape((self.num_joints, 1)).copy()) + self.yhist.appendleft(y.reshape((self.num_joints, 1)).copy()) + return y + + def init_history(self, x): + x = np.expand_dims(x, axis=-1) + for i in range(self.hist_len): + self.xhist[i] = x + self.yhist[i] = x + return + + +@gin.configurable +class ActionFilterButter(ActionFilter): + """Butterworth filter.""" + + def __init__(self, + lowcut=None, + highcut=None, + sampling_rate=None, + order=ACTION_FILTER_ORDER, + num_joints=None): + """Initializes a butterworth filter. + + Either one per joint or same for all joints. + + Args: + lowcut: list of strings defining the low cutoff frequencies. + The list must contain either 1 element (same filter for all joints) + or num_joints elements + 0 for lowpass, > 0 for bandpass. Either all values must be 0 + or all > 0 + highcut: list of strings defining the high cutoff frequencies. + The list must contain either 1 element (same filter for all joints) + or num_joints elements + All must be > 0 + sampling_rate: frequency of samples in Hz + order: filter order + num_joints: robot DOF + """ + self.lowcut = ([float(x) for x in lowcut] + if lowcut is not None else [ACTION_FILTER_LOW_CUT]) + self.highcut = ([float(x) for x in highcut] + if highcut is not None else [ACTION_FILTER_HIGH_CUT]) + if len(self.lowcut) != len(self.highcut): + raise ValueError('Number of lowcut and highcut filter values should ' + 'be the same') + + if sampling_rate is None: + raise ValueError('sampling_rate should be provided.') + + if num_joints is None: + raise ValueError('num_joints should be provided.') + + if np.any(self.lowcut): + if not np.all(self.lowcut): + raise ValueError('All the filters must be of the same type: ' + 'lowpass or bandpass') + self.ftype = 'bandpass' + else: + self.ftype = 'lowpass' + + a_coeffs = [] + b_coeffs = [] + for i, (l, h) in enumerate(zip(self.lowcut, self.highcut)): + if h <= 0.0: + raise ValueError('Highcut must be > 0') + + b, a = self.butter_filter(l, h, sampling_rate, order) + logging.info( + 'Butterworth filter: joint: %d, lowcut: %f, highcut: %f, ' + 'sampling rate: %d, order: %d, num joints: %d', i, l, h, + sampling_rate, order, num_joints) + b_coeffs.append(b) + a_coeffs.append(a) + + super(ActionFilterButter, self).__init__( + a_coeffs, b_coeffs, order, num_joints, self.ftype) + + def butter_filter(self, lowcut, highcut, fs, order=5): + """Returns the coefficients of a butterworth filter. + + If lowcut = 0, the function returns the coefficients of a low pass filter. + Otherwise, the coefficients of a band pass filter are returned. + Highcut should be > 0 + + Args: + lowcut: low cutoff frequency + highcut: high cutoff frequency + fs: sampling rate + order: filter order + Return: + b, a: parameters of a butterworth filter + """ + nyq = 0.5 * fs + low = lowcut / nyq + high = highcut / nyq + if low: + b, a = butter(order, [low, high], btype='band') + else: + b, a = butter(order, [high], btype='low') + return b, a + + +class ActionFilterExp(ActionFilter): + """Filter by way of simple exponential smoothing. + + y = alpha * x + (1 - alpha) * previous_y + """ + + def __init__(self, alpha, num_joints): + """Initialize the filter. + + Args: + alpha: list of strings defining the alphas. + The list must contain either 1 element (same filter for all joints) + or num_joints elements + 0 < alpha <= 1 + num_joints: robot DOF + """ + self.alphas = [float(x) for x in alpha] + logging.info('Exponential filter: alpha: %d', self.alphas) + + a_coeffs = [] + b_coeffs = [] + for a in self.alphas: + a_coeffs.append(np.asarray([1., a - 1.])) + b_coeffs.append(np.asarray([a, 0])) + + order = 1 + self.ftype = 'lowpass' + + super(ActionFilterExp, self).__init__( + a_coeffs, b_coeffs, order, num_joints, self.ftype) diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/robots/utilities/kinematics.py b/examples/pybullet/gym/pybullet_envs/minitaur/robots/utilities/kinematics.py new file mode 100644 index 000000000..be5824400 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/robots/utilities/kinematics.py @@ -0,0 +1,127 @@ +"""The inverse kinematic utilities.""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import numpy as np +import typing + +_IDENTITY_ORIENTATION = (0, 0, 0, 1) + + +def joint_angles_from_link_position( + robot: typing.Any, + link_position: typing.Sequence[float], + link_id: int, + joint_ids: typing.Sequence[int], + position_in_world_frame=False, + base_translation: typing.Sequence[float] = (0, 0, 0), + base_rotation: typing.Sequence[float] = (0, 0, 0, 1)): + """Uses Inverse Kinematics to calculate joint angles. + + Args: + robot: A robot instance. + link_position: The (x, y, z) of the link in the body or the world frame, + depending on whether the argument position_in_world_frame is true. + link_id: The link id as returned from loadURDF. + joint_ids: The positional index of the joints. This can be different from + the joint unique ids. + position_in_world_frame: Whether the input link_position is specified + in the world frame or the robot's base frame. + base_translation: Additional base translation. + base_rotation: Additional base rotation. + + Returns: + A list of joint angles. + """ + if not position_in_world_frame: + # Projects to local frame. + base_position, base_orientation = robot.GetBasePosition( + ), robot.GetBaseOrientation() + base_position, base_orientation = robot.pybullet_client.multiplyTransforms( + base_position, base_orientation, base_translation, base_rotation) + + # Projects to world space. + world_link_pos, _ = robot.pybullet_client.multiplyTransforms( + base_position, base_orientation, link_position, _IDENTITY_ORIENTATION) + else: + world_link_pos = link_position + + ik_solver = 0 + all_joint_angles = robot.pybullet_client.calculateInverseKinematics( + robot.quadruped, link_id, world_link_pos, solver=ik_solver) + + # Extract the relevant joint angles. + joint_angles = [all_joint_angles[i] for i in joint_ids] + return joint_angles + + +def link_position_in_world_frame( + robot: typing.Any, + link_id: int, +): + """Computes the link's position in the world frame. + + Args: + robot: A robot instance. + link_id: The link id to calculate its position. + + Returns: + The position of the link in the world frame. + """ + return np.array( + robot.pybullet_client.getLinkState(robot.quadruped, link_id)[0]) + + +def link_position_in_base_frame( + robot: typing.Any, + link_id: int, +): + """Computes the link's local position in the robot frame. + + Args: + robot: A robot instance. + link_id: The link to calculate its relative position. + + Returns: + The relative position of the link. + """ + base_position, base_orientation = robot.GetBasePosition( + ), robot.GetBaseOrientation() + inverse_translation, inverse_rotation = robot.pybullet_client.invertTransform( + base_position, base_orientation) + + link_state = robot.pybullet_client.getLinkState(robot.quadruped, link_id) + link_position = link_state[0] + link_local_position, _ = robot.pybullet_client.multiplyTransforms( + inverse_translation, inverse_rotation, link_position, (0, 0, 0, 1)) + + return np.array(link_local_position) + + +def compute_jacobian( + robot: typing.Any, + link_id: int, +): + """Computes the Jacobian matrix for the given link. + + Args: + robot: A robot instance. + link_id: The link id as returned from loadURDF. + + Returns: + The 3 x N transposed Jacobian matrix. where N is the total DoFs of the + robot. For a quadruped, the first 6 columns of the matrix corresponds to + the CoM translation and rotation. The columns corresponds to a leg can be + extracted with indices [6 + leg_id * 3: 6 + leg_id * 3 + 3]. + """ + + all_joint_angles = [state[0] for state in robot.joint_states] + zero_vec = [0] * len(all_joint_angles) + jv, _ = robot.pybullet_client.calculateJacobian(robot.quadruped, link_id, + (0, 0, 0), all_joint_angles, + zero_vec, zero_vec) + jacobian = np.array(jv) + assert jacobian.shape[0] == 3 + return jacobian diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/robots/utilities/kinematics_utils.py b/examples/pybullet/gym/pybullet_envs/minitaur/robots/utilities/kinematics_utils.py new file mode 100644 index 000000000..088f2bcb9 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/robots/utilities/kinematics_utils.py @@ -0,0 +1,208 @@ +# Lint as: python3 +"""The inverse kinematic utilities.""" +from typing import Optional, Sequence + +import numpy as np + +from pybullet_utils import bullet_client + +_IDENTITY_ROTATION_QUAT = (0, 0, 0, 1) +_IK_SOLVER_TYPE = 0 +_LINK_POS_INDEX = 0 + + +def joint_angles_from_link_positions( + pybullet_client: bullet_client.BulletClient, + urdf_id: int, + link_ids: Sequence[int], + link_positions: Sequence[Sequence[float]], + positions_are_in_world_frame: bool = False, + joint_dof_ids: Optional[Sequence[int]] = None, +) -> np.ndarray: + """Uses Inverse Kinematics to calculate joint angles. + + Args: + pybullet_client: The bullet client. + urdf_id: The unique id returned after loading URDF. + link_ids: The link ids to compute the IK. + link_positions: The (x, y, z) of the links in the body or the world frame, + depending on whether the argument link_position_in_world_frame is true. + positions_are_in_world_frame: Whether the input link positions are specified + in the world frame or the robot's base frame. + joint_dof_ids: The degrees of freedom index of the joints we want to extract + the angles. This can be different from the joint unique ids. For example, + a fixed joint will increase the joint unique id but will not increase the + number of degree of freedoms. The joint dof id can be extracted in + PyBullet by getJointInfo, which corresponds to the "qIndex" in the + returned values. If not specified, will return all movable joint angles. + + Returns: + A list of joint angles. + """ + if positions_are_in_world_frame: + world_link_positions = link_positions + else: + # The PyBullet inverse Kinematics Calculation depends on the current URDF + # position/orientation, and we cannot pass them to the API. So we have to + # always query the current base position/orientation to compute world frame + # link positions. + urdf_base_position, urdf_base_orientation = ( + pybullet_client.getBasePositionAndOrientation(urdf_id)) + world_link_positions = [] + for link_position in link_positions: + world_link_position, _ = pybullet_client.multiplyTransforms( + urdf_base_position, urdf_base_orientation, link_position, + _IDENTITY_ROTATION_QUAT) + world_link_positions.append(world_link_position) + + # Notice that the API expects the link positions in the world frame. + all_joint_angles = pybullet_client.calculateInverseKinematics2( + urdf_id, link_ids, world_link_positions, solver=_IK_SOLVER_TYPE) + + # Extract the relevant joint angles. + if joint_dof_ids is None: + return np.array(all_joint_angles) + + return np.array([all_joint_angles[i] for i in joint_dof_ids]) + + +def link_position_in_world_frame( + pybullet_client: bullet_client.BulletClient, + urdf_id: int, + link_id: int, +): + """Computes the link's position in the world frame. + + Args: + pybullet_client: The bullet client. + urdf_id: The unique id returned after loading URDF. + link_id: The link id to calculate its position. + + Returns: + The position of the link in the world frame. + """ + return np.array(pybullet_client.getLinkState(urdf_id, link_id)[0]) + + +def link_position_in_base_frame( + pybullet_client: bullet_client.BulletClient, + urdf_id: int, + link_id: int, + base_link_id: Optional[int] = None, +): + """Computes the link's local position in the robot frame. + + Args: + pybullet_client: The bullet client. + urdf_id: The unique id returned after loading URDF. + link_id: The link to calculate its relative position. + base_link_id: The link id of the base. For the kinematics robot, such as + wheeled_robot_base, three additional joints are added to connect the world + and the base. The base_link_id is no longer -1, and need to be passed in. + + + Returns: + The relative position of the link. + """ + if base_link_id is None: + base_position, base_orientation = ( + pybullet_client.getBasePositionAndOrientation(urdf_id)) + else: + base_link_state = pybullet_client.getLinkState(urdf_id, base_link_id) + base_position, base_orientation = base_link_state[0], base_link_state[1] + + inverse_translation, inverse_rotation = pybullet_client.invertTransform( + base_position, base_orientation) + + link_state = pybullet_client.getLinkState(urdf_id, link_id) + link_position = link_state[0] + link_local_position, _ = pybullet_client.multiplyTransforms( + inverse_translation, inverse_rotation, link_position, (0, 0, 0, 1)) + + return np.array(link_local_position) + + +def compute_jacobian( + pybullet_client: bullet_client.BulletClient, + urdf_id: int, + link_id: int, + all_joint_positions: Sequence[float], + additional_translation: Optional[Sequence[float]] = (0, 0, 0), +) -> np.ndarray: + """Computes the Jacobian matrix for the given point on a link. + + CAVEAT: If during URDF loading process additional rotations are provided, the + computed Jacobian are also transformed. + + Args: + pybullet_client: The bullet client. + urdf_id: The unique id returned after loading URDF. + link_id: The link id as returned from loadURDF. + all_joint_positions: all the joint positions of the robot. This should + include the dummy/kinematic drive joints for the wheeled robot. + additional_translation: The additional translation of the point in the link + CoM frame. + + Returns: + The 3 x N transposed Jacobian matrix. where N is the total DoFs of the + robot. For a quadruped, the first 6 columns of the matrix corresponds to + the CoM translation and rotation. The columns corresponds to a leg can be + extracted with indices [6 + leg_id * 3: 6 + leg_id * 3 + 3]. + """ + + zero_vec = [0] * len(all_joint_positions) + jv, _ = pybullet_client.calculateJacobian( + urdf_id, + link_id, + additional_translation, + all_joint_positions, + objVelocities=zero_vec, + objAccelerations=zero_vec) + jacobian = np.array(jv) + assert jacobian.shape[0] == 3 + return jacobian + + +def rotate_to_base_frame( + pybullet_client: bullet_client.BulletClient, + urdf_id: int, + vector: Sequence[float], + init_orientation_inv_quat: Optional[Sequence[float]] = (0, 0, 0, 1) +) -> np.ndarray: + """Rotates the input vector to the base coordinate systems. + + Note: This is different from world frame to base frame transformation, as we + do not apply any translation here. + + Args: + pybullet_client: The bullet client. + urdf_id: The unique id returned after loading URDF. + vector: Input vector in the world frame. + init_orientation_inv_quat: + + Returns: + A rotated vector in the base frame. + """ + _, base_orientation_quat = ( + pybullet_client.getBasePositionAndOrientation(urdf_id)) + _, base_orientation_quat_from_init = pybullet_client.multiplyTransforms( + positionA=(0, 0, 0), + orientationA=init_orientation_inv_quat, + positionB=(0, 0, 0), + orientationB=base_orientation_quat) + _, inverse_base_orientation = pybullet_client.invertTransform( + [0, 0, 0], base_orientation_quat_from_init) + + # PyBullet transforms requires simple list/tuple or it may crash. + if isinstance(vector, np.ndarray): + vector_list = vector.tolist() + else: + vector_list = vector + + local_vector, _ = pybullet_client.multiplyTransforms( + positionA=(0, 0, 0), + orientationA=inverse_base_orientation, + positionB=vector_list, + orientationB=(0, 0, 0, 1), + ) + return np.array(local_vector) diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/robots/utilities/urdf_utils.py b/examples/pybullet/gym/pybullet_envs/minitaur/robots/utilities/urdf_utils.py new file mode 100644 index 000000000..f45d4ff86 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/robots/utilities/urdf_utils.py @@ -0,0 +1,59 @@ +# Lint as: python3 +"""Utilities for robot URDF models.""" + +from typing import Text + +# In the return from pybullet.getJointInfo, the name of the link whose parent is +# that joint. +LINK_NAME_INDEX = 12 +# Indication that link_name_to_id should return -1. This is a constant because +# different URDFs use different names for their base links. +BASE_LINK = "" + + +def link_name_to_id(link_name: Text, robot_id: int, pybullet_client) -> int: + """Returns the pybullet integer link id corresponding to link_name. + + Args: + link_name: The name of the link from the URDF. If this is BASE_LINK, returns + -1, the link id of the base according to pybullet convention. + robot_id: Integer id of the robot to which the link belongs, as returned by + pybullet.loadURDF(). + pybullet_client: Client in which the robot is loaded. + + Returns: + Integer id of the link. + + Raises: + ValueError if the link_name is not found in the robot. + """ + if link_name == BASE_LINK: + return -1 + link_name_list = [] + for i in range(pybullet_client.getNumJoints(robot_id)): + joint_info = pybullet_client.getJointInfo(robot_id, i) + link_name_i = joint_info[LINK_NAME_INDEX].decode("UTF-8") + if link_name_i == link_name: + return i + link_name_list.append(link_name_i) + raise ValueError("Link name '{}' not found in URDF. Options are: {}".format( + link_name, link_name_list)) + + +def set_collision_filter_group_mask(urdf_id: int, group: int, mask: int, + pybullet_client): + """Sets the collision filter group and mask to the robot. + + TODO(tingnan): Check if this has side effects with self collision flags + when loading URDF. + + Args: + urdf_id: The URDF id as returned by the loadURDF. + group: The collision group the robot is in. By default, all dynamics objects + in PyBullet use collision group 1. + mask: The collision bit mask to use. See go/pybullet for details. + pybullet_client: The bullet client to use. + """ + # We includes "-1" for the base link of the URDF. + for link_id in range(-1, pybullet_client.getNumJoints(urdf_id)): + pybullet_client.setCollisionFilterGroupMask(urdf_id, link_id, group, mask) diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/robots/vector.proto b/examples/pybullet/gym/pybullet_envs/minitaur/robots/vector.proto new file mode 100644 index 000000000..92c48f859 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/robots/vector.proto @@ -0,0 +1,84 @@ +syntax = "proto3"; + +package robotics.messages; + +option cc_enable_arenas = true; + +// A four-dimensional double precision vector. +message Vector4d { + double x = 1; + double y = 2; + double z = 3; + double w = 4; +} + +// A four-dimensional single precision vector. +message Vector4f { + float x = 1; + float y = 2; + float z = 3; + float w = 4; +} + +// A four-dimensional integer vector. +message Vector4i { + int64 x = 1; + int64 y = 2; + int64 z = 3; + int64 w = 4; +} + +// A three-dimensional double precision vector. +message Vector3d { + double x = 1; + double y = 2; + double z = 3; +} + +// A three-dimensional single precision vector. +message Vector3f { + float x = 1; + float y = 2; + float z = 3; +} + +// A three-dimensional integer vector. +message Vector3i { + int64 x = 1; + int64 y = 2; + int64 z = 3; +} + +// A two-dimensional double precision vector. +message Vector2d { + double x = 1; + double y = 2; +} + +// A two-dimensional single precision vector. +message Vector2f { + float x = 1; + float y = 2; +} + +// A two-dimensional integer vector. +message Vector2i { + int64 x = 1; + int64 y = 2; +} + +// Double precision vector of arbitrary size. +message Vectord { + repeated double data = 1 [packed = true]; +} + +// Single precision vector of arbitrary size. +message Vectorf { + repeated float data = 1 [packed = true]; +} + +// Integer vector of arbitrary size. +message Vectori { + repeated int64 data = 1 [packed = true]; +} + diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/robots/vector_pb2.py b/examples/pybullet/gym/pybullet_envs/minitaur/robots/vector_pb2.py new file mode 100644 index 000000000..ccaad55b4 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/robots/vector_pb2.py @@ -0,0 +1,640 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: vector.proto +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='vector.proto', + package='robotics.messages', + syntax='proto3', + serialized_options=b'\370\001\001', + create_key=_descriptor._internal_create_key, + serialized_pb=b'\n\x0cvector.proto\x12\x11robotics.messages\"6\n\x08Vector4d\x12\t\n\x01x\x18\x01 \x01(\x01\x12\t\n\x01y\x18\x02 \x01(\x01\x12\t\n\x01z\x18\x03 \x01(\x01\x12\t\n\x01w\x18\x04 \x01(\x01\"6\n\x08Vector4f\x12\t\n\x01x\x18\x01 \x01(\x02\x12\t\n\x01y\x18\x02 \x01(\x02\x12\t\n\x01z\x18\x03 \x01(\x02\x12\t\n\x01w\x18\x04 \x01(\x02\"6\n\x08Vector4i\x12\t\n\x01x\x18\x01 \x01(\x03\x12\t\n\x01y\x18\x02 \x01(\x03\x12\t\n\x01z\x18\x03 \x01(\x03\x12\t\n\x01w\x18\x04 \x01(\x03\"+\n\x08Vector3d\x12\t\n\x01x\x18\x01 \x01(\x01\x12\t\n\x01y\x18\x02 \x01(\x01\x12\t\n\x01z\x18\x03 \x01(\x01\"+\n\x08Vector3f\x12\t\n\x01x\x18\x01 \x01(\x02\x12\t\n\x01y\x18\x02 \x01(\x02\x12\t\n\x01z\x18\x03 \x01(\x02\"+\n\x08Vector3i\x12\t\n\x01x\x18\x01 \x01(\x03\x12\t\n\x01y\x18\x02 \x01(\x03\x12\t\n\x01z\x18\x03 \x01(\x03\" \n\x08Vector2d\x12\t\n\x01x\x18\x01 \x01(\x01\x12\t\n\x01y\x18\x02 \x01(\x01\" \n\x08Vector2f\x12\t\n\x01x\x18\x01 \x01(\x02\x12\t\n\x01y\x18\x02 \x01(\x02\" \n\x08Vector2i\x12\t\n\x01x\x18\x01 \x01(\x03\x12\t\n\x01y\x18\x02 \x01(\x03\"\x1b\n\x07Vectord\x12\x10\n\x04\x64\x61ta\x18\x01 \x03(\x01\x42\x02\x10\x01\"\x1b\n\x07Vectorf\x12\x10\n\x04\x64\x61ta\x18\x01 \x03(\x02\x42\x02\x10\x01\"\x1b\n\x07Vectori\x12\x10\n\x04\x64\x61ta\x18\x01 \x03(\x03\x42\x02\x10\x01\x42\x03\xf8\x01\x01\x62\x06proto3' +) + + + + +_VECTOR4D = _descriptor.Descriptor( + name='Vector4d', + full_name='robotics.messages.Vector4d', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='x', full_name='robotics.messages.Vector4d.x', index=0, + number=1, type=1, cpp_type=5, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='y', full_name='robotics.messages.Vector4d.y', index=1, + number=2, type=1, cpp_type=5, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='z', full_name='robotics.messages.Vector4d.z', index=2, + number=3, type=1, cpp_type=5, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='w', full_name='robotics.messages.Vector4d.w', index=3, + number=4, type=1, cpp_type=5, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=35, + serialized_end=89, +) + + +_VECTOR4F = _descriptor.Descriptor( + name='Vector4f', + full_name='robotics.messages.Vector4f', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='x', full_name='robotics.messages.Vector4f.x', index=0, + number=1, type=2, cpp_type=6, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='y', full_name='robotics.messages.Vector4f.y', index=1, + number=2, type=2, cpp_type=6, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='z', full_name='robotics.messages.Vector4f.z', index=2, + number=3, type=2, cpp_type=6, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='w', full_name='robotics.messages.Vector4f.w', index=3, + number=4, type=2, cpp_type=6, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=91, + serialized_end=145, +) + + +_VECTOR4I = _descriptor.Descriptor( + name='Vector4i', + full_name='robotics.messages.Vector4i', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='x', full_name='robotics.messages.Vector4i.x', index=0, + number=1, type=3, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='y', full_name='robotics.messages.Vector4i.y', index=1, + number=2, type=3, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='z', full_name='robotics.messages.Vector4i.z', index=2, + number=3, type=3, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='w', full_name='robotics.messages.Vector4i.w', index=3, + number=4, type=3, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=147, + serialized_end=201, +) + + +_VECTOR3D = _descriptor.Descriptor( + name='Vector3d', + full_name='robotics.messages.Vector3d', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='x', full_name='robotics.messages.Vector3d.x', index=0, + number=1, type=1, cpp_type=5, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='y', full_name='robotics.messages.Vector3d.y', index=1, + number=2, type=1, cpp_type=5, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='z', full_name='robotics.messages.Vector3d.z', index=2, + number=3, type=1, cpp_type=5, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=203, + serialized_end=246, +) + + +_VECTOR3F = _descriptor.Descriptor( + name='Vector3f', + full_name='robotics.messages.Vector3f', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='x', full_name='robotics.messages.Vector3f.x', index=0, + number=1, type=2, cpp_type=6, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='y', full_name='robotics.messages.Vector3f.y', index=1, + number=2, type=2, cpp_type=6, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='z', full_name='robotics.messages.Vector3f.z', index=2, + number=3, type=2, cpp_type=6, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=248, + serialized_end=291, +) + + +_VECTOR3I = _descriptor.Descriptor( + name='Vector3i', + full_name='robotics.messages.Vector3i', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='x', full_name='robotics.messages.Vector3i.x', index=0, + number=1, type=3, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='y', full_name='robotics.messages.Vector3i.y', index=1, + number=2, type=3, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='z', full_name='robotics.messages.Vector3i.z', index=2, + number=3, type=3, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=293, + serialized_end=336, +) + + +_VECTOR2D = _descriptor.Descriptor( + name='Vector2d', + full_name='robotics.messages.Vector2d', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='x', full_name='robotics.messages.Vector2d.x', index=0, + number=1, type=1, cpp_type=5, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='y', full_name='robotics.messages.Vector2d.y', index=1, + number=2, type=1, cpp_type=5, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=338, + serialized_end=370, +) + + +_VECTOR2F = _descriptor.Descriptor( + name='Vector2f', + full_name='robotics.messages.Vector2f', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='x', full_name='robotics.messages.Vector2f.x', index=0, + number=1, type=2, cpp_type=6, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='y', full_name='robotics.messages.Vector2f.y', index=1, + number=2, type=2, cpp_type=6, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=372, + serialized_end=404, +) + + +_VECTOR2I = _descriptor.Descriptor( + name='Vector2i', + full_name='robotics.messages.Vector2i', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='x', full_name='robotics.messages.Vector2i.x', index=0, + number=1, type=3, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='y', full_name='robotics.messages.Vector2i.y', index=1, + number=2, type=3, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=406, + serialized_end=438, +) + + +_VECTORD = _descriptor.Descriptor( + name='Vectord', + full_name='robotics.messages.Vectord', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='data', full_name='robotics.messages.Vectord.data', index=0, + number=1, type=1, cpp_type=5, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=b'\020\001', file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=440, + serialized_end=467, +) + + +_VECTORF = _descriptor.Descriptor( + name='Vectorf', + full_name='robotics.messages.Vectorf', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='data', full_name='robotics.messages.Vectorf.data', index=0, + number=1, type=2, cpp_type=6, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=b'\020\001', file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=469, + serialized_end=496, +) + + +_VECTORI = _descriptor.Descriptor( + name='Vectori', + full_name='robotics.messages.Vectori', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='data', full_name='robotics.messages.Vectori.data', index=0, + number=1, type=3, cpp_type=2, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=b'\020\001', file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=498, + serialized_end=525, +) + +DESCRIPTOR.message_types_by_name['Vector4d'] = _VECTOR4D +DESCRIPTOR.message_types_by_name['Vector4f'] = _VECTOR4F +DESCRIPTOR.message_types_by_name['Vector4i'] = _VECTOR4I +DESCRIPTOR.message_types_by_name['Vector3d'] = _VECTOR3D +DESCRIPTOR.message_types_by_name['Vector3f'] = _VECTOR3F +DESCRIPTOR.message_types_by_name['Vector3i'] = _VECTOR3I +DESCRIPTOR.message_types_by_name['Vector2d'] = _VECTOR2D +DESCRIPTOR.message_types_by_name['Vector2f'] = _VECTOR2F +DESCRIPTOR.message_types_by_name['Vector2i'] = _VECTOR2I +DESCRIPTOR.message_types_by_name['Vectord'] = _VECTORD +DESCRIPTOR.message_types_by_name['Vectorf'] = _VECTORF +DESCRIPTOR.message_types_by_name['Vectori'] = _VECTORI +_sym_db.RegisterFileDescriptor(DESCRIPTOR) + +Vector4d = _reflection.GeneratedProtocolMessageType('Vector4d', (_message.Message,), { + 'DESCRIPTOR' : _VECTOR4D, + '__module__' : 'vector_pb2' + # @@protoc_insertion_point(class_scope:robotics.messages.Vector4d) + }) +_sym_db.RegisterMessage(Vector4d) + +Vector4f = _reflection.GeneratedProtocolMessageType('Vector4f', (_message.Message,), { + 'DESCRIPTOR' : _VECTOR4F, + '__module__' : 'vector_pb2' + # @@protoc_insertion_point(class_scope:robotics.messages.Vector4f) + }) +_sym_db.RegisterMessage(Vector4f) + +Vector4i = _reflection.GeneratedProtocolMessageType('Vector4i', (_message.Message,), { + 'DESCRIPTOR' : _VECTOR4I, + '__module__' : 'vector_pb2' + # @@protoc_insertion_point(class_scope:robotics.messages.Vector4i) + }) +_sym_db.RegisterMessage(Vector4i) + +Vector3d = _reflection.GeneratedProtocolMessageType('Vector3d', (_message.Message,), { + 'DESCRIPTOR' : _VECTOR3D, + '__module__' : 'vector_pb2' + # @@protoc_insertion_point(class_scope:robotics.messages.Vector3d) + }) +_sym_db.RegisterMessage(Vector3d) + +Vector3f = _reflection.GeneratedProtocolMessageType('Vector3f', (_message.Message,), { + 'DESCRIPTOR' : _VECTOR3F, + '__module__' : 'vector_pb2' + # @@protoc_insertion_point(class_scope:robotics.messages.Vector3f) + }) +_sym_db.RegisterMessage(Vector3f) + +Vector3i = _reflection.GeneratedProtocolMessageType('Vector3i', (_message.Message,), { + 'DESCRIPTOR' : _VECTOR3I, + '__module__' : 'vector_pb2' + # @@protoc_insertion_point(class_scope:robotics.messages.Vector3i) + }) +_sym_db.RegisterMessage(Vector3i) + +Vector2d = _reflection.GeneratedProtocolMessageType('Vector2d', (_message.Message,), { + 'DESCRIPTOR' : _VECTOR2D, + '__module__' : 'vector_pb2' + # @@protoc_insertion_point(class_scope:robotics.messages.Vector2d) + }) +_sym_db.RegisterMessage(Vector2d) + +Vector2f = _reflection.GeneratedProtocolMessageType('Vector2f', (_message.Message,), { + 'DESCRIPTOR' : _VECTOR2F, + '__module__' : 'vector_pb2' + # @@protoc_insertion_point(class_scope:robotics.messages.Vector2f) + }) +_sym_db.RegisterMessage(Vector2f) + +Vector2i = _reflection.GeneratedProtocolMessageType('Vector2i', (_message.Message,), { + 'DESCRIPTOR' : _VECTOR2I, + '__module__' : 'vector_pb2' + # @@protoc_insertion_point(class_scope:robotics.messages.Vector2i) + }) +_sym_db.RegisterMessage(Vector2i) + +Vectord = _reflection.GeneratedProtocolMessageType('Vectord', (_message.Message,), { + 'DESCRIPTOR' : _VECTORD, + '__module__' : 'vector_pb2' + # @@protoc_insertion_point(class_scope:robotics.messages.Vectord) + }) +_sym_db.RegisterMessage(Vectord) + +Vectorf = _reflection.GeneratedProtocolMessageType('Vectorf', (_message.Message,), { + 'DESCRIPTOR' : _VECTORF, + '__module__' : 'vector_pb2' + # @@protoc_insertion_point(class_scope:robotics.messages.Vectorf) + }) +_sym_db.RegisterMessage(Vectorf) + +Vectori = _reflection.GeneratedProtocolMessageType('Vectori', (_message.Message,), { + 'DESCRIPTOR' : _VECTORI, + '__module__' : 'vector_pb2' + # @@protoc_insertion_point(class_scope:robotics.messages.Vectori) + }) +_sym_db.RegisterMessage(Vectori) + + +DESCRIPTOR._options = None +_VECTORD.fields_by_name['data']._options = None +_VECTORF.fields_by_name['data']._options = None +_VECTORI.fields_by_name['data']._options = None +# @@protoc_insertion_point(module_scope) diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/vision/imagery.proto b/examples/pybullet/gym/pybullet_envs/minitaur/vision/imagery.proto new file mode 100644 index 000000000..ef3a639d7 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/vision/imagery.proto @@ -0,0 +1,72 @@ +syntax = "proto3"; + +package robotics.reinforcement_learning.minitaur.vision; + +import "google/protobuf/timestamp.proto"; + +// The basic image protobuf. Used for RPC/IPC transmission. +message Image { + // The buffer that contains the actual image data. + bytes content = 1; + + // The image storage format. Can be raw or compressed types. + enum ImageFormat { + IMAGE_FORMAT_UNSPECIFIED = 0; + + // An 32-bit gray-scale image/matrix with row-major (height, width) memroy + // layout. Each pixel is a 32-bit floating-point number. + IMAGE_FORMAT_GRAY_HW_32F = 1; + + // An 8-bit BGRA raw image format, with HWC memory layout (e.g. the image is + // stored as a row-major matrix (height, width) of pixels, with each pixel + // an uint8[num_color_channels] packed array. This is the same format as + // CV_8UC4. + IMAGE_FORMAT_BGRA_HWC_8U = 2; + + // The 16-bit grayscale images with row-major memory layout. This is the + // default depth format for intel RealSense cameras. Each pixel is a 16 bit + // unsigned integer. + IMAGE_FORMAT_GRAY_HW_16U = 3; + + // An 8-bit RGB raw image format, with HWC memory layout. This is the + // default color format for intel RealSense cameras. + IMAGE_FORMAT_RGB_HWC_8U = 4; + + // TODO(tingnan): Add supports for different image formats like I420 or + // JPEG. + } + + ImageFormat image_format = 2; + + // The UTC time at which the image is taken. + google.protobuf.Timestamp timestamp = 3; + + // Image width and height in pixels. Critical for decoding raw images and + // optional for compressed JPEG/PNGs which already embed these information. + int32 width_px = 4; + int32 height_px = 5; +} + +// A captured frame from camera can combine multiple images from different +// streams, IR, depth, VGA. +message CameraFrame { + map images = 1; + string camera_id = 2; +} + +// Get the latest raw image from camera. +message GetFrameRequest { + // TODO: Also enable camera id in this proto. +} + +// Stacked frames. The imagery service can decide how many frames to transmit +// for each GetFrameRequest. +message CameraFrameCollection { + repeated CameraFrame frames = 1; +} + +// The capture session start/stop request. +message CaptureRequest { + string run_id = 1; + string logging_path = 2; +} diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/vision/imagery_client.py b/examples/pybullet/gym/pybullet_envs/minitaur/vision/imagery_client.py new file mode 100644 index 000000000..ca2a2e689 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/vision/imagery_client.py @@ -0,0 +1,137 @@ +"""The imagery client to connect to the camera job.""" + +from typing import Any, Dict, Sequence, Text +import gin + +from pybullet_envs.minitaur.fw_bridge import worker_builder +from pybullet_envs.minitaur.vision import imagery_pb2 +from pybullet_envs.minitaur.vision import imagery_utils +from google3.third_party.fluxworks.core.fluxworks.python.genericutil_py import fwassert +from google3.third_party.fluxworks.core.fluxworks.python.genericutil_py import timeutil + +_RPC_TIMEOUT = 1 * timeutil.TimeUtil.SEC + +_URI_START_CAPTURE = "fwuri://VisionJob/StartCapture" +_URI_STOP_CAPTURE = "fwuri://VisionJob/StopCapture" +_URI_GET_FRAME = "fwuri://VisionJob/GetFrame" + + +@gin.configurable +class ImageryClient(object): + """Sends commands and receives states from cameras.""" + + def __init__( + self, + fw_worker=None, + rpc_timeout_sec=_RPC_TIMEOUT, + ip_address=None, + port=None, + async_mode=False, + start_capture_uri: Text = _URI_START_CAPTURE, + stop_capture_uri: Text = _URI_STOP_CAPTURE, + get_frame_uri: Text = _URI_GET_FRAME, + ): + """Initializes the client. + + Args: + fw_worker: A FluxWorks worker instance. + rpc_timeout_sec: The timeout for any RPC calls from this client. + ip_address: The ip address of the camera/vision process. If vision job is + also instantiated in the same FluxWorks worker, both ip address and port + are not needed. + port: The port of the camera/vision process. + async_mode: Whether the RPC calls in this client are async or synchronous. + Aync mode is only required when you have multiple workers communicating + with each other in the same Python process. If worker A is calling + worker B's RPC, worker B's RPC is trying to get GIL from it's thread but + caller (worker A) already holds the GIL, and this will cause a dead lock + if worker A's calls are synchronous. If worker A is calling its own RPC, + the same GIL can be used so there is no dead lock, and there is no need + for async mode. Async mode will require context switching and thus is a + bit slower. + start_capture_uri: The FluxWorks URI to start camera capture. + stop_capture_uri: The FluxWorks URI to stop camera capture. + get_frame_uri: The FluxWorks URI to get camera frames. + """ + self._rpc_timeout_sec = rpc_timeout_sec + if fw_worker is None: + fw_worker = worker_builder.GetDefaultWorker() + self._worker = fw_worker + + # TODO(tingnan): Use a single address and split the string for FW. + if ip_address is not None: + self._worker.ConnectToWorker(ip_address, port) + + self._async_mode = async_mode + self._start_capture_uri = start_capture_uri + self._stop_capture_uri = stop_capture_uri + self._get_frame_uri = get_frame_uri + + def _convert_camera_frame_to_image_dict( + self, camera_frame: imagery_pb2.CameraFrame): + """Converts the camera frame to an image dictionary.""" + # Each camera frame might contain multiple image channels, such as rgb and + # depth. + images = {} + for image_name, image_proto in camera_frame.images.items(): + image_array = imagery_utils.convert_image_to_array(image_proto) + images[image_name] = image_array + return images + + def start_capture(self, run_id: Text = "vision"): + """Starts the camera capture session. + + Args: + run_id: The capture session id. This id will determine the name of the + image logs' sub-direcotry. + """ + capture_request = imagery_pb2.CaptureRequest() + capture_request.run_id = run_id + fwassert.FwAssert.CheckErrorMessage( + self._worker.CallOnewayProtoRpc( + self._start_capture_uri, + capture_request, + async_mode=self._async_mode)) + + def stop_capture(self): + """Concludes the current capture session.""" + capture_request = imagery_pb2.CaptureRequest() + fwassert.FwAssert.CheckErrorMessage( + self._worker.CallOnewayProtoRpc( + self._stop_capture_uri, + capture_request, + async_mode=self._async_mode)) + + def get_camera_images(self) -> Dict[Text, Sequence[Any]]: + """Gets the latest camera images. + + Camera images can only be obtained after self.start_capture() is called. + + Returns: + A dictionary of camera frames, with the camera id as the key. Each camera + frame may contain multiple streams. For example, on a realsense camera we + may have "rgb" and "depth" streams, depending on the configuration. + """ + get_frame_request = imagery_pb2.GetFrameRequest() + frame_collection = imagery_pb2.CameraFrameCollection() + fwassert.FwAssert.CheckErrorMessage( + self._worker.CallRoundtripProtoRpc( + self._get_frame_uri, + get_frame_request, + frame_collection, + self._rpc_timeout_sec, + async_mode=self._async_mode)) + + images_by_camera = {} + for camera_frame in frame_collection.frames: + camera_id = camera_frame.camera_id + # In case we received multiple frames, we apppend them in the order + # received. + if camera_id in images_by_camera: + images_by_camera[camera_id].append( + self._convert_camera_frame_to_image_dict(camera_frame)) + else: + images_by_camera[camera_id] = [ + self._convert_camera_frame_to_image_dict(camera_frame) + ] + return images_by_camera diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/vision/imagery_utils.py b/examples/pybullet/gym/pybullet_envs/minitaur/vision/imagery_utils.py new file mode 100644 index 000000000..ccf8da044 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/vision/imagery_utils.py @@ -0,0 +1,43 @@ +"""Utilities to convert imagery protobufs to other formats.""" + +import numpy as np + +from pybullet_envs.minitaur.vision import imagery_pb2 + + +# TODO(b/123306148): Support the conversion from image array to the proto. +def convert_image_to_array(image): + """Converts an Image proto into a numpy array. + + Args: + image: An instance of the imagery_pb2.Image proto. + + Returns: + A numpy array. For color images (e.g. BGRA), the converted ND array + has the format [Height, Width, Channel]. For gray images (e.g. depth), the + converted ND array has the format [Height, Width]. + """ + + if image.image_format == imagery_pb2.Image.IMAGE_FORMAT_BGRA_HWC_8U: + img_buffer = np.fromstring(image.content, dtype=np.uint8) + img = np.reshape( + img_buffer, [image.height_px, image.width_px, 4], order="C") + return img + + if image.image_format == imagery_pb2.Image.IMAGE_FORMAT_RGB_HWC_8U: + img_buffer = np.fromstring(image.content, dtype=np.uint8) + img = np.reshape( + img_buffer, [image.height_px, image.width_px, 3], order="C") + return img + + if image.image_format == imagery_pb2.Image.IMAGE_FORMAT_GRAY_HW_32F: + img_buffer = np.fromstring(image.content, dtype=np.float32) + img = np.reshape(img_buffer, [image.height_px, image.width_px], order="C") + return img + + if image.image_format == imagery_pb2.Image.IMAGE_FORMAT_GRAY_HW_16U: + img_buffer = np.fromstring(image.content, dtype=np.uint16) + img = np.reshape(img_buffer, [image.height_px, image.width_px], order="C") + return img + + raise ValueError("Unsupported image format {}".format(image.image_format)) diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/vision/imagery_utils_test.py b/examples/pybullet/gym/pybullet_envs/minitaur/vision/imagery_utils_test.py new file mode 100644 index 000000000..5b5493f64 --- /dev/null +++ b/examples/pybullet/gym/pybullet_envs/minitaur/vision/imagery_utils_test.py @@ -0,0 +1,84 @@ +"""Tests for imagery_utils.""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import struct +import numpy as np + +from pybullet_envs.minitaur.vision import imagery_pb2 +from pybullet_envs.minitaur.vision import imagery_utils +from google3.testing.pybase import googletest + + +class ImageryUtilsTest(googletest.TestCase): + + def test_convert_bgra_images(self): + image = imagery_pb2.Image( + height_px=2, + width_px=2, + image_format=imagery_pb2.Image.IMAGE_FORMAT_BGRA_HWC_8U, + content=b'ABCDABCDABCDABCD', + ) + + image_array = imagery_utils.convert_image_to_array(image) + + self.assertEqual(image_array.dtype, np.uint8) + self.assertEqual(image_array.shape, (image.height_px, image.width_px, 4)) + self.assertEqual(image_array[0, 0, 0], ord('A')) + self.assertEqual(image_array[1, 0, 3], ord('D')) + + def test_convert_rgb_images(self): + image = imagery_pb2.Image( + height_px=2, + width_px=2, + image_format=imagery_pb2.Image.IMAGE_FORMAT_RGB_HWC_8U, + content=b'ABCABCABCABC', + ) + + image_array = imagery_utils.convert_image_to_array(image) + + self.assertEqual(image_array.dtype, np.uint8) + self.assertEqual(image_array.shape, (image.height_px, image.width_px, 3)) + self.assertEqual(image_array[0, 0, 0], ord('A')) + self.assertEqual(image_array[1, 1, 2], ord('C')) + + def test_convert_gray_32bit_images(self): + image = imagery_pb2.Image( + height_px=2, + width_px=3, + image_format=imagery_pb2.Image.IMAGE_FORMAT_GRAY_HW_32F, + content=b'AAAABBBBCCCCAAAABBBBCCCC', + ) + + image_array = imagery_utils.convert_image_to_array(image) + + self.assertEqual(image_array.dtype, np.float32) + self.assertEqual(image_array.shape, (image.height_px, image.width_px)) + self.assertEqual(image_array[0, 2], struct.unpack(b' Date: Mon, 5 Apr 2021 11:40:45 -0700 Subject: [PATCH 30/36] Cleaned-up/fixed version of this Pull Request #3239, thanks to Wenlong Lu --- examples/SharedMemory/PhysicsClientC_API.cpp | 62 ++++++++ examples/SharedMemory/PhysicsClientC_API.h | 4 + .../PhysicsServerCommandProcessor.cpp | 122 +++++++++++++--- examples/SharedMemory/SharedMemoryCommands.h | 3 + examples/pybullet/pybullet.c | 132 ++++++++++++++++-- .../Featherstone/btMultiBodyConstraint.cpp | 5 +- .../Featherstone/btMultiBodyConstraint.h | 2 +- .../btMultiBodySphericalJointMotor.cpp | 20 ++- .../btMultiBodySphericalJointMotor.h | 49 ++++++- 9 files changed, 358 insertions(+), 41 deletions(-) diff --git a/examples/SharedMemory/PhysicsClientC_API.cpp b/examples/SharedMemory/PhysicsClientC_API.cpp index 99b907a70..c70889872 100644 --- a/examples/SharedMemory/PhysicsClientC_API.cpp +++ b/examples/SharedMemory/PhysicsClientC_API.cpp @@ -1056,6 +1056,7 @@ B3_SHARED_API b3SharedMemoryCommandHandle b3JointControlCommandInit2Internal(b3S command->m_sendDesiredStateCommandArgument.m_Kp[i] = 0; command->m_sendDesiredStateCommandArgument.m_Kd[i] = 0; command->m_sendDesiredStateCommandArgument.m_desiredStateForceTorque[i] = 0; + command->m_sendDesiredStateCommandArgument.m_damping[i] = 0; } command->m_sendDesiredStateCommandArgument.m_desiredStateQ[3] = 1; return (b3SharedMemoryCommandHandle)command; @@ -1103,6 +1104,22 @@ B3_SHARED_API int b3JointControlSetKp(b3SharedMemoryCommandHandle commandHandle, return 0; } +B3_SHARED_API int b3JointControlSetKpMultiDof(b3SharedMemoryCommandHandle commandHandle, int dofIndex, double* kps, int dofCount) +{ + struct SharedMemoryCommand* command = (struct SharedMemoryCommand*)commandHandle; + b3Assert(command); + if ((dofIndex >= 0) && (dofIndex < MAX_DEGREE_OF_FREEDOM ) && dofCount >= 0 && dofCount <= 4) + { + for (int dof = 0; dof < dofCount; dof++) + { + command->m_sendDesiredStateCommandArgument.m_Kp[dofIndex + dof] = kps[dof]; + command->m_updateFlags |= SIM_DESIRED_STATE_HAS_KP; + command->m_sendDesiredStateCommandArgument.m_hasDesiredStateFlags[dofIndex + dof] |= SIM_DESIRED_STATE_HAS_KP; + } + } + return 0; +} + B3_SHARED_API int b3JointControlSetKd(b3SharedMemoryCommandHandle commandHandle, int dofIndex, double value) { struct SharedMemoryCommand* command = (struct SharedMemoryCommand*)commandHandle; @@ -1116,6 +1133,22 @@ B3_SHARED_API int b3JointControlSetKd(b3SharedMemoryCommandHandle commandHandle, return 0; } +B3_SHARED_API int b3JointControlSetKdMultiDof(b3SharedMemoryCommandHandle commandHandle, int dofIndex, double* kds, int dofCount) +{ + struct SharedMemoryCommand* command = (struct SharedMemoryCommand*)commandHandle; + b3Assert(command); + if ((dofIndex >= 0) && (dofIndex < MAX_DEGREE_OF_FREEDOM ) && dofCount >= 0 && dofCount <= 4) + { + for (int dof = 0; dof < dofCount; dof++) + { + command->m_sendDesiredStateCommandArgument.m_Kd[dofIndex + dof] = kds[dof]; + command->m_updateFlags |= SIM_DESIRED_STATE_HAS_KD; + command->m_sendDesiredStateCommandArgument.m_hasDesiredStateFlags[dofIndex + dof] |= SIM_DESIRED_STATE_HAS_KD; + } + } + return 0; +} + B3_SHARED_API int b3JointControlSetMaximumVelocity(b3SharedMemoryCommandHandle commandHandle, int dofIndex, double maximumVelocity) { struct SharedMemoryCommand* command = (struct SharedMemoryCommand*)commandHandle; @@ -1174,6 +1207,35 @@ B3_SHARED_API int b3JointControlSetDesiredForceTorqueMultiDof(b3SharedMemoryComm return 0; } +B3_SHARED_API int b3JointControlSetDamping(b3SharedMemoryCommandHandle commandHandle, int dofIndex, double value) +{ + struct SharedMemoryCommand* command = (struct SharedMemoryCommand*)commandHandle; + b3Assert(command); + if ((dofIndex >= 0) && (dofIndex < MAX_DEGREE_OF_FREEDOM)) + { + command->m_sendDesiredStateCommandArgument.m_damping[dofIndex] = value; + command->m_updateFlags |= SIM_DESIRED_STATE_HAS_DAMPING; + command->m_sendDesiredStateCommandArgument.m_hasDesiredStateFlags[dofIndex] |= SIM_DESIRED_STATE_HAS_DAMPING; + } + return 0; +} + +B3_SHARED_API int b3JointControlSetDampingMultiDof(b3SharedMemoryCommandHandle commandHandle, int dofIndex, double* damping, int dofCount) +{ + struct SharedMemoryCommand* command = (struct SharedMemoryCommand*)commandHandle; + b3Assert(command); + if ((dofIndex >= 0) && (dofIndex < MAX_DEGREE_OF_FREEDOM ) && dofCount >= 0 && dofCount <= 4) + { + for (int dof = 0; dof < dofCount; dof++) + { + command->m_sendDesiredStateCommandArgument.m_damping[dofIndex+dof] = damping[dof]; + command->m_updateFlags |= SIM_DESIRED_STATE_HAS_DAMPING; + command->m_sendDesiredStateCommandArgument.m_hasDesiredStateFlags[dofIndex + dof] |= SIM_DESIRED_STATE_HAS_DAMPING; + } + } + return 0; +} + B3_SHARED_API int b3JointControlSetMaximumForce(b3SharedMemoryCommandHandle commandHandle, int dofIndex, double value) { struct SharedMemoryCommand* command = (struct SharedMemoryCommand*)commandHandle; diff --git a/examples/SharedMemory/PhysicsClientC_API.h b/examples/SharedMemory/PhysicsClientC_API.h index 4727d6f86..101868028 100644 --- a/examples/SharedMemory/PhysicsClientC_API.h +++ b/examples/SharedMemory/PhysicsClientC_API.h @@ -484,7 +484,9 @@ extern "C" B3_SHARED_API int b3JointControlSetDesiredPositionMultiDof(b3SharedMemoryCommandHandle commandHandle, int qIndex, const double* position, int dofCount); B3_SHARED_API int b3JointControlSetKp(b3SharedMemoryCommandHandle commandHandle, int dofIndex, double value); + B3_SHARED_API int b3JointControlSetKpMultiDof(b3SharedMemoryCommandHandle commandHandle, int dofIndex, double* kps, int dofCount); B3_SHARED_API int b3JointControlSetKd(b3SharedMemoryCommandHandle commandHandle, int dofIndex, double value); + B3_SHARED_API int b3JointControlSetKdMultiDof(b3SharedMemoryCommandHandle commandHandle, int dofIndex, double* kds, int dofCount); B3_SHARED_API int b3JointControlSetMaximumVelocity(b3SharedMemoryCommandHandle commandHandle, int dofIndex, double maximumVelocity); ///Only use when controlMode is CONTROL_MODE_VELOCITY @@ -494,6 +496,8 @@ extern "C" B3_SHARED_API int b3JointControlSetMaximumForce(b3SharedMemoryCommandHandle commandHandle, int dofIndex, double value); B3_SHARED_API int b3JointControlSetDesiredForceTorqueMultiDof(b3SharedMemoryCommandHandle commandHandle, int dofIndex, double* forces, int dofCount); + B3_SHARED_API int b3JointControlSetDamping(b3SharedMemoryCommandHandle commandHandle, int dofIndex, double value); + B3_SHARED_API int b3JointControlSetDampingMultiDof(b3SharedMemoryCommandHandle commandHandle, int dofIndex, double* damping, int dofCount); ///Only use if when controlMode is CONTROL_MODE_TORQUE, B3_SHARED_API int b3JointControlSetDesiredForceTorque(b3SharedMemoryCommandHandle commandHandle, int dofIndex, double value); diff --git a/examples/SharedMemory/PhysicsServerCommandProcessor.cpp b/examples/SharedMemory/PhysicsServerCommandProcessor.cpp index 14f1e2b4b..88b50fcca 100644 --- a/examples/SharedMemory/PhysicsServerCommandProcessor.cpp +++ b/examples/SharedMemory/PhysicsServerCommandProcessor.cpp @@ -7143,8 +7143,8 @@ bool PhysicsServerCommandProcessor::processSendDesiredStateCommand(const struct motor->setRhsClamp(clientCmd.m_sendDesiredStateCommandArgument.m_rhsClamp[velIndex]); } bool hasDesiredPosOrVel = false; - btScalar kp = 0.f; - btScalar kd = 0.f; + btVector3 kp(0, 0, 0); + btVector3 kd(0, 0, 0); btVector3 desiredVelocity(0, 0, 0); if ((clientCmd.m_sendDesiredStateCommandArgument.m_hasDesiredStateFlags[velIndex] & SIM_DESIRED_STATE_HAS_QDOT) != 0) { @@ -7153,7 +7153,7 @@ bool PhysicsServerCommandProcessor::processSendDesiredStateCommand(const struct clientCmd.m_sendDesiredStateCommandArgument.m_desiredStateQdot[velIndex + 0], clientCmd.m_sendDesiredStateCommandArgument.m_desiredStateQdot[velIndex + 1], clientCmd.m_sendDesiredStateCommandArgument.m_desiredStateQdot[velIndex + 2]); - kd = 0.1; + kd.setValue(0.1, 0.1, 0.1); } btQuaternion desiredPosition(0, 0, 0, 1); if ((clientCmd.m_sendDesiredStateCommandArgument.m_hasDesiredStateFlags[posIndex] & SIM_DESIRED_STATE_HAS_Q) != 0) @@ -7164,38 +7164,122 @@ bool PhysicsServerCommandProcessor::processSendDesiredStateCommand(const struct clientCmd.m_sendDesiredStateCommandArgument.m_desiredStateQ[posIndex + 1], clientCmd.m_sendDesiredStateCommandArgument.m_desiredStateQ[posIndex + 2], clientCmd.m_sendDesiredStateCommandArgument.m_desiredStateQ[posIndex + 3]); - kp = 0.1; + kp.setValue(0.1, 0.1, 0.1); } if (hasDesiredPosOrVel) { + bool useMultiDof = true; + if ((clientCmd.m_sendDesiredStateCommandArgument.m_hasDesiredStateFlags[velIndex] & SIM_DESIRED_STATE_HAS_KP) != 0) { - kp = clientCmd.m_sendDesiredStateCommandArgument.m_Kp[velIndex]; + kp.setValue( + clientCmd.m_sendDesiredStateCommandArgument.m_Kp[velIndex + 0], + clientCmd.m_sendDesiredStateCommandArgument.m_Kp[velIndex + 0], + clientCmd.m_sendDesiredStateCommandArgument.m_Kp[velIndex + 0]); + } + if (((clientCmd.m_sendDesiredStateCommandArgument.m_hasDesiredStateFlags[velIndex+0] & SIM_DESIRED_STATE_HAS_KP) != 0) && + ((clientCmd.m_sendDesiredStateCommandArgument.m_hasDesiredStateFlags[velIndex+1] & SIM_DESIRED_STATE_HAS_KP) != 0) && + ((clientCmd.m_sendDesiredStateCommandArgument.m_hasDesiredStateFlags[velIndex+2] & SIM_DESIRED_STATE_HAS_KP) != 0) + ) + { + kp.setValue( + clientCmd.m_sendDesiredStateCommandArgument.m_Kp[velIndex + 0], + clientCmd.m_sendDesiredStateCommandArgument.m_Kp[velIndex + 1], + clientCmd.m_sendDesiredStateCommandArgument.m_Kp[velIndex + 2]); + } else + { + useMultiDof = false; } if ((clientCmd.m_sendDesiredStateCommandArgument.m_hasDesiredStateFlags[velIndex] & SIM_DESIRED_STATE_HAS_KD) != 0) { - kd = clientCmd.m_sendDesiredStateCommandArgument.m_Kd[velIndex]; + kd.setValue( + clientCmd.m_sendDesiredStateCommandArgument.m_Kd[velIndex + 0], + clientCmd.m_sendDesiredStateCommandArgument.m_Kd[velIndex + 0], + clientCmd.m_sendDesiredStateCommandArgument.m_Kd[velIndex + 0]); } - motor->setVelocityTarget(desiredVelocity, kd); - //todo: instead of clamping, combine the motor and limit - //and combine handling of limit force and motor force. + if (((clientCmd.m_sendDesiredStateCommandArgument.m_hasDesiredStateFlags[velIndex+0] & SIM_DESIRED_STATE_HAS_KD) != 0) && + ((clientCmd.m_sendDesiredStateCommandArgument.m_hasDesiredStateFlags[velIndex+1] & SIM_DESIRED_STATE_HAS_KD) != 0) && + ((clientCmd.m_sendDesiredStateCommandArgument.m_hasDesiredStateFlags[velIndex+2] & SIM_DESIRED_STATE_HAS_KD) != 0)) + { + kd.setValue( + clientCmd.m_sendDesiredStateCommandArgument.m_Kd[velIndex + 0], + clientCmd.m_sendDesiredStateCommandArgument.m_Kd[velIndex + 1], + clientCmd.m_sendDesiredStateCommandArgument.m_Kd[velIndex + 2]); + } else + { + useMultiDof = false; + } - //clamp position - //if (mb->getLink(link).m_jointLowerLimit <= mb->getLink(link).m_jointUpperLimit) - //{ - // btClamp(desiredPosition, mb->getLink(link).m_jointLowerLimit, mb->getLink(link).m_jointUpperLimit); - //} - motor->setPositionTarget(desiredPosition, kp); + btVector3 maxImp( + 1000000.f * m_data->m_physicsDeltaTime, + 1000000.f * m_data->m_physicsDeltaTime, + 1000000.f * m_data->m_physicsDeltaTime); - btScalar maxImp = 1000000.f * m_data->m_physicsDeltaTime; + if ((clientCmd.m_sendDesiredStateCommandArgument.m_hasDesiredStateFlags[velIndex] & SIM_DESIRED_STATE_HAS_MAX_FORCE)!=0) + { + maxImp.setValue( + clientCmd.m_sendDesiredStateCommandArgument.m_desiredStateForceTorque[velIndex + 0] * m_data->m_physicsDeltaTime, + clientCmd.m_sendDesiredStateCommandArgument.m_desiredStateForceTorque[velIndex + 0] * m_data->m_physicsDeltaTime, + clientCmd.m_sendDesiredStateCommandArgument.m_desiredStateForceTorque[velIndex + 0] * m_data->m_physicsDeltaTime); + } - if ((clientCmd.m_updateFlags & SIM_DESIRED_STATE_HAS_MAX_FORCE) != 0) - maxImp = clientCmd.m_sendDesiredStateCommandArgument.m_desiredStateForceTorque[velIndex] * m_data->m_physicsDeltaTime; + if (((clientCmd.m_sendDesiredStateCommandArgument.m_hasDesiredStateFlags[velIndex+0] & SIM_DESIRED_STATE_HAS_MAX_FORCE)!=0) && + ((clientCmd.m_sendDesiredStateCommandArgument.m_hasDesiredStateFlags[velIndex+1] & SIM_DESIRED_STATE_HAS_MAX_FORCE)!=0) && + ((clientCmd.m_sendDesiredStateCommandArgument.m_hasDesiredStateFlags[velIndex+2] & SIM_DESIRED_STATE_HAS_MAX_FORCE)!=0)) + { + maxImp.setValue( + clientCmd.m_sendDesiredStateCommandArgument.m_desiredStateForceTorque[velIndex + 0] * m_data->m_physicsDeltaTime, + clientCmd.m_sendDesiredStateCommandArgument.m_desiredStateForceTorque[velIndex + 1] * m_data->m_physicsDeltaTime, + clientCmd.m_sendDesiredStateCommandArgument.m_desiredStateForceTorque[velIndex + 2] * m_data->m_physicsDeltaTime); + } else + { + useMultiDof = false; + } + + if (useMultiDof) + { + motor->setVelocityTargetMultiDof(desiredVelocity, kd); + motor->setPositionTargetMultiDof(desiredPosition, kp); + motor->setMaxAppliedImpulseMultiDof(maxImp); + } else + { + motor->setVelocityTarget(desiredVelocity, kd[0]); + //todo: instead of clamping, combine the motor and limit + //and combine handling of limit force and motor force. - motor->setMaxAppliedImpulse(maxImp); + //clamp position + //if (mb->getLink(link).m_jointLowerLimit <= mb->getLink(link).m_jointUpperLimit) + //{ + // btClamp(desiredPosition, mb->getLink(link).m_jointLowerLimit, mb->getLink(link).m_jointUpperLimit); + //} + motor->setPositionTarget(desiredPosition, kp[0]); + motor->setMaxAppliedImpulse(maxImp[0]); + } + + btVector3 damping(1.f, 1.f, 1.f); + if ((clientCmd.m_updateFlags & SIM_DESIRED_STATE_HAS_DAMPING) != 0) { + if ( + (clientCmd.m_sendDesiredStateCommandArgument.m_hasDesiredStateFlags[velIndex+0] & SIM_DESIRED_STATE_HAS_DAMPING)&& + (clientCmd.m_sendDesiredStateCommandArgument.m_hasDesiredStateFlags[velIndex+1] & SIM_DESIRED_STATE_HAS_DAMPING)&& + (clientCmd.m_sendDesiredStateCommandArgument.m_hasDesiredStateFlags[velIndex+2] & SIM_DESIRED_STATE_HAS_DAMPING) + ) + { + damping.setValue( + clientCmd.m_sendDesiredStateCommandArgument.m_damping[velIndex + 0], + clientCmd.m_sendDesiredStateCommandArgument.m_damping[velIndex + 1], + clientCmd.m_sendDesiredStateCommandArgument.m_damping[velIndex + 2]); + } else + { + damping.setValue( + clientCmd.m_sendDesiredStateCommandArgument.m_damping[velIndex + 0], + clientCmd.m_sendDesiredStateCommandArgument.m_damping[velIndex + 0], + clientCmd.m_sendDesiredStateCommandArgument.m_damping[velIndex + 0]); + } + } + motor->setDamping(damping); } numMotors++; } diff --git a/examples/SharedMemory/SharedMemoryCommands.h b/examples/SharedMemory/SharedMemoryCommands.h index a019a58ca..e463b2dc5 100644 --- a/examples/SharedMemory/SharedMemoryCommands.h +++ b/examples/SharedMemory/SharedMemoryCommands.h @@ -465,6 +465,8 @@ struct SendDesiredStateArgs //or the maximum applied force/torque for the PD/motor/constraint to reach the desired velocity in CONTROL_MODE_VELOCITY and CONTROL_MODE_POSITION_VELOCITY_PD mode //indexed by degree of freedom, 6 dof base, and then dofs for each link double m_desiredStateForceTorque[MAX_DEGREE_OF_FREEDOM]; + + double m_damping[MAX_DEGREE_OF_FREEDOM]; }; enum EnumSimDesiredStateUpdateFlags @@ -475,6 +477,7 @@ enum EnumSimDesiredStateUpdateFlags SIM_DESIRED_STATE_HAS_KP = 8, SIM_DESIRED_STATE_HAS_MAX_FORCE = 16, SIM_DESIRED_STATE_HAS_RHS_CLAMP = 32, + SIM_DESIRED_STATE_HAS_DAMPING = 64, }; enum EnumSimParamUpdateFlags diff --git a/examples/pybullet/pybullet.c b/examples/pybullet/pybullet.c index 7359fdadc..d4d45db6e 100644 --- a/examples/pybullet/pybullet.c +++ b/examples/pybullet/pybullet.c @@ -51,9 +51,10 @@ #pragma message(B3_VAR_NAME_VALUE(PY_MAJOR_VERSION)) #pragma message(B3_VAR_NAME_VALUE(PY_MINOR_VERSION)) #endif - +//#define PYBULLET_USE_NUMPY #ifdef PYBULLET_USE_NUMPY #include +//#include "C:/Python37/Lib/site-packages/numpy/core/include/numpy/arrayobject.h" #endif #if PY_MAJOR_VERSION >= 3 @@ -3234,17 +3235,29 @@ static PyObject* pybullet_setJointMotorControlMultiDof(PyObject* self, PyObject* PyObject* targetVelocityObj = 0; PyObject* targetForceObj = 0; - double kp = 0.1; - double kd = 1.0; + double kpArray[3] = {0.1, 0.1, 0.1}; + int kpSize = 0; + PyObject* kpObj = 0; + double kdArray[3] = {1.0, 1.0, 1.0}; + int kdSize = 0; + PyObject* kdObj = 0; double maxVelocity = -1; + double dampingArray[3] = {1.0, 1.0, 1.0}; + int dampingSize = 0; + PyObject* dampingObj = 0; b3PhysicsClientHandle sm = 0; int physicsClientId = 0; - static char* kwlist[] = {"bodyUniqueId", "jointIndex", "controlMode", "targetPosition", "targetVelocity", "force", "positionGain", "velocityGain", "maxVelocity", "physicsClientId", NULL}; - if (!PyArg_ParseTupleAndKeywords(args, keywds, "iii|OOOdddi", kwlist, &bodyUniqueId, &jointIndex, &controlMode, - &targetPositionObj, &targetVelocityObj, &targetForceObj, &kp, &kd, &maxVelocity, &physicsClientId)) + static char* kwlist[] = {"bodyUniqueId", "jointIndex", "controlMode", "targetPosition", "targetVelocity", "force", "positionGain", "velocityGain", "maxVelocity", "damping", "physicsClientId", NULL}; + if (!PyArg_ParseTupleAndKeywords(args, keywds, "iii|OOOddddi", kwlist, &bodyUniqueId, &jointIndex, &controlMode, + &targetPositionObj, &targetVelocityObj, &targetForceObj, &kpArray[0], &kdArray[0], &maxVelocity, &dampingArray[0], &physicsClientId)) { - return NULL; + PyErr_Clear(); + if (!PyArg_ParseTupleAndKeywords(args, keywds, "iii|OOOOOdOi", kwlist, &bodyUniqueId, &jointIndex, &controlMode, + &targetPositionObj, &targetVelocityObj, &targetForceObj, &kpObj, &kdObj, &maxVelocity, &dampingObj, &physicsClientId)) + { + return NULL; + } } sm = getPhysicsClient(physicsClientId); if (sm == 0) @@ -3328,6 +3341,81 @@ static PyObject* pybullet_setJointMotorControlMultiDof(PyObject* self, PyObject* } } + if (kpObj) + { + int i = 0; + PyObject* kpSeq = 0; + kpSeq = PySequence_Fast(kpObj, "expected a kp sequence"); + kpSize = PySequence_Size(kpObj); + + if (kpSize < 0) + { + kpSize = 0; + } + if (kpSize > 3) + { + kpSize = 3; + } + if (kpSeq) + { + for (i = 0; i < kpSize; i++) + { + kpArray[i] = pybullet_internalGetFloatFromSequence(kpSeq, i); + } + Py_DECREF(kpSeq); + } + } + + if (kdObj) + { + int i = 0; + PyObject* kdSeq = 0; + kdSeq = PySequence_Fast(kdObj, "expected a kd sequence"); + kdSize = PySequence_Size(kdObj); + + if (kdSize < 0) + { + kdSize = 0; + } + if (kdSize > 3) + { + kdSize = 3; + } + if (kdSeq) + { + for (i = 0; i < kdSize; i++) + { + kdArray[i] = pybullet_internalGetFloatFromSequence(kdSeq, i); + } + Py_DECREF(kdSeq); + } + } + + if (dampingObj) + { + int i = 0; + PyObject* dampingSeq = 0; + dampingSeq = PySequence_Fast(dampingObj, "expected a damping sequence"); + dampingSize = PySequence_Size(dampingObj); + + if (dampingSize < 0) + { + dampingSize = 0; + } + if (dampingSize > 3) + { + dampingSize = 3; + } + if (dampingSeq) + { + for (i = 0; i < dampingSize; i++) + { + dampingArray[i] = pybullet_internalGetFloatFromSequence(dampingSeq, i); + } + Py_DECREF(dampingSeq); + } + } + //if (targetPositionSize == 0 && targetVelocitySize == 0) //{ @@ -3400,7 +3488,15 @@ static PyObject* pybullet_setJointMotorControlMultiDof(PyObject* self, PyObject* //printf("Warning: targetPosition array size doesn't match joint position size (got %d, expected %d).",targetPositionSize, info.m_qSize); } - b3JointControlSetKp(commandHandle, info.m_uIndex, kp); + if (info.m_uSize == kpSize || kpSize == 1) + { + b3JointControlSetKpMultiDof(commandHandle, info.m_uIndex, + kpArray, kpSize); + } + else if (kpSize == 0) + { + b3JointControlSetKp(commandHandle, info.m_uIndex, kpArray[0]); + } if (info.m_uSize == targetVelocitySize) { b3JointControlSetDesiredVelocityMultiDof(commandHandle, info.m_uIndex, @@ -3410,12 +3506,30 @@ static PyObject* pybullet_setJointMotorControlMultiDof(PyObject* self, PyObject* { //printf("Warning: targetVelocity array size doesn't match joint dimentions (got %d, expected %d).", targetVelocitySize, info.m_uSize); } - b3JointControlSetKd(commandHandle, info.m_uIndex, kd); + if (info.m_uSize == kdSize || kdSize == 1) + { + b3JointControlSetKdMultiDof(commandHandle, info.m_uIndex, + kdArray, kdSize); + } + else if (kdSize == 0) + { + b3JointControlSetKd(commandHandle, info.m_uIndex, kdArray[0]); + } if (info.m_uSize == targetForceSize || targetForceSize == 1) { b3JointControlSetDesiredForceTorqueMultiDof(commandHandle, info.m_uIndex, targetForceArray, targetForceSize); } + if (info.m_uSize == dampingSize || dampingSize == 1) + { + b3JointControlSetDampingMultiDof(commandHandle, info.m_uIndex, + dampingArray, dampingSize); + } + else if (dampingSize == 0) + { + b3JointControlSetDamping(commandHandle, info.m_uIndex, + dampingArray[0]); + } break; } default: diff --git a/src/BulletDynamics/Featherstone/btMultiBodyConstraint.cpp b/src/BulletDynamics/Featherstone/btMultiBodyConstraint.cpp index 1ba586114..00d5fd560 100644 --- a/src/BulletDynamics/Featherstone/btMultiBodyConstraint.cpp +++ b/src/BulletDynamics/Featherstone/btMultiBodyConstraint.cpp @@ -61,7 +61,8 @@ btScalar btMultiBodyConstraint::fillMultiBodyConstraint(btMultiBodySolverConstra btScalar lowerLimit, btScalar upperLimit, bool angConstraint, btScalar relaxation, - bool isFriction, btScalar desiredVelocity, btScalar cfmSlip) + bool isFriction, btScalar desiredVelocity, btScalar cfmSlip, + btScalar damping) { solverConstraint.m_multiBodyA = m_bodyA; solverConstraint.m_multiBodyB = m_bodyB; @@ -348,7 +349,7 @@ btScalar btMultiBodyConstraint::fillMultiBodyConstraint(btMultiBodySolverConstra { btScalar positionalError = 0.f; - btScalar velocityError = desiredVelocity - rel_vel; // * damping; + btScalar velocityError = (desiredVelocity - rel_vel) * damping; btScalar erp = infoGlobal.m_erp2; diff --git a/src/BulletDynamics/Featherstone/btMultiBodyConstraint.h b/src/BulletDynamics/Featherstone/btMultiBodyConstraint.h index 4a6007ee3..1aaa07b69 100644 --- a/src/BulletDynamics/Featherstone/btMultiBodyConstraint.h +++ b/src/BulletDynamics/Featherstone/btMultiBodyConstraint.h @@ -94,7 +94,7 @@ protected: bool angConstraint = false, btScalar relaxation = 1.f, - bool isFriction = false, btScalar desiredVelocity = 0, btScalar cfmSlip = 0); + bool isFriction = false, btScalar desiredVelocity = 0, btScalar cfmSlip = 0, btScalar damping = 1.0); public: BT_DECLARE_ALIGNED_ALLOCATOR(); diff --git a/src/BulletDynamics/Featherstone/btMultiBodySphericalJointMotor.cpp b/src/BulletDynamics/Featherstone/btMultiBodySphericalJointMotor.cpp index 25ddd539b..00a7ef357 100644 --- a/src/BulletDynamics/Featherstone/btMultiBodySphericalJointMotor.cpp +++ b/src/BulletDynamics/Featherstone/btMultiBodySphericalJointMotor.cpp @@ -26,10 +26,13 @@ btMultiBodySphericalJointMotor::btMultiBodySphericalJointMotor(btMultiBody* body : btMultiBodyConstraint(body, body, link, body->getLink(link).m_parent, 3, true, MULTIBODY_CONSTRAINT_SPHERICAL_MOTOR), m_desiredVelocity(0, 0, 0), m_desiredPosition(0,0,0,1), - m_kd(1.), - m_kp(0.2), + m_use_multi_dof_params(false), + m_kd(1., 1., 1.), + m_kp(0.2, 0.2, 0.2), m_erp(1), - m_rhsClamp(SIMD_INFINITY) + m_rhsClamp(SIMD_INFINITY), + m_maxAppliedImpulseMultiDof(maxMotorImpulse, maxMotorImpulse, maxMotorImpulse), + m_damping(1.0, 1.0, 1.0) { m_maxAppliedImpulse = maxMotorImpulse; @@ -139,7 +142,8 @@ btQuaternion relRot = currentQuat.inverse() * desiredQuat; btScalar currentVelocity = m_bodyA->getJointVelMultiDof(m_linkA)[dof]; btScalar desiredVelocity = this->m_desiredVelocity[row]; - btScalar velocityError = desiredVelocity - currentVelocity; + double kd = m_use_multi_dof_params ? m_kd[row % 3] : m_kd[0]; + btScalar velocityError = (desiredVelocity - currentVelocity) * kd; btMatrix3x3 frameAworld; frameAworld.setIdentity(); @@ -152,12 +156,16 @@ btQuaternion relRot = currentQuat.inverse() * desiredQuat; case btMultibodyLink::eSpherical: { btVector3 constraintNormalAng = frameAworld.getColumn(row % 3); - posError = m_kp*angleDiff[row % 3]; + double kp = m_use_multi_dof_params ? m_kp[row % 3] : m_kp[0]; + posError = kp*angleDiff[row % 3]; + double max_applied_impulse = m_use_multi_dof_params ? m_maxAppliedImpulseMultiDof[row % 3] : m_maxAppliedImpulse; fillMultiBodyConstraint(constraintRow, data, 0, 0, constraintNormalAng, btVector3(0,0,0), dummy, dummy, posError, infoGlobal, - -m_maxAppliedImpulse, m_maxAppliedImpulse, true); + -max_applied_impulse, max_applied_impulse, true, + 1.0, false, 0, 0, + m_damping[row % 3]); constraintRow.m_orgConstraint = this; constraintRow.m_orgDofIndex = row; break; diff --git a/src/BulletDynamics/Featherstone/btMultiBodySphericalJointMotor.h b/src/BulletDynamics/Featherstone/btMultiBodySphericalJointMotor.h index 621beab5a..bdeccc2e2 100644 --- a/src/BulletDynamics/Featherstone/btMultiBodySphericalJointMotor.h +++ b/src/BulletDynamics/Featherstone/btMultiBodySphericalJointMotor.h @@ -26,10 +26,13 @@ class btMultiBodySphericalJointMotor : public btMultiBodyConstraint protected: btVector3 m_desiredVelocity; btQuaternion m_desiredPosition; - btScalar m_kd; - btScalar m_kp; + bool m_use_multi_dof_params; + btVector3 m_kd; + btVector3 m_kp; btScalar m_erp; btScalar m_rhsClamp; //maximum error + btVector3 m_maxAppliedImpulseMultiDof; + btVector3 m_damping; public: btMultiBodySphericalJointMotor(btMultiBody* body, int link, btScalar maxMotorImpulse); @@ -44,16 +47,32 @@ public: btMultiBodyJacobianData& data, const btContactSolverInfo& infoGlobal); - virtual void setVelocityTarget(const btVector3& velTarget, btScalar kd = 1.f) + virtual void setVelocityTarget(const btVector3& velTarget, btScalar kd = 1.0) + { + m_desiredVelocity = velTarget; + m_kd = btVector3(kd, kd, kd); + m_use_multi_dof_params = false; + } + + virtual void setVelocityTargetMultiDof(const btVector3& velTarget, const btVector3& kd = btVector3(1.0, 1.0, 1.0)) { m_desiredVelocity = velTarget; m_kd = kd; + m_use_multi_dof_params = true; } - virtual void setPositionTarget(const btQuaternion& posTarget, btScalar kp = 1.f) + virtual void setPositionTarget(const btQuaternion& posTarget, btScalar kp =1.f) + { + m_desiredPosition = posTarget; + m_kp = btVector3(kp, kp, kp); + m_use_multi_dof_params = false; + } + + virtual void setPositionTargetMultiDof(const btQuaternion& posTarget, const btVector3& kp = btVector3(1.f, 1.f, 1.f)) { m_desiredPosition = posTarget; m_kp = kp; + m_use_multi_dof_params = true; } virtual void setErp(btScalar erp) @@ -68,6 +87,28 @@ public: { m_rhsClamp = rhsClamp; } + + btScalar getMaxAppliedImpulseMultiDof(int i) const + { + return m_maxAppliedImpulseMultiDof[i]; + } + + void setMaxAppliedImpulseMultiDof(const btVector3& maxImp) + { + m_maxAppliedImpulseMultiDof = maxImp; + m_use_multi_dof_params = true; + } + + btScalar getDamping(int i) const + { + return m_damping[i]; + } + + void setDamping(const btVector3& damping) + { + m_damping = damping; + } + virtual void debugDraw(class btIDebugDraw* drawer) { //todo(erwincoumans) From 674c82db89e3f6dd6452b935f0cd1efec70f6703 Mon Sep 17 00:00:00 2001 From: Erwin Coumans Date: Mon, 5 Apr 2021 17:58:25 -0700 Subject: [PATCH 31/36] bump up pybullet version to 3.1.2 add missing __init__.py files --- .../minitaur/agents/trajectory_generator/__init__.py | 0 .../gym/pybullet_envs/minitaur/envs_v2/examples/__init__.py | 0 .../gym/pybullet_envs/minitaur/envs_v2/scenes/__init__.py | 0 .../gym/pybullet_envs/minitaur/envs_v2/utilities/__init__.py | 0 .../gym/pybullet_envs/minitaur/robots/safety/python/__init__.py | 0 examples/pybullet/gym/pybullet_envs/minitaur/vision/__init__.py | 0 setup.py | 2 +- 7 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/agents/trajectory_generator/__init__.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/examples/__init__.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/scenes/__init__.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/utilities/__init__.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/robots/safety/python/__init__.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/vision/__init__.py diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/agents/trajectory_generator/__init__.py b/examples/pybullet/gym/pybullet_envs/minitaur/agents/trajectory_generator/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/examples/__init__.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/examples/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/scenes/__init__.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/scenes/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/utilities/__init__.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/utilities/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/robots/safety/python/__init__.py b/examples/pybullet/gym/pybullet_envs/minitaur/robots/safety/python/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/vision/__init__.py b/examples/pybullet/gym/pybullet_envs/minitaur/vision/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/setup.py b/setup.py index 077f697c7..84d61f329 100644 --- a/setup.py +++ b/setup.py @@ -501,7 +501,7 @@ if 'BT_USE_EGL' in EGL_CXX_FLAGS: setup( name='pybullet', - version='3.1.0', + version='3.1.2', description= 'Official Python Interface for the Bullet Physics SDK specialized for Robotics Simulation and Reinforcement Learning', long_description= From 513e3a7db4be2af51d9cd3bdac6c397c86b54b94 Mon Sep 17 00:00:00 2001 From: Erwin Coumans Date: Mon, 5 Apr 2021 18:07:39 -0700 Subject: [PATCH 32/36] add more __init__.py files --- examples/pybullet/gym/pybullet_data/configs/__init__.py | 0 examples/pybullet/gym/pybullet_data/configs_v2/__init__.py | 0 examples/pybullet/gym/pybullet_data/configs_v2/base/__init__.py | 0 examples/pybullet/gym/pybullet_data/configs_v2/robots/__init__.py | 0 examples/pybullet/gym/pybullet_data/configs_v2/scenes/__init__.py | 0 examples/pybullet/gym/pybullet_data/configs_v2/tasks/__init__.py | 0 .../pybullet/gym/pybullet_data/configs_v2/wrappers/__init__.py | 0 .../gym/pybullet_envs/minitaur/envs_v2/sensors/__init__.py | 0 8 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 examples/pybullet/gym/pybullet_data/configs/__init__.py create mode 100644 examples/pybullet/gym/pybullet_data/configs_v2/__init__.py create mode 100644 examples/pybullet/gym/pybullet_data/configs_v2/base/__init__.py create mode 100644 examples/pybullet/gym/pybullet_data/configs_v2/robots/__init__.py create mode 100644 examples/pybullet/gym/pybullet_data/configs_v2/scenes/__init__.py create mode 100644 examples/pybullet/gym/pybullet_data/configs_v2/tasks/__init__.py create mode 100644 examples/pybullet/gym/pybullet_data/configs_v2/wrappers/__init__.py create mode 100644 examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/sensors/__init__.py diff --git a/examples/pybullet/gym/pybullet_data/configs/__init__.py b/examples/pybullet/gym/pybullet_data/configs/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/examples/pybullet/gym/pybullet_data/configs_v2/__init__.py b/examples/pybullet/gym/pybullet_data/configs_v2/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/examples/pybullet/gym/pybullet_data/configs_v2/base/__init__.py b/examples/pybullet/gym/pybullet_data/configs_v2/base/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/examples/pybullet/gym/pybullet_data/configs_v2/robots/__init__.py b/examples/pybullet/gym/pybullet_data/configs_v2/robots/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/examples/pybullet/gym/pybullet_data/configs_v2/scenes/__init__.py b/examples/pybullet/gym/pybullet_data/configs_v2/scenes/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/examples/pybullet/gym/pybullet_data/configs_v2/tasks/__init__.py b/examples/pybullet/gym/pybullet_data/configs_v2/tasks/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/examples/pybullet/gym/pybullet_data/configs_v2/wrappers/__init__.py b/examples/pybullet/gym/pybullet_data/configs_v2/wrappers/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/sensors/__init__.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs_v2/sensors/__init__.py new file mode 100644 index 000000000..e69de29bb From 29f388a5d8f5545a0a20a0cbe6ead7109133e071 Mon Sep 17 00:00:00 2001 From: Erwin Coumans Date: Mon, 5 Apr 2021 19:50:46 -0700 Subject: [PATCH 33/36] add selected examples under pybullet_examples --- .../pybullet/examples/biped2d_pybullet.py | 1 - .../TwoJointRobot_w_fixedJoints.urdf | 182 + .../TwoJointRobot_wo_fixedJoints.urdf | 110 + examples/pybullet/gym/pybullet_data/ball.vtk | 5681 ++++++++++ .../gym/pybullet_data/checker_grid.jpg | Bin 0 -> 32768 bytes .../pybullet/gym/pybullet_data/cloth_z_up.mtl | 13 + .../pybullet/gym/pybullet_data/cloth_z_up.obj | 89 + .../gym/pybullet_data/cloth_z_up.urdf | 32 + examples/pybullet/gym/pybullet_data/cube.urdf | 32 + .../pybullet_data/cube_collisionfilter.urdf | 29 + .../pybullet/gym/pybullet_data/pickup2.zip | Bin 0 -> 387045 bytes .../gym/pybullet_data/sphere_1cm.urdf | 22 + .../gym/pybullet_data/sphere_transparent.urdf | 32 + examples/pybullet/gym/pybullet_data/stone.mtl | 10 + examples/pybullet/gym/pybullet_data/stone.obj | 32 + .../gym/pybullet_data/teddy_large.urdf | 32 + .../pybullet/gym/pybullet_data/terrain.obj | 2583 +++++ .../pybullet/gym/pybullet_data/tex256.png | Bin 0 -> 12089 bytes examples/pybullet/gym/pybullet_data/torus.vtk | 9917 +++++++++++++++++ .../pybullet_data/torus/torus_textured.mtl | 11 + .../pybullet_data/torus/torus_textured.obj | 2270 ++++ .../gym/pybullet_data/torus_deform.urdf | 14 + .../gym/pybullet_data/toys/LICENSE.txt | 14 + .../gym/pybullet_data/toys/concave_box.cdf | Bin 0 -> 6285748 bytes .../gym/pybullet_data/toys/concave_box.mtl | 11 + .../gym/pybullet_data/toys/concave_box.obj | 949 ++ .../gym/pybullet_data/toys/concave_box.urdf | 30 + .../pybullet/gym/pybullet_data/toys/cube.mtl | 11 + .../pybullet/gym/pybullet_data/toys/cube.obj | 64 + .../gym/pybullet_data/toys/cylinder.mtl | 11 + .../gym/pybullet_data/toys/cylinder.obj | 282 + .../pybullet/gym/pybullet_data/toys/prism.mtl | 11 + .../pybullet/gym/pybullet_data/toys/prism.obj | 45 + .../gym/pybullet_data/toys/shape_sorter.mtl | 21 + .../gym/pybullet_data/toys/shape_sorter.obj | 400 + examples/pybullet/gym/pybullet_data/uvmap.png | Bin 0 -> 41155 bytes .../gym/pybullet_examples/__init__.py | 1 + .../gym/pybullet_examples/biped2d_pybullet.py | 39 + .../gym/pybullet_examples/collisionFilter.py | 21 + .../gym/pybullet_examples/constraint.py | 27 + .../pybullet_examples/createMultiBodyBatch.py | 143 + .../pybullet_examples/createObstacleCourse.py | 130 + .../createVisualShapeArray.py | 115 + .../pybullet_examples/deformable_anchor.py | 55 + .../gym/pybullet_examples/deformable_torus.py | 31 + .../experimentalCcdSphereRadius.py | 55 + .../gym/pybullet_examples/fileIOPlugin.py | 23 + .../gym/pybullet_examples/getClosestPoints.py | 75 + .../gym/pybullet_examples/getTextureUid.py | 21 + .../gym/pybullet_examples/heightfield.py | 138 + .../humanoidMotionCapture.py | 614 + .../gym/pybullet_examples/inverse_dynamics.py | 167 + .../pybullet_examples/inverse_kinematics.py | 125 + .../inverse_kinematics_husky_kuka.py | 202 + .../inverse_kinematics_pole.py | 66 + .../gym/pybullet_examples/jacobian.py | 102 + .../gym/pybullet_examples/manyspheres.py | 38 + .../pybullet_examples/mimicJointConstraint.py | 50 + .../gym/pybullet_examples/motorMaxVelocity.py | 22 + .../gym/pybullet_examples/pdControl.py | 152 + .../pybullet_examples/pdControllerExplicit.py | 98 + .../pybullet_examples/pdControllerStable.py | 147 + .../pointCloudFromCameraImage.py | 138 + .../gym/pybullet_examples/profileTiming.py | 25 + .../pybullet_examples/projective_texture.py | 41 + .../gym/pybullet_examples/rollPitchYaw.py | 28 + .../gym/pybullet_examples/satCollision.py | 21 + .../gym/pybullet_examples/sceneAabb.py | 42 + .../pybullet_examples/signedDistanceField.py | 17 + .../pybullet/gym/pybullet_examples/snake.py | 144 + .../gym/pybullet_examples/soccerball.py | 17 + .../switchConstraintSolver.py | 32 + .../gym/pybullet_examples/testrender_egl.py | 102 + .../gym/pybullet_examples/testrender_np.py | 90 + .../gym/pybullet_examples/transparent.py | 25 + .../pybullet/gym/pybullet_examples/vhacd.py | 13 + .../gym/pybullet_examples/video_sync_mp4.py | 32 + .../gym/pybullet_examples/vr_kuka_setup.py | 184 + setup.py | 2 +- 79 files changed, 26549 insertions(+), 2 deletions(-) create mode 100644 examples/pybullet/gym/pybullet_data/TwoJointRobot_w_fixedJoints.urdf create mode 100644 examples/pybullet/gym/pybullet_data/TwoJointRobot_wo_fixedJoints.urdf create mode 100644 examples/pybullet/gym/pybullet_data/ball.vtk create mode 100644 examples/pybullet/gym/pybullet_data/checker_grid.jpg create mode 100644 examples/pybullet/gym/pybullet_data/cloth_z_up.mtl create mode 100644 examples/pybullet/gym/pybullet_data/cloth_z_up.obj create mode 100644 examples/pybullet/gym/pybullet_data/cloth_z_up.urdf create mode 100644 examples/pybullet/gym/pybullet_data/cube.urdf create mode 100644 examples/pybullet/gym/pybullet_data/cube_collisionfilter.urdf create mode 100644 examples/pybullet/gym/pybullet_data/pickup2.zip create mode 100644 examples/pybullet/gym/pybullet_data/sphere_1cm.urdf create mode 100644 examples/pybullet/gym/pybullet_data/sphere_transparent.urdf create mode 100644 examples/pybullet/gym/pybullet_data/stone.mtl create mode 100644 examples/pybullet/gym/pybullet_data/stone.obj create mode 100644 examples/pybullet/gym/pybullet_data/teddy_large.urdf create mode 100644 examples/pybullet/gym/pybullet_data/terrain.obj create mode 100644 examples/pybullet/gym/pybullet_data/tex256.png create mode 100644 examples/pybullet/gym/pybullet_data/torus.vtk create mode 100644 examples/pybullet/gym/pybullet_data/torus/torus_textured.mtl create mode 100644 examples/pybullet/gym/pybullet_data/torus/torus_textured.obj create mode 100644 examples/pybullet/gym/pybullet_data/torus_deform.urdf create mode 100644 examples/pybullet/gym/pybullet_data/toys/LICENSE.txt create mode 100644 examples/pybullet/gym/pybullet_data/toys/concave_box.cdf create mode 100644 examples/pybullet/gym/pybullet_data/toys/concave_box.mtl create mode 100644 examples/pybullet/gym/pybullet_data/toys/concave_box.obj create mode 100644 examples/pybullet/gym/pybullet_data/toys/concave_box.urdf create mode 100644 examples/pybullet/gym/pybullet_data/toys/cube.mtl create mode 100644 examples/pybullet/gym/pybullet_data/toys/cube.obj create mode 100644 examples/pybullet/gym/pybullet_data/toys/cylinder.mtl create mode 100644 examples/pybullet/gym/pybullet_data/toys/cylinder.obj create mode 100644 examples/pybullet/gym/pybullet_data/toys/prism.mtl create mode 100644 examples/pybullet/gym/pybullet_data/toys/prism.obj create mode 100644 examples/pybullet/gym/pybullet_data/toys/shape_sorter.mtl create mode 100644 examples/pybullet/gym/pybullet_data/toys/shape_sorter.obj create mode 100644 examples/pybullet/gym/pybullet_data/uvmap.png create mode 100644 examples/pybullet/gym/pybullet_examples/__init__.py create mode 100644 examples/pybullet/gym/pybullet_examples/biped2d_pybullet.py create mode 100644 examples/pybullet/gym/pybullet_examples/collisionFilter.py create mode 100644 examples/pybullet/gym/pybullet_examples/constraint.py create mode 100644 examples/pybullet/gym/pybullet_examples/createMultiBodyBatch.py create mode 100644 examples/pybullet/gym/pybullet_examples/createObstacleCourse.py create mode 100644 examples/pybullet/gym/pybullet_examples/createVisualShapeArray.py create mode 100644 examples/pybullet/gym/pybullet_examples/deformable_anchor.py create mode 100644 examples/pybullet/gym/pybullet_examples/deformable_torus.py create mode 100644 examples/pybullet/gym/pybullet_examples/experimentalCcdSphereRadius.py create mode 100644 examples/pybullet/gym/pybullet_examples/fileIOPlugin.py create mode 100644 examples/pybullet/gym/pybullet_examples/getClosestPoints.py create mode 100644 examples/pybullet/gym/pybullet_examples/getTextureUid.py create mode 100644 examples/pybullet/gym/pybullet_examples/heightfield.py create mode 100644 examples/pybullet/gym/pybullet_examples/humanoidMotionCapture.py create mode 100644 examples/pybullet/gym/pybullet_examples/inverse_dynamics.py create mode 100644 examples/pybullet/gym/pybullet_examples/inverse_kinematics.py create mode 100644 examples/pybullet/gym/pybullet_examples/inverse_kinematics_husky_kuka.py create mode 100644 examples/pybullet/gym/pybullet_examples/inverse_kinematics_pole.py create mode 100644 examples/pybullet/gym/pybullet_examples/jacobian.py create mode 100644 examples/pybullet/gym/pybullet_examples/manyspheres.py create mode 100644 examples/pybullet/gym/pybullet_examples/mimicJointConstraint.py create mode 100644 examples/pybullet/gym/pybullet_examples/motorMaxVelocity.py create mode 100644 examples/pybullet/gym/pybullet_examples/pdControl.py create mode 100644 examples/pybullet/gym/pybullet_examples/pdControllerExplicit.py create mode 100644 examples/pybullet/gym/pybullet_examples/pdControllerStable.py create mode 100644 examples/pybullet/gym/pybullet_examples/pointCloudFromCameraImage.py create mode 100644 examples/pybullet/gym/pybullet_examples/profileTiming.py create mode 100644 examples/pybullet/gym/pybullet_examples/projective_texture.py create mode 100644 examples/pybullet/gym/pybullet_examples/rollPitchYaw.py create mode 100644 examples/pybullet/gym/pybullet_examples/satCollision.py create mode 100644 examples/pybullet/gym/pybullet_examples/sceneAabb.py create mode 100644 examples/pybullet/gym/pybullet_examples/signedDistanceField.py create mode 100644 examples/pybullet/gym/pybullet_examples/snake.py create mode 100644 examples/pybullet/gym/pybullet_examples/soccerball.py create mode 100644 examples/pybullet/gym/pybullet_examples/switchConstraintSolver.py create mode 100644 examples/pybullet/gym/pybullet_examples/testrender_egl.py create mode 100644 examples/pybullet/gym/pybullet_examples/testrender_np.py create mode 100644 examples/pybullet/gym/pybullet_examples/transparent.py create mode 100644 examples/pybullet/gym/pybullet_examples/vhacd.py create mode 100644 examples/pybullet/gym/pybullet_examples/video_sync_mp4.py create mode 100644 examples/pybullet/gym/pybullet_examples/vr_kuka_setup.py diff --git a/examples/pybullet/examples/biped2d_pybullet.py b/examples/pybullet/examples/biped2d_pybullet.py index acf7ebeed..7ddf7b976 100644 --- a/examples/pybullet/examples/biped2d_pybullet.py +++ b/examples/pybullet/examples/biped2d_pybullet.py @@ -7,7 +7,6 @@ dt = 1e-3 iters = 2000 import pybullet_data -p.setAdditionalSearchPath(pybullet_data.getDataPath()) physicsClient = p.connect(p.GUI) p.setAdditionalSearchPath(pybullet_data.getDataPath()) p.resetSimulation() diff --git a/examples/pybullet/gym/pybullet_data/TwoJointRobot_w_fixedJoints.urdf b/examples/pybullet/gym/pybullet_data/TwoJointRobot_w_fixedJoints.urdf new file mode 100644 index 000000000..4053835eb --- /dev/null +++ b/examples/pybullet/gym/pybullet_data/TwoJointRobot_w_fixedJoints.urdf @@ -0,0 +1,182 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/pybullet/gym/pybullet_data/TwoJointRobot_wo_fixedJoints.urdf b/examples/pybullet/gym/pybullet_data/TwoJointRobot_wo_fixedJoints.urdf new file mode 100644 index 000000000..bd0dec215 --- /dev/null +++ b/examples/pybullet/gym/pybullet_data/TwoJointRobot_wo_fixedJoints.urdf @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/pybullet/gym/pybullet_data/ball.vtk b/examples/pybullet/gym/pybullet_data/ball.vtk new file mode 100644 index 000000000..a5007a034 --- /dev/null +++ b/examples/pybullet/gym/pybullet_data/ball.vtk @@ -0,0 +1,5681 @@ +# vtk DataFile Version 2.0 +ball_, Created by Gmsh +ASCII +DATASET UNSTRUCTURED_GRID +POINTS 600 double +-0.983023465 -0.0964612812 0.156077221 +-0.983023465 0.0964612812 -0.156077221 +-0.934172392 0.303531051 0.187592313 +-0.934172332 -0.303530991 -0.187592283 +-0.851981342 -0.0839028731 -0.516805649 +-0.851981342 0.0839028731 0.516805649 +-0.851980925 -0.499768227 0.156077191 +-0.851980925 0.499768227 -0.156077191 +-0.850650847 -0.276393682 0.447213203 +-0.850650847 0.276393682 -0.447213203 +-0.738584518 -0.432902843 -0.516805708 +-0.738584518 0.432902843 0.516805708 +-0.73858422 -0.655845523 -0.156077221 +-0.73858422 0.655845523 0.156077221 +-0.639950216 -0.568661451 0.51680553 +-0.639950216 -0.207932755 0.739748478 +-0.639950216 0.207932755 -0.739748478 +-0.639950216 0.568661451 -0.51680553 +-0.577350318 -0.187592313 -0.794654369 +-0.577350318 0.187592313 0.794654369 +-0.57735014 -0.794654608 0.187592268 +-0.57735014 0.794654608 -0.187592268 +-0.525731206 -0.723606944 -0.447213262 +-0.525731206 0.723606944 0.447213262 +-0.395510972 -0.544374168 -0.739748478 +-0.395510972 0.544374168 0.739748478 +-0.395510912 -0.905102789 -0.156077221 +-0.395510912 0.905102789 0.156077221 +-0.356822073 -0.491123736 0.79465431 +-0.356822073 0.491123736 -0.79465431 +-0.343073279 -0.784354985 0.51680547 +-0.343073279 0.784354985 -0.51680547 +-0.343073219 -0.111471429 0.932670832 +-0.343073219 0.111471429 -0.932670832 +-0.2104855876170211 -0.964206637039642 0.1581990558083625 +-0.212030917 -0.291835517 -0.932670832 +-0.212030917 0.291835517 0.932670832 +-0.212030917 0.964718938 -0.156077191 +-0.183480024 -0.836209893 -0.516805649 +-0.183480024 0.836209893 0.516805649 +0 -0.982246935 -0.187592283 +0 -0.894427359 0.447213143 +0 -0.67288357 0.739748418 +0.003206644697647349 -0.6069040358667548 -0.793866965776601 +0 -0.360728621 0.932670832 +0 0 -1 +0 0 1 +0 0.360728621 -0.932670832 +0 0.607062101 0.794654369 +0 0.67288357 -0.739748418 +0 0.894427359 -0.447213143 +0 0.982246935 0.187592283 +0.183480024 -0.836209893 -0.516805649 +0.183480024 0.836209893 0.516805649 +0.212030917 -0.964718938 0.156077191 +0.212030917 -0.291835517 -0.932670832 +0.212030917 0.291835517 0.932670832 +0.212030917 0.964718938 -0.156077191 +0.343073219 -0.111471429 0.932670832 +0.343073219 0.111471429 -0.932670832 +0.343073279 -0.784354985 0.51680547 +0.343073279 0.784354985 -0.51680547 +0.356822073 -0.491123736 0.79465431 +0.356822073 0.491123736 -0.79465431 +0.395510912 -0.905102789 -0.156077221 +0.395510912 0.905102789 0.156077221 +0.395510972 -0.544374168 -0.739748478 +0.395510972 0.544374168 0.739748478 +0.525731206 -0.723606944 -0.447213262 +0.525731206 0.723606944 0.447213262 +0.57735014 -0.794654608 0.187592268 +0.57735014 0.794654608 -0.187592268 +0.577350318 -0.187592313 -0.794654369 +0.577350318 0.187592313 0.794654369 +0.639950216 -0.568661451 0.51680553 +0.639950216 -0.207932755 0.739748478 +0.639950216 0.207932755 -0.739748478 +0.6403071758249252 0.5681663036852607 -0.5166876297130185 +0.73858422 -0.655845523 -0.156077221 +0.73858422 0.655845523 0.156077221 +0.738584518 -0.432902843 -0.516805708 +0.738584518 0.432902843 0.516805708 +0.850650847 -0.276393682 0.447213203 +0.850650847 0.276393682 -0.447213203 +0.851980925 -0.499768227 0.156077191 +0.851980925 0.499768227 -0.156077191 +0.851981342 -0.0839028731 -0.516805649 +0.851981342 0.0839028731 0.516805649 +0.934172332 -0.303530991 -0.187592283 +0.934172332 0.303530991 0.187592283 +0.983023465 -0.0964612812 0.156077221 +0.983023465 0.0964612812 -0.156077221 +0.5711142457352039 -0.02117318796408544 0.5475993502453641 +-0.1834416395507999 0.7396783497444386 0.3181062812107694 +0.2106439939202896 -0.2207277428413223 0.4082221439441702 +-0.0539340503386703 0.1205623207765116 0.4836333150598941 +0.2628914088751474 0.7773567891547469 0.09515773339548624 +0.03625912260493044 0.1154490571841422 0.01428072891263531 +0.04533024469518119 0.01305404249175379 0.830501261727119 +0.1985279596222446 0.1026376486066588 0.4134011017099528 +0.2142576018926516 0.2515904542794398 0.6479455601266221 +0.03591460286896146 0.4648677758371071 -0.6570336955526989 +0.5671390851245302 0.5015167065943134 -0.1302515747102941 +-0.4336614400972409 0.6553851050556312 0.01835453816623948 +-0.7093788513188323 0.02333083593137917 0.4009020437778424 +0.3304153126852112 0.3344430393663131 0.4341447817148135 +0.2835700190185853 -0.1109561501157584 -0.03835100901018595 +0.3384894052038657 0.5443598947507846 -0.4660342040261232 +-0.5534428405667881 0.233243177347242 0.4775208239879267 +0.3754426255119463 0.1029385152098835 -0.6464035637317401 +0.4981870246588242 0.6568525523351662 0.03962368739938198 +-0.3224051846001322 0.4144807316899718 0.1313140478558114 +-0.6478232497017437 -0.3106068971239328 0.01838391805257134 +-0.6576204209938942 -0.2352120512243483 0.431309676011668 +-0.05520070934685202 0.3843844699857725 0.5403667230515509 +-0.7319644942494914 -0.1507752387397017 0.1790669502670221 +-0.6189952662241086 0.01441484356622188 -0.4292031591776315 +-0.6262186005325446 -0.1021573130552927 -0.08428654763266503 +-0.6149963655872288 0.1445403524573829 -0.1438974409017034 +-0.7148900485634544 0.2730783119567216 -0.3026754607577274 +-0.7649453896417203 0.2504548103851916 0.09555797780578199 +-0.3715645582539543 0.1330924452813407 0.3239746822760231 +-0.6615658498360117 0.4804724661556226 -0.1782035107984122 +-0.6505392321170821 0.4100942048988089 0.3356868961443531 +0.336318519474418 0.64955921672115 0.141676610967413 +-0.2373043190629461 0.3628706261497389 -0.7212426055441383 +-0.4720367219822728 -0.2703656731060821 -0.4799947601815256 +-0.4838010172770574 -0.4084105827317038 0.02536967576873089 +-0.4820695438460503 -0.3369545734327805 0.2368150044206616 +-0.05526386895500314 -0.6265972416112141 0.5202839866714712 +-0.4578607499769821 -0.1491368316814568 -0.2444009752709367 +-0.4725026890114479 -0.2375671541793563 -0.06095126386351808 +-0.5195546414777057 -0.1755190582509266 0.1209235603722047 +-0.5124729844160486 -0.1633519413558985 0.3519691378163123 +-0.4528539662618702 -0.01654279695323081 -0.5802020170398763 +-0.4008637964178123 0.03833967835098375 -0.2780189568137055 +-0.4045298128199117 0.002479879083573726 -0.006952714925801346 +-0.5016139410945001 0.005830520154651217 0.2427433809520513 +-0.08387994752248742 0.6831638754551344 -0.5090009524768978 +0.09979297173020235 0.6214399756317296 -0.5394454270132362 +-0.5114964260553124 0.2451501439357156 -0.3032535448403038 +-0.5084862441056747 0.2942826463714892 -0.0130907342464313 +-0.5126741910570937 0.2936280836507524 0.1874216510559829 +-0.4823199432566514 0.4941810202203625 -0.3367534291859899 +-0.3772934083386824 -0.5828600711068156 0.05591038990918762 +0.31959038478937 0.6140451281085459 0.4487754251285493 +-0.479509208666884 0.08909312439915772 0.6399726514442271 +-0.5987352168435675 0.484251969256761 0.6021395588401608 +0.5668924718157011 -0.4886889568034963 -0.6283779956613038 +0.639950216 -0.388297103 0.628277004 +0.7459657790000001 -0.06201494095 0.6282770635 +0.7592375082896597 0.03835589427941914 -0.6142001436623598 +-0.289495498 -0.6902920305 -0.6282770635 +-0.289495498 0.6902920305 0.6282770635 +0.2890391134520873 0.6930274692624179 0.6252725821525187 +-0.1954342843662734 -0.7343660690537938 0.6146913268860001 +-0.9175452116087988 0.2925245629145609 -0.1630626342597246 +0.917502195 0.2981147541 -0.156077206 +0 -0.291835517 -0.932670832 +-0.005512644538268026 0.2950789991623015 0.9312507298938767 +0.004756329446631069 0.9636913804870406 -0.1603331621849719 +0.1796931993833944 0.2270906263641855 -0.9332463212503043 +0.2839543240347723 0.8721681798631183 0.3355386774168226 +-0.289495468 -0.870656341 -0.336441435 +-0.2824861689252822 0.8686566398371635 0.3475001356528549 +-0.9088421251404275 -0.001564412629376344 -0.3594565782347531 +-0.9203312242053348 -0.003164966157839524 0.3264860119713744 +-0.09774266951051733 0.5555167174787097 0.05788528891157628 +-0.7959907918282177 -0.08211319339975402 -0.2053910711192425 +0.03999856928576947 -0.7162839095211453 0.3099013009429171 +-0.202249908345953 -0.5058539092504294 0.1161823685420006 +-0.3148245980164619 -0.486917647454533 0.3203107592281709 +-0.2982953732069865 -0.5180797069493416 0.5498719423954977 +-0.3594062555305886 -0.3476011575009336 -0.6363012624107233 +-0.4028820318916886 -0.3603563062649521 -0.3178933311462525 +-0.3832569634790784 -0.3515629954201686 -0.1608643060189855 +-0.4216489709933123 -0.3683521042712592 0.5299835001681149 +-0.3195340547884118 -0.140458944668357 -0.6767753179600076 +-0.2872190492198003 -0.173107228026045 -0.1073851967440021 +-0.3380772476234242 -0.2306023291143007 0.1015223234543294 +-0.2354645404631943 -0.01847107181770858 -0.3779481679535365 +-0.2339023084221015 -0.01296643920890605 -0.1988671494631802 +-0.4987959292068802 0.5466275984665788 0.3553392545012639 +-0.2993944553011925 0.1160085292182497 -0.5451195709408356 +-0.3180663905624121 0.1816410244317394 -0.3429709835741863 +-0.2984496076861362 0.1731311801956928 -0.1197266002465337 +0.4687659597810016 -0.2609182020629837 0.6456947938158271 +-0.4055380501868786 0.3360296110081572 -0.1690284861777329 +-0.3933493850310362 0.3799269361927073 0.4612899972994972 +-0.6111316600192891 0.5629118916990601 0.2058136799792555 +-0.1835444972768308 -0.2503244747191174 0.6894847407095083 +-0.3286465144478981 0.5109703139291987 -0.4955986563887662 +-0.004524729044751769 0.5061287162879585 -0.4068364833826668 +-0.2086130206014155 0.6253776096440031 0.1785871149235653 +0.07445582966821258 0.7328882912340795 0.1563893347189518 +-0.2415260834301355 0.6855613573510219 -0.1635365387199929 +-0.1928500407563954 -0.7485795663723692 -0.08958998919100135 +-0.2440533359827937 -0.761435917282856 0.1477089760778446 +-0.1323263255053054 -0.4702260860235108 -0.4985941389931162 +-0.22737749859913 0.4085551242737154 -0.1336398432333173 +-0.2222732982258658 -0.2445988685511035 -0.4900209146071922 +-0.1866052001617161 -0.3328028942391639 -0.3051094150744377 +-0.2137502620263282 -0.3303845535191539 -0.03786939554681432 +-0.1395435470476703 -0.1430048503387833 -0.7860101332846771 +-0.1661517739966091 -0.2049543828386332 -0.6361077629093909 +-0.1017630055389408 -0.1670464911194232 -0.3764157164282813 +-0.1109262933335437 -0.1818459499504256 -0.175842010364428 +-0.2161513648114311 -0.1313699938541844 0.1374374024081151 +-0.7811637926694741 0.03047292067867113 -0.02077792430430652 +-0.1418259415916119 -0.02690292354447475 -0.5424026029815623 +-0.1662287378662191 0.1595605701931951 -0.4695541301881394 +-0.1728767079413297 0.1908071514581589 0.0615239831543104 +-0.1248750586000535 0.3373311231905142 -0.5554664407645996 +-0.14774927995634 0.3063479780977638 -0.2971590655764376 +0.317116356473119 0.2636782785377943 -0.517452462149712 +-0.2394625555723072 0.2531091923781731 0.6835180344331175 +-0.1679730860372385 0.6368995083228546 -0.3448914412206089 +-0.1837756206218147 0.8016555747753288 0.001376073021788904 +0.3451586896859973 0.4434648907403473 0.5896671438737594 +0.003912050757982196 -0.6827793661450405 -0.2655034195677201 +0.05117827517194013 -0.4435365454492594 -0.6820128265394876 +-0.193753047436954 0.4669909734707379 0.3562881914225061 +-0.09133017258798415 -0.3710555026643473 0.2211949880926304 +-0.03705517642456098 -0.3967684449657486 0.5575378871330299 +0.004882513238944297 -0.09563858312228475 0.4646605164348893 +-0.06034179915165584 -0.2072440902334313 0.8115716909884921 +-0.01502779929022804 -0.1349339192206479 -0.5198216229754721 +-0.06170726596266114 -0.03300790193827988 -0.3521591664732798 +-0.04024251802528552 0.005316680619917384 -0.1720644173805807 +-0.05170363143209005 0.1443521662120487 -0.3084341261872872 +-0.01322903563459284 0.2892392261133912 -0.1423042447860729 +-0.006197885268519417 0.7257559254287651 -0.117604568649597 +0.00766263881206371 0.6713927509871588 0.3773690346367958 +-0.2765102001377094 -0.1450045556428195 0.3700566231624965 +0.2934780115174567 -0.2895974752147772 -0.6869405692235921 +-0.0646204301881949 0.7678706524307314 -0.322313732124793 +0.1983578642321666 -0.6692184654722374 -0.3806422137534514 +0.1896536071268709 -0.7783794014092489 -0.1543701154216221 +0.04814811832475203 -0.306957222624095 -0.3920233494555808 +0.130872993428573 -0.2614789390432524 -0.224930457969755 +0.05389397376507032 -0.2123135609868312 -0.0456044035096165 +0.1511164622406309 -0.1940120025982684 -0.5486948695672719 +0.08753891237885909 -0.1517419059418617 0.2085053703494517 +0.1573315106118656 -0.2063105176207875 0.7159593163722718 +0.1550574248229858 0.04460639168602056 -0.1632815974459763 +-0.09138953766989316 -0.4558122872772558 -0.2134181647417048 +0.2200403617095288 0.07018008050263533 0.1855545431154388 +0.1745720918276096 0.2964164757364657 -0.6869932450671804 +0.1552374192338686 0.2846877060298754 -0.2720285722263412 +0.5793485990688858 -0.4281363848214862 0.159228937020492 +0.1842995827528208 0.380858358573093 0.2335724355465266 +0.4560445866155982 0.1596898570065349 0.5987060162239723 +0.1897142363072325 0.6801377880530463 -0.1902732043843415 +0.1901803121038665 0.8420330977104334 -0.01077757151453724 +0.3735835590265989 -0.533816093193585 -0.3508145004491201 +-0.2333532313517916 0.1770127404954969 0.4648197664473095 +0.4181266969831226 -0.6618380482497811 0.1445372622865072 +0.3540133290923644 -0.6599343730878077 0.3758436212261005 +0.3333915829314644 -0.515513798024383 -0.5694349617782053 +0.2972094522201416 -0.5540869081361335 -0.1452966914102986 +0.2485136095544038 -0.6516874642731798 0.03570321982604948 +0.4160373989187208 -0.4753541308402521 0.3172453979902219 +0.2504742106226169 -0.3318321328184352 -0.4555861371925892 +0.3482752365168776 -0.3103663015204521 0.5103815503896095 +0.363152181432955 -0.09509648738396842 -0.3986768381978469 +-0.06840482657418301 0.05308915763389212 -0.8176348399056567 +0.7133486872755079 -0.1421207717732033 -0.6548609400718425 +0.7136162202406232 0.139291053558023 0.6556126973517143 +-0.7106270713040959 -0.1410901777337968 -0.6583856211814568 +-0.7240001684667472 0.1373968881268417 0.6443478150910714 +0.657967418 -0.310247578 -0.6557300385 +0.657967418 0.310247578 0.6557300385 +0.3779418925513292 -0.01593005867563534 -0.167519838453102 +-0.6392793337542173 0.2794427660700018 0.688823162263437 +-0.5065672941465678 0.5379795210271793 -0.6419662140897575 +0.4983861445 0.5298925935 -0.65572992 +0.2932328291895358 -0.06287549989074649 0.5654605252776161 +0.349947676 0.6377393605 -0.6557298899999999 +0.3106772736351038 0.1522421239459671 -0.2847040964404556 +0.3619016076579907 0.1233667417260152 -0.0445398112121507 +0.3684048064067006 0.2305894720953906 0.2839597151092496 +-0.3487589772923571 0.638136180858714 -0.6557480128856027 +-0.4871324826293567 0.3638301270017998 0.7677279552997338 +-0.9585979285 0.1035348849 0.171834767 +0.608650267 0.01017022099999999 -0.7672014235 +0.608650267 -0.01017022099999999 0.7672014235 +-0.6024376177446233 -0.003711788266030136 0.7714069934328189 +-0.6042447734847533 0.006687585073746893 -0.7701420626251527 +0.3849066454986819 0.3232513751465138 -0.3587201583300489 +0.349947646 -0.3012975825 0.863662571 +0.3483476961081615 0.3176425081266358 -0.8582847161038692 +-0.349947646 -0.3012975825 0.863662571 +-0.349947646 0.3012975825 -0.863662571 +-0.3946906175 -0.239713915 -0.8636626005 +-0.09671645922550712 -0.455556329131489 -0.8609885293111011 +-0.1060154585 0.449448809 0.8636626005 +0.1060154585 -0.449448809 -0.8636626005 +0.2912864408393545 0.4360741369068572 0.03666708387193633 +0.1060154585 0.449448809 0.8636626005 +0.9585978985000001 -0.1035348549 -0.171834752 +0.1784110365 -0.4259261785 0.863662571 +0.1784110365 0.4259261785 -0.863662571 +-0.1784110365 -0.4259261785 0.863662571 +-0.1784110365 0.4259261785 -0.863662571 +0.4485607805444057 0.0274412363049529 0.8699508680135298 +0.4602117685 -0.03806044200000001 -0.8636626005 +0.197755486 -0.5757181345 -0.7672014235 +0.1875170285645086 0.572125542956834 0.7717238126591888 +-0.197755486 -0.5757181345 -0.7672014235 +-0.197755486 0.5757181345 0.7672014235 +-0.4983861445 -0.3495282455 0.767201394 +0.500733827029852 -0.3429494372899287 0.76820165259275 +0.4984777918937785 0.3440639152388975 -0.7690320795564272 +-0.4983861445 0.3495282455 -0.767201394 +-0.893076867 0.19371696205 0.352198981 +0.893076837 0.19371693205 0.352198966 +-0.893076837 -0.19371693205 -0.352198966 +0.197755456 -0.9436748619999999 -0.171834752 +0.197755456 0.9436748619999999 0.171834752 +-0.1821617266157461 -0.9467164087685083 -0.1730772900272592 +-0.197755456 0.9436748619999999 0.171834752 +0.1784110365 -0.582003653 0.7672013639999999 +0.2040914871099653 0.5689224150578829 -0.7711529358179858 +-0.1784110365 -0.582003653 0.7672013639999999 +-0.1706458392315522 0.5873889545945985 -0.7646290951570205 +-0.7146655325 -0.6472114175 0.1718347295 +-0.3946905285 -0.879686773 0.1718347295 +-0.3826992263243234 0.885549985338254 -0.1672278852813028 +0.4151318255287663 -0.8705468821272369 0.1688179381681522 +0.3816176964913821 0.8846414226634638 -0.1740180681064438 +-0.091740012 -0.909228414 -0.352198966 +-0.091740012 0.909228414 0.352198966 +0.091740012 -0.909228414 -0.352198966 +0.1089846745012238 0.8993400783200778 0.3711736160872028 +0.6605850764739363 0.7218724255144597 -0.02082643400756409 +0.6051372878400938 -0.6836471993845313 0.3532258537403473 +0.4583870346619611 -0.4209981570445642 -0.1711038550931559 +0.408350076952553 -0.5098359751664326 0.01900175426181287 +0.608650178 0.6816580295 -0.352198899 +-0.608650178 -0.6816580295 0.352198899 +0.45648501097621 -0.3834349647647116 -0.5239930356657895 +-0.1042226204554116 0.9733574426023197 0.01329700120380936 +0.1060154585 -0.9734829365 -0.015757546 +-0.4932432547533117 -0.8454431013474896 0.02391297713720811 +0.541956875235316 -0.3767605104076648 0.4856263302575095 +-0.486430526 0.8498786985 -0.01575752350000001 +0.486430526 0.8498786985 -0.01575752350000001 +0.48061420171132 -0.2281208781151917 -0.2153453641230161 +0.4284248677084959 -0.1138731139101116 0.2768188947161023 +0.4891608441455692 0.04285741068612015 -0.2392536176845577 +0.5028450662469833 0.1744824366837791 -0.3552556460455714 +0.4918009675321204 0.1992321909831743 0.03932374300364145 +0.4173683137353702 0.1629270449975743 0.1505109990808487 +0.5887669952330052 0.2351015203098686 -0.5092344915592217 +0.4725694558703502 0.3409692333818932 -0.2300329801651423 +0.5014632353682689 0.330522856036409 0.5277466676480008 +0.5887046726367641 0.4133518205028979 -0.3564640791626207 +0.5031963258450896 0.4082414396977185 0.1108730627916911 +0.2436600679212088 0.1449343977100464 -0.8027510085861623 +0.2661692629564029 -0.4161860961116939 0.6778322933520385 +0.5389336922228024 0.1297001439188301 -0.6793540746793117 +0.6190312172756546 -0.4853355389423176 -0.03823594414065377 +0.6213611290860127 -0.3654585732207788 -0.347839611365611 +0.670070540631135 -0.3304850044928141 0.3075176279985078 +-0.6312346450457121 -0.4270283138376362 -0.1407213056076125 +0.6730006361713489 -0.2300717412324852 -0.04015617222070676 +0.6324119311658877 -0.1685265550881164 0.47278684240569 +0.6718515317701345 -0.05261279391738263 -0.3476589343402736 +0.6546114519167675 0.01675368673195545 -0.08995678553058238 +0.5666475744692999 0.01576403308009006 0.1090301993966335 +0.7263519144247657 0.2057950395874256 -0.2835024210938008 +0.6292624093999444 0.1466102513984335 0.3296682045884995 +0.6539040382194233 0.4373423551522446 0.2973447396401895 +-0.7643904657784308 -0.3270157704006694 0.1507235781129556 +-0.3983099956439372 0.6820166389351584 0.1935158435411442 +0.1454606949276961 0.3560515065805233 0.4574558148114424 +-0.01767048188895652 0.3492544118967844 0.06334264290988761 +0.7646550963318656 -0.06248067496257166 0.1786710643635689 +0.7930174579354851 0.1693865451645832 0.003272865232918417 +0.01099307050411781 0.02194760905610892 0.6477401853065817 +-0.1771759356058517 0.03015440844192887 0.2473680276008317 +-0.5356149458936418 -0.00801003630796797 0.4864425417428122 +0.1872786676121908 0.2172773256198141 0.03050623571169319 +-0.3987986696634189 -0.4946354289051259 -0.4439894573386592 +-0.5888927087817538 0.4747743064772978 0.04104831404680311 +-0.4694703441665588 0.5798300713339117 -0.1603835011744431 +-0.8294116489724226 0.4943369061879145 0.1673151208721621 +-0.8285092954478688 -0.4943369061879149 -0.167315120872162 +0.08601788431546994 -0.4744118786476427 -0.4369039278327513 +0.4268144290850234 -0.7056612795120653 -0.09119225644388079 +-0.235911498660543 0.2496733507810339 0.2926911520456563 +0.04659252556510694 -0.5220086048051136 -0.03190513921165003 +-0.7464064032657043 -0.5811252752524934 -0.255439270284655 +-0.7257250063463581 -0.5604577921412572 -0.3346302417443242 +-0.746406405436403 0.5811252774217315 0.2554392724872807 +-0.7257250063463581 0.560457792141257 0.3346302417443243 +-0.005212278065876854 0.1920171302444726 0.2672071089672988 +0.01121553754032911 0.4522189791379762 0.2930005482030935 +0.2839230991990829 0.4622075315499078 -0.3082127476279448 +-0.4946697047593434 -0.3557726340191656 -0.7662271305074406 +-0.7138890554715793 0.6476333650493602 -0.1727963078701259 +0.5625564905082746 0.01892208994219046 -0.5555981537279906 +-0.09297651214053022 -0.0615660465312691 0.01339996495471615 +-0.8038254879010522 -0.01152003924077081 0.1729691168589109 +-0.2579234662149842 -0.5521401609060735 -0.2660064486766345 +0.7006944775450153 0.3370390934389887 -0.1608815100660374 +0.7914465127578063 -0.2741122939862151 -0.5140873673583262 +0.7888851699703932 0.2780931631132194 0.5168056818287339 +-0.7952829299999999 0.25840285805 0.5168056785 +0.4915117175 -0.159702092 0.836209655 +0.4915117175 0.159702092 -0.836209655 +-0.320482407164663 -0.4333159822567259 -0.8217963374496685 +0.3037709445 0.4181048425 0.836209655 +-0.01265687939189167 0.8375532314178935 0.5137773422349819 +-0.4952171247940293 0.6753533752031967 -0.5140018615193953 +-0.9824696345558724 -0.01113430460937868 0.01032097863238671 +0.983023465 0 0 +0.2984464834261905 -0.9359684011346607 -0.0001635690412845059 +-0.3037709145 -0.9349108635 -1.499999999210466e-08 +-0.3037709145 0.9349108635 1.499999999210466e-08 +-0.7952825725 -0.5778068750000001 -1.499999999210466e-08 +-0.273800906277004 -0.8767913403461751 0.3346302417443243 +-0.4754992136879836 0.6456701396731745 0.5683147406859165 +0.4713001299770969 -0.6411723922906573 -0.5765449053642733 +0.7424826560371693 -0.237850575465973 0.5980659213001208 +0.00551055714916493 -0.7645400515392027 0.6175047879190813 +0.632157862 -0.5782548935 -0.482009485 +0.632157862 0.5782548935 0.482009485 +-0.632157862 -0.5782548935 -0.482009485 +-0.273800906277004 0.8767913403461751 -0.3346302417443242 +-0.6443169789210386 0.5642532597966963 0.4817704764478887 +-0.8529292054160453 0.09169119062812325 -0.478939318374926 +0.852032273325431 -0.08033786692739198 0.4834552999970668 +0.8513160945 0.09624540444999999 -0.482009426 +-0.8513160945 -0.09624540444999999 0.482009426 +-0.3515619224043152 0.7829670991881906 0.4779156773553317 +0.354605615 0.7799084185 0.4820094555 +-0.1648899015864478 -0.2546360153139223 0.9278156620360043 +0 -0.1803643105 0.9663354159999999 +-0.916837156 -0.1864274816 0.301645212 +0.916837156 0.1864274816 -0.301645212 +-0.1715366095 0.0557357145 -0.9663354159999999 +0.1715366095 -0.0557357145 0.9663354159999999 +-0.1648899015864478 0.2546360153139221 -0.9278156620360043 +0.7453005315000001 -0.4225275665 0.4820093665 +-0.7453005315000001 0.4225275665 -0.4820093665 +0.7453005315000001 0.4225275665 -0.4820093665 +-0.1060154585 -0.1459177585 -0.9663354159999999 +-0.1173073419684945 0.157376424596409 0.9630408543723834 +0.109959547888504 -0.1576493649126376 -0.9636288252903217 +0.118687913334654 0.1555536665238542 0.9628678827087409 +0.1715366395 0.839391172 -0.4820093065 +-0.1715366395 0.839391172 -0.4820093065 +-0.460621059 -0.8143548665 -0.3016452415 +0.460621059 0.8143548665 0.3016452415 +0.632157713 0.6897262335000001 0.3016452415 +-0.632157713 0.6897262335000001 0.3016452415 +-0.1060154585 -0.9295731485000001 0.301645167 +-0.1060154585 0.9295731485000001 -0.301645167 +0.8513158860000001 0.3880809545 -0.301645197 +-0.8513158860000001 -0.3880809545 0.301645197 +-0.470377170221815 0.3308692980874088 -0.5346461516515045 +-0.1378971466884762 -0.05872417041574372 0.8245819610452255 +-0.6636097440568927 -0.4820470659935153 0.1441924221159884 +-0.09924075389872836 -0.2639529564994283 0.9372760024704234 +0.3428052246626204 0.3101314782608706 -0.7114897127700051 +-0.09924075389872844 0.2639529564994281 -0.9372760024704236 +0.2497212303585584 0.4759065639172987 -0.634785469991164 +-0.5018582142373347 0.7913357212282524 -0.2936758927309688 +-0.1836056077381358 -0.6567713801098206 -0.4817652775425123 +-0.2470453184003564 0.6526313165075527 -0.5021591169140639 +0.1776571780252803 0.5609861185411928 0.3505695105209232 +-0.06475380565392276 0.6107809085531266 0.5638166510217938 +0.2735253005670124 -0.8762404997642916 0.3346302417443243 +0.2708187524123817 0.8746241813427392 -0.3400836120249706 +0.6171031044747036 0.2521419060127235 0.1499066624088571 +0.4764939378534095 0.4593821606547799 0.3433921458186807 +0.7257250063463581 -0.5604577921412572 -0.3346302417443242 +0.7257250063463581 0.560457792141257 0.3346302417443243 +0.7001310961221709 -0.6616508216673254 0.1759751935031104 +-0.4840866932637082 -0.6121700368985139 -0.1501069607555149 +0.489348674378097 -0.3619183235336728 -0.7671171736051364 +0.1440253661317507 0.3895705948950923 -0.5116461636673226 +0.4946697047593433 0.3557726340191655 0.7662271305074408 +0.7464064032657043 -0.5811252752524936 -0.2554392702846551 +0.8285092954478688 -0.4943369061879149 -0.167315120872162 +0.7464064032657043 0.5811252752524934 0.2554392702846552 +0.829411599676636 0.4943369061879145 0.1673151208721621 +-0.3526508796440742 0.6262207041656306 -0.3288568676190132 +-0.0310745620977699 0.4969617889406759 -0.1761210085106677 +0.9074384118554124 -0.2394964387055004 -0.2895170798756234 +0.9174609659449906 -5.551115123125783e-17 0.3346302417443243 +-0.9411115744202567 -0.1064871788113919 -0.2265040935376754 +0.2076585869786285 -0.6593725678856036 0.2099765396705036 +-0.9248774506368126 -0.2767315414789368 0.1481069821184871 +-0.9608377633517635 -0.1905018186427999 -5.551115123125783e-17 +-0.9598400361758898 0.1938991361849407 0.001978364046988118 +-0.9009246315621086 0.3824345339992005 0.04567887866379172 +-0.8941131900717569 -0.3991747520142159 -0.02009175298266276 +-0.8468161346461875 -0.3613128783487702 -0.3346302417443242 +-0.764674133349585 0.03626511617036607 -0.6086059259490402 +-0.7488125245903672 -0.05809673420800637 0.6252838165775659 +-0.7470301189491562 -0.533868944883471 0.3346302417443243 +-0.7470301189491562 0.533868944883471 -0.3346302417443242 +-0.8001267099090277 0.5711394866640385 -0.01333475398259278 +-0.7371909513941939 -0.5034384621332837 -0.4053005277811758 +-0.6706594551458225 -0.32955793745861 -0.6338583417611625 +-0.8309969453659541 0.3731133554126599 0.3590941679249 +-0.7404349180221135 0.5072093490563344 0.391480111932217 +-0.657984249270295 -0.7252353702830132 0.01572114045120625 +0.1716397495004564 -0.520493295642469 0.4114520704611611 +-0.5633540339641707 -0.7831576632145403 -0.156077221 +-0.657984249270295 0.7252353702830132 -0.01572114045120619 +-0.5954559207000718 0.759834284989988 0.156077221 +-0.4946697047593434 -0.6742138297313394 0.5168055006382355 +-0.639950216 0.4085518317838012 -0.6157588733492543 +-0.5998918291693639 0.6967399145036977 -0.336298137399878 +-0.5237505581750362 -0.502706610838997 -0.6564133188224507 +0.01571896257416014 -0.6311969310402367 -0.506967405792985 +-0.3668821572994054 0.5028341068058905 -0.03428236487469615 +-0.2791390631868537 0.09909319471286901 0.9308043434985912 +-0.2737977646360331 -0.1017366076864576 -0.932670832 +-5.551115123125783e-17 -0.964718938 0.156077191 +-0.1241942773737781 -0.762168056508469 -0.606583644747047 +-0.0100337821037552 0.2805783147871246 -0.785522469281193 +0.1648899015864477 -0.7264596185416647 0.6325962642028151 +0.2395466931977362 -0.3847973404532145 0.1987252323797588 +0.1527941100557161 -0.2485787627082534 0.932883326713121 +-0.5150830027579768 -0.225458908235314 -0.6414400992740774 +-0.1648899015864478 0.7264596185416647 -0.6325962642028151 +0.1648899015864477 0.7264596185416647 -0.6325962642028151 +0.1120997896845222 0.9729512646430574 0.005333115449487641 +0.2905600608752268 -0.8710022476126034 -0.3346302417443242 +0.2733518164848321 0.08333433799291456 0.9340806351506195 +-0.2186876832761552 0.1355551725632875 -0.7514080414631757 +0.5883533537861093 0.7646147491588572 0.1573500293575232 +0.657984249270295 -0.7252353702830132 0.01572114045120628 +-0.283151721891854 -0.2697271334462735 -0.7677817901486564 +0.3923587771881114 0.643044977255366 -0.2358683228539508 +-0.4406098886950756 -0.6391326817605969 0.3190304651144633 +0.639950216 0.4085518317838012 -0.6157588733492545 +0.7429325497058085 -0.5022358480759658 -0.3926503031839971 +0.8149411764884267 -0.3823966170795073 -0.3882821740004315 +0.7385844337468173 0.4959351597049497 0.414817375227283 +0.8893080805939757 -0.4106472579246842 -5.551115123125783e-17 +0.7397023528267623 -0.5327068054158335 0.3516701384263012 +0.9049514139222521 -0.3367420363845999 0.1560772031267084 +0.7453150012885376 0.5372878022233248 -0.331485378105409 +0.8468161346461875 0.3613128783487702 0.3346302417443243 +0.9574021488411723 0.2026759276143504 0.00969656983529274 +0.8941131900717569 0.3991747520142158 0.02009175298266304 +-0.957709450127873 -0.1150537272727258 -0.1655405539330506 +-0.4845984888036726 -0.5261166943379729 0.6692604834886484 +-0.3506172103503078 -0.6234596794029414 0.6692604834886484 +-0.4753746993073021 0.7937918318749986 0.3346302417443243 +-0.4840505109308432 -0.7014906573711918 0.1445905231917857 +0.2707633919962071 -0.7081297721928731 -0.6163457072825573 +0.2720567874572617 -0.1070947872842641 -0.932670832 +0.4606355048509909 -0.8086249801719713 -0.3147570083320652 +0.3506172103503078 -0.6234596794029414 0.6692604834886484 +0.4096770803439219 -0.761789534681282 -0.4708113795533366 +-0.5608864967343244 -0.5002524898810411 0.2796298810577725 +0.6115251132961432 0.5648777306174195 0.1603831698017203 +0.3112910443022733 0.005653668058812759 0.7497519303946486 +-0.326223368851062 -0.090716640529712 0.6409736602035725 +0.5603757281700371 -0.5518103791561476 -0.2623215125048247 +0.110531317716949 -0.06212769157402307 -0.7090846736271308 +0.7066528525432456 0.3857452961775781 0.06466039034313326 +-0.2870284024040223 0.3993456525073666 -0.3603438608047557 +0.4073544778967688 -0.316613713703684 0.004045726126147522 +-0.7885700713375572 -0.2499228280367138 -0.07471496532949348 +0.4402160867874776 -0.1218990893552541 -0.6831289812200559 +0.6646971797773117 0.2583486777982067 0.4739581945577929 +0.2738513407524434 0.3723478719915778 -0.1410164250591326 +-0.6097271098386507 0.05789107466758828 0.07196260058945804 +0.6233549523511848 0.4703431892808756 0.5916864408666598 +-0.2252612501639656 -0.6585131146906121 0.3735728487626422 +-0.1952039515635032 -0.4206871829507813 -0.675228105140974 +0.1112955484387936 0.5127300343494182 0.6032043578325359 +0.4251068484948444 -0.2312900141676994 -0.8520679447903731 +0.4535650605864477 0.2229142033935338 0.8414200303719319 +0.4482113831635415 -0.5098491617575793 0.7088642783123628 +0.06209713868688906 -0.6846150787542344 -0.7006190068735234 +0.0375335915419611 0.2478879406402632 0.7891168376389351 +0.9674071119541455 0.03415884376465241 0.161696170936081 +-0.6465554288694874 -0.2733596096316241 -0.3223698881350392 +-0.6342918131897257 -0.5058841359687427 -0.2738551387910891 +-0.346614458255896 0.6520192716236507 0.3646333695986975 +0.04578829671120705 -0.1403897385186038 -0.2562642746637507 +0.2476581831353243 -0.3872670587268629 -0.2083650025354314 +-0.3003935458321194 -0.1749983686001565 -0.3188893171939637 +-0.727709338623766 0.1540042504308398 0.2424727027908384 +0.1159640558706719 -0.07081091511933212 -0.4108053950654383 +0.5452822968143677 0.2416746102773027 -0.1075963602108601 +0.003220736745420392 -0.2941661607341402 -0.6318213160745906 +0.02250441915388015 0.1375631176366774 -0.5374998591515358 +-0.6090663507680694 0.3444698098995285 -0.1186274894911475 +0.2198027106802337 -0.3850323513976263 -0.003955119313183036 +-0.2539815602932239 -0.1830537221569612 0.9302432470180022 +-0.2539815602932239 0.1830537221569611 -0.9302432470180022 + +CELLS 2536 12680 +4 386 189 123 142 +4 231 167 297 194 +4 221 114 215 255 +4 232 397 194 471 +4 371 315 377 89 +4 233 380 255 95 +4 297 124 252 194 +4 179 136 137 207 +4 202 391 240 222 +4 0 494 495 115 +4 176 223 233 190 +4 0 115 495 403 +4 212 192 595 482 +4 0 415 403 495 +4 367 440 370 368 +4 106 279 348 369 +4 90 377 299 88 +4 489 297 573 252 +4 125 281 191 324 +4 112 131 585 117 +4 268 585 10 506 +4 251 285 563 92 +4 87 491 432 371 +4 216 192 235 231 +4 373 494 115 570 +4 371 369 378 377 +4 139 49 530 101 +4 576 539 197 326 +4 472 39 232 93 +4 22 383 453 163 +4 9 156 119 7 +4 337 249 361 569 +4 186 276 263 243 +4 532 332 237 236 +4 525 60 41 169 +4 69 67 218 427 +4 265 595 534 203 +4 269 381 104 108 +4 3 498 387 570 +4 3 570 499 168 +4 581 344 559 263 +4 168 499 585 570 +4 337 249 526 261 +4 578 218 100 375 +4 402 240 244 106 +4 211 228 229 97 +4 415 208 120 591 +4 218 427 575 476 +4 129 323 172 553 +4 569 526 348 242 +4 50 235 192 252 +4 505 10 585 428 +4 469 518 332 38 +4 436 162 145 53 +4 484 542 541 362 +4 368 440 378 91 +4 309 295 472 48 +4 570 387 499 364 +4 206 239 240 391 +4 267 271 251 73 +4 89 567 475 548 +4 5 166 314 104 +4 5 104 434 166 +4 201 200 238 388 +4 329 124 96 252 +4 205 226 592 238 +4 10 126 383 517 +4 17 414 191 274 +4 75 150 366 92 +4 328 70 64 389 +4 197 539 144 555 +4 111 121 390 188 +4 9 1 168 119 +4 532 236 237 259 +4 504 497 122 384 +4 9 168 1 165 +4 11 108 123 147 +4 151 86 401 266 +4 220 262 388 306 +4 85 334 562 79 +4 437 225 190 598 +4 36 282 215 19 +4 22 24 428 383 +4 23 587 422 182 +4 208 115 570 117 +4 242 597 106 569 +4 27 217 374 345 +4 27 374 320 164 +4 315 584 377 89 +4 377 584 378 89 +4 520 215 98 462 +4 32 46 462 520 +4 564 121 255 233 +4 33 134 177 534 +4 34 196 197 522 +4 34 457 522 197 +4 270 266 264 367 +4 537 204 577 203 +4 153 472 221 93 +4 36 520 215 583 +4 36 295 583 215 +4 86 367 401 266 +4 86 367 433 401 +4 98 379 225 462 +4 360 76 284 410 +4 360 410 284 305 +4 162 65 96 318 +4 194 162 96 318 +4 234 270 72 571 +4 234 270 571 264 +4 111 193 587 221 +4 201 174 175 590 +4 86 367 266 406 +4 333 194 51 318 +4 437 225 302 190 +4 437 225 44 302 +4 56 412 580 583 +4 57 231 252 253 +4 57 329 253 252 +4 58 563 409 243 +4 97 230 382 244 +4 234 579 571 72 +4 401 571 305 284 +4 56 580 533 583 +4 68 560 565 423 +4 68 426 423 565 +4 67 427 575 218 +4 51 93 320 217 +4 196 319 418 26 +4 454 110 562 124 +4 454 455 562 535 +4 454 455 476 562 +4 125 461 212 191 +4 324 125 212 191 +4 57 50 451 252 +4 252 474 451 57 +4 422 182 587 221 +4 80 148 362 270 +4 571 284 72 305 +4 401 266 571 284 +4 57 235 50 252 +4 88 362 485 365 +4 65 96 253 329 +4 377 88 546 365 +4 90 88 546 377 +4 280 371 476 105 +4 401 433 353 367 +4 321 223 44 300 +4 300 359 321 223 +4 429 470 488 31 +4 452 31 470 429 +4 429 216 488 470 +4 452 470 216 429 +4 270 264 266 571 +4 479 249 256 335 +4 250 476 297 124 +4 250 476 124 471 +4 215 114 379 95 +4 496 497 120 156 +4 496 156 208 1 +4 192 398 107 252 +4 25 282 188 215 +4 366 186 424 75 +4 67 145 218 154 +4 120 142 141 384 +4 162 145 471 124 +4 368 299 490 91 +4 367 91 86 440 +4 398 102 356 538 +4 241 264 234 566 +4 575 476 81 572 +4 427 81 575 476 +4 467 107 277 530 +4 404 480 453 196 +4 151 284 401 360 +4 151 401 353 360 +4 23 430 182 422 +4 450 533 583 56 +4 98 533 583 450 +4 169 391 170 222 +4 62 289 359 300 +4 141 118 136 574 +4 25 309 215 153 +4 153 188 215 25 +4 23 456 182 430 +4 200 205 209 180 +4 360 410 109 312 +4 360 410 305 109 +4 76 360 312 410 +4 313 125 461 534 +4 53 145 471 162 +4 16 313 461 534 +4 16 534 461 134 +4 349 347 367 368 +4 347 365 367 368 +4 140 187 568 143 +4 143 187 568 385 +4 129 510 222 223 +4 156 7 497 122 +4 367 490 86 91 +4 101 530 467 322 +4 49 322 530 101 +4 489 231 252 192 +4 231 235 252 192 +4 118 120 156 208 +4 204 173 577 200 +4 204 594 200 577 +4 251 572 371 355 +4 572 407 548 81 +4 496 120 208 156 +4 0 166 115 403 +4 166 115 439 0 +4 176 552 172 28 +4 16 534 134 33 +4 12 420 509 480 +4 420 127 112 463 +4 385 21 122 512 +4 147 282 188 25 +4 432 82 424 366 +4 495 3 168 570 +4 498 112 420 364 +4 353 76 83 433 +4 324 49 101 303 +4 523 38 469 152 +4 243 276 379 563 +4 449 566 45 447 +4 443 524 125 534 +4 443 125 524 303 +4 295 298 578 48 +4 30 539 576 326 +4 57 231 531 160 +4 116 16 445 461 +4 497 384 120 596 +4 497 120 384 386 +4 161 290 358 59 +4 236 388 589 254 +4 164 39 93 331 +4 4 165 168 116 +4 165 316 4 168 +4 283 314 120 2 +4 28 223 190 302 +4 145 476 454 69 +4 186 359 263 581 +4 311 359 186 581 +4 194 318 253 531 +4 72 270 266 571 +4 179 202 178 207 +4 270 266 367 406 +4 389 565 254 259 +4 300 527 243 44 +4 44 527 243 225 +4 168 208 570 117 +4 256 337 249 361 +4 461 183 568 184 +4 413 53 232 333 +4 98 243 379 563 +4 98 563 379 100 +4 161 524 45 358 +4 420 463 373 6 +4 420 6 325 463 +4 420 480 364 127 +4 6 463 460 502 +4 6 502 325 463 +4 325 20 555 539 +4 347 365 361 362 +4 336 361 362 347 +4 347 367 365 362 +4 528 116 126 134 +4 190 223 224 243 +4 207 178 402 202 +4 65 110 124 346 +4 346 535 65 110 +4 116 117 585 130 +4 570 585 112 364 +4 570 117 112 585 +4 112 127 364 131 +4 230 192 489 248 +4 117 136 116 118 +4 115 137 132 574 +4 115 137 133 132 +4 531 194 231 253 +4 194 318 531 51 +4 499 585 316 168 +4 119 122 461 503 +4 120 142 384 386 +4 503 122 461 143 +4 122 384 596 385 +4 229 592 595 278 +4 595 248 214 482 +4 212 482 101 192 +4 132 179 137 233 +4 132 179 136 137 +4 223 263 510 94 +4 103 217 193 167 +4 116 119 140 461 +4 116 140 184 461 +4 591 574 403 208 +4 314 283 120 591 +4 166 314 591 283 +4 403 166 591 283 +4 522 260 54 342 +4 422 221 587 153 +4 587 153 221 93 +4 93 587 153 435 +4 348 365 249 569 +4 232 578 471 53 +4 368 369 378 475 +4 242 348 246 99 +4 26 196 343 418 +4 177 204 203 209 +4 199 568 489 213 +4 382 230 573 248 +4 230 248 489 573 +4 144 171 128 561 +4 144 127 128 170 +4 317 332 40 237 +4 117 136 131 130 +4 126 200 177 134 +4 127 364 131 175 +4 127 202 175 131 +4 127 144 175 202 +4 130 134 135 590 +4 131 179 136 132 +4 131 178 202 175 +4 131 175 130 178 +4 270 340 362 264 +4 270 367 264 362 +4 347 362 264 367 +4 136 135 118 185 +4 136 130 135 181 +4 120 123 142 386 +4 137 108 142 591 +4 137 233 380 121 +4 189 384 374 142 +4 137 233 133 132 +4 134 183 200 177 +4 135 185 140 118 +4 118 140 596 187 +4 118 136 185 141 +4 140 187 143 596 +4 140 568 461 143 +4 482 398 214 107 +4 143 568 191 488 +4 141 385 384 519 +4 170 245 202 391 +4 222 240 242 391 +4 167 232 221 397 +4 232 221 397 114 +4 504 512 384 122 +4 302 225 243 190 +4 598 462 564 32 +4 232 53 162 333 +4 242 224 94 99 +4 144 175 202 404 +4 172 223 171 176 +4 181 228 227 229 +4 233 121 255 380 +4 173 177 200 204 +4 225 98 243 379 +4 175 178 590 130 +4 202 222 207 179 +4 202 222 179 170 +4 142 111 121 211 +4 130 135 181 590 +4 128 233 133 176 +4 177 209 183 200 +4 136 178 181 402 +4 136 207 402 380 +4 489 248 192 398 +4 183 534 209 177 +4 183 209 534 210 +4 185 402 211 136 +4 297 110 124 357 +4 512 345 103 385 +4 187 111 185 199 +4 187 185 184 199 +4 111 199 211 185 +4 233 564 190 224 +4 233 190 223 224 +4 222 242 233 223 +4 568 187 184 199 +4 187 199 519 111 +4 585 174 364 383 +4 586 364 383 585 +4 263 186 344 366 +4 153 39 472 93 +4 232 472 413 39 +4 114 232 472 578 +4 48 472 153 39 +4 188 153 215 221 +4 188 255 390 221 +4 221 153 215 114 +4 188 215 255 221 +4 175 201 590 178 +4 178 201 590 206 +4 401 571 109 305 +4 297 252 538 573 +4 141 185 187 111 +4 141 111 187 519 +4 576 170 171 222 +4 576 169 41 457 +4 198 388 594 200 +4 198 201 245 388 +4 201 245 206 202 +4 201 245 588 206 +4 501 15 113 381 +4 204 594 203 566 +4 205 227 180 206 +4 205 227 209 180 +4 206 180 181 227 +4 207 242 402 380 +4 203 566 209 204 +4 209 534 210 595 +4 180 227 229 181 +4 180 227 209 229 +4 327 21 468 385 +4 516 400 503 122 +4 564 462 379 215 +4 222 526 391 242 +4 242 99 246 396 +4 401 360 305 109 +4 185 213 230 229 +4 185 211 402 228 +4 211 402 97 396 +4 369 368 365 106 +4 106 348 279 246 +4 564 215 95 255 +4 233 95 564 224 +4 3 387 499 570 +4 364 174 480 383 +4 495 403 115 208 +4 495 208 115 570 +4 208 117 574 115 +4 403 208 574 115 +4 380 255 396 390 +4 133 381 104 113 +4 381 104 108 137 +4 133 137 104 381 +4 197 169 196 170 +4 542 541 362 80 +4 200 590 201 205 +4 174 201 200 590 +4 193 587 221 93 +4 295 472 578 114 +4 139 467 482 101 +4 482 107 214 467 +4 404 174 175 201 +4 229 592 278 244 +4 409 186 92 75 +4 163 196 404 453 +4 163 196 453 26 +4 246 280 348 352 +4 219 391 40 237 +4 12 586 480 22 +4 169 522 391 493 +4 251 280 105 371 +4 422 188 153 25 +4 280 357 475 352 +4 594 234 262 220 +4 594 262 388 220 +4 201 238 588 245 +4 245 391 238 239 +4 170 202 222 391 +4 245 391 206 202 +4 527 438 98 225 +4 462 98 438 225 +4 402 244 228 97 +4 142 211 121 136 +4 137 121 136 142 +4 218 145 578 154 +4 154 307 578 218 +4 307 412 100 218 +4 227 592 595 229 +4 228 229 97 244 +4 402 106 244 97 +4 402 228 240 206 +4 595 524 212 247 +4 229 244 248 230 +4 47 524 49 303 +4 247 595 214 482 +4 212 482 247 101 +4 351 475 368 593 +4 212 595 247 482 +4 230 382 244 248 +4 146 255 564 121 +4 474 538 451 61 +4 198 388 518 220 +4 43 198 518 220 +4 469 43 198 518 +4 397 396 376 250 +4 566 265 595 524 +4 595 265 534 524 +4 47 466 45 524 +4 561 176 171 128 +4 192 451 139 50 +4 267 150 92 87 +4 267 92 572 87 +4 232 471 114 397 +4 18 268 528 134 +4 287 18 134 268 +4 408 273 108 11 +4 271 81 407 572 +4 269 19 146 273 +4 274 281 461 29 +4 540 275 107 77 +4 556 258 388 236 +4 63 275 277 467 +4 306 556 258 388 +4 529 31 281 470 +4 474 538 252 451 +4 36 25 215 282 +4 218 145 375 578 +4 578 307 100 218 +4 237 219 391 259 +4 237 389 417 64 +4 120 2 496 283 +4 151 76 284 360 +4 285 75 92 150 +4 302 323 28 223 +4 19 32 286 146 +4 286 146 269 19 +4 169 257 493 510 +4 289 62 359 311 +4 312 290 465 63 +4 388 594 238 262 +4 198 388 200 201 +4 238 262 241 592 +4 239 106 588 240 +4 391 526 597 242 +4 391 260 597 526 +4 526 510 94 223 +4 291 598 564 32 +4 92 186 366 75 +4 432 424 150 366 +4 75 149 186 424 +4 310 32 564 15 +4 435 23 587 422 +4 435 422 587 153 +4 592 262 241 264 +4 43 294 220 296 +4 588 264 244 106 +4 295 48 578 472 +4 296 158 234 55 +4 296 55 234 66 +4 56 583 298 412 +4 159 56 583 298 +4 236 388 254 258 +4 110 562 124 357 +4 102 110 357 562 +4 321 223 42 44 +4 202 402 207 222 +4 202 206 402 240 +4 73 285 304 251 +4 304 73 251 580 +4 154 307 218 67 +4 246 348 279 352 +4 114 472 153 309 +4 99 100 105 375 +4 75 311 186 149 +4 248 278 214 288 +4 29 125 461 313 +4 461 274 29 313 +4 29 292 125 313 +4 246 382 352 279 +4 250 167 194 297 +4 13 512 384 504 +4 62 359 321 300 +4 559 359 321 62 +4 107 61 77 277 +4 107 77 61 538 +4 325 509 555 20 +4 326 197 421 34 +4 217 37 327 419 +4 539 14 339 514 +4 328 256 389 417 +4 51 93 331 320 +4 331 194 93 51 +4 331 333 194 51 +4 232 53 471 162 +4 334 79 535 562 +4 339 539 30 20 +4 539 339 325 20 +4 376 199 489 230 +4 376 199 167 489 +4 65 318 253 96 +4 172 28 553 323 +4 576 223 172 129 +4 217 341 320 51 +4 217 51 531 341 +4 467 107 530 139 +4 27 374 513 345 +4 179 222 207 233 +4 179 222 233 128 +4 170 222 179 128 +4 254 565 423 362 +4 259 336 254 589 +4 259 565 254 336 +4 260 337 259 597 +4 260 389 259 337 +4 260 597 526 337 +4 260 337 256 389 +4 337 597 526 569 +4 329 538 71 346 +4 262 347 264 589 +4 262 589 254 347 +4 262 362 264 347 +4 589 347 336 254 +4 514 576 30 539 +4 183 180 209 210 +4 183 184 180 210 +4 426 80 148 362 +4 589 264 106 347 +4 589 336 347 569 +4 597 569 337 259 +4 360 353 312 109 +4 43 306 220 518 +4 441 534 203 265 +4 348 369 365 106 +4 279 351 297 352 +4 279 352 369 351 +4 352 297 280 357 +4 296 234 220 306 +4 294 577 220 594 +4 158 594 220 234 +4 297 351 279 593 +4 280 371 348 352 +4 119 140 461 122 +4 122 140 461 143 +4 201 205 206 588 +4 590 205 206 201 +4 55 579 234 66 +4 288 354 398 573 +4 288 107 356 353 +4 16 134 461 116 +4 375 218 105 145 +4 239 589 106 240 +4 214 312 353 109 +4 63 247 467 301 +4 247 101 467 301 +4 482 467 247 101 +4 401 360 284 305 +4 571 72 284 266 +4 359 263 510 223 +4 594 241 262 234 +4 594 566 241 234 +4 88 490 365 299 +4 310 552 176 28 +4 561 14 502 339 +4 472 48 53 413 +4 590 206 180 181 +4 590 178 206 181 +4 389 256 361 337 +4 259 532 236 254 +4 413 472 232 53 +4 496 208 415 1 +4 336 361 569 337 +4 186 92 276 409 +4 347 264 349 367 +4 328 256 417 54 +4 42 155 323 129 +4 44 42 323 223 +4 264 367 350 349 +4 129 223 323 42 +4 279 369 368 351 +4 348 369 279 352 +4 92 87 371 572 +4 351 593 368 279 +4 350 370 353 356 +4 350 367 353 370 +4 351 352 369 475 +4 348 344 363 366 +4 352 371 369 475 +4 366 344 363 424 +4 351 475 369 368 +4 348 352 371 369 +4 572 315 87 371 +4 593 567 102 357 +4 476 372 81 572 +4 103 111 167 193 +4 374 554 182 587 +4 225 243 98 527 +4 119 118 140 596 +4 144 245 404 202 +4 169 473 257 60 +4 375 471 250 397 +4 41 169 54 522 +4 251 92 348 371 +4 111 211 199 376 +4 371 491 377 315 +4 593 370 405 378 +4 368 490 367 91 +4 368 369 377 378 +4 74 559 261 257 +4 116 16 134 287 +4 500 16 116 287 +4 371 372 548 475 +4 567 102 85 405 +4 136 380 402 211 +4 402 396 211 380 +4 217 167 231 194 +4 124 476 454 145 +4 436 162 454 145 +4 385 327 103 195 +4 454 562 476 124 +4 476 562 357 124 +4 137 380 136 121 +4 558 532 389 254 +4 64 532 389 558 +4 123 142 188 108 +4 132 233 128 179 +4 173 177 204 537 +4 594 238 262 241 +4 114 375 471 578 +4 114 100 375 578 +4 389 532 237 259 +4 83 433 370 353 +4 367 353 370 433 +4 251 105 218 355 +4 83 440 370 433 +4 370 440 367 433 +4 100 105 218 251 +4 112 131 117 132 +4 592 241 566 264 +4 573 382 376 230 +4 489 252 231 297 +4 46 98 438 462 +4 46 438 464 462 +4 402 106 97 242 +4 536 361 479 84 +4 536 479 361 256 +4 215 98 462 379 +4 278 350 214 288 +4 288 350 353 356 +4 288 353 350 214 +4 288 354 350 356 +4 278 350 288 354 +4 233 380 95 224 +4 560 258 254 423 +4 560 254 565 423 +4 116 16 9 445 +4 16 431 116 9 +4 445 9 116 119 +4 134 528 177 126 +4 116 130 135 136 +4 309 472 153 48 +4 172 223 176 28 +4 342 417 237 260 +4 260 389 417 237 +4 396 97 382 246 +4 218 476 145 69 +4 408 314 507 591 +4 179 136 207 178 +4 95 396 375 99 +4 396 250 397 375 +4 211 97 402 228 +4 230 211 97 376 +4 98 442 243 563 +4 98 442 563 533 +4 344 74 261 363 +4 74 261 363 545 +4 335 545 261 74 +4 115 137 104 133 +4 348 366 363 377 +4 32 520 146 19 +4 391 260 259 597 +4 288 356 107 398 +4 422 147 182 188 +4 430 147 182 422 +4 430 123 182 147 +4 515 461 274 17 +4 17 191 143 461 +4 298 578 307 100 +4 242 569 106 348 +4 263 92 276 186 +4 289 359 243 186 +4 106 368 365 347 +4 4 116 500 431 +4 504 7 122 497 +4 176 233 133 564 +4 199 167 489 195 +4 13 189 456 395 +4 400 512 504 122 +4 400 7 122 504 +4 20 539 30 326 +4 89 475 378 371 +4 430 11 123 147 +4 564 233 255 95 +4 566 264 214 592 +4 214 264 278 592 +4 566 109 214 264 +4 222 402 242 240 +4 240 106 597 589 +4 97 106 382 246 +4 480 404 174 175 +4 480 174 404 383 +4 480 144 404 175 +4 354 593 350 405 +4 350 593 370 405 +4 367 593 350 349 +4 350 370 593 367 +4 278 349 350 593 +4 308 577 411 24 +4 173 411 577 24 +4 304 409 58 563 +4 126 134 130 590 +4 585 126 174 383 +4 90 584 416 377 +4 559 257 510 261 +4 44 464 438 225 +4 109 410 305 358 +4 388 201 245 238 +4 104 591 108 137 +4 202 240 402 222 +4 258 254 340 262 +4 254 340 262 362 +4 136 121 380 211 +4 390 221 396 211 +4 158 203 447 35 +4 524 247 566 358 +4 358 109 247 566 +4 592 264 278 244 +4 376 297 382 573 +4 160 217 341 37 +4 375 471 145 105 +4 301 524 49 47 +4 498 570 112 364 +4 337 526 249 569 +4 597 106 569 589 +4 66 148 258 423 +4 154 436 145 53 +4 377 348 92 371 +4 480 127 144 175 +4 364 480 174 175 +4 364 175 127 480 +4 70 257 328 60 +4 391 259 589 597 +4 245 388 391 219 +4 205 588 227 206 +4 85 102 71 547 +4 255 95 396 114 +4 89 378 549 584 +4 116 184 134 461 +4 461 183 184 134 +4 450 583 159 56 +4 448 583 36 159 +4 520 448 583 36 +4 174 590 130 175 +4 93 435 39 164 +4 254 558 532 560 +4 251 100 276 563 +4 200 383 201 174 +4 195 327 103 217 +4 217 419 327 345 +4 252 398 573 489 +4 250 194 471 124 +4 124 297 252 538 +4 411 173 399 24 +4 596 187 143 385 +4 385 488 568 143 +4 385 187 568 199 +4 385 519 187 199 +4 28 190 176 291 +4 94 348 261 526 +4 94 348 526 242 +4 371 548 89 475 +4 526 249 348 261 +4 142 136 141 185 +4 520 564 146 215 +4 116 184 135 134 +4 132 131 179 127 +4 106 368 272 279 +4 382 106 244 279 +4 106 244 279 272 +4 94 263 348 276 +4 403 115 574 137 +4 571 305 557 109 +4 566 557 109 571 +4 245 388 219 518 +4 479 249 361 256 +4 479 84 361 249 +4 196 245 170 391 +4 404 198 201 245 +4 211 221 396 376 +4 564 215 255 146 +4 566 571 264 234 +4 566 264 571 109 +4 396 246 382 250 +4 566 557 571 234 +4 85 405 157 550 +4 405 567 378 550 +4 85 157 405 459 +4 560 556 236 258 +4 461 212 534 125 +4 142 211 136 185 +4 267 407 87 572 +4 572 371 548 315 +4 409 311 186 75 +4 285 75 409 92 +4 16 292 534 33 +4 411 293 537 35 +4 294 203 35 577 +4 307 412 218 67 +4 257 335 261 74 +4 551 415 168 1 +4 256 335 261 257 +4 237 317 64 417 +4 34 196 40 418 +4 422 147 188 25 +4 76 353 83 446 +4 541 426 362 80 +4 427 81 476 372 +4 543 427 372 81 +4 229 192 248 595 +4 388 258 306 262 +4 388 258 262 254 +4 87 432 150 92 +4 87 491 371 315 +4 410 290 465 312 +4 434 15 8 113 +4 38 22 469 152 +4 38 469 22 163 +4 436 145 454 69 +4 69 145 67 436 +4 527 438 46 98 +4 524 47 161 45 +4 434 113 8 439 +4 45 441 447 265 +4 442 58 527 243 +4 82 444 424 363 +4 445 503 461 17 +4 515 461 17 445 +4 446 356 353 83 +4 46 98 448 450 +4 557 566 449 55 +4 41 473 169 60 +4 107 451 61 530 +4 50 452 138 235 +4 50 452 235 458 +4 78 565 477 68 +4 79 478 455 562 +4 455 79 562 535 +4 458 235 50 57 +4 545 84 363 82 +4 387 586 505 499 +4 585 499 586 364 +4 548 372 487 567 +4 129 525 169 510 +4 525 169 510 257 +4 583 114 578 100 +4 412 583 298 100 +4 357 476 372 562 +4 583 578 298 100 +4 160 217 531 341 +4 85 334 102 562 +4 272 347 264 349 +4 106 264 272 347 +4 92 251 267 572 +4 275 540 214 312 +4 540 214 353 107 +4 119 1 118 156 +4 275 107 214 540 +4 1 118 156 208 +4 1 208 168 118 +4 9 1 119 156 +4 408 123 11 108 +4 507 408 591 123 +4 583 379 100 98 +4 583 114 379 215 +4 520 98 215 583 +4 429 195 458 217 +4 129 223 172 323 +4 172 223 28 323 +4 219 237 332 236 +4 250 194 124 297 +4 231 194 252 253 +4 598 225 190 462 +4 462 225 464 598 +4 507 314 120 591 +4 460 128 113 561 +4 463 561 509 144 +4 287 134 116 268 +4 456 554 182 374 +4 93 232 193 194 +4 469 577 198 43 +4 202 402 206 178 +4 506 126 116 585 +4 109 465 358 247 +4 333 162 194 318 +4 525 510 223 359 +4 247 482 214 467 +4 49 324 192 138 +4 49 529 324 138 +4 167 193 221 232 +4 472 221 232 114 +4 263 366 344 348 +4 263 366 348 92 +4 587 554 435 164 +4 467 139 530 101 +4 116 130 134 135 +4 500 287 116 268 +4 5 104 269 501 +4 286 146 501 269 +4 334 535 346 110 +4 345 513 512 103 +4 461 515 274 313 +4 356 338 538 102 +4 559 525 359 510 +4 561 339 502 325 +4 547 71 338 102 +4 267 285 92 150 +4 282 273 108 146 +4 296 158 220 234 +4 163 219 196 330 +4 164 331 93 320 +4 495 168 208 570 +4 415 208 495 168 +4 415 208 403 495 +4 120 574 591 208 +4 496 415 208 120 +4 291 190 176 564 +4 291 564 176 310 +4 524 125 534 212 +4 270 340 234 481 +4 270 148 340 481 +4 313 125 534 292 +4 148 258 340 481 +4 234 481 340 258 +4 470 216 488 191 +4 138 470 192 216 +4 203 204 577 594 +4 467 322 277 63 +4 470 191 324 192 +4 324 470 192 138 +4 482 139 192 107 +4 49 139 192 101 +4 167 232 397 194 +4 129 525 510 223 +4 188 111 182 221 +4 519 103 111 167 +4 454 535 562 110 +4 142 188 121 111 +4 439 373 115 113 +4 498 373 112 570 +4 373 494 439 115 +4 270 264 234 340 +4 285 73 267 251 +4 100 251 218 483 +4 580 251 483 73 +4 296 66 234 306 +4 298 412 100 307 +4 383 200 173 126 +4 126 177 200 173 +4 302 223 243 44 +4 258 148 340 423 +4 190 223 243 302 +4 186 263 344 581 +4 559 263 510 359 +4 522 169 54 493 +4 387 498 364 570 +4 362 485 361 565 +4 548 567 487 89 +4 382 297 352 279 +4 234 579 557 571 +4 119 596 140 122 +4 136 207 380 137 +4 26 453 480 196 +4 6 373 460 463 +4 213 229 192 230 +4 229 192 230 248 +4 206 391 240 202 +4 74 344 559 581 +4 115 104 113 133 +4 534 177 183 134 +4 534 183 461 134 +4 42 129 223 525 +4 42 425 155 129 +4 42 425 129 525 +4 522 196 391 40 +4 391 260 522 342 +4 522 342 40 391 +4 391 237 342 40 +4 391 342 237 260 +4 328 256 54 473 +4 126 590 200 134 +4 343 144 509 555 +4 293 528 399 177 +4 579 481 234 66 +4 100 483 218 412 +4 458 195 235 231 +4 195 235 429 458 +4 57 231 235 252 +4 197 457 169 576 +4 302 190 28 291 +4 294 594 158 203 +4 296 294 220 158 +4 189 374 456 182 +4 199 185 213 230 +4 476 280 297 357 +4 485 362 361 365 +4 116 118 135 140 +4 116 140 119 118 +4 383 198 577 200 +4 13 456 189 513 +4 199 488 195 489 +4 385 199 488 195 +4 385 519 199 195 +4 13 189 384 103 +4 13 103 384 512 +4 103 512 385 384 +4 242 348 106 246 +4 195 216 231 489 +4 65 124 96 329 +4 573 398 538 102 +4 398 252 573 538 +4 384 385 103 519 +4 233 380 242 207 +4 16 313 515 461 +4 16 445 461 515 +4 279 382 297 573 +4 336 361 347 569 +4 29 461 125 281 +4 577 220 43 294 +4 294 43 577 308 +4 177 534 209 203 +4 209 203 595 566 +4 15 146 564 381 +4 15 564 146 32 +4 396 242 97 246 +4 107 356 538 398 +4 261 344 363 348 +4 5 104 408 269 +4 348 377 369 371 +4 89 371 378 377 +4 585 130 174 126 +4 585 175 174 130 +4 368 416 91 378 +4 309 295 114 472 +4 170 245 144 202 +4 388 391 238 245 +4 34 418 197 196 +4 34 418 326 197 +4 197 418 343 196 +4 197 418 326 343 +4 222 510 391 526 +4 174 383 201 404 +4 108 215 146 255 +4 255 95 114 215 +4 230 229 211 185 +4 97 229 230 244 +4 116 135 118 136 +4 168 119 118 116 +4 593 378 567 475 +4 116 135 184 140 +4 137 121 142 108 +4 108 121 142 188 +4 269 273 108 408 +4 271 407 267 572 +4 294 577 411 308 +4 223 243 44 300 +4 322 101 49 301 +4 44 323 302 223 +4 65 124 329 346 +4 40 196 319 418 +4 217 419 320 341 +4 576 539 144 197 +4 496 283 415 120 +4 551 495 3 168 +4 495 415 168 551 +4 194 252 253 96 +4 513 456 374 554 +4 15 552 176 310 +4 506 528 399 18 +4 506 528 126 517 +4 52 38 332 518 +4 85 71 102 334 +4 15 310 176 564 +4 15 564 176 113 +4 16 134 287 33 +4 275 107 467 214 +4 149 186 344 581 +4 344 263 261 559 +4 546 365 88 544 +4 570 373 112 115 +4 378 157 550 549 +4 195 235 231 216 +4 383 480 453 404 +4 22 480 453 383 +4 558 254 389 565 +4 559 261 344 74 +4 17 414 143 191 +4 414 143 191 488 +4 35 293 537 521 +4 232 472 578 53 +4 518 582 38 523 +4 302 437 190 291 +4 316 3 168 492 +4 491 584 377 315 +4 432 150 92 366 +4 434 104 113 115 +4 434 113 104 501 +4 151 433 353 401 +4 151 86 433 401 +4 450 583 448 159 +4 520 98 583 448 +4 518 219 332 236 +4 427 372 478 543 +4 428 393 586 505 +4 426 565 477 541 +4 430 395 123 508 +4 156 122 596 119 +4 9 119 168 116 +4 503 7 119 122 +4 459 370 405 356 +4 373 460 128 113 +4 463 127 509 420 +4 420 509 480 127 +4 548 567 475 372 +4 212 101 524 125 +4 212 324 101 125 +4 303 101 324 125 +4 301 247 101 524 +4 524 301 247 358 +4 561 509 144 555 +4 328 389 64 417 +4 329 124 538 346 +4 346 110 124 538 +4 537 399 173 177 +4 399 528 173 177 +4 411 399 537 293 +4 580 100 483 251 +4 73 271 251 483 +4 167 193 111 221 +4 121 255 390 188 +4 115 403 104 137 +4 374 587 93 164 +4 374 587 193 93 +4 374 193 587 111 +4 587 374 554 164 +4 389 532 259 254 +4 289 359 186 311 +4 581 344 149 74 +4 167 232 194 193 +4 193 221 232 93 +4 211 396 97 376 +4 230 573 489 376 +4 489 376 297 167 +4 114 471 232 578 +4 223 94 224 243 +4 297 194 252 231 +4 376 167 397 250 +4 489 231 167 297 +4 106 365 348 569 +4 198 245 518 388 +4 472 153 221 114 +4 162 65 454 124 +4 138 216 192 235 +4 138 192 139 50 +4 570 117 585 168 +4 131 175 364 585 +4 374 103 513 345 +4 343 480 144 196 +4 480 509 511 343 +4 423 560 258 556 +4 45 466 265 524 +4 9 431 116 165 +4 9 168 165 116 +4 327 385 468 195 +4 103 327 385 345 +4 103 217 327 345 +4 330 40 196 319 +4 163 330 196 319 +4 469 219 330 332 +4 315 548 572 407 +4 283 403 415 591 +4 129 41 169 525 +4 250 105 280 476 +4 99 250 105 280 +4 463 502 325 561 +4 409 92 276 563 +4 563 92 276 251 +4 18 506 528 268 +4 528 506 116 268 +4 528 268 116 134 +4 269 146 108 273 +4 165 492 316 168 +4 186 149 344 424 +4 186 344 366 424 +4 15 564 113 381 +4 440 86 367 433 +4 342 417 260 54 +4 54 256 417 260 +4 238 589 239 391 +4 367 91 440 368 +4 378 370 157 440 +4 118 156 596 119 +4 503 9 119 7 +4 434 501 15 113 +4 16 500 116 431 +4 533 98 100 563 +4 583 98 100 533 +4 271 251 355 572 +4 483 251 355 271 +4 445 503 119 461 +4 563 304 409 285 +4 498 112 373 420 +4 420 463 112 373 +4 373 112 128 463 +4 471 145 105 476 +4 529 281 324 470 +4 596 141 384 120 +4 384 385 141 596 +4 496 2 120 497 +4 255 221 396 390 +4 406 367 490 86 +4 406 362 490 367 +4 297 593 102 357 +4 297 593 573 102 +4 447 521 203 441 +4 450 533 442 98 +4 456 23 182 554 +4 23 182 554 587 +4 50 529 138 452 +4 525 425 129 41 +4 139 50 451 530 +4 547 459 356 446 +4 460 14 502 561 +4 401 264 571 266 +4 353 151 76 433 +4 75 150 424 366 +4 266 367 401 264 +4 22 24 383 152 +4 145 124 162 454 +4 163 383 404 469 +4 196 522 391 169 +4 450 98 448 583 +4 449 566 447 158 +4 264 109 350 401 +4 264 367 401 350 +4 401 367 353 350 +4 401 109 350 353 +4 370 440 459 157 +4 458 231 57 160 +4 4 116 585 268 +4 401 360 109 353 +4 214 264 109 350 +4 278 350 264 214 +4 214 109 353 350 +4 231 217 531 160 +4 531 194 217 231 +4 244 272 278 279 +4 244 278 272 264 +4 272 278 349 264 +4 14 561 539 339 +4 587 23 435 554 +4 568 213 192 489 +4 404 198 245 518 +4 242 97 402 396 +4 95 255 396 380 +4 257 335 60 70 +4 364 12 480 420 +4 12 586 364 480 +4 458 452 235 429 +4 569 361 347 365 +4 117 132 574 115 +4 117 115 112 132 +4 560 236 254 258 +4 563 304 285 251 +4 317 342 237 40 +4 188 221 422 153 +4 536 78 64 389 +4 470 281 324 191 +4 516 143 414 488 +4 516 488 414 468 +4 257 335 74 60 +4 328 257 473 60 +4 421 326 576 197 +4 468 31 488 414 +4 534 265 466 524 +4 534 524 466 443 +4 163 219 404 196 +4 469 219 404 163 +4 22 383 163 469 +4 383 404 453 163 +4 587 435 93 164 +4 562 567 487 372 +4 562 102 567 357 +4 289 243 359 300 +4 142 188 111 182 +4 182 111 142 374 +4 508 386 123 507 +4 300 359 223 243 +4 537 173 577 204 +4 411 399 173 537 +4 537 577 173 411 +4 580 100 412 483 +4 488 470 191 414 +4 414 470 191 281 +4 553 576 514 172 +4 523 43 469 518 +4 523 518 469 38 +4 342 317 237 417 +4 361 389 78 536 +4 536 361 389 256 +4 78 361 565 389 +4 189 103 13 513 +4 12 480 509 511 +4 343 144 480 509 +4 462 438 464 225 +4 441 45 466 265 +4 458 235 57 231 +4 522 41 169 457 +4 455 478 427 372 +4 476 427 372 455 +4 430 456 182 395 +4 430 395 182 123 +4 68 565 477 426 +4 428 586 22 383 +4 12 428 393 586 +4 22 586 428 12 +4 401 151 266 284 +4 291 564 310 32 +4 16 313 534 292 +4 304 533 563 58 +4 598 46 464 462 +4 598 225 464 437 +4 599 441 466 534 +4 599 534 466 443 +4 534 441 466 265 +4 557 566 45 449 +4 520 46 98 448 +4 32 564 520 462 +4 291 598 190 564 +4 199 489 568 488 +4 568 488 489 216 +4 488 195 489 216 +4 489 195 167 231 +4 397 194 471 250 +4 354 398 102 356 +4 470 192 216 191 +4 568 191 216 192 +4 385 516 143 122 +4 142 111 384 374 +4 348 369 377 365 +4 375 471 397 114 +4 396 397 114 375 +4 335 249 545 479 +4 270 406 367 362 +4 537 204 203 177 +4 590 180 206 205 +4 136 207 178 402 +4 49 139 138 192 +4 247 214 109 465 +4 214 465 312 109 +4 374 384 103 111 +4 391 522 260 493 +4 194 96 253 318 +4 402 106 242 240 +4 245 239 238 588 +4 588 592 239 238 +4 206 227 228 588 +4 580 100 251 563 +4 473 257 493 169 +4 328 257 256 473 +4 592 239 262 264 +4 239 264 589 262 +4 240 597 106 242 +4 588 264 106 239 +4 128 112 115 132 +4 498 495 494 570 +4 494 495 115 570 +4 373 128 112 115 +4 365 367 368 490 +4 368 377 365 299 +4 368 416 299 91 +4 128 127 179 170 +4 131 179 202 178 +4 194 217 51 531 +4 179 137 233 207 +4 343 197 196 144 +4 326 197 343 555 +4 35 537 577 203 +4 101 482 139 192 +4 482 398 107 192 +4 420 325 509 463 +4 226 238 594 241 +4 226 592 241 566 +4 493 261 257 256 +4 503 7 122 400 +4 463 112 128 127 +4 463 144 127 128 +4 539 144 561 171 +4 539 555 561 144 +4 260 256 337 261 +4 585 383 586 428 +4 363 249 348 365 +4 385 195 103 519 +4 128 133 132 115 +4 249 365 361 569 +4 112 132 127 131 +4 132 179 128 127 +4 128 112 132 127 +4 117 136 574 132 +4 117 132 131 136 +4 132 137 136 574 +4 381 146 269 501 +4 357 372 567 562 +4 586 480 383 364 +4 586 22 383 480 +4 171 170 576 144 +4 539 576 144 171 +4 126 590 130 174 +4 68 565 558 78 +4 389 78 558 565 +4 144 170 197 196 +4 184 229 181 180 +4 416 91 378 549 +4 378 416 549 584 +4 542 362 490 406 +4 116 445 119 461 +4 135 180 181 590 +4 568 184 210 213 +4 184 213 185 229 +4 127 170 144 202 +4 564 379 224 95 +4 199 213 489 230 +4 213 230 192 489 +4 84 361 249 544 +4 84 546 544 363 +4 122 21 400 512 +4 516 400 122 21 +4 388 391 589 238 +4 524 566 45 358 +4 95 375 100 99 +4 451 50 192 252 +4 283 0 415 403 +4 493 391 526 260 +4 493 261 260 526 +4 215 146 520 19 +4 53 145 578 471 +4 154 145 578 53 +4 244 279 278 248 +4 382 280 297 250 +4 415 208 168 1 +4 382 352 297 280 +4 99 276 251 100 +4 379 276 99 100 +4 379 224 99 276 +4 248 573 279 278 +4 246 280 352 382 +4 507 2 120 314 +4 386 2 120 507 +4 107 398 538 252 +4 316 585 10 4 +4 261 256 337 249 +4 262 254 362 347 +4 254 347 336 362 +4 119 156 122 7 +4 260 337 526 261 +4 278 349 264 350 +4 354 350 593 278 +4 354 356 405 350 +4 288 356 398 354 +4 352 297 357 351 +4 297 357 351 593 +4 357 475 352 351 +4 507 11 123 508 +4 250 167 397 194 +4 8 14 460 113 +4 15 14 176 552 +4 517 10 428 383 +4 426 541 362 565 +4 151 360 353 76 +4 361 544 365 249 +4 371 369 475 378 +4 367 368 370 593 +4 157 378 405 370 +4 548 315 371 89 +4 326 539 555 20 +4 516 122 385 21 +4 521 534 177 203 +4 441 521 203 534 +4 152 24 577 308 +4 59 305 358 557 +4 136 181 135 185 +4 135 184 181 180 +4 137 574 142 136 +4 118 140 187 185 +4 118 141 185 187 +4 140 187 184 568 +4 141 142 185 111 +4 142 111 211 185 +4 108 146 269 381 +4 501 113 104 381 +4 599 534 292 33 +4 38 330 469 163 +4 469 330 219 163 +4 40 522 196 34 +4 521 203 537 35 +4 218 69 145 67 +4 248 398 489 573 +4 210 180 209 229 +4 390 111 221 211 +4 191 568 212 192 +4 248 288 214 398 +4 27 374 217 320 +4 463 144 128 561 +4 117 130 116 136 +4 39 232 93 331 +4 574 591 137 142 +4 35 203 294 158 +4 43 296 220 306 +4 122 143 596 140 +4 123 182 188 142 +4 36 159 583 295 +4 534 595 212 210 +4 534 524 212 595 +4 37 217 458 160 +4 531 253 231 57 +4 252 329 474 57 +4 65 329 253 57 +4 135 134 180 590 +4 135 180 134 184 +4 250 471 105 476 +4 140 461 568 184 +4 143 568 461 191 +4 410 59 358 290 +4 410 305 358 59 +4 469 198 404 518 +4 469 383 198 577 +4 469 383 404 198 +4 581 359 559 62 +4 475 371 372 476 +4 476 371 372 572 +4 200 383 198 201 +4 383 404 198 201 +4 233 380 224 242 +4 432 377 366 92 +4 82 377 366 432 +4 178 206 202 201 +4 200 177 209 204 +4 148 66 258 481 +4 560 565 558 68 +4 553 514 552 172 +4 172 514 552 176 +4 190 243 224 379 +4 190 243 379 225 +4 190 225 379 462 +4 200 204 209 226 +4 190 462 379 564 +4 328 70 256 257 +4 200 226 594 204 +4 190 379 224 564 +4 178 181 402 206 +4 181 206 227 228 +4 335 70 256 479 +4 376 167 250 297 +4 206 588 239 245 +4 228 244 240 588 +4 240 244 106 588 +4 579 305 571 72 +4 113 133 564 176 +4 113 381 564 133 +4 589 106 569 347 +4 275 312 465 63 +4 540 107 356 77 +4 126 173 383 517 +4 232 162 471 194 +4 74 444 545 363 +4 333 162 232 194 +4 536 361 84 78 +4 565 485 361 78 +4 355 476 572 371 +4 371 572 548 372 +4 572 372 81 548 +4 69 455 476 454 +4 487 85 562 79 +4 485 362 484 565 +4 485 362 542 484 +4 368 377 299 416 +4 488 31 470 414 +4 414 31 470 281 +4 556 518 582 52 +4 556 52 236 518 +4 518 556 388 236 +4 306 518 556 388 +4 556 518 306 582 +4 459 370 356 83 +4 545 84 249 363 +4 545 479 249 84 +4 363 84 249 544 +4 547 102 459 85 +4 528 177 126 173 +4 80 406 270 362 +4 131 178 130 136 +4 485 88 365 544 +4 490 365 362 88 +4 407 87 572 315 +4 99 396 375 250 +4 0 166 403 283 +4 251 371 105 355 +4 168 4 116 585 +4 592 244 588 264 +4 244 264 272 106 +4 408 5 314 104 +4 567 405 378 593 +4 507 386 123 120 +4 181 228 229 185 +4 230 97 211 229 +4 561 113 176 128 +4 378 584 377 416 +4 183 461 212 534 +4 183 210 534 212 +4 136 185 402 181 +4 528 126 517 173 +4 11 273 108 147 +4 198 220 594 388 +4 209 534 595 203 +4 514 172 539 176 +4 185 228 229 211 +4 97 382 230 376 +4 199 230 211 185 +4 199 211 230 376 +4 29 281 125 324 +4 385 568 488 199 +4 220 234 262 306 +4 421 30 576 326 +4 595 524 247 566 +4 595 214 566 247 +4 302 225 44 243 +4 324 191 212 192 +4 237 389 259 260 +4 443 47 303 524 +4 208 117 118 574 +4 168 208 117 118 +4 337 361 389 565 +4 532 64 237 317 +4 589 259 336 569 +4 259 569 337 336 +4 312 353 540 214 +4 525 257 510 559 +4 525 257 559 60 +4 279 272 349 368 +4 59 358 161 45 +4 297 573 593 279 +4 117 130 131 585 +4 14 113 176 561 +4 149 444 74 344 +4 365 544 361 485 +4 91 378 157 440 +4 368 370 378 440 +4 567 405 85 550 +4 71 61 338 538 +4 481 234 270 72 +4 251 285 92 267 +4 271 572 575 81 +4 271 483 575 355 +4 92 371 432 377 +4 85 102 459 405 +4 494 439 115 0 +4 480 144 196 404 +4 404 144 196 245 +4 201 175 202 178 +4 404 245 201 202 +4 364 499 586 387 +4 500 268 116 4 +4 420 127 364 112 +4 117 118 574 136 +4 141 120 596 118 +4 574 141 118 120 +4 460 6 494 373 +4 138 192 50 235 +4 563 276 409 243 +4 563 285 409 92 +4 247 467 465 63 +4 247 467 214 465 +4 10 383 585 428 +4 499 585 586 505 +4 506 585 10 126 +4 508 11 123 430 +4 392 586 387 12 +4 392 393 586 12 +4 580 533 100 563 +4 394 189 386 13 +4 563 304 251 580 +4 394 395 189 13 +4 514 552 176 14 +4 555 197 343 144 +4 326 539 197 555 +4 293 399 528 18 +4 186 243 289 409 +4 289 186 409 311 +4 469 22 383 152 +4 490 367 362 365 +4 119 1 168 118 +4 215 309 114 153 +4 21 345 512 385 +4 385 327 21 345 +4 385 21 468 516 +4 58 243 289 527 +4 58 243 409 289 +4 301 63 247 290 +4 465 63 290 247 +4 301 247 358 290 +4 301 101 49 524 +4 540 107 353 356 +4 149 444 344 424 +4 15 113 176 14 +4 33 441 599 534 +4 326 343 20 555 +4 301 290 358 161 +4 524 301 358 161 +4 345 27 217 419 +4 469 152 577 308 +4 469 308 577 43 +4 552 553 172 28 +4 139 451 107 530 +4 452 529 138 470 +4 50 529 49 138 +4 49 50 139 530 +4 293 177 134 528 +4 293 399 537 177 +4 580 533 563 304 +4 41 30 576 421 +4 452 529 470 31 +4 516 488 385 143 +4 516 385 488 468 +4 564 520 146 32 +4 152 383 577 24 +4 188 182 123 147 +4 316 4 168 585 +4 104 408 108 591 +4 408 104 314 591 +4 521 35 447 203 +4 435 153 93 39 +4 513 456 189 374 +4 82 546 363 377 +4 82 84 363 546 +4 225 44 464 437 +4 527 44 438 225 +4 506 116 126 528 +4 439 494 373 460 +4 8 460 439 113 +4 439 460 373 113 +4 439 113 115 434 +4 32 46 598 462 +4 532 332 317 237 +4 520 46 462 98 +4 93 194 217 51 +4 562 476 372 455 +4 524 47 466 443 +4 443 125 292 534 +4 303 125 524 101 +4 25 36 215 309 +4 376 297 573 489 +4 526 348 249 569 +4 94 263 261 348 +4 419 341 217 37 +4 217 419 27 320 +4 390 380 211 396 +4 380 224 396 95 +4 396 224 99 95 +4 472 48 413 39 +4 53 48 472 578 +4 358 557 45 59 +4 451 538 107 61 +4 129 169 576 222 +4 129 576 223 222 +4 510 129 222 169 +4 212 192 101 324 +4 324 192 101 49 +4 311 62 359 581 +4 47 301 524 161 +4 570 499 585 364 +4 303 324 29 125 +4 322 63 467 301 +4 301 101 467 322 +4 234 481 258 66 +4 434 104 115 166 +4 166 403 591 104 +4 314 166 591 104 +4 465 247 290 358 +4 76 353 446 540 +4 312 540 353 76 +4 70 389 256 536 +4 580 412 100 583 +4 580 100 533 583 +4 256 335 257 70 +4 303 292 443 125 +4 61 71 329 538 +4 65 454 124 110 +4 312 410 109 465 +4 579 72 234 481 +4 518 582 52 38 +4 258 306 262 234 +4 540 356 353 446 +4 463 325 509 561 +4 325 555 509 561 +4 294 203 577 594 +4 312 275 465 214 +4 331 333 232 194 +4 331 413 232 333 +4 331 232 93 194 +4 331 413 39 232 +4 324 529 470 138 +4 158 566 594 234 +4 294 594 220 158 +4 159 298 583 295 +4 484 78 565 477 +4 484 485 565 78 +4 476 69 427 455 +4 486 79 487 562 +4 486 79 562 478 +4 548 543 372 81 +4 483 251 218 355 +4 506 528 517 399 +4 78 389 558 64 +4 271 355 575 572 +4 148 340 362 270 +4 423 148 340 362 +4 33 521 177 293 +4 520 462 564 215 +4 55 449 158 566 +4 158 566 234 55 +4 158 566 447 203 +4 527 442 243 98 +4 446 459 356 83 +4 374 217 103 345 +4 374 217 193 103 +4 469 383 577 152 +4 133 233 128 132 +4 485 542 362 88 +4 90 299 377 416 +4 378 549 550 89 +4 92 371 87 432 +4 370 83 459 440 +4 168 551 492 3 +4 551 1 168 492 +4 1 492 165 168 +4 364 387 12 420 +4 498 420 387 364 +4 386 504 384 497 +4 394 508 386 123 +4 394 508 123 395 +4 15 8 113 14 +4 5 434 104 501 +4 501 381 104 269 +4 104 269 108 408 +4 512 385 384 122 +4 501 15 381 146 +4 15 146 501 286 +4 491 432 377 82 +4 173 517 399 24 +4 218 483 575 67 +4 122 516 143 503 +4 517 173 383 24 +4 334 110 102 562 +4 334 562 535 110 +4 553 30 514 576 +4 374 27 554 164 +4 468 488 31 429 +4 163 319 196 26 +4 197 457 421 34 +4 376 167 221 397 +4 111 221 376 167 +4 376 396 397 221 +4 263 186 366 92 +4 155 576 553 129 +4 576 155 553 30 +4 576 155 30 41 +4 380 242 396 224 +4 217 458 429 37 +4 303 29 292 125 +4 64 532 237 389 +4 525 223 42 321 +4 566 557 234 55 +4 566 45 358 557 +4 107 61 277 530 +4 280 475 371 352 +4 475 357 476 372 +4 280 475 357 476 +4 568 489 192 216 +4 558 254 565 560 +4 257 74 559 60 +4 114 375 100 95 +4 97 396 382 376 +4 531 318 253 65 +4 531 65 253 57 +4 61 329 474 538 +4 221 114 396 397 +4 111 199 519 167 +4 297 102 110 357 +4 297 102 573 538 +4 386 189 142 384 +4 424 363 366 82 +4 222 242 207 233 +4 207 222 402 242 +4 540 77 356 446 +4 71 338 102 538 +4 571 109 264 401 +4 484 541 477 565 +4 484 362 541 565 +4 485 544 361 84 +4 92 572 371 251 +4 366 348 92 377 +4 77 547 356 446 +4 550 85 567 487 +4 99 250 246 396 +4 99 280 246 250 +4 546 377 82 90 +4 172 576 171 223 +4 146 108 255 121 +4 248 398 214 482 +4 229 278 595 248 +4 371 491 432 377 +4 229 278 248 244 +4 392 387 586 505 +4 392 393 505 586 +4 566 45 265 524 +4 486 548 372 487 +4 486 543 478 372 +4 486 543 372 548 +4 155 129 41 576 +4 41 129 155 425 +4 217 167 194 193 +4 166 115 434 439 +4 431 116 165 4 +4 545 82 363 444 +4 503 445 119 9 +4 570 498 495 3 +4 377 365 299 88 +4 90 491 584 377 +4 491 82 377 90 +4 316 168 3 499 +4 499 316 585 10 +4 156 497 596 122 +4 363 249 365 544 +4 373 128 460 463 +4 311 186 149 581 +4 523 152 469 308 +4 523 308 469 43 +4 53 307 578 154 +4 53 48 578 307 +4 338 356 77 547 +4 524 247 101 212 +4 325 555 561 539 +4 4 268 585 10 +4 176 561 539 14 +4 327 217 195 429 +4 429 468 488 195 +4 429 327 468 195 +4 460 14 561 113 +4 77 107 277 275 +4 275 107 277 467 +4 320 374 93 164 +4 217 374 193 93 +4 217 374 93 320 +4 217 231 458 160 +4 463 509 127 144 +4 188 182 422 221 +4 562 478 455 372 +4 486 562 487 372 +4 486 562 372 478 +4 189 182 456 395 +4 394 123 386 189 +4 394 395 123 189 +4 223 359 321 525 +4 559 321 359 525 +4 355 572 476 575 +4 499 585 505 10 +4 583 298 578 295 +4 295 114 583 215 +4 295 578 583 114 +4 52 556 236 560 +4 66 423 258 556 +4 211 376 111 221 +4 188 111 221 390 +4 263 348 276 92 +4 348 276 92 251 +4 99 224 94 276 +4 99 251 276 348 +4 374 193 111 103 +4 423 426 148 362 +4 423 426 362 565 +4 539 339 561 325 +4 380 242 402 396 +4 396 224 242 99 +4 105 218 476 145 +4 576 171 223 222 +4 166 104 115 403 +4 251 371 348 280 +4 99 251 105 100 +4 459 157 405 370 +4 366 363 377 82 +4 485 84 361 78 +4 141 111 384 142 +4 141 111 519 384 +4 385 187 519 141 +4 596 187 385 141 +4 28 190 223 176 +4 176 190 233 564 +4 252 192 398 489 +4 99 348 94 242 +4 106 279 369 368 +4 242 94 224 223 +4 519 167 195 103 +4 246 106 382 279 +4 99 94 348 276 +4 591 403 574 137 +4 283 415 120 591 +4 415 208 591 403 +4 197 169 170 576 +4 576 170 222 169 +4 404 219 245 196 +4 121 390 380 211 +4 376 396 382 250 +4 376 382 297 250 +4 175 174 364 585 +4 116 585 126 130 +4 116 126 134 130 +4 99 280 251 348 +4 581 263 559 359 +4 105 355 476 218 +4 371 355 476 105 +4 95 396 114 375 +4 547 338 356 102 +4 106 347 365 569 +4 379 243 224 276 +4 382 97 244 106 +4 375 250 471 105 +4 110 535 65 454 +4 26 480 511 343 +4 511 26 453 480 +4 27 554 513 374 +4 38 469 330 332 +4 49 139 50 138 +4 383 577 173 200 +4 383 577 24 173 +4 254 532 236 560 +4 532 52 332 236 +4 560 532 236 52 +4 66 234 306 258 +4 514 172 576 539 +4 64 389 70 536 +4 343 555 509 20 +4 17 503 461 143 +4 274 281 191 461 +4 17 143 414 516 +4 143 503 516 17 +4 539 176 14 514 +4 214 288 353 107 +4 398 107 288 214 +4 63 275 467 465 +4 467 275 214 465 +4 235 452 216 429 +4 429 195 216 235 +4 429 488 216 195 +4 197 421 457 576 +4 457 41 576 421 +4 234 264 262 340 +4 355 575 476 218 +4 517 528 173 399 +4 457 197 169 522 +4 451 252 192 107 +4 451 538 252 107 +4 54 169 41 473 +4 525 60 169 257 +4 521 293 537 177 +4 521 203 177 537 +4 557 305 571 579 +4 557 358 109 305 +4 55 557 234 579 +4 520 19 36 215 +4 215 282 188 108 +4 215 282 108 146 +4 76 353 312 360 +4 196 219 40 330 +4 129 41 576 169 +4 93 193 217 194 +4 327 37 217 429 +4 243 359 263 186 +4 409 276 186 243 +4 463 128 460 561 +4 463 561 460 502 +4 194 124 252 96 +4 10 585 383 126 +4 218 483 355 575 +4 67 145 154 436 +4 108 282 188 147 +4 108 273 282 147 +4 18 293 134 528 +4 33 134 18 293 +4 474 252 538 329 +4 537 411 35 577 +4 294 577 35 411 +4 577 594 200 198 +4 577 220 198 43 +4 577 220 594 198 +4 109 465 410 358 +4 410 358 465 290 +4 13 189 386 384 +4 386 13 384 504 +4 387 12 586 364 +4 80 406 362 542 +4 408 123 507 11 +4 215 282 146 19 +4 18 33 287 134 +4 33 177 134 293 +4 358 557 109 566 +4 542 490 362 88 +4 467 322 530 277 +4 538 61 338 77 +4 339 514 30 539 +4 538 102 71 110 +4 71 334 346 110 +4 346 110 538 71 +4 298 578 48 307 +4 343 26 480 196 +4 303 524 49 101 +4 412 483 218 67 +4 348 363 365 377 +4 350 356 405 370 +4 562 567 85 487 +4 562 102 85 567 +4 475 593 357 567 +4 475 372 567 357 +4 137 233 207 380 +4 184 181 229 185 +4 203 594 158 566 +4 144 170 576 197 +4 184 185 213 199 +4 568 184 213 199 +4 219 589 259 236 +4 219 237 236 259 +4 588 227 228 592 +4 228 229 244 592 +4 227 592 229 228 +4 228 588 592 244 +4 224 99 95 379 +4 379 100 99 95 +4 236 254 589 259 +4 473 257 256 493 +4 238 262 592 239 +4 589 238 239 262 +4 239 589 264 106 +4 239 592 588 264 +4 585 168 117 116 +4 99 246 280 348 +4 242 106 97 246 +4 248 573 288 398 +4 278 279 593 573 +4 246 382 250 280 +4 250 280 297 476 +4 261 363 249 348 +4 597 526 569 242 +4 162 124 471 194 +4 162 124 194 96 +4 216 192 231 489 +4 195 217 231 458 +4 215 98 379 583 +4 510 391 526 493 +4 510 261 493 526 +4 564 215 379 95 +4 573 398 102 354 +4 310 28 176 291 +4 104 403 591 137 +4 196 169 391 170 +4 368 593 378 370 +4 363 546 544 365 +4 490 299 368 365 +4 221 114 255 396 +4 144 170 128 171 +4 127 202 131 179 +4 170 127 179 202 +4 131 178 136 179 +4 135 181 184 185 +4 135 184 140 185 +4 185 140 187 184 +4 468 385 488 195 +4 368 377 416 378 +4 206 588 240 239 +4 183 210 568 184 +4 210 184 180 229 +4 200 226 209 205 +4 588 205 227 592 +4 209 210 229 595 +4 210 229 212 213 +4 488 191 216 568 +4 238 226 592 241 +4 226 566 595 592 +4 595 278 214 248 +4 482 248 398 192 +4 200 226 238 594 +4 200 209 183 180 +4 120 574 141 142 +4 142 374 189 182 +4 122 385 596 143 +4 126 383 200 174 +4 590 134 180 200 +4 134 180 183 184 +4 183 461 568 212 +4 461 568 212 191 +4 375 218 100 105 +4 578 145 375 471 +4 268 116 585 506 +4 74 344 444 363 +4 424 444 344 363 +4 475 368 593 378 +4 354 102 593 405 +4 102 405 567 593 +4 171 128 223 222 +4 171 128 176 223 +4 128 223 222 233 +4 176 223 128 233 +4 222 526 242 223 +4 223 242 94 526 +4 221 472 232 93 +4 510 263 261 94 +4 526 261 94 510 +4 99 251 280 105 +4 261 263 344 348 +4 561 176 539 171 +4 176 171 172 539 +4 113 176 128 133 +4 137 381 133 233 +4 381 564 133 233 +4 381 233 121 564 +4 402 181 185 228 +4 265 566 595 203 +4 209 226 566 595 +4 226 204 209 566 +4 594 226 566 204 +4 220 518 306 388 +4 245 239 206 391 +4 589 597 259 569 +4 402 240 228 244 +4 206 228 240 588 +4 237 260 259 391 +4 566 247 214 109 +4 196 391 219 245 +4 208 574 118 120 +4 329 96 253 252 +4 156 596 120 118 +4 497 596 120 156 +4 259 389 565 337 +4 404 175 202 201 +4 573 593 354 102 +4 297 110 102 538 +4 130 590 181 178 +4 118 187 596 141 +4 206 181 402 228 +4 386 497 120 2 +4 487 89 567 550 +4 476 357 297 124 +4 123 189 182 142 +4 374 182 111 587 +4 182 111 587 221 +4 519 199 195 167 +4 330 219 40 332 +4 40 219 237 332 +4 522 54 260 493 +4 223 263 94 243 +4 260 417 389 256 +4 113 133 128 115 +4 189 374 103 513 +4 384 519 103 111 +4 189 103 374 384 +4 54 493 169 473 +4 369 368 377 365 +4 200 205 180 590 +4 236 219 589 388 +4 388 589 391 219 +4 493 260 261 256 +4 111 376 199 167 +4 205 226 227 592 +4 205 201 238 588 +4 209 205 226 227 +4 200 205 201 238 +4 200 594 238 388 +4 205 226 238 200 +4 588 205 592 238 +4 222 169 391 510 +4 254 565 362 336 +4 124 297 538 110 +4 249 545 261 335 +4 256 249 261 335 +4 249 545 363 261 +4 357 593 475 351 +4 108 188 215 255 +4 248 288 573 278 +4 278 354 288 573 +4 120 591 142 123 +4 591 123 120 507 +4 167 195 217 231 +4 103 167 195 217 +4 391 589 240 597 +4 240 597 242 391 +4 404 518 245 219 +4 469 518 404 219 +4 354 356 102 405 +4 168 117 116 118 +4 547 356 459 102 +4 405 102 459 356 +4 565 361 362 336 +4 567 89 475 378 +4 89 550 378 567 +4 574 141 142 136 +4 200 180 183 134 +4 226 592 595 227 +4 209 595 227 226 +4 209 227 595 229 +4 595 214 592 566 +4 595 592 214 278 +4 108 137 121 381 +4 183 212 568 210 +4 388 254 262 589 +4 388 589 262 238 +4 353 356 370 83 +4 229 212 192 595 +4 595 192 248 482 +4 210 212 229 595 +4 213 229 212 192 +4 10 506 126 517 +4 212 213 192 568 +4 210 213 212 568 +4 254 423 340 362 +4 262 362 340 264 +4 196 219 391 40 +4 539 171 172 576 +4 108 255 121 188 +4 226 566 241 594 +4 381 564 121 146 +4 108 121 146 381 +4 130 178 181 136 +4 241 262 234 264 +4 272 106 347 368 +4 272 347 349 368 +4 112 131 364 585 +4 585 130 131 175 +4 337 336 361 565 +4 259 565 336 337 +4 99 250 375 105 +4 223 526 510 222 +4 408 123 108 591 +4 461 281 191 125 +4 497 122 384 596 +4 405 378 157 550 +4 329 252 538 124 +4 349 593 278 279 +4 279 593 368 349 +4 391 589 239 240 +4 273 19 146 282 +4 309 36 215 295 +4 189 123 182 395 +4 306 258 556 66 +4 46 442 527 98 +4 450 442 46 98 +4 563 379 100 276 +4 69 218 476 427 +4 24 517 428 383 +4 359 223 243 263 +4 538 338 356 77 +4 107 356 77 538 +4 145 476 471 124 +4 211 121 390 111 +4 373 113 128 115 +4 363 546 365 377 +4 126 174 200 590 +4 45 566 265 447 +4 447 566 265 203 +4 570 115 112 117 +4 373 494 570 498 +4 243 263 94 276 +4 224 243 94 276 +4 96 162 124 65 +4 54 256 260 493 +4 54 493 473 256 +4 328 70 389 256 +4 197 522 196 169 +4 233 242 224 223 +4 349 367 593 368 +4 169 510 493 391 +4 144 196 245 170 +4 510 257 493 261 +4 219 259 589 391 +4 137 233 121 381 +4 379 100 95 114 +4 583 379 114 100 +4 170 222 128 171 +4 573 354 593 278 +4 509 144 480 127 +4 210 184 229 213 +4 121 255 380 390 +4 559 263 261 510 +4 272 349 278 279 +4 382 279 248 573 +4 244 279 248 382 +4 258 234 262 340 +4 258 340 254 423 +4 371 475 280 476 +4 108 142 591 123 +4 120 591 574 142 +4 505 585 586 428 +4 108 188 123 147 +4 451 192 139 107 +4 235 452 138 216 +4 452 470 138 216 +4 549 91 378 157 +4 498 373 6 420 +4 6 494 373 498 +4 256 70 536 479 +4 447 441 203 265 +4 442 58 243 563 +4 442 58 563 533 +4 155 553 323 129 +4 576 129 172 553 +4 469 518 219 332 +4 236 52 332 518 +4 518 236 388 219 +4 582 43 518 306 +4 523 582 43 518 +4 512 513 13 103 +4 107 139 467 482 +4 521 33 177 534 +4 441 521 534 33 +4 32 146 15 286 +4 414 281 191 274 +4 17 191 461 274 +4 334 102 110 71 +4 267 271 572 251 +4 309 295 215 114 +4 300 289 243 527 +4 291 437 190 598 +4 190 462 564 598 +4 443 534 292 599 +4 453 480 22 12 +4 12 453 480 511 + +CELL_TYPES 2536 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 diff --git a/examples/pybullet/gym/pybullet_data/checker_grid.jpg b/examples/pybullet/gym/pybullet_data/checker_grid.jpg new file mode 100644 index 0000000000000000000000000000000000000000..416550484781b021736622428e21057e793c3683 GIT binary patch literal 32768 zcmeHQ3tUY3+yB+5QL$6HQGX`)P@7B1l1?G9Eo~waT9;IkTsF7OoQlY$bz7H^L93DL zDhYoYqYEn}mr_>KWfS7xjBcmq%sKCKrVIOjdq4jy(fhtn-3UhZ8O|<#5W_yj&mCCJYnLu z?o+3EOrPO7bN&LKg}#3Ni&p#?ymHm*HEY*zh}gI(a`Tp5yMNiUci;Z#1IJ>2Jsu}I z5q~lv@j}wYp==W%|8_hIKR;v-9YAiB|7n zQ)GtomS<}l^|3DMD`%#rnpx{67XG(p);zIy^U6n^IBKwY96f{~C3!?WR2!Ki_=4@{ z6QjMTDF+Mr3R~qM8o3@QMFNNWY7QF60DaHR6Uu^I$+-130vesaOQWivi$k%*#y7(k z4v|Hp^%3GyYyJhE@@Ib<{kpPBO&-I%nYo5Qj7#=lZ-0^U@jUS>aec`B7o2**d%r() zWWzw1Yt_RqSw9djHJW2jqr}k1c-76L_qpZOO&1ICr4d&Lzimt-KfXd=pGGd0FJJ`k zT`rMF*ovs{#R?36vY$rvp35Bg3soawX7eYH>~V%h<_R*M@{r~p8pVxX4ohJ2ZU_o? zZP>M8?S{Rl80W?Mn=k5%s})pl4;qEX(I}gv6w*kxHy5j0=D;P#gA>=7M5AL|1xBMH z%d_~~;!qwD9q|rED4NjvQUbARanvVE#lVsA+mWt%RrV))cT)a%9%q<8jwh1Bz z1}Sy1Jm%Y4fh%aV&j8_Ri=?ut(t0yIkw#RP{4yGSZO(bcdm^eCKzPFA$A`3dgcTlx z!MLr%(|YL0lfy|ztJEkf7h*uLX3TMy
tk->xX_|y~M<@O7lSL&JLGiI}{-bN2! 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 Di>7S% literal 0 HcmV?d00001 diff --git a/examples/pybullet/gym/pybullet_data/cloth_z_up.mtl b/examples/pybullet/gym/pybullet_data/cloth_z_up.mtl new file mode 100644 index 000000000..8b68eeec8 --- /dev/null +++ b/examples/pybullet/gym/pybullet_data/cloth_z_up.mtl @@ -0,0 +1,13 @@ +# Blender MTL File: 'None' +# Material Count: 1 + +newmtl None +Ns 94.117647 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.000000 +d 1.000000 +illum 2 +map_Kd cube.png diff --git a/examples/pybullet/gym/pybullet_data/cloth_z_up.obj b/examples/pybullet/gym/pybullet_data/cloth_z_up.obj new file mode 100644 index 000000000..45cc723a7 --- /dev/null +++ b/examples/pybullet/gym/pybullet_data/cloth_z_up.obj @@ -0,0 +1,89 @@ +# Blender v2.79 (sub 0) OBJ File: '' +# www.blender.org +mtllib cloth_z_up.mtl +o Plane_Plane.001 +v 1.000000 -0.500000 -0.000000 +v 0.500000 -1.000000 -0.000000 +v 0.500000 -0.500000 -0.000000 +v 0.000000 -0.500000 -0.000000 +v -0.500000 -1.000000 -0.000000 +v -0.500000 -0.500000 -0.000000 +v -0.000000 0.500000 0.000000 +v -0.500000 0.000000 -0.000000 +v -0.500000 0.500000 0.000000 +v 1.000000 0.500000 0.000000 +v 0.500000 0.000000 0.000000 +v 0.500000 0.500000 0.000000 +v 0.000000 0.000000 0.000000 +v 0.500000 1.000000 0.000000 +v -0.000000 1.000000 0.000000 +v 1.000000 1.000000 0.000000 +v -1.000000 0.000000 -0.000000 +v -1.000000 0.500000 0.000000 +v -0.500000 1.000000 0.000000 +v -1.000000 1.000000 0.000000 +v -1.000000 -1.000000 -0.000000 +v -1.000000 -0.500000 -0.000000 +v 0.000000 -1.000000 -0.000000 +v 1.000000 0.000000 0.000000 +v 1.000000 -1.000000 -0.000000 +vt 0.976031 1.084981 +vt 0.738016 1.669965 +vt 0.738016 1.084981 +vt 0.499998 1.084981 +vt 0.261984 1.669965 +vt 0.261984 1.084981 +vt 0.499998 -0.084982 +vt 0.261984 0.500000 +vt 0.261984 -0.084982 +vt 0.976031 -0.084982 +vt 0.738016 0.500000 +vt 0.738016 -0.084982 +vt 0.499998 0.500000 +vt 0.738016 -0.669965 +vt 0.499998 -0.669965 +vt 0.976031 -0.669965 +vt 0.023969 0.500000 +vt 0.023969 -0.084982 +vt 0.261984 -0.669965 +vt 0.023969 -0.669965 +vt 0.023969 1.669965 +vt 0.023969 1.084981 +vt 0.499998 1.669965 +vt 0.976031 0.500000 +vt 0.976031 1.669965 +vn 0.0000 0.0000 -1.0000 +usemtl None +s 1 +f 1/1/1 2/2/1 3/3/1 +f 4/4/1 5/5/1 6/6/1 +f 7/7/1 8/8/1 9/9/1 +f 10/10/1 11/11/1 12/12/1 +f 12/12/1 13/13/1 7/7/1 +f 14/14/1 7/7/1 15/15/1 +f 16/16/1 12/12/1 14/14/1 +f 9/9/1 17/17/1 18/18/1 +f 19/19/1 18/18/1 20/20/1 +f 15/15/1 9/9/1 19/19/1 +f 6/6/1 21/21/1 22/22/1 +f 8/8/1 22/22/1 17/17/1 +f 13/13/1 6/6/1 8/8/1 +f 3/3/1 23/23/1 4/4/1 +f 11/11/1 4/4/1 13/13/1 +f 24/24/1 3/3/1 11/11/1 +f 1/1/1 25/25/1 2/2/1 +f 4/4/1 23/23/1 5/5/1 +f 7/7/1 13/13/1 8/8/1 +f 10/10/1 24/24/1 11/11/1 +f 12/12/1 11/11/1 13/13/1 +f 14/14/1 12/12/1 7/7/1 +f 16/16/1 10/10/1 12/12/1 +f 9/9/1 8/8/1 17/17/1 +f 19/19/1 9/9/1 18/18/1 +f 15/15/1 7/7/1 9/9/1 +f 6/6/1 5/5/1 21/21/1 +f 8/8/1 6/6/1 22/22/1 +f 13/13/1 4/4/1 6/6/1 +f 3/3/1 2/2/1 23/23/1 +f 11/11/1 3/3/1 4/4/1 +f 24/24/1 1/1/1 3/3/1 diff --git a/examples/pybullet/gym/pybullet_data/cloth_z_up.urdf b/examples/pybullet/gym/pybullet_data/cloth_z_up.urdf new file mode 100644 index 000000000..72b61d2f6 --- /dev/null +++ b/examples/pybullet/gym/pybullet_data/cloth_z_up.urdf @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/pybullet/gym/pybullet_data/cube.urdf b/examples/pybullet/gym/pybullet_data/cube.urdf new file mode 100644 index 000000000..83207f9b6 --- /dev/null +++ b/examples/pybullet/gym/pybullet_data/cube.urdf @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/pybullet/gym/pybullet_data/cube_collisionfilter.urdf b/examples/pybullet/gym/pybullet_data/cube_collisionfilter.urdf new file mode 100644 index 000000000..1e4add6fe --- /dev/null +++ b/examples/pybullet/gym/pybullet_data/cube_collisionfilter.urdf @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/pybullet/gym/pybullet_data/pickup2.zip b/examples/pybullet/gym/pybullet_data/pickup2.zip new file mode 100644 index 0000000000000000000000000000000000000000..31405cfbdf624bd6aa4dba4fbe52b7d5d74f0522 GIT binary patch literal 387045 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

PR6l&IPAml|~q6 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%0Dy)jf&v)ig8!MgTeyTt!vKCI-gE$w5=>b{!TOxb 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

vK_F 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%0An`VKCO8F4V(e+X7$X14@#aB91z@k zCTF0J-atr#{3AMG85t}-GPO^Lx&;Y|5QhvhQgJpx2mZ?g&_KhOvseeIfL;zj$G$#5 zA>+6so&hd`D)rGAu}2XAoU1yO0Sos50*N>a$JlY~g(TJF3wAb`EY-0=FU#IH)ChGE zl?uJ_I??(TYQ@n!F32OmxFG0j#LmI`fs}<^8lM+Rv&GMzzKnG~zP!qT$}=*mK%wy^ zGd(Z`sA*@3p9S0~lQ2B0-CF(Q`f`h837RG^cK7o=KJVaqyx~O)-$$qp5Pcig_n`~C z;3aCHmHOHGSPSddn~0}NaJOXsS8=4S#%Q9SztdE$jybD-;jfa(x^Ni4k;y=68(zgO zVWiG1@&}o(f@`?b2^oYORO={J6(cp}lV*5utIew)J2BCb$qjv%pU?XDhm6$E*+BiR zATa@PC6ob5$tRC+Fc|_F+}tbOX`jp(KuCkU@fLq|01^xkyhA8FsRbsGYs6lF!wx&+ z*OD$sRde!b)b0v2w1(!S*9As&!lXiA>BF0Cx9Ob<I!!>=nGIt z5t4`}{#koEPWx0^0M@_o#$f0lXfmG+^b&aiZ%`Fxi@$&9!*>2+L7-tWe`P#L*W3Au z?e*?_Rt?)(N$il$cx@?vV(l%;A7Wh}J9xeFQnwmiy_wdkUJ3FhC`^LR9Yelsh6r+@ z>%N8;3t5cJb;E*7Kdq9~m4|tNb)VoZE%OIHW3N|jad6%oCet8mh`_}mD$m?RUZPI# zL3S$jthqkSF-g&v^*l0a?07mzorimI2AX+H`+(Z3vI zz}kj5${7y~j*H3w|5?Pp@T(pt-hi>5|HTj>Nj~Rpkd5EV@#!QOEu(W9Yx)Ew5jX_z zHWYS(U>c~8LZDsx<(`T!oSmlteMZ4HeMqX(fhy9Waz8#hCs9Qj03`;+0Du64ng7fO zc*){K@UY+Cec29IyRCYjw}y|jB;nV=h~Mghpht!pq_}#RK0#MS zTt@&vMgbaY-;e8LUCj4W%9M1ovy=y#?~R<-^`jVd!mt})#Q_C4HXW2c@8IxYIsgg$ zzR`GJ#2##*_iUR|aRdyAQjb2#;PFD&4>4W|&J-R~214&7PJ`Hju!@*HmGitdu?CHa zmm#vIKGZ^_kXR&ZmC6Vht8VWxn>8{J2i;@N0LCELC*61orBjk5q5qC107fWOqpeCI zK&0P8R-Usr;N&|VPx*2t2~lAahTi;Z6IIG7MHUG&w)9&%k!AhDoAKi;?ugkZ>JJYz zF^vs7|CiA1;yrTUhYAWY!)QQZg9Eq^@G^nH{J{Ehw(Z-{00u1i(|&XX@b2U8 za)*Mc%}?20-(1^>wRWd6z#Db}9{LDvPx9=*mpsm0mb;fpzN06JAN_vJ+n|HnyZ6sQ z8b>S?1-`}rC{Y6)i2;1{W>2@D+Qj4ug+R*CCTkm7Nhb(AWRgW6U^ArVqye>wmG|Rk z%{ufShQ&2-a8Mj&dXEVPe(dB01gQ_i`Km)Ob+L|K1u=f;=0W-bF@szh5CSkk(D?wO z2#i(*wNL$kDFQfA12FrqnPQm-;7oRpLj{oU(;KLBXF$wal|fyUZYw~r0oihgA5KH# zdBBp8-H7>-E5J5Cg#c76h35bvr3Ez%QU}jkrh&}bt29uk{f|f?y==uW<)sS1l+bM3 zckhBtG3L;t^Q~c`w~ao&zZTf&IxWB1Uic>^(0PK&(v*jI_Bm$uLX$ z>kX1|%m;=TWuzv)G1CP^0!&53_Eppsv+&P;fjWC$)LK*8$x8qcUnEj+VuWAXsY4ai zKJ1N5@9g}{V*pG3eXxcpGyRqjxHc8=U!CUmTog%gA6dHT6 zOYwh%wfCIe(?u4co~?bup^rLo0$|C>0Fze%6QFDpwLsALEpC3~)W|Jjw;A&U*m4yD z_*+8~f^Ueab4S}V_2&-1U;_l?qz@(_zjK1L__i0$5buQOgAkucXs#9?#Uuf57C!ckPGk-OU#1f7pH_Ou3jxMU|KxkS_FBBOjcIX^7cXBCXY`0|OFi&b)xWx#0bngy#SgyVStS-+0SKUKlt zcTmWCIpARx#UGku<%A*{^(779(7>btkiZP?62Mc)(j9Gkfr^izViEQP*A#BsG4l(@ zK(PLSK7d>Q;0}Pln}Bj(OP$Hwf5$`#)13qQ|HJ^^G50^{AY{iT4MjiHuC;5^DVq$$ z?)+Ks4fstEx8^3%xBizB1ROo9MF3O=A2UakOags3S1W6Nq0@NZiTG(+?c&)+(xtUqE_0J}G? z0QN^Pt1mnSaaN`>_du}U25_Ao{=b<&nrif~4o>cINLB5o-qKN+_rj5-2SY;Q-rjgk zj6MNd1HAWjEe}D%JK0BXngQw}g#aD}5UYobJ0zDKMyv_0QxeY=W!qkZBm>BJw9G?W zhC}{NJbRGxAd_Dg^5CDT2_6X0qxU3b^n5=cwCmn$pNZ^`=%8VVuzh-(;26jUj6&-a zk$~om&*t7*!&lS+*5FC`4?Wmok&aBKlPgoy4Kg_H?}xI{1ZZRW*Boz5_{uU1wI>Bp zvgZU}r4O4V!7p8nc!HE$Xjl|1e+Z->3^`=o0Nb0{**`ym5#ZXX}%{ zAaUMR?4|Rv|G=mp#ys`($VJMFisUzt508K#u+tF$KUFkbr}@xw`caDx>Vdj+IC4l2 z?EmB{HjMkU5$tNHwORV{w-x1~%>ipsV^N%giZ0@m@1+_>Hg(h5V|wo>1|G%=amvS- z`2D>s;LQNe%9TtNq4( zV!^x6R2shw18p#N});#+)2_FxJ} zlZh${V5P3lG6Ff1z}f*o^IjJ;t9;LWkbIm@>oA_=4&Jx6)rRgv>E?ZTt5@fwMF z0Gptae~?=1+~HwWAaVaY0C4>sTdadi87!d+tgA2L05D@S5CaNCm<>p4LFQ^2yoEay zkl3XTQ~jpb`{~)$y+}c}iICVZuh(PdcXT}vAcb^H3;x-f4{rmsSHp)tBv8c)^QKO z;jcmc^j%7R4_?etWvoL>pAuIauci3}E7Dm9!dZIdshOmA+0VA_Y@BNP02M7i5UJ>0 z9glzkl<|vIgwzn*ISsb*jd+t{&g%so4&vBz77nm(I;@A{?>>P#33aGeyPX5RcQz3R zf61MlTH_ha2Or&qDGKfZFmN}m&^fEu!0@Oet|x%(b3m6v$2y1PJ{!a<;-ABTYNr>q z>8LsEU|o+m0ITa^wl~1t?S|D~Iso(gYrTg-BiU9wrc(3d^JQCi8jT>9{OHU#hWN;wWp0}Skk?&$$!eT{>reFi}#J5BsrXOsz=2e!`G zQ4S^Ur2U8cuS`G_GAJ-e|Qe;V?r% zYye6G81@O|p_&cU*Kcw!cYw8fM+pCz^cLO+XzBbPdJ0n^rI7-Co`wFw+Wjom*KRE> zh}!@B_pF_7vu2=cF9W<;DA3M#JO>1|DothHeg=)#SjtXmvo_7D9WQ%IT1C7>W&0Mu2`mkib7RF^$R%H z_yCF_f@IBE6Um6EW{6Z1_%|X8z$GFe3m3@MdFxHY5$udQn>HUwti(kLy(E52Cl} zF``-R$t&r!{c!cK&`05U|CK?b#>92mvEeUR%<!)(j;LWpMy=vK_ zqFlHFdgZkvD9+V~ET`J@f)m%FO21B4Vd$T(Qkm>e70N>91T?G!)EPhcsa(L2*`Url z=85}ZOt50*k@0lTh_w$+6v#+MK0t)}EA^><2oLm?_`A5uh%`|Pyhx+8cIkY;!O?hg zC>rmBwyOzRW+DwUPa$NG^fe`%#=k$7G|6SFJ9(R}G9J27e$=d0(_8@LT_M%Xdh~47 z9Eh=sECapnGeqYjzUn%@k@%Jl-%N+jE4hJ4GA$B?h6%9LV8jW7%bU%_g_uZYg>}Y;%K|lFv4tL3sb%dBJ zUxnW+|Gdc_GBSwAb*w>6@ujTzV{pHEbn*wMZ)oV`;nC<@<(%LudyymzeF}wF-dg0t zuo8_p3j3lG_dLefGs= zQUP=L!0clia^ptCKJH_&w<}wyv%b8D)+_t&(8gek=`OjRMZ^)A+!zSE{aK zqT%g+hau{-ua9mpOZRQpHZ*68{qbNhpzYcAvtSI`kF0ocxI%2pRKKMZ#xIX}67 zTgLR4DaVKDc@Xid+zU`aAYy|)dUhbz9#|N_bmIh1WJNMKLQ46{W@Ck_Dl`H=x1Vyl;l|HY!%cXJ&x0@oh* zQ~Yn@y{@v-U{E6>+Zg+x311AUI(06P&L~RDMs9X1-FDzr=QBXQqXbX`pf5%hFwR;w zDu7W?D;$vx<#gj?M##B-LZm}D`Nbbm41M}2{?@UPTE>ss0Y*9IgFFD-Cu2YrsR<^L z2EEGIJ;Hi+`!D!b+pW#doIlpi8U(}8BKNoVuAuFHX9t-qE3Yl=$JQ>Be$r-!;7Imm zeD6?tA>+JV*5~ukVeHhX$~pF-dsdAa={+Q=EByh{+&D3F?J)*>18Y^YPVB){0kj2d zY(Fr~PFfww9nq|sC)5e=hYxC!pXP;FyGI_=Ut>zbZ`Xjn&h=0|sL2oE91jCI5^1o^m9-D$Xz$g3=(F;f5S0w^}d=c2Y-K*%+!cbOW z{?fPehk7^bgB@?X-tMkH+<)F5nvBL@km;zu|5R3G1037K=*!wK~=M?`- zW&SQ=+AnJYy4t1Of0TR7*+oEbWeUNeLKbm#%&>vmM_MNZ2y_Xe{0)Z<`a>+dz2tC1 zvDO|qO@IRfm>;*nhU_6a1i zfyPJtlpHkT6T@Ck=kuE^y7OC<0e9QBpo?aOGEk3NmrZ@?qKQiIkR|J9wl8y~;0}OU_=3&A>|9q4pw`IH39@3FO2TIdn+jCYfoMtQyy+?dOC zyZ>xX|19K|BYHPS0rQ(SI>3ud0|?F6-|wtJ0G#1|jK{av6maP1JMdqvDqi=)7WCd0 z6MfC*X1*K=v#u9|7Kk=c`0mK}F=Xs@r_9GRrma(fu&yw9w;fy(4B*r8UyJB;Lcf6AoUE! z{>Ti+KV&n{GC@pQZK36kTskI)?lkeh@=)8E=D-68LIR`^{Uv7p@MW8f#HC=uq496* zK$nQ}fXv6O=Q>ju5c!Bf=36*LVa+i=KZNH0l?w%lSpnS7w*7p&+hS*I&kO-*XRlje zfQ$>|!UqK0>nMX722-}WH+Fl8`x{-@;MZe%C#}FVC$ef}!&dutn6=M8P{C^+A zvLT1uKIQ(`3*1EECK+fe^;%^)^h#p^A^v10%ySek690xTk8f$B-Y)Q+KCUw7J)Hz* zu?&Gnl)wd%&PToc2B`(HFgQNp9K3?eRFg3R7|3sTX5ZyKMyHyf-D9$`L~`4Z=aYeHF|7S2h3}S6q9r zPw~Im<%pmQ-gx1O0t)?=dk6D_933EwAIp2$JJi`I^9u~n^Ll^S@(24rMQcnrkRhv@ zFy`a(|}dLeo6{gwDOHGly4uJKqur#=uN&ua~Mp$32h*d$<} zB?C3+x1bIX2k9TZrmB_#xHN&^eMX@F1;szh|8GCNzq-3R+j4pc*OwhsK>ZSC<3D8W z;#Q-}NwTgkGSoSPcbhZM;{k)3Rnk=7n4>;Q^8aYr1mKDGf8sC@TK&m?8d!mvldP?Q z+(ODa^#vdE0fv+Xi~yPyK`jHZ?8Ku5^sBH3CsSKS>hk{6c6$@k`LyphsoH_c=vx|bjQf*U#e z7qJ9z71_bO2zYgoLkF(16rtUB`KDvmy;I4*%a7=byzz*55^Ai1NJbF9mwIr)YO*+yZ24MU|fLq|m5B${B3 z`B1;$Yj^HN`jkiNz%0A!)9qksF|75#oM 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

rij7@Yb2w=0r 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%0AOF{hq!w?q1 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 + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/pybullet/gym/pybullet_data/sphere_transparent.urdf b/examples/pybullet/gym/pybullet_data/sphere_transparent.urdf new file mode 100644 index 000000000..3dfd98034 --- /dev/null +++ b/examples/pybullet/gym/pybullet_data/sphere_transparent.urdf @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/pybullet/gym/pybullet_data/stone.mtl b/examples/pybullet/gym/pybullet_data/stone.mtl new file mode 100644 index 000000000..70d3ba1da --- /dev/null +++ b/examples/pybullet/gym/pybullet_data/stone.mtl @@ -0,0 +1,10 @@ +# Blender MTL File: 'None' +# Material Count: 1 + +newmtl None +Ns 0 +Ka 0.000000 0.000000 0.000000 +Kd 0.8 0.8 0.8 +Ks 0.8 0.8 0.8 +d 1 +illum 2 diff --git a/examples/pybullet/gym/pybullet_data/stone.obj b/examples/pybullet/gym/pybullet_data/stone.obj new file mode 100644 index 000000000..0fbe8c5f3 --- /dev/null +++ b/examples/pybullet/gym/pybullet_data/stone.obj @@ -0,0 +1,32 @@ +# Blender v2.78 (sub 0) OBJ File: '' +# www.blender.org +mtllib stone.mtl +o Cube +v -0.246350 -0.246483 -0.000624 +v -0.151407 -0.176325 0.172867 +v -0.246350 0.249205 -0.000624 +v -0.151407 0.129477 0.172867 +v 0.249338 -0.246483 -0.000624 +v 0.154395 -0.176325 0.172867 +v 0.249338 0.249205 -0.000624 +v 0.154395 0.129477 0.172867 +vn -0.8772 0.0000 0.4801 +vn 0.0000 0.8230 0.5680 +vn 0.8772 0.0000 0.4801 +vn 0.0000 -0.9271 0.3749 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 0.0000 1.0000 +usemtl None +s off +f 1//1 4//1 3//1 +f 4//2 7//2 3//2 +f 8//3 5//3 7//3 +f 6//4 1//4 5//4 +f 7//5 1//5 3//5 +f 4//6 6//6 8//6 +f 1//1 2//1 4//1 +f 4//2 8//2 7//2 +f 8//3 6//3 5//3 +f 6//4 2//4 1//4 +f 7//5 5//5 1//5 +f 4//6 2//6 6//6 diff --git a/examples/pybullet/gym/pybullet_data/teddy_large.urdf b/examples/pybullet/gym/pybullet_data/teddy_large.urdf new file mode 100644 index 000000000..2dc7d7879 --- /dev/null +++ b/examples/pybullet/gym/pybullet_data/teddy_large.urdf @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/pybullet/gym/pybullet_data/terrain.obj b/examples/pybullet/gym/pybullet_data/terrain.obj new file mode 100644 index 000000000..d8f4e204a --- /dev/null +++ b/examples/pybullet/gym/pybullet_data/terrain.obj @@ -0,0 +1,2583 @@ +o Terrain +v -15.0 -15.0 0.0 +v -14.0 -15.0 0.0811990914301 +v -13.0 -15.0 0.0877441126682 +v -12.0 -15.0 0.0136176013718 +v -11.0 -15.0 -0.073028869825 +v -10.0 -15.0 -0.0925329348946 +v -9.0 -15.0 -0.0269626463596 +v -8.0 -15.0 0.0633969748938 +v -7.0 -15.0 0.0954697098 +v -6.0 -15.0 0.0397680337972 +v -5.0 -15.0 -0.0524961890791 +v -4.0 -15.0 -0.0964956578146 +v -3.0 -15.0 -0.0517774637679 +v -2.0 -15.0 0.040544691683 +v -1.0 -15.0 0.095590244582 +v 0.0 -15.0 0.0627505674493 +v 1.0 -15.0 -0.0277816920072 +v 2.0 -15.0 -0.0927715919541 +v 3.0 -15.0 -0.0724677180965 +v 4.0 -15.0 0.014462641577 +v 5.0 -15.0 0.0880961152825 +v 6.0 -15.0 0.0807344268734 +v 7.0 -15.0 -0.000854121277292 +v 8.0 -15.0 -0.0816573942646 +v 9.0 -15.0 -0.0873852355474 +v 10.0 -15.0 -0.0127714942656 +v 11.0 -15.0 0.0735842999452 +v 12.0 -15.0 0.0922870281378 +v 13.0 -15.0 0.0261414882639 +v 14.0 -15.0 -0.0640384153622 +v -15.0 -14.0 0.0 +v -14.0 -14.0 0.025293990381 +v -13.0 -14.0 0.0273328026549 +v -12.0 -14.0 0.00424196221958 +v -11.0 -14.0 -0.0227489187176 +v -10.0 -14.0 -0.0288245486979 +v -9.0 -14.0 -0.0083990215365 +v -8.0 -14.0 0.0197485272914 +v -7.0 -14.0 0.0297393712026 +v -6.0 -14.0 0.0123879743803 +v -5.0 -14.0 -0.0163528689572 +v -4.0 -14.0 -0.0300589599906 +v -3.0 -14.0 -0.0161289818326 +v -2.0 -14.0 0.0126299078397 +v -1.0 -14.0 0.0297769184899 +v 0.0 -14.0 0.0195471676038 +v 1.0 -14.0 -0.00865415903086 +v 2.0 -14.0 -0.0288988917633 +v 3.0 -14.0 -0.0225741166826 +v 4.0 -14.0 0.00450519717018 +v 5.0 -14.0 0.0274424535215 +v 6.0 -14.0 0.0251492446625 +v 7.0 -14.0 -0.000266063757506 +v 8.0 -14.0 -0.0254367543859 +v 9.0 -14.0 -0.0272210103395 +v 10.0 -14.0 -0.00397839492308 +v 11.0 -14.0 0.0229219384383 +v 12.0 -14.0 0.0287479473094 +v 13.0 -14.0 0.00814322600223 +v 14.0 -14.0 -0.019948339737 +v -15.0 -13.0 -0.0 +v -14.0 -13.0 -0.0538662887752 +v -13.0 -13.0 -0.0582081600676 +v -12.0 -13.0 -0.00903371743454 +v -11.0 -13.0 0.0484462833468 +v -10.0 -13.0 0.0613849946405 +v -9.0 -13.0 0.0178866249532 +v -8.0 -13.0 -0.0420566252277 +v -7.0 -13.0 -0.0633332081283 +v -6.0 -13.0 -0.0263815315518 +v -5.0 -13.0 0.0348252034688 +v -4.0 -13.0 0.0640138070248 +v -3.0 -13.0 0.034348411617 +v -2.0 -13.0 -0.0268967550256 +v -1.0 -13.0 -0.0634131691385 +v 0.0 -13.0 -0.0416278079902 +v 1.0 -13.0 0.0184299678478 +v 2.0 -13.0 0.0615433162407 +v 3.0 -13.0 0.0480740235034 +v 4.0 -13.0 -0.00959430473812 +v 5.0 -13.0 -0.0584416734499 +v 6.0 -13.0 -0.0535580371094 +v 7.0 -13.0 0.000566611553914 +v 8.0 -13.0 0.0541703201676 +v 9.0 -13.0 0.0579700862384 +v 10.0 -13.0 0.00847242236439 +v 11.0 -13.0 -0.0488147475589 +v 12.0 -13.0 -0.0612218636973 +v 13.0 -13.0 -0.0173418806915 +v 14.0 -13.0 0.0424821474459 +v -15.0 -12.0 -0.0 +v -14.0 -12.0 -0.0835021504486 +v -13.0 -12.0 -0.0902328088647 +v -12.0 -12.0 -0.0140038389405 +v -11.0 -12.0 0.0751001959236 +v -10.0 -12.0 0.0951574569978 +v -9.0 -12.0 0.0277273909493 +v -8.0 -12.0 -0.0651951104665 +v -7.0 -12.0 -0.0981775279821 +v -6.0 -12.0 -0.0408959790398 +v -5.0 -12.0 0.0539851444302 +v -4.0 -12.0 0.0992325750764 +v -3.0 -12.0 0.0532460338318 +v -2.0 -12.0 -0.0416946653611 +v -1.0 -12.0 -0.0983014815058 +v 0.0 -12.0 -0.0645303688945 +v 1.0 -12.0 0.0285696672813 +v 2.0 -12.0 0.0954028831145 +v 3.0 -12.0 0.0745231281852 +v 4.0 -12.0 -0.0148728471166 +v 5.0 -12.0 -0.090594795369 +v 6.0 -12.0 -0.0830243065584 +v 7.0 -12.0 0.000878346815729 +v 8.0 -12.0 0.0839734521782 +v 9.0 -12.0 0.0898637528715 +v 10.0 -12.0 0.0131337336026 +v 11.0 -12.0 -0.0756713797712 +v 12.0 -12.0 -0.0949045755598 +v 13.0 -12.0 -0.0268829422536 +v 14.0 -12.0 0.0658547441835 +v -15.0 -11.0 -0.0 +v -14.0 -11.0 -0.0363665200894 +v -13.0 -11.0 -0.0392978293215 +v -12.0 -11.0 -0.00609889550654 +v -11.0 -11.0 0.0327073347106 +v -10.0 -11.0 0.0414425922324 +v -9.0 -11.0 0.0120757215781 +v -8.0 -11.0 -0.0283935118051 +v -7.0 -11.0 -0.0427578813781 +v -6.0 -11.0 -0.0178108520001 +v -5.0 -11.0 0.0235113925678 +v -4.0 -11.0 0.0432173712372 +v -3.0 -11.0 0.0231894980982 +v -2.0 -11.0 -0.0181586926484 +v -1.0 -11.0 -0.0428118651172 +v 0.0 -11.0 -0.0281040062343 +v 1.0 -11.0 0.0124425463722 +v 2.0 -11.0 0.0415494792258 +v 3.0 -11.0 0.0324560124944 +v 4.0 -11.0 -0.00647736244572 +v 5.0 -11.0 -0.0394554802252 +v 6.0 -11.0 -0.0361584114439 +v 7.0 -11.0 0.000382534065867 +v 8.0 -11.0 0.0365717795196 +v 9.0 -11.0 0.0391370995424 +v 10.0 -11.0 0.00571995073592 +v 11.0 -11.0 -0.0329560943983 +v 12.0 -11.0 -0.0413324583275 +v 13.0 -11.0 -0.0117079506848 +v 14.0 -11.0 0.0286807928235 +v -15.0 -10.0 0.0 +v -14.0 -10.0 0.0442043211272 +v -13.0 -10.0 0.0477673932687 +v -12.0 -10.0 0.0074133443296 +v -11.0 -10.0 -0.0397564991977 +v -10.0 -10.0 -0.0503744007092 +v -9.0 -10.0 -0.014678310522 +v -8.0 -10.0 0.0345129506666 +v -7.0 -10.0 0.0519731641769 +v -6.0 -10.0 0.0216494902296 +v -5.0 -10.0 -0.0285786251931 +v -4.0 -10.0 -0.0525316844103 +v -3.0 -10.0 -0.028187355243 +v -2.0 -10.0 0.0220722983421 +v -1.0 -10.0 0.0520387826231 +v 0.0 -10.0 0.0341610501495 +v 1.0 -10.0 -0.0151241942898 +v 2.0 -10.0 -0.0505043242479 +v 3.0 -10.0 -0.0394510114051 +v 4.0 -10.0 0.00787337938586 +v 5.0 -10.0 0.0479590214794 +v 6.0 -10.0 0.0439513603991 +v 7.0 -10.0 -0.000464978740008 +v 8.0 -10.0 -0.0444538185699 +v 9.0 -10.0 -0.047572022616 +v 10.0 -10.0 -0.00695272845849 +v 11.0 -10.0 0.0400588721796 +v 12.0 -10.0 0.0502405304767 +v 13.0 -10.0 0.0142312767496 +v 14.0 -10.0 -0.0348621471902 +v -15.0 -9.0 0.0 +v -14.0 -9.0 0.0841339133581 +v -13.0 -9.0 0.0909154947782 +v -12.0 -9.0 0.0141097895775 +v -11.0 -9.0 -0.0756683910902 +v -10.0 -9.0 -0.0958774019522 +v -9.0 -9.0 -0.0279371716207 +v -8.0 -9.0 0.06568836546 +v -7.0 -9.0 0.0989203222742 +v -6.0 -9.0 0.0412053909839 +v -5.0 -9.0 -0.0543935867486 +v -4.0 -9.0 -0.0999833516733 +v -3.0 -9.0 -0.0536488841664 +v -2.0 -9.0 0.0420101200285 +v -1.0 -9.0 0.0990452136089 +v 0.0 -9.0 0.0650185945676 +v 1.0 -9.0 -0.0287858204705 +v 2.0 -9.0 -0.0961246849206 +v 3.0 -9.0 -0.0750869573564 +v 4.0 -9.0 0.01498537252 +v 5.0 -9.0 0.0912802200102 +v 6.0 -9.0 0.0836524541833 +v 7.0 -9.0 -0.000884992236678 +v 8.0 -9.0 -0.0846087808756 +v 9.0 -9.0 -0.0905436465708 +v 10.0 -9.0 -0.0132331011723 +v 11.0 -9.0 0.0762438964165 +v 12.0 -9.0 0.0956226072567 +v 13.0 -9.0 0.0270863339714 +v 14.0 -9.0 -0.0663529898522 +v -15.0 -8.0 0.0 +v -14.0 -8.0 0.0467111736511 +v -13.0 -8.0 0.0504763096669 +v -12.0 -8.0 0.00783375935847 +v -11.0 -8.0 -0.0420111131769 +v -10.0 -8.0 -0.0532311620017 +v -9.0 -8.0 -0.0155107259701 +v -8.0 -8.0 0.036470199987 +v -7.0 -8.0 0.054920592267 +v -6.0 -8.0 0.022877245296 +v -5.0 -8.0 -0.0301993354963 +v -4.0 -8.0 -0.0555107865047 +v -3.0 -8.0 -0.0297858764018 +v -2.0 -8.0 0.0233240311003 +v -1.0 -8.0 0.054989931973 +v 0.0 -8.0 0.0360983429888 +v 1.0 -8.0 -0.0159818960633 +v 2.0 -8.0 -0.0533684535791 +v 3.0 -8.0 -0.0416883009955 +v 4.0 -8.0 0.00831988326787 +v 5.0 -8.0 0.0506788052239 +v 6.0 -8.0 0.0464438673744 +v 7.0 -8.0 -0.000491347952298 +v 8.0 -8.0 -0.0469748202376 +v 9.0 -8.0 -0.0502698594319 +v 10.0 -8.0 -0.00734702169588 +v 11.0 -8.0 0.0423306339048 +v 12.0 -8.0 0.0530896999111 +v 13.0 -8.0 0.0150383406549 +v 14.0 -8.0 -0.0368391996466 +v -15.0 -7.0 -0.0 +v -14.0 -7.0 -0.0336576036912 +v -13.0 -7.0 -0.0363705617687 +v -12.0 -7.0 -0.0056445930875 +v -11.0 -7.0 0.030270988447 +v -10.0 -7.0 0.0383555628051 +v -9.0 -7.0 0.011176209606 +v -8.0 -7.0 -0.0262784991632 +v -7.0 -7.0 -0.0395728769912 +v -6.0 -7.0 -0.0164841342132 +v -5.0 -7.0 0.0217600455399 +v -4.0 -7.0 0.0399981397752 +v -3.0 -7.0 0.0214621287621 +v -2.0 -7.0 -0.0168060644573 +v -1.0 -7.0 -0.0396228395197 +v 0.0 -7.0 -0.0260105586578 +v 1.0 -7.0 0.0115157098802 +v 2.0 -7.0 0.0384544878618 +v 3.0 -7.0 0.0300383870452 +v 4.0 -7.0 -0.00599486829166 +v 5.0 -7.0 -0.0365164693679 +v 6.0 -7.0 -0.0334649969117 +v 7.0 -7.0 0.000354039373458 +v 8.0 -7.0 0.0338475734914 +v 9.0 -7.0 0.0362218046374 +v 10.0 -7.0 0.00529387564521 +v 11.0 -7.0 -0.0305012182012 +v 12.0 -7.0 -0.038253632697 +v 13.0 -7.0 -0.0108358337068 +v 14.0 -7.0 0.0265443808214 +v -15.0 -6.0 -0.0 +v -14.0 -6.0 -0.0830817354197 +v -13.0 -6.0 -0.0897785064456 +v -12.0 -6.0 -0.0139333326802 +v -11.0 -6.0 0.0747220828946 +v -10.0 -6.0 0.0946783600546 +v -9.0 -6.0 0.0275877896121 +v -8.0 -6.0 -0.0648668673722 +v -7.0 -6.0 -0.0976832256433 +v -6.0 -6.0 -0.0406900767473 +v -5.0 -6.0 0.0537133410583 +v -4.0 -6.0 0.0987329608067 +v -3.0 -6.0 0.0529779517197 +v -2.0 -6.0 -0.041484741858 +v -1.0 -6.0 -0.0978065550882 +v 0.0 -6.0 -0.0642054726283 +v 1.0 -6.0 0.0284258252673 +v 2.0 -6.0 0.0949225505046 +v 3.0 -6.0 0.0741479205657 +v 4.0 -6.0 -0.0147979655906 +v 5.0 -6.0 -0.0901386704272 +v 6.0 -6.0 -0.0826062973688 +v 7.0 -6.0 0.000873924531993 +v 8.0 -6.0 0.0835506642484 +v 9.0 -6.0 0.0894113085685 +v 10.0 -6.0 0.0130676081321 +v 11.0 -6.0 -0.0752903909566 +v 12.0 -6.0 -0.0944267518192 +v 13.0 -6.0 -0.0267475925305 +v 14.0 -6.0 0.0655231799779 +v -15.0 -5.0 -0.0 +v -14.0 -5.0 -0.0561209027544 +v -13.0 -5.0 -0.0606445063313 +v -12.0 -5.0 -0.00941183046358 +v -11.0 -5.0 0.0504740389274 +v -10.0 -5.0 0.0639543097015 +v -9.0 -5.0 0.0186352830764 +v -8.0 -5.0 -0.0438169368681 +v -7.0 -5.0 -0.0659840671283 +v -6.0 -5.0 -0.0274857503718 +v -5.0 -5.0 0.0362828385194 +v -4.0 -5.0 0.0666931530028 +v -3.0 -5.0 0.0357860901866 +v -2.0 -5.0 -0.0280225389111 +v -1.0 -5.0 -0.0660673749666 +v 0.0 -5.0 -0.043370171163 +v 1.0 -5.0 0.019201367996 +v 2.0 -5.0 0.0641192579711 +v 3.0 -5.0 0.0500861978687 +v 4.0 -5.0 -0.00999588156985 +v 5.0 -5.0 -0.0608877935915 +v 6.0 -5.0 -0.0557997489836 +v 7.0 -5.0 0.000590327506123 +v 8.0 -5.0 0.0564376596091 +v 9.0 -5.0 0.0603964677431 +v 10.0 -5.0 0.00882704196665 +v 11.0 -5.0 -0.0508579254859 +v 12.0 -5.0 -0.0637843507901 +v 13.0 -5.0 -0.0180677381344 +v 14.0 -5.0 0.0442602696384 +v -15.0 -4.0 0.0 +v -14.0 -4.0 0.0224372290885 +v -13.0 -4.0 0.0242457732276 +v -12.0 -4.0 0.00376286527637 +v -11.0 -4.0 -0.0201796036566 +v -10.0 -4.0 -0.0255690380507 +v -9.0 -4.0 -0.00745041677866 +v -8.0 -4.0 0.0175180833204 +v -7.0 -4.0 0.0263805384034 +v -6.0 -4.0 0.0109888481385 +v -5.0 -4.0 -0.0145059384273 +v -4.0 -4.0 -0.0266640321006 +v -3.0 -4.0 -0.0143073376281 +v -2.0 -4.0 0.011203457078 +v -1.0 -4.0 0.026413845014 +v 0.0 -4.0 0.0173394656578 +v 1.0 -4.0 -0.00767673845917 +v 2.0 -4.0 -0.0256349846398 +v 3.0 -4.0 -0.0200245441644 +v 4.0 -4.0 0.00399636986785 +v 5.0 -4.0 0.0243430398738 +v 6.0 -4.0 0.0223088312835 +v 7.0 -4.0 -0.000236013906442 +v 8.0 -4.0 -0.0225638689992 +v 9.0 -4.0 -0.0241466069927 +v 10.0 -4.0 -0.0035290658749 +v 11.0 -4.0 0.0203330821332 +v 12.0 -4.0 0.0255010881988 +v 13.0 -4.0 0.00722351137877 +v 14.0 -4.0 -0.01769532849 +v -15.0 -3.0 0.0 +v -14.0 -3.0 0.0803666759821 +v -13.0 -3.0 0.0868446006961 +v -12.0 -3.0 0.0134780000346 +v -11.0 -3.0 -0.0722802117018 +v -10.0 -3.0 -0.0915843301368 +v -9.0 -3.0 -0.0266862378068 +v -8.0 -3.0 0.0627470584929 +v -7.0 -3.0 0.0944909985871 +v -6.0 -3.0 0.0393603503479 +v -5.0 -3.0 -0.0519580224816 +v -4.0 -3.0 -0.0955064290582 +v -3.0 -3.0 -0.0512466652092 +v -2.0 -3.0 0.0401290462971 +v -1.0 -3.0 0.0946102977024 +v 0.0 -3.0 0.0621072777179 +v 1.0 -3.0 -0.0274968869781 +v 2.0 -3.0 -0.0918205405947 +v 3.0 -3.0 -0.0717248126407 +v 4.0 -3.0 0.0143143772792 +v 5.0 -3.0 0.0871929947428 +v 6.0 -3.0 0.0799067749509 +v 7.0 -3.0 -0.000845365221858 +v 8.0 -3.0 -0.0808202805083 +v 9.0 -3.0 -0.0864894026172 +v 10.0 -3.0 -0.0126405668262 +v 11.0 -3.0 0.0728299478099 +v 12.0 -3.0 0.091340944302 +v 13.0 -3.0 0.0258734978433 +v 14.0 -3.0 -0.0633819232109 +v -15.0 -2.0 0.0 +v -14.0 -2.0 0.0644073716076 +v -13.0 -2.0 0.069598902789 +v -12.0 -2.0 0.010801523718 +v -11.0 -2.0 -0.0579267264456 +v -10.0 -2.0 -0.0733974114579 +v -9.0 -2.0 -0.0213868548653 +v -8.0 -2.0 0.0502866774599 +v -7.0 -2.0 0.0757268704374 +v -6.0 -2.0 0.031544127967 +v -5.0 -2.0 -0.041640140283 +v -4.0 -2.0 -0.0765406555902 +v -3.0 -2.0 -0.0410700451331 +v -2.0 -2.0 0.0321601754151 +v -1.0 -2.0 0.0758224790009 +v 0.0 -2.0 0.0497739450665 +v 1.0 -2.0 -0.0220365244177 +v 2.0 -2.0 -0.073586714979 +v 3.0 -2.0 -0.0574816191511 +v 4.0 -2.0 0.0114718122342 +v 5.0 -2.0 0.0698781123564 +v 6.0 -2.0 0.0640387982375 +v 7.0 -2.0 -0.000677491650899 +v 8.0 -2.0 -0.0647708988399 +v 9.0 -2.0 -0.0693142403418 +v 10.0 -2.0 -0.0101303889324 +v 11.0 -2.0 0.0583672953427 +v 12.0 -2.0 0.0732023574543 +v 13.0 -2.0 0.0207355097124 +v 14.0 -2.0 -0.0507954700324 +v -15.0 -1.0 -0.0 +v -14.0 -1.0 -0.010767773193 +v -13.0 -1.0 -0.0116357053705 +v -12.0 -1.0 -0.00180582369116 +v -11.0 -1.0 0.00968432396188 +v -10.0 -1.0 0.0122707488259 +v -9.0 -1.0 0.00357550380886 +v -8.0 -1.0 -0.00840704292078 +v -7.0 -1.0 -0.0126601931601 +v -6.0 -1.0 -0.00527362019352 +v -5.0 -1.0 0.00696149485846 +v -4.0 -1.0 0.0127962436421 +v -3.0 -1.0 0.00686618503415 +v -2.0 -1.0 -0.00537661242922 +v -1.0 -1.0 -0.0126761772207 +v 0.0 -1.0 -0.00832132313463 +v 1.0 -1.0 0.00368411706564 +v 2.0 -1.0 0.0123023970259 +v 3.0 -1.0 0.009609909896 +v 4.0 -1.0 -0.00191788407395 +v 5.0 -1.0 -0.0116823842711 +v 6.0 -1.0 -0.0107061542455 +v 7.0 -1.0 0.000113264619483 +v 8.0 -1.0 0.0108285485156 +v 9.0 -1.0 0.0115881148449 +v 10.0 -1.0 0.00169362182712 +v 11.0 -1.0 -0.00975797928799 +v 12.0 -1.0 -0.0122381392469 +v 13.0 -1.0 -0.00346661042133 +v 14.0 -1.0 0.00849210403857 +v -15.0 0.0 -0.0 +v -14.0 0.0 -0.0760430769782 +v -13.0 0.0 -0.0821724996732 +v -12.0 0.0 -0.0127529051266 +v -11.0 0.0 0.0683916515804 +v -10.0 0.0 0.0866572392286 +v -9.0 0.0 0.0252505607704 +v -8.0 0.0 -0.0593713668112 +v -7.0 0.0 -0.0894075335517 +v -6.0 0.0 -0.0372428262687 +v -5.0 0.0 0.0491627637316 +v -4.0 0.0 0.0903683354828 +v -3.0 0.0 0.048489676346 +v -2.0 0.0 -0.0379701676017 +v -1.0 0.0 -0.0895204145648 +v 0.0 0.0 -0.0587660052216 +v 1.0 0.0 0.026017598309 +v 2.0 0.0 0.0868807419406 +v 3.0 0.0 0.0678661321031 +v 4.0 0.0 -0.0135442866093 +v 5.0 0.0 -0.0825021506758 +v 6.0 0.0 -0.0756079178891 +v 7.0 0.0 0.000799885921059 +v 8.0 0.0 0.0764722783042 +v 9.0 0.0 0.0818364106845 +v 10.0 0.0 0.0119605244894 +v 11.0 0.0 -0.0689118127625 +v 12.0 0.0 -0.0864269471636 +v 13.0 0.0 -0.0244815449208 +v 14.0 0.0 0.0599720768198 +v -15.0 1.0 -0.0 +v -14.0 1.0 -0.0714047264802 +v -13.0 1.0 -0.0771602767342 +v -12.0 1.0 -0.0119750244017 +v -11.0 1.0 0.0642200101401 +v -10.0 1.0 0.0813714635249 +v -9.0 1.0 0.0237103686086 +v -8.0 1.0 -0.0557499298605 +v -7.0 1.0 -0.0839539999198 +v -6.0 1.0 -0.0349711496265 +v -5.0 1.0 0.0461640143556 +v -4.0 1.0 0.0848561964355 +v -3.0 1.0 0.045531982847 +v -2.0 1.0 -0.0356541257895 +v -1.0 1.0 -0.0840599956026 +v 0.0 1.0 -0.0551814931211 +v 1.0 1.0 0.0244306196534 +v 2.0 1.0 0.0815813333861 +v 3.0 1.0 0.0637265454353 +v 4.0 1.0 -0.0127181344988 +v 5.0 1.0 -0.0774698202273 +v 6.0 1.0 -0.0709961105093 +v 7.0 1.0 0.000751095795676 +v 8.0 1.0 0.0718077480899 +v 9.0 1.0 0.0768446879487 +v 10.0 1.0 0.0112309760949 +v 11.0 1.0 -0.0647084433863 +v 12.0 1.0 -0.0811552184364 +v 13.0 1.0 -0.0229882599225 +v 14.0 1.0 0.0563139987483 +v -15.0 2.0 -0.0 +v -14.0 2.0 -0.00111719975608 +v -13.0 2.0 -0.00120725120865 +v -12.0 2.0 -0.000187361467513 +v -11.0 2.0 0.0010047875428 +v -10.0 2.0 0.00127313952008 +v -9.0 2.0 0.000370972893979 +v -8.0 2.0 -0.000872264500013 +v -7.0 2.0 -0.00131354593535 +v -6.0 2.0 -0.00054715929545 +v -5.0 2.0 0.000722283077329 +v -4.0 2.0 0.00132766171979 +v -3.0 2.0 0.000712394299903 +v -2.0 2.0 -0.000557845153941 +v -1.0 2.0 -0.00131520434589 +v 0.0 2.0 -0.0008633707276 +v 1.0 2.0 0.000382241956004 +v 2.0 2.0 0.00127642314806 +v 3.0 2.0 0.000997066784313 +v 4.0 2.0 -0.000198988182719 +v 5.0 2.0 -0.00121209433224 +v 6.0 2.0 -0.00111080654256 +v 7.0 2.0 1.17516596042e-05 +v 8.0 2.0 0.00112350544012 +v 9.0 2.0 0.0012023135003 +v 10.0 2.0 0.000175720073058 +v 11.0 2.0 -0.00101242957898 +v 12.0 2.0 -0.00126975614516 +v 13.0 2.0 -0.000359674767263 +v 14.0 2.0 0.000881089932935 +v -15.0 3.0 0.0 +v -14.0 3.0 0.0701974752715 +v -13.0 3.0 0.0758557155106 +v -12.0 3.0 0.0117725607358 +v -11.0 3.0 -0.0631342320875 +v -10.0 3.0 -0.0799957030881 +v -9.0 3.0 -0.0233094935885 +v -8.0 3.0 0.0548073568191 +v -7.0 3.0 0.0825345761243 +v -6.0 3.0 0.0343798867685 +v -5.0 3.0 -0.0453835119313 +v -4.0 3.0 -0.0834215190582 +v -3.0 3.0 -0.0447621662811 +v -2.0 3.0 0.0350513157436 +v -1.0 3.0 0.082638779721 +v 0.0 3.0 0.0542485307312 +v 1.0 3.0 -0.0240175672329 +v 2.0 3.0 -0.0802020246458 +v 3.0 3.0 -0.0626491104699 +v 4.0 3.0 0.0125031069508 +v 5.0 3.0 0.076160025502 +v 6.0 3.0 0.0697957678366 +v 7.0 3.0 -0.000738396898112 +v 8.0 3.0 -0.07059368293 +v 9.0 3.0 -0.0755454624355 +v 10.0 3.0 -0.0110410921735 +v 11.0 3.0 0.0636144073142 +v 12.0 3.0 0.0797831140901 +v 13.0 3.0 0.0225995937103 +v 14.0 3.0 -0.0553618889034 +v -15.0 4.0 0.0 +v -14.0 4.0 0.0769729152667 +v -13.0 4.0 0.083177287216 +v -12.0 4.0 0.0129088448906 +v -11.0 4.0 -0.069227929895 +v -10.0 4.0 -0.0877168651961 +v -9.0 4.0 -0.025559319163 +v -8.0 4.0 0.0600973470358 +v -7.0 4.0 0.090500789523 +v -6.0 4.0 0.0376982234885 +v -5.0 4.0 -0.049763915367 +v -4.0 4.0 -0.0914733399322 +v -3.0 4.0 -0.0490825976146 +v -2.0 4.0 0.0384344585939 +v -1.0 4.0 0.0906150508207 +v 0.0 4.0 0.0594845832157 +v 1.0 4.0 -0.0263357358706 +v 2.0 4.0 -0.0879431008509 +v 3.0 4.0 -0.0686959844793 +v 4.0 4.0 0.0137099032148 +v 5.0 4.0 0.0835109691197 +v 6.0 4.0 0.0765324351465 +v 7.0 4.0 -0.000809666752996 +v 8.0 4.0 -0.0774073647737 +v 9.0 4.0 -0.0828370886039 +v 10.0 4.0 -0.0121067751944 +v 11.0 4.0 0.0697544514955 +v 12.0 4.0 0.0874837571696 +v 13.0 4.0 0.024780899954 +v 14.0 4.0 -0.0607054023964 +v -15.0 5.0 0.0 +v -14.0 5.0 0.0129798119445 +v -13.0 5.0 0.0140260446467 +v -12.0 5.0 0.00217679658514 +v -11.0 5.0 -0.011673788218 +v -10.0 5.0 -0.0147915459699 +v -9.0 5.0 -0.00431002457182 +v -8.0 5.0 0.0101341135409 +v -7.0 5.0 0.0152609944 +v -6.0 5.0 0.0063569873874 +v -5.0 5.0 -0.00839160451241 +v -4.0 5.0 -0.0154249939234 +v -3.0 5.0 -0.0082767150572 +v -2.0 5.0 0.00648113746255 +v -1.0 5.0 0.0152802620885 +v 0.0 5.0 0.0100307842189 +v 1.0 5.0 -0.0044409504023 +v 2.0 5.0 -0.0148296957041 +v 3.0 5.0 -0.0115840871662 +v 4.0 5.0 0.00231187768956 +v 5.0 5.0 0.0140823128593 +v 6.0 5.0 0.0129055345301 +v 7.0 5.0 -0.000136532729145 +v 8.0 5.0 -0.0130530724268 +v 9.0 5.0 -0.0139686775326 +v 10.0 5.0 -0.00204154493477 +v 11.0 5.0 0.0117625746611 +v 12.0 5.0 0.0147522373594 +v 13.0 5.0 0.00417876106294 +v 14.0 5.0 -0.0102366488834 +v -15.0 6.0 -0.0 +v -14.0 6.0 -0.06294687062 +v -13.0 6.0 -0.0680206786864 +v -12.0 6.0 -0.0105565884619 +v -11.0 6.0 0.0566131805103 +v -10.0 6.0 0.0717330524063 +v -9.0 6.0 0.020901886734 +v -8.0 6.0 -0.0491463772076 +v -7.0 6.0 -0.0740096885947 +v -6.0 6.0 -0.0308288336009 +v -5.0 6.0 0.0406959088311 +v -4.0 6.0 0.0748050203626 +v -3.0 6.0 0.0401387411537 +v -2.0 6.0 -0.0314309115625 +v -1.0 6.0 -0.0741031291393 +v 0.0 6.0 -0.0486452715295 +v 1.0 6.0 0.0215368243854 +v 2.0 6.0 0.0719180632825 +v 3.0 6.0 0.0561781664648 +v 4.0 6.0 -0.0112116775217 +v 5.0 6.0 -0.0682935569001 +v 6.0 6.0 -0.0625866550164 +v 7.0 6.0 0.000662128856229 +v 8.0 6.0 0.063302154512 +v 9.0 6.0 0.0677424712422 +v 10.0 6.0 0.00990067232282 +v 11.0 6.0 -0.0570437590709 +v 12.0 6.0 -0.0715424214456 +v 13.0 6.0 -0.020265311478 +v 14.0 6.0 0.0496436324042 +v -15.0 7.0 -0.0 +v -14.0 7.0 -0.0810004906309 +v -13.0 7.0 -0.0875295037286 +v -12.0 7.0 -0.0135842947613 +v -11.0 7.0 0.0728502521624 +v -10.0 7.0 0.0923066132141 +v -9.0 7.0 0.0268966997705 +v -8.0 7.0 -0.0632419154016 +v -7.0 7.0 -0.0952362052085 +v -6.0 7.0 -0.039670767151 +v -5.0 7.0 0.0523677912741 +v -4.0 7.0 0.0962596439082 +v -3.0 7.0 0.0516508238572 +v -2.0 7.0 -0.0404455254481 +v -1.0 7.0 -0.0953564451805 +v 0.0 7.0 -0.0625970889728 +v 1.0 7.0 0.0277137421553 +v 2.0 7.0 0.0925446865542 +v 3.0 7.0 0.0722904729269 +v 4.0 7.0 -0.0144272681248 +v 5.0 7.0 -0.0878806453974 +v 6.0 7.0 -0.0805369625739 +v 7.0 7.0 0.00085203222475 +v 8.0 7.0 0.0814576725253 +v 9.0 7.0 0.0871715043674 +v 10.0 7.0 0.0127402571061 +v 11.0 7.0 -0.0734043237839 +v 12.0 7.0 -0.0920613079083 +v 13.0 7.0 -0.0260775501043 +v 14.0 7.0 0.0638817870028 +v -15.0 8.0 -0.0 +v -14.0 8.0 -0.0245826331086 +v -13.0 8.0 -0.0265641067058 +v -12.0 8.0 -0.00412266310431 +v -11.0 8.0 0.0221091379426 +v -10.0 8.0 0.0280138995266 +v -9.0 8.0 0.00816281107856 +v -8.0 8.0 -0.0191931282304 +v -7.0 8.0 -0.028902993958 +v -6.0 8.0 -0.0120395803336 +v -5.0 8.0 0.0158929679261 +v -4.0 8.0 0.0292135947687 +v -3.0 8.0 0.0156753773063 +v -2.0 8.0 -0.0122747097608 +v -1.0 8.0 -0.0289394852816 +v 0.0 8.0 -0.0189974314958 +v 1.0 8.0 0.00841077319611 +v 2.0 8.0 0.0280861517997 +v 3.0 8.0 0.0219392519646 +v 4.0 8.0 -0.00437849494873 +v 5.0 8.0 -0.0266706737987 +v 6.0 8.0 -0.0244419581562 +v 7.0 8.0 0.000258581095183 +v 8.0 8.0 0.0247213820802 +v 9.0 8.0 0.0264554583892 +v 10.0 8.0 0.00386650826074 +v 11.0 8.0 -0.0222772917313 +v 12.0 8.0 -0.0279394524426 +v 13.0 8.0 -0.00791420942754 +v 14.0 8.0 0.0193873212369 +v -15.0 9.0 0.0 +v -14.0 9.0 0.0544363839251 +v -13.0 9.0 0.0588242075157 +v -12.0 9.0 0.00912932599811 +v -11.0 9.0 -0.0489590157401 +v -10.0 9.0 -0.062034664193 +v -9.0 9.0 -0.0180759284743 +v -8.0 9.0 0.0425017325222 +v -7.0 9.0 0.0640034966446 +v -6.0 9.0 0.0266607411192 +v -5.0 9.0 -0.0351937768389 +v -4.0 9.0 -0.0646912986757 +v -3.0 9.0 -0.0347119388493 +v -2.0 9.0 0.0271814174729 +v -1.0 9.0 0.064084303924 +v 0.0 9.0 0.0420683768873 +v 1.0 9.0 -0.0186250218513 +v 2.0 9.0 -0.0621946613935 +v 3.0 9.0 -0.0485828160759 +v 4.0 9.0 0.00969584629077 +v 5.0 9.0 0.0590601922924 +v 6.0 9.0 0.0541248698704 +v 7.0 9.0 -0.000572608300787 +v 8.0 9.0 -0.054743633041 +v 9.0 9.0 -0.0585836140265 +v 10.0 9.0 -0.00856209044823 +v 11.0 9.0 0.049331379602 +v 12.0 9.0 0.0618698067495 +v 13.0 9.0 0.0175254188987 +v 14.0 9.0 -0.0429317582649 +v -15.0 10.0 0.0 +v -14.0 10.0 0.0834068406243 +v -13.0 10.0 0.090129816629 +v -12.0 10.0 0.0139878548799 +v -11.0 10.0 -0.0750144761375 +v -10.0 10.0 -0.095048843741 +v -9.0 10.0 -0.0276957427493 +v -8.0 10.0 0.0651206964007 +v -7.0 10.0 0.0980654675993 +v -6.0 10.0 0.0408493001393 +v -5.0 10.0 -0.0539235254827 +v -4.0 10.0 -0.0991193104569 +v -3.0 10.0 -0.0531852585092 +v -2.0 10.0 0.0416470748355 +v -1.0 10.0 0.0981892796417 +v 0.0 10.0 0.0644567135684 +v 1.0 10.0 -0.0285370577023 +v 2.0 10.0 -0.095293989727 +v 3.0 10.0 -0.0744380670674 +v 4.0 10.0 0.0148558711652 +v 5.0 10.0 0.0904913899599 +v 6.0 10.0 0.0829295421478 +v 7.0 10.0 -0.000877344265732 +v 8.0 10.0 -0.0838776044075 +v 9.0 10.0 -0.0897611818784 +v 10.0 10.0 -0.0131187426852 +v 11.0 10.0 0.0755850080326 +v 12.0 10.0 0.0947962509433 +v 13.0 10.0 0.0268522579121 +v 14.0 10.0 -0.065779577208 +v -15.0 11.0 0.0 +v -14.0 11.0 0.0356934327039 +v -13.0 11.0 0.0385704879885 +v -12.0 11.0 0.00598601449342 +v -11.0 11.0 -0.032101973121 +v -10.0 11.0 -0.0406755546938 +v -9.0 11.0 -0.0118522188661 +v -8.0 11.0 0.0278679923278 +v -7.0 11.0 0.0419664998953 +v -6.0 11.0 0.0174812009975 +v -5.0 11.0 -0.0230762334787 +v -4.0 11.0 -0.0424174853161 +v -3.0 11.0 -0.0227602967721 +v -2.0 11.0 0.0178226036597 +v -1.0 11.0 0.0420194844799 +v 0.0 11.0 0.0275838450521 +v 1.0 11.0 -0.0122122543072 +v 2.0 11.0 -0.0407804633762 +v 3.0 11.0 -0.0318553024858 +v 4.0 11.0 0.00635747660173 +v 5.0 11.0 0.0387252210207 +v 6.0 11.0 0.0354891758237 +v 7.0 11.0 -0.000375453958844 +v 8.0 11.0 -0.0358948931031 +v 9.0 11.0 -0.0384127330662 +v 10.0 11.0 -0.00561408339758 +v 11.0 11.0 0.0323461286561 +v 12.0 11.0 0.0405674591952 +v 13.0 11.0 0.0114912548366 +v 14.0 11.0 -0.0281499562241 +v -15.0 12.0 -0.0 +v -14.0 12.0 -0.0448363526358 +v -13.0 12.0 -0.0484503694317 +v -12.0 12.0 -0.0075193400124 +v -11.0 12.0 0.0403249359371 +v -10.0 12.0 0.051094651754 +v -9.0 12.0 0.0148881803833 +v -8.0 12.0 -0.0350064153714 +v -7.0 12.0 -0.052716274274 +v -6.0 12.0 -0.0219590337227 +v -5.0 12.0 0.028987241164 +v -4.0 12.0 0.053282780206 +v -3.0 12.0 0.0285903768527 +v -2.0 12.0 -0.0223878871277 +v -1.0 12.0 -0.0527828309299 +v 0.0 12.0 -0.0346494833957 +v 1.0 12.0 0.0153404393783 +v 2.0 12.0 0.0512264329339 +v 3.0 12.0 0.0400150802929 +v 4.0 12.0 -0.00798595263039 +v 5.0 12.0 -0.0486447375344 +v 6.0 12.0 -0.044579775086 +v 7.0 12.0 0.000471626986311 +v 8.0 12.0 0.0450894173824 +v 9.0 12.0 0.0482522053777 +v 10.0 12.0 0.0070521382751 +v 11.0 12.0 -0.040631632235 +v 12.0 12.0 -0.0509588674506 +v 13.0 12.0 -0.014434754941 +v 14.0 12.0 0.0353606046921 +v -15.0 13.0 -0.0 +v -14.0 13.0 -0.0841438021356 +v -13.0 13.0 -0.0909261806367 +v -12.0 13.0 -0.014111447988 +v -11.0 13.0 0.0756772848626 +v -10.0 13.0 0.0958886710142 +v -9.0 13.0 0.0279404552486 +v -8.0 13.0 -0.0656960862185 +v -7.0 13.0 -0.0989319489894 +v -6.0 13.0 -0.0412102341075 +v -5.0 13.0 0.0543999799621 +v -4.0 13.0 0.0999951033329 +v -3.0 13.0 0.0536551898505 +v -2.0 13.0 -0.0420150577369 +v -1.0 13.0 -0.0990568550033 +v 0.0 13.0 -0.0650262366038 +v 1.0 13.0 0.0287892038454 +v 2.0 13.0 0.0961359830474 +v 3.0 13.0 0.0750957827894 +v 4.0 13.0 -0.0149871338432 +v 5.0 13.0 -0.0912909487371 +v 6.0 13.0 -0.0836622863718 +v 7.0 13.0 0.000885096255271 +v 8.0 13.0 0.0846187254671 +v 9.0 13.0 0.0905542887237 +v 10.0 13.0 0.0132346565403 +v 11.0 13.0 -0.0762528578316 +v 12.0 13.0 -0.0956338463711 +v 13.0 13.0 -0.0270895175951 +v 14.0 13.0 0.0663607887281 +v -15.0 14.0 -0.0 +v -14.0 14.0 -0.0460898280009 +v -13.0 14.0 -0.0498048806919 +v -12.0 14.0 -0.00772955576175 +v -11.0 14.0 0.0414522870891 +v -10.0 14.0 0.0525230883572 +v -9.0 14.0 0.0153044044124 +v -8.0 14.0 -0.0359850783694 +v -7.0 14.0 -0.054190046052 +v -6.0 14.0 -0.0225729353046 +v -5.0 14.0 0.0297976280614 +v -4.0 14.0 0.0547723896066 +v -3.0 14.0 0.0293896687433 +v -2.0 14.0 -0.0230137780252 +v -1.0 14.0 -0.0542584634107 +v 0.0 14.0 -0.0356181677622 +v 1.0 14.0 0.0157693070653 +v 2.0 14.0 0.0526585537009 +v 3.0 14.0 0.0411337689112 +v 4.0 14.0 -0.00820921331732 +v 5.0 14.0 -0.0500046826806 +v 6.0 14.0 -0.0458260773958 +v 7.0 14.0 0.000484812108965 +v 8.0 14.0 0.0463499675966 +v 9.0 14.0 0.0496011766297 +v 10.0 14.0 0.00724929261704 +v 11.0 14.0 -0.0417675575959 +v 12.0 14.0 -0.0523835079761 +v 13.0 14.0 -0.014838302702 +v 14.0 14.0 0.036349169646 +f 1 2 32 +f 1 32 31 +f 31 32 62 +f 31 62 61 +f 61 62 92 +f 61 92 91 +f 91 92 122 +f 91 122 121 +f 121 122 152 +f 121 152 151 +f 151 152 182 +f 151 182 181 +f 181 182 212 +f 181 212 211 +f 211 212 242 +f 211 242 241 +f 241 242 272 +f 241 272 271 +f 271 272 302 +f 271 302 301 +f 301 302 332 +f 301 332 331 +f 331 332 362 +f 331 362 361 +f 361 362 392 +f 361 392 391 +f 391 392 422 +f 391 422 421 +f 421 422 452 +f 421 452 451 +f 451 452 482 +f 451 482 481 +f 481 482 512 +f 481 512 511 +f 511 512 542 +f 511 542 541 +f 541 542 572 +f 541 572 571 +f 571 572 602 +f 571 602 601 +f 601 602 632 +f 601 632 631 +f 631 632 662 +f 631 662 661 +f 661 662 692 +f 661 692 691 +f 691 692 722 +f 691 722 721 +f 721 722 752 +f 721 752 751 +f 751 752 782 +f 751 782 781 +f 781 782 812 +f 781 812 811 +f 811 812 842 +f 811 842 841 +f 841 842 872 +f 841 872 871 +f 2 3 33 +f 2 33 32 +f 32 33 63 +f 32 63 62 +f 62 63 93 +f 62 93 92 +f 92 93 123 +f 92 123 122 +f 122 123 153 +f 122 153 152 +f 152 153 183 +f 152 183 182 +f 182 183 213 +f 182 213 212 +f 212 213 243 +f 212 243 242 +f 242 243 273 +f 242 273 272 +f 272 273 303 +f 272 303 302 +f 302 303 333 +f 302 333 332 +f 332 333 363 +f 332 363 362 +f 362 363 393 +f 362 393 392 +f 392 393 423 +f 392 423 422 +f 422 423 453 +f 422 453 452 +f 452 453 483 +f 452 483 482 +f 482 483 513 +f 482 513 512 +f 512 513 543 +f 512 543 542 +f 542 543 573 +f 542 573 572 +f 572 573 603 +f 572 603 602 +f 602 603 633 +f 602 633 632 +f 632 633 663 +f 632 663 662 +f 662 663 693 +f 662 693 692 +f 692 693 723 +f 692 723 722 +f 722 723 753 +f 722 753 752 +f 752 753 783 +f 752 783 782 +f 782 783 813 +f 782 813 812 +f 812 813 843 +f 812 843 842 +f 842 843 873 +f 842 873 872 +f 3 4 34 +f 3 34 33 +f 33 34 64 +f 33 64 63 +f 63 64 94 +f 63 94 93 +f 93 94 124 +f 93 124 123 +f 123 124 154 +f 123 154 153 +f 153 154 184 +f 153 184 183 +f 183 184 214 +f 183 214 213 +f 213 214 244 +f 213 244 243 +f 243 244 274 +f 243 274 273 +f 273 274 304 +f 273 304 303 +f 303 304 334 +f 303 334 333 +f 333 334 364 +f 333 364 363 +f 363 364 394 +f 363 394 393 +f 393 394 424 +f 393 424 423 +f 423 424 454 +f 423 454 453 +f 453 454 484 +f 453 484 483 +f 483 484 514 +f 483 514 513 +f 513 514 544 +f 513 544 543 +f 543 544 574 +f 543 574 573 +f 573 574 604 +f 573 604 603 +f 603 604 634 +f 603 634 633 +f 633 634 664 +f 633 664 663 +f 663 664 694 +f 663 694 693 +f 693 694 724 +f 693 724 723 +f 723 724 754 +f 723 754 753 +f 753 754 784 +f 753 784 783 +f 783 784 814 +f 783 814 813 +f 813 814 844 +f 813 844 843 +f 843 844 874 +f 843 874 873 +f 4 5 35 +f 4 35 34 +f 34 35 65 +f 34 65 64 +f 64 65 95 +f 64 95 94 +f 94 95 125 +f 94 125 124 +f 124 125 155 +f 124 155 154 +f 154 155 185 +f 154 185 184 +f 184 185 215 +f 184 215 214 +f 214 215 245 +f 214 245 244 +f 244 245 275 +f 244 275 274 +f 274 275 305 +f 274 305 304 +f 304 305 335 +f 304 335 334 +f 334 335 365 +f 334 365 364 +f 364 365 395 +f 364 395 394 +f 394 395 425 +f 394 425 424 +f 424 425 455 +f 424 455 454 +f 454 455 485 +f 454 485 484 +f 484 485 515 +f 484 515 514 +f 514 515 545 +f 514 545 544 +f 544 545 575 +f 544 575 574 +f 574 575 605 +f 574 605 604 +f 604 605 635 +f 604 635 634 +f 634 635 665 +f 634 665 664 +f 664 665 695 +f 664 695 694 +f 694 695 725 +f 694 725 724 +f 724 725 755 +f 724 755 754 +f 754 755 785 +f 754 785 784 +f 784 785 815 +f 784 815 814 +f 814 815 845 +f 814 845 844 +f 844 845 875 +f 844 875 874 +f 5 6 36 +f 5 36 35 +f 35 36 66 +f 35 66 65 +f 65 66 96 +f 65 96 95 +f 95 96 126 +f 95 126 125 +f 125 126 156 +f 125 156 155 +f 155 156 186 +f 155 186 185 +f 185 186 216 +f 185 216 215 +f 215 216 246 +f 215 246 245 +f 245 246 276 +f 245 276 275 +f 275 276 306 +f 275 306 305 +f 305 306 336 +f 305 336 335 +f 335 336 366 +f 335 366 365 +f 365 366 396 +f 365 396 395 +f 395 396 426 +f 395 426 425 +f 425 426 456 +f 425 456 455 +f 455 456 486 +f 455 486 485 +f 485 486 516 +f 485 516 515 +f 515 516 546 +f 515 546 545 +f 545 546 576 +f 545 576 575 +f 575 576 606 +f 575 606 605 +f 605 606 636 +f 605 636 635 +f 635 636 666 +f 635 666 665 +f 665 666 696 +f 665 696 695 +f 695 696 726 +f 695 726 725 +f 725 726 756 +f 725 756 755 +f 755 756 786 +f 755 786 785 +f 785 786 816 +f 785 816 815 +f 815 816 846 +f 815 846 845 +f 845 846 876 +f 845 876 875 +f 6 7 37 +f 6 37 36 +f 36 37 67 +f 36 67 66 +f 66 67 97 +f 66 97 96 +f 96 97 127 +f 96 127 126 +f 126 127 157 +f 126 157 156 +f 156 157 187 +f 156 187 186 +f 186 187 217 +f 186 217 216 +f 216 217 247 +f 216 247 246 +f 246 247 277 +f 246 277 276 +f 276 277 307 +f 276 307 306 +f 306 307 337 +f 306 337 336 +f 336 337 367 +f 336 367 366 +f 366 367 397 +f 366 397 396 +f 396 397 427 +f 396 427 426 +f 426 427 457 +f 426 457 456 +f 456 457 487 +f 456 487 486 +f 486 487 517 +f 486 517 516 +f 516 517 547 +f 516 547 546 +f 546 547 577 +f 546 577 576 +f 576 577 607 +f 576 607 606 +f 606 607 637 +f 606 637 636 +f 636 637 667 +f 636 667 666 +f 666 667 697 +f 666 697 696 +f 696 697 727 +f 696 727 726 +f 726 727 757 +f 726 757 756 +f 756 757 787 +f 756 787 786 +f 786 787 817 +f 786 817 816 +f 816 817 847 +f 816 847 846 +f 846 847 877 +f 846 877 876 +f 7 8 38 +f 7 38 37 +f 37 38 68 +f 37 68 67 +f 67 68 98 +f 67 98 97 +f 97 98 128 +f 97 128 127 +f 127 128 158 +f 127 158 157 +f 157 158 188 +f 157 188 187 +f 187 188 218 +f 187 218 217 +f 217 218 248 +f 217 248 247 +f 247 248 278 +f 247 278 277 +f 277 278 308 +f 277 308 307 +f 307 308 338 +f 307 338 337 +f 337 338 368 +f 337 368 367 +f 367 368 398 +f 367 398 397 +f 397 398 428 +f 397 428 427 +f 427 428 458 +f 427 458 457 +f 457 458 488 +f 457 488 487 +f 487 488 518 +f 487 518 517 +f 517 518 548 +f 517 548 547 +f 547 548 578 +f 547 578 577 +f 577 578 608 +f 577 608 607 +f 607 608 638 +f 607 638 637 +f 637 638 668 +f 637 668 667 +f 667 668 698 +f 667 698 697 +f 697 698 728 +f 697 728 727 +f 727 728 758 +f 727 758 757 +f 757 758 788 +f 757 788 787 +f 787 788 818 +f 787 818 817 +f 817 818 848 +f 817 848 847 +f 847 848 878 +f 847 878 877 +f 8 9 39 +f 8 39 38 +f 38 39 69 +f 38 69 68 +f 68 69 99 +f 68 99 98 +f 98 99 129 +f 98 129 128 +f 128 129 159 +f 128 159 158 +f 158 159 189 +f 158 189 188 +f 188 189 219 +f 188 219 218 +f 218 219 249 +f 218 249 248 +f 248 249 279 +f 248 279 278 +f 278 279 309 +f 278 309 308 +f 308 309 339 +f 308 339 338 +f 338 339 369 +f 338 369 368 +f 368 369 399 +f 368 399 398 +f 398 399 429 +f 398 429 428 +f 428 429 459 +f 428 459 458 +f 458 459 489 +f 458 489 488 +f 488 489 519 +f 488 519 518 +f 518 519 549 +f 518 549 548 +f 548 549 579 +f 548 579 578 +f 578 579 609 +f 578 609 608 +f 608 609 639 +f 608 639 638 +f 638 639 669 +f 638 669 668 +f 668 669 699 +f 668 699 698 +f 698 699 729 +f 698 729 728 +f 728 729 759 +f 728 759 758 +f 758 759 789 +f 758 789 788 +f 788 789 819 +f 788 819 818 +f 818 819 849 +f 818 849 848 +f 848 849 879 +f 848 879 878 +f 9 10 40 +f 9 40 39 +f 39 40 70 +f 39 70 69 +f 69 70 100 +f 69 100 99 +f 99 100 130 +f 99 130 129 +f 129 130 160 +f 129 160 159 +f 159 160 190 +f 159 190 189 +f 189 190 220 +f 189 220 219 +f 219 220 250 +f 219 250 249 +f 249 250 280 +f 249 280 279 +f 279 280 310 +f 279 310 309 +f 309 310 340 +f 309 340 339 +f 339 340 370 +f 339 370 369 +f 369 370 400 +f 369 400 399 +f 399 400 430 +f 399 430 429 +f 429 430 460 +f 429 460 459 +f 459 460 490 +f 459 490 489 +f 489 490 520 +f 489 520 519 +f 519 520 550 +f 519 550 549 +f 549 550 580 +f 549 580 579 +f 579 580 610 +f 579 610 609 +f 609 610 640 +f 609 640 639 +f 639 640 670 +f 639 670 669 +f 669 670 700 +f 669 700 699 +f 699 700 730 +f 699 730 729 +f 729 730 760 +f 729 760 759 +f 759 760 790 +f 759 790 789 +f 789 790 820 +f 789 820 819 +f 819 820 850 +f 819 850 849 +f 849 850 880 +f 849 880 879 +f 10 11 41 +f 10 41 40 +f 40 41 71 +f 40 71 70 +f 70 71 101 +f 70 101 100 +f 100 101 131 +f 100 131 130 +f 130 131 161 +f 130 161 160 +f 160 161 191 +f 160 191 190 +f 190 191 221 +f 190 221 220 +f 220 221 251 +f 220 251 250 +f 250 251 281 +f 250 281 280 +f 280 281 311 +f 280 311 310 +f 310 311 341 +f 310 341 340 +f 340 341 371 +f 340 371 370 +f 370 371 401 +f 370 401 400 +f 400 401 431 +f 400 431 430 +f 430 431 461 +f 430 461 460 +f 460 461 491 +f 460 491 490 +f 490 491 521 +f 490 521 520 +f 520 521 551 +f 520 551 550 +f 550 551 581 +f 550 581 580 +f 580 581 611 +f 580 611 610 +f 610 611 641 +f 610 641 640 +f 640 641 671 +f 640 671 670 +f 670 671 701 +f 670 701 700 +f 700 701 731 +f 700 731 730 +f 730 731 761 +f 730 761 760 +f 760 761 791 +f 760 791 790 +f 790 791 821 +f 790 821 820 +f 820 821 851 +f 820 851 850 +f 850 851 881 +f 850 881 880 +f 11 12 42 +f 11 42 41 +f 41 42 72 +f 41 72 71 +f 71 72 102 +f 71 102 101 +f 101 102 132 +f 101 132 131 +f 131 132 162 +f 131 162 161 +f 161 162 192 +f 161 192 191 +f 191 192 222 +f 191 222 221 +f 221 222 252 +f 221 252 251 +f 251 252 282 +f 251 282 281 +f 281 282 312 +f 281 312 311 +f 311 312 342 +f 311 342 341 +f 341 342 372 +f 341 372 371 +f 371 372 402 +f 371 402 401 +f 401 402 432 +f 401 432 431 +f 431 432 462 +f 431 462 461 +f 461 462 492 +f 461 492 491 +f 491 492 522 +f 491 522 521 +f 521 522 552 +f 521 552 551 +f 551 552 582 +f 551 582 581 +f 581 582 612 +f 581 612 611 +f 611 612 642 +f 611 642 641 +f 641 642 672 +f 641 672 671 +f 671 672 702 +f 671 702 701 +f 701 702 732 +f 701 732 731 +f 731 732 762 +f 731 762 761 +f 761 762 792 +f 761 792 791 +f 791 792 822 +f 791 822 821 +f 821 822 852 +f 821 852 851 +f 851 852 882 +f 851 882 881 +f 12 13 43 +f 12 43 42 +f 42 43 73 +f 42 73 72 +f 72 73 103 +f 72 103 102 +f 102 103 133 +f 102 133 132 +f 132 133 163 +f 132 163 162 +f 162 163 193 +f 162 193 192 +f 192 193 223 +f 192 223 222 +f 222 223 253 +f 222 253 252 +f 252 253 283 +f 252 283 282 +f 282 283 313 +f 282 313 312 +f 312 313 343 +f 312 343 342 +f 342 343 373 +f 342 373 372 +f 372 373 403 +f 372 403 402 +f 402 403 433 +f 402 433 432 +f 432 433 463 +f 432 463 462 +f 462 463 493 +f 462 493 492 +f 492 493 523 +f 492 523 522 +f 522 523 553 +f 522 553 552 +f 552 553 583 +f 552 583 582 +f 582 583 613 +f 582 613 612 +f 612 613 643 +f 612 643 642 +f 642 643 673 +f 642 673 672 +f 672 673 703 +f 672 703 702 +f 702 703 733 +f 702 733 732 +f 732 733 763 +f 732 763 762 +f 762 763 793 +f 762 793 792 +f 792 793 823 +f 792 823 822 +f 822 823 853 +f 822 853 852 +f 852 853 883 +f 852 883 882 +f 13 14 44 +f 13 44 43 +f 43 44 74 +f 43 74 73 +f 73 74 104 +f 73 104 103 +f 103 104 134 +f 103 134 133 +f 133 134 164 +f 133 164 163 +f 163 164 194 +f 163 194 193 +f 193 194 224 +f 193 224 223 +f 223 224 254 +f 223 254 253 +f 253 254 284 +f 253 284 283 +f 283 284 314 +f 283 314 313 +f 313 314 344 +f 313 344 343 +f 343 344 374 +f 343 374 373 +f 373 374 404 +f 373 404 403 +f 403 404 434 +f 403 434 433 +f 433 434 464 +f 433 464 463 +f 463 464 494 +f 463 494 493 +f 493 494 524 +f 493 524 523 +f 523 524 554 +f 523 554 553 +f 553 554 584 +f 553 584 583 +f 583 584 614 +f 583 614 613 +f 613 614 644 +f 613 644 643 +f 643 644 674 +f 643 674 673 +f 673 674 704 +f 673 704 703 +f 703 704 734 +f 703 734 733 +f 733 734 764 +f 733 764 763 +f 763 764 794 +f 763 794 793 +f 793 794 824 +f 793 824 823 +f 823 824 854 +f 823 854 853 +f 853 854 884 +f 853 884 883 +f 14 15 45 +f 14 45 44 +f 44 45 75 +f 44 75 74 +f 74 75 105 +f 74 105 104 +f 104 105 135 +f 104 135 134 +f 134 135 165 +f 134 165 164 +f 164 165 195 +f 164 195 194 +f 194 195 225 +f 194 225 224 +f 224 225 255 +f 224 255 254 +f 254 255 285 +f 254 285 284 +f 284 285 315 +f 284 315 314 +f 314 315 345 +f 314 345 344 +f 344 345 375 +f 344 375 374 +f 374 375 405 +f 374 405 404 +f 404 405 435 +f 404 435 434 +f 434 435 465 +f 434 465 464 +f 464 465 495 +f 464 495 494 +f 494 495 525 +f 494 525 524 +f 524 525 555 +f 524 555 554 +f 554 555 585 +f 554 585 584 +f 584 585 615 +f 584 615 614 +f 614 615 645 +f 614 645 644 +f 644 645 675 +f 644 675 674 +f 674 675 705 +f 674 705 704 +f 704 705 735 +f 704 735 734 +f 734 735 765 +f 734 765 764 +f 764 765 795 +f 764 795 794 +f 794 795 825 +f 794 825 824 +f 824 825 855 +f 824 855 854 +f 854 855 885 +f 854 885 884 +f 15 16 46 +f 15 46 45 +f 45 46 76 +f 45 76 75 +f 75 76 106 +f 75 106 105 +f 105 106 136 +f 105 136 135 +f 135 136 166 +f 135 166 165 +f 165 166 196 +f 165 196 195 +f 195 196 226 +f 195 226 225 +f 225 226 256 +f 225 256 255 +f 255 256 286 +f 255 286 285 +f 285 286 316 +f 285 316 315 +f 315 316 346 +f 315 346 345 +f 345 346 376 +f 345 376 375 +f 375 376 406 +f 375 406 405 +f 405 406 436 +f 405 436 435 +f 435 436 466 +f 435 466 465 +f 465 466 496 +f 465 496 495 +f 495 496 526 +f 495 526 525 +f 525 526 556 +f 525 556 555 +f 555 556 586 +f 555 586 585 +f 585 586 616 +f 585 616 615 +f 615 616 646 +f 615 646 645 +f 645 646 676 +f 645 676 675 +f 675 676 706 +f 675 706 705 +f 705 706 736 +f 705 736 735 +f 735 736 766 +f 735 766 765 +f 765 766 796 +f 765 796 795 +f 795 796 826 +f 795 826 825 +f 825 826 856 +f 825 856 855 +f 855 856 886 +f 855 886 885 +f 16 17 47 +f 16 47 46 +f 46 47 77 +f 46 77 76 +f 76 77 107 +f 76 107 106 +f 106 107 137 +f 106 137 136 +f 136 137 167 +f 136 167 166 +f 166 167 197 +f 166 197 196 +f 196 197 227 +f 196 227 226 +f 226 227 257 +f 226 257 256 +f 256 257 287 +f 256 287 286 +f 286 287 317 +f 286 317 316 +f 316 317 347 +f 316 347 346 +f 346 347 377 +f 346 377 376 +f 376 377 407 +f 376 407 406 +f 406 407 437 +f 406 437 436 +f 436 437 467 +f 436 467 466 +f 466 467 497 +f 466 497 496 +f 496 497 527 +f 496 527 526 +f 526 527 557 +f 526 557 556 +f 556 557 587 +f 556 587 586 +f 586 587 617 +f 586 617 616 +f 616 617 647 +f 616 647 646 +f 646 647 677 +f 646 677 676 +f 676 677 707 +f 676 707 706 +f 706 707 737 +f 706 737 736 +f 736 737 767 +f 736 767 766 +f 766 767 797 +f 766 797 796 +f 796 797 827 +f 796 827 826 +f 826 827 857 +f 826 857 856 +f 856 857 887 +f 856 887 886 +f 17 18 48 +f 17 48 47 +f 47 48 78 +f 47 78 77 +f 77 78 108 +f 77 108 107 +f 107 108 138 +f 107 138 137 +f 137 138 168 +f 137 168 167 +f 167 168 198 +f 167 198 197 +f 197 198 228 +f 197 228 227 +f 227 228 258 +f 227 258 257 +f 257 258 288 +f 257 288 287 +f 287 288 318 +f 287 318 317 +f 317 318 348 +f 317 348 347 +f 347 348 378 +f 347 378 377 +f 377 378 408 +f 377 408 407 +f 407 408 438 +f 407 438 437 +f 437 438 468 +f 437 468 467 +f 467 468 498 +f 467 498 497 +f 497 498 528 +f 497 528 527 +f 527 528 558 +f 527 558 557 +f 557 558 588 +f 557 588 587 +f 587 588 618 +f 587 618 617 +f 617 618 648 +f 617 648 647 +f 647 648 678 +f 647 678 677 +f 677 678 708 +f 677 708 707 +f 707 708 738 +f 707 738 737 +f 737 738 768 +f 737 768 767 +f 767 768 798 +f 767 798 797 +f 797 798 828 +f 797 828 827 +f 827 828 858 +f 827 858 857 +f 857 858 888 +f 857 888 887 +f 18 19 49 +f 18 49 48 +f 48 49 79 +f 48 79 78 +f 78 79 109 +f 78 109 108 +f 108 109 139 +f 108 139 138 +f 138 139 169 +f 138 169 168 +f 168 169 199 +f 168 199 198 +f 198 199 229 +f 198 229 228 +f 228 229 259 +f 228 259 258 +f 258 259 289 +f 258 289 288 +f 288 289 319 +f 288 319 318 +f 318 319 349 +f 318 349 348 +f 348 349 379 +f 348 379 378 +f 378 379 409 +f 378 409 408 +f 408 409 439 +f 408 439 438 +f 438 439 469 +f 438 469 468 +f 468 469 499 +f 468 499 498 +f 498 499 529 +f 498 529 528 +f 528 529 559 +f 528 559 558 +f 558 559 589 +f 558 589 588 +f 588 589 619 +f 588 619 618 +f 618 619 649 +f 618 649 648 +f 648 649 679 +f 648 679 678 +f 678 679 709 +f 678 709 708 +f 708 709 739 +f 708 739 738 +f 738 739 769 +f 738 769 768 +f 768 769 799 +f 768 799 798 +f 798 799 829 +f 798 829 828 +f 828 829 859 +f 828 859 858 +f 858 859 889 +f 858 889 888 +f 19 20 50 +f 19 50 49 +f 49 50 80 +f 49 80 79 +f 79 80 110 +f 79 110 109 +f 109 110 140 +f 109 140 139 +f 139 140 170 +f 139 170 169 +f 169 170 200 +f 169 200 199 +f 199 200 230 +f 199 230 229 +f 229 230 260 +f 229 260 259 +f 259 260 290 +f 259 290 289 +f 289 290 320 +f 289 320 319 +f 319 320 350 +f 319 350 349 +f 349 350 380 +f 349 380 379 +f 379 380 410 +f 379 410 409 +f 409 410 440 +f 409 440 439 +f 439 440 470 +f 439 470 469 +f 469 470 500 +f 469 500 499 +f 499 500 530 +f 499 530 529 +f 529 530 560 +f 529 560 559 +f 559 560 590 +f 559 590 589 +f 589 590 620 +f 589 620 619 +f 619 620 650 +f 619 650 649 +f 649 650 680 +f 649 680 679 +f 679 680 710 +f 679 710 709 +f 709 710 740 +f 709 740 739 +f 739 740 770 +f 739 770 769 +f 769 770 800 +f 769 800 799 +f 799 800 830 +f 799 830 829 +f 829 830 860 +f 829 860 859 +f 859 860 890 +f 859 890 889 +f 20 21 51 +f 20 51 50 +f 50 51 81 +f 50 81 80 +f 80 81 111 +f 80 111 110 +f 110 111 141 +f 110 141 140 +f 140 141 171 +f 140 171 170 +f 170 171 201 +f 170 201 200 +f 200 201 231 +f 200 231 230 +f 230 231 261 +f 230 261 260 +f 260 261 291 +f 260 291 290 +f 290 291 321 +f 290 321 320 +f 320 321 351 +f 320 351 350 +f 350 351 381 +f 350 381 380 +f 380 381 411 +f 380 411 410 +f 410 411 441 +f 410 441 440 +f 440 441 471 +f 440 471 470 +f 470 471 501 +f 470 501 500 +f 500 501 531 +f 500 531 530 +f 530 531 561 +f 530 561 560 +f 560 561 591 +f 560 591 590 +f 590 591 621 +f 590 621 620 +f 620 621 651 +f 620 651 650 +f 650 651 681 +f 650 681 680 +f 680 681 711 +f 680 711 710 +f 710 711 741 +f 710 741 740 +f 740 741 771 +f 740 771 770 +f 770 771 801 +f 770 801 800 +f 800 801 831 +f 800 831 830 +f 830 831 861 +f 830 861 860 +f 860 861 891 +f 860 891 890 +f 21 22 52 +f 21 52 51 +f 51 52 82 +f 51 82 81 +f 81 82 112 +f 81 112 111 +f 111 112 142 +f 111 142 141 +f 141 142 172 +f 141 172 171 +f 171 172 202 +f 171 202 201 +f 201 202 232 +f 201 232 231 +f 231 232 262 +f 231 262 261 +f 261 262 292 +f 261 292 291 +f 291 292 322 +f 291 322 321 +f 321 322 352 +f 321 352 351 +f 351 352 382 +f 351 382 381 +f 381 382 412 +f 381 412 411 +f 411 412 442 +f 411 442 441 +f 441 442 472 +f 441 472 471 +f 471 472 502 +f 471 502 501 +f 501 502 532 +f 501 532 531 +f 531 532 562 +f 531 562 561 +f 561 562 592 +f 561 592 591 +f 591 592 622 +f 591 622 621 +f 621 622 652 +f 621 652 651 +f 651 652 682 +f 651 682 681 +f 681 682 712 +f 681 712 711 +f 711 712 742 +f 711 742 741 +f 741 742 772 +f 741 772 771 +f 771 772 802 +f 771 802 801 +f 801 802 832 +f 801 832 831 +f 831 832 862 +f 831 862 861 +f 861 862 892 +f 861 892 891 +f 22 23 53 +f 22 53 52 +f 52 53 83 +f 52 83 82 +f 82 83 113 +f 82 113 112 +f 112 113 143 +f 112 143 142 +f 142 143 173 +f 142 173 172 +f 172 173 203 +f 172 203 202 +f 202 203 233 +f 202 233 232 +f 232 233 263 +f 232 263 262 +f 262 263 293 +f 262 293 292 +f 292 293 323 +f 292 323 322 +f 322 323 353 +f 322 353 352 +f 352 353 383 +f 352 383 382 +f 382 383 413 +f 382 413 412 +f 412 413 443 +f 412 443 442 +f 442 443 473 +f 442 473 472 +f 472 473 503 +f 472 503 502 +f 502 503 533 +f 502 533 532 +f 532 533 563 +f 532 563 562 +f 562 563 593 +f 562 593 592 +f 592 593 623 +f 592 623 622 +f 622 623 653 +f 622 653 652 +f 652 653 683 +f 652 683 682 +f 682 683 713 +f 682 713 712 +f 712 713 743 +f 712 743 742 +f 742 743 773 +f 742 773 772 +f 772 773 803 +f 772 803 802 +f 802 803 833 +f 802 833 832 +f 832 833 863 +f 832 863 862 +f 862 863 893 +f 862 893 892 +f 23 24 54 +f 23 54 53 +f 53 54 84 +f 53 84 83 +f 83 84 114 +f 83 114 113 +f 113 114 144 +f 113 144 143 +f 143 144 174 +f 143 174 173 +f 173 174 204 +f 173 204 203 +f 203 204 234 +f 203 234 233 +f 233 234 264 +f 233 264 263 +f 263 264 294 +f 263 294 293 +f 293 294 324 +f 293 324 323 +f 323 324 354 +f 323 354 353 +f 353 354 384 +f 353 384 383 +f 383 384 414 +f 383 414 413 +f 413 414 444 +f 413 444 443 +f 443 444 474 +f 443 474 473 +f 473 474 504 +f 473 504 503 +f 503 504 534 +f 503 534 533 +f 533 534 564 +f 533 564 563 +f 563 564 594 +f 563 594 593 +f 593 594 624 +f 593 624 623 +f 623 624 654 +f 623 654 653 +f 653 654 684 +f 653 684 683 +f 683 684 714 +f 683 714 713 +f 713 714 744 +f 713 744 743 +f 743 744 774 +f 743 774 773 +f 773 774 804 +f 773 804 803 +f 803 804 834 +f 803 834 833 +f 833 834 864 +f 833 864 863 +f 863 864 894 +f 863 894 893 +f 24 25 55 +f 24 55 54 +f 54 55 85 +f 54 85 84 +f 84 85 115 +f 84 115 114 +f 114 115 145 +f 114 145 144 +f 144 145 175 +f 144 175 174 +f 174 175 205 +f 174 205 204 +f 204 205 235 +f 204 235 234 +f 234 235 265 +f 234 265 264 +f 264 265 295 +f 264 295 294 +f 294 295 325 +f 294 325 324 +f 324 325 355 +f 324 355 354 +f 354 355 385 +f 354 385 384 +f 384 385 415 +f 384 415 414 +f 414 415 445 +f 414 445 444 +f 444 445 475 +f 444 475 474 +f 474 475 505 +f 474 505 504 +f 504 505 535 +f 504 535 534 +f 534 535 565 +f 534 565 564 +f 564 565 595 +f 564 595 594 +f 594 595 625 +f 594 625 624 +f 624 625 655 +f 624 655 654 +f 654 655 685 +f 654 685 684 +f 684 685 715 +f 684 715 714 +f 714 715 745 +f 714 745 744 +f 744 745 775 +f 744 775 774 +f 774 775 805 +f 774 805 804 +f 804 805 835 +f 804 835 834 +f 834 835 865 +f 834 865 864 +f 864 865 895 +f 864 895 894 +f 25 26 56 +f 25 56 55 +f 55 56 86 +f 55 86 85 +f 85 86 116 +f 85 116 115 +f 115 116 146 +f 115 146 145 +f 145 146 176 +f 145 176 175 +f 175 176 206 +f 175 206 205 +f 205 206 236 +f 205 236 235 +f 235 236 266 +f 235 266 265 +f 265 266 296 +f 265 296 295 +f 295 296 326 +f 295 326 325 +f 325 326 356 +f 325 356 355 +f 355 356 386 +f 355 386 385 +f 385 386 416 +f 385 416 415 +f 415 416 446 +f 415 446 445 +f 445 446 476 +f 445 476 475 +f 475 476 506 +f 475 506 505 +f 505 506 536 +f 505 536 535 +f 535 536 566 +f 535 566 565 +f 565 566 596 +f 565 596 595 +f 595 596 626 +f 595 626 625 +f 625 626 656 +f 625 656 655 +f 655 656 686 +f 655 686 685 +f 685 686 716 +f 685 716 715 +f 715 716 746 +f 715 746 745 +f 745 746 776 +f 745 776 775 +f 775 776 806 +f 775 806 805 +f 805 806 836 +f 805 836 835 +f 835 836 866 +f 835 866 865 +f 865 866 896 +f 865 896 895 +f 26 27 57 +f 26 57 56 +f 56 57 87 +f 56 87 86 +f 86 87 117 +f 86 117 116 +f 116 117 147 +f 116 147 146 +f 146 147 177 +f 146 177 176 +f 176 177 207 +f 176 207 206 +f 206 207 237 +f 206 237 236 +f 236 237 267 +f 236 267 266 +f 266 267 297 +f 266 297 296 +f 296 297 327 +f 296 327 326 +f 326 327 357 +f 326 357 356 +f 356 357 387 +f 356 387 386 +f 386 387 417 +f 386 417 416 +f 416 417 447 +f 416 447 446 +f 446 447 477 +f 446 477 476 +f 476 477 507 +f 476 507 506 +f 506 507 537 +f 506 537 536 +f 536 537 567 +f 536 567 566 +f 566 567 597 +f 566 597 596 +f 596 597 627 +f 596 627 626 +f 626 627 657 +f 626 657 656 +f 656 657 687 +f 656 687 686 +f 686 687 717 +f 686 717 716 +f 716 717 747 +f 716 747 746 +f 746 747 777 +f 746 777 776 +f 776 777 807 +f 776 807 806 +f 806 807 837 +f 806 837 836 +f 836 837 867 +f 836 867 866 +f 866 867 897 +f 866 897 896 +f 27 28 58 +f 27 58 57 +f 57 58 88 +f 57 88 87 +f 87 88 118 +f 87 118 117 +f 117 118 148 +f 117 148 147 +f 147 148 178 +f 147 178 177 +f 177 178 208 +f 177 208 207 +f 207 208 238 +f 207 238 237 +f 237 238 268 +f 237 268 267 +f 267 268 298 +f 267 298 297 +f 297 298 328 +f 297 328 327 +f 327 328 358 +f 327 358 357 +f 357 358 388 +f 357 388 387 +f 387 388 418 +f 387 418 417 +f 417 418 448 +f 417 448 447 +f 447 448 478 +f 447 478 477 +f 477 478 508 +f 477 508 507 +f 507 508 538 +f 507 538 537 +f 537 538 568 +f 537 568 567 +f 567 568 598 +f 567 598 597 +f 597 598 628 +f 597 628 627 +f 627 628 658 +f 627 658 657 +f 657 658 688 +f 657 688 687 +f 687 688 718 +f 687 718 717 +f 717 718 748 +f 717 748 747 +f 747 748 778 +f 747 778 777 +f 777 778 808 +f 777 808 807 +f 807 808 838 +f 807 838 837 +f 837 838 868 +f 837 868 867 +f 867 868 898 +f 867 898 897 +f 28 29 59 +f 28 59 58 +f 58 59 89 +f 58 89 88 +f 88 89 119 +f 88 119 118 +f 118 119 149 +f 118 149 148 +f 148 149 179 +f 148 179 178 +f 178 179 209 +f 178 209 208 +f 208 209 239 +f 208 239 238 +f 238 239 269 +f 238 269 268 +f 268 269 299 +f 268 299 298 +f 298 299 329 +f 298 329 328 +f 328 329 359 +f 328 359 358 +f 358 359 389 +f 358 389 388 +f 388 389 419 +f 388 419 418 +f 418 419 449 +f 418 449 448 +f 448 449 479 +f 448 479 478 +f 478 479 509 +f 478 509 508 +f 508 509 539 +f 508 539 538 +f 538 539 569 +f 538 569 568 +f 568 569 599 +f 568 599 598 +f 598 599 629 +f 598 629 628 +f 628 629 659 +f 628 659 658 +f 658 659 689 +f 658 689 688 +f 688 689 719 +f 688 719 718 +f 718 719 749 +f 718 749 748 +f 748 749 779 +f 748 779 778 +f 778 779 809 +f 778 809 808 +f 808 809 839 +f 808 839 838 +f 838 839 869 +f 838 869 868 +f 868 869 899 +f 868 899 898 +f 29 30 60 +f 29 60 59 +f 59 60 90 +f 59 90 89 +f 89 90 120 +f 89 120 119 +f 119 120 150 +f 119 150 149 +f 149 150 180 +f 149 180 179 +f 179 180 210 +f 179 210 209 +f 209 210 240 +f 209 240 239 +f 239 240 270 +f 239 270 269 +f 269 270 300 +f 269 300 299 +f 299 300 330 +f 299 330 329 +f 329 330 360 +f 329 360 359 +f 359 360 390 +f 359 390 389 +f 389 390 420 +f 389 420 419 +f 419 420 450 +f 419 450 449 +f 449 450 480 +f 449 480 479 +f 479 480 510 +f 479 510 509 +f 509 510 540 +f 509 540 539 +f 539 540 570 +f 539 570 569 +f 569 570 600 +f 569 600 599 +f 599 600 630 +f 599 630 629 +f 629 630 660 +f 629 660 659 +f 659 660 690 +f 659 690 689 +f 689 690 720 +f 689 720 719 +f 719 720 750 +f 719 750 749 +f 749 750 780 +f 749 780 779 +f 779 780 810 +f 779 810 809 +f 809 810 840 +f 809 840 839 +f 839 840 870 +f 839 870 869 +f 869 870 900 +f 869 900 899 diff --git a/examples/pybullet/gym/pybullet_data/tex256.png b/examples/pybullet/gym/pybullet_data/tex256.png new file mode 100644 index 0000000000000000000000000000000000000000..130d4aadec279ee9e0791ad9c9c4fb35db117148 GIT binary patch literal 12089 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 literal 0 HcmV?d00001 diff --git a/examples/pybullet/gym/pybullet_data/torus.vtk b/examples/pybullet/gym/pybullet_data/torus.vtk new file mode 100644 index 000000000..a06ef2061 --- /dev/null +++ b/examples/pybullet/gym/pybullet_data/torus.vtk @@ -0,0 +1,9917 @@ +# vtk DataFile Version 2.0 +torus_, Created by Gmsh +ASCII +DATASET UNSTRUCTURED_GRID +POINTS 1036 double +-0.75 -2.18556941e-08 1.13246855e-07 +-0.71031338 -0.135160238 1.07254337e-07 +-0.710313141 0.135160565 1.07254301e-07 +-0.692909718 -2.18556941e-08 -0.287012398 +-0.692909598 -2.18556941e-08 0.287012607 +-0.65624404 -0.135160238 -0.271825016 +-0.6562439799999999 -0.135160238 0.271825194 +-0.656243861 0.135160565 -0.271824926 +-0.656243742 0.135160565 0.271825105 +-0.603853762 -0.227407992 9.11793805e-08 +-0.603853405 0.227408156 9.11793308e-08 +-0.558141589621361 -0.2272469457790709 -0.2307452454467901 +-0.557888091 -0.227407992 0.231084868 +-0.557887852 0.227408156 -0.23108457 +-0.557887793 0.227408156 0.231084719 +-0.530330241 -2.18556941e-08 -0.530329943 +-0.50226754 -0.135160238 -0.5022673010000001 +-0.50226742 -0.135160238 0.50226742 +-0.50226742 0.135160565 -0.502267122 +-0.502267241 0.135160565 0.502267241 +-0.464421362 -0.247455373 7.01256795e-08 +-0.464420974 0.247455314 7.01256155e-08 +-0.42906943 -0.247455373 -0.177726254 +-0.4296712671318722 -0.247455373 0.1747004492923097 +-0.429069072 0.247455314 -0.17772612 +-0.429069012 0.247455314 0.177726239 +-0.426989228 -0.227407992 -0.426988989 +-0.426989079 -0.227407992 0.426989079 +-0.426988959 0.227408156 -0.426988721 +-0.42698884 0.227408156 0.42698884 +-0.336284906 -0.18893747 5.07776079e-08 +-0.336284608 0.188937217 5.07775653e-08 +-0.328395605 -0.247455373 -0.328395396 +-0.328395486 -0.247455373 0.328395486 +-0.328395337 0.247455314 -0.328395128 +-0.328395218 0.247455314 0.328395218 +-0.310686767 -0.18893747 -0.128690585 +-0.310686737 -0.18893747 0.128690675 +-0.310686499 0.188937217 -0.128690481 +-0.310686469 0.188937217 0.128690571 +-0.287012696 -2.18556941e-08 -0.692909598 +-0.287012637 -2.18556941e-08 0.692909598 +-0.271825254 -0.135160238 -0.6562439799999999 +-0.271825224 -0.135160238 0.6562439799999999 +-0.271825165 0.135160565 -0.656243742 +-0.271825135 0.135160565 0.656243742 +-0.260126799 -0.07043330370000001 3.92780564e-08 +-0.26012671 0.07043293120000001 3.92780422e-08 +-0.240325853 -0.07043330370000001 -0.09954615679999999 +-0.240325823 -0.07043330370000001 0.0995462313 +-0.240325764 0.07043293120000001 -0.099546127 +-0.240325734 0.07043293120000001 0.0995461941 +-0.237789407 -0.18893747 -0.237789273 +-0.237789333 -0.18893747 0.237789333 +-0.237789199 0.188937217 -0.237789065 +-0.237789124 0.188937217 0.237789124 +-0.231084913 -0.227407992 -0.557888091 +-0.231084883 -0.227407992 0.557888091 +-0.231084779 0.227408156 -0.557887793 +-0.231084749 0.227408156 0.557887793 +-0.18393749 -0.07043330370000001 -0.183937371 +-0.183937415 -0.07043330370000001 0.183937415 +-0.183937415 0.07043293120000001 -0.183937311 +-0.1826027894390168 0.07043797995747503 0.1848329123509294 +-0.177726433 -0.247455373 -0.42906937 +-0.177726403 -0.247455373 0.42906937 +-0.177726284 0.247455314 -0.429069012 +-0.177726254 0.247455314 0.429069012 +-0.128690705 -0.18893747 -0.310686737 +-0.12869069 -0.18893747 0.310686737 +-0.1286906 0.188937217 -0.310686469 +-0.128690571 0.188937217 0.310686469 +-0.0995462537 -0.07043330370000001 -0.240325823 +-0.09954623880000001 -0.07043330370000001 0.240325823 +-0.0995462164 0.07043293120000001 -0.240325734 +-0.0995462015 0.07043293120000001 0.240325734 +-3.27835394e-08 -2.18556941e-08 0.75 +-3.10487849e-08 -0.135160238 0.71031338 +-0.002247339125087955 0.135160565 0.7098661234313948 +-2.6395286e-08 -0.227407992 0.603853762 +-2.639527e-08 0.227408156 0.603853405 +0.005294134150853763 -0.247455373 0.4633682886880875 +-2.03004848e-08 0.247455314 0.464420974 +-1.46994799e-08 -0.18893747 0.336284906 +-1.46994674e-08 0.188937217 0.336284608 +-1.13705036e-08 -0.07043330370000001 0.260126799 +-1.13704992e-08 0.07043293120000001 0.26012671 +3.10198112e-09 -0.07043330370000001 -0.260126799 +3.10198001e-09 0.07043293120000001 -0.26012671 +4.01015754e-09 -0.18893747 -0.336284906 +4.01015399e-09 0.188937217 -0.336284608 +5.53816948e-09 -0.247455373 -0.464421362 +5.53816459e-09 0.247455314 -0.464420974 +7.20088389e-09 -0.227407992 -0.603853762 +7.20087989e-09 0.227408156 -0.603853405 +8.470402160000001e-09 -0.135160238 -0.71031338 +8.470399489999999e-09 0.135160565 -0.710313141 +8.943660029999999e-09 -2.18556941e-08 -0.75 +0.0995461792 0.07043293120000001 0.240325734 +0.0995462164 -0.07043330370000001 0.240325823 +0.09954622389999999 0.07043293120000001 -0.240325719 +0.09954626110000001 -0.07043330370000001 -0.240325809 +0.128690541 0.188937217 0.310686469 +0.1286906 0.188937217 -0.310686439 +0.12869066 -0.18893747 0.310686737 +0.12869072 -0.18893747 -0.310686707 +0.177726209 0.247455314 0.429069012 +0.177726299 0.247455314 -0.429068983 +0.177726358 -0.247455373 0.42906937 +0.177726448 -0.247455373 -0.42906934 +0.183937356 0.07043293120000001 0.183937356 +0.183937415 -0.07043330370000001 0.183937415 +0.183937415 0.07043293120000001 -0.183937296 +0.18393749 -0.07043330370000001 -0.183937356 +0.231084689 0.227408156 0.557887793 +0.231084794 0.227408156 -0.5578877330000001 +0.231084824 -0.227407992 0.557888091 +0.231084928 -0.227407992 -0.557888091 +0.237789124 0.188937217 0.237789124 +0.237789199 0.188937217 -0.237789035 +0.237789333 -0.18893747 0.237789333 +0.237789407 -0.18893747 -0.237789258 +0.240325734 0.07043293120000001 0.0995461866 +0.240325794 0.07043293120000001 -0.09954606739999999 +0.2405965857521089 -0.07043330370000001 0.09818501000602463 +0.240325883 -0.07043330370000001 -0.0995460972 +0.26012671 0.07043293120000001 1.69520092e-07 +0.260126799 -0.07043330370000001 1.69520149e-07 +0.271825075 0.135160565 0.656243742 +0.271825165 -0.135160238 0.6562439799999999 +0.271825194 0.135160565 -0.6562436820000001 +0.271825284 -0.135160238 -0.65624392 +0.287012577 -2.18556941e-08 0.692909598 +0.287012696 -2.18556941e-08 -0.692909598 +0.310686469 0.188937217 0.128690556 +0.310686529 0.188937217 -0.128690392 +0.310686737 -0.18893747 0.128690675 +0.310686827 -0.18893747 -0.128690511 +0.328395218 0.247455314 0.328395218 +0.328395337 0.247455314 -0.328395098 +0.328395486 -0.247455373 0.328395486 +0.328395605 -0.247455373 -0.328395367 +0.336284608 0.188937217 2.19150877e-07 +0.336284906 -0.18893747 2.19151062e-07 +0.42698884 0.227408156 0.42698884 +0.426988959 0.227408156 -0.426988691 +0.426989079 -0.227407992 0.426989079 +0.426989228 -0.227407992 -0.42698893 +0.429069012 0.247455314 0.177726224 +0.429069132 0.247455314 -0.177726001 +0.4285832038493428 -0.2473905309719522 0.1782033175787506 +0.429069489 -0.247455373 -0.17772615 +0.464420974 0.247455314 3.02655138e-07 +0.464421362 -0.247455373 3.02655394e-07 +0.502267241 0.135160565 0.502267241 +0.50226742 -0.135160238 0.50226742 +0.50226742 0.135160565 -0.502267063 +0.50226754 -0.135160238 -0.502267241 +0.530330062 -2.18556941e-08 0.530330062 +0.530330241 -2.18556941e-08 -0.5303298829999999 +0.557887793 0.227408156 0.231084704 +0.557887912 0.227408156 -0.231084421 +0.557888091 -0.227407992 0.231084839 +0.557888269 -0.227407992 -0.231084555 +0.603853405 0.227408156 3.9352085e-07 +0.603853762 -0.227407992 3.93521077e-07 +0.656243742 0.135160565 0.271825075 +0.65624392 0.135160565 -0.271824747 +0.6562439799999999 -0.135160238 0.271825165 +0.656244159 -0.135160238 -0.271824837 +0.692909598 -2.18556941e-08 0.287012577 +0.692909837 -2.18556941e-08 -0.287012219 +0.710313141 0.135160565 4.62898811e-07 +0.71031338 -0.135160238 4.62898981e-07 +0.75 -2.18556941e-08 4.88762055e-07 +0.2148047599579061 0.05862636186789426 0.502491616306411 +0.08708371449759361 -0.07904678396405236 0.4544761890310727 +-0.146602316861926 -0.009632696391538147 -0.315119087525655 +0.1692244930490057 0.1812843605 0.623422415988969 +0.2079651687174781 0.1331645320914401 -0.5836410988931576 +0.1536632925775345 0.1239510807482383 0.4572738201945878 +-0.5671834958762344 -0.01939125278810325 -0.1175294783630399 +0.5569435355 0.06758027157215296 0.45546928025 +0.45546936975 -0.06758012992784704 0.5569436249999999 +-0.6446421632553362 -0.05976163801653798 -0.1092778761071423 +-0.6214703736046712 -0.0666511357727524 0.1250423258651282 +0.300758051598111 0.07172693423651585 0.4583027905022347 +-0.654305795925001 0.03357102801595683 0.001848341005699126 +-0.6258175216303261 0.05432506588159775 0.1162604558790866 +-0.442057131510203 0.03095741689814975 -0.2765487156973705 +0.30043105825 -0.181284115 0.5743412825 +0.6159713774510746 0.1837769934522046 -0.1922216808197105 +0.5322994338378045 0.008502274921264123 -0.3744977122371063 +0.04265738067802943 -0.1046145807176613 -0.4450745330079127 +0.1246996850352893 0.06574632593164867 -0.7058907283422399 +0.414704820039705 0.05850602124603817 -0.5873244043967869 +-0.5997874394191635 -0.06652994583433987 -0.3918934603056267 +0.4105207575547945 -0.02280618123261142 -0.4112567807811419 +0.1154383286484265 -0.0670131696695989 0.3444306649723132 +-0.5457887659485642 -0.1555429921777584 -0.2112258584708629 +-0.556036820477818 -0.1322847934326201 -0.08914487821102607 +-0.5287910658346734 -0.145964002948216 0.09942815883918801 +-0.5488808869220985 -0.1230845936541704 0.1994070919703603 +-0.5514166647614607 -0.06021660203561584 0.006754432547757371 +-0.5410083912396699 -0.04992438886868006 0.1097211985421525 +-0.5282477366216665 -0.0457190959344033 0.2285741534938628 +-0.5471074779992053 -0.03863338164943837 0.3383833878444414 +-0.5379197870483288 0.04712173579130802 -0.311524103556143 +-0.5444049150912931 0.04459180613937631 0.004718340344478199 +-0.5221095018638044 0.0369594492107734 0.119071275868263 +-0.5308799781628447 0.04747798722078263 0.3117821923412912 +0.4475426814502823 0.1489278561181345 -0.2688886257995359 +0.2996792148585254 0.1654024873724193 -0.4496521940991762 +0.0006848522370035207 -0.1023848032902419 0.5037054741521728 +-0.5278138632473582 0.1468044649733942 0.09245296480095991 +-0.5412677375001846 0.1432254272463678 0.2064531176041771 +-0.4231612307707837 -0.1037401749254241 -0.1337060640227804 +0.3305945547851408 0.01949853570690828 0.5514300148461841 +-0.4037618125828935 -0.1605445022397436 -0.336392455313646 +-0.4247760234915319 -0.1530323475734049 0.2024351829109144 +-0.4495954867690495 -0.1502396951148145 0.3301820862519624 +-0.4408269404029921 -0.07227179543752946 -0.0169300934674944 +-0.4374801290473587 -0.07174959795745348 0.1003803329881969 +-0.4416965121862891 -0.04176342978079188 0.3173556488626441 +-0.4210349730051253 -0.04504186570420775 0.4288698757126937 +-0.4469474911194326 0.05062181151367538 -0.4380625839577525 +-0.4208545034966771 0.02789523773719308 -0.124023188409767 +-0.4426622831200132 0.05234302201265242 -0.01514508992852398 +-0.4508707370426806 0.07401740893526983 0.235274710670023 +-0.4193989654820721 0.05283121747753344 0.3293365305174706 +-0.429259712191232 0.04147422157022783 0.4546009980040832 +-0.4365211327554736 0.1347201315161209 -0.3271173605683869 +-0.4285450353537538 0.1540513903482495 0.1047628151789162 +-0.4403871896259152 0.1709419521191819 0.210772629951794 +-0.4174665753576615 0.1439620252099086 0.3300534389646202 +0.2079223709471942 -0.1155629893027928 -0.3256443507170392 +0.4773776328763831 0.08791904828105823 -0.3315091410248636 +0.6109661671423812 -0.1312233317339073 -0.04826091956918894 +-0.3210912808149326 0.09886036457796581 -0.3443362945660071 +-0.5107203347875002 -0.0511037324690895 -0.2162246520966066 +-0.4274951252036663 -0.03507233851382638 -0.1978104046406515 +-0.3221922211749222 -0.1445975170440534 -0.4425145553301829 +-0.3286954227264652 -0.1434492302514711 0.2222906885168947 +-0.3285017090814557 -0.1265089069691785 0.308151421041821 +-0.3395649970840241 -0.1554064149526791 0.4225686128741589 +-0.3290190794293953 -0.05254108065203134 -0.5467141964176405 +-0.3159309151850979 -0.04120775039923903 -0.3224716358271946 +-0.3258398369406388 -0.03510117790117903 -0.1134249561622734 +-0.3376001506561476 -0.05717751503157612 0.102342810283574 +-0.3114520801316878 -0.03409065073118795 0.2177680683076604 +-0.328474165477487 -0.02648855206584399 0.3310258350020063 +-0.3225401600591715 0.05796838860563992 -0.5319520165267214 +0.2015107240799966 -0.0348512362201389 -0.4020904760206556 +-0.3346454802644096 0.05207433096846966 -0.01301303916511887 +-0.324625531231217 0.04835716156963638 0.1075824478319873 +-0.3479391062280647 -0.126665390258168 -0.2287931817071033 +-0.3339391802062537 0.08638104506876045 0.4153871716356871 +-0.3437931748730649 0.06799499691212332 0.5252200011202918 +0.2457413693967162 0.1472628478350848 0.429295858344446 +0.5295492770417918 0.1093862086104987 0.2733651267765829 +-0.3160302043757477 0.1364302962912125 -0.2386521499676249 +-0.3325980279608176 0.1444494011689514 0.2364387692234707 +-0.2930387724981217 0.1411993925395293 0.34719695896367 +-0.3437518688936977 0.1722947186730353 0.4268002410906342 +-0.3002781246773413 -0.05656847936871779 0.5773421353060838 +0.6116200389999999 -2.18556941e-08 -0.408671051 +0.4086714685 -2.18556941e-08 -0.6116197404999999 +-0.6116199795 -2.18556941e-08 -0.4086711705 +0.4086713195 -2.18556941e-08 0.61161983 +0.61161983 -2.18556941e-08 0.4086713195 +-0.3961672556480173 -6.155555294249769e-05 0.6199534874067836 +0.2898606410459698 0.09953935377376469 -0.5721343919035593 +0.1274258562189954 0.1820950256176694 -0.6308011075224357 +-0.2983307807445332 0.1419806263712661 -0.4269982341363224 +-0.01753325163574215 -0.1046126048589783 0.5737683073312927 +-0.1065471808270385 0.08839229482936621 -0.6047472533910651 +-0.5078357084441076 -0.1134888177294395 -0.3438187367651265 +0.07138585320850009 -0.05840339156309945 0.6482034465556364 +0.1875194341956316 -0.06385973718928681 0.6174557333286409 +-0.1940775370390703 0.1189988285552581 -0.5653164243045676 +0.210606074927093 -0.07955350966472875 -0.5157443637988349 +-0.2329323291013624 -0.1248761065775685 -0.5354600680477379 +0.4529133510639263 0.1027731533397032 0.4209756521472898 +-0.4260979781625683 -0.08344441861394807 -0.4140970192187416 +-0.2169229250232756 -0.139728824653224 0.3022348443465113 +-0.2198768006712144 -0.149968159355379 0.4321842579547452 +-0.2214114204232291 -0.1225220799957973 0.5409621791502991 +-0.1929736857355174 -0.03818610480938463 -0.5031431915557217 +0.2447988857322374 0.00381362611841892 0.5899237674964953 +-0.2253454435756435 -0.0510535612519891 0.3044597114244738 +-0.2040544704023095 -0.03176029619634726 0.427052550607548 +-0.2092215002784332 -0.02565337133532111 0.5411861284909295 +0.480989766979571 -0.08319996631774527 -0.4210647206063204 +0.6832787695 -0.135160238 -0.1359121870505095 +-0.1359126227647989 -0.135160238 -0.6832786799999999 +-0.2289056667134217 0.04663271431507766 -0.4255814967903377 +0.1359126012351997 0.135160565 -0.6832784115 +-0.2066628191114914 0.05480046826812753 0.3198049648384878 +-0.2243058615160185 0.07964437541474738 0.4247297184543852 +-0.208113090690223 0.06445928225980971 0.5231662485997532 +0.1359125669756076 -0.135160238 0.6832786799999999 +-0.1359126275243924 -0.135160238 0.6832786799999999 +0.387046307 0.135160565 -0.5792553725 +0.3870462925 -0.135160238 0.5792557 +-0.6832786799999999 -0.135160238 0.1359126506271685 +0.6832786799999999 -0.135160238 0.1359128139494905 +-0.2194004785644676 0.1475847545349244 -0.3469514787709857 +-0.5956393160156814 0.09490531950004515 -0.2042934565935917 +-0.2178745302422234 0.1453261132084583 0.3328986335035305 +-0.2418619683830102 0.1723327817400896 0.4269176136807822 +-0.1831818339704835 0.1484536604414157 0.5221446291367574 +0.03663870813279047 0.05005509956049407 -0.6414864284917617 +0.1942350135205994 0.05851852115451094 -0.6161295752759666 +-0.5420417635302861 0.1012002134691774 -0.1193827443122811 +-0.5756313767461709 0.1636057234662092 -0.06013303154197015 +-0.08651201916266667 -0.06865067701275893 -0.3321620682941319 +0.1027626229516373 -0.1314567021304453 0.3834698204860338 +-0.362428029410273 -0.1070244315800844 0.4886937738212236 +-0.1011488098433493 -0.1488108851409737 -0.5298702748774109 +0.1020647599765114 -0.07371707566437634 -0.366754583133816 +0.3903368429134106 0.101699745956457 -0.433818578133064 +-0.1074126412370914 -0.1526189193003277 0.4088007775076468 +-0.1151641662391919 -0.1438442203091108 0.5312796308049904 +0.2921648111109675 -0.07492673849593907 -0.2773684319721069 +-0.1285905486543048 -0.05647037586924304 -0.6133127505128496 +-0.1216163521409942 -0.03813129009229205 -0.4360208940675083 +-0.09905003496170785 -0.06196894632151512 0.3368756483460959 +-0.0990668004357604 -0.05903067457631835 0.4461241622524353 +-0.4776363609860341 0.1465133577617411 -0.2274197198236627 +-0.08773698924304667 -0.05184598555492647 0.6268363586823165 +-0.2267429148408685 0.1249132199309427 -0.4913909097447509 +-0.1121832809510704 0.04646092772441284 -0.5238551018576121 +0.2073757465014909 -0.0005490189447118193 -0.2818296401738018 +0.3574044012045842 0.1547702511617189 -0.2277470630249493 +-0.2354812082527474 -0.150851567101606 -0.3768350049973243 +-0.08743158532283671 0.05697845190875393 0.3357206925042919 +-0.1277896175209473 0.0578934535227305 0.440598521116173 +-0.1033125957436848 0.03928284369367165 0.5233789300229542 +-0.09304793425364484 0.05084289554029058 0.6380521403377361 +0.2386457396262456 0.1715816661461778 -0.3828757503815334 +0.423909910978836 0.1317032982272586 0.06356530576229823 +0.4097262710096638 0.1454523582378435 0.1438076249432514 +-0.0911470481544097 0.1452334358097956 -0.4158156824845399 +-0.1016133527545378 0.136860667934726 0.4330388861157719 +-0.4292389925744527 -0.1654781027874459 -0.07721888439167002 +0.2059596359472754 -0.0381533441888445 0.2457693811615254 +0.2680266045401745 -0.0409369721715605 -0.1942463155450726 +-0.5684009439817774 -0.181284115 0.3093214345483903 +0.156376008505201 -0.03237108451866057 0.2901862018655822 +0.4036041502130215 0.07115527728618469 0.4897612657744972 +0.4145351070767421 0.04784708682520229 -0.4968945110667345 +0.5250185200556235 0.04036754828805152 0.3708378603636437 +-0.3939857586234845 -0.0354399188984108 0.5159839140024425 +-0.5136737465592929 -0.02096928334744927 -0.3939635237507689 +-0.6094018716296354 0.002003007624447968 -0.202297769504363 +-0.3663963947652291 0.008372259341285189 -0.228274073560665 +0.3184424023319196 -0.02249886458617977 0.3579632423854461 +0.006561687502009625 0.05724662934245741 -0.5358999954437873 +-0.02114722495813348 0.04872463253946129 -0.3390579201943842 +0.3048686051070211 0.1840817211670154 -0.5675677732621035 +-0.01038008191495194 0.05798805100217008 0.4357427118599579 +0.0008467820919496345 0.03331469483369875 0.5521021583643705 +0.407017633 0.1812843605 -0.50312203175 +0.05776611603134262 0.1376535741227746 -0.2918362873837625 +0.0497730822502663 0.1296850741 0.288305171 +0.2457107185925527 0.135139000195845 0.1648979522399937 +0.1686676516 0.1296850741 0.239057429 +-0.5000568779581299 -0.1795990531282913 0.4150386052352156 +0.5014528792180527 -0.1816753454552545 -0.408719237110252 +-0.5029512339302212 0.1812843605 -0.4072733907773048 +0.5029512152035382 0.1812843605 -0.4072733664139633 +-0.3764123707272886 0.09879670488745546 -0.4095454500084148 +-0.4725332676819864 0.005642352703116546 0.2020216355148748 +-0.1496650072925399 -0.235647257655321 0.5167782537253931 +-0.5302451570783469 0.2365965943548609 -0.04876828145860426 +-0.002591613671415457 -0.1026208303124244 0.3928908007681053 +-0.0523451173707068 0.1302623922386563 0.4927621326423263 +0.05860755375353332 0.1257279774771141 0.4794596148821863 +0.08802430931468684 -0.1225325715056166 0.5603036431373815 +0.1032241182142573 -0.0340591879952308 -0.5533129910255919 +0.00745278544232821 -0.06582211103224113 0.630052478596229 +-0.01082466888663697 -0.03801533319731521 -0.6156480556982972 +0.4726120106138331 0.12484313881195 0.3448375643845454 +0.4814544006975456 -0.05513774069059533 -0.2986534077813469 +0.4732694108739305 -0.05522915948677016 -0.1778180843447857 +0.4909415760273616 -0.03837679976116375 -0.06661192117720928 +0.100095691090951 0.05093218150821434 -0.4304550833388545 +0.1239385805155771 0.044544506316063 -0.3352807243241612 +-0.2802087049206544 -0.08144478342526922 0.4785192195300021 +0.09580812999656925 0.05650133103318054 0.5018653908681395 +0.1112308163202565 0.150059329766388 -0.5249317956161899 +0.6459383261078916 0.06758027157215296 0.3222791452973603 +-0.1565518800075456 0.04876135164867082 -0.3722630768346345 +0.5560387821509727 -0.04441632956197366 -0.1490117451147615 +0.581792943649261 -0.04102538424861867 -0.06392366822802879 +-0.2582127270014075 0.02913406223927319 0.2684441064386298 +0.2927387924644004 -0.0149633208788464 -0.4491729904496716 +0.2013878265835575 -0.1266401577586878 0.3266978710424491 +0.443141937 -0.2374316825 -0.279739961 +0.5157281007889414 -0.2374270833779515 -0.09271138174935373 +0.2090559597555721 -0.04395774488034123 0.4278392112683149 +-0.4944336897194478 -0.09005668250886321 0.3978113830106517 +-0.432532593947051 -0.2375984594420146 -0.2935702535581112 +0.2277292536980891 0.0428303539450235 -0.5320631122757074 +0.2865164264133694 -0.2374651039703354 0.4383398348635704 +0.2056064164492523 0.04985412590180793 0.3127630284553709 +-0.2820232971018125 0.2372968610762593 -0.4427223751947126 +0.4395616904484677 -0.2384988760845237 0.2719947621906035 +-0.5081604390019669 -0.2378210470469928 0.1169813244873835 +0.4327316470501742 0.2384381322497851 -0.2829623286064294 +0.2877680748853014 0.2378403864535273 -0.4344245922410273 +0.2797399535 0.237431735 0.4431415055 +-0.4340564080289104 0.2378165773830367 0.2886114810717543 +-0.1828011762689302 0.05364457025045295 -0.6355453293052928 +0.6375438199914241 -0.02935637925234931 -0.152892417653076 +0.2602975085172395 -0.09745952344616611 0.5477608240078249 +0.2775263424353848 -0.1228377492099226 0.384791984454249 +0.3596151937197254 -0.141597768176489 -0.4231164447026335 +0.3208415581685442 -0.1349795480412619 -0.2171832530745286 +0.3109056466661628 -0.1388776022384641 0.1987929501681949 +0.3335612390022412 -0.04552068754656854 -0.5281548867660718 +-0.4531333533695962 0.07692855650042288 -0.555266519638251 +-0.4585715218401867 -0.07760329815977847 -0.5513992488579733 +0.3396141930387401 -0.05279514643595638 -0.0921131507041876 +0.3204727004155962 -0.06529806721664831 0.1046288254150648 +0.31306525603795 -0.06567965594681423 0.2046364937964013 +0.3159038841314221 0.02599107147295122 -0.3415755577703607 +0.3351976816345975 0.06128680549085182 -0.1479704239571715 +0.3388606878224936 0.0394365795661426 -0.03384902201879005 +0.3437417281098993 0.05703090942030965 0.107072764716187 +0.3220169919082694 0.05095046011482658 0.2177406215607413 +0.0689665525288998 -0.01163147790780546 -0.665821750833281 +0.4247853193968322 0.138055140745489 0.2498450206885172 +0.5666235297019543 -0.1721782523580675 -0.1155446617485881 +0.2372398230317664 -0.03167176195468971 -0.6080155472507058 +0.3357930029995391 0.1567136729231967 0.4253357575546892 +0.3540986515356748 -0.1424058629083627 0.3969252358031086 +-0.3414012713464936 -0.0621048952609243 0.002901790927666791 +-0.006352275712959725 -0.06508036243897163 -0.3374551632923645 +0.4077025720526192 0.04826923006195883 -0.2421012815042307 +0.1654412905940297 0.04562478981903653 0.4212167249231981 +0.4197084439871971 0.05192469954844516 0.1814469788058192 +-0.2208049830591295 0.06251985565641553 -0.6877215877450071 +0.426338398304634 -0.1434752602320325 -0.3367315691514332 +0.4326170457437952 -0.1411491565218985 -0.2188400560397645 +0.4237305177426459 -0.141661095432702 -0.08709124284118519 +0.404215024391447 -0.1399533434716075 0.2156067827615666 +0.4328630722823912 -0.1328013499737094 0.3308716072960298 +0.2248175293217677 -0.06758012992784704 0.6854376795667962 +0.4161155946855566 -0.05584439860466436 -0.002441013836284896 +0.4313140076389336 -0.05978578617486206 0.1088070022131595 +0.450918256819464 -0.03847381900589373 0.2359583877933817 +0.4457060890403761 -0.02620527055913056 0.413482502816888 +0.09835692228621801 0.06442805687023616 0.3643175222483206 +0.4369762376240091 0.04583458804269828 -0.1157588923316206 +0.4259958964602643 0.06108205071788198 -0.01539096574106599 +0.4162805245750874 0.04502838616233909 0.3078736604558807 +-0.2079118128565157 -0.04963516806072479 -0.3889561128873697 +-0.4299064880738119 0.135160565 0.5506171529961174 +0.5281180042296583 -0.1378503329927562 -0.2334815132298401 +0.5223484067072454 -0.1458065956801332 -0.02071680486975328 +0.5425252574054265 -0.1373263383845702 0.1072054410899196 +0.5350977120239054 -0.05103806950915329 0.3245688546285393 +0.5333863472702021 0.05046379975240864 -0.1975902518114613 +0.532455096746828 0.04560488532328932 -0.005699071116475381 +0.5419193981501835 0.0486765864019862 0.1239391687217768 +0.5355481056583311 0.1414417937687622 -0.09261594688985184 +-0.4967510892678877 0.04316175247488441 -0.1928494949928883 +-0.02348498660855512 -0.05726929540916417 -0.4929404584818559 +0.3389491987958484 0.1263167279134933 0.5054477140885989 +0.6274560120419712 -0.05198890175872962 0.1099921569861211 +0.4878419111093683 0.05875103888030383 0.2200223268103224 +0.6240885685723052 0.04492717659879997 -0.1054570120072385 +-0.6018963927443802 0.05107175258897927 0.2237810152843244 +0.641493437015596 0.04698768983416271 0.1038913003334417 +-0.2638401636369636 -0.05493290412767491 -0.4459854414188743 +-0.4048759839159633 -0.06931554420171929 0.2011181734596874 +-0.6013782642278841 -0.008670811585460226 0.05953811030783254 +0.236902116816932 0.07230934141622231 -0.4053013921960443 +0.1152841078827855 0.0709724499571117 -0.6207345739323095 +-0.2104418741655573 -0.06950722531256681 -0.2601247953068311 +-0.2245041950568541 -0.1051655974782383 -0.3165675198391922 +0.2110263114297359 0.1100623185224954 -0.31596710503771 +-0.3303083506116173 -0.02760598174876897 0.4317847611411088 +-0.3969790557273846 0.08278970153870198 -0.223719143864455 +0.3181074745640283 0.001246966633677706 -0.2511003853726549 +-0.001060707671683717 -0.1065111122750068 -0.5541061858275393 +0.650853451752721 0.009920080387569559 0.011665510543036 +-0.3574599974014963 0.09734137741098607 -0.09965203923949038 +-0.1436064464398353 0.08831529589285453 -0.3151052839264627 +-0.007506786969251721 -0.004105502730003744 -0.4243101107139098 +0.1065931068429387 -0.0001085366789827557 0.4135578084754778 +-0.3329912408681484 0.06421172716095264 0.3029882505886588 +-0.3375421951262143 0.006229202633078193 -0.4349069127969654 +-0.6985554476013591 -0.1024719621527603 0.1073642970980115 +0.5452928391102743 0.01608060722268402 0.2319397301056004 +0.1155424676004419 -0.227407992 -0.5808709265000001 +0.4924387485 -0.227407992 -0.3290367425 +0.5805699011497513 -0.227407992 -0.1170558901122047 +0.3290369515 -0.227407992 0.492438585 +0.492438585 -0.227407992 0.329036959 +0.11554240060044 0.227408156 -0.580870569 +0.4924384355 0.227408156 -0.329036556 +0.5808706585 0.227408156 -0.115542013739575 +-0.329036869 0.227408156 -0.492438257 +-0.5770880277546183 -0.227407992 -0.1345605514496855 +-0.492438585 -0.227407992 0.3290369735 +0.3290368765 0.227408156 -0.492438212 +0.3290367645 0.227408156 0.4924383165 +-0.4846991967808343 0.2275824300242007 0.3384793634329527 +-0.4924384055 0.227408156 -0.3290366455 +-0.5808706285 0.227408156 -0.1155422394103346 +0.5263242134816848 0.1427634180929979 0.04084918483631195 +-0.1523500837504407 0.1543677763815984 -0.5036055611948859 +0.502190705004582 0.1453440444158882 0.1545363581935308 +0.1381249001229966 -0.1411164872603262 -0.4731299872355259 +-0.6070921062993293 0.07694558145276738 0.3755620352998136 +0.1406031141985266 0.1429805795156574 -0.4029942841166447 +-0.5103359034007181 0.2364667903916487 0.1533976511473124 +0.1425452530490057 0.237431735 0.5057831616462883 +-0.3731252291502142 0.1294891353399314 -0.4883120817928434 +0.3723381797994571 -0.04828163511992769 -0.2021711263110909 +0.3764661100207322 -0.04326195962319036 -0.3110841143459703 +-0.5149001436269404 0.1817831010578217 0.3883744154118514 +-0.4075790725065548 -0.07011207976826006 -0.5880659568874272 +-0.5303300891969429 -5.833858670062555e-08 0.5303300379042957 +0.3692070733341348 0.05887650239374177 0.3977133352200331 +-0.4079152010050289 -0.1850652088177073 -0.4973754617889673 +0.3329196737418877 0.1396696471672832 -0.5128027077454528 +-0.06310352592163579 -0.05063790301029709 0.5320612101990535 +-0.4016297809554171 0.07665157112216678 -0.5897760485424426 +-0.3792981735569309 0.2069810069713509 0.4866624706549424 +0.3021500544248019 -0.07243349234632183 -0.3680829388445839 +-0.3032017640904151 0.0466666413092313 -0.2590452631690672 +-0.2390805197549287 0.05934859095666144 -0.3203443511140383 +-0.3843687658895464 0.0597781261690172 -0.320510805268692 +-0.297150850631037 0.04789404968614406 -0.1751198455174624 +-0.491150875371558 -0.02431634563507673 -0.1034359022115692 +-0.3426425664506795 0.06567166007506782 -0.6329930304230099 +0.622054807140332 -0.06919338799472372 0.2517012930533061 +-0.1703098257617832 -0.1826550824458945 -0.6216246471829776 +-0.2174347219811193 0.01272135947138664 -0.245695297556412 +0.4439378877973604 0.06758027157215296 0.5646485581078916 +0.04763992432268208 -0.01224661208412182 0.5024657892071374 +-0.1708675632617437 -0.1854258582415338 0.6183160665788725 +-0.1716332338339093 -0.07729741666714569 0.6931634498852716 +0.4859623908309793 -0.1751256506962191 -0.1293025462109802 +-0.1895947160490057 0.135160565 0.6726003965825593 +0.5863066585133995 -0.05325755980125289 -0.2416842667002071 +-0.6726003999896268 0.135160565 0.1895947010490057 +0.1895946860490058 0.135160565 0.6726003904889689 +-0.6705388748474567 0.135160565 -0.1999589308460862 +0.6726004757712991 0.135160565 -0.1895945220490057 +-0.5959268895394246 -0.08763387546571111 -0.193621137504829 +0.2024962576489122 0.1321155658524761 -0.4660263074064109 +0.4354731070692088 0.1354985673547656 -0.1637449946554581 +-0.1637739673863473 0.08397379746190908 0.6927663054735529 +0.3265732257357251 -0.1509614322112238 0.2884515197475907 +0.2732793647740832 0.1546584917298763 0.3314554491719456 +0.3352013350452636 0.1560501476469682 0.2713065059666275 +0.1855214459446696 0.1402342518748386 0.377939225620567 +0.5952374280764472 0.05149610372169009 0.2848800021155177 +0.309976557537971 0.02941156572264442 -0.5861860739822928 +-0.5819583326726456 -0.05848943025699382 -0.2922827175629795 +0.4478022466495745 0.1487306241748066 -0.05278736440785489 +-0.06061965019220951 -0.1546782628110873 -0.4451638315554993 +-0.4739719375085265 0.1595241468053785 -0.07235625997418475 +-0.4389376217620313 -0.1571890255726863 0.05923078313502133 +0.03523894539594524 0.1322226216130693 -0.4287150964234601 +0.4406472348063602 -0.1457053958490441 0.05768599293734747 +-0.6888037686428277 -0.07036105566768017 -0.2037901556721537 +-0.06229448528435831 0.03133867538934622 -0.6561603563492422 +0.6623351609753214 -0.05696093651650429 -0.04555963134792926 +0.7142163401685105 -0.06509681597650166 -0.08380314178483944 +0.08210689966282012 0.05937132490740349 0.7162348457707524 +0.08333145252853005 -0.06595830440988804 -0.7140572377641591 +0.06608137356851983 0.1491054590402661 0.4009851807085034 +-0.3611274408840614 -0.1077702581600939 -0.06242896573356903 +0.3796094865805174 0.1486590723480749 0.3447589131660058 +0.04712138799494611 -0.09589795714366683 -0.6301910061738919 +0.0659446078747277 0.09224666523738477 0.621360874667907 +0.181154043491014 -0.08994650355324102 -0.6200918491966262 +0.5771762656224043 0.09484020020585483 0.1912421960319913 +0.0226914655921382 0.02659887758775728 0.6516329293572531 +0.3075185328989046 0.07299906362394958 -0.4985846099332604 +0.07577543452462263 -0.1433929495342712 -0.5746623127656189 +0.1596925585545952 -0.1348942439547208 -0.561311843514139 +0.4452187262509794 0.04287656012943429 0.1108911178589169 +-0.646405235051362 0.1812843605 -0.0536821029593403 +-0.2904552754354776 -0.04991148299524247 -0.2135005964108463 +-0.2027902505473725 0.04060653507155906 -0.5494798040191847 +0.312554733939242 -0.1507221313137781 -0.3192189438369041 +0.532405183857342 0.02947761865663639 -0.102715572874153 +0.5275086031262067 -0.1055867242650335 -0.1088883244036733 +-0.4264568237336529 0.03087572834513268 0.1118487827067294 +0.5386311781670815 -0.1739261713797737 0.3688656825855084 +0.318987690826632 0.08094470550083935 0.3082873048685877 +-0.5247960083693182 0.05760442579045268 0.2134851504654077 +0.6158593372512614 -0.1874400435104712 0.1715324352895766 +0.4315624334526753 -0.02798427575426788 -0.5103779956811643 +-0.4123433473060267 -0.04764382775535243 -0.5032775626162018 +0.7173603882156612 0.07561188915947202 -0.05247448317129177 +-0.2713328395803039 0.1161625451622493 0.5697169244581305 +-0.1741215833851504 -0.1867567049684828 0.4804577250082678 +0.6976598577362255 -0.06827042213568386 0.1623536943023283 +-0.04610012519939551 0.1448809950000666 0.5674450728739088 +-0.06820624315971494 0.1391422404993094 -0.5422448272563861 +0.04976206459513634 0.1459319893446545 0.5648956198046813 +-0.4405659160829608 -0.05935747034583092 -0.2987452142975358 +0.7101340715369242 0.06931532101520638 0.09809893503159287 +-0.5233272589156744 0.1371867973524671 -0.006070351955850449 +0.003411548988928413 0.1576623979034729 0.5143549750367112 +-0.007709896184820183 0.1617475887412644 -0.4979439886996553 +-0.5015913141449097 -0.148026251126252 -0.0007504796998853022 +0.3156046534344432 -0.02657801295699586 0.456855152278661 +-0.7146314176639721 -2.18556941e-08 -0.1778099321739148 +-0.714631391435433 -2.18556941e-08 0.1778099059453759 +-0.6889572874750536 -0.135160238 -0.1073642970980114 +-0.0800325114130878 -0.2144714877278948 -0.376277204125747 +-0.2045620552658866 -0.2184651849984501 -0.3362589268787387 +-0.6889570651027241 0.135160565 -0.1073642970980114 +-0.6889570579792537 0.135160565 0.1073642970980115 +0.07462547832493387 -0.2197393122455355 0.3888876602281924 +0.3226232787263165 -0.2162282417004459 0.2163220611664897 +-0.382677138 -0.2181964215 0.08886321938880395 +0.3260948967187077 0.2168535096272338 -0.2135434742241258 +-0.08047208479996108 0.2175162374763322 -0.3828568457923386 +-0.5709528055146412 -0.1788981212378028 -0.3103633892284121 +0.2294042978034777 0.2168584666811915 -0.3155098213988843 +-0.5989670613063136 -0.135160238 -0.3575461347945523 +0.38267687 0.2181962655 -0.0888628909245615 +0.091470285862678 0.217038063599734 -0.379622106314556 +-0.07140032689038553 0.2154323042171401 0.3800981761532723 +0.221030943918663 0.2171582416863385 0.3218790327721636 +-0.3857783053634699 0.2178326861474558 -0.06926851353584285 +-0.2269041027428502 0.2188124539906703 0.322227403264663 +-0.3317374084906508 0.2173518025519454 0.207025087688183 +-0.5835519514615468 -0.2268300252085159 0.105417351210259 +-0.3827407025570413 0.217881574844037 0.08507772784439768 +-0.5824973265862685 0.227408156 0.1073642970980115 +0.3812711629175531 -0.2165997755367423 0.0783551961348893 +-0.1521653160164021 -0.1287108372045364 -0.4187192410115158 +-0.4859042057485281 -0.227407992 -0.3388164423898491 +-0.4257266172768689 0.1457644899011558 -0.1483052091300335 +0.02270542428141074 -0.01774936420632196 0.3414903994776349 +-0.3716315400264734 0.1944972016295138 -0.508779491398935 +-0.3048382051472016 -0.1745592467809746 0.5805511771905953 +-0.3135551595490744 -0.1851134063945669 -0.5603592340360726 +-0.4356442171131527 -2.18556941e-08 -0.5935971483996163 +-0.07717212950074337 -0.1785652289067969 -0.6448708338027288 +-0.06507398806140052 -0.1761046441822036 0.6501169839026913 +0.6453716043734744 -0.1791687299460072 0.07115349393080496 +0.3897301333485112 0.1893134174198639 0.5037431591401457 +-0.6887090665053673 -0.07379341498840072 0.1991994430700723 +-0.5935971383366712 -2.18556941e-08 0.4356441969872622 +-0.6117749063923518 0.01644354433148199 -0.2978603801681667 +-0.387558001269515 -0.135160238 -0.5789137973090235 +-0.5789137969635547 -0.135160238 0.3875580010967806 +-0.3875580048364737 -0.135160238 0.5789138044429412 +-0.5789135088604425 0.135160565 -0.3875580605546097 +-0.3875580495343058 0.135160565 -0.5789134868198349 +0.5644643984827786 -0.06495018187921164 -0.4455770106383233 +-0.578913471633707 0.135160565 0.3875580419412419 +0.23709719603894 0.1014150416760966 0.2680955908015779 +0.04018451750921416 -0.1349437665400113 0.6245923834942313 +-0.6051502767477215 -0.1339196929326989 0.04824931533981232 +0.06106294228067399 0.1185684120684981 -0.6226282579399706 +-0.6062220019205854 0.1293499032270441 0.03599799757209045 +-0.6078126614727571 0.08914747057635643 -0.04573977024164903 +0.5754370663803664 0.1269034291391263 -0.2020234705263327 +-0.3709021398994805 -0.00134424386124089 -0.6363908604690129 +-0.1778099073798559 -2.18556941e-08 -0.7146313928699131 +-0.1778099039496093 -2.18556941e-08 0.7146313894396665 +0.4347152300153192 -0.03845077592829239 0.3242724391810436 +-0.3575457461164083 0.135160565 -0.598967070476627 +0.5212411926782172 -0.05775566056478709 0.01756777546771002 +0.5259509822148767 -0.03592485772890536 0.09957469724955148 +-0.1073642970980114 0.135160565 -0.6889570487660757 +-0.3575457351476239 0.135160565 0.5989670649922347 +-0.1073642970980114 0.135160565 0.6889570511651186 +-0.3462750200225362 -0.227407992 -0.4809205082873176 +-0.1073642970980114 -0.227407992 -0.5824976636260482 +-0.33153474006408 -0.227407992 0.4907696355829997 +-0.1073642970980114 -0.227407992 0.5824976644313991 +-0.1073642970980114 0.227408156 -0.5824973216541982 +-0.3318778745421381 0.227663389878087 0.4884459660073816 +-0.1073642970980114 0.227408156 0.5824973224595431 +-0.09142014233927777 -0.04957767833824132 -0.5334365820416362 +-0.1411060818092554 -0.05316603507842676 0.5382820154556561 +0.07839309595428723 -0.03606997118258356 0.5627924560811802 +0.2228311347285496 -0.04566485180113804 0.3316338944249109 +0.1778098936435355 -2.18556941e-08 0.7146313791335925 +0.1119377679059749 0.135160565 0.688047318674596 +0.1073642970980115 -0.227407992 0.5824976533568385 +0.1107310237709541 0.2263410543301188 0.5830591323502694 +0.1073642970980115 -0.135160238 -0.6889572750606456 +0.1778099085090079 -2.18556941e-08 -0.7146313939990649 +-0.2867197080342601 0.06935592017993335 0.2082907636499682 +-0.1040286901134598 0.04955933054357604 -0.428733056122008 +0.1087667398617572 0.05680384432486649 -0.5469337818933063 +0.3462749938603848 -0.227407992 -0.4809204952062419 +0.3575457135947208 0.135160565 0.5989670542157832 +0.3575461221925426 -0.135160238 -0.5989670550053088 +0.1812223911135857 -0.1736821308172768 -0.6298093261526846 +-0.6193708249721932 -0.181284115 0.1895947455490057 +0.1905191600437536 -0.1743820496510929 0.62715234095378 +-0.1895947310490057 0.1812843605 -0.6193705318270991 +-0.6237485270845429 0.1807169479230611 0.1708771116222541 +0.6193705496990755 0.1812843605 0.1895946860490058 +-0.6285656566370914 0.1761324746024394 -0.1732584543457864 +0.394701284275205 -0.1042605866668516 -0.4997370861425395 +0.4699929441616674 0.227408156 0.3626286470636558 +-0.5084742133742602 0.06489101169978406 0.3985956981616894 +0.5085238562446177 -0.09862272073648808 0.3981796479379747 +-0.252784993881451 0.08889640338330405 -0.2133526125177653 +-0.053682158699257 -0.2374316825 0.5234595132156995 +0.5789137897334826 -0.135160238 0.3875579974817446 +0.5789134714070765 0.135160565 -0.3875580418279266 +-0.5234595159721932 -0.2374316825 0.05368218361184548 +0.5789137748970357 -0.135160238 -0.387557990063521 +0.4119679658371732 0.171320395173378 -0.3619113785125 +0.5824973573981509 0.227408156 0.1073642970980115 +0.5824976994624926 -0.227407992 0.1073642970980115 +0.5989670542157832 0.135160565 0.3575457135947208 +-0.1851208683566414 0.124208603344928 -0.4239884656902839 +0.6889570984230848 0.135160565 0.1073642970980115 +0.173734377190098 -0.1592113573896186 0.4569211512536634 +-0.28606352997408 0.1545826835379782 -0.5211144100507749 +0.6889570315425984 0.135160565 -0.1073642970980114 +0.5456779809973004 -0.1215914160305011 0.2584213678038438 +-0.558393685464368 -0.1146177080545493 0.2834043871933823 +0.6190017582884673 -0.07274211245430767 -0.3599170327319804 +0.0411829889215951 -0.01367151147718778 0.4358118977414294 +-0.426429427626163 0.143843426080977 0.002542584081843323 +0.7146314120566302 -2.18556941e-08 0.1778099265665732 +0.7143730345430807 -0.00140176429054186 -0.1770398293756113 +0.3739725842088806 0.1215769468470212 -0.08292337630397037 +-0.05485930368709809 -0.1053031201782086 -0.3871347894732904 +-0.3714078393416314 -0.1180642596737125 0.05878671147875928 +0.3598360547299361 -0.1098711723824991 0.05711255573169563 +-0.2229579979104957 -0.01042827856541734 -0.3327072361197876 +-0.6422801729477911 -0.03894346107858589 -0.3425982442479343 +0.6608410879144642 -0.08766114178271175 0.05095820244838246 +0.1426328224684481 -0.01999499921288682 -0.6425278445708872 +0.1451338818735528 0.04608510717745574 0.6124456115996282 +0.01809742601197574 -0.1721964576789065 -0.4967334593128879 +-0.246127712574023 0.04135798095259782 0.5983282486609528 +-0.3138521513056136 -0.1556622707844267 -0.3161040462964457 +0.323493049226149 0.1290001483902456 -0.3253386948631966 +0.2728508941316176 0.07549347174791185 -0.2372820664953083 +0.5562842649028102 -0.0485295044900356 0.1953580131414835 +-0.3673911643395928 -0.09103973029133546 0.3705530982467184 +0.4355860589542803 -0.06553550803975287 -0.5709373490885763 +0.5632559126388801 -0.06387772482078147 0.4479415235371896 +-0.5623988653662189 -0.05767263513801224 0.4524406607131942 +-0.5561151775794455 0.06810076880820351 -0.4564393132378073 +0.5660902677743312 0.06010819246444307 -0.4456534833601336 +-0.2548913804596937 0.06258836563347484 -0.609930088042597 +0.6241570345002212 0.002226028570825955 0.2002465762605789 +-0.649776531707054 -0.0725164334290863 0.001715429544915426 +-0.004389374735116239 0.1180139820763546 0.6205176565062831 +-0.02316628772584089 0.1114646632479806 -0.6235726113015037 +-0.1543271382898399 -0.09275660230181169 -0.3310827964762754 +-0.6484132865773928 0.03340105755634293 -0.112249268939819 +0.08134865638375682 -0.0668181207163879 0.7141991738988013 +-0.08165379287038785 -0.05609759458137611 -0.7172863175211743 +-0.08318554957996099 -0.0696514590344952 0.7130018514806905 +-0.0739077083046028 0.05868607434484126 0.7180669935902767 +0.05266965457730004 -0.1751399486361745 0.6536976595518434 +0.05368213302461863 0.1812843605 0.6464052261462883 +-0.05328394604293371 0.1784463116146165 -0.6497597270761811 +-0.0536821640733928 0.1812843605 0.6464052317297715 +-0.6464055249721932 -0.181284115 0.05368220217617423 +0.6467232799244399 0.1809402739390439 0.05407987922160953 +0.234169056917011 0.05670640816227374 0.4156758517070452 +-0.5089134388924373 -0.1923102973818645 0.05068212359475061 +0.1676413756067232 -0.06781041643326767 0.531558722267077 +0.5865201611484786 0.1316140442522556 0.1131982866086703 +-0.04196278628353433 0.08189709568967014 -0.4641796369398359 +-0.2423508878776404 0.001876770083158745 0.1933769569910977 +0.2800534084650199 -0.001419473771088816 0.1515067266544594 +-0.1560211292574079 -0.0006481472840781907 0.2851380005602722 +0.7123616063516282 -0.08049241694007397 0.07040161526726069 +-0.6278805340950337 0.105766568169776 0.1909343800546901 +0.6415084338809066 0.0798150248930703 0.1822983339745222 +-0.193204923899704 -0.05572412844052755 0.6224482061031797 +-0.6304617438564843 -0.1035122462338923 0.198036709796241 +0.6156512441366255 -0.1032623802693025 0.1753596888902071 +0.6334392450885363 0.06696755323160408 -0.1838983985512123 +0.3782062441392018 -0.12204988584297 0.133183390216391 +-0.3828751918786762 -0.1285998340989022 0.1330862319117084 +0.5072024770378601 0.02634700497318234 0.4506209427980654 +-0.7191544659780258 -0.06197279360122413 -0.06358919318901379 +0.5728575186449349 0.07727439263062541 -0.2980850278327078 +-0.7044764983498082 0.06248231541307675 0.1366278139779501 +0.2566443629179671 -0.1170930898586065 -0.57977294954992 +-0.2765169719865896 0.01562580963005574 0.4859752387090623 +-0.1753814023370256 -0.124284950943586 0.367624994491605 +0.4898723741986995 -0.09038045200736297 0.1732492806675991 +0.3766615163973158 -0.123978037291708 -0.1575263032116939 +0.4881935107812874 -0.0085710500253026 0.1662459875931393 +-0.56444933379114 -0.002316203731541758 0.1710273760706686 +-0.5614368059721748 0.0973977351253799 0.1566922547789323 +-0.3759252044357331 0.0156099603600098 0.3811072818299944 +0.05383705383083659 0.2145299440226167 0.3816158270208281 +-0.1619732726120931 0.1330765460643622 0.3981378604129159 +0.3740296575279978 0.2111397287358895 0.05465499176783607 +0.382604670169172 0.2201042797991723 0.1102298907106016 +-0.05959478828599387 0.005930859013459864 -0.5663805162004295 +-0.01717673474360292 -0.03153853481555432 0.4675011682325878 +0.1364068407452007 -0.007277509535040018 0.4931110900239976 +0.385242784587982 0.00493529360549544 0.0469820988995634 +-0.6153711266794439 -0.1812035918895354 -0.2101699509978979 +-0.4726629202983678 -0.003327897542008701 0.3806000630414419 +-0.2761035454032154 0.007953612206295075 -0.3797424360944924 +-0.3888636207135883 -0.007938706908226399 0.04178998606509782 +-0.383278176165127 0.002973667381423688 -0.3690494541521624 +-0.3951191553982251 -0.008625205350272521 0.167258353233485 +-0.3778274958314471 0.097823632437333 0.06631071941621698 +-0.3790763659663187 0.1397429760054126 0.166309023532448 +-0.07173407266451474 -0.01249665451441885 -0.3804837643958644 +0.2877288837036373 0.09196999960831206 0.3768515569196144 +-0.2638412931493026 -0.1036766116893414 0.2391878653767805 +0.5991487400768469 -0.08920454298047388 0.02674751036901173 +0.607540993752861 0.1001621139512669 -0.03389076552791264 +0.5998837187108649 0.08338905575378201 0.04540625595553115 +-0.4743685905329021 0.09628227912602481 0.1566870273403166 +-0.4899423282037244 -0.08777947848176004 0.0496655557590468 +-0.4872238388481392 -0.008111734031781198 0.05133027066828713 +-0.2690792112134239 0.1005271315784323 0.2846467055547287 +-0.1622708114648139 0.01555625283271768 0.5870885011921256 +-0.1696039443719094 0.08373059661137741 0.606094424742615 +-0.4727827962661386 0.08448025899041636 0.06102069089748234 +-0.0605344123561698 0.008905324522109764 -0.4866242428196116 +-0.3815748147572086 0.001616454738300511 0.2542510822105668 +-0.3829317236935794 0.09050305714296698 0.249640564453501 +0.2616995180087382 -0.0944119383604532 0.2673071635684744 +0.2822514647509506 -0.005850493949298635 0.2691987114193257 +0.5935218637257337 0.002482111530269636 -0.3213259738383724 +-0.505464412258112 -0.1833568021761748 -0.3992898990550236 +-0.280967206550657 -0.1069018532045351 -0.2712158017948815 +-0.1161557276237301 0.1330592507396156 0.5699473656025384 +0.1369649530693391 0.1316506868926868 0.5592349600599259 +-0.1563140975 -0.12968538685 -0.247312054 +0.2471092834451507 -0.1351991643392156 -0.1628731266204674 +0.05673806489688069 -0.1305484283378361 -0.2874745836492385 +0.1628260980373148 -0.1376422746858275 -0.2489927473513118 +0.285898666730311 -0.1265875515597322 -0.05186365307744811 +-0.05510728922311799 -0.1288880401778301 -0.2867319091516609 +-0.05504061217906892 -0.1306847878369744 0.287899872612026 +0.05682477422099689 -0.1333662801572196 0.2892682689746576 +0.1581282015648371 -0.1267552300700679 0.2438786222378669 +-0.247312076 -0.12968538685 0.156314045 +0.2422066962597056 -0.1302997933916133 0.164651855644622 +-0.1563140525 -0.12968538685 0.247312076 +-0.1630249122458465 0.1419671064563262 -0.2521384231743916 +-0.289625310045959 -0.1340672575029545 -0.05729459453291589 +-0.2879229197619732 -0.1301596644734891 0.05322815267895153 +0.2896188458856734 0.1357133639383724 -0.06264541548807114 +-0.0627561069358414 0.1340128003260848 -0.2885039532850485 +-0.06003912720029972 0.1284922867886495 0.2854965770306342 +-0.2526884136545073 0.1362608592798777 0.1557278784104276 +-0.1651630450343733 0.1414745578076895 0.2503363810445914 +-0.247311957 0.1296850741 -0.156313896 +-0.2854066045 0.1296850741 -0.06434522086097889 +-0.2821769618407176 0.1225299473665231 0.05746447519469901 +0.2874402478974803 -0.131064917060987 0.05857953496711188 +0.2854065895 0.1296850741 0.064345362760046 +0.09956721556483739 0.008900787700942986 0.3040684694373372 +0.141227164390001 -0.03915237319037788 -0.4606711437015398 +0.7323157185262316 -2.18556941e-08 -0.08890473140017549 +-0.732315708831986 -2.18556941e-08 -0.08890490946352991 +0.08890493042999804 -2.18556941e-08 0.7323156895667963 +-0.08890494921809791 -2.18556941e-08 -0.7323156964349565 +0.08890495872633397 -2.18556941e-08 -0.7323156969995325 +-0.08890496836657437 -2.18556941e-08 0.7323156947198333 +-0.7323156957177165 -2.18556941e-08 0.08890500959611544 +0.7323157060283151 -2.18556941e-08 0.08890520766431409 +0.08886322676908474 -0.247455373 -0.446745351 +-0.08886321373091526 -0.247455373 -0.446745366 +-0.253061019 -0.247455373 -0.378732383 +0.4467454255 -0.247455373 -0.088862923672303 +0.378732547 -0.247455373 -0.2530607585 +0.2530610265 -0.247455373 -0.3787323535 +-0.08886321165025131 -0.247455373 0.446745366 +0.08886316884974869 -0.247455373 0.446745366 +0.253060922 -0.247455373 0.378732428 +0.378732428 -0.247455373 0.2530609295 +-0.3787325175 -0.247455373 -0.253060825 +-0.378732428 -0.247455373 0.253060937 +-0.446745366 -0.247455373 0.08886322906283976 +-0.446745396 -0.247455373 -0.08886309193716024 +0.0888631522690823 0.247455314 -0.4467449785 +-0.08886313923091771 0.247455314 -0.446744993 +-0.2530608105 0.247455314 -0.37873207 +0.446745053 0.247455314 -0.08886284917243099 +0.2610196563250436 0.247455314 -0.3734141119799477 +0.3787322345 0.247455314 -0.2530605495 +-0.0888631371502424 0.247455314 0.446744993 +0.0888630943497576 0.247455314 0.446744993 +0.2530607135 0.247455314 0.378732115 +0.378732115 0.247455314 0.253060721 +-0.446745023 0.247455314 -0.08886302493719224 +-0.378732115 0.247455314 0.2530607285 +-0.446744993 0.247455314 0.08886315456280776 +-0.3787322045 0.247455314 -0.253060624 +-0.253060736 0.247455314 0.378732115 +0.446745366 -0.247455373 0.08886333782769699 +0.446744993 0.247455314 0.088863263327569 +0.6200791714077696 0.03064473749778887 -0.2440277489762376 +-0.2626299684804731 -0.01779926795500601 -0.599686805331662 +-0.6123164101680636 -0.04121299126851069 0.2479495684496193 +-0.6378744981290908 -0.08641631458216771 -0.3245838369211331 +0.3222791452973603 0.06758027157215296 0.6459383261078916 +-0.6432533681683356 -2.18556941e-08 0.3613284019936311 +-0.2395605239587259 0.1861935899383363 -0.4408444524343927 +-0.01815759320534445 -0.1340331295755921 -0.618553481301664 +-0.416173620953785 0.1334507751933589 0.4501201060061978 +-0.4299310368060829 -0.1311833513982786 0.4365280856573984 +0.4154314094009814 -0.1274728968155736 0.4504484112711975 +0.3741153953545832 -0.1242355469020759 -0.0241854340486779 +-0.5578965797509108 0.07758988814764095 0.4488543656622259 +0.066887528377056 0.1134054046445166 -0.3500728402253111 +-0.05292311315347678 0.1260431071072435 0.3580833601168914 +0.3551564114844889 0.1039168763322923 0.03884608765805646 +0.2530163933438245 0.1514527965299385 0.5046020668611034 +0.2170199306452358 0.07035957400422863 -0.6861725016313338 +-0.6886531840337877 0.06831837761274545 0.2075619354184494 +0.2146550888955935 0.06925477135835592 0.6869673050358971 +0.6856670468292471 0.07175132639315042 0.2175067344931936 +-0.6855026363122276 0.06738785333983141 -0.224774707991908 +0.210947856979893 -0.08000473670797401 -0.6845483310126054 +0.6855619969327065 0.07218350698739592 -0.2173972238496296 +0.6854377980262316 -0.06758012992784704 -0.224817394281203 +0.2474381341489587 0.1061938412000234 0.5766180351873803 +0.489503016304909 -0.1785221406910227 0.263169924743284 +0.3037402902914204 -0.1480370568980555 -0.5174410365166965 +-0.4864719094610887 0.1752779821252042 0.2794938371976077 +0.4313217303001755 0.135160565 0.5496715059782117 +-0.5506173006531567 -0.135160238 -0.4299067178972762 +0.1092678841352424 -0.08993497320759923 -0.6208877979904343 +0.3315483361717592 -0.1186488286544302 -0.101273559173753 +-0.05332356464008531 -0.003220860878376586 -0.2495200389000687 +-0.04525869337901792 -0.0002733267622190005 0.2511242429814381 +0.1406911262572085 0.00458300473952665 0.2128336142806865 +-0.212131627 -1.862499999991107e-07 -0.141741749 +0.2502262665 -1.862499999991107e-07 0.049773196710046 +-0.3038750919021984 -0.00420447504443615 0.04991694629414084 +0.3060295077376545 0.01098691065300924 0.05504694712444477 +0.1170500682120619 0.1810802133846133 0.4998806125319112 +0.4856608853215326 0.07434546177884246 -0.4322363107862517 +-0.458826067180756 -0.1539076895358543 -0.2411783655387011 +0.2414409659261295 -0.1395981122085382 -0.4286050346936315 +0.4102733319937368 -0.03911917457333562 0.5089220698446709 +0.6436677085590493 0.05276964120720886 -0.3333546024610379 +-0.6328982967916651 0.06338561222163799 -0.3439693233029654 +0.6393865205766276 -0.06783917936103923 0.3319505522899195 +-0.6254841434299707 -0.07086294435058846 0.3511895693749568 +-0.3416269174305976 -0.06356443637116133 -0.6344016122869763 +0.3434770270001724 -0.06692247982426226 -0.6320022943216725 +-0.3433089855389704 0.06847439970572868 0.631576980383792 +0.01187510501014911 0.09071444418817076 0.3552258624282731 +-0.09777969011320647 0.1858866393441107 0.4930423179985466 +-0.09000200204206606 0.1904619032906356 -0.4874776471335208 +-0.1425452905490057 0.237431735 -0.5057831668270991 +-0.1960150597271896 0.1899289804033522 0.3766604375387921 +0.6036653880207526 -0.1001926936403398 -0.1444334652759952 +-0.5402624007491028 0.1237898832495177 0.2844891380745601 +-0.05006475582362858 -0.01280714490476897 0.3921732275300897 +0.1790506689861273 0.09320743189656971 -0.5309763578678544 +0.6040451972022797 -0.01620572259224715 0.2810845165686729 +0.1895947905490057 -0.135160238 -0.6726005975303229 +0.6726004202115424 0.135160565 0.1895946860490058 +-0.6726006637375268 -0.135160238 -0.1895946565490057 +-0.02211429515907533 0.1594037691029022 0.4252731110919391 +-0.2178001310488206 -0.2187878848473082 0.3282470318331274 +-0.5592332994570895 0.1902521000391926 -0.3047708475982757 +-0.5620171585001306 0.1836874142745606 0.3139790672500916 +0.5719226547333054 -0.184839971894952 0.2968062977771854 +-0.6502893879669944 -0.1778044424086221 -0.05434518036839411 +0.05368215214944767 -0.181284115 -0.6464055185303228 +-0.2158743658231015 0.09526841972257911 -0.2647745309902759 +-0.2114200026182485 0.1010409781318316 0.2608651734868205 +-0.1982647250058633 -0.09896759786522454 0.2555716819455021 +-0.3129920331155432 0.1084669587386941 0.1627058173366869 +-0.1551685730867522 0.1080878068838509 0.3164997837178271 +0.3107971034315091 -0.09707599796195117 -0.154823053830057 +-0.1583120171750342 -0.1054586665971662 0.303083453438425 +0.1842856487044458 0.1328246243631194 0.3071171654625506 +0.3405021210770199 0.1414651450899855 0.1906460150110045 +0.1222497898060191 -0.01459653842951159 0.6716419314541555 +0.6187727551000032 -0.1822425903685795 -0.1870407695448417 +-0.5140658381072688 -0.1017583303142997 -0.1591315148082528 +0.1506872594387387 0.107011086778144 -0.5785905499054989 +-0.4543830012629956 0.02070776700615354 -0.3534233502059753 +0.05208701996476486 0.2369451377659843 0.5271608231354115 +-0.05035418058057255 0.236541723503403 -0.5303113484986198 +-0.0536821586992481 0.237431735 0.5234591482297716 +0.652264938 -2.18556941e-08 -0.347841635 +-0.65226484875 -2.18556941e-08 -0.34784178425 +0.34784194825 -2.18556941e-08 0.652264714 +0.570974946 -2.18556941e-08 0.46950069075 +0.05288088412692972 -0.1696738401445088 0.4812655001975786 +-0.03458365933052948 -0.1696053900123612 0.4469547003571025 +0.5253901567920133 0.01334285814744612 -0.2715949297219139 +0.5008552018403365 0.0008968449184086402 -0.4476622468363466 +-0.4679785893234675 -0.1720388775723341 0.1441529655658877 +0.4608469644229725 -0.1715736804020539 0.1526932380534281 +0.4712710999359984 0.1910190031111572 -0.1336326997259548 +-0.4922261458666373 -0.1795631286234275 -0.1535029704981328 +-0.04003071875929925 -0.01735235223485209 0.6844048178359888 +0.05786895306571511 0.04951594845714467 -0.7239498885560181 +0.2127057635028024 -0.0833398813849658 -0.2538144673578778 +-0.5133981546337892 0.03912537763871422 0.4644387356716861 +0.3773758525022843 -0.1145068351912803 -0.2694092044220085 +0.1576327673835248 -0.00174623569951705 0.3567090232373112 +0.06760794136056919 -0.03105061583133411 -0.4613535665477629 +-0.7234264959800163 -0.05601355432624411 0.0509091710031585 +0.3307809421322569 -0.06714567745126444 0.6404082325370969 +-0.2708684508911888 -0.1157463251588329 0.3750957971723319 +-0.2789744190406261 0.03582508947728972 0.3637404139816443 +0.4699139694816132 0.01791589074177289 0.04241381727681382 +-0.1542487939470152 0.03758487944378665 0.3777753383082115 +0.370206414436605 -0.02919216874927832 0.1646086345337974 +-0.3843560426382542 -0.01459984482335379 -0.05331358427969477 +-0.3756036815077443 0.0655473812595731 0.1739739322222879 +0.3624013269252122 -0.0545436899147785 0.2752232163131648 +-0.4804420812630442 -0.05407407237313248 0.1595268585124839 +-0.1649969073003941 0.07391696382954899 -0.4781800483207995 +0.172943408404652 0.03270492546648051 -0.4770234506938139 +-0.5131791762068501 0.2357481102122256 -0.1642331900472321 +0.4967968321015735 0.01720857935661327 0.2988126091935098 +-0.3058843387849141 -0.09545112865391527 0.1671091894972072 +-0.6105761183708176 -0.01727895628303047 -0.05109497939867216 +-0.1020149918114597 0.1002042812521527 -0.4793742608257536 +0.34784208225 -2.18556941e-08 -0.6522646692499999 + +CELLS 4436 22180 +4 416 356 836 690 +4 0 759 1017 1 +4 0 1 792 759 +4 0 1017 187 876 +4 899 180 560 106 +4 1 665 759 494 +4 667 314 610 668 +4 543 176 732 810 +4 145 370 320 156 +4 10 314 667 588 +4 2 187 668 667 +4 3 563 570 5 +4 812 200 199 553 +4 136 419 424 853 +4 414 573 870 572 +4 193 585 486 379 +4 314 511 10 374 +4 204 477 209 828 +4 492 803 250 1020 +4 6 12 202 730 +4 473 210 597 967 +4 312 296 479 272 +4 6 202 704 786 +4 6 911 202 786 +4 6 202 911 730 +4 22 216 951 1009 +4 10 214 610 21 +4 418 986 799 521 +4 774 400 405 356 +4 808 468 357 833 +4 11 22 951 1009 +4 1025 232 819 818 +4 228 826 819 1025 +4 207 994 608 353 +4 499 146 436 919 +4 953 155 303 919 +4 84 974 632 923 +4 328 1030 643 24 +4 554 212 179 115 +4 735 932 171 909 +4 15 18 755 225 +4 15 18 225 421 +4 525 17 224 352 +4 712 206 210 813 +4 525 224 230 352 +4 352 257 264 796 +4 561 166 929 784 +4 295 392 698 724 +4 617 979 184 1 +4 1027 222 594 817 +4 17 224 401 754 +4 17 352 918 224 +4 483 352 388 796 +4 18 28 225 520 +4 697 829 261 492 +4 1033 668 208 181 +4 752 420 599 266 +4 966 293 991 933 +4 548 991 459 169 +4 19 917 230 712 +4 63 697 395 982 +4 19 917 458 230 +4 478 332 252 426 +4 258 821 558 435 +4 623 557 446 419 +4 21 904 214 232 +4 21 374 610 10 +4 21 733 214 610 +4 21 610 566 733 +4 21 214 733 232 +4 240 589 608 355 +4 23 37 624 219 +4 23 219 1006 12 +4 226 484 536 355 +4 231 34 260 238 +4 25 903 233 636 +4 25 819 232 39 +4 25 636 819 39 +4 826 232 233 819 +4 27 33 220 244 +4 28 371 231 225 +4 28 231 238 34 +4 30 577 856 36 +4 30 857 738 37 +4 30 46 856 577 +4 30 46 577 437 +4 30 46 437 857 +4 30 857 437 738 +4 31 865 253 47 +4 920 445 423 449 +4 127 423 449 920 +4 178 550 744 128 +4 178 694 842 692 +4 178 842 744 692 +4 33 243 889 220 +4 272 115 390 179 +4 33 243 244 1019 +4 179 969 993 312 +4 272 312 179 993 +4 35 262 261 55 +4 723 351 269 182 +4 35 308 262 55 +4 1001 791 158 182 +4 35 262 308 906 +4 953 183 268 303 +4 36 22 344 216 +4 657 401 206 754 +4 37 248 49 857 +4 37 248 1032 49 +4 499 919 303 146 +4 37 790 219 242 +4 37 790 242 1032 +4 303 499 190 415 +4 38 905 643 24 +4 499 116 190 415 +4 728 191 669 503 +4 503 191 669 161 +4 39 818 254 819 +4 40 324 910 42 +4 40 44 538 757 +4 41 43 264 785 +4 41 556 785 746 +4 42 281 647 56 +4 42 245 281 910 +4 42 324 910 281 +4 44 251 757 279 +4 45 310 602 59 +4 46 947 49 47 +4 46 47 253 947 +4 47 49 51 947 +4 47 254 253 947 +4 50 62 945 536 +4 51 697 779 63 +4 68 315 762 72 +4 68 315 641 762 +4 52 480 589 60 +4 72 942 177 74 +4 52 32 888 747 +4 53 61 822 983 +4 53 242 243 822 +4 119 135 427 333 +4 119 333 427 749 +4 584 271 562 403 +4 55 829 697 982 +4 55 829 262 261 +4 558 405 596 821 +4 558 578 138 435 +4 56 281 647 241 +4 57 65 285 603 +4 58 66 330 513 +4 59 310 309 67 +4 59 686 310 67 +4 60 541 945 62 +4 61 781 75 63 +4 61 63 779 781 +4 61 289 983 73 +4 288 132 1000 913 +4 62 541 74 60 +4 62 74 541 981 +4 114 694 949 842 +4 554 212 584 179 +4 179 584 403 271 +4 528 584 271 302 +4 63 297 781 75 +4 63 982 297 75 +4 179 212 584 528 +4 63 395 697 779 +4 55 982 697 63 +4 554 584 403 179 +4 313 511 314 566 +4 314 313 668 620 +4 313 511 620 314 +4 314 313 610 668 +4 566 313 610 314 +4 184 1033 181 763 +4 65 69 975 797 +4 187 763 668 1033 +4 65 69 797 321 +4 537 227 313 208 +4 354 207 307 467 +4 65 884 321 603 +4 960 257 264 270 +4 66 342 963 893 +4 960 264 257 746 +4 960 746 602 45 +4 67 805 965 71 +4 67 343 805 71 +4 67 962 343 898 +4 68 72 848 315 +4 68 64 334 641 +4 69 326 849 73 +4 69 73 987 326 +4 69 284 797 987 +4 404 726 116 415 +4 70 342 306 66 +4 70 342 489 306 +4 404 726 415 416 +4 732 176 644 491 +4 71 75 860 335 +4 71 335 985 75 +4 375 176 644 732 +4 71 923 860 84 +4 360 453 491 644 +4 71 308 985 805 +4 72 177 541 74 +4 72 87 848 438 +4 73 75 781 943 +4 73 849 85 326 +4 73 85 943 326 +4 73 326 289 987 +4 74 358 859 88 +4 74 541 489 177 +4 85 644 375 850 +4 850 198 644 375 +4 75 335 943 86 +4 75 335 985 297 +4 75 297 781 335 +4 76 77 1010 380 +4 76 77 380 277 +4 76 583 767 78 +4 76 1010 767 583 +4 6 347 730 657 +4 77 79 650 664 +4 77 650 329 380 +4 78 760 771 80 +4 78 769 760 80 +4 78 769 580 760 +4 81 83 884 1003 +4 81 83 1003 622 +4 82 995 949 899 +4 82 376 974 611 +4 82 611 974 377 +4 83 375 850 85 +4 83 85 849 375 +4 83 375 849 321 +4 84 86 364 961 +4 84 961 923 86 +4 207 231 328 189 +4 85 86 943 644 +4 86 453 644 868 +4 86 644 335 943 +4 86 335 644 961 +4 87 89 438 845 +4 88 90 363 922 +4 88 922 358 90 +4 88 100 101 387 +4 89 91 565 745 +4 359 528 271 302 +4 359 212 179 528 +4 302 130 271 359 +4 359 212 528 507 +4 302 320 156 362 +4 507 528 302 362 +4 528 320 302 362 +4 176 375 316 1002 +4 316 176 198 375 +4 88 363 100 922 +4 100 363 103 922 +4 112 119 482 103 +4 749 119 482 112 +4 364 86 98 453 +4 364 98 102 453 +4 145 720 320 370 +4 94 666 761 96 +4 365 118 989 134 +4 366 110 118 663 +4 954 171 909 838 +4 95 97 765 381 +4 95 97 381 431 +4 838 909 548 171 +4 102 366 118 988 +4 988 366 118 663 +4 95 324 916 381 +4 869 379 386 1029 +4 506 367 220 657 +4 869 252 1029 386 +4 368 157 292 719 +4 96 311 571 97 +4 368 292 443 719 +4 497 719 368 443 +4 737 490 468 325 +4 18 659 225 369 +4 96 761 311 666 +4 194 479 666 311 +4 950 717 156 370 +4 86 453 868 98 +4 98 405 944 110 +4 129 303 190 415 +4 99 345 111 944 +4 452 155 158 953 +4 100 332 113 101 +4 884 603 65 373 +4 100 101 387 332 +4 683 373 322 884 +4 101 113 1012 332 +4 566 902 374 21 +4 511 902 374 566 +4 98 348 868 99 +4 98 868 348 405 +4 102 576 560 899 +4 178 744 934 128 +4 178 842 934 744 +4 27 220 918 244 +4 105 109 515 952 +4 751 220 243 244 +4 105 319 101 235 +4 107 212 554 115 +4 107 103 339 628 +4 711 382 578 432 +4 711 259 382 432 +4 723 351 382 259 +4 382 282 351 723 +4 110 780 345 111 +4 110 780 111 122 +4 161 555 149 211 +4 110 837 405 345 +4 110 405 837 430 +4 111 836 851 120 +4 111 425 853 124 +4 107 339 554 212 +4 339 410 212 107 +4 112 113 332 346 +4 100 112 482 103 +4 302 320 350 156 +4 362 320 156 145 +4 1012 323 332 346 +4 113 1012 332 346 +4 113 112 123 346 +4 969 179 390 554 +4 213 529 327 322 +4 809 176 732 543 +4 1016 869 379 386 +4 278 691 744 990 +4 278 744 689 277 +4 278 990 744 277 +4 992 200 216 537 +4 166 723 561 391 +4 391 723 561 269 +4 200 537 221 216 +4 568 517 390 892 +4 517 568 631 892 +4 118 558 559 138 +4 119 482 103 628 +4 959 133 434 562 +4 959 562 434 420 +4 122 124 946 780 +4 122 126 867 429 +4 122 429 948 126 +4 436 452 614 919 +4 919 452 614 953 +4 123 428 858 126 +4 46 47 50 253 +4 124 424 127 946 +4 124 424 866 127 +4 124 136 866 424 +4 424 789 425 419 +4 125 127 847 423 +4 125 941 847 137 +4 125 137 986 941 +4 126 924 142 867 +4 126 428 858 142 +4 126 924 428 142 +4 126 948 428 429 +4 206 754 401 813 +4 754 224 401 813 +4 129 1018 278 132 +4 276 218 642 839 +4 614 953 452 349 +4 129 415 116 705 +4 129 303 415 1018 +4 839 26 218 642 +4 130 562 312 133 +4 452 953 158 349 +4 131 133 434 959 +4 547 679 831 841 +4 134 341 989 429 +4 134 989 341 148 +4 547 679 841 686 +4 135 142 858 736 +4 15 421 225 600 +4 135 119 625 333 +4 136 150 1007 446 +4 524 600 648 422 +4 648 600 15 422 +4 458 917 257 230 +4 136 789 424 419 +4 136 446 789 419 +4 678 458 263 257 +4 263 917 257 458 +4 137 151 882 799 +4 137 151 799 445 +4 137 986 941 799 +4 793 1004 463 236 +4 237 293 572 173 +4 141 147 417 443 +4 141 417 591 443 +4 731 548 459 169 +4 142 736 428 858 +4 142 455 924 428 +4 142 428 736 455 +4 719 731 459 169 +4 143 153 445 920 +4 156 320 350 950 +4 144 154 652 282 +4 144 578 435 138 +4 144 578 282 435 +4 231 484 535 238 +4 231 535 371 238 +4 966 459 593 393 +4 433 593 966 459 +4 85 644 850 99 +4 99 198 644 850 +4 40 442 413 671 +4 184 553 354 181 +4 239 207 354 467 +4 677 671 413 442 +4 448 132 278 691 +4 150 162 1007 935 +4 448 691 278 300 +4 150 935 1007 446 +4 151 546 445 881 +4 207 189 467 239 +4 240 355 484 226 +4 152 721 512 164 +4 61 779 63 51 +4 153 445 920 460 +4 155 753 452 158 +4 155 919 452 713 +4 156 950 350 159 +4 159 292 599 157 +4 159 599 292 1005 +4 280 396 403 1029 +4 113 123 125 346 +4 1029 396 403 478 +4 123 428 126 125 +4 52 255 589 840 +4 22 216 36 951 +4 255 52 48 36 +4 125 126 127 428 +4 36 216 255 951 +4 164 773 824 172 +4 165 173 237 651 +4 106 258 180 560 +4 774 821 405 560 +4 170 561 929 758 +4 140 416 404 436 +4 404 146 140 436 +4 166 582 561 259 +4 112 482 749 332 +4 735 414 788 909 +4 351 1031 456 259 +4 167 788 669 909 +4 878 515 193 319 +4 168 170 539 956 +4 878 319 193 89 +4 302 130 562 271 +4 508 701 469 652 +4 235 121 591 323 +4 701 349 469 652 +4 925 701 469 508 +4 105 235 121 883 +4 170 539 970 758 +4 621 876 2 188 +4 876 188 187 2 +4 354 763 930 615 +4 172 825 773 824 +4 538 44 251 757 +4 538 670 910 251 +4 173 237 651 823 +4 173 823 572 237 +4 170 561 970 269 +4 170 956 269 970 +4 270 458 960 257 +4 185 204 203 477 +4 187 477 203 208 +4 203 828 208 477 +4 296 272 96 666 +4 207 307 467 328 +4 154 791 282 182 +4 282 791 452 351 +4 349 282 791 452 +4 349 154 791 282 +4 28 231 371 238 +4 330 915 724 66 +4 330 915 66 58 +4 28 520 504 273 +4 77 650 380 664 +4 274 213 322 529 +4 933 991 548 169 +4 275 357 606 331 +4 966 991 548 933 +4 677 770 761 96 +4 939 283 839 16 +4 277 77 380 664 +4 378 300 278 277 +4 56 64 281 241 +4 241 334 64 281 +4 129 415 705 278 +4 281 318 641 64 +4 129 278 705 300 +4 58 66 513 964 +4 44 279 413 706 +4 279 606 331 275 +4 44 279 706 58 +4 795 131 581 434 +4 737 325 820 490 +4 869 386 1016 319 +4 722 150 162 1007 +4 282 578 526 435 +4 907 150 722 1007 +4 880 241 334 64 +4 64 680 880 241 +4 129 415 278 1018 +4 288 132 1018 1000 +4 288 1018 217 1000 +4 217 1018 268 1000 +4 573 173 572 293 +4 104 108 886 726 +4 649 294 324 95 +4 926 312 130 296 +4 681 879 318 64 +4 148 514 721 160 +4 148 721 514 908 +4 650 77 329 301 +4 639 904 518 214 +4 639 215 518 14 +4 639 214 518 215 +4 519 114 694 949 +4 899 694 949 519 +4 304 704 786 6 +4 651 305 173 742 +4 173 782 742 305 +4 184 181 354 763 +4 537 467 313 226 +4 467 313 226 643 +4 307 551 7 930 +4 314 511 374 566 +4 21 566 610 374 +4 311 357 379 699 +4 566 314 610 374 +4 479 311 379 699 +4 97 431 1011 311 +4 163 719 497 459 +4 743 479 379 312 +4 312 562 434 133 +4 312 403 699 379 +4 163 719 459 169 +4 312 479 379 699 +4 696 133 312 434 +4 459 719 497 443 +4 427 555 454 439 +4 736 427 555 454 +4 181 313 668 208 +4 763 307 620 313 +4 610 313 208 668 +4 315 942 177 72 +4 315 820 325 177 +4 315 72 848 438 +4 848 89 737 438 +4 596 578 526 456 +4 596 821 526 578 +4 478 426 252 396 +4 396 426 252 532 +4 179 528 584 271 +4 359 528 179 271 +4 359 528 302 507 +4 528 320 584 302 +4 353 196 276 563 +4 563 276 353 608 +4 682 317 27 658 +4 27 682 244 317 +4 319 869 386 252 +4 145 720 212 320 +4 720 236 748 320 +4 701 217 469 349 +4 701 934 925 217 +4 925 217 175 186 +4 925 934 175 217 +4 469 217 186 349 +4 346 121 1012 323 +4 113 121 1012 346 +4 123 427 428 125 +4 125 428 127 423 +4 13 976 510 328 +4 58 330 727 279 +4 320 950 236 197 +4 252 386 387 478 +4 72 177 480 541 +4 541 246 534 740 +4 139 720 212 145 +4 68 334 481 762 +4 32 241 747 334 +4 241 246 334 475 +4 52 334 481 68 +4 334 32 52 747 +4 339 103 482 628 +4 564 340 512 152 +4 340 429 811 587 +4 148 807 341 134 +4 989 441 430 429 +4 341 587 429 340 +4 148 908 514 341 +4 809 543 360 361 +4 361 689 543 389 +4 361 543 360 389 +4 213 689 543 361 +4 213 543 809 361 +4 200 216 221 344 +4 677 442 413 44 +4 677 44 413 706 +4 679 556 547 831 +4 621 927 783 549 +4 549 707 783 621 +4 178 692 744 550 +4 30 344 577 36 +4 692 744 550 928 +4 307 620 551 930 +4 82 377 974 576 +4 551 307 709 620 +4 360 389 453 377 +4 185 204 477 188 +4 185 801 204 188 +4 82 576 974 84 +4 552 932 728 788 +4 185 201 203 204 +4 728 552 669 191 +4 728 788 669 552 +4 5 973 812 553 +4 98 99 944 348 +4 98 405 348 944 +4 99 851 111 345 +4 345 836 851 111 +4 345 836 690 397 +4 184 200 553 181 +4 187 188 477 208 +4 112 123 346 749 +4 1033 763 668 181 +4 346 125 986 423 +4 203 828 477 204 +4 188 209 801 204 +4 188 208 209 477 +4 188 801 209 473 +4 137 418 986 799 +4 188 214 802 209 +4 188 209 208 214 +4 365 118 663 989 +4 348 851 198 99 +4 348 99 345 851 +4 348 690 397 345 +4 288 400 175 614 +4 415 400 776 288 +4 415 614 400 288 +4 288 776 810 400 +4 288 175 400 810 +4 212 720 748 320 +4 139 720 748 212 +4 349 953 158 542 +4 938 349 652 154 +4 542 154 158 349 +4 777 708 514 582 +4 584 396 420 350 +4 777 721 514 708 +4 350 562 420 584 +4 791 158 452 753 +4 1001 753 158 791 +4 270 352 257 264 +4 353 196 563 207 +4 5 553 199 563 +4 41 264 658 270 +4 41 960 264 270 +4 7 655 930 3 +4 850 316 198 375 +4 104 316 198 850 +4 40 44 757 413 +4 201 203 204 827 +4 201 222 827 204 +4 202 219 1027 205 +4 279 275 590 413 +4 188 209 204 477 +4 203 200 537 221 +4 204 1027 801 205 +4 477 208 209 828 +4 204 222 828 209 +4 205 801 597 372 +4 205 219 1027 476 +4 206 813 223 210 +4 206 220 223 401 +4 200 992 181 537 +4 209 208 214 832 +4 209 222 828 594 +4 8 215 967 473 +4 210 228 223 372 +4 210 229 813 223 +4 210 223 228 229 +4 210 813 229 712 +4 210 234 712 229 +4 92 390 612 94 +4 92 390 568 612 +4 92 568 390 892 +4 92 501 390 94 +4 501 390 892 92 +4 328 313 1030 13 +4 207 231 994 225 +4 826 215 228 233 +4 353 15 196 267 +4 353 15 939 196 +4 608 246 189 355 +4 189 231 484 535 +4 355 589 246 533 +4 22 216 1009 344 +4 175 400 774 614 +4 821 435 526 578 +4 186 526 821 435 +4 506 27 889 220 +4 218 888 32 747 +4 500 447 140 146 +4 407 447 140 500 +4 115 390 107 501 +4 501 390 107 892 +4 221 815 828 222 +4 221 226 227 1024 +4 221 815 1024 227 +4 895 152 466 503 +4 503 152 466 164 +4 223 243 476 834 +4 223 250 803 224 +4 223 224 751 250 +4 223 250 834 229 +4 224 813 230 803 +4 224 483 803 230 +4 224 244 751 483 +4 161 211 409 502 +4 643 328 24 905 +4 226 247 355 536 +4 508 144 435 411 +4 226 247 488 1024 +4 228 826 233 819 +4 228 817 594 1025 +4 228 229 834 835 +4 826 1025 594 232 +4 228 835 819 233 +4 228 1025 834 817 +4 534 306 238 260 +4 238 306 34 260 +4 279 413 590 757 +4 229 492 250 834 +4 230 256 483 803 +4 728 503 466 164 +4 230 917 257 256 +4 728 466 824 164 +4 728 824 172 164 +4 2 668 620 588 +4 588 314 668 620 +4 314 511 620 588 +4 444 459 384 546 +4 546 593 459 384 +4 364 86 453 961 +4 364 453 102 576 +4 32 241 334 880 +4 242 822 249 243 +4 243 1019 751 244 +4 244 285 388 682 +4 249 395 492 250 +4 249 289 243 822 +4 886 726 404 416 +4 726 397 416 886 +4 28 520 371 225 +4 28 371 520 273 +4 371 493 251 273 +4 493 246 475 814 +4 238 273 34 306 +4 256 492 262 1020 +4 256 796 1020 298 +4 251 475 287 295 +4 287 251 295 590 +4 287 590 910 251 +4 245 287 251 475 +4 910 287 251 245 +4 273 34 306 894 +4 205 801 372 1027 +4 205 476 1027 372 +4 209 1027 594 372 +4 378 278 689 277 +4 601 824 472 487 +4 870 728 472 601 +4 728 601 824 472 +4 870 472 487 601 +4 809 968 327 360 +4 82 376 962 974 +4 337 343 841 376 +4 337 361 376 605 +4 389 377 842 180 +4 82 995 377 949 +4 361 389 377 607 +4 870 487 174 601 +4 96 97 571 873 +4 96 873 571 677 +4 0 876 187 2 +4 284 289 797 987 +4 286 688 290 291 +4 602 310 309 59 +4 602 309 257 678 +4 602 310 299 309 +4 602 299 257 309 +4 57 603 285 286 +4 57 603 286 322 +4 475 457 814 246 +4 603 285 286 322 +4 287 325 1028 295 +4 287 687 325 318 +4 246 814 534 740 +4 257 309 299 796 +4 290 297 298 1022 +4 290 327 1022 336 +4 257 299 746 796 +4 291 337 290 299 +4 291 830 337 299 +4 722 153 460 165 +4 153 461 460 569 +4 907 153 569 461 +4 153 907 722 461 +4 724 342 66 306 +4 724 306 392 342 +4 724 330 66 513 +4 724 342 513 66 +4 295 325 1028 698 +4 306 342 489 392 +4 76 380 1010 583 +4 297 1022 308 298 +4 298 308 309 805 +4 299 336 337 290 +4 76 380 583 277 +4 329 274 322 529 +4 380 274 361 689 +4 381 97 765 571 +4 381 97 311 431 +4 324 486 687 318 +4 66 963 342 513 +4 656 281 245 241 +4 236 426 522 439 +4 439 384 383 1004 +4 384 393 593 459 +4 445 460 385 449 +4 445 460 593 385 +4 385 394 460 593 +4 449 460 385 675 +4 460 385 675 394 +4 184 1033 200 181 +4 203 181 537 200 +4 244 751 483 1019 +4 388 290 286 285 +4 810 732 389 491 +4 378 176 689 776 +4 936 795 420 702 +4 689 744 361 583 +4 583 580 744 361 +4 322 688 329 529 +4 322 529 327 688 +4 447 462 729 451 +4 215 937 233 14 +4 233 215 214 826 +4 325 331 698 833 +4 518 215 233 14 +4 518 214 233 215 +4 280 795 434 420 +4 177 820 325 392 +4 246 814 740 457 +4 795 959 434 420 +4 295 392 325 698 +4 392 698 820 325 +4 420 795 959 702 +4 324 808 275 331 +4 331 778 606 1034 +4 572 394 472 414 +4 700 952 936 117 +4 173 742 572 823 +4 414 393 394 472 +4 394 675 487 464 +4 335 360 343 336 +4 968 336 327 360 +4 336 360 343 337 +4 336 337 327 360 +4 337 361 605 338 +4 337 343 376 360 +4 337 361 360 376 +4 337 360 809 327 +4 698 490 820 325 +4 698 325 833 490 +4 63 781 395 779 +4 63 395 781 297 +4 347 12 730 220 +4 12 506 220 347 +4 952 417 396 532 +4 43 264 286 646 +4 646 286 682 264 +4 42 281 656 647 +4 647 281 656 241 +4 527 656 241 647 +4 117 131 795 702 +4 117 795 936 702 +4 236 211 439 463 +4 370 717 236 950 +4 236 463 439 1004 +4 8 662 967 977 +4 602 59 309 678 +4 45 59 602 678 +4 263 59 678 309 +4 263 59 531 678 +4 504 674 58 727 +4 44 674 727 58 +4 7 207 307 655 +4 655 7 207 955 +4 655 207 354 563 +4 196 563 207 655 +4 207 267 196 655 +4 267 207 955 655 +4 307 207 354 655 +4 399 153 165 460 +4 715 884 1003 81 +4 318 468 687 325 +4 888 402 22 951 +4 886 108 404 726 +4 915 406 66 58 +4 407 935 162 150 +4 64 879 318 565 +4 889 27 33 220 +4 149 503 1008 161 +4 64 565 318 641 +4 161 211 149 409 +4 366 110 663 405 +4 988 366 663 405 +4 339 896 410 107 +4 410 145 139 212 +4 900 258 411 106 +4 411 144 435 138 +4 110 663 405 430 +4 988 663 558 405 +4 663 405 430 596 +4 412 29 234 35 +4 28 510 231 34 +4 328 1030 24 13 +4 458 525 230 352 +4 325 833 490 468 +4 334 641 64 281 +4 334 475 641 281 +4 40 413 910 324 +4 176 732 810 491 +4 40 413 324 671 +4 571 671 324 413 +4 571 413 324 275 +4 354 763 615 184 +4 930 354 615 3 +4 3 354 615 570 +4 735 933 909 171 +4 167 788 909 932 +4 238 273 306 295 +4 915 306 724 66 +4 361 389 360 377 +4 86 868 644 99 +4 98 868 86 99 +4 583 580 760 78 +4 583 78 574 580 +4 689 744 389 361 +4 95 431 381 579 +4 431 379 479 311 +4 381 311 357 379 +4 575 579 431 95 +4 743 431 379 479 +4 138 711 578 901 +4 559 138 578 901 +4 387 101 319 332 +4 165 399 460 433 +4 386 252 1029 478 +4 399 151 546 163 +4 312 403 379 434 +4 743 434 312 379 +4 931 131 434 581 +4 170 166 929 561 +4 689 543 389 810 +4 693 726 116 108 +4 758 474 470 465 +4 784 561 582 758 +4 379 1029 699 386 +4 517 339 554 107 +4 517 103 339 107 +4 991 433 966 459 +4 146 436 919 447 +4 415 499 404 436 +4 436 447 356 452 +4 186 217 175 614 +4 186 175 774 614 +4 102 899 560 106 +4 437 46 947 248 +4 54 714 260 981 +4 714 981 533 260 +4 738 221 222 815 +4 437 815 1024 221 +4 738 248 815 222 +4 72 87 438 942 +4 714 536 260 533 +4 54 863 260 714 +4 863 714 536 260 +4 315 72 438 942 +4 315 737 325 820 +4 774 405 400 440 +4 405 560 440 774 +4 360 389 491 453 +4 365 663 430 989 +4 989 663 430 559 +4 341 587 441 429 +4 110 663 430 365 +4 429 441 450 587 +4 441 800 451 450 +4 663 596 430 559 +4 341 432 514 148 +4 89 845 319 438 +4 89 105 319 845 +4 89 193 438 319 +4 693 81 79 1002 +4 681 91 318 879 +4 683 884 322 715 +4 637 775 201 408 +4 637 9 201 775 +4 553 239 199 563 +4 84 961 364 576 +4 364 961 453 576 +4 218 241 283 246 +4 886 416 140 557 +4 218 32 241 747 +4 886 557 140 120 +4 416 557 436 140 +4 415 303 953 217 +4 415 953 614 217 +4 98 453 868 405 +4 1015 440 400 405 +4 440 453 560 405 +4 56 64 241 680 +4 7 655 307 930 +4 560 106 258 900 +4 558 578 559 138 +4 307 655 354 930 +4 405 821 356 596 +4 68 334 762 641 +4 287 325 295 457 +4 457 295 392 325 +4 457 177 325 392 +4 360 732 644 491 +4 968 732 644 360 +4 809 732 360 543 +4 543 732 360 389 +4 732 360 389 491 +4 968 360 809 732 +4 232 233 214 826 +4 518 904 232 214 +4 518 214 232 233 +4 152 512 466 164 +4 152 564 466 512 +4 895 152 564 466 +4 417 443 532 591 +4 419 446 789 425 +4 222 828 594 815 +4 222 248 815 594 +4 594 227 832 818 +4 370 950 320 156 +4 39 232 818 819 +4 594 248 815 254 +4 346 986 521 423 +4 418 521 1014 323 +4 418 444 882 1014 +4 423 384 445 799 +4 423 445 384 385 +4 423 385 449 445 +4 424 1023 780 425 +4 424 948 429 811 +4 424 450 811 429 +4 425 780 430 1023 +4 425 446 1023 451 +4 356 837 456 1026 +4 356 447 1026 673 +4 356 452 447 673 +4 302 195 562 1035 +4 960 746 257 602 +4 602 678 257 960 +4 746 299 257 602 +4 425 451 1023 430 +4 430 441 451 1023 +4 430 451 441 456 +4 425 451 430 1026 +4 1026 430 456 451 +4 428 449 423 455 +4 429 430 1023 441 +4 429 450 811 587 +4 603 884 321 322 +4 884 322 603 373 +4 373 322 603 57 +4 603 285 322 321 +4 20 30 613 567 +4 344 613 20 30 +4 613 30 221 567 +4 344 221 613 30 +4 17 224 918 401 +4 657 367 401 17 +4 989 432 341 148 +4 240 467 537 226 +4 467 484 226 240 +4 467 643 226 484 +4 505 200 1009 199 +4 5 812 199 553 +4 202 1027 204 205 +4 185 204 205 202 +4 318 486 687 468 +4 446 729 451 447 +4 446 450 451 798 +4 446 729 798 451 +4 196 563 655 741 +4 912 563 196 741 +4 1031 561 462 495 +4 655 267 196 741 +4 441 471 465 514 +4 441 451 800 471 +4 651 305 742 470 +4 1031 495 462 451 +4 742 782 470 305 +4 742 470 487 823 +4 439 454 384 463 +4 742 823 651 470 +4 742 487 470 782 +4 4 914 911 473 +4 473 205 801 597 +4 8 967 210 473 +4 454 592 385 384 +4 8 4 473 914 +4 449 1021 811 450 +4 967 215 228 597 +4 449 385 423 455 +4 450 451 798 800 +4 285 797 290 327 +4 285 327 322 321 +4 322 285 290 327 +4 285 797 327 321 +4 45 556 746 831 +4 451 750 729 798 +4 831 556 746 830 +4 447 462 451 673 +4 476 242 1032 249 +4 455 1021 464 512 +4 223 224 918 751 +4 224 751 244 918 +4 194 479 296 666 +4 117 936 280 952 +4 272 666 479 390 +4 194 479 312 296 +4 143 127 739 920 +4 847 127 143 920 +4 127 449 428 811 +4 739 127 811 449 +4 423 449 428 127 +4 507 212 528 362 +4 212 320 528 362 +4 346 521 485 427 +4 387 100 482 103 +4 480 740 246 541 +4 481 740 457 246 +4 52 334 747 481 +4 481 740 246 480 +4 119 748 628 139 +4 339 628 748 139 +4 40 757 538 910 +4 384 463 454 592 +4 460 823 675 461 +4 385 454 464 592 +4 460 823 394 675 +4 538 757 251 910 +4 40 757 910 413 +4 387 332 478 482 +4 224 352 483 230 +4 224 244 483 317 +4 230 256 257 483 +4 244 483 317 388 +4 707 639 667 621 +4 483 796 256 257 +4 707 667 188 621 +4 264 291 388 796 +4 454 592 466 464 +4 454 463 466 592 +4 464 465 487 825 +4 91 318 565 745 +4 879 91 318 565 +4 328 231 484 189 +4 723 259 382 711 +4 723 259 711 160 +4 346 323 521 418 +4 787 461 729 750 +4 598 787 461 729 +4 798 750 729 461 +4 598 729 461 162 +4 1007 162 461 729 +4 1007 729 461 798 +4 95 579 381 916 +4 381 379 357 468 +4 658 17 918 27 +4 658 17 352 918 +4 394 487 824 464 +4 658 918 317 27 +4 658 918 352 317 +4 38 260 488 643 +4 226 247 536 488 +4 50 863 488 38 +4 70 74 489 859 +4 70 342 859 489 +4 319 490 358 386 +4 319 1016 490 386 +4 568 386 358 490 +4 90 922 358 568 +4 491 810 176 400 +4 491 176 198 400 +4 689 176 543 810 +4 491 389 810 440 +4 491 1015 400 198 +4 491 440 400 1015 +4 701 217 925 469 +4 925 217 186 469 +4 925 469 186 435 +4 137 882 418 799 +4 799 882 418 444 +4 229 492 835 234 +4 492 395 829 1020 +4 250 395 492 1020 +4 492 261 262 829 +4 367 918 401 17 +4 367 220 401 918 +4 731 383 719 459 +4 292 383 443 719 +4 719 383 443 459 +4 292 383 719 731 +4 385 464 454 455 +4 385 464 455 1021 +4 385 1021 675 464 +4 746 299 310 831 +4 746 310 299 602 +4 225 493 251 371 +4 836 1026 425 837 +4 836 557 425 1026 +4 837 430 1026 425 +4 517 390 107 554 +4 892 517 390 107 +4 554 115 390 107 +4 718 775 637 408 +4 718 9 637 775 +4 9 775 613 201 +4 471 582 495 465 +4 471 465 495 800 +4 209 826 214 802 +4 802 214 215 826 +4 802 826 597 209 +4 802 597 826 215 +4 775 567 201 890 +4 775 567 613 201 +4 775 408 890 201 +4 537 226 313 227 +4 991 163 433 459 +4 566 226 227 313 +4 537 227 221 226 +4 572 394 414 966 +4 456 432 259 471 +4 496 703 586 117 +4 163 497 398 459 +4 165 399 433 498 +4 3 7 655 955 +4 4 653 911 6 +4 4 6 911 957 +4 293 498 165 433 +4 5 11 199 812 +4 499 146 404 436 +4 162 935 407 500 +4 162 978 935 500 +4 501 115 390 272 +4 10 639 214 21 +4 504 727 58 406 +4 493 251 475 245 +4 251 493 475 295 +4 506 27 220 367 +4 507 212 362 145 +4 507 145 410 212 +4 16 527 283 26 +4 17 367 918 27 +4 508 652 435 144 +4 18 369 225 28 +4 234 509 523 29 +4 19 531 917 29 +4 509 29 234 412 +4 510 28 231 369 +4 511 13 313 709 +4 511 13 1030 313 +4 239 354 181 467 +4 745 486 468 193 +4 745 93 486 585 +4 193 486 468 379 +4 878 109 496 515 +4 93 496 585 745 +4 455 340 1021 512 +4 279 513 331 606 +4 510 24 328 905 +4 295 306 392 724 +4 891 22 344 36 +4 1028 513 331 279 +4 513 606 1034 331 +4 514 340 587 341 +4 341 441 587 514 +4 35 906 308 635 +4 37 889 219 23 +4 514 512 465 340 +4 40 42 910 958 +4 40 294 324 42 +4 41 43 785 545 +4 42 540 281 56 +4 745 515 585 193 +4 585 515 379 193 +4 43 646 286 57 +4 43 544 57 286 +4 52 619 334 68 +4 759 203 187 477 +4 53 69 284 975 +4 54 38 260 863 +4 1017 187 477 759 +4 187 1017 477 876 +4 876 477 187 188 +4 59 67 309 906 +4 41 785 264 746 +4 746 785 264 291 +4 36 216 577 247 +4 76 766 1010 77 +4 36 247 255 216 +4 76 766 875 1010 +4 386 478 517 387 +4 387 103 482 517 +4 85 644 326 375 +4 82 804 576 84 +4 966 991 293 433 +4 991 498 293 433 +4 212 320 362 145 +4 93 95 916 980 +4 102 84 576 804 +4 127 811 948 424 +4 739 127 424 811 +4 127 811 428 948 +4 106 633 560 102 +4 18 520 225 421 +4 520 251 727 273 +4 520 251 371 225 +4 520 371 251 273 +4 660 421 520 18 +4 520 674 727 251 +4 465 777 582 474 +4 582 784 708 166 +4 117 280 936 795 +4 510 369 231 659 +4 225 659 231 369 +4 659 231 207 225 +4 659 976 207 231 +4 659 510 976 231 +4 120 136 419 623 +4 715 81 1003 1002 +4 715 1003 322 213 +4 129 132 278 448 +4 715 1002 1003 213 +4 300 277 77 764 +4 138 144 578 711 +4 44 279 757 413 +4 139 409 720 145 +4 279 275 331 590 +4 146 595 919 155 +4 147 417 292 157 +4 147 157 292 368 +4 195 350 159 156 +4 149 895 1008 503 +4 748 236 426 320 +4 130 1035 562 133 +4 130 302 562 1035 +4 157 159 292 661 +4 478 426 396 320 +4 478 426 320 748 +4 478 396 584 320 +4 212 478 584 320 +4 212 478 320 748 +4 384 459 383 548 +4 444 443 383 459 +4 166 391 561 170 +4 925 949 180 842 +4 106 925 949 180 +4 539 170 970 956 +4 168 604 539 170 +4 168 598 162 729 +4 269 351 791 182 +4 173 174 572 782 +4 351 791 452 753 +4 269 753 791 351 +4 174 487 877 609 +4 224 317 483 352 +4 483 257 352 796 +4 182 351 791 282 +4 1014 444 443 383 +4 726 316 622 1002 +4 1014 383 443 522 +4 30 221 738 437 +4 30 437 577 221 +4 521 444 383 384 +4 567 30 221 738 +4 521 439 383 522 +4 8 967 215 14 +4 30 344 221 577 +4 937 14 977 509 +4 43 264 785 286 +4 388 286 290 291 +4 2 187 620 668 +4 187 620 668 763 +4 323 485 522 426 +4 349 452 614 526 +4 282 456 452 526 +4 356 526 452 456 +4 614 452 356 526 +4 578 711 144 382 +4 423 521 384 799 +4 288 928 128 744 +4 128 132 288 913 +4 450 676 1021 587 +4 676 464 465 487 +4 132 928 128 288 +4 758 750 465 470 +4 451 800 750 798 +4 461 470 676 750 +4 800 465 495 750 +4 128 288 744 934 +4 758 750 495 465 +4 128 288 934 913 +4 203 537 208 221 +4 203 181 208 537 +4 283 816 225 994 +4 600 493 241 245 +4 283 493 246 241 +4 493 475 241 245 +4 381 324 687 808 +4 381 468 808 687 +4 324 331 687 808 +4 331 325 687 833 +4 687 468 833 325 +4 493 475 246 241 +4 213 809 327 529 +4 329 274 529 361 +4 529 809 327 337 +4 274 213 689 378 +4 380 274 689 378 +4 277 380 689 378 +4 213 378 176 689 +4 359 130 271 179 +4 302 350 195 156 +4 532 522 426 323 +4 62 945 536 541 +4 484 238 260 533 +4 534 306 295 238 +4 534 295 306 392 +4 534 489 392 306 +4 621 794 188 927 +4 876 188 621 794 +4 656 600 241 245 +4 656 527 241 600 +4 355 535 533 246 +4 225 816 535 994 +4 488 50 536 863 +4 484 536 533 260 +4 151 444 546 459 +4 398 151 163 459 +4 151 163 459 546 +4 151 459 398 444 +4 563 276 608 951 +4 608 218 276 283 +4 276 218 608 951 +4 280 795 581 434 +4 117 795 586 280 +4 586 795 581 280 +4 15 421 600 648 +4 648 421 600 251 +4 382 711 144 723 +4 382 144 282 723 +4 825 465 487 474 +4 229 835 492 834 +4 249 395 697 492 +4 168 539 729 956 +4 168 787 729 539 +4 112 332 749 346 +4 332 323 532 426 +4 485 332 426 323 +4 60 480 589 541 +4 541 589 533 246 +4 541 534 246 533 +4 217 268 542 701 +4 349 217 542 701 +4 938 154 542 349 +4 883 235 121 591 +4 328 307 467 313 +4 43 658 264 646 +4 646 264 682 658 +4 223 243 834 250 +4 834 243 249 250 +4 283 493 241 600 +4 546 460 445 153 +4 546 433 459 593 +4 399 546 460 433 +4 546 153 399 460 +4 548 171 909 933 +4 280 434 379 403 +4 723 561 259 166 +4 785 264 291 286 +4 56 318 281 64 +4 56 681 318 64 +4 540 318 281 56 +4 681 56 318 540 +4 115 212 179 359 +4 554 584 478 403 +4 386 390 554 1029 +4 386 478 1029 554 +4 179 115 390 554 +4 211 463 555 439 +4 555 454 463 466 +4 439 463 555 454 +4 281 318 287 641 +4 641 325 287 457 +4 641 325 318 287 +4 397 836 557 120 +4 419 446 425 557 +4 430 596 456 432 +4 989 901 432 148 +4 41 658 264 43 +4 560 405 558 821 +4 560 633 988 102 +4 8 215 473 783 +4 215 707 783 8 +4 430 432 441 989 +4 430 559 432 989 +4 561 970 758 170 +4 121 141 591 882 +4 561 462 495 970 +4 121 418 137 882 +4 121 882 591 418 +4 878 109 515 105 +4 878 515 319 105 +4 878 105 319 89 +4 3 655 354 563 +4 563 354 239 207 +4 741 563 655 3 +4 264 746 796 257 +4 142 455 736 564 +4 564 464 455 454 +4 630 736 564 142 +4 565 318 325 468 +4 565 737 468 325 +4 1003 83 321 375 +4 1003 321 322 327 +4 1003 213 327 322 +4 1003 327 213 375 +4 226 643 313 566 +4 24 643 634 902 +4 567 222 827 201 +4 922 568 90 631 +4 143 569 920 739 +4 569 449 450 675 +4 640 739 569 143 +4 319 387 386 358 +4 319 386 387 252 +4 571 808 275 324 +4 735 573 414 293 +4 572 487 472 394 +4 870 572 174 487 +4 82 899 576 804 +4 102 804 576 899 +4 901 118 559 138 +4 989 901 118 559 +4 989 134 118 901 +4 148 134 989 901 +4 735 728 472 870 +4 414 573 572 293 +4 870 573 174 572 +4 908 152 340 806 +4 76 574 872 583 +4 148 908 341 807 +4 743 379 431 940 +4 874 431 97 575 +4 908 806 340 807 +4 908 340 341 807 +4 577 344 221 216 +4 902 1030 24 643 +4 46 253 50 247 +4 437 46 247 253 +4 437 253 247 1024 +4 1024 247 488 253 +4 596 578 456 432 +4 579 431 381 379 +4 940 379 431 579 +4 93 916 486 585 +4 579 379 381 486 +4 93 916 585 980 +4 580 607 389 361 +4 361 580 744 389 +4 744 842 389 580 +4 105 515 319 952 +4 105 319 235 952 +4 319 515 252 952 +4 319 252 235 952 +4 796 299 291 290 +4 796 298 299 290 +4 943 75 781 335 +4 280 581 379 434 +4 943 335 781 326 +4 743 581 434 379 +4 940 743 379 581 +4 582 758 465 474 +4 939 283 16 15 +4 582 495 465 758 +4 283 16 15 600 +4 563 276 627 629 +4 292 197 443 383 +4 583 380 361 689 +4 197 522 443 383 +4 96 311 761 571 +4 381 571 324 808 +4 381 571 357 311 +4 197 236 383 192 +4 292 197 383 192 +4 197 236 522 383 +4 950 192 236 197 +4 705 776 726 378 +4 212 584 478 554 +4 590 275 331 324 +4 910 413 590 324 +4 287 324 910 590 +4 287 331 324 590 +4 413 275 590 324 +4 745 585 486 193 +4 585 579 486 379 +4 585 579 379 940 +4 238 493 273 295 +4 371 238 493 273 +4 181 354 313 467 +4 471 514 582 465 +4 465 512 514 777 +4 585 940 379 586 +4 515 586 379 280 +4 585 515 586 379 +4 586 581 379 280 +4 586 379 581 940 +4 838 548 731 171 +4 200 973 812 505 +4 572 742 487 823 +4 572 174 487 782 +4 572 487 742 782 +4 570 563 553 5 +4 514 465 587 340 +4 514 465 441 587 +4 587 450 811 1021 +4 52 589 48 60 +4 52 255 48 589 +4 240 589 247 255 +4 355 247 589 536 +4 590 1028 331 279 +4 287 590 295 1028 +4 121 591 323 418 +4 591 1014 323 418 +4 591 882 1014 418 +4 616 911 185 801 +4 616 473 911 801 +4 394 592 464 824 +4 592 463 466 472 +4 237 593 460 394 +4 433 460 237 593 +4 546 460 593 445 +4 546 433 593 460 +4 733 21 232 31 +4 172 824 487 825 +4 464 825 824 512 +4 427 423 428 125 +4 427 125 346 423 +4 465 777 514 582 +4 412 25 903 233 +4 209 826 832 214 +4 209 222 594 1027 +4 214 826 832 232 +4 217 303 953 268 +4 1018 303 415 217 +4 217 303 268 1018 +4 149 555 630 135 +4 135 427 555 736 +4 555 736 630 135 +4 135 333 149 555 +4 35 29 234 263 +4 126 428 948 127 +4 31 253 733 488 +4 436 919 614 415 +4 415 919 614 953 +4 614 356 452 436 +4 558 821 578 435 +4 596 356 837 456 +4 597 210 372 228 +4 372 834 223 476 +4 478 332 426 482 +4 35 906 263 262 +4 86 961 644 453 +4 252 319 235 332 +4 420 959 562 266 +4 752 157 599 710 +4 225 251 493 600 +4 648 600 524 245 +4 648 600 245 251 +4 525 458 230 19 +4 155 713 452 753 +4 269 351 462 753 +4 269 716 753 462 +4 525 230 1013 19 +4 525 230 224 754 +4 654 754 206 712 +4 921 1013 19 525 +4 525 17 754 224 +4 525 754 1013 230 +4 654 525 754 1013 +4 207 353 196 267 +4 353 207 659 267 +4 51 39 254 984 +4 45 41 746 556 +4 239 216 951 240 +4 114 178 934 128 +4 349 452 526 282 +4 349 791 158 452 +4 353 225 283 15 +4 225 283 15 600 +4 225 283 600 493 +4 952 591 417 532 +4 578 144 282 382 +4 80 611 997 82 +4 82 997 376 611 +4 337 605 376 841 +4 337 605 841 338 +4 92 612 996 94 +4 94 761 770 96 +4 80 995 611 82 +4 82 611 377 995 +4 607 389 377 842 +4 580 842 389 607 +4 584 320 396 350 +4 350 320 396 197 +4 227 313 208 610 +4 610 832 214 208 +4 610 313 566 227 +4 80 607 605 611 +4 611 376 360 361 +4 611 361 360 377 +4 611 605 376 361 +4 611 361 377 607 +4 612 778 342 606 +4 612 342 778 568 +4 612 390 568 357 +4 9 613 200 665 +4 9 613 665 201 +4 613 203 201 827 +4 613 200 203 221 +4 618 89 565 737 +4 45 746 310 831 +4 618 89 91 565 +4 151 137 881 445 +4 619 64 334 68 +4 880 32 619 334 +4 235 952 591 883 +4 310 45 831 547 +4 591 121 883 141 +4 235 105 952 883 +4 622 104 726 108 +4 885 1002 622 81 +4 888 52 255 36 +4 36 255 888 951 +4 104 120 397 886 +4 120 623 419 557 +4 37 53 242 889 +4 624 738 30 567 +4 624 567 30 20 +4 624 738 37 30 +4 254 47 51 947 +4 30 891 344 36 +4 891 344 20 30 +4 107 628 339 896 +4 894 70 306 66 +4 70 306 54 894 +4 149 555 1008 630 +4 149 1008 895 630 +4 568 92 631 892 +4 631 103 517 107 +4 106 900 560 633 +4 633 118 138 558 +4 899 949 576 180 +4 634 488 31 733 +4 634 733 31 21 +4 634 31 488 38 +4 905 54 260 34 +4 905 38 260 54 +4 635 67 965 71 +4 71 635 55 308 +4 636 35 261 55 +4 636 55 261 39 +4 638 31 232 21 +4 150 1007 640 136 +4 150 1007 907 640 +4 641 565 318 325 +4 624 37 790 219 +4 1006 201 202 1027 +4 1006 219 1027 202 +4 567 222 201 1006 +4 1006 222 790 567 +4 1006 790 219 624 +4 136 1007 789 446 +4 1007 450 446 798 +4 1007 450 569 789 +4 1007 789 640 136 +4 386 390 517 554 +4 386 478 554 517 +4 568 386 390 517 +4 386 568 922 517 +4 226 484 488 536 +4 333 555 427 439 +4 555 564 454 466 +4 555 454 564 736 +4 660 520 645 18 +4 645 674 504 520 +4 255 48 247 36 +4 48 255 247 589 +4 123 135 427 119 +4 123 119 427 749 +4 674 251 520 660 +4 674 520 645 660 +4 544 650 329 301 +4 785 544 329 301 +4 650 683 322 79 +4 787 305 651 470 +4 651 722 460 165 +4 787 461 470 651 +4 653 304 786 6 +4 616 653 494 185 +4 743 194 479 312 +4 431 479 194 311 +4 502 161 211 236 +4 717 161 502 236 +4 349 614 186 526 +4 186 614 356 526 +4 157 661 292 719 +4 661 192 731 265 +4 759 184 1033 200 +4 979 200 184 759 +4 979 9 200 665 +4 664 274 380 378 +4 277 664 380 378 +4 300 378 664 277 +4 664 693 378 300 +4 164 512 466 824 +4 728 824 466 472 +4 916 486 324 318 +4 649 916 324 318 +4 650 79 322 274 +4 650 274 322 329 +4 665 201 203 185 +4 665 9 201 637 +4 94 390 612 666 +4 296 666 479 272 +4 272 94 666 390 +4 667 214 610 10 +4 667 188 208 214 +4 667 639 214 10 +4 10 314 610 667 +4 763 313 620 668 +4 2 667 668 588 +4 324 281 318 287 +4 540 324 281 318 +4 785 688 322 286 +4 544 322 286 785 +4 12 201 637 704 +4 704 12 201 202 +4 705 278 378 300 +4 300 693 378 705 +4 973 200 553 184 +4 617 973 184 200 +4 272 115 179 130 +4 14 707 639 215 +4 802 214 188 707 +4 669 472 466 463 +4 728 472 466 669 +4 503 669 466 161 +4 441 471 514 432 +4 521 384 383 439 +4 423 385 384 454 +4 356 673 1026 456 +4 356 452 673 456 +4 423 454 521 427 +4 673 1031 451 456 +4 423 384 521 454 +4 521 384 439 454 +4 384 548 383 1004 +4 675 823 676 461 +4 675 385 464 394 +4 449 450 675 1021 +4 450 1021 676 675 +4 675 487 464 676 +4 676 470 465 750 +4 416 415 400 726 +4 149 1008 555 161 +4 555 466 669 161 +4 161 669 555 211 +4 1008 466 555 161 +4 920 127 739 449 +4 920 569 449 739 +4 979 665 200 759 +4 287 331 325 687 +4 979 665 759 1 +4 291 688 290 337 +4 688 529 327 337 +4 744 689 389 810 +4 543 810 732 389 +4 1015 405 400 690 +4 345 837 405 690 +4 348 1015 690 405 +4 348 405 690 345 +4 304 665 185 704 +4 304 704 637 665 +4 496 109 117 515 +4 496 515 117 586 +4 515 117 586 280 +4 218 241 246 747 +4 172 474 773 825 +4 172 825 487 474 +4 609 474 725 172 +4 725 172 474 773 +4 609 172 487 474 +4 975 53 243 284 +4 975 243 1019 284 +4 678 458 531 263 +4 531 917 263 458 +4 228 834 1025 835 +4 254 984 697 51 +4 698 342 1028 724 +4 698 331 1034 778 +4 295 698 1028 724 +4 57 682 285 65 +4 666 357 699 390 +4 479 666 699 390 +4 699 1029 390 386 +4 974 84 632 82 +4 847 423 127 920 +4 568 92 90 631 +4 90 103 922 631 +4 123 427 858 428 +4 966 393 394 414 +4 663 405 596 558 +4 663 558 596 559 +4 271 403 179 312 +4 271 403 312 562 +4 703 581 131 971 +4 677 706 275 684 +4 706 279 275 684 +4 706 279 684 58 +4 310 547 831 841 +4 547 59 686 310 +4 679 841 338 831 +4 114 694 842 178 +4 725 777 474 582 +4 7 307 709 551 +4 728 669 466 503 +4 731 383 459 548 +4 192 383 731 838 +4 838 548 383 731 +4 292 192 383 731 +4 421 520 225 251 +4 660 251 520 421 +4 600 421 225 251 +4 648 421 251 530 +4 660 530 251 421 +4 656 600 245 524 +4 234 523 210 712 +4 654 210 516 712 +4 713 716 462 753 +4 595 462 447 713 +4 657 220 206 401 +4 353 659 207 225 +4 483 1019 250 290 +4 1020 483 250 290 +4 658 352 264 317 +4 584 302 562 271 +4 302 562 195 350 +4 125 423 847 941 +4 125 941 986 423 +4 941 986 423 799 +4 941 445 423 920 +4 847 423 920 941 +4 941 799 423 445 +4 375 968 326 327 +4 634 488 733 566 +4 634 566 733 21 +4 110 430 780 122 +4 122 780 429 430 +4 122 365 430 989 +4 122 430 429 989 +4 122 110 430 365 +4 322 650 329 544 +4 785 322 329 544 +4 211 333 409 139 +4 211 748 333 139 +4 211 139 409 720 +4 211 748 139 720 +4 837 430 456 1026 +4 596 837 430 456 +4 405 837 430 596 +4 330 273 295 724 +4 724 392 698 342 +4 1028 330 724 513 +4 1028 342 513 724 +4 273 306 295 724 +4 726 397 400 416 +4 176 378 726 776 +4 207 307 328 976 +4 976 207 231 328 +4 7 207 976 307 +4 659 7 207 976 +4 251 273 330 727 +4 44 674 251 727 +4 44 251 279 727 +4 595 729 447 462 +4 716 168 729 956 +4 716 729 595 462 +4 730 202 205 220 +4 657 730 206 220 +4 42 281 245 656 +4 643 902 1030 566 +4 511 902 566 1030 +4 936 280 420 795 +4 920 445 449 460 +4 613 567 827 201 +4 221 200 344 613 +4 564 455 464 512 +4 455 340 512 564 +4 455 142 340 564 +4 733 832 214 610 +4 733 610 566 227 +4 733 214 832 232 +4 974 360 376 343 +4 974 376 360 611 +4 974 611 360 377 +4 974 377 360 576 +4 320 370 236 950 +4 502 370 236 720 +4 196 276 563 629 +4 912 563 741 3 +4 680 527 241 647 +4 117 700 702 936 +4 60 589 48 945 +4 945 247 536 589 +4 651 460 461 823 +4 165 237 460 651 +4 237 460 651 823 +4 736 454 428 427 +4 736 428 454 455 +4 736 455 454 564 +4 227 566 488 226 +4 488 1024 227 226 +4 643 226 488 566 +4 634 488 643 38 +4 922 358 386 387 +4 922 386 358 568 +4 922 517 387 386 +4 143 153 920 569 +4 153 920 569 460 +4 641 737 565 325 +4 375 327 326 321 +4 1003 375 321 327 +4 569 920 449 460 +4 738 248 790 37 +4 567 738 221 222 +4 790 222 738 567 +4 624 790 37 738 +4 136 739 424 789 +4 739 450 811 424 +4 739 569 449 450 +4 789 450 569 739 +4 640 789 739 136 +4 236 522 383 439 +4 445 593 384 385 +4 385 393 593 384 +4 740 295 534 392 +4 740 177 392 534 +4 740 295 392 457 +4 740 177 457 392 +4 656 422 600 524 +4 966 593 394 393 +4 140 407 557 447 +4 146 140 436 447 +4 140 447 557 436 +4 385 393 592 394 +4 385 592 464 394 +4 471 800 495 451 +4 451 800 495 750 +4 493 251 273 295 +4 251 273 295 330 +4 295 251 330 590 +4 696 194 743 312 +4 696 434 312 743 +4 695 743 696 575 +4 695 696 743 581 +4 300 691 278 990 +4 990 574 691 744 +4 928 744 691 574 +4 404 416 415 436 +4 0 187 1017 759 +4 0 759 871 187 +4 759 203 477 185 +4 745 318 565 468 +4 745 193 468 565 +4 745 318 468 486 +4 252 332 235 532 +4 441 432 514 341 +4 989 432 441 341 +4 52 747 255 840 +4 747 241 246 334 +4 481 747 52 840 +4 416 356 436 557 +4 557 447 356 436 +4 557 447 1026 356 +4 426 748 478 482 +4 119 333 749 748 +4 339 482 478 748 +4 288 614 175 217 +4 415 217 614 288 +4 570 553 973 5 +4 749 119 748 482 +4 482 426 749 332 +4 749 332 426 485 +4 52 840 589 480 +4 570 553 184 973 +4 481 52 480 840 +4 480 246 589 541 +4 199 200 812 505 +4 970 750 462 495 +4 539 750 462 970 +4 283 527 241 26 +4 527 283 241 600 +4 147 417 443 292 +4 147 700 417 157 +4 700 710 417 157 +4 919 447 452 713 +4 146 595 447 919 +4 595 713 447 919 +4 918 367 220 27 +4 657 220 401 367 +4 918 317 244 224 +4 27 317 244 918 +4 276 218 839 283 +4 283 26 218 839 +4 147 292 443 368 +4 917 234 230 712 +4 234 523 712 917 +4 234 523 917 29 +4 144 652 435 282 +4 539 604 758 170 +4 917 234 256 230 +4 917 531 263 29 +4 539 604 787 758 +4 225 369 231 28 +4 745 878 515 193 +4 702 710 752 420 +4 270 352 658 525 +4 485 749 427 439 +4 749 439 333 427 +4 521 454 439 427 +4 521 485 427 439 +4 723 351 182 282 +4 682 285 65 33 +4 755 353 659 267 +4 717 156 756 950 +4 717 265 192 756 +4 245 656 524 958 +4 211 555 149 333 +4 211 333 149 409 +4 355 189 484 535 +4 371 816 493 238 +4 225 816 493 371 +4 535 816 371 238 +4 225 816 371 535 +4 467 313 643 328 +4 89 193 737 438 +4 438 193 737 490 +4 672 338 329 785 +4 672 338 785 556 +4 911 653 786 6 +4 616 801 185 188 +4 616 911 653 185 +4 616 473 801 188 +4 473 8 783 927 +4 168 604 787 539 +4 604 474 470 758 +4 734 474 604 758 +4 166 561 582 784 +4 615 354 184 570 +4 735 414 472 788 +4 181 537 313 208 +4 181 467 313 537 +4 239 467 181 537 +4 759 665 203 185 +4 2 667 588 10 +4 667 208 188 187 +4 667 187 668 208 +4 760 607 605 80 +4 760 338 605 361 +4 760 607 580 361 +4 583 580 361 760 +4 583 361 338 760 +4 94 612 606 761 +4 94 666 612 761 +4 761 357 275 571 +4 761 357 311 666 +4 761 357 606 275 +4 761 311 357 571 +4 614 356 436 416 +4 132 691 928 288 +4 691 278 744 288 +4 132 278 691 288 +4 288 691 928 744 +4 240 355 247 589 +4 216 247 255 240 +4 240 226 247 355 +4 216 240 226 247 +4 22 36 888 951 +4 432 514 259 471 +4 139 119 333 625 +4 453 180 560 576 +4 139 119 748 333 +4 139 897 333 409 +4 139 625 333 897 +4 735 870 472 414 +4 554 339 478 212 +4 211 439 555 333 +4 762 315 177 72 +4 762 315 325 177 +4 762 177 480 72 +4 762 177 457 481 +4 762 177 325 457 +4 762 177 481 480 +4 538 530 251 674 +4 307 620 930 763 +4 620 763 615 930 +4 677 671 571 413 +4 677 413 571 275 +4 83 321 69 884 +4 1003 83 884 321 +4 990 764 300 691 +4 95 294 324 765 +4 765 324 671 294 +4 766 301 329 77 +4 766 545 672 329 +4 287 457 295 475 +4 641 457 287 475 +4 556 767 672 338 +4 768 79 664 693 +4 768 693 664 300 +4 769 694 607 80 +4 769 694 842 607 +4 692 694 842 769 +4 677 684 275 770 +4 94 606 684 770 +4 770 606 684 275 +4 771 605 686 80 +4 771 338 841 605 +4 679 771 338 841 +4 772 9 665 637 +4 772 304 637 665 +4 621 639 667 10 +4 164 721 512 773 +4 773 825 777 512 +4 725 773 474 777 +4 332 252 387 478 +4 175 774 400 440 +4 965 805 308 71 +4 635 965 308 71 +4 906 309 308 965 +4 355 536 589 533 +4 541 536 533 589 +4 906 965 308 635 +4 965 309 308 805 +4 532 522 323 591 +4 582 495 561 259 +4 582 561 495 758 +4 859 74 489 358 +4 47 31 864 253 +4 47 864 50 253 +4 667 214 208 610 +4 667 208 668 610 +4 605 607 361 611 +4 760 607 361 605 +4 612 390 357 666 +4 612 357 606 761 +4 612 666 357 761 +4 665 613 200 203 +4 665 613 203 201 +4 759 665 200 203 +4 745 515 496 585 +4 496 515 586 585 +4 564 142 340 152 +4 278 378 689 776 +4 705 776 378 278 +4 142 924 455 340 +4 415 776 278 288 +4 216 951 240 255 +4 515 952 280 252 +4 1033 203 200 181 +4 759 1033 203 200 +4 81 622 1003 1002 +4 316 375 622 1002 +4 1002 622 1003 375 +4 497 147 398 443 +4 398 147 141 443 +4 28 273 504 406 +4 28 273 406 34 +4 310 547 841 686 +4 771 841 686 605 +4 679 771 841 686 +4 465 825 512 777 +4 160 514 721 708 +4 725 721 777 708 +4 773 777 721 512 +4 725 773 777 721 +4 778 568 358 490 +4 778 490 357 568 +4 778 833 357 490 +4 681 93 318 91 +4 91 93 318 745 +4 649 93 318 681 +4 93 916 318 486 +4 916 93 318 649 +4 745 93 318 486 +4 49 254 779 51 +4 51 697 254 779 +4 779 395 697 249 +4 61 289 73 781 +4 61 781 779 289 +4 781 289 395 779 +4 781 395 289 297 +4 780 111 124 425 +4 780 425 345 111 +4 780 837 110 345 +4 780 110 837 430 +4 224 751 250 483 +4 243 1019 250 751 +4 751 250 483 1019 +4 780 124 424 425 +4 254 697 249 779 +4 73 781 289 326 +4 934 288 175 217 +4 934 288 744 175 +4 558 596 559 578 +4 782 604 470 305 +4 782 174 487 877 +4 644 968 335 326 +4 644 335 968 360 +4 375 644 326 968 +4 179 403 969 312 +4 403 179 969 554 +4 312 403 969 699 +4 1029 969 554 403 +4 699 403 969 1029 +4 831 746 299 830 +4 679 556 831 338 +4 783 802 473 188 +4 802 707 188 783 +4 473 927 188 616 +4 794 616 188 927 +4 783 707 188 621 +4 784 758 582 474 +4 758 784 734 474 +4 609 725 474 784 +4 725 582 474 784 +4 785 286 291 688 +4 545 672 329 785 +4 301 545 329 785 +4 304 704 185 786 +4 653 494 185 304 +4 911 653 185 786 +4 787 750 729 539 +4 787 470 750 758 +4 787 604 470 758 +4 384 459 548 393 +4 305 604 470 787 +4 384 393 548 463 +4 617 184 973 570 +4 570 354 184 553 +4 788 472 669 463 +4 788 735 728 472 +4 594 227 818 815 +4 594 254 815 818 +4 728 472 669 788 +4 389 180 453 377 +4 541 981 533 714 +4 440 389 180 453 +4 541 536 714 533 +4 584 320 350 302 +4 641 315 325 762 +4 641 762 325 457 +4 641 737 325 315 +4 789 1007 450 446 +4 789 739 424 450 +4 790 222 219 476 +4 790 222 476 248 +4 1006 790 222 219 +4 738 248 222 790 +4 135 333 555 427 +4 871 615 620 763 +4 620 763 187 871 +4 620 187 2 871 +4 677 571 671 873 +4 876 188 794 616 +4 717 236 192 793 +4 282 456 526 578 +4 596 526 356 456 +4 220 223 751 243 +4 223 751 243 250 +4 160 582 708 166 +4 1019 285 797 290 +4 244 1019 388 285 +4 1019 388 285 290 +4 1020 297 290 289 +4 250 395 1020 289 +4 395 1020 289 297 +4 796 388 290 291 +4 483 796 388 290 +4 256 298 1020 262 +4 262 308 298 297 +4 309 310 299 298 +4 286 285 290 322 +4 810 776 176 400 +4 415 400 726 776 +4 176 776 726 400 +4 731 169 171 548 +4 569 449 675 460 +4 569 461 460 675 +4 798 676 750 461 +4 553 992 200 199 +4 973 200 812 553 +4 704 202 201 185 +4 786 202 704 185 +4 789 424 425 1023 +4 789 446 1023 425 +4 418 799 444 521 +4 799 384 445 444 +4 521 799 444 384 +4 449 385 455 1021 +4 1021 676 464 465 +4 449 1021 675 385 +4 1021 464 676 675 +4 441 587 800 450 +4 441 800 465 471 +4 450 800 676 587 +4 800 465 750 676 +4 564 466 464 454 +4 564 464 466 512 +4 911 473 205 801 +4 215 214 802 707 +4 783 215 473 802 +4 215 707 802 783 +4 458 352 230 257 +4 352 257 483 230 +4 352 317 388 264 +4 352 317 483 388 +4 224 813 803 223 +4 224 483 250 803 +4 803 1020 483 250 +4 234 256 492 262 +4 234 256 262 263 +4 297 1022 781 335 +4 1022 968 327 326 +4 290 336 337 327 +4 298 308 805 1022 +4 298 336 1022 805 +4 805 343 336 335 +4 310 343 337 336 +4 808 357 275 331 +4 381 468 357 808 +4 808 331 687 833 +4 571 357 275 808 +4 381 571 808 357 +4 337 360 361 809 +4 529 361 809 337 +4 175 440 400 810 +4 491 810 400 440 +4 428 811 449 455 +4 429 1023 450 441 +4 1023 441 451 450 +4 712 206 813 754 +4 754 230 224 813 +4 206 401 223 813 +4 790 476 219 242 +4 790 476 242 1032 +4 814 493 238 295 +4 814 534 295 238 +4 493 814 475 295 +4 475 457 295 814 +4 814 295 534 740 +4 814 295 740 457 +4 437 248 947 815 +4 815 248 947 254 +4 536 260 484 488 +4 316 176 726 400 +4 316 726 397 400 +4 222 248 594 817 +4 817 248 594 254 +4 817 254 249 248 +4 222 248 817 476 +4 476 249 248 817 +4 815 227 818 253 +4 815 254 253 818 +4 31 253 818 733 +4 31 818 253 865 +4 826 228 594 1025 +4 228 835 1025 819 +4 319 438 358 490 +4 438 820 358 490 +4 315 438 820 358 +4 342 568 358 778 +4 90 568 358 342 +4 859 342 358 489 +4 90 342 358 859 +4 918 220 751 244 +4 220 223 918 751 +4 425 1026 446 451 +4 1026 451 447 446 +4 557 425 1026 446 +4 417 532 443 197 +4 417 396 532 197 +4 417 710 197 292 +4 417 197 443 292 +4 417 420 396 197 +4 417 420 197 710 +4 205 223 210 206 +4 205 223 372 210 +4 205 597 210 372 +4 473 205 597 210 +4 911 210 206 205 +4 911 210 205 473 +4 225 535 231 994 +4 225 535 371 231 +4 428 423 454 455 +4 423 385 454 455 +4 117 586 795 703 +4 586 581 795 703 +4 475 287 641 281 +4 891 200 1009 505 +4 344 200 1009 891 +4 186 435 821 258 +4 560 558 900 258 +4 258 558 900 435 +4 239 467 537 240 +4 53 822 284 983 +4 785 329 322 688 +4 722 153 461 460 +4 651 722 461 460 +4 68 89 737 848 +4 618 68 89 737 +4 68 737 641 315 +4 618 68 737 641 +4 173 823 651 742 +4 823 470 676 461 +4 651 823 461 470 +4 787 461 750 470 +4 487 465 470 474 +4 676 487 465 470 +4 823 470 487 676 +4 251 330 590 279 +4 251 279 590 757 +4 465 825 777 474 +4 727 330 251 279 +4 773 474 777 825 +4 209 372 826 597 +4 597 826 215 228 +4 209 372 594 826 +4 826 232 819 1025 +4 827 203 204 828 +4 827 222 828 204 +4 567 222 221 827 +4 613 203 827 221 +4 613 567 221 827 +4 201 222 204 1027 +4 1006 201 1027 222 +4 1006 219 222 1027 +4 208 828 221 227 +4 219 889 243 220 +4 243 242 476 249 +4 219 476 243 242 +4 493 251 245 600 +4 239 189 467 240 +4 981 306 534 260 +4 982 297 829 395 +4 55 829 982 308 +4 982 297 395 63 +4 291 688 337 830 +4 785 291 830 688 +4 785 338 329 830 +4 299 830 337 831 +4 831 841 338 337 +4 209 208 832 828 +4 209 594 828 832 +4 610 227 832 208 +4 733 227 832 610 +4 833 357 490 468 +4 808 331 833 357 +4 687 468 808 833 +4 329 337 338 361 +4 380 274 329 361 +4 529 337 329 361 +4 583 329 338 361 +4 583 380 329 361 +4 331 357 606 778 +4 612 357 778 606 +4 612 778 357 568 +4 833 331 778 357 +4 834 492 250 249 +4 834 697 492 249 +4 835 261 492 697 +4 179 969 390 993 +4 272 993 179 390 +4 993 272 479 390 +4 993 969 390 699 +4 993 479 699 390 +4 64 618 565 641 +4 64 618 879 565 +4 809 375 327 968 +4 375 732 644 968 +4 375 968 809 732 +4 226 484 643 488 +4 488 260 484 643 +4 280 403 396 420 +4 403 584 396 420 +4 871 187 2 0 +4 280 434 403 420 +4 584 420 403 562 +4 434 562 403 420 +4 735 414 909 933 +4 548 933 909 414 +4 616 4 911 473 +4 627 5 11 199 +4 967 597 228 210 +4 4 8 473 927 +4 664 79 274 378 +4 664 79 378 693 +4 79 213 274 378 +4 693 1002 79 378 +4 79 1002 213 378 +4 627 951 199 11 +4 627 642 951 11 +4 408 12 23 1006 +4 6 12 704 202 +4 14 412 233 25 +4 967 215 14 937 +4 473 967 597 215 +4 202 205 220 219 +4 210 234 229 228 +4 234 835 229 228 +4 655 999 741 3 +4 422 600 15 16 +4 563 608 207 239 +4 111 853 836 120 +4 120 836 419 853 +4 345 425 836 111 +4 345 425 837 836 +4 836 356 1026 837 +4 836 425 557 419 +4 836 557 1026 356 +4 211 236 439 748 +4 439 236 426 748 +4 780 425 837 345 +4 780 837 425 430 +4 333 439 749 748 +4 654 712 206 210 +4 211 439 333 748 +4 426 439 748 749 +4 16 26 283 839 +4 793 909 463 1004 +4 1004 463 548 909 +4 527 16 283 600 +4 717 838 192 265 +4 265 192 731 838 +4 717 838 793 192 +4 839 629 627 276 +4 645 520 28 18 +4 353 283 939 15 +4 749 748 426 482 +4 840 255 589 246 +4 917 523 712 19 +4 840 747 255 246 +4 917 523 19 29 +4 481 747 840 246 +4 840 246 589 480 +4 481 840 480 246 +4 160 582 514 708 +4 512 721 514 777 +4 841 343 962 376 +4 841 605 376 962 +4 279 684 606 275 +4 279 513 606 684 +4 513 963 342 606 +4 842 377 607 949 +4 890 567 624 20 +4 607 842 949 694 +4 307 763 930 354 +4 520 727 504 273 +4 520 674 504 727 +4 902 566 634 21 +4 68 843 762 481 +4 68 52 843 481 +4 68 843 72 762 +4 904 638 232 21 +4 137 418 121 844 +4 137 844 125 986 +4 87 845 438 101 +4 846 101 113 1012 +4 846 113 121 1012 +4 847 920 143 137 +4 848 87 89 438 +4 852 1032 61 49 +4 852 53 61 822 +4 136 853 120 419 +4 124 424 425 853 +4 69 284 854 53 +4 69 987 73 854 +4 70 306 855 54 +4 70 489 74 855 +4 856 247 48 36 +4 906 29 35 263 +4 856 46 48 247 +4 857 248 49 46 +4 23 1006 219 624 +4 954 998 838 265 +4 265 838 731 998 +4 864 31 38 488 +4 363 90 103 922 +4 864 38 50 488 +4 24 634 643 38 +4 123 427 135 858 +4 865 39 254 51 +4 25 39 232 638 +4 655 267 741 999 +4 267 655 955 999 +4 859 358 90 88 +4 119 749 123 112 +4 860 75 86 335 +4 860 923 86 84 +4 15 353 755 267 +4 84 364 102 576 +4 861 51 63 697 +4 861 697 63 55 +4 71 55 862 308 +4 71 862 75 985 +4 269 791 1001 182 +4 269 753 1001 791 +4 253 31 864 488 +4 253 864 50 488 +4 47 865 254 51 +4 953 183 158 268 +4 953 268 158 542 +4 866 739 143 127 +4 866 136 143 739 +4 122 867 134 429 +4 867 924 142 134 +4 496 695 585 703 +4 868 198 644 99 +4 868 348 198 99 +4 868 1015 348 405 +4 868 198 453 644 +4 868 453 1015 405 +4 280 379 1029 403 +4 280 1029 379 869 +4 515 379 869 280 +4 635 35 55 308 +4 515 252 280 869 +4 478 482 517 387 +4 478 339 554 517 +4 334 641 475 457 +4 295 330 724 1028 +4 330 513 1028 279 +4 295 590 330 1028 +4 590 330 1028 279 +4 870 572 472 414 +4 735 573 870 414 +4 871 615 763 184 +4 792 871 184 615 +4 872 574 691 990 +4 990 872 764 691 +4 571 765 671 873 +4 875 766 672 329 +4 338 672 329 875 +4 767 875 672 338 +4 188 876 185 616 +4 494 616 185 876 +4 877 474 734 609 +4 470 877 474 604 +4 474 734 604 877 +4 974 376 962 343 +4 898 962 343 974 +4 898 974 343 632 +4 482 103 339 517 +4 670 40 910 958 +4 207 189 239 608 +4 478 339 517 482 +4 467 643 484 328 +4 608 189 239 240 +4 879 618 91 565 +4 64 880 619 334 +4 881 546 445 153 +4 672 556 785 41 +4 881 153 399 546 +4 540 42 281 324 +4 882 151 398 444 +4 544 785 286 43 +4 417 591 883 141 +4 122 365 989 134 +4 122 989 429 134 +4 700 883 141 417 +4 885 108 726 693 +4 108 726 622 885 +4 148 432 514 160 +4 140 886 404 416 +4 432 711 160 148 +4 432 160 259 514 +4 711 259 432 160 +4 887 150 446 407 +4 623 887 150 446 +4 49 249 1032 61 +4 49 249 248 1032 +4 49 61 779 249 +4 49 254 248 249 +4 49 249 779 254 +4 32 402 888 218 +4 890 408 23 1006 +4 37 1032 852 49 +4 23 1006 624 890 +4 952 396 417 420 +4 936 952 417 420 +4 891 1009 22 505 +4 344 1009 22 891 +4 33 65 975 285 +4 37 53 852 242 +4 854 983 61 53 +4 915 894 306 66 +4 915 894 66 406 +4 895 564 152 630 +4 680 647 241 56 +4 896 628 339 139 +4 897 149 333 409 +4 897 625 333 149 +4 898 962 974 82 +4 373 603 65 57 +4 898 82 974 632 +4 138 435 411 900 +4 900 558 138 435 +4 273 34 894 406 +4 900 138 558 633 +4 901 711 432 148 +4 78 338 771 760 +4 583 760 338 78 +4 767 78 338 679 +4 679 78 338 771 +4 767 583 338 78 +4 903 35 234 261 +4 412 35 234 903 +4 903 35 261 636 +4 854 983 73 61 +4 25 638 232 904 +4 905 34 260 231 +4 510 905 231 34 +4 906 309 965 67 +4 906 67 965 635 +4 907 569 153 640 +4 908 721 512 152 +4 908 152 512 340 +4 64 68 618 641 +4 65 321 884 69 +4 66 70 342 626 +4 67 632 343 71 +4 76 78 574 583 +4 767 875 1010 76 +4 277 872 583 76 +4 277 76 764 872 +4 381 431 311 379 +4 381 571 311 97 +4 67 898 343 632 +4 314 511 588 10 +4 322 884 1003 715 +4 66 626 342 893 +4 272 94 96 666 +4 194 96 311 666 +4 134 341 429 340 +4 807 806 340 134 +4 134 340 924 142 +4 782 877 470 604 +4 807 340 341 134 +4 793 909 1004 838 +4 838 1004 548 909 +4 806 142 340 134 +4 134 340 429 924 +4 105 101 846 235 +4 312 403 434 562 +4 746 291 299 830 +4 315 848 737 438 +4 68 848 737 315 +4 212 410 115 107 +4 81 1002 693 885 +4 404 108 116 726 +4 1019 285 244 33 +4 1019 975 797 285 +4 140 887 623 557 +4 557 407 446 447 +4 262 309 308 906 +4 262 906 263 309 +4 903 234 233 261 +4 700 109 883 952 +4 883 105 952 109 +4 104 397 120 851 +4 629 563 196 912 +4 629 5 563 912 +4 128 913 934 701 +4 217 913 268 701 +4 105 846 121 235 +4 914 210 516 654 +4 844 346 121 113 +4 654 206 957 914 +4 210 914 206 654 +4 844 113 125 346 +4 774 356 405 821 +4 349 282 652 154 +4 555 466 463 669 +4 669 463 555 211 +4 236 669 211 463 +4 793 669 909 167 +4 793 669 236 463 +4 439 384 1004 463 +4 384 548 1004 463 +4 908 340 514 341 +4 908 512 514 340 +4 33 53 242 243 +4 53 889 33 242 +4 33 243 242 889 +4 743 940 431 575 +4 695 940 743 575 +4 575 940 431 579 +4 695 940 575 579 +4 583 580 574 744 +4 692 744 574 580 +4 330 273 724 915 +4 330 727 915 58 +4 727 406 915 58 +4 273 306 724 915 +4 273 894 306 915 +4 273 894 915 406 +4 757 413 590 910 +4 332 323 235 532 +4 251 757 590 910 +4 218 246 608 255 +4 218 246 283 608 +4 246 747 255 218 +4 335 336 968 360 +4 1022 335 968 326 +4 1022 968 335 336 +4 1002 726 176 378 +4 726 176 316 1002 +4 237 966 572 293 +4 966 293 414 572 +4 360 377 453 576 +4 377 180 453 576 +4 717 669 793 167 +4 717 669 236 793 +4 334 457 475 246 +4 481 334 246 457 +4 87 101 358 88 +4 88 387 101 358 +4 319 101 387 358 +4 87 438 358 101 +4 438 101 319 358 +4 942 74 88 358 +4 942 358 88 87 +4 942 87 438 358 +4 315 942 438 358 +4 747 334 246 481 +4 381 486 687 324 +4 916 486 381 324 +4 650 274 329 380 +4 217 268 953 542 +4 349 217 953 542 +4 916 579 381 486 +4 195 599 420 266 +4 195 420 599 350 +4 630 736 142 135 +4 919 436 452 447 +4 235 591 532 323 +4 640 739 143 136 +4 270 264 658 352 +4 170 391 561 269 +4 269 723 561 351 +4 293 433 165 237 +4 677 413 275 706 +4 413 279 275 706 +4 654 1013 921 525 +4 654 712 516 921 +4 137 445 941 920 +4 847 941 920 137 +4 577 247 856 36 +4 577 46 856 247 +4 577 46 247 437 +4 577 437 1024 221 +4 69 326 321 849 +4 849 85 326 375 +4 849 375 326 321 +4 136 623 150 446 +4 857 248 738 37 +4 857 46 437 248 +4 857 248 437 738 +4 135 858 427 736 +4 858 736 428 427 +4 866 424 739 127 +4 866 136 739 424 +4 88 922 100 387 +4 88 387 358 922 +4 922 103 387 517 +4 100 922 103 387 +4 71 335 860 923 +4 923 961 335 86 +4 71 343 335 923 +4 923 360 343 335 +4 860 335 86 923 +4 865 254 253 47 +4 700 141 147 417 +4 594 254 818 1025 +4 865 39 818 254 +4 865 818 253 254 +4 126 429 924 867 +4 126 429 428 924 +4 924 811 429 428 +4 924 429 811 340 +4 867 429 924 134 +4 762 334 481 457 +4 762 334 457 641 +4 504 273 727 406 +4 330 273 915 727 +4 273 406 915 727 +4 484 231 260 238 +4 905 231 260 484 +4 630 564 152 142 +4 806 152 340 142 +4 881 143 153 445 +4 1013 230 712 19 +4 921 712 19 1013 +4 1013 754 712 230 +4 640 569 153 143 +4 654 1013 754 712 +4 654 712 921 1013 +4 502 211 409 720 +4 502 717 236 370 +4 925 175 258 186 +4 186 435 258 925 +4 696 194 312 926 +4 696 133 926 312 +4 40 44 413 442 +4 473 927 783 188 +4 4 927 473 616 +4 621 188 783 927 +4 758 929 734 784 +4 170 929 734 758 +4 609 725 784 929 +4 140 557 407 887 +4 696 931 133 434 +4 695 696 581 931 +4 932 735 728 788 +4 167 932 909 171 +4 40 671 324 294 +4 41 545 785 672 +4 735 293 414 933 +4 555 736 564 630 +4 141 882 398 443 +4 634 643 488 566 +4 922 568 631 517 +4 618 737 565 641 +4 1006 790 624 567 +4 624 790 738 567 +4 1007 789 569 640 +4 640 789 569 739 +4 151 881 399 546 +4 258 180 774 175 +4 258 175 774 186 +4 774 180 440 175 +4 114 842 925 934 +4 175 842 744 934 +4 276 283 839 939 +4 939 629 839 276 +4 353 283 276 939 +4 939 629 276 196 +4 282 154 182 723 +4 277 744 689 583 +4 282 144 154 723 +4 583 380 689 277 +4 237 823 394 460 +4 164 773 512 824 +4 756 156 159 950 +4 824 825 773 512 +4 608 239 951 240 +4 199 1009 992 200 +4 992 200 1009 216 +4 288 278 744 776 +4 278 689 744 776 +4 459 497 398 443 +4 276 642 218 951 +4 642 951 402 218 +4 510 976 231 328 +4 13 510 24 328 +4 150 935 446 407 +4 935 446 447 729 +4 935 447 407 500 +4 935 595 447 500 +4 595 935 447 729 +4 12 23 219 889 +4 12 202 730 220 +4 12 220 219 202 +4 657 347 730 220 +4 12 506 889 220 +4 347 506 220 657 +4 411 258 925 106 +4 925 508 435 411 +4 109 117 515 952 +4 700 952 117 109 +4 234 937 523 509 +4 233 412 14 937 +4 215 228 233 937 +4 967 215 937 228 +4 937 509 234 412 +4 643 260 484 905 +4 535 484 533 238 +4 355 535 484 533 +4 508 469 435 652 +4 469 349 435 652 +4 925 469 435 508 +4 701 349 652 938 +4 701 938 542 349 +4 353 939 276 196 +4 198 176 316 400 +4 104 886 397 726 +4 991 459 169 163 +4 695 743 940 581 +4 585 579 940 695 +4 585 695 940 703 +4 703 940 581 695 +4 692 842 744 580 +4 745 878 496 515 +4 908 721 514 512 +4 758 561 929 784 +4 929 972 784 166 +4 954 909 171 167 +4 644 176 198 491 +4 375 176 198 644 +4 58 513 330 279 +4 58 513 279 684 +4 598 168 787 729 +4 991 163 498 433 +4 936 420 417 710 +4 702 710 420 936 +4 936 700 702 710 +4 700 936 417 710 +4 933 293 991 169 +4 237 433 165 460 +4 169 171 548 933 +4 60 541 74 72 +4 60 480 541 72 +4 734 758 604 170 +4 756 265 1005 159 +4 100 332 112 113 +4 85 644 99 86 +4 609 172 174 487 +4 944 345 111 110 +4 111 780 124 122 +4 49 779 61 51 +4 61 781 73 75 +4 122 946 126 948 +4 946 948 127 126 +4 471 259 495 582 +4 471 514 259 582 +4 46 50 48 247 +4 85 943 326 644 +4 943 644 335 326 +4 46 248 49 947 +4 947 49 51 254 +4 122 429 780 948 +4 122 946 948 780 +4 946 424 127 948 +4 549 927 783 8 +4 899 949 180 106 +4 82 949 576 899 +4 377 949 180 576 +4 82 949 377 576 +4 576 180 560 899 +4 653 185 786 304 +4 129 116 415 190 +4 717 950 192 236 +4 350 1005 599 159 +4 717 950 756 192 +4 756 950 159 1005 +4 484 231 328 905 +4 510 328 231 905 +4 882 398 443 444 +4 398 459 443 444 +4 900 435 411 258 +4 411 435 925 258 +4 234 412 903 233 +4 233 234 412 937 +4 888 402 951 218 +4 218 747 255 888 +4 887 407 446 557 +4 407 935 446 447 +4 12 889 219 220 +4 682 244 285 33 +4 417 591 952 883 +4 700 952 883 417 +4 700 417 936 952 +4 953 155 158 183 +4 599 292 710 157 +4 415 499 436 919 +4 953 155 919 452 +4 499 919 415 303 +4 60 541 589 945 +4 945 589 536 541 +4 598 305 651 787 +4 598 461 787 651 +4 540 294 324 649 +4 540 649 324 318 +4 717 954 838 265 +4 717 954 793 838 +4 717 793 954 167 +4 955 7 207 659 +4 267 207 659 955 +4 956 716 269 462 +4 729 956 462 716 +4 914 516 210 8 +4 670 958 245 524 +4 538 674 251 44 +4 966 433 293 237 +4 560 900 558 633 +4 989 559 432 901 +4 84 974 923 961 +4 961 335 644 360 +4 84 961 576 974 +4 961 360 644 453 +4 961 453 576 360 +4 923 360 335 961 +4 382 456 578 432 +4 382 259 456 432 +4 382 351 456 259 +4 456 282 351 382 +4 456 578 282 382 +4 759 792 0 871 +4 67 686 962 898 +4 67 310 962 686 +4 82 376 997 962 +4 841 962 686 605 +4 310 841 962 686 +4 898 997 962 82 +4 66 963 964 893 +4 66 964 963 513 +4 92 612 963 996 +4 513 684 963 606 +4 893 963 996 92 +4 350 396 420 197 +4 350 197 420 599 +4 1 9 665 772 +4 58 964 513 684 +4 617 200 184 979 +4 964 963 684 893 +4 964 684 963 513 +4 979 9 665 1 +4 518 904 25 232 +4 518 233 25 14 +4 106 114 519 949 +4 899 519 949 106 +4 244 483 388 1019 +4 483 388 1019 290 +4 621 10 667 2 +4 395 829 1020 297 +4 616 4 653 911 +4 776 176 689 810 +4 912 5 563 3 +4 200 505 9 979 +4 1 665 494 304 +4 1 304 772 665 +4 657 957 730 6 +4 8 707 783 549 +4 662 8 210 516 +4 177 358 392 489 +4 177 358 820 392 +4 392 698 358 820 +4 489 342 358 392 +4 392 342 358 698 +4 394 823 487 675 +4 505 1009 22 11 +4 11 22 402 951 +4 627 563 629 5 +4 637 408 201 12 +4 8 977 967 14 +4 662 967 210 8 +4 215 14 707 8 +4 977 967 14 937 +4 523 967 234 210 +4 523 967 937 234 +4 15 755 353 225 +4 999 655 955 3 +4 525 17 352 658 +4 1018 217 415 288 +4 754 206 957 654 +4 74 177 489 358 +4 315 358 820 177 +4 942 358 177 74 +4 315 358 177 942 +4 656 16 600 422 +4 656 527 600 16 +4 754 657 957 206 +4 657 401 754 17 +4 225 755 659 18 +4 712 210 516 662 +4 712 523 210 662 +4 712 662 921 19 +4 712 19 523 662 +4 531 917 458 19 +4 639 21 904 214 +4 880 26 32 241 +4 682 244 33 27 +4 14 509 937 412 +4 541 740 534 177 +4 685 263 531 29 +4 685 906 263 29 +4 480 177 740 541 +4 481 177 457 740 +4 619 32 52 334 +4 481 177 740 480 +4 245 656 958 42 +4 649 95 324 916 +4 540 42 324 294 +4 544 301 785 43 +4 301 545 785 43 +4 44 727 279 58 +4 45 678 602 960 +4 45 59 547 310 +4 193 490 468 737 +4 319 193 438 490 +4 565 193 468 737 +4 353 225 994 283 +4 918 352 317 224 +4 547 556 45 831 +4 39 51 861 984 +4 843 52 60 480 +4 438 737 820 490 +4 855 981 62 54 +4 39 261 861 55 +4 862 55 63 982 +4 28 645 504 520 +4 263 59 309 906 +4 263 59 906 685 +4 843 60 72 480 +4 855 981 74 62 +4 349 435 652 282 +4 862 63 75 982 +4 560 821 558 258 +4 264 317 682 658 +4 682 264 388 317 +4 57 286 682 646 +4 682 57 285 286 +4 346 332 485 323 +4 749 332 485 346 +4 764 277 77 76 +4 77 79 664 768 +4 729 956 539 462 +4 970 561 462 269 +4 970 956 269 462 +4 539 970 462 956 +4 911 6 730 957 +4 914 206 957 911 +4 210 911 206 914 +4 914 210 911 473 +4 692 580 574 78 +4 692 769 580 78 +4 8 914 473 210 +4 41 264 960 746 +4 910 42 245 958 +4 670 910 245 958 +4 910 670 245 251 +4 131 959 434 795 +4 752 710 599 420 +4 878 745 91 89 +4 703 581 971 695 +4 695 931 581 971 +4 95 93 916 649 +4 929 725 784 972 +4 725 708 784 972 +4 575 431 97 95 +4 167 932 552 788 +4 552 167 669 191 +4 552 788 669 167 +4 695 579 575 95 +4 426 332 252 532 +4 97 311 1011 96 +4 677 761 571 96 +4 874 97 431 1011 +4 280 396 952 420 +4 936 280 952 420 +4 411 925 114 106 +4 523 967 210 662 +4 91 878 496 745 +4 227 566 733 488 +4 733 253 227 488 +4 733 818 832 227 +4 733 253 818 227 +4 974 360 343 923 +4 974 360 923 961 +4 974 961 576 360 +4 94 501 390 272 +4 186 774 356 614 +4 934 913 217 701 +4 934 288 217 913 +4 93 496 745 91 +4 93 980 585 496 +4 550 744 128 928 +4 258 180 560 774 +4 560 180 440 774 +4 440 453 180 560 +4 114 949 925 842 +4 842 377 949 180 +4 106 114 949 925 +4 77 768 664 300 +4 220 33 243 244 +4 35 234 262 263 +4 931 131 133 434 +4 971 931 581 131 +4 561 970 495 758 +4 758 750 970 495 +4 539 750 970 758 +4 195 266 562 1035 +4 953 155 183 303 +4 117 795 131 703 +4 795 131 959 702 +4 926 133 130 312 +4 309 678 263 257 +4 263 685 531 59 +4 114 508 925 411 +4 115 507 410 212 +4 79 81 715 1002 +4 79 213 322 274 +4 375 327 213 809 +4 375 176 809 213 +4 937 977 523 509 +4 523 967 977 937 +4 662 523 967 977 +4 978 595 935 500 +4 595 978 935 729 +4 716 978 595 729 +4 200 505 979 617 +4 349 154 158 791 +4 182 791 158 154 +4 980 95 579 695 +4 980 579 585 695 +4 980 695 585 496 +4 595 713 919 155 +4 713 462 716 595 +4 713 155 595 716 +4 752 157 159 599 +4 288 776 744 810 +4 288 175 810 744 +4 417 710 292 157 +4 119 748 482 628 +4 339 482 748 628 +4 702 752 710 157 +4 702 157 710 700 +4 748 139 212 339 +4 339 139 212 410 +4 339 139 410 896 +4 981 74 541 489 +4 981 489 534 306 +4 855 306 981 54 +4 855 489 74 981 +4 55 829 261 697 +4 697 395 829 492 +4 861 51 697 984 +4 861 261 697 55 +4 982 985 297 75 +4 862 55 982 308 +4 862 982 75 985 +4 54 62 714 981 +4 50 62 536 863 +4 54 863 714 62 +4 61 249 1032 822 +4 852 1032 822 61 +4 852 53 822 242 +4 851 836 397 120 +4 345 836 397 851 +4 236 161 211 669 +4 983 289 987 73 +4 854 284 983 53 +4 854 987 73 983 +4 346 121 323 418 +4 844 418 121 346 +4 844 346 125 986 +4 863 260 488 38 +4 488 863 536 260 +4 863 62 536 714 +4 978 162 935 729 +4 39 984 861 261 +4 861 984 697 261 +4 71 862 985 308 +4 982 308 297 985 +4 862 982 985 308 +4 722 162 598 461 +4 70 306 489 855 +4 855 306 489 981 +4 346 986 418 521 +4 986 423 799 521 +4 137 844 986 418 +4 844 346 986 418 +4 348 851 345 397 +4 124 424 853 136 +4 37 242 852 1032 +4 1032 249 242 822 +4 852 242 822 1032 +4 69 284 987 854 +4 983 289 284 987 +4 854 284 987 983 +4 723 351 259 561 +4 129 448 278 300 +4 983 61 822 289 +4 983 822 284 289 +4 111 425 836 853 +4 853 836 419 425 +4 972 708 784 166 +4 982 697 395 829 +4 982 829 297 308 +4 735 932 909 788 +4 102 118 633 988 +4 98 110 366 405 +4 102 98 366 988 +4 989 118 663 559 +4 717 161 669 167 +4 191 167 669 161 +4 598 168 305 787 +4 978 168 162 729 +4 305 604 787 168 +4 541 981 534 533 +4 933 293 414 966 +4 541 981 714 62 +4 541 536 62 714 +4 159 1005 661 265 +4 159 1005 292 661 +4 98 988 453 405 +4 988 453 405 560 +4 560 558 405 988 +4 988 118 558 663 +4 988 98 366 405 +4 110 118 663 365 +4 601 487 174 172 +4 181 354 763 313 +4 1033 187 203 208 +4 181 313 763 668 +4 573 173 174 572 +4 146 919 303 155 +4 953 919 303 415 +4 951 218 255 888 +4 914 911 957 4 +4 300 990 278 277 +4 277 990 744 583 +4 277 764 300 990 +4 277 990 583 872 +4 277 872 764 990 +4 642 11 402 951 +4 402 218 32 26 +4 670 524 245 648 +4 648 538 530 251 +4 186 526 356 821 +4 596 821 356 526 +4 26 241 880 680 +4 26 527 241 680 +4 660 251 530 674 +4 571 765 873 97 +4 541 534 489 177 +4 534 177 392 489 +4 355 536 533 484 +4 716 168 978 729 +4 6 12 730 347 +4 116 499 404 415 +4 114 128 934 701 +4 114 934 925 701 +4 114 701 925 508 +4 199 951 239 992 +4 239 992 951 216 +4 199 1009 951 992 +4 951 992 1009 216 +4 627 276 563 951 +4 627 642 276 951 +4 469 349 186 435 +4 359 130 179 115 +4 186 821 774 258 +4 186 356 774 821 +4 901 711 578 432 +4 559 901 578 432 +4 497 368 147 443 +4 500 595 447 146 +4 502 720 409 145 +4 502 370 720 145 +4 240 355 189 484 +4 467 189 484 240 +4 717 161 236 669 +4 207 231 189 994 +4 994 535 231 189 +4 608 816 994 189 +4 994 816 535 189 +4 389 440 491 453 +4 40 670 910 538 +4 1035 959 562 133 +4 430 456 441 432 +4 441 456 471 432 +4 441 451 471 456 +4 995 694 949 899 +4 995 607 377 949 +4 80 694 607 995 +4 995 607 949 694 +4 996 606 684 94 +4 996 606 963 684 +4 893 963 684 996 +4 80 605 686 997 +4 997 962 376 605 +4 997 605 686 962 +4 898 686 962 997 +4 648 251 245 670 +4 648 670 538 251 +4 718 20 775 408 +4 718 9 775 20 +4 930 655 354 3 +4 3 354 570 563 +4 570 354 553 563 +4 563 553 239 354 +4 349 217 186 614 +4 300 664 77 277 +4 767 679 338 556 +4 766 545 329 301 +4 9 20 200 613 +4 613 200 344 20 +4 20 200 891 505 +4 344 200 891 20 +4 1002 378 176 213 +4 884 1003 321 322 +4 683 322 79 715 +4 79 715 322 213 +4 9 20 613 775 +4 20 567 775 890 +4 20 567 613 775 +4 20 408 890 775 +4 769 607 760 80 +4 769 607 580 760 +4 94 606 770 761 +4 761 606 770 275 +4 771 760 605 80 +4 771 338 605 760 +4 793 236 192 1004 +4 838 1004 383 548 +4 192 236 383 1004 +4 793 838 1004 192 +4 192 1004 383 838 +4 1005 197 292 192 +4 756 265 192 1005 +4 950 192 197 1005 +4 756 950 1005 192 +4 1005 192 661 265 +4 1005 192 292 661 +4 12 1006 201 202 +4 408 12 1006 201 +4 890 567 201 1006 +4 890 408 1006 201 +4 1007 907 569 461 +4 1007 729 798 446 +4 722 1007 162 461 +4 907 1007 722 461 +4 1008 895 564 466 +4 1008 503 466 161 +4 1008 895 466 503 +4 1008 564 555 466 +4 705 726 116 693 +4 1002 693 726 378 +4 200 216 344 1009 +4 505 199 1009 11 +4 515 117 280 952 +4 416 436 614 415 +4 193 515 379 1016 +4 515 1016 193 319 +4 193 1016 379 468 +4 193 1016 468 490 +4 319 193 490 1016 +4 135 625 149 333 +4 1006 567 624 890 +4 517 892 631 107 +4 1007 569 907 640 +4 643 1030 313 566 +4 902 643 634 566 +4 1008 555 564 630 +4 1008 564 895 630 +4 48 589 247 945 +4 870 572 487 472 +4 871 1033 184 763 +4 763 1033 187 871 +4 871 759 184 1033 +4 95 765 324 381 +4 381 765 324 571 +4 571 324 671 765 +4 1010 77 329 380 +4 1010 329 338 583 +4 1010 380 329 583 +4 1010 766 329 77 +4 1010 766 875 329 +4 338 875 329 1010 +4 767 1010 338 583 +4 338 875 1010 767 +4 1017 759 494 1 +4 1017 477 185 759 +4 477 1017 185 876 +4 494 876 185 1017 +4 876 185 477 188 +4 173 572 742 782 +4 782 487 470 877 +4 470 487 474 877 +4 487 474 877 609 +4 416 415 614 400 +4 1011 431 194 311 +4 1011 311 194 96 +4 874 1011 431 194 +4 194 312 926 296 +4 195 159 599 266 +4 195 599 159 350 +4 101 1012 235 332 +4 846 101 1012 235 +4 649 681 318 540 +4 650 544 322 683 +4 651 598 461 722 +4 532 426 522 197 +4 532 396 426 197 +4 599 292 197 710 +4 123 346 749 427 +4 749 346 485 427 +4 521 439 522 485 +4 323 521 522 485 +4 444 383 384 459 +4 244 682 388 317 +4 1014 521 522 323 +4 591 522 323 1014 +4 591 443 522 1014 +4 418 444 1014 521 +4 521 444 1014 383 +4 521 383 1014 522 +4 443 532 522 197 +4 443 522 532 591 +4 444 546 384 445 +4 198 316 397 400 +4 198 690 400 397 +4 348 198 397 690 +4 348 397 198 851 +4 198 1015 400 690 +4 348 198 690 1015 +4 868 198 348 1015 +4 868 453 198 1015 +4 533 534 238 260 +4 981 534 533 260 +4 644 453 491 198 +4 453 440 1015 405 +4 491 453 1015 198 +4 491 440 1015 453 +4 240 608 189 355 +4 189 246 535 355 +4 608 255 246 589 +4 608 246 816 189 +4 816 246 535 189 +4 207 328 467 189 +4 467 328 484 189 +4 456 259 1031 471 +4 471 259 1031 495 +4 471 495 1031 451 +4 456 471 1031 451 +4 468 357 1016 379 +4 490 357 1016 468 +4 188 802 473 209 +4 473 802 597 209 +4 473 597 802 215 +4 403 478 396 584 +4 563 951 239 199 +4 563 951 608 239 +4 537 208 221 227 +4 225 493 816 283 +4 207 225 994 353 +4 608 276 353 283 +4 207 563 353 608 +4 207 994 189 608 +4 316 375 83 622 +4 910 324 287 281 +4 911 185 202 786 +4 909 788 669 463 +4 793 669 463 909 +4 130 271 179 312 +4 130 271 312 562 +4 349 526 186 435 +4 349 526 435 282 +4 341 441 989 429 +4 114 842 934 178 +4 118 558 663 559 +4 752 959 420 266 +4 702 959 420 752 +4 712 662 516 921 +4 678 458 257 960 +4 155 716 713 753 +4 353 659 225 755 +4 725 777 582 708 +4 725 708 582 784 +4 572 823 394 237 +4 572 823 487 394 +4 667 314 668 588 +4 374 314 610 10 +4 762 843 480 481 +4 762 843 72 480 +4 387 332 482 100 +4 642 218 402 26 +4 496 703 585 586 +4 585 703 940 586 +4 586 940 581 703 +4 734 609 474 784 +4 734 609 784 929 +4 692 744 928 574 +4 615 570 184 617 +4 617 792 184 615 +4 41 746 960 45 +4 730 202 911 205 +4 657 957 206 730 +4 911 730 206 957 +4 104 316 397 198 +4 622 104 316 726 +4 104 726 397 316 +4 850 198 104 99 +4 83 104 316 622 +4 211 236 748 720 +4 478 748 212 339 +4 83 316 850 375 +4 99 851 198 104 +4 851 397 198 104 +4 98 102 453 988 +4 102 453 988 560 +4 102 453 560 576 +4 599 420 710 197 +4 548 393 966 414 +4 548 459 966 393 +4 80 995 607 611 +4 611 607 377 995 +4 612 606 996 94 +4 612 606 342 963 +4 612 606 963 996 +4 80 605 997 611 +4 611 997 376 605 +4 511 1030 566 313 +4 950 320 350 197 +4 950 1005 350 159 +4 274 213 361 689 +4 213 689 176 543 +4 274 213 529 361 +4 213 361 809 529 +4 213 176 809 543 +4 1002 1003 213 375 +4 79 1002 715 213 +4 1016 515 379 869 +4 515 869 1016 319 +4 319 515 869 252 +4 216 1024 226 221 +4 240 537 216 226 +4 537 226 221 216 +4 556 338 785 830 +4 746 291 830 785 +4 746 556 785 830 +4 195 420 562 266 +4 195 562 420 350 +4 707 639 214 667 +4 707 214 188 667 +4 922 103 517 631 +4 89 565 737 193 +4 89 745 565 193 +4 878 193 745 89 +4 451 495 462 750 +4 346 427 423 521 +4 346 323 485 521 +4 381 379 468 486 +4 381 486 468 687 +4 283 816 246 493 +4 677 770 275 761 +4 677 275 571 761 +4 296 96 194 666 +4 557 447 446 1026 +4 28 238 273 34 +4 28 238 371 273 +4 288 1000 217 913 +4 217 1000 268 913 +4 614 217 953 349 +4 774 400 356 614 +4 430 559 596 432 +4 559 578 596 432 +4 776 689 744 810 +4 351 452 456 1031 +4 447 462 673 452 +4 351 753 452 462 +4 673 1031 456 452 +4 713 447 452 462 +4 713 462 452 753 +4 243 289 250 1019 +4 553 239 354 181 +4 553 200 992 181 +4 682 286 388 264 +4 1020 796 256 483 +4 250 1019 289 290 +4 1020 250 289 290 +4 1020 492 262 829 +4 1020 290 297 298 +4 1020 298 297 262 +4 256 257 796 309 +4 796 299 298 309 +4 262 298 308 309 +4 882 444 443 1014 +4 141 591 882 443 +4 591 443 1014 882 +4 485 426 749 439 +4 485 439 522 426 +4 151 444 445 546 +4 445 593 546 384 +4 512 464 465 1021 +4 1021 340 465 512 +4 340 587 1021 465 +4 911 202 185 205 +4 185 205 204 801 +4 911 185 801 205 +4 229 230 803 256 +4 229 250 492 803 +4 229 256 234 230 +4 229 256 492 234 +4 29 917 234 263 +4 69 797 321 326 +4 65 285 603 321 +4 797 321 326 327 +4 287 318 324 687 +4 287 687 324 331 +4 289 781 297 290 +4 289 290 797 326 +4 290 797 326 327 +4 290 297 1022 781 +4 290 327 326 1022 +4 298 336 299 290 +4 290 322 327 688 +4 290 688 327 337 +4 297 985 308 1022 +4 1022 327 968 336 +4 1022 308 805 985 +4 1022 336 335 805 +4 298 805 309 310 +4 298 310 299 336 +4 310 336 337 299 +4 71 805 335 343 +4 67 343 310 805 +4 67 310 343 962 +4 310 337 343 841 +4 310 841 343 962 +4 137 799 941 445 +4 739 450 449 811 +4 424 450 429 1023 +4 1023 446 450 451 +4 789 424 1023 450 +4 789 446 450 1023 +4 340 811 1021 587 +4 924 455 811 428 +4 924 811 455 340 +4 450 800 798 676 +4 800 676 750 798 +4 981 306 260 54 +4 218 255 608 951 +4 608 255 589 240 +4 608 589 246 355 +4 577 247 216 1024 +4 577 437 247 1024 +4 216 247 226 1024 +4 401 220 223 918 +4 712 754 813 230 +4 401 224 223 813 +4 488 253 227 1024 +4 712 813 229 230 +4 712 234 230 229 +4 39 819 254 984 +4 594 1025 818 232 +4 1025 817 594 254 +4 1025 254 249 817 +4 1025 249 254 697 +4 1025 697 254 984 +4 1025 818 819 254 +4 1025 984 254 819 +4 778 490 358 698 +4 698 490 358 820 +4 342 778 358 698 +4 26 241 283 218 +4 26 32 241 218 +4 400 356 614 416 +4 1026 447 451 673 +4 241 475 334 281 +4 394 487 472 824 +4 394 592 824 472 +4 592 472 466 824 +4 675 823 487 676 +4 203 221 208 828 +4 827 203 828 221 +4 827 222 221 828 +4 204 222 209 1027 +4 1027 219 222 476 +4 1027 476 817 372 +4 1027 476 222 817 +4 778 698 833 490 +4 698 331 778 833 +4 372 1027 594 817 +4 372 228 826 597 +4 372 228 594 826 +4 53 822 243 284 +4 249 250 243 289 +4 249 289 395 250 +4 61 779 249 289 +4 779 289 395 249 +4 822 61 249 289 +4 55 308 262 829 +4 785 688 830 329 +4 287 325 331 1028 +4 1028 325 331 698 +4 1028 1034 331 513 +4 287 590 1028 331 +4 1028 698 331 1034 +4 831 556 830 338 +4 830 338 337 831 +4 357 386 379 699 +4 1016 357 386 379 +4 490 357 386 1016 +4 568 490 357 386 +4 568 390 386 357 +4 357 386 699 390 +4 828 208 832 227 +4 828 594 227 832 +4 379 403 699 1029 +4 1029 478 403 554 +4 234 492 261 262 +4 262 261 234 35 +4 835 233 234 261 +4 835 492 261 234 +4 1025 835 834 697 +4 835 697 492 834 +4 834 243 476 249 +4 219 242 243 889 +4 967 228 234 210 +4 228 234 233 937 +4 967 228 937 234 +4 205 206 220 223 +4 205 219 476 220 +4 205 223 476 372 +4 476 220 219 243 +4 228 834 223 372 +4 228 223 834 229 +4 345 837 690 836 +4 836 356 837 690 +4 120 557 140 623 +4 120 836 557 419 +4 270 458 352 525 +4 270 257 352 458 +4 269 351 561 462 +4 252 235 952 532 +4 172 824 601 487 +4 728 172 824 601 +4 1 617 792 184 +4 979 759 184 1 +4 792 1 184 759 +4 759 792 871 184 +4 621 2 667 188 +4 2 188 187 667 +4 494 665 759 185 +4 494 665 185 304 +4 1017 759 185 494 +4 925 180 258 175 +4 925 842 180 175 +4 925 842 175 934 +4 25 233 232 819 +4 25 636 233 819 +4 67 309 965 805 +4 67 310 309 805 +4 799 151 882 444 +4 799 151 444 445 +4 65 797 975 285 +4 65 797 285 321 +4 696 434 743 581 +4 696 434 581 931 +4 165 293 237 173 +4 311 357 699 666 +4 479 311 699 666 +4 769 842 580 607 +4 692 842 580 769 +4 643 484 328 905 +4 665 201 185 704 +4 665 704 637 201 +4 839 627 642 276 +4 1002 176 375 213 +4 944 405 345 110 +4 944 99 345 348 +4 944 405 348 345 +4 239 537 216 240 +4 239 992 216 537 +4 1002 885 726 693 +4 885 726 622 1002 +4 622 83 1003 375 +4 375 732 809 176 +4 272 312 130 179 +4 272 296 130 312 +4 312 272 479 993 +4 312 969 993 699 +4 312 479 699 993 +4 440 180 389 175 +4 180 842 389 175 +4 175 842 389 744 +4 92 342 612 568 +4 793 954 909 838 +4 793 909 954 167 +4 845 101 319 438 +4 845 105 319 101 +4 202 1006 219 12 +4 236 439 383 1004 +4 197 426 522 236 +4 320 236 426 197 +4 320 426 396 197 +4 599 197 292 1005 +4 350 1005 197 599 +4 950 197 350 1005 +4 246 534 238 533 +4 246 493 238 814 +4 246 534 814 238 +4 816 246 493 238 +4 535 533 246 238 +4 535 246 816 238 +4 560 558 988 633 +4 633 118 558 988 +4 414 472 463 393 +4 548 414 463 393 +4 414 788 463 472 +4 414 909 463 788 +4 548 909 463 414 +4 981 541 534 489 +4 933 548 966 414 +4 966 991 459 548 +4 966 593 237 394 +4 433 237 966 593 +4 175 440 810 389 +4 744 175 810 389 +4 787 750 539 758 +4 282 452 456 351 +4 415 726 116 705 +4 415 776 726 705 +4 415 776 705 278 +4 104 316 850 83 +4 498 399 433 163 +4 9 505 200 20 +4 328 313 643 1030 +4 935 162 1007 729 +4 935 729 1007 446 +4 11 951 199 1009 +4 720 236 320 370 +4 33 53 243 975 +4 33 243 1019 975 +4 397 416 886 557 +4 397 557 886 120 +4 894 306 54 34 +4 260 306 34 54 +4 315 438 737 820 +4 437 221 738 815 +4 437 248 815 738 +4 401 918 223 224 +4 450 676 461 675 +4 569 461 675 450 +4 1007 569 450 461 +4 450 798 461 676 +4 1007 450 798 461 +4 592 393 385 384 +4 384 393 463 592 +4 1019 289 797 284 +4 1019 797 289 290 +4 223 250 229 803 +4 813 229 230 803 +4 813 229 803 223 +4 587 676 1021 465 +4 441 465 800 587 +4 587 800 676 465 +4 351 462 1031 561 +4 673 462 451 1031 +4 351 452 1031 462 +4 673 462 1031 452 +4 803 256 483 1020 +4 229 803 492 256 +4 492 803 1020 256 +4 558 596 578 821 +4 822 289 243 284 +4 243 284 289 1019 +4 245 475 281 287 +4 910 245 281 287 +4 245 241 281 475 +4 354 307 313 467 +4 354 307 763 313 +4 992 239 181 537 +4 553 239 992 199 +4 553 992 239 181 +4 69 987 797 326 +4 987 289 797 326 +4 424 419 425 853 +4 201 1027 204 202 +4 185 204 202 201 +4 352 264 388 796 +4 746 299 291 796 +4 746 264 796 291 +4 286 322 290 688 +4 829 262 297 308 +4 1020 829 262 297 +4 45 310 746 602 +4 37 790 1032 248 +4 476 1032 248 249 +4 790 476 1032 248 +4 256 298 262 309 +4 263 256 262 309 +4 256 298 309 796 +4 256 309 263 257 +4 796 290 1020 298 +4 1020 290 796 483 +4 951 255 608 240 +4 393 463 592 472 +4 385 393 394 593 +4 283 816 994 608 +4 283 246 816 608 +4 353 994 608 283 +4 805 310 336 343 +4 298 336 805 310 +4 781 1022 326 335 +4 289 326 781 290 +4 290 781 1022 326 +4 424 1023 429 780 +4 780 429 430 1023 +4 423 427 428 454 +4 1033 208 203 181 +4 187 668 208 1033 +4 759 1033 187 203 +4 871 759 1033 187 +4 437 46 253 947 +4 437 947 253 815 +4 815 947 253 254 +4 71 985 335 805 +4 297 335 985 1022 +4 1022 985 805 335 +4 815 253 1024 227 +4 437 253 1024 815 +4 948 428 429 811 +4 465 825 464 512 +4 372 228 834 817 +4 372 817 594 228 +4 464 824 466 512 +4 464 592 466 824 +4 834 1025 249 817 +4 834 249 1025 697 +4 476 249 817 834 +4 204 1027 209 801 +4 801 209 597 372 +4 801 209 372 1027 +4 473 801 209 597 +4 221 815 227 828 +4 828 227 594 815 +4 835 261 819 233 +4 835 697 1025 261 +4 835 261 1025 819 +4 1029 390 554 969 +4 699 969 390 1029 +4 290 336 1022 298 +4 39 819 984 261 +4 1025 697 984 261 +4 1025 261 984 819 +4 299 337 310 831 +4 831 337 310 841 +4 594 832 232 818 +4 733 818 232 832 +4 449 1021 455 811 +4 340 811 455 1021 +4 917 263 257 256 +4 917 263 256 234 +4 280 952 396 252 +4 252 952 396 532 +4 252 387 319 332 +4 101 235 319 332 +4 1034 778 606 342 +4 513 606 342 1034 +4 698 1034 342 778 +4 1028 342 1034 513 +4 1028 698 1034 342 +4 209 826 594 832 +4 832 826 594 232 +4 393 472 592 394 +4 280 396 1029 252 +4 252 396 1029 478 +4 280 252 1029 869 +4 688 337 329 529 +4 830 329 337 338 +4 688 329 337 830 +4 464 825 487 824 +4 397 557 836 416 +4 416 557 836 356 +4 397 400 416 690 +4 690 400 416 356 +4 397 416 836 690 +4 730 205 206 220 +4 730 205 911 206 +4 205 220 476 223 +4 476 220 243 223 +4 451 750 462 729 +4 539 729 462 750 +4 234 233 835 228 +4 372 817 834 476 +4 1026 673 451 456 +4 405 356 837 596 +4 690 356 837 405 +4 690 356 405 400 +4 52 888 255 747 +4 650 79 274 664 +4 650 274 380 664 +4 623 887 446 557 +4 136 623 446 419 +4 37 889 242 219 +4 975 69 284 797 +4 33 975 1019 285 +4 975 797 284 1019 +4 38 260 643 905 +4 636 903 233 261 +4 636 261 819 39 +4 636 261 233 819 +4 774 821 560 258 +4 258 106 180 925 +4 200 973 505 617 +4 199 812 11 505 +4 92 612 342 963 +4 893 342 963 92 +4 893 626 342 92 +4 100 482 112 332 +4 843 52 480 481 +4 502 236 211 720 +4 237 394 572 966 +4 166 582 259 160 +4 582 514 259 160 +4 723 259 160 166 +4 1031 259 561 495 +4 351 561 1031 259 +4 627 5 199 563 +4 627 951 563 199 +4 682 286 285 388 +4 235 591 952 532 +4 1012 121 235 323 +4 1012 323 235 332 +4 846 1012 121 235 +4 137 445 920 143 +4 881 137 143 445 +4 626 70 342 90 +4 90 342 859 70 +4 568 92 342 90 +4 626 90 342 92 +4 632 923 343 71 +4 632 84 923 71 +4 632 974 343 923 +4 31 39 232 818 +4 31 818 232 733 +4 31 39 818 865 +4 638 39 232 31 +4 69 849 321 83 +4 1018 288 278 132 +4 1018 415 278 288 +4 36 216 344 577 +4 221 577 216 1024 +4 780 124 946 424 +4 780 429 424 948 +4 780 946 948 424 +4 947 49 254 248 +4 73 943 781 326 +4 48 50 945 247 +4 488 50 247 536 +4 253 50 247 488 +4 50 945 247 536 +4 123 125 346 427 +4 954 171 838 998 +4 998 838 731 171 +4 266 959 562 1035 +4 159 752 599 266 +4 661 192 292 731 +4 719 661 292 731 +4 291 264 388 286 +4 976 307 328 13 +4 307 709 313 13 +4 7 307 13 709 +4 7 976 13 307 +4 328 307 313 13 +4 544 57 286 322 +4 683 57 322 373 +4 683 57 544 322 +4 378 726 705 693 +4 215 707 639 214 +4 518 232 25 233 +4 916 95 579 980 +4 916 579 486 585 +4 916 579 585 980 +4 115 212 359 507 +4 212 320 584 528 +4 350 302 562 584 +4 307 620 313 709 +4 511 709 313 620 +4 795 581 131 703 +4 163 433 459 546 +4 399 163 546 433 +4 743 431 479 194 +4 696 431 743 194 +4 696 743 431 575 +4 696 431 874 575 +4 696 874 431 194 +4 583 574 990 744 +4 872 574 990 583 + +CELL_TYPES 4436 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 diff --git a/examples/pybullet/gym/pybullet_data/torus/torus_textured.mtl b/examples/pybullet/gym/pybullet_data/torus/torus_textured.mtl new file mode 100644 index 000000000..36228e66e --- /dev/null +++ b/examples/pybullet/gym/pybullet_data/torus/torus_textured.mtl @@ -0,0 +1,11 @@ +# Blender MTL File: 'None' +# Material Count: 1 + +newmtl None +Ns 0 +Ka 0.000000 0.000000 0.000000 +Kd 0.8 0.8 0.8 +Ks 0.8 0.8 0.8 +d 1 +illum 2 +map_Kd ../cube.png diff --git a/examples/pybullet/gym/pybullet_data/torus/torus_textured.obj b/examples/pybullet/gym/pybullet_data/torus/torus_textured.obj new file mode 100644 index 000000000..ede99fd1d --- /dev/null +++ b/examples/pybullet/gym/pybullet_data/torus/torus_textured.obj @@ -0,0 +1,2270 @@ +# Blender v2.79 (sub 0) OBJ File: '' +# www.blender.org +mtllib torus_textured.mtl +o torus +v -0.710313 -0.135160 -0.000000 +v -0.750000 -0.000000 -0.000000 +v -0.719154 -0.061973 -0.063589 +v -0.723426 -0.056014 0.050909 +v -0.710313 0.135161 0.000000 +v -0.732316 0.000000 -0.088905 +v -0.732316 -0.000000 0.088905 +v -0.646406 -0.181284 0.053682 +v -0.603854 -0.227408 -0.000000 +v -0.650289 -0.177804 -0.054345 +v -0.698555 -0.102472 0.107364 +v -0.683279 -0.135160 0.135913 +v -0.688957 -0.135160 -0.107364 +v -0.646405 0.181284 -0.053682 +v -0.603853 0.227408 0.000000 +v -0.688957 0.135161 0.107364 +v -0.688957 0.135161 -0.107364 +v -0.688804 -0.070361 -0.203790 +v -0.692910 0.000000 -0.287012 +v -0.656244 -0.135160 -0.271825 +v -0.637874 -0.086416 -0.324584 +v -0.685503 0.067388 -0.224775 +v -0.656244 0.135161 -0.271825 +v -0.632898 0.063386 -0.343969 +v -0.714631 0.000000 -0.177810 +v -0.642280 -0.038943 -0.342598 +v -0.652265 0.000000 -0.347842 +v -0.656244 -0.135160 0.271825 +v -0.692910 -0.000000 0.287013 +v -0.688709 -0.073793 0.199199 +v -0.625484 -0.070863 0.351190 +v -0.643253 -0.000000 0.361328 +v -0.656244 0.135161 0.271825 +v -0.688653 0.068318 0.207562 +v -0.714631 -0.000000 0.177810 +v -0.570953 -0.178898 -0.310363 +v -0.558142 -0.227247 -0.230745 +v -0.615371 -0.181204 -0.210170 +v -0.672601 -0.135160 -0.189595 +v -0.598967 -0.135160 -0.357546 +v -0.568401 -0.181284 0.309321 +v -0.557888 -0.227408 0.231085 +v -0.619371 -0.181284 0.189595 +v -0.578914 -0.135160 0.387558 +v -0.557888 0.227408 -0.231085 +v -0.628566 0.176132 -0.173258 +v -0.559233 0.190252 -0.304771 +v -0.670539 0.135161 -0.199959 +v -0.578914 0.135161 -0.387558 +v -0.557888 0.227408 0.231085 +v -0.623749 0.180717 0.170877 +v -0.562017 0.183687 0.313979 +v -0.607092 0.076946 0.375562 +v -0.578913 0.135161 0.387558 +v -0.672600 0.135161 0.189595 +v -0.464421 -0.247455 -0.000000 +v -0.577088 -0.227408 -0.134561 +v -0.523460 -0.237432 0.053682 +v -0.583552 -0.226830 0.105417 +v -0.464421 0.247455 0.000000 +v -0.530245 0.236597 -0.048768 +v -0.582497 0.227408 0.107364 +v -0.580871 0.227408 -0.115542 +v -0.429069 -0.247455 -0.177726 +v -0.432533 -0.237598 -0.293570 +v -0.485904 -0.227408 -0.338816 +v -0.508160 -0.237821 0.116981 +v -0.429671 -0.247455 0.174700 +v -0.378732 -0.247455 0.253061 +v -0.492439 -0.227408 0.329037 +v -0.492438 0.227408 -0.329037 +v -0.429069 0.247455 -0.177726 +v -0.513179 0.235748 -0.164233 +v -0.429069 0.247455 0.177726 +v -0.434056 0.237817 0.288611 +v -0.510336 0.236467 0.153398 +v -0.484699 0.227582 0.338479 +v -0.530330 0.000000 -0.530330 +v -0.458572 -0.077603 -0.551399 +v -0.502268 -0.135160 -0.502267 +v -0.550617 -0.135160 -0.429907 +v -0.453133 0.076929 -0.555267 +v -0.502267 0.135161 -0.502267 +v -0.556115 0.068101 -0.456439 +v -0.611620 0.000000 -0.408671 +v -0.599787 -0.066530 -0.391893 +v -0.435644 0.000000 -0.593597 +v -0.426989 -0.227408 -0.426989 +v -0.407915 -0.185065 -0.497375 +v -0.505464 -0.183357 -0.399290 +v -0.387558 -0.135160 -0.578914 +v -0.426989 -0.227408 0.426989 +v -0.502267 -0.135160 0.502267 +v -0.500057 -0.179599 0.415039 +v -0.387558 -0.135160 0.578914 +v -0.530330 -0.000000 0.530330 +v -0.562399 -0.057673 0.452441 +v -0.426989 0.227408 -0.426989 +v -0.502951 0.181284 -0.407273 +v -0.371632 0.194497 -0.508779 +v -0.387558 0.135161 -0.578913 +v -0.426989 0.227408 0.426989 +v -0.514900 0.181783 0.388374 +v -0.502267 0.135161 0.502267 +v -0.379298 0.206981 0.486662 +v -0.429906 0.135161 0.550617 +v -0.557897 0.077590 0.448854 +v -0.336285 -0.188937 -0.000000 +v -0.382677 -0.218196 0.088863 +v -0.446745 -0.247455 -0.088863 +v -0.446745 -0.247455 0.088863 +v -0.336285 0.188937 0.000000 +v -0.385778 0.217833 -0.069269 +v -0.382741 0.217882 0.085078 +v -0.446745 0.247455 -0.088863 +v -0.446745 0.247455 0.088863 +v -0.310687 -0.188937 -0.128691 +v -0.378733 -0.247455 -0.253061 +v -0.310687 -0.188937 0.128691 +v -0.310686 0.188937 -0.128690 +v -0.378732 0.247455 -0.253061 +v -0.310686 0.188937 0.128691 +v -0.331737 0.217352 0.207025 +v -0.378732 0.247455 0.253061 +v -0.328396 -0.247455 -0.328395 +v -0.253061 -0.247455 -0.378732 +v -0.346275 -0.227408 -0.480921 +v -0.328395 -0.247455 0.328395 +v -0.331535 -0.227408 0.490770 +v -0.282023 0.237297 -0.442722 +v -0.328395 0.247455 -0.328395 +v -0.329037 0.227408 -0.492438 +v -0.328395 0.247455 0.328395 +v -0.253061 0.247455 0.378732 +v -0.331878 0.227663 0.488446 +v -0.289625 -0.134067 -0.057295 +v -0.287923 -0.130160 0.053228 +v -0.260127 -0.070433 -0.000000 +v -0.285407 0.129685 -0.064345 +v -0.282177 0.122530 0.057464 +v -0.260127 0.070433 0.000000 +v -0.204562 -0.218465 -0.336259 +v -0.237789 -0.188937 -0.237789 +v -0.237789 -0.188937 0.237789 +v -0.217800 -0.218788 0.328247 +v -0.177726 -0.247455 0.429069 +v -0.237789 0.188937 -0.237789 +v -0.253061 0.247455 -0.378732 +v -0.226904 0.218812 0.322227 +v -0.237789 0.188937 0.237789 +v -0.240326 -0.070433 -0.099546 +v -0.247312 -0.129685 0.156314 +v -0.240326 -0.070433 0.099546 +v -0.240326 0.070433 -0.099546 +v -0.247312 0.129685 -0.156314 +v -0.240326 0.070433 0.099546 +v -0.252688 0.136261 0.155728 +v -0.271825 -0.135160 -0.656244 +v -0.287013 0.000000 -0.692910 +v -0.135913 -0.135160 -0.683279 +v -0.341627 -0.063564 -0.634402 +v -0.220805 0.062520 -0.687722 +v -0.271825 0.135161 -0.656244 +v -0.342643 0.065672 -0.632993 +v -0.177810 0.000000 -0.714631 +v -0.370902 -0.001344 -0.636391 +v -0.171633 -0.077297 0.693163 +v -0.287013 -0.000000 0.692910 +v -0.271825 -0.135160 0.656244 +v -0.163774 0.083974 0.692766 +v -0.271825 0.135161 0.656244 +v -0.343309 0.068474 0.631577 +v -0.396167 -0.000062 0.619953 +v -0.177810 -0.000000 0.714631 +v -0.231085 -0.227408 -0.557888 +v -0.170310 -0.182655 -0.621625 +v -0.313555 -0.185113 -0.560359 +v -0.170868 -0.185426 0.618316 +v -0.231085 -0.227408 0.557888 +v -0.304838 -0.174559 0.580551 +v -0.135913 -0.135160 0.683279 +v -0.231085 0.227408 -0.557888 +v -0.357546 0.135161 -0.598967 +v -0.189595 0.181284 -0.619371 +v -0.107364 0.135161 -0.688957 +v -0.231085 0.227408 0.557888 +v -0.189595 0.135161 0.672600 +v -0.357546 0.135161 0.598967 +v -0.212132 0.000000 -0.141742 +v -0.183937 -0.070433 -0.183937 +v -0.183937 -0.070433 0.183937 +v -0.183937 0.070433 -0.183937 +v -0.182603 0.070438 0.184833 +v -0.156314 -0.129685 -0.247312 +v -0.128691 -0.188937 -0.310687 +v -0.156314 -0.129685 0.247312 +v -0.128691 -0.188937 0.310687 +v -0.163025 0.141967 -0.252138 +v -0.128691 0.188937 -0.310686 +v -0.165163 0.141475 0.250336 +v -0.128691 0.188937 0.310686 +v -0.177726 -0.247455 -0.429069 +v -0.107364 -0.227408 -0.582498 +v -0.149665 -0.235647 0.516778 +v -0.107364 -0.227408 0.582498 +v -0.177726 0.247455 -0.429069 +v -0.142545 0.237432 -0.505783 +v -0.107364 0.227408 -0.582497 +v -0.177726 0.247455 0.429069 +v -0.107364 0.227408 0.582497 +v -0.099546 0.070433 -0.240326 +v -0.099546 -0.070433 -0.240326 +v -0.099546 0.070433 0.240326 +v -0.099546 -0.070433 0.240326 +v -0.080033 -0.214471 -0.376277 +v -0.088863 -0.247455 -0.446745 +v -0.088863 -0.247455 0.446745 +v -0.080472 0.217516 -0.382857 +v -0.088863 0.247455 -0.446745 +v -0.071400 0.215432 0.380098 +v -0.088863 0.247455 0.446745 +v -0.055107 -0.128888 -0.286732 +v 0.000000 -0.188937 -0.336285 +v -0.055041 -0.130685 0.287900 +v -0.000000 -0.188937 0.336285 +v -0.062756 0.134013 -0.288504 +v 0.000000 0.188937 -0.336285 +v -0.060039 0.128492 0.285497 +v -0.000000 0.188937 0.336285 +v -0.053324 -0.003221 -0.249520 +v 0.000000 -0.070433 -0.260127 +v -0.045259 -0.000273 0.251124 +v -0.000000 -0.070433 0.260127 +v 0.000000 0.070433 -0.260127 +v -0.000000 0.070433 0.260127 +v -0.000000 -0.135160 0.710313 +v 0.081349 -0.066818 0.714199 +v -0.000000 -0.000000 0.750000 +v -0.083186 -0.069651 0.713002 +v -0.002247 0.135161 0.709866 +v 0.082107 0.059371 0.716235 +v -0.073908 0.058686 0.718067 +v 0.088905 -0.000000 0.732316 +v -0.088905 -0.000000 0.732316 +v -0.000000 -0.227408 0.603854 +v -0.065074 -0.176105 0.650117 +v 0.052670 -0.175140 0.653698 +v 0.135913 -0.135160 0.683279 +v -0.000000 0.227408 0.603853 +v 0.053682 0.181284 0.646405 +v -0.053682 0.181284 0.646405 +v 0.111938 0.135161 0.688047 +v -0.107364 0.135161 0.688957 +v 0.005294 -0.247455 0.463368 +v 0.107364 -0.227408 0.582498 +v -0.053682 -0.237432 0.523460 +v -0.000000 0.247455 0.464421 +v 0.052087 0.236945 0.527161 +v -0.053682 0.237432 0.523459 +v 0.110731 0.226341 0.583059 +v 0.074625 -0.219739 0.388888 +v 0.088863 -0.247455 0.446745 +v 0.053837 0.214530 0.381616 +v 0.088863 0.247455 0.446745 +v 0.056825 -0.133366 0.289268 +v 0.128691 -0.188937 0.310687 +v 0.049773 0.129685 0.288305 +v 0.128691 0.188937 0.310686 +v 0.099546 -0.070433 0.240326 +v 0.099546 0.070433 0.240326 +v 0.099546 -0.070433 -0.240326 +v 0.056738 -0.130548 -0.287475 +v 0.057766 0.137654 -0.291836 +v 0.099546 0.070433 -0.240326 +v 0.000000 -0.247455 -0.464421 +v 0.088863 -0.247455 -0.446745 +v 0.128691 -0.188937 -0.310687 +v 0.000000 0.247455 -0.464421 +v 0.091470 0.217038 -0.379622 +v 0.128691 0.188937 -0.310686 +v 0.000000 -0.227408 -0.603854 +v 0.115542 -0.227408 -0.580871 +v 0.000000 0.227408 -0.603853 +v 0.115542 0.227408 -0.580871 +v -0.050354 0.236542 -0.530311 +v 0.088863 0.247455 -0.446745 +v -0.077172 -0.178565 -0.644871 +v 0.000000 -0.135160 -0.710313 +v 0.053682 -0.181284 -0.646406 +v 0.127426 0.182095 -0.630801 +v 0.000000 0.135161 -0.710313 +v -0.053284 0.178446 -0.649760 +v 0.000000 0.000000 -0.750000 +v 0.083331 -0.065958 -0.714057 +v -0.081654 -0.056098 -0.717286 +v 0.107364 -0.135160 -0.688957 +v -0.088905 0.000000 -0.732316 +v 0.057869 0.049516 -0.723950 +v 0.135913 0.135161 -0.683278 +v 0.124700 0.065746 -0.705891 +v 0.088905 0.000000 -0.732316 +v 0.140691 0.004583 0.212834 +v 0.168668 0.129685 0.239057 +v 0.183937 0.070433 0.183937 +v 0.158128 -0.126755 0.243879 +v 0.183937 -0.070433 0.183937 +v 0.183937 -0.070433 -0.183937 +v 0.183937 0.070433 -0.183937 +v 0.162826 -0.137642 -0.248993 +v 0.177726 0.247455 0.429069 +v 0.221031 0.217158 0.321879 +v 0.237789 0.188937 0.237789 +v 0.229404 0.216858 -0.315510 +v 0.177726 0.247455 -0.429069 +v 0.237789 0.188937 -0.237789 +v 0.177726 -0.247455 0.429069 +v 0.253061 -0.247455 0.378732 +v 0.237789 -0.188937 0.237789 +v 0.177726 -0.247455 -0.429069 +v 0.253061 -0.247455 -0.378732 +v 0.237789 -0.188937 -0.237789 +v 0.231085 0.227408 0.557888 +v 0.279740 0.237432 0.443142 +v 0.142545 0.237432 0.505783 +v 0.253061 0.247455 0.378732 +v 0.287768 0.237840 -0.434425 +v 0.231085 0.227408 -0.557888 +v 0.261020 0.247455 -0.373414 +v 0.286516 -0.237465 0.438340 +v 0.231085 -0.227408 0.557888 +v 0.231085 -0.227408 -0.557888 +v 0.346275 -0.227408 -0.480920 +v 0.240326 0.070433 0.099546 +v 0.245711 0.135139 0.164898 +v 0.242207 -0.130300 0.164652 +v 0.240597 -0.070433 0.098185 +v 0.240326 0.070433 -0.099546 +v 0.247109 -0.135199 -0.162873 +v 0.240326 -0.070433 -0.099546 +v 0.271825 0.135161 0.656244 +v 0.169224 0.181284 0.623422 +v 0.357546 0.135161 0.598967 +v 0.329037 0.227408 0.492438 +v 0.271825 0.135161 -0.656244 +v 0.304869 0.184082 -0.567568 +v 0.329037 0.227408 -0.492438 +v 0.300431 -0.181284 0.574341 +v 0.271825 -0.135160 0.656244 +v 0.190519 -0.174382 0.627152 +v 0.329037 -0.227408 0.492439 +v 0.357546 -0.135160 -0.598967 +v 0.271825 -0.135160 -0.656244 +v 0.181222 -0.173682 -0.629809 +v 0.310686 0.188937 0.128691 +v 0.378732 0.247455 0.253061 +v 0.328395 0.247455 0.328395 +v 0.310687 0.188937 -0.128690 +v 0.326095 0.216854 -0.213543 +v 0.328395 0.247455 -0.328395 +v 0.322623 -0.216228 0.216322 +v 0.310687 -0.188937 0.128691 +v 0.328395 -0.247455 0.328395 +v 0.310687 -0.188937 -0.128691 +v 0.378733 -0.247455 -0.253061 +v 0.328396 -0.247455 -0.328395 +v 0.250226 -0.000000 0.049773 +v 0.260127 0.070433 0.000000 +v 0.285407 0.129685 0.064345 +v 0.289619 0.135713 -0.062645 +v 0.287440 -0.131065 0.058580 +v 0.260127 -0.070433 -0.000000 +v 0.285899 -0.126588 -0.051864 +v 0.336285 0.188937 0.000000 +v 0.336285 -0.188937 -0.000000 +v 0.322279 0.067580 0.645938 +v 0.287013 -0.000000 0.692910 +v 0.214655 0.069255 0.686967 +v 0.189595 0.135161 0.672600 +v 0.224818 -0.067580 0.685438 +v 0.330781 -0.067146 0.640408 +v 0.387046 -0.135160 0.579256 +v 0.287013 0.000000 -0.692910 +v 0.217020 0.070360 -0.686173 +v 0.347842 0.000000 -0.652265 +v 0.387046 0.135161 -0.579255 +v 0.210948 -0.080005 -0.684548 +v 0.343477 -0.066922 -0.632002 +v 0.189595 -0.135160 -0.672601 +v 0.177810 -0.000000 0.714631 +v 0.347842 -0.000000 0.652265 +v 0.177810 0.000000 -0.714631 +v 0.374030 0.211140 0.054655 +v 0.429069 0.247455 0.177726 +v 0.382605 0.220104 0.110230 +v 0.382677 0.218196 -0.088863 +v 0.429069 0.247455 -0.177726 +v 0.381271 -0.216600 0.078355 +v 0.428583 -0.247391 0.178203 +v 0.446745 -0.247455 -0.088863 +v 0.429069 -0.247455 -0.177726 +v 0.426989 0.227408 0.426989 +v 0.469993 0.227408 0.362629 +v 0.426989 0.227408 -0.426989 +v 0.432732 0.238438 -0.282962 +v 0.378732 0.247455 -0.253061 +v 0.426989 -0.227408 0.426989 +v 0.492439 -0.227408 0.329037 +v 0.439562 -0.238499 0.271995 +v 0.378732 -0.247455 0.253061 +v 0.426989 -0.227408 -0.426989 +v 0.443142 -0.237432 -0.279740 +v 0.464421 0.247455 0.000000 +v 0.464421 -0.247455 -0.000000 +v 0.502267 0.135161 0.502267 +v 0.389730 0.189313 0.503743 +v 0.598967 0.135161 0.357546 +v 0.502267 0.135161 -0.502267 +v 0.407018 0.181284 -0.503122 +v 0.502951 0.181284 -0.407273 +v 0.492438 0.227408 -0.329037 +v 0.502267 -0.135160 0.502267 +v 0.538631 -0.173926 0.368866 +v 0.501453 -0.181675 -0.408719 +v 0.502268 -0.135160 -0.502267 +v 0.492439 -0.227408 -0.329037 +v 0.557888 0.227408 0.231085 +v 0.582497 0.227408 0.107364 +v 0.446745 0.247455 0.088863 +v 0.557888 0.227408 -0.231084 +v 0.580871 0.227408 -0.115542 +v 0.446745 0.247455 -0.088863 +v 0.557888 -0.227408 0.231085 +v 0.582498 -0.227408 0.107364 +v 0.446745 -0.247455 0.088863 +v 0.557888 -0.227408 -0.231085 +v 0.515728 -0.237427 -0.092711 +v 0.603853 0.227408 0.000000 +v 0.603854 -0.227408 -0.000000 +v 0.530330 -0.000000 0.530330 +v 0.556944 0.067580 0.455469 +v 0.443938 0.067580 0.564649 +v 0.431322 0.135161 0.549672 +v 0.455469 -0.067580 0.556944 +v 0.563256 -0.063878 0.447942 +v 0.578914 -0.135160 0.387558 +v 0.530330 0.000000 -0.530330 +v 0.414705 0.058506 -0.587324 +v 0.566090 0.060108 -0.445653 +v 0.578913 0.135161 -0.387558 +v 0.564464 -0.064950 -0.445577 +v 0.435586 -0.065536 -0.570937 +v 0.578914 -0.135160 -0.387558 +v 0.570975 -0.000000 0.469501 +v 0.408671 -0.000000 0.611620 +v 0.408671 0.000000 -0.611620 +v 0.611620 0.000000 -0.408671 +v 0.619371 0.181284 0.189595 +v 0.656244 0.135161 0.271825 +v 0.615971 0.183777 -0.192222 +v 0.656244 0.135161 -0.271825 +v 0.615859 -0.187440 0.171532 +v 0.656244 -0.135160 0.271825 +v 0.571923 -0.184840 0.296806 +v 0.656244 -0.135160 -0.271825 +v 0.618773 -0.182243 -0.187041 +v 0.580570 -0.227408 -0.117056 +v 0.710313 0.135161 0.000000 +v 0.688957 0.135161 -0.107364 +v 0.646723 0.180940 0.054080 +v 0.710313 -0.135160 -0.000000 +v 0.683279 -0.135160 -0.135912 +v 0.645372 -0.179169 0.071153 +v 0.692910 -0.000000 0.287013 +v 0.645938 0.067580 0.322279 +v 0.685667 0.071751 0.217507 +v 0.672600 0.135161 0.189595 +v 0.692910 0.000000 -0.287012 +v 0.685562 0.072184 -0.217397 +v 0.643668 0.052770 -0.333355 +v 0.672600 0.135161 -0.189595 +v 0.697660 -0.068270 0.162354 +v 0.639387 -0.067839 0.331951 +v 0.683279 -0.135160 0.135913 +v 0.619002 -0.072742 -0.359917 +v 0.685438 -0.067580 -0.224817 +v 0.611620 -0.000000 0.408671 +v 0.714631 -0.000000 0.177810 +v 0.652265 0.000000 -0.347842 +v 0.714373 -0.001402 -0.177040 +v 0.750000 0.000000 0.000000 +v 0.717360 0.075612 -0.052474 +v 0.710134 0.069315 0.098099 +v 0.688957 0.135161 0.107364 +v 0.714216 -0.065097 -0.083803 +v 0.712362 -0.080492 0.070402 +v 0.732316 0.000000 -0.088905 +v 0.732316 -0.000000 0.088905 +v -0.401630 0.076652 -0.589776 +v -0.407579 -0.070112 -0.588066 +v -0.593597 -0.000000 0.435644 +v -0.704476 0.062482 0.136628 +vt 0.732166 0.155461 +vt 0.714953 0.202717 +vt 0.708046 0.168831 +vt 0.732209 0.193512 +vt 0.701021 0.251467 +vt 0.695974 0.187245 +vt 0.732616 0.220277 +vt 0.754661 0.148648 +vt 0.752805 0.114521 +vt 0.726540 0.123737 +vt 0.750726 0.190465 +vt 0.761929 0.186795 +vt 0.705871 0.132777 +vt 0.684170 0.264421 +vt 0.689922 0.296828 +vt 0.721587 0.273032 +vt 0.678525 0.235129 +vt 0.673377 0.143118 +vt 0.648399 0.162273 +vt 0.657651 0.109185 +vt 0.637606 0.123659 +vt 0.657819 0.193767 +vt 0.641663 0.215784 +vt 0.626501 0.182337 +vt 0.675241 0.174073 +vt 0.631458 0.141944 +vt 0.630026 0.157329 +vt 0.787143 0.223027 +vt 0.768265 0.265466 +vt 0.764144 0.222215 +vt 0.792111 0.265020 +vt 0.782493 0.287007 +vt 0.751329 0.309317 +vt 0.747242 0.270599 +vt 0.749382 0.239903 +vt 0.637385 0.079834 +vt 0.670821 0.061503 +vt 0.677846 0.091493 +vt 0.682660 0.118885 +vt 0.624903 0.100431 +vt 0.809123 0.224691 +vt 0.807142 0.186241 +vt 0.784644 0.186679 +vt 0.810694 0.259651 +vt 0.636653 0.264964 +vt 0.657977 0.245210 +vt 0.622512 0.240774 +vt 0.657917 0.223189 +vt 0.609208 0.210333 +vt 0.736728 0.350100 +vt 0.729357 0.309709 +vt 0.756807 0.349975 +vt 0.777270 0.318929 +vt 0.773538 0.344441 +vt 0.736840 0.290959 +vt 0.773212 0.086238 +vt 0.710285 0.078135 +vt 0.778034 0.118471 +vt 0.780520 0.144897 +vt 0.682155 0.331179 +vt 0.674913 0.302893 +vt 0.711978 0.320993 +vt 0.663737 0.279519 +vt 0.686618 0.026488 +vt 0.615441 0.030872 +vt 0.610289 0.048084 +vt 0.795710 0.140692 +vt 0.823961 0.159192 +vt 0.846338 0.197017 +vt 0.830037 0.222870 +vt 0.608258 0.261143 +vt 0.633294 0.302000 +vt 0.646561 0.284317 +vt 0.725937 0.380887 +vt 0.751537 0.397237 +vt 0.720810 0.348908 +vt 0.759506 0.387496 +vt 0.572717 0.157060 +vt 0.550689 0.130920 +vt 0.567080 0.102975 +vt 0.595570 0.098918 +vt 0.557603 0.192476 +vt 0.576749 0.211301 +vt 0.592411 0.182042 +vt 0.610858 0.154722 +vt 0.613963 0.128021 +vt 0.544142 0.165540 +vt 0.558895 0.053757 +vt 0.538934 0.082993 +vt 0.593524 0.073932 +vt 0.524143 0.116033 +vt 0.849912 0.262118 +vt 0.831806 0.298238 +vt 0.830327 0.263014 +vt 0.853031 0.335173 +vt 0.813224 0.338775 +vt 0.809127 0.300664 +vt 0.579717 0.261025 +vt 0.594540 0.233878 +vt 0.555612 0.250329 +vt 0.545339 0.222559 +vt 0.778401 0.417103 +vt 0.772003 0.373190 +vt 0.795140 0.379753 +vt 0.794726 0.432209 +vt 0.807905 0.403747 +vt 0.791039 0.341872 +vt 0.777303 0.081668 +vt 0.808131 0.125476 +vt 0.738283 0.051098 +vt 0.802615 0.121174 +vt 0.680844 0.337119 +vt 0.659824 0.319965 +vt 0.705886 0.361169 +vt 0.657941 0.315887 +vt 0.704116 0.355911 +vt 0.690307 0.020639 +vt 0.620443 0.010475 +vt 0.827880 0.156348 +vt 0.632737 0.308394 +vt 0.607532 0.299189 +vt 0.724071 0.386196 +vt 0.741288 0.410397 +vt 0.745291 0.413243 +vt 0.548336 0.017192 +vt 0.487740 0.035724 +vt 0.515689 0.065301 +vt 0.864626 0.235997 +vt 0.870093 0.296989 +vt 0.551111 0.289679 +vt 0.581695 0.298427 +vt 0.551969 0.271928 +vt 0.765346 0.444757 +vt 0.783325 0.481829 +vt 0.796791 0.453835 +vt 0.726111 0.068061 +vt 0.788546 0.134500 +vt 0.740594 0.136936 +vt 0.658119 0.291607 +vt 0.711562 0.332488 +vt 0.695953 0.271534 +vt 0.475413 0.039567 +vt 0.545788 0.010956 +vt 0.867288 0.231608 +vt 0.885709 0.269207 +vt 0.902567 0.306617 +vt 0.582023 0.304881 +vt 0.556526 0.308969 +vt 0.779949 0.479179 +vt 0.763030 0.449472 +vt 0.662670 0.087831 +vt 0.833443 0.207774 +vt 0.795630 0.206399 +vt 0.639341 0.237593 +vt 0.611510 0.276146 +vt 0.744783 0.327369 +vt 0.747761 0.392049 +vt 0.486801 0.140337 +vt 0.502736 0.189221 +vt 0.454509 0.169171 +vt 0.513471 0.154072 +vt 0.496408 0.222087 +vt 0.515249 0.239396 +vt 0.525421 0.202483 +vt 0.479772 0.208969 +vt 0.525237 0.174009 +vt 0.883124 0.418480 +vt 0.855998 0.414593 +vt 0.873856 0.373097 +vt 0.862673 0.470842 +vt 0.837274 0.455346 +vt 0.835143 0.414988 +vt 0.836735 0.380732 +vt 0.872868 0.442582 +vt 0.466878 0.097675 +vt 0.455985 0.137528 +vt 0.499622 0.101112 +vt 0.895900 0.374250 +vt 0.890087 0.335009 +vt 0.870984 0.340420 +vt 0.896040 0.407532 +vt 0.525010 0.285953 +vt 0.537275 0.226482 +vt 0.507137 0.272752 +vt 0.482511 0.270077 +vt 0.818664 0.491352 +vt 0.850143 0.478738 +vt 0.821176 0.427867 +vt 0.610858 0.154722 +vt 0.563964 0.081082 +vt 0.839672 0.282054 +vt 0.578128 0.233361 +vt 0.788378 0.397577 +vt 0.494584 0.059202 +vt 0.441925 0.063170 +vt 0.878372 0.291927 +vt 0.904765 0.301757 +vt 0.552629 0.294068 +vt 0.532881 0.327257 +vt 0.790271 0.471398 +vt 0.800484 0.521446 +vt 0.446194 0.067982 +vt 0.431086 0.131496 +vt 0.906513 0.342316 +vt 0.912981 0.369336 +vt 0.531749 0.321170 +vt 0.513678 0.315340 +vt 0.498610 0.311098 +vt 0.803287 0.517141 +vt 0.840770 0.533423 +vt 0.519727 0.260004 +vt 0.478779 0.121076 +vt 0.829233 0.471520 +vt 0.881037 0.356176 +vt 0.412798 0.096853 +vt 0.412829 0.101481 +vt 0.922967 0.336681 +vt 0.510893 0.344643 +vt 0.509021 0.343328 +vt 0.821724 0.560558 +vt 0.822089 0.556499 +vt 0.425124 0.119531 +vt 0.385244 0.136150 +vt 0.916869 0.355988 +vt 0.944665 0.361840 +vt 0.506450 0.322646 +vt 0.488308 0.371526 +vt 0.831928 0.538303 +vt 0.841600 0.597216 +vt 0.473819 0.210666 +vt 0.418854 0.186932 +vt 0.880657 0.454366 +vt 0.925216 0.422444 +vt 0.468860 0.310922 +vt 0.875211 0.546434 +vt 0.918970 0.440998 +vt 0.925575 0.481920 +vt 0.902561 0.486000 +vt 0.896941 0.443427 +vt 0.883383 0.528908 +vt 0.910084 0.524586 +vt 0.881846 0.486746 +vt 0.918615 0.505815 +vt 0.887461 0.464965 +vt 0.932833 0.399055 +vt 0.913384 0.407004 +vt 0.934728 0.435260 +vt 0.944408 0.469025 +vt 0.863381 0.566968 +vt 0.885323 0.563297 +vt 0.863798 0.532753 +vt 0.905684 0.558359 +vt 0.864124 0.501681 +vt 0.944240 0.368654 +vt 0.954966 0.422268 +vt 0.926555 0.368431 +vt 0.845075 0.592979 +vt 0.867898 0.598015 +vt 0.842547 0.560430 +vt 0.888553 0.602345 +vt 0.965193 0.386940 +vt 0.965377 0.390038 +vt 0.859677 0.623326 +vt 0.869185 0.631885 +vt 0.960307 0.408648 +vt 0.989236 0.406110 +vt 0.878491 0.610715 +vt 0.898281 0.670197 +vt 0.976083 0.473363 +vt 0.935136 0.612290 +vt 0.372877 0.261846 +vt 0.376389 0.191811 +vt 0.461048 0.381657 +vt 0.424681 0.377190 +vt 0.388719 0.140387 +vt 0.365733 0.176867 +vt 0.344128 0.211920 +vt 0.486574 0.366047 +vt 0.463411 0.405150 +vt 0.448408 0.431610 +vt 0.407025 0.166398 +vt 0.382820 0.202659 +vt 0.476477 0.334311 +vt 0.455101 0.366330 +vt 0.491794 0.335460 +vt 0.466611 0.396685 +vt 0.434533 0.164564 +vt 0.427452 0.203914 +vt 0.407442 0.200613 +vt 0.446802 0.345775 +vt 0.462614 0.292369 +vt 0.479025 0.299446 +vt 0.446205 0.247366 +vt 0.422783 0.246750 +vt 0.454062 0.210015 +vt 0.407768 0.231685 +vt 0.462258 0.227551 +vt 0.442411 0.276979 +vt 0.439684 0.325834 +vt 0.433137 0.299007 +vt 0.431105 0.268402 +vt 0.990655 0.568941 +vt 0.963373 0.680418 +vt 1.020321 0.652284 +vt 1.008054 0.447965 +vt 1.034484 0.500005 +vt 0.331412 0.336988 +vt 0.383315 0.451313 +vt 0.335139 0.262725 +vt 0.902550 0.665384 +vt 0.945561 0.701796 +vt 1.002144 0.722411 +vt 0.425317 0.471964 +vt 0.446211 0.426749 +vt 0.410931 0.501758 +vt 0.988105 0.412197 +vt 1.012882 0.424397 +vt 1.038379 0.428486 +vt 0.346931 0.216225 +vt 0.326969 0.251537 +vt 0.306674 0.283894 +vt 0.923234 0.635692 +vt 0.949612 0.676160 +vt 0.893228 0.630835 +vt 0.944096 0.697642 +vt 0.421030 0.447656 +vt 0.433731 0.398357 +vt 0.426013 0.466591 +vt 1.009071 0.444110 +vt 0.981366 0.447413 +vt 0.362307 0.242015 +vt 0.337833 0.284999 +vt 1.119026 0.645535 +vt 1.073562 0.702905 +vt 1.063205 0.457200 +vt 1.096489 0.495430 +vt 0.339273 0.526967 +vt 0.294721 0.336695 +vt 0.288427 0.405997 +vt 0.943157 0.593030 +vt 0.912268 0.594851 +vt 0.970053 0.611910 +vt 0.963612 0.664209 +vt 0.417500 0.360270 +vt 0.415391 0.398637 +vt 0.414252 0.435434 +vt 0.989174 0.479580 +vt 0.971605 0.493970 +vt 0.962383 0.463761 +vt 1.008325 0.461439 +vt 0.364820 0.305499 +vt 0.380918 0.278021 +vt 0.385853 0.241185 +vt 1.146663 0.712727 +vt 1.076798 0.722892 +vt 1.004691 0.716174 +vt 0.371523 0.577019 +vt 0.390379 0.540042 +vt 0.408270 0.497369 +vt 1.063624 0.431204 +vt 1.089093 0.424973 +vt 1.038052 0.434940 +vt 0.267715 0.347171 +vt 0.288935 0.320124 +vt 0.308989 0.288609 +vt 0.183777 0.495430 +vt 0.206314 0.645535 +vt 0.227056 0.554546 +vt 0.284238 0.596430 +vt 0.262651 0.666920 +vt 0.233951 0.712727 +vt 0.160849 0.702905 +vt 0.337858 0.595497 +vt 0.204354 0.439361 +vt 0.239596 0.461832 +vt 0.150493 0.457200 +vt 0.176381 0.424973 +vt 0.252082 0.401558 +vt 0.320946 0.651698 +vt 0.224488 0.396248 +vt 0.963855 0.577209 +vt 0.959093 0.544145 +vt 0.936817 0.557082 +vt 0.923067 0.576550 +vt 0.954202 0.510228 +vt 0.978773 0.528469 +vt 1.001556 0.510744 +vt 0.399642 0.318773 +vt 0.418583 0.324153 +vt 0.388934 0.337410 +vt 0.396769 0.398025 +vt 0.399253 0.276549 +vt 0.379012 0.318837 +vt 0.393787 0.254629 +vt 0.936128 0.524397 +vt 0.975207 0.555084 +vt 0.416511 0.290785 +vt 0.294810 0.676578 +vt 0.230262 0.706879 +vt 0.263792 0.696624 +vt 0.164086 0.722892 +vt 0.351775 0.607890 +vt 0.368251 0.572809 +vt 0.200368 0.415126 +vt 0.150912 0.431204 +vt 0.176759 0.431387 +vt 0.247759 0.377455 +vt 0.269581 0.352479 +vt 1.015251 0.679609 +vt 1.052308 0.685232 +vt 0.393555 0.471248 +vt 0.380569 0.525541 +vt 0.389982 0.536349 +vt 1.036073 0.472342 +vt 1.064614 0.472224 +vt 1.069055 0.452709 +vt 1.063888 0.434178 +vt 0.322045 0.316264 +vt 0.292974 0.340665 +vt 0.316856 0.647128 +vt 0.225799 0.402187 +vt 1.023436 0.630392 +vt 0.987854 0.650405 +vt 1.081260 0.632936 +vt 0.375450 0.435129 +vt 0.395287 0.432891 +vt 0.373041 0.473426 +vt 0.373681 0.510497 +vt 1.033105 0.522065 +vt 1.063461 0.503179 +vt 0.319761 0.353604 +vt 0.338784 0.353613 +vt 0.301066 0.349590 +vt 1.142974 0.706879 +vt 1.127029 0.672004 +vt 0.263805 0.648829 +vt 0.214317 0.672004 +vt 0.281927 0.682268 +vt 0.350785 0.547125 +vt 0.326759 0.585500 +vt 0.346259 0.612192 +vt 0.180297 0.468403 +vt 0.156343 0.452709 +vt 0.209285 0.452692 +vt 0.151176 0.434178 +vt 0.201585 0.417479 +vt 0.280371 0.383266 +vt 0.250851 0.398078 +vt 0.296449 0.618845 +vt 0.233566 0.436538 +vt 1.029073 0.576306 +vt 1.047618 0.605928 +vt 1.002193 0.596620 +vt 0.996477 0.623833 +vt 1.013677 0.544731 +vt 1.051511 0.553164 +vt 1.065564 0.523033 +vt 0.356868 0.394591 +vt 0.383243 0.379132 +vt 0.351943 0.435491 +vt 0.354338 0.473716 +vt 0.335349 0.397184 +vt 0.362542 0.349044 +vt 0.317182 0.388926 +vt 1.047889 0.578710 +vt 0.992528 0.564366 +vt 0.378158 0.356573 +vt 0.335038 0.432001 +vt 0.228691 0.638896 +vt 0.201295 0.624182 +vt 0.168547 0.632936 +vt 0.329528 0.546675 +vt 0.330787 0.510340 +vt 0.200336 0.482368 +vt 0.185307 0.517582 +vt 0.169454 0.495114 +vt 0.151902 0.472224 +vt 0.294973 0.424049 +vt 0.275947 0.419133 +vt 0.257603 0.410106 +vt 0.275810 0.577905 +vt 0.299668 0.553712 +vt 0.270851 0.611088 +vt 0.244665 0.481900 +vt 0.270596 0.454206 +vt 0.224259 0.472619 +vt 0.192043 0.571094 +vt 0.181929 0.601642 +vt 0.213389 0.592512 +vt 0.226304 0.614482 +vt 0.311909 0.467900 +vt 0.310849 0.506078 +vt 0.329207 0.468913 +vt 0.316114 0.532588 +vt 0.215993 0.531738 +vt 0.173374 0.548576 +vt 0.215898 0.502176 +vt 0.152852 0.523033 +vt 0.318356 0.420778 +vt 0.294029 0.459078 +vt 0.154502 0.578644 +vt 0.218885 0.559294 +vt 0.323573 0.450375 +vt 0.292730 0.493163 +vt 0.258597 0.530649 +vt 0.278864 0.546234 +vt 0.244265 0.573574 +vt 0.249515 0.600590 +vt 0.268136 0.491207 +vt 0.235424 0.513720 +vt 0.276260 0.513089 +vt 0.239618 0.546121 +vt 1.067214 0.578644 +vt 0.542951 0.198214 +vt 0.533776 0.140417 +vt 0.150749 0.503179 +vt 0.796380 0.309665 +vt 0.734856 0.252555 +vn -0.9425 -0.2767 -0.1875 +vn -0.9425 -0.2767 0.1875 +vn -0.9425 0.2767 -0.1875 +vn -0.9425 0.2767 0.1875 +vn -0.6494 -0.7494 0.1292 +vn -0.6494 -0.7494 -0.1292 +vn -0.6494 0.7494 -0.1292 +vn -0.6494 0.7494 0.1292 +vn -0.7990 -0.2767 -0.5339 +vn -0.7990 0.2767 -0.5339 +vn -0.7990 -0.2768 -0.5339 +vn -0.7990 -0.2767 0.5339 +vn -0.7990 0.2767 0.5339 +vn -0.5504 -0.7500 -0.3669 +vn -0.5505 -0.7494 -0.3678 +vn -0.5505 -0.7494 0.3678 +vn -0.5505 0.7494 -0.3678 +vn -0.5505 0.7494 0.3678 +vn -0.1423 -0.9894 -0.0283 +vn -0.1423 -0.9894 0.0283 +vn -0.1456 -0.9888 0.0335 +vn -0.1423 0.9894 -0.0283 +vn -0.1423 0.9894 0.0283 +vn -0.1218 -0.9893 -0.0805 +vn -0.1427 -0.9893 -0.0298 +vn -0.1214 -0.9894 -0.0797 +vn -0.5505 -0.7499 -0.3668 +vn -0.1203 -0.9896 0.0782 +vn -0.1481 -0.9886 0.0257 +vn -0.1206 -0.9894 0.0806 +vn -0.1206 0.9894 -0.0806 +vn -0.1206 0.9894 0.0806 +vn -0.5446 0.7527 0.3699 +vn -0.5339 -0.2767 -0.7990 +vn -0.5339 0.2767 -0.7990 +vn -0.3678 -0.7494 -0.5505 +vn -0.3678 -0.7494 0.5505 +vn -0.5339 -0.2767 0.7990 +vn -0.3678 0.7494 -0.5505 +vn -0.3678 0.7494 0.5505 +vn -0.5339 0.2767 0.7990 +vn 0.4140 -0.9065 -0.0824 +vn 0.4140 -0.9065 0.0824 +vn -0.1422 -0.9894 0.0283 +vn 0.4140 0.9065 0.0824 +vn 0.4140 0.9065 -0.0824 +vn -0.1422 0.9894 -0.0283 +vn 0.4140 0.9065 0.0823 +vn 0.3510 -0.9065 0.2345 +vn -0.1206 -0.9894 -0.0806 +vn 0.4140 -0.9065 -0.0823 +vn 0.3559 -0.9055 -0.2313 +vn 0.3510 0.9065 0.2345 +vn 0.3510 0.9065 -0.2345 +vn 0.4140 0.9065 -0.0823 +vn -0.1422 0.9894 0.0283 +vn -0.0806 -0.9894 -0.1206 +vn -0.0806 -0.9894 0.1206 +vn -0.0806 0.9894 -0.1206 +vn -0.0806 0.9894 0.1206 +vn -0.5494 0.7542 0.3597 +vn -0.3528 0.7621 0.5429 +vn 0.8297 -0.5332 0.1650 +vn 0.4140 -0.9065 0.0823 +vn 0.8297 -0.5332 -0.1650 +vn 0.8297 0.5332 0.1650 +vn 0.8297 0.5332 -0.1650 +vn 0.2345 -0.9065 0.3510 +vn 0.3510 -0.9065 -0.2345 +vn 0.2345 -0.9065 -0.3510 +vn 0.2345 0.9065 0.3510 +vn 0.2345 0.9065 -0.3510 +vn 0.7034 -0.5332 0.4700 +vn 0.7034 -0.5332 -0.4700 +vn 0.7034 0.5332 0.4700 +vn 0.7034 0.5332 -0.4700 +vn -0.1875 -0.2767 -0.9425 +vn -0.1875 0.2767 -0.9425 +vn -0.5412 0.2686 -0.7969 +vn -0.1875 -0.2767 0.9425 +vn -0.1875 0.2767 0.9425 +vn -0.5341 0.2765 0.7989 +vn -0.1292 -0.7494 -0.6494 +vn -0.1292 -0.7494 0.6494 +vn -0.1292 0.7494 -0.6494 +vn -0.1292 0.7494 0.6494 +vn 0.9808 0.0000 -0.1951 +vn 0.9808 -0.0000 0.1951 +vn 0.8315 -0.0000 0.5556 +vn 0.8315 0.0000 -0.5556 +vn 0.8281 -0.0043 -0.5605 +vn 0.6994 0.5354 -0.4734 +vn 0.4700 -0.5332 0.7034 +vn 0.4700 -0.5332 -0.7034 +vn 0.4700 0.5332 0.7034 +vn 0.6998 0.5366 -0.4715 +vn 0.4700 0.5332 -0.7034 +vn -0.0283 -0.9894 -0.1423 +vn -0.0283 -0.9894 0.1423 +vn -0.0283 0.9894 -0.1423 +vn -0.0283 0.9894 0.1423 +vn -0.3575 0.7746 0.5217 +vn 0.5556 -0.0000 0.8315 +vn 0.5555 0.0000 -0.8315 +vn 0.5556 0.0000 -0.8315 +vn 0.0824 -0.9065 0.4140 +vn 0.0824 -0.9065 -0.4140 +vn 0.0824 0.9065 0.4140 +vn -0.0283 0.9894 -0.1422 +vn 0.0824 0.9065 -0.4140 +vn 0.1650 -0.5332 0.8297 +vn 0.0823 -0.9065 0.4140 +vn 0.1650 -0.5332 -0.8297 +vn 0.1650 0.5332 0.8297 +vn 0.1651 0.5332 -0.8297 +vn 0.1650 0.5332 -0.8297 +vn 0.1951 -0.0000 0.9808 +vn 0.1951 0.0000 -0.9808 +vn 0.1875 -0.2767 0.9425 +vn 0.1829 0.2826 0.9416 +vn 0.1875 0.2767 0.9425 +vn 0.1292 -0.7494 0.6494 +vn 0.1245 0.7472 0.6528 +vn 0.1802 0.2798 0.9430 +vn 0.1248 0.7471 0.6529 +vn 0.0283 -0.9894 0.1423 +vn -0.0253 -0.9898 0.1403 +vn 0.0283 0.9894 0.1423 +vn 0.1292 0.7494 0.6494 +vn 0.0374 0.9882 0.1483 +vn -0.0824 -0.9065 -0.4140 +vn 0.0741 -0.9047 -0.4197 +vn -0.0248 -0.9897 0.1407 +vn -0.0824 0.9065 -0.4140 +vn -0.0283 0.9894 0.1422 +vn -0.1650 -0.5332 -0.8297 +vn -0.1650 0.5332 -0.8297 +vn -0.1951 0.0000 -0.9808 +vn -0.1951 -0.0000 0.9808 +vn -0.1650 -0.5332 0.8297 +vn -0.1651 0.5332 0.8297 +vn -0.1650 0.5332 0.8297 +vn -0.0824 -0.9065 0.4140 +vn -0.0824 0.9065 0.4140 +vn 0.0283 -0.9894 -0.1423 +vn 0.0283 0.9894 -0.1423 +vn 0.1292 -0.7494 -0.6494 +vn 0.1292 0.7494 -0.6494 +vn 0.1875 -0.2767 -0.9425 +vn 0.1875 0.2767 -0.9425 +vn -0.5556 0.0000 -0.8315 +vn -0.4700 0.5332 -0.7034 +vn -0.4700 -0.5332 -0.7034 +vn -0.5556 -0.0000 0.8315 +vn -0.4700 0.5332 0.7034 +vn -0.4700 -0.5332 0.7034 +vn -0.2345 0.9065 -0.3510 +vn -0.0823 0.9065 -0.4140 +vn -0.2345 0.9065 0.3510 +vn -0.0823 0.9065 0.4140 +vn -0.2345 -0.9065 -0.3510 +vn -0.2345 -0.9065 0.3510 +vn 0.0806 0.9894 0.1206 +vn 0.0283 0.9894 0.1422 +vn 0.0806 0.9894 -0.1206 +vn 0.0806 -0.9894 0.1206 +vn 0.0806 -0.9894 -0.1206 +vn -0.8315 0.0000 -0.5556 +vn -0.7034 0.5332 -0.4700 +vn -0.7034 -0.5332 -0.4700 +vn -0.8343 0.0037 -0.5513 +vn -0.7045 -0.5357 -0.4655 +vn -0.8315 -0.0000 0.5556 +vn -0.7034 0.5332 0.4700 +vn -0.7034 -0.5332 0.4700 +vn 0.3678 0.7494 0.5505 +vn 0.0229 0.9882 0.1513 +vn 0.3678 0.7494 -0.5505 +vn 0.3678 -0.7494 0.5505 +vn 0.3678 -0.7494 -0.5505 +vn -0.3510 0.9065 -0.2345 +vn -0.3510 0.9065 0.2345 +vn -0.3510 -0.9065 -0.2345 +vn -0.3510 -0.9065 0.2345 +vn -0.9808 -0.0000 -0.1951 +vn -0.8297 0.5332 -0.1650 +vn -0.9808 -0.0000 0.1951 +vn -0.8297 0.5332 0.1650 +vn -0.8297 -0.5332 -0.1650 +vn -0.7038 -0.5362 -0.4659 +vn -0.8297 -0.5332 0.1650 +vn 0.5339 0.2767 0.7990 +vn 0.5339 -0.2767 0.7990 +vn 0.5339 0.2767 -0.7990 +vn 0.5339 -0.2767 -0.7990 +vn -0.4140 0.9065 -0.0824 +vn -0.4140 0.9065 -0.0823 +vn -0.4140 0.9065 0.0824 +vn -0.4140 -0.9065 -0.0824 +vn -0.4144 -0.9063 -0.0831 +vn -0.4140 -0.9065 0.0823 +vn -0.4140 -0.9065 0.0824 +vn 0.1206 0.9894 0.0806 +vn 0.1206 0.9894 -0.0806 +vn 0.1206 -0.9894 0.0806 +vn 0.1206 -0.9894 -0.0806 +vn 0.5505 0.7494 0.3678 +vn 0.5505 0.7494 -0.3678 +vn 0.5505 -0.7494 0.3678 +vn 0.5505 -0.7494 -0.3678 +vn 0.1423 0.9894 0.0283 +vn 0.1423 0.9894 -0.0283 +vn 0.1203 -0.9895 0.0797 +vn 0.1414 -0.9895 0.0281 +vn 0.1209 -0.9895 0.0797 +vn -0.4138 -0.9065 -0.0835 +vn 0.1421 -0.9894 0.0296 +vn 0.1423 -0.9894 -0.0283 +vn 0.1423 -0.9894 0.0283 +vn 0.7990 0.2767 0.5339 +vn 0.7990 -0.2767 0.5339 +vn 0.7990 0.2767 -0.5339 +vn 0.7990 -0.2767 -0.5339 +vn 0.6494 0.7494 0.1292 +vn 0.6494 0.7494 -0.1292 +vn 0.6494 -0.7494 0.1292 +vn 0.6494 -0.7494 -0.1292 +vn 0.9425 0.2767 0.1875 +vn 0.9425 0.2767 -0.1875 +vn 0.9425 -0.2767 0.1875 +vn 0.9425 -0.2767 -0.1875 +vn 0.9454 0.2709 -0.1811 +vn -0.5337 0.2766 0.7991 +vn -0.5341 0.2764 0.7990 +vn -0.1487 -0.9884 0.0299 +vn -0.5444 0.7557 0.3641 +vn 0.0196 0.9885 0.1500 +vn -0.5281 0.2636 -0.8072 +vn -0.9425 -0.2768 -0.1875 +vn -0.3679 0.7494 -0.5505 +vn 0.0387 0.9884 0.1469 +vn 0.9412 0.2752 -0.1960 +vn 0.9454 0.2695 -0.1834 +usemtl None +s off +f 1/1/1 2/2/1 3/3/1 +f 4/4/2 2/2/2 1/1/2 +f 5/5/3 6/6/3 2/2/3 +f 5/5/4 2/2/4 7/7/4 +f 6/6/1 3/3/1 2/2/1 +f 7/7/2 2/2/2 4/4/2 +f 8/8/5 1/1/5 9/9/5 +f 1/1/6 10/10/6 9/9/6 +f 11/11/2 1/1/2 12/12/2 +f 12/12/5 1/1/5 8/8/5 +f 11/11/2 4/4/2 1/1/2 +f 13/13/1 1/1/1 3/3/1 +f 1/1/6 13/13/6 10/10/6 +f 14/14/7 5/5/7 15/15/7 +f 5/5/8 16/16/8 15/15/8 +f 17/17/7 5/5/7 14/14/7 +f 5/5/3 17/17/3 6/6/3 +f 7/7/4 16/16/4 5/5/4 +f 18/18/1 19/19/1 20/20/1 +f 19/19/9 21/21/9 20/20/9 +f 22/22/3 23/23/3 19/19/3 +f 24/24/10 19/19/10 23/23/10 +f 25/25/1 19/19/1 18/18/1 +f 25/25/3 22/22/3 19/19/3 +f 26/26/9 21/21/9 19/19/9 +f 19/19/11 27/27/11 26/26/11 +f 24/24/10 27/27/10 19/19/10 +f 28/28/2 29/29/2 30/30/2 +f 31/31/12 29/29/12 28/28/12 +f 32/32/13 33/33/13 29/29/13 +f 34/34/4 29/29/4 33/33/4 +f 29/29/2 35/35/2 30/30/2 +f 35/35/4 29/29/4 34/34/4 +f 31/31/12 32/32/12 29/29/12 +f 20/20/14 36/36/14 37/37/14 +f 38/38/6 20/20/6 37/37/6 +f 39/39/1 18/18/1 20/20/1 +f 40/40/15 36/36/15 20/20/15 +f 21/21/9 40/40/9 20/20/9 +f 39/39/6 20/20/6 38/38/6 +f 41/41/16 28/28/16 42/42/16 +f 42/42/5 28/28/5 43/43/5 +f 28/28/2 30/30/2 12/12/2 +f 28/28/5 12/12/5 43/43/5 +f 44/44/16 28/28/16 41/41/16 +f 28/28/12 44/44/12 31/31/12 +f 45/45/7 23/23/7 46/46/7 +f 47/47/17 23/23/17 45/45/17 +f 46/46/7 23/23/7 48/48/7 +f 22/22/3 48/48/3 23/23/3 +f 49/49/10 24/24/10 23/23/10 +f 47/47/17 49/49/17 23/23/17 +f 33/33/8 50/50/8 51/51/8 +f 50/50/18 33/33/18 52/52/18 +f 53/53/13 54/54/13 33/33/13 +f 33/33/13 32/32/13 53/53/13 +f 55/55/8 33/33/8 51/51/8 +f 33/33/4 55/55/4 34/34/4 +f 52/52/18 33/33/18 54/54/18 +f 56/56/19 9/9/19 57/57/19 +f 56/56/20 58/58/20 9/9/20 +f 10/10/6 57/57/6 9/9/6 +f 9/9/21 58/58/21 59/59/21 +f 59/59/5 8/8/5 9/9/5 +f 15/15/22 60/60/22 61/61/22 +f 60/60/23 15/15/23 62/62/23 +f 61/61/22 63/63/22 15/15/22 +f 15/15/7 63/63/7 14/14/7 +f 15/15/8 16/16/8 62/62/8 +f 64/64/24 37/37/24 65/65/24 +f 64/64/25 57/57/25 37/37/25 +f 37/37/26 66/66/26 65/65/26 +f 57/57/6 38/38/6 37/37/6 +f 37/37/27 36/36/27 66/66/27 +f 42/42/20 67/67/20 68/68/20 +f 69/69/28 42/42/28 68/68/28 +f 41/41/16 42/42/16 70/70/16 +f 42/42/29 59/59/29 67/67/29 +f 70/70/30 42/42/30 69/69/30 +f 59/59/5 42/42/5 43/43/5 +f 71/71/31 45/45/31 72/72/31 +f 45/45/22 73/73/22 72/72/22 +f 47/47/17 45/45/17 71/71/17 +f 46/46/7 63/63/7 45/45/7 +f 45/45/22 63/63/22 73/73/22 +f 74/74/32 50/50/32 75/75/32 +f 74/74/23 76/76/23 50/50/23 +f 75/75/32 50/50/32 77/77/32 +f 77/77/33 50/50/33 52/52/33 +f 76/76/23 62/62/23 50/50/23 +f 51/51/8 50/50/8 62/62/8 +f 78/78/34 79/79/34 80/80/34 +f 80/80/9 81/81/9 78/78/9 +f 82/82/35 78/78/35 83/83/35 +f 83/83/10 78/78/10 84/84/10 +f 85/85/9 78/78/9 86/86/9 +f 86/86/9 78/78/9 81/81/9 +f 84/84/10 78/78/10 85/85/10 +f 87/87/35 78/78/35 82/82/35 +f 78/78/34 87/87/34 79/79/34 +f 88/88/36 80/80/36 89/89/36 +f 90/90/15 80/80/15 88/88/15 +f 79/79/34 91/91/34 80/80/34 +f 80/80/36 91/91/36 89/89/36 +f 90/90/15 81/81/15 80/80/15 +f 92/92/16 93/93/16 94/94/16 +f 92/92/37 95/95/37 93/93/37 +f 93/93/16 44/44/16 94/94/16 +f 95/95/38 96/96/38 93/93/38 +f 93/93/12 96/96/12 97/97/12 +f 97/97/12 44/44/12 93/93/12 +f 98/98/17 83/83/17 99/99/17 +f 98/98/39 100/100/39 83/83/39 +f 99/99/17 83/83/17 49/49/17 +f 83/83/35 101/101/35 82/82/35 +f 100/100/39 101/101/39 83/83/39 +f 83/83/10 84/84/10 49/49/10 +f 102/102/18 103/103/18 104/104/18 +f 102/102/40 104/104/40 105/105/40 +f 104/104/41 96/96/41 106/106/41 +f 106/106/40 105/105/40 104/104/40 +f 54/54/18 104/104/18 103/103/18 +f 104/104/13 107/107/13 96/96/13 +f 104/104/13 54/54/13 107/107/13 +f 108/108/42 109/109/42 56/56/42 +f 56/56/43 110/110/43 108/108/43 +f 67/67/44 58/58/44 56/56/44 +f 67/67/20 56/56/20 111/111/20 +f 110/110/19 56/56/19 57/57/19 +f 109/109/42 111/111/42 56/56/42 +f 112/112/45 113/113/45 60/60/45 +f 60/60/46 114/114/46 112/112/46 +f 60/60/47 115/115/47 61/61/47 +f 113/113/48 115/115/48 60/60/48 +f 60/60/46 116/116/46 114/114/46 +f 60/60/23 62/62/23 116/116/23 +f 117/117/49 64/64/49 118/118/49 +f 117/117/43 110/110/43 64/64/43 +f 65/65/50 118/118/50 64/64/50 +f 64/64/19 110/110/19 57/57/19 +f 119/119/51 68/68/51 109/109/51 +f 68/68/52 119/119/52 69/69/52 +f 67/67/20 111/111/20 68/68/20 +f 109/109/42 68/68/42 111/111/42 +f 120/120/48 72/72/48 113/113/48 +f 72/72/53 120/120/53 121/121/53 +f 121/121/31 71/71/31 72/72/31 +f 113/113/48 72/72/48 115/115/48 +f 73/73/22 115/115/22 72/72/22 +f 122/122/54 74/74/54 123/123/54 +f 114/114/55 74/74/55 122/122/55 +f 74/74/32 75/75/32 124/124/32 +f 116/116/56 76/76/56 74/74/56 +f 123/123/54 74/74/54 124/124/54 +f 116/116/55 74/74/55 114/114/55 +f 125/125/50 65/65/50 88/88/50 +f 88/88/57 126/126/57 125/125/57 +f 65/65/50 66/66/50 88/88/50 +f 127/127/36 88/88/36 89/89/36 +f 66/66/15 90/90/15 88/88/15 +f 126/126/57 88/88/57 127/127/57 +f 128/128/58 129/129/58 92/92/58 +f 92/92/30 69/69/30 128/128/30 +f 94/94/16 70/70/16 92/92/16 +f 92/92/30 70/70/30 69/69/30 +f 92/92/37 129/129/37 95/95/37 +f 130/130/59 98/98/59 131/131/59 +f 131/131/31 98/98/31 71/71/31 +f 99/99/17 71/71/17 98/98/17 +f 132/132/59 98/98/59 130/130/59 +f 100/100/39 98/98/39 132/132/39 +f 133/133/32 75/75/32 102/102/32 +f 102/102/60 134/134/60 133/133/60 +f 75/75/32 77/77/32 102/102/32 +f 102/102/61 77/77/61 103/103/61 +f 105/105/62 135/135/62 102/102/62 +f 102/102/60 135/135/60 134/134/60 +f 136/136/63 108/108/63 117/117/63 +f 117/117/64 108/108/64 110/110/64 +f 119/119/42 109/109/42 108/108/42 +f 119/119/65 108/108/65 137/137/65 +f 138/138/63 108/108/63 136/136/63 +f 137/137/65 108/108/65 138/138/65 +f 120/120/45 113/113/45 112/112/45 +f 112/112/66 139/139/66 120/120/66 +f 112/112/46 114/114/46 122/122/46 +f 140/140/67 112/112/67 122/122/67 +f 112/112/66 141/141/66 139/139/66 +f 141/141/67 112/112/67 140/140/67 +f 125/125/68 142/142/68 143/143/68 +f 125/125/49 143/143/49 118/118/49 +f 65/65/50 125/125/50 118/118/50 +f 125/125/68 126/126/68 142/142/68 +f 69/69/69 144/144/69 128/128/69 +f 145/145/70 128/128/70 144/144/70 +f 146/146/58 129/129/58 128/128/58 +f 146/146/70 128/128/70 145/145/70 +f 147/147/71 148/148/71 131/131/71 +f 131/131/53 121/121/53 147/147/53 +f 130/130/59 131/131/59 148/148/59 +f 131/131/31 71/71/31 121/121/31 +f 133/133/72 149/149/72 150/150/72 +f 150/150/54 123/123/54 133/133/54 +f 124/124/32 75/75/32 133/133/32 +f 149/149/72 133/133/72 134/134/72 +f 123/123/54 124/124/54 133/133/54 +f 117/117/73 143/143/73 151/151/73 +f 151/151/63 136/136/63 117/117/63 +f 117/117/49 118/118/49 143/143/49 +f 152/152/74 119/119/74 153/153/74 +f 153/153/65 119/119/65 137/137/65 +f 144/144/74 119/119/74 152/152/74 +f 69/69/69 119/119/69 144/144/69 +f 120/120/75 154/154/75 155/155/75 +f 120/120/66 139/139/66 154/154/66 +f 155/155/75 147/147/75 120/120/75 +f 147/147/53 121/121/53 120/120/53 +f 156/156/76 122/122/76 157/157/76 +f 156/156/67 140/140/67 122/122/67 +f 122/122/54 123/123/54 150/150/54 +f 157/157/76 122/122/76 150/150/76 +f 158/158/77 159/159/77 160/160/77 +f 161/161/34 159/159/34 158/158/34 +f 162/162/78 159/159/78 163/163/78 +f 163/163/35 159/159/35 164/164/35 +f 160/160/77 159/159/77 165/165/77 +f 165/165/78 159/159/78 162/162/78 +f 164/164/79 159/159/79 166/166/79 +f 161/161/34 166/166/34 159/159/34 +f 167/167/80 168/168/80 169/169/80 +f 169/169/38 168/168/38 95/95/38 +f 170/170/81 171/171/81 168/168/81 +f 172/172/41 168/168/41 171/171/41 +f 95/95/38 168/168/38 173/173/38 +f 173/173/82 168/168/82 172/172/82 +f 174/174/80 168/168/80 167/167/80 +f 168/168/81 174/174/81 170/170/81 +f 175/175/83 158/158/83 176/176/83 +f 177/177/36 158/158/36 175/175/36 +f 160/160/83 176/176/83 158/158/83 +f 91/91/36 158/158/36 177/177/36 +f 158/158/34 91/91/34 161/161/34 +f 178/178/84 169/169/84 179/179/84 +f 179/179/37 169/169/37 180/180/37 +f 169/169/84 178/178/84 181/181/84 +f 169/169/80 181/181/80 167/167/80 +f 180/180/37 169/169/37 95/95/37 +f 182/182/39 163/163/39 183/183/39 +f 184/184/85 163/163/85 182/182/85 +f 163/163/78 185/185/78 162/162/78 +f 163/163/35 164/164/35 183/183/35 +f 184/184/85 185/185/85 163/163/85 +f 186/186/86 171/171/86 187/187/86 +f 188/188/40 171/171/40 186/186/40 +f 170/170/81 187/187/81 171/171/81 +f 172/172/41 171/171/41 188/188/41 +f 153/153/87 138/138/87 141/141/87 +f 141/141/88 138/138/88 154/154/88 +f 154/154/88 138/138/88 151/151/88 +f 138/138/63 136/136/63 151/151/63 +f 153/153/65 137/137/65 138/138/65 +f 153/153/87 141/141/87 156/156/87 +f 139/139/66 141/141/66 154/154/66 +f 156/156/67 141/141/67 140/140/67 +f 154/154/89 151/151/89 189/189/89 +f 151/151/73 143/143/73 190/190/73 +f 151/151/89 190/190/89 189/189/89 +f 191/191/90 153/153/90 156/156/90 +f 191/191/74 152/152/74 153/153/74 +f 155/155/75 154/154/75 192/192/75 +f 192/192/89 154/154/89 189/189/89 +f 193/193/91 191/191/91 156/156/91 +f 156/156/92 157/157/92 193/193/92 +f 143/143/93 194/194/93 190/190/93 +f 195/195/68 143/143/68 142/142/68 +f 143/143/93 195/195/93 194/194/93 +f 144/144/74 152/152/74 191/191/74 +f 191/191/94 196/196/94 144/144/94 +f 196/196/94 197/197/94 144/144/94 +f 145/145/70 144/144/70 197/197/70 +f 192/192/95 198/198/95 147/147/95 +f 192/192/75 147/147/75 155/155/75 +f 198/198/95 199/199/95 147/147/95 +f 147/147/71 199/199/71 148/148/71 +f 193/193/96 157/157/96 150/150/96 +f 150/150/97 200/200/97 193/193/97 +f 149/149/72 201/201/72 150/150/72 +f 150/150/97 201/201/97 200/200/97 +f 127/127/57 175/175/57 202/202/57 +f 202/202/98 175/175/98 203/203/98 +f 176/176/83 203/203/83 175/175/83 +f 175/175/36 127/127/36 177/177/36 +f 146/146/99 204/204/99 179/179/99 +f 146/146/58 179/179/58 129/129/58 +f 204/204/99 205/205/99 179/179/99 +f 179/179/84 205/205/84 178/178/84 +f 129/129/37 179/179/37 180/180/37 +f 182/182/59 130/130/59 206/206/59 +f 207/207/100 182/182/100 206/206/100 +f 182/182/59 132/132/59 130/130/59 +f 183/183/39 132/132/39 182/182/39 +f 208/208/85 184/184/85 182/182/85 +f 208/208/100 182/182/100 207/207/100 +f 209/209/101 186/186/101 210/210/101 +f 134/134/60 186/186/60 209/209/60 +f 188/188/40 186/186/40 105/105/40 +f 186/186/102 135/135/102 105/105/102 +f 186/186/86 187/187/86 210/210/86 +f 135/135/60 186/186/60 134/134/60 +f 211/211/103 192/192/103 190/190/103 +f 189/189/89 190/190/89 192/192/89 +f 211/211/103 190/190/103 212/212/103 +f 190/190/93 194/194/93 212/212/93 +f 213/213/104 191/191/104 193/193/104 +f 214/214/105 191/191/105 213/213/105 +f 214/214/94 196/196/94 191/191/94 +f 211/211/95 198/198/95 192/192/95 +f 193/193/97 200/200/97 213/213/97 +f 195/195/106 202/202/106 215/215/106 +f 195/195/68 142/142/68 202/202/68 +f 215/215/106 202/202/106 216/216/106 +f 126/126/68 202/202/68 142/142/68 +f 127/127/57 202/202/57 126/126/57 +f 202/202/98 203/203/98 216/216/98 +f 217/217/107 146/146/107 197/197/107 +f 197/197/70 146/146/70 145/145/70 +f 146/146/99 217/217/99 204/204/99 +f 218/218/108 206/206/108 199/199/108 +f 206/206/71 148/148/71 199/199/71 +f 130/130/59 148/148/59 206/206/59 +f 219/219/108 206/206/108 218/218/108 +f 207/207/109 206/206/109 219/219/109 +f 201/201/110 209/209/110 220/220/110 +f 201/201/72 149/149/72 209/209/72 +f 220/220/110 209/209/110 221/221/110 +f 149/149/72 134/134/72 209/209/72 +f 221/221/101 209/209/101 210/210/101 +f 194/194/93 195/195/93 212/212/93 +f 212/212/111 195/195/111 222/222/111 +f 195/195/112 215/215/112 223/223/112 +f 222/222/111 195/195/111 223/223/111 +f 224/224/113 197/197/113 214/214/113 +f 214/214/94 197/197/94 196/196/94 +f 225/225/113 197/197/113 224/224/113 +f 197/197/107 225/225/107 217/217/107 +f 211/211/95 199/199/95 198/198/95 +f 226/226/114 199/199/114 211/211/114 +f 227/227/108 218/218/108 199/199/108 +f 226/226/114 227/227/114 199/199/114 +f 213/213/115 201/201/115 228/228/115 +f 200/200/97 201/201/97 213/213/97 +f 201/201/110 220/220/110 229/229/110 +f 228/228/116 201/201/116 229/229/116 +f 211/211/117 212/212/117 230/230/117 +f 231/231/111 212/212/111 222/222/111 +f 230/230/117 212/212/117 231/231/117 +f 232/232/118 214/214/118 213/213/118 +f 224/224/113 214/214/113 233/233/113 +f 233/233/118 214/214/118 232/232/118 +f 226/226/114 211/211/114 234/234/114 +f 211/211/117 230/230/117 234/234/117 +f 213/213/116 228/228/116 235/235/116 +f 232/232/118 213/213/118 235/235/118 +f 236/236/119 237/237/119 238/238/119 +f 236/236/80 238/238/80 239/239/80 +f 240/240/120 238/238/120 241/241/120 +f 242/242/81 238/238/81 240/240/81 +f 241/241/121 238/238/121 243/243/121 +f 243/243/119 238/238/119 237/237/119 +f 239/239/80 238/238/80 244/244/80 +f 238/238/81 242/242/81 244/244/81 +f 245/245/84 236/236/84 246/246/84 +f 247/247/122 236/236/122 245/245/122 +f 236/236/119 248/248/119 237/237/119 +f 248/248/122 236/236/122 247/247/122 +f 181/181/84 246/246/84 236/236/84 +f 236/236/80 239/239/80 181/181/80 +f 249/249/123 240/240/123 250/250/123 +f 251/251/86 240/240/86 249/249/86 +f 241/241/124 252/252/124 240/240/124 +f 253/253/81 242/242/81 240/240/81 +f 251/251/86 253/253/86 240/240/86 +f 240/240/125 252/252/125 250/250/125 +f 254/254/126 255/255/126 245/245/126 +f 254/254/127 245/245/127 256/256/127 +f 245/245/84 246/246/84 205/205/84 +f 245/245/99 205/205/99 256/256/99 +f 255/255/122 247/247/122 245/245/122 +f 257/257/128 249/249/128 258/258/128 +f 259/259/101 249/249/101 257/257/101 +f 210/210/86 251/251/86 249/249/86 +f 210/210/101 249/249/101 259/259/101 +f 249/249/129 250/250/129 260/260/129 +f 258/258/130 249/249/130 260/260/130 +f 261/261/131 254/254/131 225/225/131 +f 225/225/132 254/254/132 217/217/132 +f 261/261/131 262/262/131 254/254/131 +f 255/255/126 254/254/126 262/262/126 +f 254/254/133 256/256/133 217/217/133 +f 257/257/110 229/229/110 220/220/110 +f 229/229/134 257/257/134 263/263/134 +f 220/220/110 221/221/110 257/257/110 +f 263/263/134 257/257/134 264/264/134 +f 257/257/135 221/221/135 259/259/135 +f 264/264/128 257/257/128 258/258/128 +f 233/233/113 225/225/113 224/224/113 +f 265/265/136 225/225/136 233/233/136 +f 261/261/131 225/225/131 266/266/131 +f 265/265/136 266/266/136 225/225/136 +f 235/235/137 229/229/137 267/267/137 +f 235/235/116 228/228/116 229/229/116 +f 267/267/137 229/229/137 268/268/137 +f 263/263/134 268/268/134 229/229/134 +f 269/269/138 233/233/138 235/235/138 +f 235/235/118 233/233/118 232/232/118 +f 265/265/136 233/233/136 269/269/136 +f 235/235/138 270/270/138 269/269/138 +f 235/235/137 267/267/137 270/270/137 +f 234/234/139 231/231/139 271/271/139 +f 234/234/117 230/230/117 231/231/117 +f 272/272/140 231/231/140 223/223/140 +f 231/231/111 222/222/111 223/223/111 +f 271/271/140 231/231/140 272/272/140 +f 227/227/141 234/234/141 273/273/141 +f 227/227/114 226/226/114 234/234/114 +f 274/274/139 234/234/139 271/271/139 +f 273/273/142 234/234/142 274/274/142 +f 223/223/106 215/215/106 275/275/106 +f 275/275/143 276/276/143 223/223/143 +f 272/272/140 223/223/140 277/277/140 +f 223/223/143 276/276/143 277/277/143 +f 278/278/108 218/218/108 227/227/108 +f 279/279/144 278/278/144 227/227/144 +f 227/227/142 273/273/142 280/280/142 +f 279/279/144 227/227/144 280/280/144 +f 275/275/145 281/281/145 282/282/145 +f 275/275/98 203/203/98 281/281/98 +f 276/276/145 275/275/145 282/282/145 +f 215/215/106 216/216/106 275/275/106 +f 216/216/98 203/203/98 275/275/98 +f 283/283/146 278/278/146 284/284/146 +f 285/285/100 278/278/100 283/283/100 +f 286/286/146 284/284/146 278/278/146 +f 278/278/108 219/219/108 218/218/108 +f 286/286/144 278/278/144 279/279/144 +f 285/285/109 219/219/109 278/278/109 +f 287/287/83 288/288/83 281/281/83 +f 289/289/147 281/281/147 288/288/147 +f 282/282/147 281/281/147 289/289/147 +f 203/203/83 287/287/83 281/281/83 +f 283/283/148 290/290/148 291/291/148 +f 292/292/85 283/283/85 291/291/85 +f 290/290/148 283/283/148 284/284/148 +f 208/208/85 283/283/85 292/292/85 +f 208/208/100 285/285/100 283/283/100 +f 293/293/149 294/294/149 288/288/149 +f 293/293/77 288/288/77 295/295/77 +f 288/288/83 287/287/83 160/160/83 +f 295/295/77 288/288/77 160/160/77 +f 294/294/149 296/296/149 288/288/149 +f 296/296/147 289/289/147 288/288/147 +f 297/297/78 291/291/78 293/293/78 +f 298/298/150 293/293/150 291/291/150 +f 291/291/150 299/299/150 300/300/150 +f 300/300/150 298/298/150 291/291/150 +f 290/290/148 299/299/148 291/291/148 +f 291/291/85 185/185/85 292/292/85 +f 185/185/78 291/291/78 297/297/78 +f 293/293/149 301/301/149 294/294/149 +f 293/293/77 295/295/77 297/297/77 +f 298/298/150 301/301/150 293/293/150 +f 269/269/151 270/270/151 302/302/151 +f 270/270/137 267/267/137 268/268/137 +f 270/270/152 268/268/152 303/303/152 +f 304/304/152 270/270/152 303/303/152 +f 302/302/151 270/270/151 304/304/151 +f 266/266/136 265/265/136 269/269/136 +f 266/266/153 269/269/153 305/305/153 +f 305/305/153 269/269/153 306/306/153 +f 306/306/151 269/269/151 302/302/151 +f 307/307/154 274/274/154 271/271/154 +f 280/280/155 274/274/155 308/308/155 +f 273/273/142 274/274/142 280/280/142 +f 308/308/154 274/274/154 307/307/154 +f 271/271/140 272/272/140 277/277/140 +f 271/271/156 277/277/156 309/309/156 +f 271/271/156 309/309/156 307/307/156 +f 268/268/157 310/310/157 311/311/157 +f 310/310/134 268/268/134 264/264/134 +f 303/303/152 268/268/152 312/312/152 +f 312/312/157 268/268/157 311/311/157 +f 264/264/158 268/268/158 263/263/158 +f 313/313/159 314/314/159 280/280/159 +f 314/314/160 279/279/160 280/280/160 +f 280/280/155 308/308/155 315/315/155 +f 280/280/159 315/315/159 313/313/159 +f 316/316/131 261/261/131 266/266/131 +f 316/316/161 266/266/161 317/317/161 +f 318/318/153 266/266/153 305/305/153 +f 317/317/161 266/266/161 318/318/161 +f 277/277/143 276/276/143 319/319/143 +f 319/319/162 320/320/162 277/277/162 +f 309/309/156 277/277/156 321/321/156 +f 321/321/162 277/277/162 320/320/162 +f 322/322/163 323/323/163 310/310/163 +f 322/322/128 310/310/128 324/324/128 +f 323/323/163 325/325/163 310/310/163 +f 310/310/164 264/264/164 324/324/164 +f 311/311/157 310/310/157 325/325/157 +f 314/314/165 326/326/165 327/327/165 +f 314/314/146 327/327/146 284/284/146 +f 314/314/165 328/328/165 326/326/165 +f 314/314/146 284/284/146 286/286/146 +f 328/328/159 314/314/159 313/313/159 +f 314/314/144 286/286/144 279/279/144 +f 316/316/166 329/329/166 330/330/166 +f 330/330/126 255/255/126 316/316/126 +f 316/316/166 317/317/166 329/329/166 +f 261/261/131 316/316/131 262/262/131 +f 255/255/126 262/262/126 316/316/126 +f 319/319/145 282/282/145 331/331/145 +f 331/331/167 332/332/167 319/319/167 +f 319/319/145 276/276/145 282/282/145 +f 319/319/167 332/332/167 320/320/167 +f 306/306/168 304/304/168 333/333/168 +f 306/306/151 302/302/151 304/304/151 +f 334/334/169 304/304/169 312/312/169 +f 304/304/152 303/303/152 312/312/152 +f 334/334/169 333/333/169 304/304/169 +f 305/305/153 306/306/153 318/318/153 +f 318/318/170 306/306/170 335/335/170 +f 336/336/171 306/306/171 333/333/171 +f 335/335/172 306/306/172 336/336/172 +f 308/308/173 307/307/173 337/337/173 +f 337/337/174 315/315/174 308/308/174 +f 321/321/175 338/338/175 307/307/175 +f 307/307/156 309/309/156 321/321/156 +f 337/337/173 307/307/173 339/339/173 +f 307/307/175 338/338/175 339/339/175 +f 340/340/129 322/322/129 341/341/129 +f 342/342/176 322/322/176 340/340/176 +f 341/341/129 322/322/129 260/260/129 +f 323/323/163 322/322/163 343/343/163 +f 343/343/176 322/322/176 342/342/176 +f 322/322/177 324/324/177 260/260/177 +f 344/344/148 290/290/148 327/327/148 +f 327/327/178 345/345/178 344/344/178 +f 290/290/148 284/284/148 327/327/148 +f 345/345/178 327/327/178 346/346/178 +f 346/346/165 327/327/165 326/326/165 +f 347/347/179 348/348/179 330/330/179 +f 330/330/122 348/348/122 349/349/122 +f 330/330/179 350/350/179 347/347/179 +f 350/350/166 330/330/166 329/329/166 +f 330/330/122 349/349/122 255/255/122 +f 351/351/180 331/331/180 352/352/180 +f 352/352/147 331/331/147 353/353/147 +f 331/331/147 282/282/147 353/353/147 +f 332/332/180 331/331/180 351/351/180 +f 354/354/169 334/334/169 312/312/169 +f 355/355/181 354/354/181 312/312/181 +f 312/312/157 311/311/157 356/356/157 +f 356/356/181 355/355/181 312/312/181 +f 315/315/174 337/337/174 357/357/174 +f 315/315/182 357/357/182 358/358/182 +f 358/358/182 359/359/182 315/315/182 +f 313/313/159 315/315/159 359/359/159 +f 360/360/183 318/318/183 361/361/183 +f 335/335/170 361/361/170 318/318/170 +f 362/362/183 318/318/183 360/360/183 +f 362/362/161 317/317/161 318/318/161 +f 321/321/175 363/363/175 338/338/175 +f 363/363/184 321/321/184 364/364/184 +f 364/364/184 321/321/184 365/365/184 +f 365/365/162 321/321/162 320/320/162 +f 336/366/185 333/367/185 366/368/185 +f 367/369/186 333/367/186 368/370/186 +f 366/368/185 333/367/185 367/369/185 +f 354/371/169 333/367/169 334/372/169 +f 368/370/186 333/367/186 354/371/186 +f 367/369/187 337/337/187 339/339/187 +f 369/373/188 337/337/188 367/369/188 +f 357/357/188 337/337/188 369/373/188 +f 370/374/189 336/366/189 371/375/189 +f 371/375/185 336/366/185 366/368/185 +f 335/376/190 336/366/190 361/377/190 +f 361/377/189 336/366/189 370/374/189 +f 367/369/187 339/339/187 371/375/187 +f 371/375/191 339/339/191 372/378/191 +f 338/338/175 363/363/175 339/339/175 +f 372/378/191 339/339/191 363/363/191 +f 371/375/185 366/368/185 367/369/185 +f 369/373/188 367/369/188 373/379/188 +f 373/379/186 367/369/186 368/370/186 +f 371/375/191 372/378/191 374/380/191 +f 374/380/189 370/374/189 371/375/189 +f 375/381/192 340/340/192 376/382/192 +f 377/383/121 376/382/121 340/340/121 +f 340/340/129 341/341/129 378/384/129 +f 340/340/121 378/384/121 377/383/121 +f 342/342/192 340/340/192 375/381/192 +f 379/385/119 348/348/119 376/382/119 +f 376/382/193 348/348/193 380/386/193 +f 381/387/179 348/348/179 347/347/179 +f 248/248/119 348/348/119 379/385/119 +f 349/349/122 348/348/122 248/248/122 +f 380/386/193 348/348/193 381/387/193 +f 382/388/150 383/389/150 344/344/150 +f 382/388/194 344/344/194 384/390/194 +f 299/299/148 290/290/148 344/344/148 +f 344/344/150 383/389/150 299/299/150 +f 345/345/178 385/391/178 344/344/178 +f 384/390/194 344/344/194 385/391/194 +f 352/352/149 386/392/149 382/388/149 +f 387/393/195 352/352/195 382/388/195 +f 351/351/195 352/352/195 387/393/195 +f 352/352/147 353/353/147 388/394/147 +f 352/352/149 388/394/149 386/392/149 +f 389/395/119 379/385/119 376/382/119 +f 389/395/121 376/382/121 377/383/121 +f 375/381/192 376/382/192 390/396/192 +f 390/396/193 376/382/193 380/386/193 +f 382/388/150 391/397/150 383/389/150 +f 386/392/149 391/397/149 382/388/149 +f 382/388/195 384/390/195 387/393/195 +f 354/371/196 392/398/196 373/379/196 +f 373/379/186 368/370/186 354/371/186 +f 354/371/196 393/399/196 394/400/196 +f 355/401/181 393/399/181 354/371/181 +f 354/371/197 394/400/197 392/398/197 +f 373/379/198 395/402/198 357/357/198 +f 373/379/188 357/357/188 369/373/188 +f 358/358/182 357/357/182 396/403/182 +f 395/402/198 396/403/198 357/357/198 +f 374/380/199 397/404/199 361/377/199 +f 361/377/189 370/374/189 374/380/189 +f 360/405/183 361/377/183 398/406/183 +f 397/404/200 398/406/200 361/377/200 +f 374/380/191 372/378/191 363/363/191 +f 363/363/201 399/407/201 374/380/201 +f 363/363/202 400/408/202 399/407/202 +f 400/408/184 363/363/184 364/364/184 +f 356/356/163 323/323/163 401/409/163 +f 402/410/203 356/356/203 401/409/203 +f 323/323/163 356/356/163 325/325/163 +f 311/311/157 325/325/157 356/356/157 +f 355/355/203 356/356/203 402/410/203 +f 403/411/204 359/359/204 404/412/204 +f 403/411/165 326/326/165 359/359/165 +f 404/412/204 359/359/204 405/413/204 +f 328/328/165 359/359/165 326/326/165 +f 405/413/182 359/359/182 358/358/182 +f 359/359/159 328/328/159 313/313/159 +f 406/414/166 329/329/166 362/362/166 +f 362/362/205 407/415/205 406/414/205 +f 317/317/166 362/362/166 329/329/166 +f 362/362/205 408/416/205 407/415/205 +f 408/416/205 362/362/205 409/417/205 +f 409/417/183 362/362/183 360/360/183 +f 410/418/206 411/419/206 365/365/206 +f 365/365/167 332/332/167 410/418/167 +f 364/364/206 365/365/206 411/419/206 +f 320/320/167 332/332/167 365/365/167 +f 412/420/198 395/402/198 373/379/198 +f 373/379/196 392/398/196 412/420/196 +f 413/421/199 397/404/199 374/380/199 +f 374/380/202 399/407/202 413/421/202 +f 414/422/176 401/409/176 415/423/176 +f 416/424/207 401/409/207 414/422/207 +f 323/323/163 343/343/163 401/409/163 +f 401/409/176 343/343/176 415/423/176 +f 416/424/207 402/410/207 401/409/207 +f 417/425/178 418/426/178 403/411/178 +f 417/425/208 403/411/208 419/427/208 +f 418/426/178 346/346/178 403/411/178 +f 403/411/208 420/428/208 419/427/208 +f 404/412/204 420/428/204 403/411/204 +f 403/411/165 346/346/165 326/326/165 +f 381/387/179 406/414/179 421/429/179 +f 421/429/209 406/414/209 422/430/209 +f 381/387/179 350/350/179 406/414/179 +f 406/414/166 350/350/166 329/329/166 +f 406/414/209 407/415/209 422/430/209 +f 423/431/210 410/418/210 424/432/210 +f 424/432/180 410/418/180 332/332/180 +f 423/431/210 425/433/210 410/418/210 +f 410/418/206 425/433/206 411/419/206 +f 393/434/203 402/410/203 426/435/203 +f 427/436/211 393/399/211 426/437/211 +f 393/434/203 355/355/203 402/410/203 +f 428/438/211 393/399/211 427/436/211 +f 394/400/196 393/399/196 428/438/196 +f 396/403/204 429/439/204 404/412/204 +f 429/439/212 396/403/212 430/440/212 +f 404/412/204 405/413/204 396/403/204 +f 430/440/212 396/403/212 431/441/212 +f 396/403/182 405/413/182 358/358/182 +f 431/441/198 396/403/198 395/402/198 +f 432/442/213 408/443/213 398/406/213 +f 398/406/214 433/444/214 432/442/214 +f 408/443/215 409/445/215 398/406/215 +f 409/445/183 360/405/183 398/406/183 +f 434/446/216 398/406/216 397/404/216 +f 398/406/217 434/446/217 433/444/217 +f 400/408/206 411/419/206 435/447/206 +f 435/447/218 436/448/218 400/408/218 +f 400/408/206 364/364/206 411/419/206 +f 399/407/218 400/408/218 436/448/218 +f 437/449/212 430/440/212 412/420/212 +f 437/449/211 412/420/211 427/436/211 +f 430/440/212 431/441/212 412/420/212 +f 412/420/198 431/441/198 395/402/198 +f 412/420/211 428/438/211 427/436/211 +f 392/398/196 428/438/196 412/420/196 +f 413/421/218 436/448/218 438/450/218 +f 438/450/219 433/444/219 413/421/219 +f 413/421/218 399/407/218 436/448/218 +f 413/421/199 434/446/199 397/404/199 +f 434/446/219 413/421/219 433/444/219 +f 439/451/220 440/452/220 414/422/220 +f 414/422/192 441/453/192 439/451/192 +f 416/424/220 414/422/220 440/452/220 +f 414/422/192 442/454/192 441/453/192 +f 415/423/176 442/454/176 414/422/176 +f 443/455/193 421/429/193 439/451/193 +f 439/451/221 421/429/221 444/456/221 +f 381/387/193 421/429/193 443/455/193 +f 445/457/209 421/429/209 422/430/209 +f 444/456/221 421/429/221 445/457/221 +f 446/458/194 447/459/194 417/425/194 +f 417/425/222 448/460/222 446/458/222 +f 447/459/194 385/391/194 417/425/194 +f 417/425/178 385/391/178 418/426/178 +f 419/427/208 449/461/208 417/425/208 +f 417/425/222 449/461/222 448/460/222 +f 450/462/223 424/432/223 446/458/223 +f 424/432/195 451/463/195 446/458/195 +f 452/464/210 423/431/210 424/432/210 +f 452/464/223 424/432/223 450/462/223 +f 332/332/180 351/351/180 424/432/180 +f 424/432/195 351/351/195 451/463/195 +f 439/451/220 453/465/220 440/452/220 +f 454/466/193 443/455/193 439/451/193 +f 441/453/192 454/466/192 439/451/192 +f 444/456/221 453/465/221 439/451/221 +f 455/467/194 447/459/194 446/458/194 +f 450/462/223 446/458/223 456/468/223 +f 446/458/222 448/460/222 456/468/222 +f 455/467/195 446/458/195 451/463/195 +f 457/469/224 426/437/224 458/470/224 +f 426/437/207 416/471/207 458/470/207 +f 427/436/224 426/437/224 457/469/224 +f 402/410/207 416/424/207 426/435/207 +f 429/439/225 459/472/225 460/473/225 +f 460/473/208 449/461/208 429/439/208 +f 429/439/225 430/440/225 459/472/225 +f 404/412/204 429/439/204 420/428/204 +f 429/439/208 449/461/208 420/428/208 +f 461/474/226 462/475/226 432/442/226 +f 462/475/209 463/476/209 432/442/209 +f 408/443/205 432/442/205 407/477/205 +f 407/477/209 432/442/209 463/476/209 +f 432/442/226 433/444/226 461/474/226 +f 464/478/210 435/447/210 452/464/210 +f 464/478/227 465/479/227 435/447/227 +f 425/433/206 435/447/206 411/419/206 +f 435/447/218 466/480/218 436/448/218 +f 452/464/210 435/447/210 425/433/210 +f 435/447/227 465/479/227 466/480/227 +f 467/481/225 468/482/225 437/449/225 +f 467/481/224 437/449/224 469/483/224 +f 437/449/225 468/482/225 430/440/225 +f 469/483/224 437/449/224 427/436/224 +f 470/484/227 438/450/227 471/485/227 +f 472/486/226 438/450/226 470/484/226 +f 466/480/227 471/485/227 438/450/227 +f 466/480/218 438/450/218 436/448/218 +f 438/450/226 472/486/226 433/444/226 +f 473/487/220 458/470/220 474/488/220 +f 458/470/228 473/487/228 475/489/228 +f 474/488/220 458/470/220 416/471/220 +f 458/470/224 476/490/224 457/469/224 +f 458/470/228 475/489/228 476/490/228 +f 477/491/229 460/473/229 478/492/229 +f 477/491/222 479/493/222 460/473/222 +f 459/472/225 480/494/225 460/473/225 +f 478/492/229 460/473/229 480/494/229 +f 479/493/222 449/461/222 460/473/222 +f 473/487/230 462/475/230 481/495/230 +f 482/496/221 462/475/221 473/487/221 +f 462/475/226 461/474/226 483/497/226 +f 462/475/230 483/497/230 481/495/230 +f 482/496/221 445/498/221 462/475/221 +f 462/475/209 445/498/209 463/476/209 +f 464/478/223 484/499/223 477/491/223 +f 485/500/231 464/478/231 477/491/231 +f 464/478/231 485/500/231 471/485/231 +f 464/478/227 471/485/227 465/479/227 +f 464/478/223 452/464/223 484/499/223 +f 486/501/220 473/487/220 474/488/220 +f 482/496/221 473/487/221 486/501/221 +f 481/495/230 487/502/230 473/487/230 +f 475/489/228 473/487/228 487/502/228 +f 484/499/223 488/503/223 477/491/223 +f 478/492/232 489/504/232 477/491/232 +f 477/491/231 489/504/231 485/500/231 +f 488/503/222 479/493/222 477/491/222 +f 490/505/229 491/506/229 467/481/229 +f 467/481/228 492/507/228 490/505/228 +f 491/506/229 468/482/229 467/481/229 +f 493/508/228 492/507/228 467/481/228 +f 469/483/224 493/508/224 467/481/224 +f 470/484/231 494/509/231 490/505/231 +f 495/510/230 470/484/230 490/505/230 +f 471/485/231 494/509/231 470/484/231 +f 483/497/226 472/486/226 470/484/226 +f 483/497/230 470/484/230 495/510/230 +f 494/509/231 496/511/231 490/505/231 +f 490/505/229 496/511/229 491/506/229 +f 497/512/228 490/505/228 492/507/228 +f 497/512/230 495/510/230 490/505/230 +f 378/384/129 341/341/129 252/252/129 +f 252/252/129 341/341/129 260/260/129 +f 486/513/220 416/424/220 440/452/220 +f 453/465/220 486/513/220 440/452/220 +f 381/387/193 443/455/193 454/466/193 +f 350/350/179 381/387/179 347/347/179 +f 430/440/225 468/482/225 459/472/225 +f 459/472/225 468/482/225 480/494/225 +f 383/389/150 300/300/150 299/299/150 +f 300/300/150 391/397/150 301/301/150 +f 383/389/150 391/397/150 300/300/150 +f 300/300/150 301/301/150 298/298/150 +f 384/390/194 447/459/194 455/467/194 +f 384/390/194 385/391/194 447/459/194 +f 26/26/9 85/85/9 86/86/9 +f 86/86/9 40/40/9 21/21/9 +f 86/86/9 81/81/9 40/40/9 +f 86/86/9 21/21/9 26/26/9 +f 484/499/223 450/462/223 456/468/223 +f 448/460/222 449/461/222 456/468/222 +f 456/468/222 449/461/222 479/493/222 +f 484/499/223 456/468/223 488/503/223 +f 456/468/222 479/493/222 488/503/222 +f 455/467/195 451/463/195 387/393/195 +f 384/390/195 455/467/195 387/393/195 +f 49/49/10 84/84/10 85/85/10 +f 49/49/10 85/85/10 24/24/10 +f 27/27/11 85/85/11 26/26/11 +f 24/24/10 85/85/10 27/27/10 +f 380/386/193 381/387/193 454/466/193 +f 342/342/192 454/466/192 441/453/192 +f 342/342/192 375/381/192 454/466/192 +f 375/381/192 390/396/192 454/466/192 +f 390/396/193 380/386/193 454/466/193 +f 486/501/220 474/488/220 416/471/220 +f 445/457/221 486/513/221 444/456/221 +f 445/498/221 482/496/221 486/501/221 +f 444/456/221 486/513/221 453/465/221 +f 96/96/233 173/173/233 106/106/233 +f 106/106/234 173/173/234 172/172/234 +f 95/95/38 173/173/38 96/96/38 +f 466/480/227 465/479/227 471/485/227 +f 471/485/231 489/504/231 494/509/231 +f 485/500/231 489/504/231 471/485/231 +f 287/287/83 176/176/83 160/160/83 +f 165/165/77 295/295/77 160/160/77 +f 248/248/119 379/385/119 389/395/119 +f 389/395/119 237/237/119 248/248/119 +f 349/349/122 248/248/122 255/255/122 +f 248/248/122 247/247/122 255/255/122 +f 181/181/84 178/178/84 246/246/84 +f 181/181/80 239/239/80 167/167/80 +f 385/391/178 345/345/178 346/346/178 +f 385/391/178 346/346/178 418/426/178 +f 12/12/2 30/30/2 11/11/2 +f 43/43/5 12/12/5 59/59/5 +f 12/12/5 8/8/5 59/59/5 +f 483/497/226 461/474/226 472/486/226 +f 483/497/230 495/510/230 481/495/230 +f 44/44/16 41/41/16 70/70/16 +f 44/44/16 70/70/16 94/94/16 +f 452/464/210 425/433/210 423/431/210 +f 49/49/17 71/71/17 99/99/17 +f 419/427/208 420/428/208 449/461/208 +f 217/217/99 205/205/99 204/204/99 +f 115/115/22 63/63/22 61/61/22 +f 59/59/235 58/58/235 67/67/235 +f 498/514/35 87/87/35 82/82/35 +f 82/82/35 101/101/35 498/514/35 +f 87/87/34 499/515/34 79/79/34 +f 499/515/34 91/91/34 79/79/34 +f 162/162/78 185/185/78 165/165/78 +f 106/106/40 188/188/40 105/105/40 +f 172/172/41 188/188/41 106/106/41 +f 30/30/2 35/35/2 11/11/2 +f 7/7/2 11/11/2 35/35/2 +f 4/4/2 11/11/2 7/7/2 +f 353/353/147 282/282/147 296/296/147 +f 282/282/147 289/289/147 296/296/147 +f 407/477/209 463/476/209 422/516/209 +f 183/183/39 100/100/39 132/132/39 +f 13/13/6 39/39/6 57/57/6 +f 13/13/6 57/57/6 10/10/6 +f 57/57/6 39/39/6 38/38/6 +f 415/423/176 343/343/176 342/342/176 +f 77/77/236 52/52/236 103/103/236 +f 71/71/17 49/49/17 47/47/17 +f 14/14/7 63/63/7 17/17/7 +f 17/17/7 63/63/7 46/46/7 +f 73/73/22 63/63/22 115/115/22 +f 53/53/13 32/32/13 500/517/13 +f 53/53/13 500/517/13 107/107/13 +f 107/107/13 54/54/13 53/53/13 +f 116/116/23 62/62/23 76/76/23 +f 324/324/237 264/264/237 260/260/237 +f 52/52/18 54/54/18 103/103/18 +f 87/87/34 166/166/34 499/515/34 +f 161/161/34 91/91/34 499/515/34 +f 499/515/34 166/166/34 161/161/34 +f 96/96/12 500/517/12 97/97/12 +f 107/107/13 500/517/13 96/96/13 +f 177/177/36 89/89/36 91/91/36 +f 177/177/36 127/127/36 89/89/36 +f 164/164/35 87/87/35 498/514/35 +f 183/183/35 164/164/35 498/514/35 +f 498/514/35 101/101/35 183/183/35 +f 166/166/238 87/87/238 164/164/238 +f 176/176/83 287/287/83 203/203/83 +f 442/454/192 342/342/192 441/453/192 +f 205/205/84 246/246/84 178/178/84 +f 167/167/80 239/239/80 174/174/80 +f 170/170/81 253/253/81 187/187/81 +f 210/210/86 187/187/86 253/253/86 +f 16/16/8 55/55/8 51/51/8 +f 55/55/4 16/16/4 34/34/4 +f 378/384/121 252/252/121 377/383/121 +f 46/46/7 48/48/7 17/17/7 +f 22/22/3 17/17/3 48/48/3 +f 478/492/229 480/494/229 468/482/229 +f 242/242/81 170/170/81 174/174/81 +f 170/170/81 242/242/81 253/253/81 +f 13/13/1 25/25/1 18/18/1 +f 39/39/1 13/13/1 18/18/1 +f 494/509/231 489/504/231 496/511/231 +f 241/241/121 243/243/121 389/395/121 +f 389/395/121 377/383/121 241/241/121 +f 377/383/121 252/252/121 241/241/121 +f 391/397/149 296/296/149 294/294/149 +f 301/301/149 391/397/149 294/294/149 +f 463/476/209 445/498/209 422/516/209 +f 433/444/226 472/486/226 461/474/226 +f 491/506/229 496/511/229 468/482/229 +f 497/512/230 487/502/230 481/495/230 +f 481/495/230 495/510/230 497/512/230 +f 475/489/228 492/507/228 493/508/228 +f 487/502/228 497/512/228 492/507/228 +f 475/489/228 487/502/228 492/507/228 +f 25/25/1 13/13/1 3/3/1 +f 25/25/3 6/6/3 17/17/3 +f 25/25/3 17/17/3 22/22/3 +f 25/25/239 3/3/239 6/6/239 +f 501/518/4 7/7/4 35/35/4 +f 34/34/4 501/518/4 35/35/4 +f 16/16/8 51/51/8 62/62/8 +f 16/16/4 7/7/4 501/518/4 +f 34/34/4 16/16/4 501/518/4 +f 40/40/15 90/90/15 36/36/15 +f 36/36/15 90/90/15 66/66/15 +f 40/40/15 81/81/15 90/90/15 +f 100/100/240 183/183/240 101/101/240 +f 129/129/37 180/180/37 95/95/37 +f 415/423/176 342/342/176 442/454/176 +f 31/31/12 97/97/12 500/517/12 +f 31/31/12 500/517/12 32/32/12 +f 44/44/12 97/97/12 31/31/12 +f 484/499/223 452/464/223 450/462/223 +f 165/165/78 185/185/78 297/297/78 +f 297/297/77 295/295/77 165/165/77 +f 239/239/80 244/244/80 174/174/80 +f 244/244/81 242/242/81 174/174/81 +f 208/208/85 185/185/85 184/184/85 +f 292/292/85 185/185/85 208/208/85 +f 210/210/86 253/253/86 251/251/86 +f 256/256/99 205/205/99 217/217/99 +f 208/208/100 207/207/100 219/219/100 +f 208/208/100 219/219/100 285/285/100 +f 259/259/101 221/221/101 210/210/101 +f 389/395/119 243/243/119 237/237/119 +f 250/250/129 252/252/129 260/260/129 +f 264/264/241 258/258/241 260/260/241 +f 386/392/149 296/296/149 391/397/149 +f 388/394/147 353/353/147 296/296/147 +f 388/394/149 296/296/149 386/392/149 +f 451/463/195 351/351/195 387/393/195 +f 457/469/224 493/508/224 427/436/224 +f 476/490/224 493/508/224 457/469/224 +f 427/436/224 493/508/224 469/483/224 +f 476/490/228 475/489/228 493/508/228 +f 496/511/242 489/504/242 468/482/242 +f 489/504/243 478/492/243 468/482/243 +f 394/400/197 428/438/197 392/398/197 diff --git a/examples/pybullet/gym/pybullet_data/torus_deform.urdf b/examples/pybullet/gym/pybullet_data/torus_deform.urdf new file mode 100644 index 000000000..a3b49dc94 --- /dev/null +++ b/examples/pybullet/gym/pybullet_data/torus_deform.urdf @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/examples/pybullet/gym/pybullet_data/toys/LICENSE.txt b/examples/pybullet/gym/pybullet_data/toys/LICENSE.txt new file mode 100644 index 000000000..655f41b0f --- /dev/null +++ b/examples/pybullet/gym/pybullet_data/toys/LICENSE.txt @@ -0,0 +1,14 @@ +URDF created by Erwin Coumans + +Bullet Continuous Collision Detection and Physics Library +http://bulletphysics.org + +This software is provided 'as-is', without any express or implied warranty. +In no event will the authors be held liable for any damages arising from the use of this software. +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it freely, +subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. diff --git a/examples/pybullet/gym/pybullet_data/toys/concave_box.cdf b/examples/pybullet/gym/pybullet_data/toys/concave_box.cdf new file mode 100644 index 0000000000000000000000000000000000000000..1183762d814015ddc11b5c6c7a5a26f1644a6691 GIT binary patch literal 6285748 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

xq!Sd?ve3F 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

>ROk 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 z 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

e%bBFyI=Nb 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%0AZacPqd$K!*dn`pS z#n$f6u#4o~FMBb0_sc#+aqlPCc}lShWOoc(e=ONu#l4!Mmtkx7=eqFzO+ zF4dI(&X4uKd;ed2{x>~>{V3U8#r9uKcFVKj`xERudH2g+O5XjlOHA-xc9HYzLuWBewOU6V*9TqyXD#b6)1Y%{RwuSy!&OZB=3IN#(n< z=dhnAyXD#X707No?)DVDgw3nnpJErtyI=My^6r;if#Tl30sBUJ0sBR=+m5Z@p6rg{ z9!t?nv9>_#h%U(_1{jw`k-1|3S-%KxImyq2tZ2hrhcNO<)ie84T-Jk2m`;&LS z>^0=wFS`=Oy*~tdC@sQXOmhXX{rWyY0B!Q}hxxuXcZmT_Ep%+3U!=Uv?FWdw&G>NLq%yob0w^>$fMnW4Oms z^ipi?{tUZF-u<%IlXt)DsucJBDD2U+0(&Ld9mCciOLkXrucqi_*xLQM?z}&F_siZu z-u<$xQQZ4uu*cFW?A2s<)p>YixBU6M2Sv}jKf%tEcfah7o&|4tqSU!Cp&t z%d_<>kll9N?J0T*n^(I(#V(L{zwAxq-7mWa#l1fPdm^pFUQc%0vGv=N-7(x_>HqPt zwfi&dqW%n++TOA^lXt)DniTi`B<#tw0ed6a9mCciOLkXruckD38K1TLb3J%}lCAA6 zdkcB@%dSOn?@z&=N}I4ZligJp;*s6*7x5kxJ@5VmJ5RE;y=8AD?|#{}DenDg*wbkX z_Exf6o~>Vj?6%`>Pti-*yxRRKc7bGTd&}NN|9AIe*P*!gXJF5yZP?q%ZacPqd$K!* zdn`pS#n$f6u!|&H+gtW_^6r;im*U=^g*}^gVDBWmW7zs*$?hud)fBx9Tf0BkllLdt z+TOBvkaxfAdKCBm9PGKY3wt-&U3D`a*)2bW_n_!`_b1qSlCAA6dnbAK%dSsx@6W@Y zPkXTUlHKxb{R(8a9d~<*Uc%c0-DL{}$|9>1FI!$nF@n{#dfRihDIhFT>XE&-LQ{ zNw&7P>^;ifB@5A0t-u+Fm52LvE@4~*D-o$>3Dzfz} zQ3tkuN9w@ck;ZY4rxZ)OKf@|g#;x6->&^F1-u<#)ChvaPO)2jEd$8}Nx3S+LyW`mU z@BRckPu~5qUm@>)*@siy`}bkrPw!&CM|Rh+{nwJ+ifsQ%6upGatKFYs z7s$I`_N(OGFZ(wX_x=Oe57PVCACTROZ2d}Pw*z-aie8GX-Jf9>$-7_nYvkQ8`v{7A z{~_#$=|k*~$ZiL=en+x9j(a>sFT>XE&-LN`$-7_n>*U=p`$&p=KgBLkhFv7Px=~L{_$ZkcpekHQofx9C`FU8jG&#;T+-7ots^6r;?48^_w z1oo5kIrbN1w*yE;`zJ>MK59VYWJtu z1@i8f{V{p>%RY(X-d}^gmMUUbBD)pY`jyCT2kwp(y;Pfvtr(|D^c_kHn4Void`V@ ze%arXcfaiODDM5&vEQI0u#Y6W71{cg$ZiMjjugEVTf0BQE|Pcu57p**}qYzwBld_x{`1 z@6a*Wza_g9*!mO6?mF)E6upGatKFYs7s$I`_5t$lm))G=-hUVSJvtWqII_Er?Z2Mv zR%ZKGq3EU9+Wi@Jk-Yn5A0+R7*)1sU{r9mypxsKMWowz$w^fGMi{@jJU z2YL6)K1AOAvRhKz`yXO|M8{+Qf$Vl->vtx*6SyZ*^t}5M>^yn*%P!UE=ifPKd&_P` zaqnl?Map5HKz1jv^(T_ub=>PIdI_6XyFbM)kaxfA(j;5kTXt)Td;eqXPv}JKlgREm zw*PvvTbb=&g`$^YYxif^Me^>KU4~?9d&_P^aqoYM{TZE%eG1vF%+{|$b~|x*rs!qZ z+WonUcz^QlmtB@*YkSLXOL6aij{OClihUZ{?ZnpaOm-)5Po(I1_b1qS^6r;ij$~_l z%Wg+;?|+H?6`hWK2HBm!)}Kgr*Kx0>=p}4k?fw+IK;Heb%ad$vZ`tiB?)|T^zo9d+ z&mz0)*#7IuZe_NA6^dSpt=*qt7s3t?ezlBgMV{J@yZDF7|n3w-Z~xGufTMJ&~g4-Jf9R$-7^6 zC6cY}ExQxNz5gTjPjo)^1!Q*uTYnKU4>+8d&}-Zaql0(F7*;W8?alF-O6nJ zDrC14cV~)ThOOP7yM*^A?|#`;Nw&7P?5-5|erfD7)C#*b+3m#E?@V?la8IP@dG{yS zdGhX;U5#XGd&}-daqpMKE=O&!+mhW0Z2gI3cOCb7ieAFz)$UKR3*_A|yE@6%_Lkk9 z;@&ThU4hzRw_$-7^6O_HtcExRYhyY0$YC~*;ifB%dSnb zwY_EcrnvX3W7nW=*xkwQI=26MvRj$$UxlKVVr%zj*hTX0mtBWsYkSM?Lviod#I8j> zuzQl-%542AWVaJ{XNq2it=*ryjQ1z+e%WU@7KkyM}4sSlHCbx{fT6E9rt>QUc%$-7^61Cp)nEqegPz26YK z5e>i|NOmi;^{bHGPTZX-dKtEMf9{XGKY91dZb-7Vy=4!ixc3`lH=#k;gUN0uwti=_ zJAr#5MbEoG!OoL+zwAaNTiaXqAc}kcFzlvuA@)UNcLG~~BH3NXy`G|%uz9unQ|tnH z_secfvbDWs52m>H56AuuU5tGR*Ur%-`v;C`3^ipi?{tUZF-u<$hkaxfA3n}jX zBe0L8OR+B_yOr7cRmg59?#>jw3|qTD_b1+;y!#KsZc5($7hzvaaql06eKh?M`%hGr ztzV70u=TrA7w)b!iF-16_a|6+^6pQ$3*_A|`*8B^mwgGvy?+e$Z|QREKa<@_Z2ie( zcLVoEieAd**6z=+i{#xe`#0p>FZ)u8d;eJMxu0C)w@7*6&JoCvi`v=p}4k?fw+IK;Hebk0S4W*?*$A_jA}MP=cK&yOY@Z zlgaJ|?u`_^6kEGL!!D9{zwD#QyI=O@6!-p#*eB7yu>VbVH?aLTlHICo|7sMy3|qTD z_h;Upy!&MzL*D(e|4ec3pNxG9{RjKMWVb3?zZ%)?!rhgk=iQ%R=gGTY_HW6%U-n-p z?)_7-PopcauOz!&*!o?`?j-KX6upGatKFYs7s$I`_OayMFZ-_)_x|bFXV6vHSCidI zZ2ie(cLVoEie8GX-Jf9>$-7_napc`E`)?HY{+ZZk(KXoDlHCn#|BYm~D%-yrMK8nF z?$7;&_b2au*}o(2e%XJgxcAS-K8LQuzMkw>W$RZXyIr`uQuMt06YM;B_sjl0dH2iy z2gSXAF7|nJ1NMz%w+mapE7_gIJ(;4Huz9unQ|tnH_sc$>y!&PUlj7b#ANvBj3HxTU zJBh77ne1-h-bm3)v9>_#h%l-p-_sdQw?)_%i&1nesP_ny$?Z1)iR%QEFqv&PW z+Won|^8V!AFFQxx{j&2E_kIiPmNX1|IN7br)~`l(yKr}<=y~@i*m?5qmwf_x_sjkl z#l7DOyETo#9!Yk)u=Tr=-AUY&DS8Q;SGzyOE|7P>>=VhmU-rK#?)^5{ZD|ztXtFzr ztv{LUZs6WX(Mz%a&+f-Al6SxClgPVY_J1hu{dU;xX$+`(*O&m;GOgd%pvAM;eDcp6pg->sKSYUAVha^t}5M>^yn*%RYs?`(RoVX4D0&&Tc7N_4 zygzyO%RZaD`(S_Cm7Tg{|L}>`vmIOwmi&yxRRKc7eS6WuHsl{jzVQxc4u_zKCwYzLo4wV(U*P zyBoMSQuI=6?fwkANZ$Rj&m-@C**8(#`xj$hLbqYxPIfo2{Wp@`s%-yi6uk^vyFd3& z-k-etWuH&p{jzVSxc4u`zKrg`zLV@$W$RZXyIr`uQuMt06YM;B_g{eBjJ*4YU=O9Z z_y36fC%Oy!ZmQ1KuR-0|`rWA;cXyh?J(axsQ>+4c_h;Ni^6r=2oV@#G52LvEFUS5f z-GhBE*`31HpGtN&ac`#RWxwqHT*CKH-u<#$kaxfA;S~4&U$Fm5_hH{pb~my8H z>{jI6FMA}#z5fsFf6_zP50l+)Z2j(JcMA7Zie8GX-Jf9>$-7^6Yx3@wJ&NMqPq6cp zVi(Bn6t@0Uvb%|UGes}M*6z>cd4KZmm)(ZE`(=-&xcC2s{cm~%`%$vHiS56c>{e&{ z*P!Tm_b1qS^6r=2mc09AkD<8t|AYNsdJOwk$1oB zsTBAA2<(xx40}1*?Z(#cPIjkoPo?OkY;NuT47*6){j$50cfagu6!-op?9sFWdnMVO z!q%Tkb~kZvrs!qZ+WoozV3T*h>>lLZFMB%0y*~zfEUm&`O?Ef2{Wp`{>TLfS6g}_$ z1UpaO{jz(Kcfafz6!-o(?D4b)do9_m&epF%cDr$Rr|2bYUhV!AyFlLkvU`ztzwDV5 z_x=RziL?%TJ=yKX*6&Vsr*KcD=%v`&{TX(Vy!&PMChvaPvncNUN!XKV1NKI;JB6)3 zmF#Zf-b~TUu(kVh|KMFe+`PBcYlJN zC+~jQeaX9D_8f|Pe;W35+Je26>{e&%*C4yyxVuyI5;m`Pe~Mio?|#|+$h%+mT#9>t z2KG$ahP|Eac4O;zC%aR)r&9D%Z0-IGyGY*svip;FzwCJw_x>#G*|YTdtJtrR-A!!&&1APa+rI`y&$~at&Xae) z?2E{|U-oSj_x>H&chc+FZ;;*UZ2cN!w;OkNieAFz*6vTS3*_B@G4>_o-G4jw9TfNe zUD$Wio7itrO}2h5>cQ6UNj11~c_g0FYcYlJNC+~jQmyvhB?7JxL{rj-*r+2a6BfDGJ{#(gz zO}2k6ieAFz)$UKR3*_A|`;X+^FZ*tad;bCK2kCw656Es!wtg+L+k?9&MK8tH?$5A` zXE&t1*?lXt)D%gMW6_PrGM zeu`b747*5nr?K^?lie-cTPb?p{RwuSy!&PUnY{aD-$!xpKZ5-zeT@AH+10bMs{nm^=pyc9^5@CdMUPce}-Ko z?|#{TCGURO4^Z6uPhdYupJRVPc6+e(dy?I0+|wy~8MbzR?i${oy!&PUjlBD1KS*)! zKZX4?eTn@Q*`3DLpH6nSaBrpPdG{ySdGhX;{de;2m;DgMz5fjMv-CCgH)MAU+kY$B zt;zPUMbS&xyxRRKc7eS6W&eY``(-~&aqmBe{XBh({TO+E>PV2 zFJYI^kJvwv-Dzz7>11~c_g0FYcYlJNC+~jQdGhX;{RqXqzX*FV9l$Uc7N_V-k-etW&ek~`(-~) zaqq9dUP)!K%aPq_Z2jqEcMJDcik^3Wf}JPte%b#e?|#`&P~7{guvb%g>jA%~Tz`2HD-h_TNf& zYqI@oQS=fvuXcZmT_Ep%+1HSFzwBoz?)@#;Td5{?EwWpatzV1m_TcVG(Mz$l`!nn! zdH2h{mc09AKSy!zZ^PbBwXy4v-5zZHo@93#_jHP0hOOP7yMgy7?|#|Wk$1oB=PB;} z9oRdmE_OY#JB_VBo$PMm-b&H)?oY7u?UNl2V1`<*`3BcouZdvYxn1F)3D55!gqP-I{FuT4c8ecTb95imlzBVHe4} ze<=1a^6p=Py_DkKe-ryHItu$}s?FA~L%rDgy{Q*>Z<@h9lQJyr{@hKxH+lCb+*^!PcKicDHeFr|2bYUhV!AyFlLkvPY12zwG4{_x`)s z@6oZ?$C2G_Z2#?Kw>I0q4n;4;*6z=+i{#xedn9@H%U(fo@4t`z0sRj9_hh#=TfYw3 z?Zw@jqL*Q7_vdcrJ;=LX_9*i1m%WnW-v1E$BRU@Y4`jC&TfaBioxwemqUYV8VCTuZ zU-oG7?w7ra;@;1&i(3;++qkz=^b$6&c7KXpAn$(JW5~N-_G*fI|6}Y= z=tS(3$nG|_|8}xlo9$nRqL*T8_h;Be^6r;Cmc09Auc5g2KgIrxPR2fk?AB)M*CD&T zxO-FdGHmVs+z{TMy!&O3Bkz9MYboyi&#}LtQ?XAYyS>=@y~*wj?wJ%l@BRckPu~5q z$CG!z>~$3P{+HNa(dpP{klh(<{h4HU8~1jKUc%)NyN&I?o$S_T``4l9rP$j28FrDp`(@80?|#`kDDM4=*p;XQc1N;Xo2_4m?DpdB zP0`D+wfl3!d4KZmmpzNT`(^K>xc4h#SD{YWoyl%5wtjE2JA->BMbEoG!OoL+zwFuM z-7k9=#l2q@yBc-D?n-uNu=Qt>-EG|4DS8Q;SGzyOE|7P>>^bD!FMBt|y26e;k zPIkAk{kN0d+HC(i6ulH%yFbG&l6SxCx#Zn1dk@9EUlY3)^}y~)c5Acs>yX`E+`TD! z8MbzRZUpa7-u<%Yk$1oBy%hI;ZR|SK3%fVj?ZwvbO?GE+&!p&i_b1qS^6r;CpPs|i z_LjYm;@+=Y!tSR&*nP?F47UDEvb&9YJ4G*H^J@2}*ahLvbDWszf5uOH!NZI(*W#&WVbe3zYf{$ z#oe2tmtkx7=SK4W{}|M}64(eW?$3Uz)`|o4orItUP)5r`!ed?w5TRdH2hHi{jot2K%>kIrg8)?ku+c zY_hw9dnZLN{bl!O*hTX0mwh)a!_@ZvKQ{l2d;eJM>OW3^H{V8^Vy!&O}N3vIu?Dr_{{agvV zpAzgm*`3AKpG|gmaPOq(rP$j28FrDp`(@uxvR9Mr_bKlE6HD0r^e^mxlieL`|D9yF zF5ABzMK8nF?$3?k{mHvu_5&n)4axq1;@&^Ggxyd7!TvAVt;^Q0M|S&g_oe80_b1qS z^6r=YAjw`!vOlD__fIWh_tO>FSCZX6Z2i7ucNX_-ieAFz)$UKR3*_A|`yrCOj%0sC zaqpjA!tST5u&*Y&v)KBx$?gvBofN$kTf0BQE|Pb@?1xGAdXk+{-1}#iu>0v6>}$#H z4z~YJvRjw!Uyq`fVQcs2#`6B;-7h;O*&9f9k>cJzyM*0O*I{2zcI&eB>yh0)+cNSZJHrd_5y_2GsVr%zj*hTX0m;EHk-cGW= zq`3Fnm9YD14E9*EyMyh&lkC=I``4rBW!T#Nx$(R|dH2hHie&E~*QWsT=MI^--*wiX#(~{vfGEP->OW3^H{V8^Vy!&N8L$Y^~>~E-Q$*=c*7e05TN!XLg?ku+cY_hw9dnZLN#n$f6 zu#4o~FZ)@Ny_;lzOVvw$z4yEExjRk4o=SFiu>E(E-MVc5dKA43Tf09uf%hlxe%a5F z>^&s=JE~do>%HHD&pl}x_H?pam#trq?DpaAOVRW0Pq6dk-7oujlD(H?e^0ebe!cg5 z@wqq6z@ABV`>^%+`z4b7GRgjl8kYQe?+@VfK$?d=pX}CU>(?W@eYpEl^t}5M>^yn* z%Pt|=+TOAcP~(zc@BKl19!v|c7n0pRZ2i7ucNX_-ieAFz)$UKR3*_A|dlAWgm1G~J z!%BX=_b=r0MRW`Htz>r=TYom$-NC(+qL*T8_h;Be^6ryh0)+ zwtj!=$K9XiaL*<0{uHY~-u)SOk-Yn5FDLJQ*=6Y%tpDBnm-G40bPx8uWOoi*e=gbG z#l4%Nm;JK)bCdc0$-7_n3VN&Q&)ZveIf{G#FW7&j`>^jPySv!_yUA{SwtoYPo_BwO zohR>p*(=GrUv_zld;f3Pf2RkqA0)f=+4>F0Za?n+6upGatKFYs7s$I`_9}X(>Cf9+ zb_F^f>ks6;{}1ke(nHt}lihx7{r+Tk4)VpJ5ltyI=NddbjD%+go-;%3+;A z-unr6o>J@r*`34IpG$Ukaqp(+W!T#NxhcFqdH2g+L+>^Hd3(#QL?>dMMBe-V;{G>1 zg8eAj-Np9bO?KCf9+c2znZ>kRVVzl!^6dJ6k#vO9;ZKbP$8;@(Zs%doZk zb5nVL^6rd%0w?JavVdH2h%N#|o- zK;HW|aorveMW3b24D(ux{cNg1#H`%Sv_HRJZ^X^Zu^CVl_TlP+p{T0csPjT;$ z!yZp-u-B5^`fU9MWVau8e~Mnh=GE>`u?r+y+gtW7lKnNwZa{JGPr#l?>#*08-F|HS z{$zI!_gsozimlzBVHZiZwzurvB>NkZ-H_tmpM*V`HehcgyK~t3bII;5?%fo<3|qTD zH-q;l+1lQ+_mJ#wNp>TOdw&Y{RN92Sne6Uj`|l>Z_1XRnD0<%g33i@jYkSMyOR~Qs z*^Mdg{b|_KX$$sNvRj|6-+=7)(C)rJ?7glfb-k-re zleS@RC%gUF`u)l79PYUky%bx!Kf^APY;AAZ`$_f>B>OPxgVmS3_h)g>rXAQj$?hDs z{#>%Vi+eXkFT>XE&&}lhNw&7P?3YRQk0iS(#l1fVdoJz5-c5FQvHf?G-TG|*1{6K- z{scQuvbDWsze2KqBH4%20IY%Jy+4n8KJCHYOLptC^&61ge%$>jdI_6XyFbM)kZf&l z*{_o910?%5Gze=jdG9aaUP$|}_mkazZ2kUZcMkVlie8GX-Jf9>Nw&7P?AJ)Pwzupf z=t8WE$b0`5?px_)>{rO{9Jc;kvb&3WH$^YQ*6z>E;{8dswzurpN%kR^yn*%YK7oYxm1OiY~?a-@ShapYNpCvELxO z_1XFj$ZkLG{uI50&8^*^Vi(A}|4r<-$h-e&>|-eI{kyR5rZ=(QqK0h!Ml^t}Kad7+ z52ShA^C`vB?$5A_lyPhK=VtT$lXt)Dx9R`xe(c{;-23-n-%D>}ze9HCvGwPZ-96lU zDSF=h33i^m`(?jF-u<$VrMUO+!@i&1#eR?M?qU1yCA$sT{*5Sl37c2DKgBMPcfag+ z$-7_naTNFd1K1DJ``90l-G*%aMr3yY_dtqXimlzBVHe4}U-o(3{^yn*%l?48`(+**&mU2zw8`cfpsN$??1u) zBz=zk1=$_I)*ncA=W)-c=w;a2{kgfkKY91d&d9r8_6c+q*45;_{}lJr^d~e6EPajr4cXnp_TNi(8?yZyQS=fvuXcZm zT_Ep%*&ma4zwDFfI;`u-d;dA^=jmJQ@5pXLwtgeBJAiv2MK9InrVP7C-u<#aA@6?K zC({jBH-2rUfk@1^K@_b1qS^6r=Y8F}~1K9z=G4JGgWMcj+&0QNz$yNB(+ zm+UrV`!}NKC2U^p{uH}F-u<#aC+~jQr_nI1|K0mb_`H-3VV7FP`~TuLWa~E~y92lf zQuI=6?fwkANZ$RjzaZ~^*{4(7`^&JGQ)%onWOo2te<0bN$335-mtkx7=jQYNVpJ5ltyI=M<In-9rk*vj9rE74q)pKB)jvt=Tr1DZ0-Ks0^Xmz`(=Mi z-u<%Ap}6-qU~i>_#h%l?79`(>X`aqn-#-cGf#>yX_6Z2f^`cOLhAie84T-Je^?`;&LS>>tUy zU-ktQ_x=v-om3aQ9@(A8)}K#y_i*o}=y~@i*m?5qm;DoY_secZaqsWK-c9wf8<5>S zZ2!Gvw;|iV5k)Uy^J@2}*ah9V?|#{>DenE(vEQI0u#Y6W4cYpQ$nF5{ffT(I zTf0BQE|PbD8SJv;-QNbgEycb6CiYu&6!y{7n62N02C?-A(;)7_w19gdWmww%xm$T} z^6pQ#^W@zxyBz6v4%*(b+fm&6Z)3kh$6)`K>@HyIFC@GBxc5`^5;m`Pe~Mio?|#|k zNw&7P?DiD*{=3-k(XrUak==c4|NUgQG26chMK8tH?$5A`_3p*L2UiO zWOo7gLW-Vue}bJS?|#{pNVc}O>`oN-euiD79QFxhcL7^}A=%x>y`Q3&uz9unQ|tnH z_sgzKvbDWscc!@aKgRxqPQ*Tm?CxXx?@F1d z{-@ZV(aG4Skln^?{U&605cgn;UWTpRpSzv+C+~jQRY|tCx9qMI_x|VDU(l)8r;*)3 zZ2iGxcLDc8ik^3Wf}JPte%aMXwzjwIZWQDXtG-34s@g=BXh_kN0A!sgZP zPq7Q+-7mX3$=3Fk-JRmz{~G%nIurXWvb&G%zn|v?Jc_(#l8O{_D^&^_61~j0b73|+1;ifB%dSnbwY_EcrnvVHU>~Gr*v-lAK6dzivfG&L--M!ym73Z`pk* z?)}n>*!|QByEWMz#MU27b{B9jr099~C)j!N?w4JUWNUlN?niO&mtDl)6Q~V#Te7== zt-p}$?&IE1(M#C8+WjeZfxP==*C*N9-m?2s-23Gh@pGEmVYer{``G^b$!=q|e-nyc zimlzBVHe4}Uv>kMt?ey)0L8suaS=Z!sRMRLvfG%g--PTA;vP)V%doZkb9eFnbv+|kgXP+4^&OUqZndd*J=p5{G$!~iw%mwh`&`YyEUN=w-3B`wQ4rC@e?Xpp zpQ1~!FD1Jj+4|Rz-O=37QRsR1r?Jb)yI*!~lCAA6y9Vn;s?Ec91 z|B39@VEfmk(92?L_ZP6M$h%*5Ly~crOXOr5wp(-`itQ$vinlF_Z#K;=SjV=dz0NUZ2hrhcM(S#0h80(KR7 z_secUvbDWsrzza~sXQBrBJ2#=UBvcZOm=Ir{cBU`6|lAY%ck@F$-7^68Oc76WS3L8 z_gm-LC^QIrFxjoe)~`)=J8^fW(DUw3W0#Y6zwDMI`+SleQMmWp=Gh1|1bZmi?Znpa zOm@d`kEPH{vw5}qv)C2n-7h;uvM(Un84CA)`#gV*PQ$Q=lie|F{jp?s5%*#Wy)5?s zc0YC%dH2h1MY1m>*@GzD`$y*aYh=0>`#Q3_i0!|a?ABuY*QU@bX!BFq48A{k_secg zvM(apgDKqmN9Xx#RJtDf2C`d=tzVn$cH-_#q37M7#x5uCe%WnE_QfQ72!(t9*gSuY zNH=2NM0Pu|^*fW@G2CM*^wMlz?fxuw1$p<&ZcDN+A=yJI-22Dp`D-+~8T%HpJBF=4 zmh3L#UQD5v#n$dGU{{fMzwCA-`%;oUjKaNtVxGT7q7m4)lHEmY|HWjt7Tdozg~>=7cP6`IxW`iHrP;jN{aNe^^6r;?B+0&lWM4-+=S%ng zX}nLTyRh#jyJOh;W6AC!?!^>(S#0h80(KR7_sc$tWM4_Lucuw}rF;Jj-e=N1*!Pm% zMQs1YWVaUEzcz(l0b9GjY!=_2y!&MzO|q{d**DPc`O>|A7Vop^KJ5F+ZY{QcZL-^m zyEBEJcYhkYoV@#GA49UQCfPUAp83+fe-7_+=>hBq$!;gMerK{fhI=f9UYgCT-Jiv- zAn$(J$CB)hB>N`XD_^?z&*ObQJ%s%**&V~yA4_%@aWAIO%VKNy7qF|yyI=NkB>NhY zeKYNoFWvhW@V<~nVn0H57qR^pligZu|JoFK1#Ip9ve|rp^6r;?Jjw1vvTvdN@}+zK zBHkC%qu7s;-CAt@+GMvAcV`Mc@BTD)IeGWXK7nL+CfOtCfPCrRzl8Ut^f>ktWVaJr zzcbk#!#$QlFU{uF?$2UZkaxfA6G?U#l6@;3lrP=;m+`)wp2U8N?2cjUk0rZ{xEE9C zWwEvU3)ofU-7otjlHHYL-$sYzOZWa2ysxBD*iVz)MQs1YWVaUEzcz(l0b9GjEX(&N z?|#|;CfVIc_U&|7zI5+j#rtY{2K!mETZ^qN7k zkuTl*9eH0vqp_bOyPeqjoyqPP?y(elX*RERe-^ufy!&OJLb7|1>^rGezI5+*;@z3X zV2>rcW7zs*$?hWV#T0s3Z0-I6b`^Q|%RZH4_axbOQJsA0-tWS@D~-b*Pj(lv{TGwn zT5SK?6nX`0?f$X~zCU^Q%RY@{_afPMQ@#8SC40Xc@9s1Kdm`Db#n!J)b~|x*rqJ{5 zPh*#pcmL_wXHaiUZSQ;NUTTmp-TOUw_oPYKlc^3{zbvyFt++ArL_jvN|&tg@O zcYlGqioE+}pGmU&lI;7aQNDEV_u}1~reIGcyW`mUx$CKS9+)F9+ z3fS8HWjVe-dH2gck7R3m%YK+r`O>`~@y<|;og=$T*#1k&ZXLFNT?#$#{xo(udH2gc zpJbPl?2*(uU%K}P@g7Wbu;-H9I&A&AWVZ`fC*&J;0?w5TL$sR~>-6cO|>yxW`lIWwEvU3)ofU-7ou6l0B4UKS{^u zOZWcGylF^k-8yXlx)gfe{b}rS^6r;?ImsSQvPaRs^QC+LHr}_>>)3CQ-8yXjx@5Nt zcUKC%G@DnuKZ{*K-u<$#AlcWF?5F9JeCgi5gZG{ECiYuow+mapE7={#J)S}@i>=*X zz^)?ie%V)&?CVJOGjv+MbnoBA`)+z0`yH}7j;%kQ>@MM6N}*T4*6uHx$M+}ie%V)% z?CVMPvvfwjbnoB8`(An%`#rL|gzdkS?ABrX*QL<&?oVTvlXt)Dt4a0^BzrWSl`q}< z_wl};-pBrc?ABrH*Co4MxVuv5rP;jN{aNe^^6r=2k!0UUvY(@K@}+zK0p1VNhu9yH z-7akXu4H!{_jn4uEVg!k0lSL4`(E3^c_rvrt_9tX_99w@p*kn9m8 zdpuo|FWvi(^L~Q9#Quuxc46yxCA;Ie$5ZHKv956>m-XF#LY5ErXJF>fk z?Z1@l)?xeCrO@;4Ph*#pcfaiJB>Q%fJ&CT$m+t*%ct1#+6flHD%cT`Ba^ zY+mjDEOrHX_si}{S(>k!q)FfcE@p#r_jq{YxfthtLS7* zZEx8(?c_UAVha=%v}*+WlGV3i9sngWZ?z!MvBI(+uj7FWvi-cu%Gk*ej_X zTfaVaW9xUPZrt5z0{2A9Vrlmmu&SuQt=(VtJimYP?w8$E55hdn&EM zUQKo8_jFo=y_W1QWBV^ByY<-q z^(pkyY+mjDEOrHX_sbqYvL7JXv#DRcbnnmLJ(Jd9uP3|p*!uO!Za41k6na@~?fwFG z6?yl|9!RnuB-vRSkT2c)vv|*@4cHsWZa21mcd|Qydm@Ei0b9Gj>;=9*dH2gslkA5` zb_J#LrF%ciyMhYXRb+PpTYn>Lfsm+t*Jyywy;?9F7i9$UXY+3m*N zokA~*t=(V1t|IS#*%^}k2+5v9L-M72e;)7ov;})B+3m*G?@o3na8IPrD`0E)m%YgM zC+~jQgGlzHBzrCm%a`u`1-uv1Htg+WcLG~~BH3NWy_`bNyFZOxPTu{p2b1i_NcKFs zHeb5;pXdDo{fzw!*;-gVzI5-u%=;Dk4f}Vp+l{T? zo$OBFo=Blrz}D_Bdx`H)-u<$Nk?bc)_CmTjU%K~S<^3A{f&E{yJAth~k?bzxUQVIs z-JixTC+~jQ!%6m2B>Q<9kuTl*dES-uC-z@tcNyD%IoYkp_ODN&muB;7_h+#y$h%+m zwIq8K$$o)u%a`u`*LlA|e`D|P9^b#(t;g1{Pj zBHfWM-TQCyev5X*-ihpXW9xS(yA!x4Qs@=1wfoCn=KGU(zwGNt_A?~=CAuqLy7%Aa z{SNJny$ji$z}BBgc9(H4r_l56Ph*#pcfaf#NcOWN`(?T(U%L0-<^3M*ioF}zUB>ob zPIl|D{p(ZcrP;jN{aNe^^6r;?Bgr03vR|S5@}+zKecm6??$~>f-Fj^O`ee5ocXtZC zEVg!k0lSL4`(@umvY#W_uhIkg(!Kv7?~iCt?0=EnZfyPTWOoAhL<+qEwswEnD|~`HnxU%K}{=luok zhrK`9t;g1{Pjn?~nL z_x_K(f1(=LHOX!_wtjcAJAr#5g#_ao zQ|P7Hz}o#;>(?i{-MG6`=w-3B`wQ4r zbT8(8G=pZ+`2J(u=RUV5AL2ciF-076+7)v zq}1~}?a+!+F+VBd&XDZ;tL<6*l>H&e-bkzR?0jm3)tDM#H>O_Py~*w*w*F+YyMlWq zgVa;iv4+N%m&_%=434W3{2y*llPK z_h7QyfUVz@P_67L{k`Q(LTd)E2uP4dEV2c6+e( zdy?Hr+>zN3tI$+4D*ESM)!dpFd;&LPug9MMq*EMb~m)M|M}R{a2FR25kR^6nZgs zjuPx5$$p~RUcgV;U(+_)PQT{a`E)eaF?2NcF?2om4P>_gTfZUM?ZMrXLNCECQtBnX z1Id1pWG^Jy-;nH|>9;&PpN_>kj*i7Xj&9_>iR|`Z>-QwPlei~S=%wc3QiPo$*-us5 z&+}9Ew|g26JUgFG#5##i#6F2eaNkOHSFpoZlHCSu|ArKLF?Nm;>>|m2y4rq`pR&Iv+5e%x z^Xz=Qe`B3Y|K>iKZsWe4>^5NQHzd0~xO-CQCD=tuz07wY+0T&dmq_*x)%I`v+!1Rh zItA-gI)(dGx`X>pvfG2L-;?Z4;+{;Qmzsx55q5@TKU;0T%um@rlI-7UXRKZ5G_2F< zH15;sF7CU@?j*MUWU{-0dnJWlgq@)nJ4dodlk8VW_D|LJAN<@EYd1Or>r6U>`%Jor z`(CoUg6+SO>^5NgH>A*uv2&DQ7fJSW)%L6Wl)Z>#|Ce^h+Jnx*I-AboKAZ02zMt$i zVCy#|yFIvjQs^bvMM}NGcOcngNcL+advUe>CqMVZ`WKypbuOL5eJ(w~{UF)x!Pf6d zb|-O9rqD~x$E656L$b$K+j)M>cW|^Rf1)i?A-Hi?}bQN4Xy(yA9a-4asf~?w%BS33icEuksy8 z_5_ms2FYGtZSPo@osV@OU4nHfUBZ1SJBK-lD!ihgmo}ohIKhz#(glKmFRUP-cd zrbDm}r7N(mq${|uq*2^Ylid|;|CMC70o%VJgi+!W4OnX z-ASYH$nFa6l@xjrc7|f?9Lb(Wvfm@wYf1L*R0pdrb;0UNUAVi_IPURecLm#jCE0Dj z_HRg`7h~rr!7h^Q>DBi8{FJ?pWbZ-suGre19Q-qee`H%;N5O5Xhu zR))O$W9}U3?>T6D%l?SG`(^J%jj$S%_kJ(#-ZTY!D%qXF)}KmtS8=bV(2JkPr3AZ3 zvbFnVe@x!}viGKN@Atv(OVhBYligKp|J7u-5!=5pg-244__oo@yGs$ivwti!>+l#w5g`RhRgqrW-S ztGHKF=*8ID{RwuFWNY`!{+zt~W$#bn-jA>|6l3Se?kcwbYO>pi?cbO}FTvLCPrc6f zC)wKGvcDkje%S|5Ypj3n{Xx73(;V!%WVaDpzcJbE#oe1i&$~au&X8>Fe%W7=cfafd zDct)*u!qt-?D=H37hAtK*`2~Yl|nCK^J@3U`qxgfwY_D3Mc)0g52A4I55pc#3$PcG z-6?GSsbqH*_i75g7+bqP!7h?)?S9!`lXt)DgXu`DqsV*zTJG!UdF&U+?kcwbYO>pi z?cbO}FTvLCPrbqSC)wKGvcDnke%Xi6(OCc7``7cnfnLOZiR?CF>o+F5y|{Z*=y~@? z*cp|98(5u+5k=-c=;E~-`+^Z?{Vr=dH1iMJGwfkj%Pu~5q52tYNkHEf_^4OJR zcU28MvfHR8--ALg!Pf3iy~+0{+1lQ+e<1IE*)=HK`?q1=POoFXL3SIl^&6AjUfjJY z^t}5c>F+scd&{m#r(m5*-uriO-$`#`zeRR?vGseC-6`BtDfA*XuXcZo zog>-W-m-rp?|#{}=rpX;$$S4U?z`!2?03lSly-PzcNO<)3cVOxyFbA$l5FjM*^5Yj z&q3Q;c5Mpx{yo_D(!1F2k=<3t;gQ`&$MZcX^b&0C{?uE1f0C{3EqgI}_sgzBXJMU9 z-uw4)-%syje?WE{vGp61-Co?iDfGPiBkT;x*6x?Rg!K0uw7q55rE{>(CGY(QxF4hs zu|Fcaz1aG_$?g>HsT6wAE4UP6=Sa4;x9p|l-7mWyorm?$z5fvJhv{SNPsr|+%kaqV zD(=-3dNH}7 z9qRty_Lkj{F2VZe-hZ6;6Z9qaS7f&rTfaBiox(kpLN9t1mtyQ3$=3Fky^?ms+=*m2 zqRT2v_x_W-pQ5j^zahI*hU1alRots7^kQu7{sg;7vbFnVuOivn-m)9h6_urXe-!Vh z>09jY$nL6J@W^hX5qu8{y#!mkKlKjZpJZ!$%U(^gcOltL=&H)nz5fjFXX$(FAINSa zwti!>+l#w5g`RhRgqa{ zUc;prJ4dp$y=AW@*}IYKrqrpjbnlPhJ(d<>FDAQFM&Xg&Rots7^kQu7{sg;7vbFnV zuOr#Jlk8^HrLuJIkK;X_mS8U>yQ{|Gk=;h)`5qK{3AT2B>RrA+$=2?dy`E(6L9&}u zx60DJKY{l|T86!x>^5TSHzvEixO-FRdG|-y8S?JmfW49S#QYbvpfc)FS-STp@t#a8 zuvbzOw*C>+hppe2`f&H9Y24GvyFbRtk#~Q>T_o>**#(lV?Jc_{^{Oo0`%`#NrB&Fg z$?i0^{&cdthI=iAUXsV9)O-B?$-7^670KS4WT&W4W$E6Z#(O%g!Cp&t*RcK9lHDe3 z|05{$y!#{U40-p`vpJPN5fLYxgJEMe^>Ky@_P+N3z>c zy0UcdXL(mp0lSLqPGjp&C%bF7*HY*u*xLQ6_xb+h-7kAH$=;u2x234EbnnN!bCh5g z$?h7q|5~!!gzbL>g`RhRgqNb;xw3TczsmbH`UCsFWOo`{e>&M+!@ZV5 zFTvLCPkqSuC+~jQ{~_7h-m;IS5tXHTKhL|8{>1)^?5?SSM|PXkF_LhAd-Bww;_h0Az2K|k_!~1;yYPU&4JhIz|yDx=a^d>IF*g5j4^)=!{SSG6M0;ZYi|qDc>-QzQ)3~Qo=*8ID{RwuFy!&PU zO|rGUWuHtBRhI7kk9mJWdtvWQcBirRr<2_^+-oWH5^U}M)W>{(^6rEDD=GhBkT-$_siaq>ev0h-7ou8dKBw1^4|ZP z`wQ9+dw;Uqq&FVf?Ze%dLN9t7mtyQ3dH2iSi5k@XzwIsiG0g!>|u0yG`!FBfEXL`%>sd@8D95og?pl z*}IYKBS`jHG`g~M@BhgAC#r#6lkE0k>-QzQ)3~Qo=*8ID{RwuFy!&PEPO_Vl?6YZ1 zW$E5u#CtK-!mdqrr?K^?lifAkYbo>+Z0-Kkr+k0%?w7p>$!^2$C_n^@8?vJoDhDDogkNGTzIn9(H}Q+hjT(+3myK zmqIUk7nfq}9C`Qu3wtkWfmuf9(fKr~vUKmS;JuO>U^k?uZ2e}`kFDRI`f>NC8Qe1| z#?tOju!@v$Yxk!<hbL8DGdtZ{> ziez6zGb&5>{yN_4sVR0dvfGrc-;C_`u?w7qE$=3FkeKF0dEZzGX zcyFZU*e%FzKem2E18!uA(yRmSlGZ zTYo0mUB|tilECxskFYc3-7ot9lHHbMUrKRh>E2Ix7b%6^itMgq`>!XvP1*j{jv`x*&Rss6||tT zbnkEDy`9=)cObhn*!nZc?mF)E6nftM5q5^W`(+nZfS`=c-U4&>c0y9UWV zmSkT;`O4D0|0nOi=tS(3$nH9J_?##3Q@?xcgJ+#n?GYu#4o~FS{1WKAvQErZ+1~_x_I9JJBiFr;^=% zE%3-F4jS zDfGPiqp$c5-RcjM>#_#cq>{_fa&&{^1LlijAL;gQ{b-2Ex^Vr=dH1iMJy{j%$kY;AAZ z-RZ;1(!IYY_P^*H>~qO(zw_|O?hNjk6nY7^c7N(?zCU^Q%dStdPp-Cm@bhE*Psn?J zFYLYPJnZwy?hLm6OtQOYAn$(JO-Q!3 zx9q<3ZDr}+KLqj^kQu7{sg;7-u<$hl5A~n+5PFq%F?}G1G^@5#J+~? z_8W;uc4u(Uq|i&Swfj@w@*T*#Uv@K+eRj1yfS-%-7nApXE$rIV3A;1dox#?hNp{z9 zucy%S?vK9ZJCJw3?B*m}+gtWPT2fiM_v>KSr7qZA$?iI~|9Z09lNTr*7EY$!^o>cx1O9cYg}K7+bqP!7h?_e;Ia5^6oFk zj%Wq;O7h-sfZdRKVE3fvZ2cBAfUQ4}25=9gS=_TJ!P4$eeaH7E@BWB8L*D(eQ*=J& z1tdE|t13(Pek1J0)C;>e*`3AKpG|f*aBrm0i`cx{{V{fqy!&OhBH0&K+k^PI27fJi z?>E6dg8E?hCA%Bg{u{||bGCmA3cVOxyFbA$l6SxC)+AfoTlQdDS6RCEn_@Ske%SrV zZgaMN3$i&$NonkIvO9~dKb!1s;ND1~7qNM@`(x}JdH2h1 zN3t)iwukXE!T;ypPhq#B2s=Y|H?aLTlHKNP{}vQ_F}8Mpf?Xu|48hk=vwUS$nFNV|3XH)2T_eaz33}kim`L#-7otjlHIl1zKx&Z z-aiBTOu7gAUb4I4I6Si3obBI&LNCV7QG#70?|#|;CfVBFvTvtw@1KQzHr31C+~jQCzI^%)%G3y4EO#y*yqv%*bkE30q5b7-C5kTDfGPi zBkT-$_sc$oWNUlNzLUbee;)Sv^bq#LWOvqOcw~12_eKi6=xbbxv2*0zFZ)!I-Lu-h zi=W}%zX1C}8j1Y~+1=0ykL)&Q`?sLbi?MT*U>C`|U-oGvTiaXq-4yQqi?A=IN3kCx zyUp49Ey(Tw?tv6~33icEi~0WK-7ouelHI%7zK5UT-oFIt&9FOeI;+{>R zmtu2j_eaz33ZUim`L#-7ou0 zlHIr3zK@^b-oFC-N*aazG}+y73m(~R&h~FXp%-Io_b1pz^6r;?7RlE3mVG~kd;coz ztLYi+XUT4Jwtfq;JAiv2g*cOdV6*=LjN{?+ya{0#SgN9=28H1>03cfd$I zvO9}=Hie#de}tVO?|#|mkZf&l*$+~<_d8*CrZL!K$?mLCcw~12_eKi6=v!Qhv2*0z zFZ*1Qt=%vCAqw|?7woPy4tqS=-7pT1>^5inx1i9Av9>_#h%RY}}Yxm23n8Ll^ z4ZAx{z@A8Uo3r&>klg{?11alY;AAZmy>L5Z`q?L-1~#D2h$wvxn#GDt>2RDrn$>0^t}5c>7!o7bj_I30;_6uaU!1k{qyJc+u zmK1skwswDN1>c`!YkSMSnq=QlZI9+>xc9HezJXrEeu?asvGrS$-86SOg`RhRw1V$I zvbDWscO==`-m;&gaPQxUeG|Qm{R-Jlv-Qi#ZkD@(LN8+TYWK(3Ig+jIE&CdheN(kP zhM(cyzZv@$dKLRMvYR~skL(t>t0?qhZ0-I8yGXLNy=8YI+1lQ+$5OcWM_}JddF)EE zTd1M`UM~Lo$*SG5n)=T+{&fak!dtsPwUX~ovbDWscP81|{j$eVxc6_vzMWpjeuM0m zvGrS$-86SOg`4^v{rj-* zr}wcxAiHI3{gz}m&0S8Rmtu3aqG%Q0fn;lY%kDw4wY_Cerf}~+fc+qSi2V`SO|$jO z$!?arf`cOco?-m-g>Z0&y8 z(~wC6n%~T4cW~O$0NH1?kWns z7+bqP!7h?)ZExBANVc}O?3onq{ZZIY)3?~)k=?>Acx1P11mA-~FTvLCPp#qmlWc8o z+5JhjcE9Xd6z=_Ju%D&xv40@DWo-SHWH-%SPNC=BAFbg#kZf&l*#k(nwzurr6z=`e z*w4|A*guioG+V!%>}I(uDD)yWZ-!#*9Ld)9mOYSUYkSMiQn>fWV2`Cm*o(<-b`&1j zEpS&+=*8GMO0bJ0TiaW9nq+Hx%dVhs?~lVCPfM_ulHI~MJhEFhp6@}SmtYquwU+Ns z-u<%6$-7^6OyS<2fIX3xVJ|1UWo-SHWH-%SPNC=BAFbs(kavHCogwf39QGUv_x>d8 z$+QA{C8gNU9NA5{i+W@0?=#p-xc|5N*YW!&?|#{X$-7_nJPP;zH0Q!-b!{Owtj}}#@xC8y-U3qTf0BOE|Pb@?CVLk zwzuq;DBSxCuou!c?CoSXX6xt3Zo*yEJMa?T+Wn~w{9eerU-k_oTf1NO%M|YY=doX) zpRs=-y9wLBNOn_f|5g-w-u)4FhP?Y_-$=5xy=A{b;og4{`z87n`#)qiwIly}$Zo`) z(R&5|IN6K1wfkf29C`Q4zKLXO_sf2j!oB}8_AB%o_U~jj+LJ$*?8e+Vy#p`it=*q& z;5(3azwDbywzjwI*C^ckuVTMOe_;QY?8fZw9NA5{i+TrM!dtsPwUOTodH2h{g=A}c z%g$4{_w(45^e6UTWH({^7s+m_CVxJKUW(1B-5+6R$h%+m2$HSsExVG!z5hD)8}v8! z4j=IStKC#X{#>#facA^iS?Wc+wfkf29C`Q4zLjKad&_>E!oB|{_FJ?g_D*CsYQdjN zc4O|G-hmhM*6vR>^7|t1e%ZH?Y;AAZZ&0}R-^PB2cE;X??8a>U9NA5{i+TrM!dtsP zRp9qR-u<#~C)wKGvfrd|@4t)v9_@;~8`({cC!oB|?_D8fQ z_P@w(bRK^$*^Rk#dIw(2Tf09g@cSa~e%W`CY;AAZ?@+k+KgRxq_QKwq?8a>U9NA5{ zi+TrM!dtsPRmJaxy!&O}O|rGUWxq?|-v1Q)Guj7xU$UEY;?E_!sm}cQ6nftM5q5^W z`(@ulvbDWszenNT{~Y@Z+7EkwvYYCSM|LCbjNYsH$H`vAt=%7E=g7NX_Pr!q+gtYg z6z=^mvA?1Nun#1=Q8|Au*^Rk#dIw(2Tf0B0;`c?~{j%>P+1lQ+KcH~$e~tYO9fW-_ z*^SxyIkKB@7xfOjgtvBoD&hA+-u<%gC)wKGvOlD7?|+N^9UX#wDA`SJ;m;+zsS*77 z6nftM5q5^W`(-~svbDWse?;Nl{~r4XIt=@8vYWaGkL*U=8NJu=kCVNKJ3}#cj=cM2 zKS;8*y=8w);okod`zNY_U6braBl&a5Zp@w2JMd!OIZ6_KU*z2{`yrC8?JfHg3itjZ z?8Q_IyEfU4+4?!Mn{XHP4!neSky1r|FXY`X`(cu;?JfIL3itjJ?4?u(yDr&H#_{Kp z-PCygdHN85H{#Cdy|&bgcx(5^ z*g5j5m zwTXXTYJ}aG?9O59&n3H?xHnVirP!R>{gG_)?w9>IdH2iy zio(6W274_v!9IfQZesgyCcCZK{%t7qB5dvc7&}Ma{j#4R?|#`|Q@HonVXvpA*v-gp zYqowHvO9=-Foj->t=*qs7sc0`ziA7m;Eh;d%u8PMP=A6$?hDs{#>%ViF-4JUW(1B-5+6R$h%+mDDv)? z{T+pSKfx|i3cD5A-Ng3aOm}SZkU-l0a?)@#;Td6H}JF+{7tv{IT&f%U*p_gE5 z_oue-9mu<1_Os;OFZ)Ld_x?8Q?bIH-1KFL!)}KpuH*s&K&`Ys7wfiIN40-p<9!=i; zvVWp*@BfVb3mu7l6xrRx_TNl)TeJP!Q0PV2+Wj$hj=cM2KS$pEvKLXf_kYFy4;_tt z4B2hHBmccLWOoqvU<$n$Tf0BOE|Pb@>@nosFMBbCd;d4=-|1NFC`|U-ks@?w7rs!o9yE_D*yP_NiodPzyY=JBNEN zg+dm?%F%U(g@-rpH}7dj35bh10A9Uj@;#J!n9FU986?vJoD}DaPRMl{VzHP`&_a+=sY~KJBNEN zgRve!_!_xHlyo6f^NpX|=L43F$?;@(W5mtu2j_eanPm&`(f`- z7hzvac3bzxBfEpR2UF<9*xLOGc9FdMWzQh*e%b3O-1`S$A4r#AUrKfdmE)1!Ioxw8 z^pYxEO8v}tAn$(JGs(MO_67>~{z2FW(`DF~lifMP@yPBb?#&c>DK=*-im)@}-7k9< zdH2iSNa5Z;1p83B0{cp`yNT_;ne4V^`?sOci?A~kW9P`bU-oSB?w4JlaPJ?6eK=i( zeKpx_eGeYl9mGADLNCV7QG#70?|#`?^6r;iMd9ABfnAe2VqZgc2aUudyK}hbQs^ZK zE~S3qJCJw3>tWZYZrI()ZtLlI zWOoqvU<$n$Tf0BOE|Pcu9PGK|-M<-o3x#{X0d_;`f!&kZvh~~15VrnM8p1u4=5f!b z1WUU=^()_-y!#{W40-pJGu!ob~d2IdpWOobqRtmjn3ogajIr8q8 z{R(;a%l?DHy?-S3QFJZ#b!2x7+kY$BZOis=N1+#EYxgJEMe^>K{VI9)%l?|#{TQMmVy$3B5>#=eE@&N~2)>~7)SN}(5R#ibZKN8bIi zE6KZG_TLol{S&cIq7m4)lHDye^gqjz|9P6#Zrhsr|J%cV{svymTf0BOE|Pb@?AOV= zU-l05_~#Jp{eNShOt)d*PIlX}_1lr%A>2bL^b&0C{?s3QfAa2^{RVmW%id98{d4c1 z!uwRZ1N%<0JA|!2l6Y-5+6R$h%+mo8;XudnXF_{%P2!(_Pqilihjk@W}2K z?yVGh(KcL)v2!#LQ`=kiTjbsUKN~;X`)6REN%vsiOLn&$hevkX9?$on(2KFP`xERU z$=3Fk{Wf{`?~J_*g?s-j?6c`U?EA@XTef~XvO9!(D1}~vt=*scFW;YJYkSLnhrIh` z?@Hm`KL`6m+3%5ezwF&9-1`?`Uq~adA0fM2I^mJsww?JN6nZhX zc7K9hB-z^Dvfn4~e%X6axc4u@zL*}xevIt4W$U*iyF<8#Qs^bv+Wo0N`TitZ+gtVr z;oiRt`*L~` z`zf+JZ#W*=-NL<<-}`N}-ovYxk%A z=KGU({}FYMkl1$!#lUBK2~NOrezZ>P|Ut9O5bT_o>**11~s+kZRRZO``aK%tjZ@BY*dJMYkny!&N;L*D(e520}H_rvZ_Gq7ip-S%w# z4rF&2_ize5@BRooL*D(eza{T}*@sfN_Xl7Pq*>Ur$?h<={&2FpfO{c@Uc~0r?vJr^ zb-cF$xV{7*(*hTX0m;F6?_sc$>T2&-U*?p_gE5_osH^`;&LS?8W5WFS`zfd;fau8|X#sm&k5=wtfe) zJB)icg`RhRgqH_^-3uaMngZ2jS6cLDc83cZNUtKA=C z=g7NX_EPfhmtBv-y?-m)(HEy?-0_ z?eseK8)UaVTfYO@9mYMJLeIND!p@L)zw8y{-7mW#g?s-F>^tdA?6=77Ft+}1vb%tL zA%$MV=GE?xv2*0zFMB0<_secX;oiRs`)+z0`yH~ofUUof>~7=UPN5fLYxgJEMe^>K zy^6g1WjCg9@85%cFTIQX9@*V?93I(ie>~rVLNCGA?oaK)_oufowY_DpChvaPO(@*^ z_hH{p?_+;JcH6V{JCNOB+`}pKy!#{U49V8^mc53&`(+@MJ5NTC<8dA0jv>>SC~_LjYty!&N0rEu>*g#9pmjQt7OUBK2~NOrezZ>P|Uv9>|n5_LjYly!&N0qj2w!#D0W6#r}-!ZtH|ccH4L6dr;^l*xLQ6UHSebTiaXqdh+g< z-JHU`|0woj^f~qyWVbzAzXRDF#yy-u&$~au&X8Au(kVByYc-=wzjwI zD)R1^ouY8>KZE@&eUJSE*=^6(??85kaSx}^^X`wZGbCHvTXsU;{jyt8N34JD{n5Oi zqaU$m*+ug1m))Aey*~zfEG@!bOm-Kr^%s)e zZQR=_^kQu7{sg;7vbDWsZzAu0*=;D?`{S_3(-Q2ZWOv&*JhIzwI2(>pIt~&s^6pb+dlPy0%dSsx@2A)W z%CL)McRkyG1KF+3_OCVpJ5ltyI=NJ z^6r=2h~nOV7yCW>2m4>LJDIINh3u~9-aygIu(kVhRd|2$?w7rdy!&N0rnvVfV^5*= z*c-_1dba-tvRj+&Ux%XS-Jf9R$-7_ncJl6*-Gt)apNc(=HezogyS3T+b;xda?j97q zgw3nnpJErtyI=MW^6r=2lzL;8?)~X}&!ElNTgYyAwtf$?JDGb5MK8tH?$5A`V0U+K#=0?5=0~Zy>w157hr}NB;dcc;5X9cAmWZWtSz{+TOBTP~7`-vFFiF>@v%F z|6OivwtgM5+nu`yMK59VYWJtu1@i8fU5;dHd&_P~aqrK^UO;8B%aPsgZ2cZ&cQW@B zie8GX-Jf9>$-7^6d6KQ|ExQ%Py}uB95tYZ@jqFZl>rWxO>$x{j^fGMi{#-TQpS=5J z??$qyX{<+&w6I37c2DKgBMPcfai2Nw&7P?6ws5{&MUUR2jPp+3n8O??HAa zb5Eh@rP$j28FrDp`(;-o+1lQ++fm&6E3sEmRqSeHcQRXl3fW!Hy@8^aVQcs2s`LKj z-7mWm$=3Fk-Jas!UyZ$ns$p*_BDQwzupKG!d(G z@2};19o59HMRsem_3Mz`?%X{ndI_6XyFbM)kaxfADkNLmTXsi^d;fjx4`>hUJ;`o& zwtf$?JDGb5MK8tH?$5A`SHeh;!cnR^OFFU8jG&#;T+-7mW)$=3Fk-Hqbj{{s6MXMasCf`*XGU`;&LS?7hjm zU-tPF_x^X--_udpN0Z&DZ2f6ucO&;Eik^3Wf}JPte%bqwcfaflDDM3quz#duu#Y9X z8`=Jw$ZlP>e?5v`!sgZPPq7Q+-7kAz^6r;?A;rD_6ZX$^9QN^Kw=P@19@*{5-HW1^ zVr%zj*hTX0m%Sf(_shPB;@`vvLM$yZ#wfl2>@c!i8FMEIT z?w5Tr#l8O<_V08O_Q_;-DqDXV+1<#!iK6G-pJ3<7yI=MJTq^t=*s7i}xq* ze%XhUcfahbDenEP*xRTfb|bPom90OG>~7@VMA7r^Pq6dk-7otH^6r;?4b8?X-TT}5 z-a(DAn~>d&?C?!ww=Ubi9z`!<^J@2}*ah-QqNQ@N*6^fGMi z{@mWYKY91dKAL1}d&|C_;@&Thy&JW}Zbf#dvh}Bt-HqIvD0<%g33i^m`(+=Q_~wzuqCDDM60*fpp#b{Dd{k?p^U?AB%b*Q4kqY+mjD6uUs){jyIa+1lQ+Z>6=o zf9c+@iCv4jVs|6Eb=ms$$Zk*WUKG6)Tf0BQE|Pb@?2|~gwzurtDDM3|u=k|1vCkp9 zJ=yxb$nI3`X%xK-Tf0BEFYiy@{jyIc+1lQ+6N-C(FYLYPT>{Cd# zwzurtDenFKu=l46u`eRKb=ms$$Zk*WUKG6)Tf0BQE|Pb@>{Cg$wzup%=yU%0E8Y7C zU>`^qV_!mcd$RR=k=?1>(X-vbDWs-$`-rAB24{U5b4f*`3PP zpGI~!a&MyOdG{ySdGhX;eLBh3_LhAYeZ}uzy7v#kK9nxUzJly-WczO-yLH+A^(cA? z8(6zP#V(L{zw9%}yI=O*6!-pN*oV`V*jJI=x@`S=WVa`GFN$7@t=*qt7sdn^gL%q5C&~)w@lwoQ2=l18l$-6({&Xae)?Aqkr zFS`fDy?+$;(R3~Lb!2xsTYm=G-ORm(qL;9Fwfj@-0(tk#u0!7avU^h8`^R7(OV?xH zKz28?{kM?a`fUFO6ulH%yFbG&l6SxCy5!w2yBGb$KYyir|2XX9=|=3E$ZmbMegm@G zo4XH1FT>XE&mF*fkaxfAdgR?NyEnzXe**T2bTjrXWVbh4zYp1+&OL*o=iQ%R=gGTY zc75{hm)(cr-aiTZWV#jmHnKaNtv`e8Zsy)X(M#C8+WjeZfxP==Hz4nR*?lSQ{T%iw zlwjw{?q;_C7P4EP?cac+mtt%8XV^vZ?w8$=y!&PMqd$26(!GBw_GxrG_8nxm{x^7J zw>Nhmie84T-Jd&<_b2au*^S7%Uv__rd;fIoGw4q2yU1>DwtgS7JDqz5MbEoG!OoL+ zzwE~3-7k9p#l3$f_E~f{_B~{GI$M7R+1<>&g`$_RdA0jf>;ifB%Wgv6{jvvA-21h$ z>ri*>9%Oej+kXq$t@^eaP-~?imz4@BRck zPu~5qo0E6H>>(8Qenad=)EB!S*`3bTpFwsvb8n&OC2U^p{uH}F-u<#$kaxfAp|qXf zzjW_6#%@CWu?LXd&20ZIWVb%szX3%r#n$f6u#4o~FS{jq_sbqeaql<9Zbk#K2a(Nhmie84T-Jd&{_b2au*{#UCU-ob+i&eV!oAcd*24fE)yS>@^eaP-~?imz4 z@BRckPu~5qTa$Oc>=6|AeoO3DG!%On*`3bTpFwsvb8n&OC2U^p{uH}F-u<%MkaxfA zkrelSYwR{O9D4-W-OTpiLU!x3{Top9Qf%%147*6){j%HA4Vc>AvPV(e`)#q?(Mar3 zWVb$BzX93p&E1Ehmtkx7=MLfh=~zr{Z`tigwzjwI(Nr0$bnmz4y915J9z%9}v-SIs z-RayjD0<%g33i@jYkSLXPqMYWWsjk__d8;DqOsWH$nJEu{tU9anR^RGFJbd)_ovte zlCAA6y93GA_Le=C;@m z+4s@`SfzXaV!kh-N3kCxyS>@^eaP-~?imz4@BRckPqMYWWuHy5wY_EEM{)08ihUV9 zj{OALozB*uL3THDZ=vWVY+mjD6uUsOwY_DZL$bBKW#3P6?_Z961wD!V6xrR(_TNHw z>$CkEQ1nu4?fwkANZ$Rj&n54E*$+_M`&VLLMNeZtLw4)4^&61g-rRjCdKtEMf9`PJ zp1k|d!#pN2-TPPbeGNT}{Twx9>o=mlZ2f-Jm%AU$@Wj{=D?_Z039X*fz0@#=X37qMR=yIa}*+sJOisr+3idfBespF4uTKY91dzKFd0Wj{)B@85`h6TOW63fXPQ z)^9|1`*QcA=y~@i*m?5qmwhpL_sf2aPQWVN`#1A_3%!c{8rki;6p!rAj?*xLOWc9FdMWnW6({j#5+ zxc3w6Jf+wLvb*(DJhI#HGv0%umtkx7=Z@t4$-7_nW#rv2`$>v>|90#<=uPam$ZkWn zej~Emm%ATD&$~at&Xae)?90i!U-naUI#%i4zmxB~=xywG$ZlV@em}B1lY16LFJbd) z_ovte^6r;?1$p<&ewyOmzZ?4=dKddWvOANlKa1>c<=#foOR=^4GwdRH_shPLy!&N8 zLvinS$L>Lsv8RyTt()-3ZbPvvacoY ze%UWj-245p2heQnIb?S$+kYF`ZOHa-MA6Hzwfl2N^Zq1T+gtW^; zau1@p*z?G4L$-b+vfG!tA4Si*Kf%tEY;AAZ*OPa@?3buHR_Wd!%=ZwQkG+8G_GRn$ zBfB%XXHoPLHm`Pnid`Vt+TOBnAn$(JFH_w6L$Qa^LhMCkcP3kZ7TMj(y^W%mVr%zj z*hP}9?JfI8^6r=Y3dOxY9D4*U#$G~px3c}Wk==%D|3(zO3|qTDcMR`OvbDWs-$dU1 zvR|dR_eWxnqNUi&$ZkWnej~Emm%ATD&$~at&Xa6yZ`n7Kcfah{s6AHc-XG2P7+Q|K zg6#HX>-QtOGr4C`^b$6&c7KXpAlcg9vTq^pe%Y^6-1}p($I(jcRb+Q2TYnbW-O9a< zqL*T8_h;BelCAA6`&RPqm;DCCy+0m%0v6uk^vyFYgCWNUlNzJt8`Wxq{v?>~(F2z`qE8QE>f)^9|1`*QcA=y~@i*m;tz?JfIG^6r=Y z4qc2@y7wRD`!V_)`#)s2FI&GK*`3Kfi=vmXdA0jf>;lQw_LhAYdH2hHm*U=k9Qz6S z0{cs{JCm(Hi|lUY-bT?&v9>|n5_LhA&dH2hHkK*2c68kCo3j4ogcPra}8`*8h z_HRVd%doZkbI0@k^5ZUHzK=zx%*M{y!#XE zJbCwb$L>Mi{Zp`~($!d{d;eL!pQCTF|3{74`c0_+OJ&Opp#IzgXg2p8^6pQu3gq3N zaTm$EUv^LO?w37{;@*EA`vv+A`+KrGo2@^G>~81YLD9>0?f%>e{Qb$hUv@9@?w38C z;@*D|`z87T`$w|7o$bGa>^7dt--V**-Jf9R$-7^6Z}RS!J%i%je;NA~`U(4IvfFqr z9@*{BJ%FN@uz9unQ|tnH_si}>-u<#?(#=?e%bxVyI=Nf zihDoBE>MPDB)i)`#Us0oKjS?pdfxpBcAmWZW%noVe%W&U2yv)TG{$nJLT9TdF`Tf0AZ67Nsm{jvv?yP!djr|sz6p=)Hr~v8Q1ra}6YM;B_sbqk-u`i31F;ifB%N|1B{jwKQZ>-Y2Kb`Lxv>AH~+3nBPA3%0zbI+mZrP$j2 z8FrDp`(+O$?|#{fDDM54*t2LW_BOIRo2@^G>~81YLD9>wwfl1?^Zw-BFMAky_sd>P zaqrK@o@q9( z*RjiO%+_y0cKdS=py(xRUhV!AyFlLkvPY12zwD(n7^`&e&*ysqmBlVccKfsS2aw&_ z+;b>;DYkZhhFv7@e%T|*yI=M)ihF+{_97~ey&Kt`&DNhocDHlypy*}T+Wom4?@!+S zvPY43zwG4{_x@t+B~$@>ce1;k?Z1QUHfH-bq3C({C)j!N?w389y!&OZpt$#!VlShL z*p}B(O9K>e>vYPs4{jHvfH1nKY;Ac z=AJ{*OR=^4GwdRH_sbqj-u<#yQQZ40u~$)5>}q6pHd}uV+1<{)gQAyVYxn0);r+?G zU-mfi?w7rq;@)44y@sk|*C4yw+5S7oZezB86N;X9e}bJS?|#|i$-7_n8j5>=E%rL9 ziCv5AHfHNLA-ny#2T=49Hm`Pnid`V@e%TYqyI=NNx)-Z-@4wIY2eb$Fo@BQ_TYmuA zoy|RmqL*T8_h;Be^6r;Ck-Yn5ucNs4Kg9ls_QKwq?9OKE&mp_pxpz?XGHmVs+^M`j zdH2hnMBe?f->10uKgRxq_QBql>~3fK?;yL4+5Sx^dO0?yc7Gz9y!&O}OWysmKcKkx zKgIrx_QT$v>^5fWHzB+Ixd%}65^U}M6uUs){j%>P?|#`I(xX_Vd;fF3|3e30A4qol zv-Jm%-Pzo8D0(Tjc7KLlB=3IN_mg+O?2jn!{V%Y;q=T>zCcCrQ`g6$ccJ3V%y$oBs zKX)4MK;HebA0Y33*&kEf`(I)Imkz-`l~tkS*z zE#Lp6Be0L8rfmIYH1MUeWd_ke?m;w{dmg1&+Wi?;kuq-W{@m&O{mHvu_9NuoFZ*+f zd;dG^@98M)qsi`Ew*EY_yOX=joBZeR;Cc5a*m?5qm;ESt_sjkd#l8On_K$Q7_OWDl zC)>Zw)UsvlHsx+c(M#C8+WjeZfxP==KStjDvcI6X_kY6vnU2Fgp6oWAi$`_`au1^D zrP$j28FrDp`(-~)-u<$_q*t*@_x>+@|4JudpGbBGF2y6ebGheH^fGMi{@fY7KY91d zeuBLFWq(C+@BfDVJDr4mGTEKG7LV-iAdMUPce}-Ko?|#`&lXt)DZ|H5T(!Ku|-+$BT*k_R4fo%OjWOpw2Jc?e1t=*qH zllLd@e%a5Ecfag!DenD$u>YkqvCksAbJ_ay$nH+=GJo;@!Sn7P zihF-O_6DkrU5D)M+=RE8_uu6< zqv&PW+Won+cz^Qlm;C~H_sjl);@;niy^R`THzK=p+4}Ry?oRG9d-CtU!Sn7XE&(-Gr$-7_nE9BiT`xlCPzdZJC)DpWD*`3SQpGS6ga+f)i z_YahQ|@LIy@buH-JfC?$h%+m zYvkQ8`!|Yvzan-eYKz^D>^5cVHzT_Pxd&17Qf%%147*6){jy&t?|#|8({kRwbnjQj zu0rjxJCNOhZ2duGcP{rlie84T-Jh$&`;&LS>^I1}Uv@@u?^ngHMjf#`k=?m${dr_} zCwH0ic>mye_b1qS^6r+`z`YBm;D#Ty}uXs-gGYZd1QAk zTYnze-N{|1JMSMn@BRckPu~5q-zM*V*?&{q`}<(;OXp)>Kz4Vs{mZcT?Kb6ZM$t>y zyxRRKc7eS6Wxqq-{j&d|xcB$N-k&bSzKHBLW$QO1y92ogQS?%5?fwkANZ$Rj-zD#U z+5gh#ynpH5KLGncx)}QsvOAEiKZxwk<(@~;%doZkbM<(C^6r=Y9(ni6UQcoFAB24{ zU5b4f*`3SQpGS6ga+i6C_Ya z$-6({&Xae)?CIp)FMA8cy?+$;(R3~Lb!2xwdw&7hE&FEKGUX_G37c2DKgBMPcfafz zKZkt^CD?hgTb8X~j_fw)Zb8vYv9>_#h%brW#{j$p(&VL5r?_aw2 zPsKisZpXfZ>^5iXw;;QNxrb2nGHmVsTtnWUy!&O(Bkz9MW$7>c(!GB=_8D|1_FZIm zFk62J*`3e5fTHK!pJ3<7yI=Nv^6r;ij^f@w6Z8~YxzJD=UXfb5oK`rqeaUSzj9TfYU_9n3w1qL*Q7_vae%{^Z>+dl7l}%dSA1dH>SAUmv>x^~UZ) zb_cWdhmhU*+zTjr-u(%7p1k{IFDCDP*}GHR`wg)hQD5wSWOqJ$e*xJoyJxvFvh~Z6-R9gaD0(Tjc7KLlB=3INOUb)m zb|u=$-@go=_kL6EW;76c5ZP^hBp%rv%sqsnmtkx7=Nj|=g*wHtZwx8!a`L$QaE-T7zWk=?Rq z@*Whugw3nnpJErtyI=MS^6r;il`3GB?)}z$x1r(KBgk%9wthLX+nl=vMK8tH?$5A` z``R5Ia|L4*&WP1grb*WYxn1x@c!i8FMAbv_sgzM zaqqXs?m(ll$B^B@Z2ci*cRu$5ik^3Wf}JPte%Y(ZyI*zjviDF}dy@D5+1%&Qz1a7W-N9`AA!K(x_X3KZcYlJNC+~jQ?~`}G>^*5Oti8#5 z|6K0#=zi=6$nN}m@W^i2?z{&@FJbd)_ow>Z$-7_n2jt!Ve>VO;SfzXae7-NB2eBU_ zyJgw><;ZSx?iLii6kEGL!!D9{zw8gmyMHh2y(#Yf3$ZVvhp`_ayUp49Ey(U*?jaPt z3|qTD*Npck?|#`Ik$1oBeJJkzi?J`EN3kCxyMx*KL&)xY?gbP*@BRckPu~5qKPK;f z+56H#SO=5${-xZP(c{=pklpzY;*s65Z2xi;y@buH-JfC?$h%+mC*<8Pdp|k^t90*Q z&i57cB=%Eew=7$~9NBHo-GZW*Vr%zj*hTX0m;EVu_sia&;@-a!`zm@G`x&y^oUPx2 z><;E0Lea~xwfl3;d4KZm{|x(c^6ozX`#_3&|7z@O=vnONs3lv!6%A$U52K;n!)PJ* zBJ%D}u=3>HpK=$-yI=Ny$h%+mL39+>(d4~TuttfiguHBz&!QY>}`(=Mg z-uCg>3&t zWVbxqe>aL=imlzBVHe4}U-sAJ-7oua%3+o6{e`u?sX0Q`=ki|EMgcwzuq~=uE7$ z$b0{8?tAE6?Dxp-Lbm@RvRj_*zZ*p_#n$f6u!|&H+gtW`SEO+@BNW zY`HS6$nH??VH7>@{scQuvbDWs|3KdTvX7;>_j_aaq3PH&$nMa}cw~1W_acg3!sgZP zPq7OmTiaXqkL2Ai`#5Td)rh?J`*QcAnb@<)?!rCr$Zq*P%az%UqL*T8_h;BelCAA6 z`zP}5mwh}n#wy+W{rMh1v$5xp-SP+Gk=>TuttfgKwswE6HSbTdwY_EkOy2#nPoTK> z2VxJRx!Ci_Zp$O_$nH??VH7>@{scQuvbDWs|3cpVvQMPA_XlGSq50Sg$nMY+@yPB% z?nM;6gw3nnpJEqCwzjwIU&*^)_DR$ds}*_g59J<43$YiG-Gyi1k=^oV@*Whu6kEGL z!!D9+ZExAXk$1oBlc_aU>E0jC_Xt{yy@c$RZ-_^BTXMIe=w;a2{kb;0Kgrhimi;?b z#nkqeoujr`rF(xQ-=kX&aqr)YeILD#{Q=n>%GMu7b{BFlqUa@TUhV!AyFjwFy=DJR-u<%Aq;s*(Bk%qD zxgVepu|Fca3-7@ryXCv{9u&P4Tf0BQE|P3*Z`uElcfahj=zOfwz5gKJ57EcipOD@1 z{qe|dOYT+_y$oBsKi7`;C)wKGvi~LTe%ZC@Lad9(d;ekXN9a@R&&Y1e;do?sDEBam zo_BwOohRAa-m=$|cfag96!-q4*pJcY*#9BBL&xKh-G$tXD0&H-SGzyOE|6?(Z`m8j zyI*!)x)kd&^4@=(`w992`%ALB@IgGXTmB*5gQAyWYxif^MUt)UEqfz*_sgzFmt&Rg z{U`Z;ioU}BFWD{s6du`a$=!;gmtkx7=i2lB?U+0R_WeE2KIE>MPDB)b*Z`n!|e*4%9< zdfxpBcAmWZWtSz{M^JNWLAPVwLEigsa=%4?VE;*WTeJ1sklo?jBPeVpJ5ltyI*#Bl6}-JyA?n0 z#=3{R_uu7ykN&~_m+UTP`!6B871;i}Q}i-y?fzUR-k-etW$#8uVQPEJZcW{>O85R` zzNgT7>kf~*{yIO9@%Zp-G-v)-Jf9R$-7^6Ws~vy%7U<+eT&kL(WT9zoGd*u2{PDRzOp`(;-l+1lQ+J5t>H^RX9DS?qFTcle2T zWOp(55{h1mt=*qt7s59@_HJZ%@fmnzx5Amc2SqQ# z*6z=B;r+?GUv@Q;t?ezlGY!Wo-TRCAUP2YHcPG0Q8sd@N*4%9`POW3^H{V8^Vy!&O>Alcg9vb$2;`^&Lc zP-W~YWOsN+JhHo(dkIA^#n$f6u#4o~FS{nm*7la&jmBb)Bk%o{+^eW6b~UoQ_*^`) zTj4z3gZ_UWwswE6EALO<{jzJ3Y;AAZXVZAB(!IZ$?=@5%y9U{`POW3^H{V8^Vy!&PE zNwT%QWuHrN@4t`z0qudkC)pj&)*nH37jrM6=%v`&{TX(Vy!&PEMY8{I_w(~Sx*zKS z^4|ZD`y<*5dvCJ4_#Qm6TcJDeLD9>wwfl43cz^Qlm%TT6_sc$?9>gl$`yccD3GIWu zFWIfoACK&|=59mL^X^Zu^W@zxdmr-dmwf>}jP(e4?|;hu8SRI?KiO?P9FOb{=N>`P zOW3^H{V8^Vy!&PEOWysmFQmBlKga$L9e{lx*&RL}kL)hyUP94Jv9>_#h%ifQ? z`(nA53-^KZr+mD?G$|Q1miv?f%@^ygzyO%if>7`(6du`a&E1Bg=iQ%R=gGTY_5tMGFZ&XTd;e?fZ|E@W!^v)IwtgG3 zJDht2MK57YNNUU0Z$~59`lDzh_b6J* zy^K;U?fwj_NEx?wf9@Rq{^Z>+`(X0!mwh=skM#n1?|;YrJspL8G}&Fs_FqPJE3*A7 zQS`j~6YM;B_sc$ny!&NeK`&yJ?)@M5{*jKsK9=lOWb0QVyKTAKQS=fvuXcZmT_Ep% z*@seNOl@!3SJKN^rF;J;zJI3Uu#YFZZQ1(m$nHq)Q53xtTf0BQE|Pb@?88X5wzur7 zDDM4Vuz#f!uumkrBiZ_+$nH|^WfZ*(Tf0AZF7Hp?{jv`y?|#`=)9YAokoW#?+`rRF z*e8?SrELFYWVa&QzY;~yyFbCslXt)DBd8f>bGn+Yp%klh?`M1$DTjRu*{#UduS9m+ za<`-CC2U^p{uH}F-u<$Vq~@3{cG=hR^G&R`$b0_}?my{N?9<3@Tef~XvOAJ{6h$w^ z*6z=+i{#xe`zVs#lCGueDDM5gu>YphvCkm8BiZ_+$nH|^WfZ*(Tf0AZ9`8@y{j!gy zmYCY!vahFivEC!^{eQUsr8BY5BD+i3{>#X2MYew>ik^3Wf}JPte%Z&6Y;AAZH_&9P z(!IZ)?+sKNyAIi{$kwk!cH45dqv$1UUhV!AyFlLkvX3R%+TOBnq^Vfb$a{Yy_a>@~ zU61UxEnBWkJF+{HdlW@4#n$f6u#4o~FZ(!>t?e!QCW?E1Gxip$kKKUmj;xGFc9(K5 zqv&PW+Woond4KZmmwi0R*7lZtGtI=BMc(^cxwlb6>_%jF=^l7wx8k1V%2cB0dG{yS zdGhX;eFDkW_LhAM&BiL-``h{6L5;DSkll(0;*s69-0diO37c2DKgBMPcfaftNp^=_ z_O1Mkdw(Z(nT7n{N$h51x9yR5WOpR@D2iT+t=*qt7s~ho` zy9L=Dc_JR!UCOG^b9<* zTk%ZZgQDl%pJ3<7yI*#WWNUlN&eLM-CFH$d0eg39jopUqR&0nzcH45dqv$1UUhV!A zyFlLkvQHt|+TOBnr={4Xd%q%fC2EV^j_kH=iAQ!va*v|urP$j28FrDp`(>X>vbDWs z-$8NjSH`YF?Xf$M-H{#f$nH|^WfZ*(Tf0AZA@5J#{jyIZ+1lQ+@1&Ld{;SA)zbbY$ z>WJNm>@GbQkL*@FkN2SHdG{ySdGhX;eLBh3_LhAYt;R0h`_-{)P-pBeWVa$)zY^JP z%iWHmm#}%Y`%~-!dH2gcgJf%a%f6e|;;$p`{hHXds4I3ivfGxe-;V5#CfVBFvU||S*rj`a zAMAbUeC!LzZpHq1WVbDMJBnVy=GE>`u?ytgFS`!O*7la&lRm}&jJ)^v!``1R#J-5^ zwq@(LBfBHHM^W@rZ0-IGyGY*svg?v;ZExAVDDM3Oun(k*u`eOJBiZ_+$nH|^WfZ*( zTf0AZG4D^_{j%$kY;AAZz3B^n_b=$nMey@yKpPwtppxo_BwOohR>p z+4V`bwzup)^c8mL-aiEUP`VuZ3bI>~tzU`kw&iX|(M#CC+WjeZfxP==Hz4nR*?lSQ z{ll;irz^3qBD-zb`t8W>NbXS-y%bx!Kf^APcYj0dM&#Y!54%6by?+Guk#sfoHPoK1 z-+@N6^~ca??lH8Sdj(}!+WompcyIFVPq_2s-7mW_dH2g6K;QBA|DL?}kHS8huEoBN z>@H{fuOPdX+5S~1dI_6XyFbM)kaxfACUiNbwzuqo^aFP3-aiKWSh^nj2C`e3tzU)g zw&(6Z(Mz$l`!nn!dH2h1O0u=RWe=jC@JsjpaoESxjo3Gl-S%w#4rF&U_ZW&^hOOP7 zyOj4J?|#|MNVc}O?7Ro_BwOohR>p+09Az)ijuf z&~N{e#$S0TIYxjRtwQf%%147*6){jyt<>}yH(F!}?(bnl;veHz`4eFxcX z&(`lic1LrMq3C7U+Woo9cz-$)Q`=j1E0V44Eqge{y?;9P8FVN1U1WDOTYn7MUCzCN zqUYV8VCPA;wzuroB>VbZ_6UCd!|(qudGDWzeHPt~eGl1P&h}qHb}O^}t5Eb3Hm`Pn zid`Vt+TOC;kZf&l*&}H^cIn=)ja`SjWA`AtmD&1L$ZmV?4ivo?)6T27LZO_*4Kz2uSkD=&g*xLQM%Xxp2t?ezl9m&@AmOYx{-mj0{ zfO=#1A-kj5`eVrMa_$urJ@5VmJ5RE;y=Av2+1lQ+$Iw>({@ciVzae%b>Wkfv>@H{f zuOPdX_bgYY3Pmqr^J@2}*aecU?Jc_l$-ZTmJ(i!_u}k-UW9%l>AA11Vt<2W1LU!A8 zccAE{*xLOWc9CRjd&}-fvbDWskE6Kvn_@Skf!Kq{ZhN+V2eLbwdkjS{!`AN4UBUa4 zY;AAZok+H}x9ss0_kMHi7Bm=p2-zLY)*nN5mvgV6=y~@i*m;tz?Jc`A$=3FkJ%Qrh zZ;9QChGGvRyUWkOBfFK)E3V8cLy4cJ%;R#X6uh3yUV#(Q1ra}6YM<6*7lZt zHp$lZmVF<^z26bL6OF|lM|PK=i$``Vv;C`3^b$6&c7KXpAlcg9vdz*6z=+izHjyTlTpmTiaXq0~GguSL|*y5qlEZZO_*4 zKz2uSkD=&g*xLQMt9W~ot?e!QJd&;LE&D;*18Yz6-aniB9J&|#KC(NStv`nBF6UlB z(ev(4u=6Ba+gtYeBwO2C_CvH6*52g3e=hfVbU*e3WOq5+e+AjC%=WKB(M#C8+WjeZ zfn;lY%f5hQYkSLnnD)Wim%R7S=e~d*#D0kER%Yv0A-nClJ5cmeZ0-IGyGXLNy=7lW zvbDWsKSKLq?N8qO7jj=j4`V+5 z4!}B)y!S8WzJwmdevIsnX6uh3yUV#(Q1ra}6YM<6*7lZtG0E2Umi-tVgmo}^?_bJ& z89k2u1le8A_FqAEE3^HpQ1lWuuXcZmT_D-o-m)(t+1lQ+AE!gG4khpX%ek+hC$XO* zyOr7cRmg68?hX{a6kEGL!!D9{zwArNyI=MbbQo6Y-oKLXtLSO$XUJ}Qwtfe)JDPh8 zMK8nF?$2Gr`;&M7W!RUKcmI>vPf^_aS7Tp8&tgAE9ohPwXe?WQ9F653M=QBkk#~QB zl_&51l)FIQ{j#s1{+Qa{vY)27_pimij-JPUf$Xki`>!IqRoVX4D0(TITf0BQE|Pb@ z>?=vOwzuqO=oqYH$$S5L?i=Vu?3c)HRknULvfGin6Gbn>*6z<;%io{8`(#(stDc4X^!BD-U`$5HgW`xERudH2h{nq&{AXX!bLd;ezaTj*8n z*U0Wzw*EM>yOMhqMK59VYWJtu1@i8feGLu99J0%Po}Y2=-->-3y^j3`*5mohW)4wswE+I^LhW z`(vE1V*dfxpBcAi>dYJ1DRo@5Uv*)P%Q zSZ9#;{+--+(c9SXklnFt{c&V>CHE?dUc%UMs_>0^*fQ>vE1V*dfxpB zcAjKwd&|C=WNUlNevRs5H6ZW(-rRj?I`#~*JC?0Kj_j`FUPaMM*u2{PDRzNmYkSMS zg=CM}WxvkPhFFcrd%rJtKbna>i|nps`>!IqRoVX4D0(Tjc7KLlB-z^DvTr5X+TOC? zpvG8D$a}v(_W+uWJ%{X8W$RZXyB)bZQS>rw?f%>iyg$j-_LhAc$=3Fkol;Y*X5_s; zkb4l##hyoYJF@jVk=?P}<0yLG{RwuSWNUlNPDr-4x9kGNy+0Ux2+hY{Kz7Hn^~aIj zmE5Z+dI_6XyFbM)kZf&l*?E$!?JfIFYKhf~y!VH452J{=eOSBkxbL zwY_EEL9(^IWxq{ru}b&;NWMqWQtV}9w6WJZhJ&vO1-Jf9RNw&7P>^n)ewzuqe zDDM5y*kfop_6o8)maRXI?5^ZqMbS&H#HAFwK(e*HW#2`zwY_D(OL6ay#U4j1u~(7Z zm2Cf2WVb5YzZyj^#n$f6u!|&H+gtYCBwO2C_Inif{&?&Ov>JO2*{#afuSRw|a(ANW zW!T#Nxtn-@lCAA6`yP_5?JavU#l1ffdlIe1UPpF2vh_QW-Lc%`D0<%g33i@jYkSM? zPO`PVWly2F_wU8NkKV`rfb5QC>yIP5E4f!u^pdM^Da9_3Y;AAZJxI2;x9q7D_x}CZ z5739$ACcXaZ2whcw<_De8bvR~*6z=+izHjyTXs*9t?ey)8pXZ;AofG_G4>~9w<=q| z8rkj0-HD=?VQcs2Zsz?-wzjwIUL;%FTlRE{d;ekVN9a@R&&X~^wtgqFJC=JKMbEoG z!OoLxZExAVNw&7P>=|@1)+OY<|0wrk^f~r_$nIFS{y4I`l6w_JFS#0*QtSfB*7la& zhh%Ge%brP>VqHew`;T)!L0@2hNp@GV{a2CQs%-yi6ulH%yFbG&l5A~n*?md2wzuqA zbU9Y(-hYzsr|2u}|B~IRZ2f9vw204j^!Rl(ev(4u=C{I-yeGbJ&CF9J%{Gf)mYb%_x`io&(XKo|D(=q z{Vp_~tv`Xrb5Eev+-u0YKgBALcYnrRB=3IN1IfEz_B^^4>pJq@f1djV`VRYhvb&n? zzlQ8qXZzQn=w;X7Qtnp%{^Z>+dk}f|%briyW8FaB`!908L_c8vNOr5U^=pvb&fHxn zdfxpBcAmWZWe+Cre%TA?My%4k|1#gN&`;Pulikj2{Vrs8Jof~OUUDrirPu}X?w37; zp2d7_m%Wgmaqqv1{Tls({VUlW&(@znc2{$+q3EU9+Wi@Jk-Yn54<*^!-m(`_-21O% zzd^rY|4w#Sv;EhQ-Rf-r8Wg<@Tf0AZ8}Cov{j!IV>=$;~i}{&g<;i`u?ut^rna~25hPpNTlP|ld;e|hcjzzdzsc@+w*CaNyPA6qMK8tH?$5A`BwO2C z_DGVg?Jav5#l8P7_IvaX_P=CzHQRp;*{#m@uR+nvu(kVh3GYv`wY_DJBH7yBvX@ib z`;)P!(0c3*WVbq7zXsXu%-w~e=iQ%R=SjAv1W?E|6?(Z`or=_G`QBmHh0DRl4`5^F4z$V{ak5wzjwIRn!-&bnnmPdlqfQ-bQv;v;EhQ-Rf-r8Wg<@Tf0A(=lw~x zwzuqYBwO2C_G*fIe>V0U+K#=0>{e&%*C4x{xw}yGy!#XEJjvGfmOY+iYkSLHLvioV z#hynyvCFLD{dc*Y+4^0`?s)DA6usmITuQMEBwO2C_5_lx?JavP4aOQm-uv^p7f@O3 za%6WrTYm!CUCq6QqL*T8_h;BelCAA6dm_o!_LjYlhGGq)h5WwS`wO`jQF-j$$nI*k z{~EGeo$X(PqL*Q7_vdcs{YkdAx9mwITiaXq`!pPD1bOc-=3YV-uy-fB)!F(r$Zluu zE)>1ojkuJ^CfVBFvhO9?+TOB1ppjUk$a{Y&_cE%8U5V^=X6tt$yW_bhQ1lXP?fw+I zK(e*HW#31#wY_D3NTadFkoW#_?iExSy9(JI&(@znc2{$+q3EU9+Wi@Jkz{Lo%f6pv zYkSN7h{j@#Bk%o{+^eW6b~UoQn(e=a>{e&{*P!TS*xLQMJ9r0@t?e!Q0g|olE&F2{ zk2Qh3_g8bTq3YN*$ZmDEehsqQnY#-`&$~at&Xa6yZ`lu$Y;AAZpU_0C(!IZy?{!oY zyB68)%+~KhcE@v1py(wx;ZllSAlcg9vL7PZ+TOB1rMUOs$Nqr!z}}PWj%VvnAiJx% z*HH9QZ0-IGyGXLNy=6a4vbDWse@1cde~A4N?S;KJ*n$D2HEY*-G!p(-Jf9RNw&7P>_29%vh^p?MD9tnmU|tgSlay=R*^Dp?f%@|{Qb$hU-mQP z-7ouFdLHWq^4|ZB`+GVH`)IPemhHce?AB!a*P`fo_b1qS^6r=YEP40K{vW-FRl4_o z;QL292K!jDTa&F{i|lsg?nco|ZpEb(yFlLkvY(^*m+T($?in9{v@)ymU|sV zFT>XE&)viOlXt)D7f7~tzw96Ab*wkYd;d4?-{~amlgaK{w*NY^Ta)cyi=yY~`huM$t=d!=)6vK;HebUn1Gs-m-t9 zH?d0h{vUk*NvC3;Ms~Zh^}CVXiQJPYdMUPce}-Ko?|#`YlWc8o**{a<`+s5oO{Zg@ zL3Ssy^(T?twcP6{dKtEMf37?4Pa`n3y=A{bvbDWs|3dF#y+_{r|8W0HXJVg4cGt4~ z*OA?tZ2wvmJ@5VmJ5RE;y=A{jvbDWs|4NgwrjYmkdhQKW8@mqKt;yD}MRvP#ccbVf z2`;7B1(L1pE&DZ+y<(UB8$YLFmG1qGd~c$<*!9S6SGImPvOAG`5=Ae?*6z=+izHjy zTlVWDTiaXq?-cj`X6!9gAG-nBoygXoM0VG5ucPQ?*xLQM9=t!v*7lbD2Fcd;mYq@D z`&+TMQA6xTWOpswe;wJa$@Z^B(ev(4u=6Ba+go-@vRCi2i~Njxe>?ULYK+~4?ABz5 z*CM-Jxw}#H5;m`Pe~Mio+1lQ+3nW|HTlOCm_x?`oGK=`%1znM5|wswE6C+|

`K%YyB*o> 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±n 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 z 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±n=iQ%T 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 z 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%0Aa+mbY#?{{$?4{h={TX&n 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

?HL&$EeoAAhPH}38fy%bx!Kf^APY;AAZH<5S0 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±nmtkx7 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 E0bQ15#sB~S literal 0 HcmV?d00001 diff --git a/examples/pybullet/gym/pybullet_data/toys/concave_box.mtl b/examples/pybullet/gym/pybullet_data/toys/concave_box.mtl new file mode 100644 index 000000000..35c3a209b --- /dev/null +++ b/examples/pybullet/gym/pybullet_data/toys/concave_box.mtl @@ -0,0 +1,11 @@ +# Blender MTL File: 'None' +# Material Count: 1 + +newmtl None +Ns 0 +Ka 0.000000 0.000000 0.000000 +Kd 0.8 0.8 0.8 +Ks 0.8 0.8 0.8 +d 1 +illum 2 +map_Kd ../checker_grid.jpg diff --git a/examples/pybullet/gym/pybullet_data/toys/concave_box.obj b/examples/pybullet/gym/pybullet_data/toys/concave_box.obj new file mode 100644 index 000000000..bc58715ec --- /dev/null +++ b/examples/pybullet/gym/pybullet_data/toys/concave_box.obj @@ -0,0 +1,949 @@ +# Blender v2.78 (sub 0) OBJ File: '' +# www.blender.org +mtllib concave_box.mtl +o Cube_Cube.003 +v 0.252358 -0.051546 0.073254 +v 0.196823 -0.040500 0.026785 +v 0.133463 -0.027897 -0.007745 +v 0.064714 -0.014222 -0.029009 +v 0.237323 -0.101112 0.073254 +v 0.185009 -0.079443 0.026785 +v 0.125326 -0.054721 -0.007745 +v 0.060565 -0.027897 -0.029009 +v 0.212906 -0.146792 0.073254 +v 0.165826 -0.115334 0.026785 +v 0.112112 -0.079443 -0.007745 +v 0.053829 -0.040500 -0.029009 +v 0.180047 -0.186831 0.073254 +v 0.140008 -0.146792 0.026785 +v 0.094329 -0.101112 -0.007745 +v 0.044763 -0.051546 -0.029009 +v 0.140008 -0.219690 0.073254 +v 0.108550 -0.172609 0.026785 +v 0.072660 -0.118895 -0.007745 +v 0.033716 -0.060612 -0.029009 +v -0.006783 -0.000000 -0.036189 +v 0.094329 -0.244106 0.073254 +v 0.072660 -0.191793 0.026785 +v 0.047938 -0.132109 -0.007745 +v 0.021113 -0.067349 -0.029009 +v 0.044763 -0.259142 0.073254 +v 0.033716 -0.203606 0.026785 +v 0.021113 -0.140246 -0.007745 +v 0.007438 -0.071497 -0.029009 +v -0.006783 -0.264218 0.073254 +v -0.006783 -0.207595 0.026785 +v -0.006783 -0.142994 -0.007745 +v -0.006783 -0.072898 -0.029009 +v -0.058330 -0.259142 0.073254 +v -0.047283 -0.203606 0.026785 +v -0.034680 -0.140246 -0.007745 +v -0.021005 -0.071497 -0.029009 +v -0.107895 -0.244106 0.073254 +v -0.086227 -0.191793 0.026785 +v -0.061505 -0.132109 -0.007745 +v -0.034680 -0.067349 -0.029009 +v -0.153575 -0.219690 0.073254 +v -0.122117 -0.172609 0.026785 +v -0.086227 -0.118895 -0.007745 +v -0.047283 -0.060612 -0.029009 +v -0.193614 -0.186831 0.073254 +v -0.153575 -0.146792 0.026785 +v -0.107895 -0.101112 -0.007745 +v -0.058330 -0.051546 -0.029009 +v -0.226473 -0.146792 0.073254 +v -0.179392 -0.115334 0.026785 +v -0.125679 -0.079443 -0.007745 +v -0.067396 -0.040500 -0.029009 +v -0.250889 -0.101112 0.073254 +v -0.198576 -0.079443 0.026785 +v -0.138893 -0.054721 -0.007745 +v -0.074132 -0.027897 -0.029009 +v -0.265925 -0.051546 0.073254 +v -0.210390 -0.040500 0.026785 +v -0.147030 -0.027897 -0.007745 +v -0.078280 -0.014222 -0.029009 +v -0.271002 0.000000 0.073254 +v -0.214378 0.000000 0.026785 +v -0.149777 -0.000000 -0.007745 +v -0.079681 -0.000000 -0.029009 +v -0.265925 0.051546 0.073254 +v -0.210390 0.040500 0.026785 +v -0.147030 0.027897 -0.007745 +v -0.078280 0.014222 -0.029009 +v -0.250889 0.101112 0.073254 +v -0.198576 0.079443 0.026785 +v -0.138893 0.054721 -0.007745 +v -0.074132 0.027897 -0.029009 +v -0.226473 0.146792 0.073254 +v -0.179392 0.115334 0.026785 +v -0.125679 0.079443 -0.007745 +v -0.067396 0.040500 -0.029009 +v -0.193614 0.186831 0.073254 +v -0.153575 0.146792 0.026785 +v -0.107895 0.101112 -0.007745 +v -0.058330 0.051546 -0.029009 +v -0.153575 0.219690 0.073254 +v -0.122117 0.172609 0.026785 +v -0.086227 0.118895 -0.007745 +v -0.047283 0.060612 -0.029009 +v -0.107895 0.244106 0.073254 +v -0.086227 0.191793 0.026785 +v -0.061505 0.132109 -0.007745 +v -0.034680 0.067349 -0.029009 +v -0.058330 0.259141 0.073254 +v -0.047283 0.203606 0.026785 +v -0.034680 0.140246 -0.007745 +v -0.021005 0.071497 -0.029009 +v -0.006783 0.264218 0.073254 +v -0.006783 0.207595 0.026785 +v -0.006783 0.142994 -0.007745 +v -0.006783 0.072898 -0.029009 +v 0.044763 0.259141 0.073254 +v 0.033716 0.203606 0.026785 +v 0.021113 0.140246 -0.007745 +v 0.007438 0.071497 -0.029009 +v 0.094329 0.244106 0.073254 +v 0.072660 0.191793 0.026785 +v 0.047938 0.132109 -0.007745 +v 0.021113 0.067349 -0.029009 +v 0.140008 0.219689 0.073254 +v 0.108550 0.172609 0.026785 +v 0.072660 0.118895 -0.007745 +v 0.033716 0.060612 -0.029009 +v 0.180047 0.186831 0.073254 +v 0.140008 0.146792 0.026785 +v 0.094328 0.101112 -0.007745 +v 0.044763 0.051546 -0.029009 +v 0.212906 0.146792 0.073254 +v 0.165825 0.115334 0.026785 +v 0.112112 0.079443 -0.007745 +v 0.053829 0.040500 -0.029009 +v 0.237322 0.101112 0.073254 +v 0.185009 0.079443 0.026785 +v 0.125326 0.054721 -0.007745 +v 0.060565 0.027897 -0.029009 +v 0.252358 0.051546 0.073254 +v 0.196823 0.040500 0.026785 +v 0.133463 0.027897 -0.007745 +v 0.064713 0.014222 -0.029009 +v 0.257435 -0.000000 0.073254 +v 0.200811 -0.000000 0.026785 +v 0.136210 -0.000000 -0.007745 +v 0.066114 -0.000000 -0.029009 +v -1.000000 1.000000 -0.100000 +v -1.000000 1.000000 0.100000 +v 1.000000 1.000000 -0.100000 +v 1.000000 1.000000 0.100000 +v -1.000000 -1.000000 -0.100000 +v -1.000000 -1.000000 0.100000 +v 1.000000 -1.000000 -0.100000 +v 1.000000 -1.000000 0.100000 +v -0.006783 -0.286168 0.100000 +v -0.062612 -0.280669 0.100000 +v 0.195568 -0.202351 0.100000 +v 0.231157 -0.158987 0.100000 +v 0.257601 -0.109512 0.100000 +v 0.195568 0.202351 0.100000 +v -0.209135 0.202351 0.100000 +v 0.273886 -0.055829 0.100000 +v 0.273886 0.055829 0.100000 +v 0.257601 0.109512 0.100000 +v 0.152203 0.237940 0.100000 +v -0.209135 -0.202351 0.100000 +v -0.165770 -0.237940 0.100000 +v -0.244724 -0.158986 0.100000 +v -0.116295 -0.264385 0.100000 +v -0.244723 0.158986 0.100000 +v -0.165770 0.237940 0.100000 +v -0.116295 0.264385 0.100000 +v 0.231156 0.158986 0.100000 +v -0.271168 -0.109512 0.100000 +v -0.287453 0.055829 0.100000 +v -0.292951 0.000000 0.100000 +v 0.279384 -0.000000 0.100000 +v 0.102728 -0.264385 0.100000 +v 0.049045 0.280669 0.100000 +v 0.049045 -0.280669 0.100000 +v -0.287453 -0.055829 0.100000 +v -0.062612 0.280669 0.100000 +v -0.006783 0.286168 0.100000 +v 0.152203 -0.237940 0.100000 +v 0.102728 0.264385 0.100000 +v -0.271168 0.109512 0.100000 +vt 0.5258 0.8663 +vt 0.5000 1.0000 +vt 0.5000 0.8663 +vt 0.5202 0.6339 +vt 0.5000 0.6339 +vt 0.5139 0.4613 +vt 0.5000 0.4613 +vt 0.5071 0.3550 +vt 0.5000 0.3550 +vt 0.5000 0.4966 +vt 0.5071 0.5324 +vt 0.5000 0.5331 +vt 0.5139 0.5303 +vt 0.5506 0.8663 +vt 0.5279 1.0000 +vt 0.5274 0.4613 +vt 0.5139 0.3550 +vt 0.5734 0.8663 +vt 0.5548 1.0000 +vt 0.5577 0.6339 +vt 0.5397 0.6339 +vt 0.5397 0.4613 +vt 0.5202 0.3550 +vt 0.5202 0.5269 +vt 0.5258 0.5224 +vt 0.6012 1.0000 +vt 0.5795 1.0000 +vt 0.5734 0.6339 +vt 0.5506 0.4613 +vt 0.5258 0.3550 +vt 0.5700 0.6339 +vt 0.5700 0.8663 +vt 0.5900 0.8663 +vt 0.5363 0.4613 +vt 0.5472 0.4613 +vt 0.5169 0.3550 +vt 0.5224 0.3550 +vt 0.5303 0.5169 +vt 0.5978 1.0000 +vt 0.5514 1.0000 +vt 0.5761 1.0000 +vt 0.5543 0.6339 +vt 0.5472 0.8663 +vt 0.5363 0.6339 +vt 0.5240 0.4613 +vt 0.5337 0.5106 +vt 0.5224 0.8663 +vt 0.5106 0.4613 +vt 0.5106 0.3550 +vt 0.5357 0.5037 +vt 0.4966 1.0000 +vt 0.5245 1.0000 +vt 0.5169 0.6339 +vt 0.4966 0.8663 +vt 0.4966 0.6339 +vt 0.5037 0.3550 +vt 0.4966 0.4613 +vt 0.5364 0.4966 +vt 0.4827 0.4613 +vt 0.4895 0.3550 +vt 0.4966 0.3550 +vt 0.5357 0.4895 +vt 0.4708 0.8663 +vt 0.4461 0.8663 +vt 0.4687 1.0000 +vt 0.4764 0.6339 +vt 0.4569 0.6339 +vt 0.4692 0.4613 +vt 0.5337 0.4827 +vt 0.4827 0.3550 +vt 0.4569 0.4613 +vt 0.5303 0.4764 +vt 0.4232 0.8663 +vt 0.4419 1.0000 +vt 0.4389 0.6339 +vt 0.4032 0.8663 +vt 0.4171 1.0000 +vt 0.4232 0.6339 +vt 0.4708 0.3550 +vt 0.4764 0.3550 +vt 0.5258 0.4708 +vt 0.5202 0.3550 +vt 0.5506 0.4613 +vt 0.5258 0.3550 +vt 0.5202 0.4663 +vt 0.5734 0.8663 +vt 0.6012 1.0000 +vt 0.5934 0.8663 +vt 0.5734 0.6339 +vt 0.5577 0.6339 +vt 0.5506 0.8663 +vt 0.5795 1.0000 +vt 0.5274 0.4613 +vt 0.5397 0.4613 +vt 0.5139 0.4629 +vt 0.5071 0.4609 +vt 0.5279 1.0000 +vt 0.5548 1.0000 +vt 0.5202 0.6339 +vt 0.5397 0.6339 +vt 0.5139 0.4613 +vt 0.5071 0.3550 +vt 0.5139 0.3550 +vt 0.5000 0.8663 +vt 0.5258 0.8663 +vt 0.5000 0.6339 +vt 0.5000 0.4613 +vt 0.5000 0.4602 +vt 0.4929 0.4609 +vt 0.4742 0.8663 +vt 0.5000 1.0000 +vt 0.4798 0.6339 +vt 0.4861 0.4613 +vt 0.4929 0.3550 +vt 0.5000 0.3550 +vt 0.4603 0.6339 +vt 0.4726 0.4613 +vt 0.4861 0.4629 +vt 0.4494 0.8663 +vt 0.4721 1.0000 +vt 0.4266 0.8663 +vt 0.4452 1.0000 +vt 0.4603 0.4613 +vt 0.4861 0.3550 +vt 0.4798 0.4663 +vt 0.4266 0.6339 +vt 0.4423 0.6339 +vt 0.4742 0.3550 +vt 0.4798 0.3550 +vt 0.4742 0.4708 +vt 0.4066 0.8663 +vt 0.4205 1.0000 +vt 0.4232 0.8663 +vt 0.3954 1.0000 +vt 0.4032 0.8663 +vt 0.4389 0.6339 +vt 0.4232 0.6339 +vt 0.4569 0.4613 +vt 0.4461 0.4613 +vt 0.4708 0.3550 +vt 0.4697 0.4764 +vt 0.4569 0.6339 +vt 0.4827 0.3550 +vt 0.4764 0.3550 +vt 0.4663 0.4827 +vt 0.4461 0.8663 +vt 0.4171 1.0000 +vt 0.4708 0.8663 +vt 0.4419 1.0000 +vt 0.4764 0.6339 +vt 0.4827 0.4613 +vt 0.4692 0.4613 +vt 0.4895 0.3550 +vt 0.4643 0.4895 +vt 0.4966 0.3550 +vt 0.4636 0.4966 +vt 0.4966 0.8663 +vt 0.4687 1.0000 +vt 0.4966 0.6339 +vt 0.5224 0.8663 +vt 0.4966 1.0000 +vt 0.5169 0.6339 +vt 0.4966 0.4613 +vt 0.5037 0.3550 +vt 0.4643 0.5037 +vt 0.5106 0.3550 +vt 0.5106 0.4613 +vt 0.4663 0.5106 +vt 0.5472 0.8663 +vt 0.5245 1.0000 +vt 0.5363 0.6339 +vt 0.5240 0.4613 +vt 0.5700 0.8663 +vt 0.5514 1.0000 +vt 0.5363 0.4613 +vt 0.5169 0.3550 +vt 0.4697 0.5169 +vt 0.4742 0.5224 +vt 0.5900 0.8663 +vt 0.5761 1.0000 +vt 0.5700 0.6339 +vt 0.5543 0.6339 +vt 0.5224 0.3550 +vt 0.4423 0.6339 +vt 0.4066 0.8663 +vt 0.4266 0.6339 +vt 0.4603 0.4613 +vt 0.4494 0.4613 +vt 0.4798 0.3550 +vt 0.4742 0.3550 +vt 0.4798 0.5269 +vt 0.4266 0.8663 +vt 0.3988 1.0000 +vt 0.4494 0.8663 +vt 0.4205 1.0000 +vt 0.4603 0.6339 +vt 0.4861 0.3550 +vt 0.4861 0.5303 +vt 0.4798 0.6339 +vt 0.4861 0.4613 +vt 0.4726 0.4613 +vt 0.4929 0.3550 +vt 0.4929 0.5324 +vt 0.4742 0.8663 +vt 0.4452 1.0000 +vt 0.4721 1.0000 +vt 0.0000 1.0000 +vt 1.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 1.0000 +vt 1.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 1.0000 +vt -1.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 1.0000 +vt -1.0000 0.0000 +vt 0.0000 0.0000 +vt 0.0000 -1.0000 +vt -1.0000 0.0000 +vt -0.5279 -0.3631 +vt -0.5000 -0.3603 +vt -0.5000 0.3535 +vt -0.5279 0.3563 +vt -1.0000 0.0000 +vt 0.5934 0.8663 +vt 0.3954 1.0000 +vt 0.4461 0.4613 +vt 0.4494 0.4613 +vt 0.3988 1.0000 +vt 0.5978 1.0000 +vt 0.5472 0.4613 +vt 1.0000 1.0000 +vt 1.0000 1.0000 +vt -1.0000 1.0000 +vt -1.0000 1.0000 +vt 1.0000 -1.0000 +vt -1.0000 -1.0000 +vt -0.6431 -0.5034 +vt -0.6403 -0.4755 +vt -0.3569 -0.5034 +vt 0.0000 -1.0000 +vt 0.0000 0.0000 +vt -0.3597 -0.4755 +vt -0.6322 -0.4486 +vt -0.6190 -0.4239 +vt -0.3678 -0.4486 +vt -0.3810 -0.4239 +vt -0.6012 -0.4022 +vt -0.5795 -0.3844 +vt -0.3988 -0.4022 +vt -0.4205 -0.3844 +vt -0.5548 -0.3712 +vt -0.4452 -0.3712 +vt -0.4721 -0.3631 +vt 0.0000 0.0000 +vt -0.3569 0.4966 +vt -0.3597 0.4687 +vt -0.3678 0.4419 +vt -0.6403 0.4687 +vt -0.6431 0.4966 +vt -0.6322 0.4419 +vt -0.3810 0.4171 +vt -0.3988 0.3954 +vt -0.6190 0.4171 +vt -0.6012 0.3954 +vt -0.4205 0.3776 +vt -0.4452 0.3644 +vt -0.5795 0.3776 +vt -0.5548 0.3644 +vt -0.4721 0.3563 +vn -0.7708 0.0759 0.6326 +vn -0.6332 0.0624 0.7715 +vn -0.4709 0.0464 0.8810 +vn -0.2902 0.0286 0.9565 +vn -0.0980 0.0097 0.9951 +vn -0.0942 0.0286 0.9951 +vn -0.7412 0.2248 0.6326 +vn -0.6088 0.1847 0.7715 +vn -0.4528 0.1374 0.8810 +vn -0.2790 0.0846 0.9565 +vn -0.6831 0.3651 0.6326 +vn -0.5611 0.2999 0.7715 +vn -0.4173 0.2230 0.8810 +vn -0.2571 0.1374 0.9565 +vn -0.0869 0.0464 0.9951 +vn -0.0761 0.0625 0.9951 +vn -0.5987 0.4913 0.6326 +vn -0.4918 0.4036 0.7715 +vn -0.3658 0.3002 0.8810 +vn -0.2254 0.1850 0.9565 +vn -0.4036 0.4918 0.7715 +vn -0.3002 0.3658 0.8810 +vn -0.1850 0.2254 0.9565 +vn -0.0625 0.0761 0.9951 +vn -0.4913 0.5987 0.6326 +vn -0.3651 0.6831 0.6326 +vn -0.2999 0.5611 0.7715 +vn -0.2230 0.4173 0.8810 +vn -0.1374 0.2571 0.9565 +vn -0.0464 0.0869 0.9951 +vn -0.1847 0.6088 0.7715 +vn -0.1374 0.4528 0.8810 +vn -0.0846 0.2790 0.9565 +vn -0.0286 0.0942 0.9951 +vn -0.2248 0.7412 0.6326 +vn -0.0759 0.7708 0.6326 +vn -0.0624 0.6332 0.7715 +vn -0.0464 0.4709 0.8810 +vn -0.0286 0.2902 0.9565 +vn -0.0097 0.0980 0.9951 +vn 0.0464 0.4709 0.8810 +vn 0.0286 0.2902 0.9565 +vn 0.0097 0.0980 0.9951 +vn 0.0759 0.7708 0.6326 +vn 0.0624 0.6332 0.7715 +vn 0.2248 0.7412 0.6326 +vn 0.1847 0.6088 0.7715 +vn 0.1374 0.4528 0.8810 +vn 0.0846 0.2790 0.9565 +vn 0.0286 0.0942 0.9951 +vn 0.1374 0.2571 0.9565 +vn 0.0464 0.0869 0.9951 +vn 0.3651 0.6831 0.6326 +vn 0.2999 0.5611 0.7715 +vn 0.2230 0.4173 0.8810 +vn 0.4913 0.5987 0.6326 +vn 0.4036 0.4918 0.7715 +vn 0.3002 0.3658 0.8810 +vn 0.1850 0.2254 0.9565 +vn 0.0625 0.0761 0.9951 +vn 0.2254 0.1850 0.9565 +vn 0.0761 0.0625 0.9951 +vn 0.5987 0.4913 0.6326 +vn 0.4918 0.4036 0.7715 +vn 0.3658 0.3002 0.8810 +vn 0.6831 0.3651 0.6326 +vn 0.5611 0.2999 0.7715 +vn 0.4173 0.2230 0.8810 +vn 0.2571 0.1374 0.9565 +vn 0.0869 0.0464 0.9951 +vn 0.0942 0.0286 0.9951 +vn 0.7412 0.2248 0.6326 +vn 0.6088 0.1847 0.7715 +vn 0.4528 0.1374 0.8810 +vn 0.2790 0.0846 0.9565 +vn 0.7708 0.0759 0.6326 +vn 0.6332 0.0624 0.7715 +vn 0.4709 0.0464 0.8810 +vn 0.2902 0.0286 0.9565 +vn 0.0980 0.0097 0.9951 +vn 0.0980 -0.0097 0.9951 +vn 0.7708 -0.0759 0.6326 +vn 0.6332 -0.0624 0.7715 +vn 0.4709 -0.0464 0.8810 +vn 0.2902 -0.0286 0.9565 +vn 0.6088 -0.1847 0.7715 +vn 0.4528 -0.1374 0.8810 +vn 0.2790 -0.0846 0.9565 +vn 0.0942 -0.0286 0.9951 +vn 0.7412 -0.2248 0.6326 +vn 0.6831 -0.3651 0.6326 +vn 0.5611 -0.2999 0.7715 +vn 0.4173 -0.2230 0.8810 +vn 0.2571 -0.1374 0.9565 +vn 0.0869 -0.0464 0.9951 +vn 0.3658 -0.3002 0.8810 +vn 0.2254 -0.1850 0.9565 +vn 0.0761 -0.0625 0.9951 +vn 0.5987 -0.4913 0.6326 +vn 0.4918 -0.4036 0.7715 +vn 0.4913 -0.5987 0.6326 +vn 0.4036 -0.4918 0.7715 +vn 0.3002 -0.3658 0.8810 +vn 0.1850 -0.2254 0.9565 +vn 0.0625 -0.0761 0.9951 +vn 0.2230 -0.4173 0.8810 +vn 0.1374 -0.2571 0.9565 +vn 0.0464 -0.0869 0.9951 +vn 0.3651 -0.6831 0.6326 +vn 0.2999 -0.5611 0.7715 +vn 0.2248 -0.7412 0.6326 +vn 0.1847 -0.6088 0.7715 +vn 0.1374 -0.4528 0.8810 +vn 0.0846 -0.2790 0.9565 +vn 0.0286 -0.0942 0.9951 +vn 0.0286 -0.2902 0.9565 +vn 0.0097 -0.0980 0.9951 +vn 0.0759 -0.7708 0.6326 +vn 0.0624 -0.6332 0.7715 +vn 0.0464 -0.4709 0.8810 +vn -0.0759 -0.7708 0.6326 +vn -0.0624 -0.6332 0.7715 +vn -0.0464 -0.4709 0.8810 +vn -0.0286 -0.2902 0.9565 +vn -0.0097 -0.0980 0.9951 +vn -0.0846 -0.2790 0.9565 +vn -0.0286 -0.0942 0.9951 +vn -0.2248 -0.7412 0.6326 +vn -0.1847 -0.6088 0.7715 +vn -0.1374 -0.4528 0.8810 +vn -0.3651 -0.6831 0.6326 +vn -0.2999 -0.5611 0.7715 +vn -0.2231 -0.4173 0.8810 +vn -0.1374 -0.2571 0.9565 +vn -0.0464 -0.0869 0.9951 +vn -0.0625 -0.0761 0.9951 +vn -0.4913 -0.5987 0.6326 +vn -0.4036 -0.4918 0.7715 +vn -0.3002 -0.3658 0.8810 +vn -0.1850 -0.2254 0.9565 +vn -0.4918 -0.4036 0.7715 +vn -0.3658 -0.3002 0.8810 +vn -0.2254 -0.1850 0.9565 +vn -0.0761 -0.0625 0.9951 +vn -0.5987 -0.4913 0.6326 +vn -0.6831 -0.3651 0.6326 +vn -0.5611 -0.2999 0.7715 +vn -0.4173 -0.2231 0.8810 +vn -0.2571 -0.1374 0.9565 +vn -0.0869 -0.0464 0.9951 +vn -0.6088 -0.1847 0.7715 +vn -0.4528 -0.1374 0.8810 +vn -0.2790 -0.0846 0.9565 +vn -0.0942 -0.0286 0.9951 +vn -0.7412 -0.2248 0.6326 +vn -0.7708 -0.0759 0.6326 +vn -0.6332 -0.0624 0.7715 +vn -0.4709 -0.0464 0.8810 +vn -0.2902 -0.0286 0.9565 +vn -0.0980 -0.0097 0.9951 +vn 0.0000 1.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn -0.0000 0.0000 1.0000 +vn 0.2231 0.4173 0.8810 +vn 0.4173 -0.2231 0.8810 +vn -0.4173 -0.2230 0.8810 +usemtl None +s off +f 1/1/1 160/2/1 126/3/1 +f 2/4/2 126/3/2 127/5/2 +f 3/6/3 127/5/3 128/7/3 +f 4/8/4 128/7/4 129/9/4 +f 21/10/5 4/11/5 129/12/5 +f 21/10/6 8/13/6 4/11/6 +f 5/14/7 145/15/7 1/1/7 +f 2/4/8 5/14/8 1/1/8 +f 7/16/9 2/4/9 3/6/9 +f 8/17/10 3/6/10 4/8/10 +f 9/18/11 142/19/11 5/14/11 +f 10/20/12 5/14/12 6/21/12 +f 11/22/13 6/21/13 7/16/13 +f 12/23/14 7/16/14 8/17/14 +f 21/10/15 12/24/15 8/13/15 +f 21/10/16 16/25/16 12/24/16 +f 9/18/17 140/26/17 141/27/17 +f 14/28/18 9/18/18 10/20/18 +f 15/29/19 10/20/19 11/22/19 +f 16/30/20 11/22/20 12/23/20 +f 14/31/21 17/32/21 13/33/21 +f 19/34/22 14/31/22 15/35/22 +f 20/36/23 15/35/23 16/37/23 +f 21/10/24 20/38/24 16/25/24 +f 17/32/25 140/39/25 13/33/25 +f 17/32/26 161/40/26 167/41/26 +f 18/42/27 22/43/27 17/32/27 +f 19/34/28 23/44/28 18/42/28 +f 20/36/29 24/45/29 19/34/29 +f 21/10/30 25/46/30 20/38/30 +f 23/44/31 26/47/31 22/43/31 +f 28/48/32 23/44/32 24/45/32 +f 25/49/33 28/48/33 24/45/33 +f 21/10/34 29/50/34 25/46/34 +f 26/47/35 161/40/35 22/43/35 +f 26/47/36 138/51/36 163/52/36 +f 27/53/37 30/54/37 26/47/37 +f 28/48/38 31/55/38 27/53/38 +f 29/56/39 32/57/39 28/48/39 +f 21/10/40 33/58/40 29/50/40 +f 36/59/41 31/55/41 32/57/41 +f 37/60/42 32/57/42 33/61/42 +f 21/10/43 37/62/43 33/58/43 +f 34/63/44 138/51/44 30/54/44 +f 31/55/45 34/63/45 30/54/45 +f 38/64/46 139/65/46 34/63/46 +f 35/66/47 38/64/47 34/63/47 +f 36/59/48 39/67/48 35/66/48 +f 37/60/49 40/68/49 36/59/49 +f 21/10/50 41/69/50 37/62/50 +f 41/70/51 44/71/51 40/68/51 +f 21/10/52 45/72/52 41/69/52 +f 42/73/53 152/74/53 38/64/53 +f 43/75/54 38/64/54 39/67/54 +f 44/71/55 39/67/55 40/68/55 +f 46/76/56 150/77/56 42/73/56 +f 43/75/57 46/76/57 42/73/57 +f 44/71/58 47/78/58 43/75/58 +f 49/79/59 44/71/59 45/80/59 +f 21/10/60 49/81/60 45/72/60 +f 53/82/61 48/83/61 49/84/61 +f 21/10/62 53/85/62 49/81/62 +f 50/86/63 149/87/63 46/88/63 +f 47/89/64 50/86/64 46/88/64 +f 48/83/65 51/90/65 47/89/65 +f 54/91/66 151/92/66 50/86/66 +f 51/90/67 54/91/67 50/86/67 +f 56/93/68 51/90/68 52/94/68 +f 53/82/69 56/93/69 52/94/69 +f 21/10/70 57/95/70 53/85/70 +f 21/10/71 61/96/71 57/95/71 +f 54/91/72 164/97/72 157/98/72 +f 59/99/73 54/91/73 55/100/73 +f 60/101/74 55/100/74 56/93/74 +f 61/102/75 56/93/75 57/103/75 +f 62/104/76 164/97/76 58/105/76 +f 63/106/77 58/105/77 59/99/77 +f 64/107/78 59/99/78 60/101/78 +f 61/102/79 64/107/79 60/101/79 +f 21/10/80 65/108/80 61/96/80 +f 21/10/81 69/109/81 65/108/81 +f 66/110/82 159/111/82 62/104/82 +f 67/112/83 62/104/83 63/106/83 +f 68/113/84 63/106/84 64/107/84 +f 69/114/85 64/107/85 65/115/85 +f 71/116/86 66/110/86 67/112/86 +f 72/117/87 67/112/87 68/113/87 +f 69/114/88 72/117/88 68/113/88 +f 21/10/89 73/118/89 69/109/89 +f 70/119/90 158/120/90 66/110/90 +f 74/121/91 169/122/91 70/119/91 +f 71/116/92 74/121/92 70/119/92 +f 76/123/93 71/116/93 72/117/93 +f 73/124/94 76/123/94 72/117/94 +f 21/10/95 77/125/95 73/118/95 +f 76/123/96 79/126/96 75/127/96 +f 81/128/97 76/123/97 77/129/97 +f 21/10/98 81/130/98 77/125/98 +f 78/131/99 153/132/99 74/121/99 +f 79/126/100 74/121/100 75/127/100 +f 82/133/101 144/134/101 78/135/101 +f 83/136/102 78/135/102 79/137/102 +f 84/138/103 79/137/103 80/139/103 +f 81/140/104 84/138/104 80/139/104 +f 21/10/105 85/141/105 81/130/105 +f 84/138/106 87/142/106 83/136/106 +f 89/143/107 84/138/107 85/144/107 +f 21/10/108 89/145/108 85/141/108 +f 86/146/109 154/147/109 82/133/109 +f 87/142/110 82/133/110 83/136/110 +f 90/148/111 155/149/111 86/146/111 +f 91/150/112 86/146/112 87/142/112 +f 92/151/113 87/142/113 88/152/113 +f 93/153/114 88/152/114 89/143/114 +f 21/10/115 93/154/115 89/145/115 +f 97/155/116 92/151/116 93/153/116 +f 21/10/117 97/156/117 93/154/117 +f 94/157/118 165/158/118 90/148/118 +f 95/159/119 90/148/119 91/150/119 +f 92/151/120 95/159/120 91/150/120 +f 98/160/121 166/161/121 94/157/121 +f 99/162/122 94/157/122 95/159/122 +f 96/163/123 99/162/123 95/159/123 +f 101/164/124 96/163/124 97/155/124 +f 21/10/125 101/165/125 97/156/125 +f 105/166/126 100/167/126 101/164/126 +f 21/10/127 105/168/127 101/165/127 +f 102/169/128 162/170/128 98/160/128 +f 103/171/129 98/160/129 99/162/129 +f 104/172/130 99/162/130 100/167/130 +f 106/173/131 168/174/131 102/169/131 +f 103/171/132 106/173/132 102/169/132 +f 108/175/133 103/171/133 104/172/133 +f 109/176/134 104/172/134 105/166/134 +f 21/10/135 109/177/135 105/168/135 +f 21/10/136 113/178/136 109/177/136 +f 110/179/137 148/180/137 106/173/137 +f 111/181/138 106/173/138 107/182/138 +f 108/175/139 111/181/139 107/182/139 +f 113/183/140 108/175/140 109/176/140 +f 115/184/141 110/185/141 111/186/141 +f 116/187/142 111/186/142 112/188/142 +f 117/189/143 112/188/143 113/190/143 +f 21/10/144 117/191/144 113/178/144 +f 114/192/145 143/193/145 110/185/145 +f 118/194/146 156/195/146 114/192/146 +f 119/196/147 114/192/147 115/184/147 +f 116/187/148 119/196/148 115/184/148 +f 121/197/149 116/187/149 117/189/149 +f 21/10/150 121/198/150 117/191/150 +f 123/199/151 118/194/151 119/196/151 +f 124/200/152 119/196/152 120/201/152 +f 125/202/153 120/201/153 121/197/153 +f 21/10/154 125/203/154 121/198/154 +f 122/204/155 147/205/155 118/194/155 +f 126/3/156 146/206/156 122/204/156 +f 127/5/157 122/204/157 123/199/157 +f 128/7/158 123/199/158 124/200/158 +f 129/9/159 124/200/159 125/202/159 +f 21/10/160 129/12/160 125/203/160 +f 131/207/161 132/208/161 130/209/161 +f 133/210/162 136/211/162 132/212/162 +f 137/213/163 134/214/163 136/215/163 +f 135/216/164 130/217/164 134/218/164 +f 136/211/165 130/219/165 132/212/165 +f 133/220/166 146/221/166 160/222/166 +f 159/223/166 158/224/166 131/225/166 +f 1/1/1 145/15/1 160/2/1 +f 2/4/2 1/1/2 126/3/2 +f 3/6/3 2/4/3 127/5/3 +f 4/8/4 3/6/4 128/7/4 +f 5/14/7 142/19/7 145/15/7 +f 2/4/8 6/21/8 5/14/8 +f 7/16/9 6/21/9 2/4/9 +f 8/17/10 7/16/10 3/6/10 +f 9/18/11 141/27/11 142/19/11 +f 10/20/12 9/18/12 5/14/12 +f 11/22/13 10/20/13 6/21/13 +f 12/23/14 11/22/14 7/16/14 +f 9/18/17 13/226/17 140/26/17 +f 14/28/18 13/226/18 9/18/18 +f 15/29/19 14/28/19 10/20/19 +f 16/30/20 15/29/20 11/22/20 +f 14/31/21 18/42/21 17/32/21 +f 19/34/22 18/42/22 14/31/22 +f 20/36/23 19/34/23 15/35/23 +f 17/32/25 167/41/25 140/39/25 +f 17/32/26 22/43/26 161/40/26 +f 18/42/27 23/44/27 22/43/27 +f 19/34/28 24/45/28 23/44/28 +f 20/36/29 25/49/29 24/45/29 +f 23/44/31 27/53/31 26/47/31 +f 28/48/32 27/53/32 23/44/32 +f 25/49/33 29/56/33 28/48/33 +f 26/47/35 163/52/35 161/40/35 +f 26/47/36 30/54/36 138/51/36 +f 27/53/37 31/55/37 30/54/37 +f 28/48/38 32/57/38 31/55/38 +f 29/56/39 33/61/39 32/57/39 +f 36/59/41 35/66/41 31/55/41 +f 37/60/42 36/59/42 32/57/42 +f 34/63/44 139/65/44 138/51/44 +f 31/55/45 35/66/45 34/63/45 +f 38/64/46 152/74/46 139/65/46 +f 35/66/47 39/67/47 38/64/47 +f 36/59/48 40/68/48 39/67/48 +f 37/60/49 41/70/49 40/68/49 +f 41/70/51 45/80/51 44/71/51 +f 42/73/53 150/77/53 152/74/53 +f 43/75/54 42/73/54 38/64/54 +f 44/71/167 43/75/167 39/67/167 +f 46/76/56 149/227/56 150/77/56 +f 43/75/57 47/78/57 46/76/57 +f 44/71/58 48/228/58 47/78/58 +f 49/79/59 48/228/59 44/71/59 +f 53/82/61 52/94/61 48/83/61 +f 50/86/63 151/92/63 149/87/63 +f 47/89/64 51/90/64 50/86/64 +f 48/83/65 52/94/65 51/90/65 +f 54/91/66 157/98/66 151/92/66 +f 51/90/67 55/100/67 54/91/67 +f 56/93/68 55/100/68 51/90/68 +f 53/82/69 57/103/69 56/93/69 +f 54/91/72 58/105/72 164/97/72 +f 59/99/73 58/105/73 54/91/73 +f 60/101/74 59/99/74 55/100/74 +f 61/102/75 60/101/75 56/93/75 +f 62/104/76 159/111/76 164/97/76 +f 63/106/77 62/104/77 58/105/77 +f 64/107/78 63/106/78 59/99/78 +f 61/102/79 65/115/79 64/107/79 +f 66/110/82 158/120/82 159/111/82 +f 67/112/83 66/110/83 62/104/83 +f 68/113/84 67/112/84 63/106/84 +f 69/114/85 68/113/85 64/107/85 +f 71/116/86 70/119/86 66/110/86 +f 72/117/87 71/116/87 67/112/87 +f 69/114/88 73/124/88 72/117/88 +f 70/119/90 169/122/90 158/120/90 +f 74/121/91 153/132/91 169/122/91 +f 71/116/92 75/127/92 74/121/92 +f 76/123/168 75/127/168 71/116/168 +f 73/124/94 77/129/94 76/123/94 +f 76/123/96 80/229/96 79/126/96 +f 81/128/97 80/229/97 76/123/97 +f 78/131/99 144/230/99 153/132/99 +f 79/126/100 78/131/100 74/121/100 +f 82/133/101 154/147/101 144/134/101 +f 83/136/102 82/133/102 78/135/102 +f 84/138/103 83/136/103 79/137/103 +f 81/140/104 85/144/104 84/138/104 +f 84/138/106 88/152/106 87/142/106 +f 89/143/107 88/152/107 84/138/107 +f 86/146/109 155/149/109 154/147/109 +f 87/142/110 86/146/110 82/133/110 +f 90/148/111 165/158/111 155/149/111 +f 91/150/112 90/148/112 86/146/112 +f 92/151/113 91/150/113 87/142/113 +f 93/153/114 92/151/114 88/152/114 +f 97/155/116 96/163/116 92/151/116 +f 94/157/118 166/161/118 165/158/118 +f 95/159/119 94/157/119 90/148/119 +f 92/151/120 96/163/120 95/159/120 +f 98/160/121 162/170/121 166/161/121 +f 99/162/122 98/160/122 94/157/122 +f 96/163/123 100/167/123 99/162/123 +f 101/164/124 100/167/124 96/163/124 +f 105/166/126 104/172/126 100/167/126 +f 102/169/128 168/174/128 162/170/128 +f 103/171/129 102/169/129 98/160/129 +f 104/172/130 103/171/130 99/162/130 +f 106/173/131 148/180/131 168/174/131 +f 103/171/132 107/182/132 106/173/132 +f 108/175/133 107/182/133 103/171/133 +f 109/176/134 108/175/134 104/172/134 +f 110/179/137 143/231/137 148/180/137 +f 111/181/138 110/179/138 106/173/138 +f 108/175/139 112/232/139 111/181/139 +f 113/183/140 112/232/140 108/175/140 +f 115/184/141 114/192/141 110/185/141 +f 116/187/142 115/184/142 111/186/142 +f 117/189/143 116/187/143 112/188/143 +f 114/192/145 156/195/145 143/193/145 +f 118/194/146 147/205/146 156/195/146 +f 119/196/147 118/194/147 114/192/147 +f 116/187/169 120/201/169 119/196/169 +f 121/197/149 120/201/149 116/187/149 +f 123/199/151 122/204/151 118/194/151 +f 124/200/152 123/199/152 119/196/152 +f 125/202/153 124/200/153 120/201/153 +f 122/204/155 146/206/155 147/205/155 +f 126/3/156 160/2/156 146/206/156 +f 127/5/157 126/3/157 122/204/157 +f 128/7/158 127/5/158 123/199/158 +f 129/9/159 128/7/159 124/200/159 +f 131/207/161 133/233/161 132/208/161 +f 133/210/162 137/234/162 136/211/162 +f 137/213/163 135/235/163 134/214/163 +f 135/216/164 131/236/164 130/217/164 +f 136/211/165 134/237/165 130/219/165 +f 133/220/166 131/238/166 166/239/166 +f 133/220/166 166/239/166 162/240/166 +f 138/241/166 135/242/166 137/243/166 +f 163/244/166 138/241/166 137/243/166 +f 133/220/166 162/240/166 168/245/166 +f 133/220/166 168/245/166 148/246/166 +f 161/247/166 163/244/166 137/243/166 +f 167/248/166 161/247/166 137/243/166 +f 133/220/166 148/246/166 143/249/166 +f 133/220/166 143/249/166 156/250/166 +f 140/251/166 167/248/166 137/243/166 +f 141/252/166 140/251/166 137/243/166 +f 137/243/166 133/220/166 160/222/166 +f 133/220/166 156/250/166 147/253/166 +f 142/254/166 141/252/166 137/243/166 +f 145/255/166 142/254/166 137/243/166 +f 133/220/166 147/253/166 146/221/166 +f 160/222/166 145/255/166 137/243/166 +f 135/256/166 138/257/166 139/258/166 +f 135/256/166 139/258/166 152/259/166 +f 165/260/166 166/261/166 131/225/166 +f 155/262/166 165/260/166 131/225/166 +f 135/256/166 152/259/166 150/263/166 +f 135/256/166 150/263/166 149/264/166 +f 154/265/166 155/262/166 131/225/166 +f 144/266/166 154/265/166 131/225/166 +f 135/256/166 149/264/166 151/267/166 +f 135/256/166 151/267/166 157/268/166 +f 153/269/166 144/266/166 131/225/166 +f 169/270/166 153/269/166 131/225/166 +f 131/225/166 135/256/166 159/223/166 +f 135/256/166 157/268/166 164/271/166 +f 158/224/166 169/270/166 131/225/166 +f 135/256/166 164/271/166 159/223/166 diff --git a/examples/pybullet/gym/pybullet_data/toys/concave_box.urdf b/examples/pybullet/gym/pybullet_data/toys/concave_box.urdf new file mode 100644 index 000000000..c2180ccdd --- /dev/null +++ b/examples/pybullet/gym/pybullet_data/toys/concave_box.urdf @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/pybullet/gym/pybullet_data/toys/cube.mtl b/examples/pybullet/gym/pybullet_data/toys/cube.mtl new file mode 100644 index 000000000..c221299b1 --- /dev/null +++ b/examples/pybullet/gym/pybullet_data/toys/cube.mtl @@ -0,0 +1,11 @@ +# Blender MTL File: 'shape_sort.blend' +# Material Count: 1 + +newmtl Material.002 +Ns 96.078431 +Ka 0.000000 0.000000 0.000000 +Kd 0.017444 0.640000 0.032216 +Ks 0.034126 0.500000 0.031333 +Ni 1.000000 +d 1.000000 +illum 2 diff --git a/examples/pybullet/gym/pybullet_data/toys/cube.obj b/examples/pybullet/gym/pybullet_data/toys/cube.obj new file mode 100644 index 000000000..c2849fe05 --- /dev/null +++ b/examples/pybullet/gym/pybullet_data/toys/cube.obj @@ -0,0 +1,64 @@ +# Blender v2.71 (sub 0) OBJ File: 'shape_sort.blend' +# www.blender.org +mtllib cube.mtl +o Cube.001_Cube.002 +v -0.231854 0.040516 -0.056463 +v -0.231854 0.040516 -0.121937 +v -0.144556 0.040516 -0.121937 +v -0.144556 0.040516 -0.056463 +v -0.231854 0.127815 -0.056463 +v -0.231854 0.127815 -0.121937 +v -0.144556 0.127815 -0.121937 +v -0.144556 0.127815 -0.056463 +v -0.231854 0.040516 -0.056463 +v -0.231854 0.040516 -0.121937 +v -0.144556 0.040516 -0.121937 +v -0.144556 0.040516 -0.056463 +v -0.231854 0.127815 -0.056463 +v -0.231854 0.127815 -0.121937 +v -0.144556 0.127815 -0.121937 +v -0.144556 0.127815 -0.056463 +vt 1.044600 0.042083 +vt 1.044600 -0.957917 +vt 0.044600 -0.957917 +vt 1.905897 0.042083 +vt 1.905897 -0.957917 +vt 0.905898 -0.957917 +vt -0.955400 0.042083 +vt -0.955400 -0.957917 +vt -0.094102 0.042083 +vt -0.094102 -0.957917 +vt 0.905898 1.044600 +vt 1.905897 1.044600 +vt 1.905897 0.044600 +vt -0.094102 1.044600 +vt -0.094102 0.044600 +vt 0.044600 0.042083 +vt 0.905898 0.042083 +vt 0.905898 0.044600 +usemtl Material.002 +s off +f 6/1 2/2 1/3 +f 7/4 3/5 2/6 +f 8/7 4/8 3/3 +f 5/9 1/10 4/6 +f 2/11 3/12 4/13 +f 7/11 6/14 5/15 +f 14/1 10/2 9/3 +f 15/4 11/5 10/6 +f 16/7 12/8 11/3 +f 13/9 9/10 12/6 +f 10/11 11/12 12/13 +f 15/11 14/14 13/15 +f 5/16 6/1 1/3 +f 6/17 7/4 2/6 +f 7/16 8/7 3/3 +f 8/17 5/9 4/6 +f 1/18 2/11 4/13 +f 8/18 7/11 5/15 +f 13/16 14/1 9/3 +f 14/17 15/4 10/6 +f 15/16 16/7 11/3 +f 16/17 13/9 12/6 +f 9/18 10/11 12/13 +f 16/18 15/11 13/15 diff --git a/examples/pybullet/gym/pybullet_data/toys/cylinder.mtl b/examples/pybullet/gym/pybullet_data/toys/cylinder.mtl new file mode 100644 index 000000000..3efd48560 --- /dev/null +++ b/examples/pybullet/gym/pybullet_data/toys/cylinder.mtl @@ -0,0 +1,11 @@ +# Blender MTL File: 'shape_sort.blend' +# Material Count: 1 + +newmtl Material.001 +Ns 96.078431 +Ka 0.000000 0.000000 0.000000 +Kd 0.013473 0.018536 0.640000 +Ks 0.500000 0.500000 0.500000 +Ni 1.000000 +d 1.000000 +illum 2 diff --git a/examples/pybullet/gym/pybullet_data/toys/cylinder.obj b/examples/pybullet/gym/pybullet_data/toys/cylinder.obj new file mode 100644 index 000000000..b2abf963d --- /dev/null +++ b/examples/pybullet/gym/pybullet_data/toys/cylinder.obj @@ -0,0 +1,282 @@ +# Blender v2.71 (sub 0) OBJ File: 'shape_sort.blend' +# www.blender.org +mtllib cylinder.mtl +o Cylinder.001 +v -0.291246 0.045696 0.165546 +v -0.214241 0.045696 0.165546 +v -0.291246 0.034429 0.166100 +v -0.214241 0.034429 0.166100 +v -0.291246 0.023595 0.167744 +v -0.214241 0.023595 0.167744 +v -0.291246 0.013610 0.170412 +v -0.214241 0.013610 0.170412 +v -0.291246 0.004859 0.174003 +v -0.214241 0.004858 0.174003 +v -0.291246 -0.002324 0.178379 +v -0.214241 -0.002324 0.178379 +v -0.291246 -0.007661 0.183372 +v -0.214241 -0.007661 0.183372 +v -0.291246 -0.010947 0.188789 +v -0.214241 -0.010947 0.188789 +v -0.291246 -0.012057 0.194422 +v -0.214241 -0.012057 0.194422 +v -0.291246 -0.010947 0.200056 +v -0.214241 -0.010947 0.200056 +v -0.291246 -0.007661 0.205473 +v -0.214241 -0.007661 0.205473 +v -0.291246 -0.002324 0.210465 +v -0.214241 -0.002324 0.210465 +v -0.291246 0.004859 0.214841 +v -0.214241 0.004858 0.214841 +v -0.291246 0.013610 0.218432 +v -0.214241 0.013610 0.218432 +v -0.291246 0.023595 0.221101 +v -0.214241 0.023595 0.221101 +v -0.291246 0.034429 0.222744 +v -0.214241 0.034429 0.222744 +v -0.291246 0.045696 0.223299 +v -0.214241 0.045696 0.223299 +v -0.291246 0.056963 0.222744 +v -0.214241 0.056963 0.222744 +v -0.291246 0.067797 0.221101 +v -0.214241 0.067797 0.221101 +v -0.291246 0.077782 0.218432 +v -0.214241 0.077782 0.218432 +v -0.291246 0.086534 0.214841 +v -0.214241 0.086534 0.214841 +v -0.291246 0.093716 0.210465 +v -0.214241 0.093716 0.210465 +v -0.291246 0.099053 0.205473 +v -0.214241 0.099053 0.205473 +v -0.291246 0.102340 0.200056 +v -0.214241 0.102340 0.200056 +v -0.291246 0.103449 0.194422 +v -0.214241 0.103449 0.194422 +v -0.291246 0.102340 0.188789 +v -0.214241 0.102340 0.188789 +v -0.291246 0.099053 0.183371 +v -0.214241 0.099053 0.183371 +v -0.291246 0.093716 0.178379 +v -0.214241 0.093716 0.178379 +v -0.291246 0.086534 0.174003 +v -0.214241 0.086534 0.174003 +v -0.291246 0.077782 0.170412 +v -0.214241 0.077782 0.170412 +v -0.291246 0.067797 0.167744 +v -0.214241 0.067797 0.167744 +v -0.291246 0.056963 0.166100 +v -0.214241 0.056963 0.166100 +vt 0.306049 0.488177 +vt 0.092448 0.519423 +vt 0.067655 0.516411 +vt 0.270128 0.485165 +vt 0.049219 0.513369 +vt 0.232794 0.482123 +vt 0.034123 0.510414 +vt 0.020864 0.507658 +vt 0.163092 0.476412 +vt 0.008587 0.505209 +vt 0.133302 0.473963 +vt 1.008587 0.505209 +vt 0.996728 0.503160 +vt 1.106812 0.471914 +vt 0.984865 0.501590 +vt 1.082707 0.470344 +vt 0.972628 0.500559 +vt 0.959652 0.500107 +vt 1.036012 0.468861 +vt 0.945535 0.500252 +vt 1.008811 0.469006 +vt 0.929810 0.500987 +vt 0.972352 0.469741 +vt 0.911918 0.502285 +vt 0.913273 0.471038 +vt 0.891203 0.504095 +vt 0.866959 0.506348 +vt 0.698338 0.475102 +vt 0.838607 0.508958 +vt 0.630535 0.477711 +vt 0.806049 0.511823 +vt 0.592448 0.480577 +vt 0.770128 0.514835 +vt 0.732794 0.517877 +vt 0.549219 0.486631 +vt 0.696491 0.520833 +vt 0.534123 0.489586 +vt 0.663092 0.523588 +vt 0.520864 0.492342 +vt 0.633302 0.526037 +vt 0.508586 0.494791 +vt 0.606812 0.528086 +vt 0.496728 0.496840 +vt 0.582707 0.529656 +vt 0.559695 0.530687 +vt 0.472628 0.499441 +vt 0.536012 0.531139 +vt 0.459652 0.499893 +vt 0.508810 0.530994 +vt 0.445535 0.499748 +vt 0.472352 0.530259 +vt 0.413273 0.528962 +vt 0.411918 0.497715 +vt 0.310810 0.527152 +vt 0.391202 0.495905 +vt 0.198337 0.524898 +vt 1.020864 0.507658 +vt 1.034123 0.510414 +vt 0.130535 0.522289 +vt 0.366959 0.493652 +vt 1.391202 0.495905 +vt 0.196491 0.479167 +vt 1.133302 0.473963 +vt 1.059695 0.469313 +vt 0.810811 0.472848 +vt 0.567655 0.483589 +vt 0.484865 0.498410 +vt 0.429810 0.499013 +vt 1.092448 0.519423 +vt 1.067655 0.516411 +vt 1.198337 0.524898 +vt 1.413273 0.528962 +vt 1.310810 0.527152 +vt 1.472352 0.530259 +vt 1.130535 0.522289 +vt 1.049219 0.513369 +vt 0.338607 0.491042 +vt 1.270128 0.485165 +vt 1.306049 0.488177 +vt 1.196491 0.479167 +vt 1.232794 0.482123 +vt 1.163092 0.476412 +vt 1.366959 0.493652 +vt 1.338607 0.491042 +vt 1.429810 0.499013 +vt 1.411918 0.497715 +vt 1.445535 0.499748 +vt 1.459652 0.499893 +usemtl Material.001 +s off +f 1/1 2/2 4/3 +f 3/4 4/3 6/5 +f 5/6 6/5 8/7 +f 8/7 10/8 9/9 +f 10/8 12/10 11/11 +f 12/12 14/13 13/14 +f 14/13 16/15 15/16 +f 15/16 16/15 18/17 +f 18/17 20/18 19/19 +f 20/18 22/20 21/21 +f 22/20 24/22 23/23 +f 24/22 26/24 25/25 +f 25/25 26/24 28/26 +f 28/26 30/27 29/28 +f 30/27 32/29 31/30 +f 32/29 34/31 33/32 +f 33/32 34/31 36/33 +f 36/33 38/34 37/35 +f 38/34 40/36 39/37 +f 40/36 42/38 41/39 +f 42/38 44/40 43/41 +f 44/40 46/42 45/43 +f 45/43 46/42 48/44 +f 48/44 50/45 49/46 +f 50/45 52/47 51/48 +f 52/47 54/49 53/50 +f 53/50 54/49 56/51 +f 56/51 58/52 57/53 +f 58/52 60/54 59/55 +f 59/55 60/54 62/56 +f 26/24 10/57 8/58 +f 64/59 2/2 1/1 +f 61/60 62/56 64/59 +f 37/35 39/37 59/61 +f 3/4 1/1 4/3 +f 5/6 3/4 6/5 +f 7/62 5/6 8/7 +f 7/62 8/7 9/9 +f 9/9 10/8 11/11 +f 11/63 12/12 13/14 +f 13/14 14/13 15/16 +f 17/64 15/16 18/17 +f 17/64 18/17 19/19 +f 19/19 20/18 21/21 +f 21/21 22/20 23/23 +f 23/23 24/22 25/25 +f 27/65 25/25 28/26 +f 27/65 28/26 29/28 +f 29/28 30/27 31/30 +f 31/30 32/29 33/32 +f 35/66 33/32 36/33 +f 35/66 36/33 37/35 +f 37/35 38/34 39/37 +f 39/37 40/36 41/39 +f 41/39 42/38 43/41 +f 43/41 44/40 45/43 +f 47/67 45/43 48/44 +f 47/67 48/44 49/46 +f 49/46 50/45 51/48 +f 51/48 52/47 53/50 +f 55/68 53/50 56/51 +f 55/68 56/51 57/53 +f 57/53 58/52 59/55 +f 61/60 59/55 62/56 +f 2/69 34/31 4/70 +f 38/34 36/33 62/71 +f 58/72 40/36 60/73 +f 54/49 44/40 56/74 +f 50/45 48/44 52/47 +f 46/42 54/49 48/44 +f 14/13 22/20 20/18 +f 12/12 10/57 24/22 +f 2/69 64/75 34/31 +f 30/27 6/76 32/29 +f 26/24 8/58 28/26 +f 63/77 61/60 64/59 +f 64/75 36/33 34/31 +f 14/13 20/18 16/15 +f 44/40 42/38 56/74 +f 40/36 38/34 60/73 +f 38/34 62/71 60/73 +f 10/57 26/24 24/22 +f 48/44 54/49 52/47 +f 34/31 32/29 4/70 +f 8/58 6/76 28/26 +f 54/49 46/42 44/40 +f 20/18 18/17 16/15 +f 42/38 58/72 56/74 +f 63/77 64/59 1/1 +f 32/29 6/76 4/70 +f 12/12 24/22 14/13 +f 58/72 42/38 40/36 +f 36/33 64/75 62/71 +f 24/22 22/20 14/13 +f 6/76 30/27 28/26 +f 3/78 31/30 1/79 +f 7/80 29/28 5/81 +f 11/63 23/23 9/82 +f 15/16 21/21 13/14 +f 15/16 17/64 19/19 +f 61/83 63/84 35/66 +f 27/65 7/80 25/25 +f 41/39 55/85 57/86 +f 35/66 63/84 33/32 +f 53/87 55/85 43/41 +f 43/41 55/85 41/39 +f 47/67 53/87 45/43 +f 47/67 49/46 51/88 +f 59/61 39/37 57/86 +f 29/28 31/30 5/81 +f 7/80 27/65 29/28 +f 45/43 53/87 43/41 +f 47/67 51/88 53/87 +f 61/83 37/35 59/61 +f 31/30 3/78 5/81 +f 15/16 19/19 21/21 +f 21/21 23/23 13/14 +f 39/37 41/39 57/86 +f 7/80 9/82 25/25 +f 1/79 31/30 33/32 +f 23/23 11/63 13/14 +f 9/82 23/23 25/25 +f 37/35 61/83 35/66 +f 63/84 1/79 33/32 diff --git a/examples/pybullet/gym/pybullet_data/toys/prism.mtl b/examples/pybullet/gym/pybullet_data/toys/prism.mtl new file mode 100644 index 000000000..ed3e8a1ae --- /dev/null +++ b/examples/pybullet/gym/pybullet_data/toys/prism.mtl @@ -0,0 +1,11 @@ +# Blender MTL File: 'shape_sort.blend' +# Material Count: 1 + +newmtl Material.003 +Ns 96.078431 +Ka 0.000000 0.000000 0.000000 +Kd 0.640000 0.007339 0.006282 +Ks 0.500000 0.500000 0.500000 +Ni 1.000000 +d 1.000000 +illum 2 diff --git a/examples/pybullet/gym/pybullet_data/toys/prism.obj b/examples/pybullet/gym/pybullet_data/toys/prism.obj new file mode 100644 index 000000000..b8b0d6f0f --- /dev/null +++ b/examples/pybullet/gym/pybullet_data/toys/prism.obj @@ -0,0 +1,45 @@ +# Blender v2.71 (sub 0) OBJ File: 'shape_sort.blend' +# www.blender.org +mtllib prism.mtl +o Cube.002_Cube.005 +v -0.233641 -0.103557 0.060897 +v -0.233641 -0.103557 -0.057063 +v -0.149383 -0.103557 -0.057063 +v -0.149383 -0.103557 0.060897 +v -0.233013 -0.039217 0.035115 +v -0.233013 -0.039217 -0.031280 +v -0.150011 -0.039217 -0.031280 +v -0.150011 -0.039217 0.035115 +vt 0.780473 0.523151 +vt 0.999041 -0.022288 +vt -0.000959 -0.022288 +vt 1.896793 0.523151 +vt 1.904244 -0.022288 +vt 0.904244 -0.022288 +vt 0.217610 0.523151 +vt -0.088305 0.523151 +vt -0.095756 -0.022288 +vt 0.904244 1.999041 +vt 1.904244 1.999041 +vt 1.904244 0.999041 +vt 0.896793 0.780473 +vt -0.088305 0.780473 +vt -0.088305 0.217610 +vt 0.911695 0.523151 +vt 0.896793 0.523151 +vt 0.904244 0.999041 +vt 0.896793 0.217610 +usemtl Material.003 +s off +f 6/1 2/2 1/3 +f 7/4 3/5 2/6 +f 8/7 4/3 3/2 +f 5/8 1/9 4/6 +f 2/10 3/11 4/12 +f 7/13 6/14 5/15 +f 5/7 6/1 1/3 +f 6/16 7/4 2/6 +f 7/1 8/7 3/2 +f 8/17 5/8 4/6 +f 1/18 2/10 4/12 +f 8/19 7/13 5/15 diff --git a/examples/pybullet/gym/pybullet_data/toys/shape_sorter.mtl b/examples/pybullet/gym/pybullet_data/toys/shape_sorter.mtl new file mode 100644 index 000000000..4e5935766 --- /dev/null +++ b/examples/pybullet/gym/pybullet_data/toys/shape_sorter.mtl @@ -0,0 +1,21 @@ +# Blender MTL File: 'shape_sort.blend' +# Material Count: 2 + +newmtl Material.004 +Ns 96.078431 +Ka 0.000000 0.000000 0.000000 +Kd 0.640000 0.640000 0.640000 +Ks 0.500000 0.500000 0.500000 +Ni 1.000000 +d 1.000000 +illum 2 +map_Kd E:\develop\bullet3\data\table\table.png + +newmtl Material.004_NONE +Ns 96.078431 +Ka 0.000000 0.000000 0.000000 +Kd 0.640000 0.640000 0.640000 +Ks 0.500000 0.500000 0.500000 +Ni 1.000000 +d 1.000000 +illum 2 diff --git a/examples/pybullet/gym/pybullet_data/toys/shape_sorter.obj b/examples/pybullet/gym/pybullet_data/toys/shape_sorter.obj new file mode 100644 index 000000000..a8b6dfd84 --- /dev/null +++ b/examples/pybullet/gym/pybullet_data/toys/shape_sorter.obj @@ -0,0 +1,400 @@ +# Blender v2.71 (sub 0) OBJ File: 'shape_sort.blend' +# www.blender.org +mtllib shape_sorter.mtl +o Cube +v -0.200000 0.200000 -0.200000 +v -0.200000 -0.200000 -0.200000 +v -0.200000 0.037707 -0.055248 +v -0.200000 0.037707 -0.124929 +v -0.200000 0.130615 -0.124929 +v -0.200000 0.130615 -0.055248 +v -0.200000 -0.200000 0.200000 +v -0.200000 0.014752 0.076444 +v -0.200000 -0.109627 0.071917 +v -0.200000 -0.109627 -0.068083 +v -0.200000 -0.033266 -0.037483 +v -0.200000 -0.033266 0.041318 +v -0.200000 0.015905 0.070592 +v -0.200000 0.019320 0.064964 +v -0.200000 0.024864 0.059777 +v -0.200000 0.032326 0.055231 +v -0.200000 0.041418 0.051500 +v -0.200000 0.051791 0.048728 +v -0.200000 0.063047 0.047021 +v -0.200000 0.074753 0.046444 +v -0.200000 0.086458 0.047021 +v -0.200000 0.097713 0.048728 +v -0.200000 0.108087 0.051500 +v -0.200000 0.117179 0.055231 +v -0.200000 0.124641 0.059777 +v -0.200000 0.130185 0.064964 +v -0.200000 0.133600 0.070592 +v -0.200000 0.200000 0.200000 +v 0.200000 0.200000 -0.200000 +v 0.200000 -0.200000 -0.200000 +v -0.179938 0.037707 -0.055248 +v -0.179938 0.037707 -0.124929 +v -0.179938 0.130615 -0.124929 +v -0.179938 0.130615 -0.055248 +v -0.179938 0.200000 0.179938 +v -0.179938 0.200000 -0.179938 +v 0.179938 0.200000 -0.179938 +v 0.200000 -0.200000 0.200000 +v -0.200000 0.134752 0.076444 +v -0.200000 0.133600 0.082297 +v -0.200000 0.130185 0.087925 +v -0.200000 0.124641 0.093111 +v -0.200000 0.117179 0.097657 +v -0.200000 0.108087 0.101388 +v -0.200000 0.097714 0.104161 +v -0.200000 0.086458 0.105868 +v -0.200000 0.074753 0.106444 +v -0.200000 0.063047 0.105868 +v -0.200000 0.051792 0.104161 +v -0.200000 0.041418 0.101388 +v -0.200000 0.032326 0.097657 +v -0.200000 0.024864 0.093111 +v -0.200000 0.019320 0.087925 +v -0.200000 0.015905 0.082297 +v -0.179938 0.014752 0.076444 +v -0.179938 0.015905 0.070592 +v -0.179938 0.019320 0.064964 +v -0.179938 0.024864 0.059777 +v -0.179938 0.032326 0.055231 +v -0.179938 0.041418 0.051500 +v -0.179938 0.051791 0.048728 +v -0.179938 0.063047 0.047021 +v -0.179938 0.074752 0.046444 +v -0.179938 0.086458 0.047021 +v -0.179938 0.097713 0.048728 +v -0.179938 0.108087 0.051500 +v -0.179938 0.117179 0.055231 +v -0.179938 0.124641 0.059777 +v -0.179938 0.130185 0.064964 +v -0.179938 0.133600 0.070592 +v 0.200000 0.200000 0.200000 +v -0.179938 -0.185168 -0.179938 +v 0.179938 0.200000 0.179938 +v -0.179938 -0.185168 0.179938 +v -0.179938 0.015905 0.082297 +v -0.179938 0.019320 0.087925 +v -0.179938 0.024864 0.093111 +v -0.179938 0.032326 0.097657 +v -0.179938 0.041418 0.101388 +v -0.179938 0.051791 0.104161 +v -0.179938 0.063047 0.105868 +v -0.179938 0.074753 0.106444 +v -0.179938 0.086458 0.105868 +v -0.179938 0.097714 0.104161 +v -0.179938 0.108087 0.101388 +v -0.179938 0.117179 0.097657 +v -0.179938 0.124641 0.093111 +v -0.179938 0.130185 0.087925 +v -0.179938 0.133600 0.082297 +v -0.179938 0.134752 0.076444 +v 0.179938 -0.185168 -0.179938 +v -0.179938 -0.109627 0.071917 +v -0.179938 -0.033266 0.041318 +v -0.179938 -0.033266 -0.037483 +v -0.179938 -0.109627 -0.068083 +v 0.179938 -0.185168 0.179938 +vt 0.337529 0.596545 +vt 0.387821 0.596545 +vt 0.283346 0.663317 +vt 0.379674 0.386434 +vt 0.283346 0.278382 +vt 0.572047 0.278383 +vt 0.387821 0.507137 +vt 0.461218 0.542787 +vt 0.461634 0.554051 +vt 0.372847 0.595850 +vt 0.372847 0.369934 +vt 0.391646 0.506894 +vt 0.343069 0.506894 +vt 0.337529 0.507137 +vt 0.343069 0.593253 +vt 0.391646 0.593253 +vt 0.304720 0.657748 +vt 0.378834 0.597878 +vt 0.542284 0.369934 +vt 0.572047 0.663317 +vt 0.504523 0.542787 +vt 0.504107 0.531523 +vt 0.482871 0.485047 +vt 0.483455 0.485557 +vt 0.479374 0.486628 +vt 0.478646 0.486156 +vt 0.475451 0.489802 +vt 0.474584 0.489442 +vt 0.471835 0.494956 +vt 0.467560 0.501959 +vt 0.470841 0.494778 +vt 0.468666 0.501892 +vt 0.466065 0.510343 +vt 0.462866 0.520691 +vt 0.464867 0.510708 +vt 0.461634 0.531522 +vt 0.464132 0.519985 +vt 0.462942 0.530448 +vt 0.462540 0.541328 +vt 0.462942 0.552208 +vt 0.462866 0.564883 +vt 0.464132 0.562671 +vt 0.466065 0.572313 +vt 0.467560 0.583615 +vt 0.464867 0.574866 +vt 0.468666 0.580764 +vt 0.471835 0.587700 +vt 0.474584 0.596132 +vt 0.470841 0.590796 +vt 0.475451 0.592854 +vt 0.479374 0.596028 +vt 0.542284 0.595850 +vt 0.304720 0.299726 +vt 0.555605 0.657748 +vt 0.504369 0.541328 +vt 0.503967 0.552209 +vt 0.378834 0.375736 +vt 0.383150 0.371876 +vt 0.555605 0.299726 +vt 0.478646 0.599418 +vt 0.483455 0.597099 +vt 0.482870 0.600527 +vt 0.487535 0.596028 +vt 0.487095 0.599418 +vt 0.491458 0.592854 +vt 0.491157 0.596132 +vt 0.495074 0.587700 +vt 0.494900 0.590796 +vt 0.498243 0.580764 +vt 0.498181 0.583615 +vt 0.500844 0.572313 +vt 0.502875 0.564883 +vt 0.500874 0.574866 +vt 0.502777 0.562671 +vt 0.504107 0.554052 +vt 0.503967 0.530448 +vt 0.502777 0.519985 +vt 0.502875 0.520691 +vt 0.500844 0.510343 +vt 0.500874 0.510708 +vt 0.498243 0.501892 +vt 0.498181 0.501959 +vt 0.495074 0.494956 +vt 0.494900 0.494778 +vt 0.491458 0.489802 +vt 0.491157 0.489442 +vt 0.487535 0.486628 +vt 0.487095 0.486156 +vt 0.534501 0.375736 +vt 0.534501 0.597878 +vt 0.478009 0.388189 +vt 0.400119 0.458779 +vt 0.457642 0.460616 +vt 0.480077 0.374691 +vt 0.459415 0.445604 +vt 0.404578 0.442049 +vt 0.000000 0.000000 +usemtl Material.004 +s off +f 5/1 6/2 1/3 +f 10/4 2/5 7/6 +f 3/7 20/8 21/9 +f 29/10 30/11 2/5 +f 3/7 31/12 32/13 +f 4/14 32/13 33/15 +f 34/16 6/2 5/1 +f 36/17 37/18 29/10 +f 31/12 3/7 6/2 +f 2/5 30/11 38/19 +f 28/20 47/21 48/22 +f 8/23 55/24 56/25 +f 13/26 56/25 57/27 +f 14/28 57/27 58/29 +f 16/30 15/31 58/29 +f 16/30 59/32 60/33 +f 18/34 17/35 60/33 +f 19/36 18/34 61/37 +f 20/8 19/36 62/38 +f 20/8 63/39 64/40 +f 22/41 21/9 64/40 +f 22/41 65/42 66/43 +f 24/44 23/45 66/43 +f 24/44 67/46 68/47 +f 26/48 25/49 68/47 +f 26/48 69/50 70/51 +f 71/52 38/19 30/11 +f 32/13 31/12 72/53 +f 71/52 29/10 37/18 +f 35/54 82/55 83/56 +f 36/17 72/53 91/57 +f 62/38 61/37 31/12 +f 95/58 74/59 72/53 +f 28/20 7/6 38/19 +f 27/60 70/51 90/61 +f 39/62 90/61 89/63 +f 40/64 89/63 88/65 +f 41/66 88/65 87/67 +f 42/68 87/67 86/69 +f 43/70 86/69 85/71 +f 45/72 44/73 85/71 +f 45/72 84/74 83/56 +f 46/75 83/56 82/55 +f 47/21 82/55 81/76 +f 48/22 81/76 80/77 +f 49/78 80/77 79/79 +f 50/80 79/79 78/81 +f 51/82 78/81 77/83 +f 52/84 77/83 76/85 +f 53/86 76/85 75/87 +f 54/88 75/87 55/24 +f 37/18 91/57 96/89 +f 73/90 96/89 74/59 +f 74/59 96/89 91/57 +f 2/5 3/7 4/14 +f 7/6 8/23 9/91 +f 1/3 2/5 4/14 +f 1/3 4/14 5/1 +f 10/4 11/92 3/7 +f 9/91 10/4 7/6 +f 10/4 3/7 2/5 +f 12/93 16/30 11/92 +f 28/20 1/3 6/2 +f 12/93 9/91 8/23 +f 27/60 28/20 6/2 +f 14/28 15/31 12/93 +f 12/93 8/23 13/26 +f 26/48 27/60 6/2 +f 12/93 13/26 14/28 +f 25/49 26/48 6/2 +f 1/3 29/10 2/5 +f 24/44 25/49 6/2 +f 3/7 16/30 17/35 +f 23/45 24/44 6/2 +f 3/7 17/35 18/34 +f 22/41 23/45 6/2 +f 3/7 18/34 19/36 +f 21/9 22/41 6/2 +f 16/30 3/7 11/92 +f 6/2 3/7 21/9 +f 12/93 15/31 16/30 +f 4/14 3/7 32/13 +f 3/7 19/36 20/8 +f 5/1 4/14 33/15 +f 33/15 34/16 5/1 +f 1/3 28/20 35/54 +f 34/16 31/12 6/2 +f 1/3 35/54 36/17 +f 36/17 29/10 1/3 +f 7/6 2/5 38/19 +f 28/20 27/60 39/62 +f 54/88 8/23 7/6 +f 28/20 39/62 40/64 +f 53/86 54/88 7/6 +f 28/20 40/64 41/66 +f 52/84 53/86 7/6 +f 28/20 41/66 42/68 +f 51/82 52/84 7/6 +f 28/20 42/68 43/70 +f 50/80 51/82 7/6 +f 28/20 43/70 44/73 +f 49/78 50/80 7/6 +f 44/73 45/72 28/20 +f 7/6 28/20 49/78 +f 28/20 45/72 46/75 +f 14/28 13/26 57/27 +f 13/26 8/23 56/25 +f 28/20 48/22 49/78 +f 28/20 46/75 47/21 +f 15/31 14/28 58/29 +f 59/32 16/30 58/29 +f 17/35 16/30 60/33 +f 61/37 18/34 60/33 +f 62/38 19/36 61/37 +f 63/39 20/8 62/38 +f 21/9 20/8 64/40 +f 65/42 22/41 64/40 +f 23/45 22/41 66/43 +f 67/46 24/44 66/43 +f 25/49 24/44 68/47 +f 69/50 26/48 68/47 +f 27/60 26/48 70/51 +f 29/10 71/52 30/11 +f 36/17 34/16 33/15 +f 35/54 28/20 71/52 +f 33/15 32/13 36/17 +f 74/59 55/24 75/87 +f 32/13 72/53 36/17 +f 73/90 35/54 71/52 +f 71/52 37/18 73/90 +f 36/17 35/54 34/16 +f 74/59 75/87 76/85 +f 31/12 63/39 62/38 +f 74/59 76/85 77/83 +f 35/54 90/61 34/16 +f 74/59 77/83 78/81 +f 88/65 89/63 35/54 +f 78/81 79/79 74/59 +f 87/67 88/65 35/54 +f 74/59 79/79 80/77 +f 86/69 87/67 35/54 +f 35/54 74/59 80/77 +f 85/71 86/69 35/54 +f 35/54 80/77 81/76 +f 84/74 85/71 35/54 +f 35/54 81/76 82/55 +f 83/56 84/74 35/54 +f 37/18 36/17 91/57 +f 35/54 89/63 90/61 +f 34/16 90/61 70/51 +f 92/94 93/95 55/24 +f 92/94 55/24 74/59 +f 34/16 70/51 69/50 +f 59/32 94/96 31/12 +f 34/16 69/50 68/47 +f 31/12 34/16 64/40 +f 34/16 68/47 67/46 +f 93/95 57/27 56/25 +f 34/16 67/46 66/43 +f 93/95 58/29 57/27 +f 34/16 66/43 65/42 +f 93/95 59/32 58/29 +f 34/16 65/42 64/40 +f 93/95 94/96 59/32 +f 63/39 31/12 64/40 +f 61/37 60/33 31/12 +f 93/95 56/25 55/24 +f 94/96 95/58 31/12 +f 60/33 59/32 31/12 +f 39/62 27/60 90/61 +f 95/58 92/94 74/59 +f 71/52 28/20 38/19 +f 95/58 72/53 31/12 +f 40/64 39/62 89/63 +f 41/66 40/64 88/65 +f 42/68 41/66 87/67 +f 43/70 42/68 86/69 +f 44/73 43/70 85/71 +f 84/74 45/72 85/71 +f 46/75 45/72 83/56 +f 47/21 46/75 82/55 +f 48/22 47/21 81/76 +f 49/78 48/22 80/77 +f 50/80 49/78 79/79 +f 51/82 50/80 78/81 +f 52/84 51/82 77/83 +f 53/86 52/84 76/85 +f 54/88 53/86 75/87 +f 8/23 54/88 55/24 +f 73/90 37/18 96/89 +f 35/54 73/90 74/59 +f 72/53 74/59 91/57 +usemtl Material.004_NONE +f 10/97 95/97 94/97 +f 93/97 12/97 11/97 +f 10/97 9/97 92/97 +f 92/97 9/97 12/97 +f 11/97 10/97 94/97 +f 94/97 93/97 11/97 +f 95/97 10/97 92/97 +f 93/97 92/97 12/97 diff --git a/examples/pybullet/gym/pybullet_data/uvmap.png b/examples/pybullet/gym/pybullet_data/uvmap.png new file mode 100644 index 0000000000000000000000000000000000000000..81b00f401223710d61e604ca8fecc1671667feb9 GIT binary patch literal 41155 zcmW(+c|26#`@eS@!WD7G?wuEdU%%Chq_NB6n7DO_MLW65xLxspT+E9JaB9s_A zX|ZGpWst~{v5$3rzP~^2JT<)j8suchpAOanNl z&epzqRl%8vTU%e@a5(#4ANjubI(Xr<=?PrsYd)pD28L>O_67hbi~jEd6`#uy_c~F5 z=9VW>!*CqGynMqr`Rtx8fcXhS`{1E@*W`zfbl+GeB-j}L;`m`p&nt=~qzwJsqLI{l zdm({CCx5=lI$Hf>e)Q6e-_VA>pE6&7h={>VFFEHu2?d( z=ELU&zX!8HHIwz>3O64N2OM!v=O0rUcu~JG+u~lnK6`QaHe+=5#_-e8u?JI`;l%@b zodfP!UauTJ%!datqc}+Rm3O4qIbW@e>mN?Vs6132wg@f^e^UQTiDx_M!xi_Pf?Z`d zx1_CMCE;Q3i05l6Ux$J!uerKzzWMTB{=nM@yJxi_IVCB}J)3UE{tWu~+4q&-4c$Q% z_lTNbN&gLf^y_u~=crQcve2?tvQ{3w{9x+wV1eAa%D2+Ng4H@5g9vl1Yv`a$=LeO@vx*`rWcZ-0jqfS!^K0ZiZF~gJ91rhak%bHpzh8+S=A1B z0%PsXKIq2QgAmoRzQ40%zyu$@^A6yZt=$I{SN&ku3>|BUd{Xmb=NOU_C->u7N2S)6 z>gdEj^}~~7L+1>h4_6X`o{si%{COCw!HwrJB?#tqy@tMj>qzGB@I$~AqvS8qn!ohx zuf%l63`YXl8a1h2eX@73^%E<-cvfP)8=3CKX!RLYJm^yyMg;IVEaS9Q)-u3`V z(LD@2D_{lG&0xx^N52j8U*{+{&1bDxp=1U;1pZXVe{=R#xzrQ`JWJB%nB zGUlUl{P4ta$QRkyx29pUO3iQ`e-2j1T(U!2p~JhY^33uaAmS>_<;7CkV+1K+ zX|4-J*`KES^Rsq$hE!ZLP84Z@GnRSii(JEpK!jA-%zT?&L*K>_BEzlzx}Q(=5J5J| z?KINv58)Ivhoi`JeYwXKfRokzB<2ys3~<@f@q?8un1FI&QB_FhrGNFgsC3(|yn02(XVme-Mqe|S*K`s;y?ZCJ#}~eN9oQd{(6g#;SIMe2%v8r*DZ^)yFuGEbiJz* zS!q=y|IBFrWt#b<>+00|Qs@vTcBx!=ol2T7#t~CnGp-Mah8#+!^?#>3)DW6nl$YPg5 zX)Pybc2?Bqi=!gwH=(J@!2+w$vB0oW0{zEKIFNH?XVi0MBSJ+bHv09foVa@*M?`sT zBEpV5++LOdqtUIG#fezak9;PVcP_H!(x*vU708 z;wiwVSY^I<^>X9InmY)}qk(-evax#)K$9LxTkY453>ti}pcx+)iH()D8{{UZoE|b# z02*%Bo0H|R5Gd8RRW;ig{2cj2qv7V2g=4pc$jW*4s1G5~G?R}Eqc--+xl`HaFy#N1 zj)Bm?wF$!mE`2NRRSWdD##ZnrrUh-u+=F%7Ypco)hXywUdh$P98?Yo0{bb{e;2MbpV?0ylS*WBL!iDscq52&->eBP461cihBbns) zkU4Ih*>sgsR@hpMc{?cm){^|JtR^(VfM8UGDkG$QBJsX$J^Q4JvgaL&@&=a= zCi`|GadTIs0#pK6Iia!)>r&Kx!_qDFG^-Z+%G>25PtW6?8duE1yVghDvajy?^^F^w zVl5b2#HGVLd}ROqshWU1kn_TibP#k-!iai9$6X^lK&IH23)kg=8Lmf|5+qYzAR|g$ z5IX%DGzW#&{Xc-ld_;n#B-)#E_MlNNx_nqsV*b#qvn!Wb)E#y>Nz9tYM zEgpUqmX+&r$`kO?`=)#in11&*m?~%}i-F`j4+^;Qu^3LI zp>SZ~64@3UuA7*>-G4Qf$C?M~9Ophm7{Uh8wZIql5oCmCO#~17YU|xiGp?>>Ib6

`$u_0pZ&H?60Sb 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 math.pi): + a = -math.pi + time.sleep(.01) + p.setGravity(0, 0, -10) + pivot = [a, 0, 1] + orn = p.getQuaternionFromEuler([a, 0, 0]) + p.changeConstraint(cid, pivot, jointChildFrameOrientation=orn, maxForce=50) + +p.removeConstraint(cid) diff --git a/examples/pybullet/gym/pybullet_examples/createMultiBodyBatch.py b/examples/pybullet/gym/pybullet_examples/createMultiBodyBatch.py new file mode 100644 index 000000000..87fde9c84 --- /dev/null +++ b/examples/pybullet/gym/pybullet_examples/createMultiBodyBatch.py @@ -0,0 +1,143 @@ +import pybullet as p +import time +import math +import pybullet_data +cid = p.connect(p.SHARED_MEMORY) +if (cid < 0): + p.connect(p.GUI, options="--minGraphicsUpdateTimeMs=16000") +p.setAdditionalSearchPath(pybullet_data.getDataPath()) + +p.setPhysicsEngineParameter(numSolverIterations=4, minimumSolverIslandSize=1024) +p.setTimeStep(1. / 120.) +logId = p.startStateLogging(p.STATE_LOGGING_PROFILE_TIMINGS, "createMultiBodyBatch.json") +#useMaximalCoordinates is much faster then the default reduced coordinates (Featherstone) +p.loadURDF("plane100.urdf", useMaximalCoordinates=True) +#disable rendering during creation. +p.setPhysicsEngineParameter(contactBreakingThreshold=0.04) +p.configureDebugVisualizer(p.COV_ENABLE_RENDERING, 0) +p.configureDebugVisualizer(p.COV_ENABLE_GUI, 0) +#disable tinyrenderer, software (CPU) renderer, we don't use it here +p.configureDebugVisualizer(p.COV_ENABLE_TINY_RENDERER, 0) + +shift = [0, -0.02, 0] +meshScale = [0.1, 0.1, 0.1] + +vertices = [[-1.000000, -1.000000, 1.000000], [1.000000, -1.000000, 1.000000], + [1.000000, 1.000000, 1.000000], [-1.000000, 1.000000, 1.000000], + [-1.000000, -1.000000, -1.000000], [1.000000, -1.000000, -1.000000], + [1.000000, 1.000000, -1.000000], [-1.000000, 1.000000, -1.000000], + [-1.000000, -1.000000, -1.000000], [-1.000000, 1.000000, -1.000000], + [-1.000000, 1.000000, 1.000000], [-1.000000, -1.000000, 1.000000], + [1.000000, -1.000000, -1.000000], [1.000000, 1.000000, -1.000000], + [1.000000, 1.000000, 1.000000], [1.000000, -1.000000, 1.000000], + [-1.000000, -1.000000, -1.000000], [-1.000000, -1.000000, 1.000000], + [1.000000, -1.000000, 1.000000], [1.000000, -1.000000, -1.000000], + [-1.000000, 1.000000, -1.000000], [-1.000000, 1.000000, 1.000000], + [1.000000, 1.000000, 1.000000], [1.000000, 1.000000, -1.000000]] + +normals = [[0.000000, 0.000000, 1.000000], [0.000000, 0.000000, 1.000000], + [0.000000, 0.000000, 1.000000], [0.000000, 0.000000, 1.000000], + [0.000000, 0.000000, -1.000000], [0.000000, 0.000000, -1.000000], + [0.000000, 0.000000, -1.000000], [0.000000, 0.000000, -1.000000], + [-1.000000, 0.000000, 0.000000], [-1.000000, 0.000000, 0.000000], + [-1.000000, 0.000000, 0.000000], [-1.000000, 0.000000, 0.000000], + [1.000000, 0.000000, 0.000000], [1.000000, 0.000000, 0.000000], + [1.000000, 0.000000, 0.000000], [1.000000, 0.000000, 0.000000], + [0.000000, -1.000000, 0.000000], [0.000000, -1.000000, 0.000000], + [0.000000, -1.000000, 0.000000], [0.000000, -1.000000, 0.000000], + [0.000000, 1.000000, 0.000000], [0.000000, 1.000000, 0.000000], + [0.000000, 1.000000, 0.000000], [0.000000, 1.000000, 0.000000]] + +uvs = [[0.750000, 0.250000], [1.000000, 0.250000], [1.000000, 0.000000], [0.750000, 0.000000], + [0.500000, 0.250000], [0.250000, 0.250000], [0.250000, 0.000000], [0.500000, 0.000000], + [0.500000, 0.000000], [0.750000, 0.000000], [0.750000, 0.250000], [0.500000, 0.250000], + [0.250000, 0.500000], [0.250000, 0.250000], [0.000000, 0.250000], [0.000000, 0.500000], + [0.250000, 0.500000], [0.250000, 0.250000], [0.500000, 0.250000], [0.500000, 0.500000], + [0.000000, 0.000000], [0.000000, 0.250000], [0.250000, 0.250000], [0.250000, 0.000000]] +indices = [ + 0, + 1, + 2, + 0, + 2, + 3, #//ground face + 6, + 5, + 4, + 7, + 6, + 4, #//top face + 10, + 9, + 8, + 11, + 10, + 8, + 12, + 13, + 14, + 12, + 14, + 15, + 18, + 17, + 16, + 19, + 18, + 16, + 20, + 21, + 22, + 20, + 22, + 23 +] + +#p.configureDebugVisualizer(p.COV_ENABLE_TINY_RENDERER,0) +#the visual shape and collision shape can be re-used by all createMultiBody instances (instancing) +visualShapeId = p.createVisualShape(shapeType=p.GEOM_MESH, + rgbaColor=[1, 1, 1, 1], + specularColor=[0.4, .4, 0], + visualFramePosition=shift, + meshScale=meshScale, + vertices=vertices, + indices=indices, + uvs=uvs, + normals=normals) +collisionShapeId = p.createCollisionShape( + shapeType=p.GEOM_BOX, halfExtents=meshScale +) #MESH, vertices=vertices, collisionFramePosition=shift,meshScale=meshScale) + +texUid = p.loadTexture("tex256.png") + +batchPositions = [] + +for x in range(32): + for y in range(32): + for z in range(10): + batchPositions.append( + [x * meshScale[0] * 5.5, y * meshScale[1] * 5.5, (0.5 + z) * meshScale[2] * 2.5]) + +bodyUids = p.createMultiBody(baseMass=0, + baseInertialFramePosition=[0, 0, 0], + baseCollisionShapeIndex=collisionShapeId, + baseVisualShapeIndex=visualShapeId, + basePosition=[0, 0, 2], + batchPositions=batchPositions, + useMaximalCoordinates=True) +p.changeVisualShape(bodyUids[0], -1, textureUniqueId=texUid) + +p.syncBodyInfo() +print("numBodies=", p.getNumBodies()) +p.stopStateLogging(logId) +p.setGravity(0, 0, -10) + +p.configureDebugVisualizer(p.COV_ENABLE_RENDERING, 1) + +colors = [[1, 0, 0, 1], [0, 1, 0, 1], [0, 0, 1, 1], [1, 1, 1, 1]] +currentColor = 0 + +while (1): + p.stepSimulation() + #time.sleep(1./120.) + #p.getCameraImage(320,200) diff --git a/examples/pybullet/gym/pybullet_examples/createObstacleCourse.py b/examples/pybullet/gym/pybullet_examples/createObstacleCourse.py new file mode 100644 index 000000000..a9ab11908 --- /dev/null +++ b/examples/pybullet/gym/pybullet_examples/createObstacleCourse.py @@ -0,0 +1,130 @@ +import pybullet as p +import time +import math +import pybullet_data + +p.connect(p.GUI) +p.setAdditionalSearchPath(pybullet_data.getDataPath()) +#don't create a ground plane, to allow for gaps etc +p.resetSimulation() +#p.createCollisionShape(p.GEOM_PLANE) +#p.createMultiBody(0,0) +#p.resetDebugVisualizerCamera(5,75,-26,[0,0,1]); +p.resetDebugVisualizerCamera(15, -346, -16, [-15, 0, 1]) + +p.configureDebugVisualizer(p.COV_ENABLE_RENDERING, 0) + +sphereRadius = 0.05 +colSphereId = p.createCollisionShape(p.GEOM_SPHERE, radius=sphereRadius) + +#a few different ways to create a mesh: + +#convex mesh from obj +stoneId = p.createCollisionShape(p.GEOM_MESH, fileName="stone.obj") + +boxHalfLength = 0.5 +boxHalfWidth = 2.5 +boxHalfHeight = 0.1 +segmentLength = 5 + +colBoxId = p.createCollisionShape(p.GEOM_BOX, + halfExtents=[boxHalfLength, boxHalfWidth, boxHalfHeight]) + +mass = 1 +visualShapeId = -1 + +segmentStart = 0 + +for i in range(segmentLength): + p.createMultiBody(baseMass=0, + baseCollisionShapeIndex=colBoxId, + basePosition=[segmentStart, 0, -0.1]) + segmentStart = segmentStart - 1 + +for i in range(segmentLength): + height = 0 + if (i % 2): + height = 1 + p.createMultiBody(baseMass=0, + baseCollisionShapeIndex=colBoxId, + basePosition=[segmentStart, 0, -0.1 + height]) + segmentStart = segmentStart - 1 + +baseOrientation = p.getQuaternionFromEuler([math.pi / 2., 0, math.pi / 2.]) + +for i in range(segmentLength): + p.createMultiBody(baseMass=0, + baseCollisionShapeIndex=colBoxId, + basePosition=[segmentStart, 0, -0.1]) + segmentStart = segmentStart - 1 + if (i % 2): + p.createMultiBody(baseMass=0, + baseCollisionShapeIndex=colBoxId, + basePosition=[segmentStart, i % 3, -0.1 + height + boxHalfWidth], + baseOrientation=baseOrientation) + +for i in range(segmentLength): + p.createMultiBody(baseMass=0, + baseCollisionShapeIndex=colBoxId, + basePosition=[segmentStart, 0, -0.1]) + width = 4 + for j in range(width): + p.createMultiBody(baseMass=0, + baseCollisionShapeIndex=stoneId, + basePosition=[segmentStart, 0.5 * (i % 2) + j - width / 2., 0]) + segmentStart = segmentStart - 1 + +link_Masses = [1] +linkCollisionShapeIndices = [colBoxId] +linkVisualShapeIndices = [-1] +linkPositions = [[0, 0, 0]] +linkOrientations = [[0, 0, 0, 1]] +linkInertialFramePositions = [[0, 0, 0]] +linkInertialFrameOrientations = [[0, 0, 0, 1]] +indices = [0] +jointTypes = [p.JOINT_REVOLUTE] +axis = [[1, 0, 0]] + +baseOrientation = [0, 0, 0, 1] +for i in range(segmentLength): + boxId = p.createMultiBody(0, + colSphereId, + -1, [segmentStart, 0, -0.1], + baseOrientation, + linkMasses=link_Masses, + linkCollisionShapeIndices=linkCollisionShapeIndices, + linkVisualShapeIndices=linkVisualShapeIndices, + linkPositions=linkPositions, + linkOrientations=linkOrientations, + linkInertialFramePositions=linkInertialFramePositions, + linkInertialFrameOrientations=linkInertialFrameOrientations, + linkParentIndices=indices, + linkJointTypes=jointTypes, + linkJointAxis=axis) + p.changeDynamics(boxId, -1, spinningFriction=0.001, rollingFriction=0.001, linearDamping=0.0) + print(p.getNumJoints(boxId)) + for joint in range(p.getNumJoints(boxId)): + targetVelocity = 10 + if (i % 2): + targetVelocity = -10 + p.setJointMotorControl2(boxId, + joint, + p.VELOCITY_CONTROL, + targetVelocity=targetVelocity, + force=100) + segmentStart = segmentStart - 1.1 + +p.configureDebugVisualizer(p.COV_ENABLE_RENDERING, 1) +while (1): + camData = p.getDebugVisualizerCamera() + viewMat = camData[2] + projMat = camData[3] + p.getCameraImage(256, + 256, + viewMatrix=viewMat, + projectionMatrix=projMat, + renderer=p.ER_BULLET_HARDWARE_OPENGL) + keys = p.getKeyboardEvents() + p.stepSimulation() + #print(keys) + time.sleep(0.01) diff --git a/examples/pybullet/gym/pybullet_examples/createVisualShapeArray.py b/examples/pybullet/gym/pybullet_examples/createVisualShapeArray.py new file mode 100644 index 000000000..6156d808c --- /dev/null +++ b/examples/pybullet/gym/pybullet_examples/createVisualShapeArray.py @@ -0,0 +1,115 @@ +import pybullet as p +import time +import math +import pybullet_data + + +def getRayFromTo(mouseX, mouseY): + width, height, viewMat, projMat, cameraUp, camForward, horizon, vertical, _, _, dist, camTarget = p.getDebugVisualizerCamera( + ) + camPos = [ + camTarget[0] - dist * camForward[0], camTarget[1] - dist * camForward[1], + camTarget[2] - dist * camForward[2] + ] + farPlane = 10000 + rayForward = [(camTarget[0] - camPos[0]), (camTarget[1] - camPos[1]), (camTarget[2] - camPos[2])] + invLen = farPlane * 1. / (math.sqrt(rayForward[0] * rayForward[0] + rayForward[1] * + rayForward[1] + rayForward[2] * rayForward[2])) + rayForward = [invLen * rayForward[0], invLen * rayForward[1], invLen * rayForward[2]] + rayFrom = camPos + oneOverWidth = float(1) / float(width) + oneOverHeight = float(1) / float(height) + dHor = [horizon[0] * oneOverWidth, horizon[1] * oneOverWidth, horizon[2] * oneOverWidth] + dVer = [vertical[0] * oneOverHeight, vertical[1] * oneOverHeight, vertical[2] * oneOverHeight] + rayToCenter = [ + rayFrom[0] + rayForward[0], rayFrom[1] + rayForward[1], rayFrom[2] + rayForward[2] + ] + rayTo = [ + rayFrom[0] + rayForward[0] - 0.5 * horizon[0] + 0.5 * vertical[0] + float(mouseX) * dHor[0] - + float(mouseY) * dVer[0], rayFrom[1] + rayForward[1] - 0.5 * horizon[1] + 0.5 * vertical[1] + + float(mouseX) * dHor[1] - float(mouseY) * dVer[1], rayFrom[2] + rayForward[2] - + 0.5 * horizon[2] + 0.5 * vertical[2] + float(mouseX) * dHor[2] - float(mouseY) * dVer[2] + ] + return rayFrom, rayTo + + +cid = p.connect(p.SHARED_MEMORY) +if (cid < 0): + p.connect(p.GUI) + +p.setAdditionalSearchPath(pybullet_data.getDataPath()) +p.setPhysicsEngineParameter(numSolverIterations=10) +p.setTimeStep(1. / 120.) +logId = p.startStateLogging(p.STATE_LOGGING_PROFILE_TIMINGS, "visualShapeBench.json") +#useMaximalCoordinates is much faster then the default reduced coordinates (Featherstone) +p.loadURDF("plane100.urdf", useMaximalCoordinates=True) +#disable rendering during creation. +p.configureDebugVisualizer(p.COV_ENABLE_RENDERING, 0) +p.configureDebugVisualizer(p.COV_ENABLE_GUI, 0) +#disable tinyrenderer, software (CPU) renderer, we don't use it here +p.configureDebugVisualizer(p.COV_ENABLE_TINY_RENDERER, 0) + +shift = [0, -0.02, 0] +shift1 = [0, 0.1, 0] +shift2 = [0, 0, 0] + +meshScale = [0.1, 0.1, 0.1] +#the visual shape and collision shape can be re-used by all createMultiBody instances (instancing) +visualShapeId = p.createVisualShapeArray(shapeTypes=[p.GEOM_MESH, p.GEOM_BOX], + halfExtents=[[0, 0, 0], [0.1, 0.1, 0.1]], + fileNames=["duck.obj", ""], + visualFramePositions=[ + shift1, + shift2, + ], + meshScales=[meshScale, meshScale]) +collisionShapeId = p.createCollisionShapeArray(shapeTypes=[p.GEOM_MESH, p.GEOM_BOX], + halfExtents=[[0, 0, 0], [0.1, 0.1, 0.1]], + fileNames=["duck_vhacd.obj", ""], + collisionFramePositions=[ + shift1, + shift2, + ], + meshScales=[meshScale, meshScale]) + +rangex = 2 +rangey = 2 +for i in range(rangex): + for j in range(rangey): + mb = p.createMultiBody(baseMass=1, + baseInertialFramePosition=[0, 0, 0], + baseCollisionShapeIndex=collisionShapeId, + baseVisualShapeIndex=visualShapeId, + basePosition=[((-rangex / 2) + i * 2) * meshScale[0] * 2, + (-rangey / 2 + j) * meshScale[1] * 4, 1], + useMaximalCoordinates=False) + p.changeVisualShape(mb, -1, rgbaColor=[1, 1, 1, 1]) +p.configureDebugVisualizer(p.COV_ENABLE_RENDERING, 1) +p.stopStateLogging(logId) +p.setGravity(0, 0, -10) +p.setRealTimeSimulation(1) + +colors = [[1, 0, 0, 1], [0, 1, 0, 1], [0, 0, 1, 1], [1, 1, 1, 1]] +currentColor = 0 + +p.getCameraImage(64, 64, renderer=p.ER_BULLET_HARDWARE_OPENGL) + +while (1): + + mouseEvents = p.getMouseEvents() + for e in mouseEvents: + if ((e[0] == 2) and (e[3] == 0) and (e[4] & p.KEY_WAS_TRIGGERED)): + mouseX = e[1] + mouseY = e[2] + rayFrom, rayTo = getRayFromTo(mouseX, mouseY) + rayInfo = p.rayTest(rayFrom, rayTo) + #p.addUserDebugLine(rayFrom,rayTo,[1,0,0],3) + for l in range(len(rayInfo)): + hit = rayInfo[l] + objectUid = hit[0] + if (objectUid >= 0): + #p.removeBody(objectUid) + p.changeVisualShape(objectUid, -1, rgbaColor=colors[currentColor]) + currentColor += 1 + if (currentColor >= len(colors)): + currentColor = 0 diff --git a/examples/pybullet/gym/pybullet_examples/deformable_anchor.py b/examples/pybullet/gym/pybullet_examples/deformable_anchor.py new file mode 100644 index 000000000..bf37cdb61 --- /dev/null +++ b/examples/pybullet/gym/pybullet_examples/deformable_anchor.py @@ -0,0 +1,55 @@ +import pybullet as p +from time import sleep + +physicsClient = p.connect(p.GUI) +import pybullet_data + +p.setAdditionalSearchPath(pybullet_data.getDataPath()) +p.resetSimulation(p.RESET_USE_DEFORMABLE_WORLD) + +gravZ=-10 +p.setGravity(0, 0, gravZ) + +planeOrn = [0,0,0,1]#p.getQuaternionFromEuler([0.3,0,0]) +#planeId = p.loadURDF("plane.urdf", [0,0,-2],planeOrn) + +boxId = p.loadURDF("cube.urdf", [0,1,2],useMaximalCoordinates = True) + +clothId = p.loadSoftBody("cloth_z_up.obj", basePosition = [0,0,2], scale = 0.5, mass = 1., useNeoHookean = 0, useBendingSprings=1,useMassSpring=1, springElasticStiffness=40, springDampingStiffness=.1, springDampingAllDirections = 1, useSelfCollision = 0, frictionCoeff = .5, useFaceContact=1) + + +p.changeVisualShape(clothId, -1, flags=p.VISUAL_SHAPE_DOUBLE_SIDED) + +p.createSoftBodyAnchor(clothId ,24,-1,-1) +p.createSoftBodyAnchor(clothId ,20,-1,-1) +p.createSoftBodyAnchor(clothId ,15,boxId,-1, [0.5,-0.5,0]) +p.createSoftBodyAnchor(clothId ,19,boxId,-1, [-0.5,-0.5,0]) +p.setPhysicsEngineParameter(sparseSdfVoxelSize=0.25) + +debug = True +if debug: + data = p.getMeshData(clothId, -1, flags=p.MESH_DATA_SIMULATION_MESH) + print("--------------") + print("data=",data) + print(data[0]) + print(data[1]) + text_uid = [] + for i in range(data[0]): + pos = data[1][i] + uid = p.addUserDebugText(str(i), pos, textColorRGB=[1,1,1]) + text_uid.append(uid) + +while p.isConnected(): + p.getCameraImage(320,200) + + if debug: + data = p.getMeshData(clothId, -1, flags=p.MESH_DATA_SIMULATION_MESH) + for i in range(data[0]): + pos = data[1][i] + uid = p.addUserDebugText(str(i), pos, textColorRGB=[1,1,1], replaceItemUniqueId=text_uid[i]) + + p.setGravity(0,0,gravZ) + p.stepSimulation() + #p.configureDebugVisualizer(p.COV_ENABLE_SINGLE_STEP_RENDERING,1) + #sleep(1./240.) + diff --git a/examples/pybullet/gym/pybullet_examples/deformable_torus.py b/examples/pybullet/gym/pybullet_examples/deformable_torus.py new file mode 100644 index 000000000..b8d7cb052 --- /dev/null +++ b/examples/pybullet/gym/pybullet_examples/deformable_torus.py @@ -0,0 +1,31 @@ +import pybullet as p +from time import sleep +import pybullet_data + +physicsClient = p.connect(p.GUI) + +p.setAdditionalSearchPath(pybullet_data.getDataPath()) + +p.resetSimulation(p.RESET_USE_DEFORMABLE_WORLD) +p.resetDebugVisualizerCamera(3,-420,-30,[0.3,0.9,-2]) +p.setGravity(0, 0, -10) + +tex = p.loadTexture("uvmap.png") +planeId = p.loadURDF("plane.urdf", [0,0,-2]) + +boxId = p.loadURDF("cube.urdf", [0,3,2],useMaximalCoordinates = True) + +bunnyId = p.loadSoftBody("torus/torus_textured.obj", simFileName="torus.vtk", mass = 3, useNeoHookean = 1, NeoHookeanMu = 180, NeoHookeanLambda = 600, NeoHookeanDamping = 0.01, collisionMargin = 0.006, useSelfCollision = 1, frictionCoeff = 0.5, repulsionStiffness = 800) +p.changeVisualShape(bunnyId, -1, rgbaColor=[1,1,1,1], textureUniqueId=tex, flags=0) + + +bunny2 = p.loadURDF("torus_deform.urdf", [0,1,0.2], flags=p.URDF_USE_SELF_COLLISION) + +p.changeVisualShape(bunny2, -1, rgbaColor=[1,1,1,1], textureUniqueId=tex, flags=0) +p.setPhysicsEngineParameter(sparseSdfVoxelSize=0.25) +p.setRealTimeSimulation(0) + +while p.isConnected(): + p.stepSimulation() + p.getCameraImage(320,200) + p.setGravity(0,0,-10) diff --git a/examples/pybullet/gym/pybullet_examples/experimentalCcdSphereRadius.py b/examples/pybullet/gym/pybullet_examples/experimentalCcdSphereRadius.py new file mode 100644 index 000000000..ca7dd664a --- /dev/null +++ b/examples/pybullet/gym/pybullet_examples/experimentalCcdSphereRadius.py @@ -0,0 +1,55 @@ +import pybullet as p +import time +import pybullet_data + +p.connect(p.GUI) +p.setAdditionalSearchPath(pybullet_data.getDataPath()) +p.setPhysicsEngineParameter(allowedCcdPenetration=0.0) + +terrain_mass = 0 +terrain_visual_shape_id = -1 +terrain_position = [0, 0, 0] +terrain_orientation = [0, 0, 0, 1] +terrain_collision_shape_id = p.createCollisionShape(shapeType=p.GEOM_MESH, + fileName="terrain.obj", + flags=p.GEOM_FORCE_CONCAVE_TRIMESH | + p.GEOM_CONCAVE_INTERNAL_EDGE, + meshScale=[0.5, 0.5, 0.5]) +p.createMultiBody(terrain_mass, terrain_collision_shape_id, terrain_visual_shape_id, + terrain_position, terrain_orientation) + +useMaximalCoordinates = True +sphereRadius = 0.005 +colSphereId = p.createCollisionShape(p.GEOM_SPHERE, radius=sphereRadius) +colBoxId = p.createCollisionShape(p.GEOM_BOX, + halfExtents=[sphereRadius, sphereRadius, sphereRadius]) + +mass = 1 +visualShapeId = -1 + +for i in range(5): + for j in range(5): + for k in range(5): + #if (k&2): + sphereUid = p.createMultiBody( + mass, + colSphereId, + visualShapeId, [-i * 5 * sphereRadius, j * 5 * sphereRadius, k * 2 * sphereRadius + 1], + useMaximalCoordinates=useMaximalCoordinates) + #else: + # sphereUid = p.createMultiBody(mass,colBoxId,visualShapeId,[-i*2*sphereRadius,j*2*sphereRadius,k*2*sphereRadius+1], useMaximalCoordinates=useMaximalCoordinates) + p.changeDynamics(sphereUid, + -1, + spinningFriction=0.001, + rollingFriction=0.001, + linearDamping=0.0) + p.changeDynamics(sphereUid, -1, ccdSweptSphereRadius=0.002) + +p.setGravity(0, 0, -10) + +pts = p.getContactPoints() +print("num points=", len(pts)) +print(pts) +while (p.isConnected()): + time.sleep(1. / 240.) + p.stepSimulation() diff --git a/examples/pybullet/gym/pybullet_examples/fileIOPlugin.py b/examples/pybullet/gym/pybullet_examples/fileIOPlugin.py new file mode 100644 index 000000000..07f906ec0 --- /dev/null +++ b/examples/pybullet/gym/pybullet_examples/fileIOPlugin.py @@ -0,0 +1,23 @@ +import pybullet as p +import time +import pybullet_data + +p.connect(p.GUI) +p.setAdditionalSearchPath(pybullet_data.getDataPath()) +fileIO = p.loadPlugin("fileIOPlugin") +if (fileIO >= 0): + #we can have a zipfile (pickup.zip) inside a zipfile (pickup2.zip) + p.executePluginCommand(fileIO, pybullet_data.getDataPath()+"/pickup2.zip", [p.AddFileIOAction, p.ZipFileIO]) + p.executePluginCommand(fileIO, "pickup.zip", [p.AddFileIOAction, p.ZipFileIO]) + objs = p.loadSDF("pickup/model.sdf") + dobot = objs[0] + p.changeVisualShape(dobot, -1, rgbaColor=[1, 1, 1, 1]) + +else: + print("fileIOPlugin is disabled.") + +p.setPhysicsEngineParameter(enableFileCaching=False) + +while (1): + p.stepSimulation() + time.sleep(1. / 240.) diff --git a/examples/pybullet/gym/pybullet_examples/getClosestPoints.py b/examples/pybullet/gym/pybullet_examples/getClosestPoints.py new file mode 100644 index 000000000..55311f58d --- /dev/null +++ b/examples/pybullet/gym/pybullet_examples/getClosestPoints.py @@ -0,0 +1,75 @@ +import pybullet as p +import time +import pybullet_data + +p.connect(p.GUI) +p.setAdditionalSearchPath(pybullet_data.getDataPath()) +useCollisionShapeQuery = True +p.configureDebugVisualizer(p.COV_ENABLE_GUI, 0) +geom = p.createCollisionShape(p.GEOM_SPHERE, radius=0.1) +geomBox = p.createCollisionShape(p.GEOM_BOX, halfExtents=[0.2, 0.2, 0.2]) +baseOrientationB = p.getQuaternionFromEuler([0, 0.3, 0]) #[0,0.5,0.5,0] +basePositionB = [1.5, 0, 1] +obA = -1 +obB = -1 + +obA = p.createMultiBody(baseMass=0, baseCollisionShapeIndex=geom, basePosition=[0.5, 0, 1]) +obB = p.createMultiBody(baseMass=0, + baseCollisionShapeIndex=geomBox, + basePosition=basePositionB, + baseOrientation=baseOrientationB) + +lineWidth = 3 +colorRGB = [1, 0, 0] +lineId = p.addUserDebugLine(lineFromXYZ=[0, 0, 0], + lineToXYZ=[0, 0, 0], + lineColorRGB=colorRGB, + lineWidth=lineWidth, + lifeTime=0) +pitch = 0 +yaw = 0 + +while (p.isConnected()): + pitch += 0.01 + if (pitch >= 3.1415 * 2.): + pitch = 0 + yaw += 0.01 + if (yaw >= 3.1415 * 2.): + yaw = 0 + + baseOrientationB = p.getQuaternionFromEuler([yaw, pitch, 0]) + if (obB >= 0): + p.resetBasePositionAndOrientation(obB, basePositionB, baseOrientationB) + + if (useCollisionShapeQuery): + pts = p.getClosestPoints(bodyA=-1, + bodyB=-1, + distance=100, + collisionShapeA=geom, + collisionShapeB=geomBox, + collisionShapePositionA=[0.5, 0, 1], + collisionShapePositionB=basePositionB, + collisionShapeOrientationB=baseOrientationB) + #pts = p.getClosestPoints(bodyA=obA, bodyB=-1, distance=100, collisionShapeB=geomBox, collisionShapePositionB=basePositionB, collisionShapeOrientationB=baseOrientationB) + else: + pts = p.getClosestPoints(bodyA=obA, bodyB=obB, distance=100) + + if len(pts) > 0: + #print(pts) + distance = pts[0][8] + #print("distance=",distance) + ptA = pts[0][5] + ptB = pts[0][6] + p.addUserDebugLine(lineFromXYZ=ptA, + lineToXYZ=ptB, + lineColorRGB=colorRGB, + lineWidth=lineWidth, + lifeTime=0, + replaceItemUniqueId=lineId) + #time.sleep(1./240.) + +#removeCollisionShape is optional: +#only use removeCollisionShape if the collision shape is not used to create a body +#and if you want to keep on creating new collision shapes for different queries (not recommended) +p.removeCollisionShape(geom) +p.removeCollisionShape(geomBox) diff --git a/examples/pybullet/gym/pybullet_examples/getTextureUid.py b/examples/pybullet/gym/pybullet_examples/getTextureUid.py new file mode 100644 index 000000000..f4a31b2f0 --- /dev/null +++ b/examples/pybullet/gym/pybullet_examples/getTextureUid.py @@ -0,0 +1,21 @@ +import pybullet as p +import pybullet_data + +p.connect(p.GUI) +p.setAdditionalSearchPath(pybullet_data.getDataPath()) +plane = p.loadURDF("plane.urdf") +visualData = p.getVisualShapeData(plane, p.VISUAL_SHAPE_DATA_TEXTURE_UNIQUE_IDS) +print(visualData) +curTexUid = visualData[0][8] +print(curTexUid) +texUid = p.loadTexture("tex256.png") +print("texUid=", texUid) + +p.changeVisualShape(plane, -1, textureUniqueId=texUid) + +for i in range(100): + p.getCameraImage(320, 200) +p.changeVisualShape(plane, -1, textureUniqueId=curTexUid) + +for i in range(100): + p.getCameraImage(320, 200) diff --git a/examples/pybullet/gym/pybullet_examples/heightfield.py b/examples/pybullet/gym/pybullet_examples/heightfield.py new file mode 100644 index 000000000..b01a5e0bb --- /dev/null +++ b/examples/pybullet/gym/pybullet_examples/heightfield.py @@ -0,0 +1,138 @@ +import pybullet as p +import pybullet_data as pd +import math +import time + +p.connect(p.GUI) +p.setAdditionalSearchPath(pd.getDataPath()) + +textureId = -1 + +useProgrammatic = 0 +useTerrainFromPNG = 1 +useDeepLocoCSV = 2 +updateHeightfield = False + +heightfieldSource = useProgrammatic +import random +random.seed(10) +p.configureDebugVisualizer(p.COV_ENABLE_RENDERING,0) +heightPerturbationRange = 0.05 +if heightfieldSource==useProgrammatic: + numHeightfieldRows = 256 + numHeightfieldColumns = 256 + heightfieldData = [0]*numHeightfieldRows*numHeightfieldColumns + for j in range (int(numHeightfieldColumns/2)): + for i in range (int(numHeightfieldRows/2) ): + height = random.uniform(0,heightPerturbationRange) + heightfieldData[2*i+2*j*numHeightfieldRows]=height + heightfieldData[2*i+1+2*j*numHeightfieldRows]=height + heightfieldData[2*i+(2*j+1)*numHeightfieldRows]=height + heightfieldData[2*i+1+(2*j+1)*numHeightfieldRows]=height + + + terrainShape = p.createCollisionShape(shapeType = p.GEOM_HEIGHTFIELD, meshScale=[.05,.05,1], heightfieldTextureScaling=(numHeightfieldRows-1)/2, heightfieldData=heightfieldData, numHeightfieldRows=numHeightfieldRows, numHeightfieldColumns=numHeightfieldColumns) + terrain = p.createMultiBody(0, terrainShape) + p.resetBasePositionAndOrientation(terrain,[0,0,0], [0,0,0,1]) + +if heightfieldSource==useDeepLocoCSV: + terrainShape = p.createCollisionShape(shapeType = p.GEOM_HEIGHTFIELD, meshScale=[.5,.5,2.5],fileName = "heightmaps/ground0.txt", heightfieldTextureScaling=128) + terrain = p.createMultiBody(0, terrainShape) + p.resetBasePositionAndOrientation(terrain,[0,0,0], [0,0,0,1]) + +if heightfieldSource==useTerrainFromPNG: + terrainShape = p.createCollisionShape(shapeType = p.GEOM_HEIGHTFIELD, meshScale=[.1,.1,24],fileName = "heightmaps/wm_height_out.png") + textureId = p.loadTexture("heightmaps/gimp_overlay_out.png") + terrain = p.createMultiBody(0, terrainShape) + p.changeVisualShape(terrain, -1, textureUniqueId = textureId) + + +p.changeVisualShape(terrain, -1, rgbaColor=[1,1,1,1]) + + +sphereRadius = 0.05 +colSphereId = p.createCollisionShape(p.GEOM_SPHERE, radius=sphereRadius) +colBoxId = p.createCollisionShape(p.GEOM_BOX, + halfExtents=[sphereRadius, sphereRadius, sphereRadius]) + +mass = 1 +visualShapeId = -1 + +link_Masses = [1] +linkCollisionShapeIndices = [colBoxId] +linkVisualShapeIndices = [-1] +linkPositions = [[0, 0, 0.11]] +linkOrientations = [[0, 0, 0, 1]] +linkInertialFramePositions = [[0, 0, 0]] +linkInertialFrameOrientations = [[0, 0, 0, 1]] +indices = [0] +jointTypes = [p.JOINT_REVOLUTE] +axis = [[0, 0, 1]] + +for i in range(3): + for j in range(3): + for k in range(3): + basePosition = [ + i * 5 * sphereRadius, j * 5 * sphereRadius, 1 + k * 5 * sphereRadius + 1 + ] + baseOrientation = [0, 0, 0, 1] + if (k & 2): + sphereUid = p.createMultiBody(mass, colSphereId, visualShapeId, basePosition, + baseOrientation) + else: + sphereUid = p.createMultiBody(mass, + colBoxId, + visualShapeId, + basePosition, + baseOrientation, + linkMasses=link_Masses, + linkCollisionShapeIndices=linkCollisionShapeIndices, + linkVisualShapeIndices=linkVisualShapeIndices, + linkPositions=linkPositions, + linkOrientations=linkOrientations, + linkInertialFramePositions=linkInertialFramePositions, + linkInertialFrameOrientations=linkInertialFrameOrientations, + linkParentIndices=indices, + linkJointTypes=jointTypes, + linkJointAxis=axis) + + + p.changeDynamics(sphereUid, + -1, + spinningFriction=0.001, + rollingFriction=0.001, + linearDamping=0.0) + for joint in range(p.getNumJoints(sphereUid)): + p.setJointMotorControl2(sphereUid, joint, p.VELOCITY_CONTROL, targetVelocity=1, force=10) + +p.configureDebugVisualizer(p.COV_ENABLE_RENDERING,1) +p.setGravity(0, 0, -10) +p.setRealTimeSimulation(1) + +p.getNumJoints(sphereUid) +for i in range(p.getNumJoints(sphereUid)): + p.getJointInfo(sphereUid, i) + + +while (p.isConnected()): + keys = p.getKeyboardEvents() + + if updateHeightfield and heightfieldSource==useProgrammatic: + for j in range (int(numHeightfieldColumns/2)): + for i in range (int(numHeightfieldRows/2) ): + height = random.uniform(0,heightPerturbationRange)#+math.sin(time.time()) + heightfieldData[2*i+2*j*numHeightfieldRows]=height + heightfieldData[2*i+1+2*j*numHeightfieldRows]=height + heightfieldData[2*i+(2*j+1)*numHeightfieldRows]=height + heightfieldData[2*i+1+(2*j+1)*numHeightfieldRows]=height + #GEOM_CONCAVE_INTERNAL_EDGE may help avoid getting stuck at an internal (shared) edge of the triangle/heightfield. + #GEOM_CONCAVE_INTERNAL_EDGE is a bit slower to build though. + #flags = p.GEOM_CONCAVE_INTERNAL_EDGE + flags = 0 + terrainShape2 = p.createCollisionShape(shapeType = p.GEOM_HEIGHTFIELD, flags = flags, meshScale=[.05,.05,1], heightfieldTextureScaling=(numHeightfieldRows-1)/2, heightfieldData=heightfieldData, numHeightfieldRows=numHeightfieldRows, numHeightfieldColumns=numHeightfieldColumns, replaceHeightfieldIndex = terrainShape) + + + #print(keys) + #getCameraImage note: software/TinyRenderer doesn't render/support heightfields! + #p.getCameraImage(320,200, renderer=p.ER_BULLET_HARDWARE_OPENGL) + time.sleep(0.01) diff --git a/examples/pybullet/gym/pybullet_examples/humanoidMotionCapture.py b/examples/pybullet/gym/pybullet_examples/humanoidMotionCapture.py new file mode 100644 index 000000000..fdc1675e1 --- /dev/null +++ b/examples/pybullet/gym/pybullet_examples/humanoidMotionCapture.py @@ -0,0 +1,614 @@ +import pybullet as p +import json +import time +import pybullet_data + + +useGUI = True +if useGUI: + p.connect(p.GUI) +else: + p.connect(p.DIRECT) +p.setAdditionalSearchPath(pybullet_data.getDataPath()) + +useZUp = False +useYUp = not useZUp +showJointMotorTorques = False + +if useYUp: + p.configureDebugVisualizer(p.COV_ENABLE_Y_AXIS_UP, 1) + +from pybullet_examples.pdControllerExplicit import PDControllerExplicitMultiDof +from pybullet_examples.pdControllerStable import PDControllerStableMultiDof + +explicitPD = PDControllerExplicitMultiDof(p) +stablePD = PDControllerStableMultiDof(p) + +p.resetDebugVisualizerCamera(cameraDistance=7.4, + cameraYaw=-94, + cameraPitch=-14, + cameraTargetPosition=[0.24, -0.02, -0.09]) + +import pybullet_data +p.setTimeOut(10000) +useMotionCapture = False +useMotionCaptureReset = False #not useMotionCapture +useExplicitPD = True + +p.setAdditionalSearchPath(pybullet_data.getDataPath()) +p.setPhysicsEngineParameter(numSolverIterations=30) +#p.setPhysicsEngineParameter(solverResidualThreshold=1e-30) + +#explicit PD control requires small timestep +timeStep = 1. / 600. +#timeStep = 1./240. + +p.setPhysicsEngineParameter(fixedTimeStep=timeStep) + +path = pybullet_data.getDataPath() + "/data/motions/humanoid3d_backflip.txt" +#path = pybullet_data.getDataPath()+"/data/motions/humanoid3d_cartwheel.txt" +#path = pybullet_data.getDataPath()+"/data/motions/humanoid3d_walk.txt" + +#p.loadURDF("plane.urdf",[0,0,-1.03]) +print("path = ", path) +with open(path, 'r') as f: + motion_dict = json.load(f) +#print("motion_dict = ", motion_dict) +print("len motion=", len(motion_dict)) +print(motion_dict['Loop']) +numFrames = len(motion_dict['Frames']) +print("#frames = ", numFrames) + +frameId = p.addUserDebugParameter("frame", 0, numFrames - 1, 0) + +erpId = p.addUserDebugParameter("erp", 0, 1, 0.2) + +kpMotorId = p.addUserDebugParameter("kpMotor", 0, 1, .2) +forceMotorId = p.addUserDebugParameter("forceMotor", 0, 2000, 1000) + +jointTypes = [ + "JOINT_REVOLUTE", "JOINT_PRISMATIC", "JOINT_SPHERICAL", "JOINT_PLANAR", "JOINT_FIXED" +] + +startLocations = [[0, 0, 2], [0, 0, 0], [0, 0, -2], [0, 0, -4], [0, 0, 4]] + +p.addUserDebugText("Stable PD", + [startLocations[0][0], startLocations[0][1] + 1, startLocations[0][2]], + [0, 0, 0]) +p.addUserDebugText("Spherical Drive", + [startLocations[1][0], startLocations[1][1] + 1, startLocations[1][2]], + [0, 0, 0]) +p.addUserDebugText("Explicit PD", + [startLocations[2][0], startLocations[2][1] + 1, startLocations[2][2]], + [0, 0, 0]) +p.addUserDebugText("Kinematic", + [startLocations[3][0], startLocations[3][1] + 1, startLocations[3][2]], + [0, 0, 0]) +p.addUserDebugText("Stable PD (Py)", + [startLocations[4][0], startLocations[4][1] + 1, startLocations[4][2]], + [0, 0, 0]) +flags=p.URDF_MAINTAIN_LINK_ORDER+p.URDF_USE_SELF_COLLISION +humanoid = p.loadURDF("humanoid/humanoid.urdf", + startLocations[0], + globalScaling=0.25, + useFixedBase=False, + flags=flags) +humanoid2 = p.loadURDF("humanoid/humanoid.urdf", + startLocations[1], + globalScaling=0.25, + useFixedBase=False, + flags=flags) +humanoid3 = p.loadURDF("humanoid/humanoid.urdf", + startLocations[2], + globalScaling=0.25, + useFixedBase=False, + flags=flags) +humanoid4 = p.loadURDF("humanoid/humanoid.urdf", + startLocations[3], + globalScaling=0.25, + useFixedBase=False, + flags=flags) +humanoid5 = p.loadURDF("humanoid/humanoid.urdf", + startLocations[4], + globalScaling=0.25, + useFixedBase=False, + flags=flags) + +humanoid_fix = p.createConstraint(humanoid, -1, -1, -1, p.JOINT_FIXED, [0, 0, 0], [0, 0, 0], + startLocations[0], [0, 0, 0, 1]) +humanoid2_fix = p.createConstraint(humanoid2, -1, -1, -1, p.JOINT_FIXED, [0, 0, 0], [0, 0, 0], + startLocations[1], [0, 0, 0, 1]) +humanoid3_fix = p.createConstraint(humanoid3, -1, -1, -1, p.JOINT_FIXED, [0, 0, 0], [0, 0, 0], + startLocations[2], [0, 0, 0, 1]) +humanoid3_fix = p.createConstraint(humanoid4, -1, -1, -1, p.JOINT_FIXED, [0, 0, 0], [0, 0, 0], + startLocations[3], [0, 0, 0, 1]) +humanoid4_fix = p.createConstraint(humanoid5, -1, -1, -1, p.JOINT_FIXED, [0, 0, 0], [0, 0, 0], + startLocations[4], [0, 0, 0, 1]) + +startPose = [ + 2, 0.847532, 0, 0.9986781045, 0.01410400148, -0.0006980000731, -0.04942300517, 0.9988133229, + 0.009485003066, -0.04756001538, -0.004475001447, 1, 0, 0, 0, 0.9649395871, 0.02436898957, + -0.05755497537, 0.2549218909, -0.249116, 0.9993661511, 0.009952001505, 0.03265400494, + 0.01009800153, 0.9854981188, -0.06440700776, 0.09324301124, -0.1262970152, 0.170571, + 0.9927545808, -0.02090099117, 0.08882396249, -0.07817796699, -0.391532, 0.9828788495, + 0.1013909845, -0.05515999155, 0.143618978, 0.9659421276, 0.1884590249, -0.1422460188, + 0.105854014, 0.581348 +] + +startVel = [ + 1.235314324, -0.008525509087, 0.1515293946, -1.161516553, 0.1866449799, -0.1050802848, 0, + 0.935706195, 0.08277326387, 0.3002461862, 0, 0, 0, 0, 0, 1.114409628, 0.3618553952, + -0.4505575061, 0, -1.725374735, -0.5052852598, -0.8555179722, -0.2221173515, 0, -0.1837617357, + 0.00171895706, 0.03912837591, 0, 0.147945294, 1.837653345, 0.1534535548, 1.491385941, 0, + -4.632454387, -0.9111172777, -1.300648184, -1.345694622, 0, -1.084238535, 0.1313680236, + -0.7236998534, 0, -0.5278312973 +] + +p.resetBasePositionAndOrientation(humanoid, startLocations[0], [0, 0, 0, 1]) +p.resetBasePositionAndOrientation(humanoid2, startLocations[1], [0, 0, 0, 1]) +p.resetBasePositionAndOrientation(humanoid3, startLocations[2], [0, 0, 0, 1]) +p.resetBasePositionAndOrientation(humanoid4, startLocations[3], [0, 0, 0, 1]) +p.resetBasePositionAndOrientation(humanoid5, startLocations[4], [0, 0, 0, 1]) + +index0 = 7 +for j in range(p.getNumJoints(humanoid)): + ji = p.getJointInfo(humanoid, j) + targetPosition = [0] + jointType = ji[2] + if (jointType == p.JOINT_SPHERICAL): + targetPosition = [ + startPose[index0 + 1], startPose[index0 + 2], startPose[index0 + 3], startPose[index0 + 0] + ] + targetVel = [startVel[index0 + 0], startVel[index0 + 1], startVel[index0 + 2]] + index0 += 4 + print("spherical position: ", targetPosition) + print("spherical velocity: ", targetVel) + p.resetJointStateMultiDof(humanoid, j, targetValue=targetPosition, targetVelocity=targetVel) + p.resetJointStateMultiDof(humanoid5, j, targetValue=targetPosition, targetVelocity=targetVel) + p.resetJointStateMultiDof(humanoid2, j, targetValue=targetPosition, targetVelocity=targetVel) + if (jointType == p.JOINT_PRISMATIC or jointType == p.JOINT_REVOLUTE): + targetPosition = [startPose[index0]] + targetVel = [startVel[index0]] + index0 += 1 + print("revolute:", targetPosition) + print("revolute velocity:", targetVel) + p.resetJointStateMultiDof(humanoid, j, targetValue=targetPosition, targetVelocity=targetVel) + p.resetJointStateMultiDof(humanoid5, j, targetValue=targetPosition, targetVelocity=targetVel) + p.resetJointStateMultiDof(humanoid2, j, targetValue=targetPosition, targetVelocity=targetVel) + +for j in range(p.getNumJoints(humanoid)): + ji = p.getJointInfo(humanoid, j) + targetPosition = [0] + jointType = ji[2] + if (jointType == p.JOINT_SPHERICAL): + targetPosition = [0, 0, 0, 1] + p.setJointMotorControlMultiDof(humanoid, + j, + p.POSITION_CONTROL, + targetPosition, + targetVelocity=[0, 0, 0], + positionGain=0, + velocityGain=1, + force=[0, 0, 0]) + p.setJointMotorControlMultiDof(humanoid5, + j, + p.POSITION_CONTROL, + targetPosition, + targetVelocity=[0, 0, 0], + positionGain=0, + velocityGain=1, + force=[0, 0, 0]) + p.setJointMotorControlMultiDof(humanoid3, + j, + p.POSITION_CONTROL, + targetPosition, + targetVelocity=[0, 0, 0], + positionGain=0, + velocityGain=1, + force=[31, 31, 31]) + p.setJointMotorControlMultiDof(humanoid4, + j, + p.POSITION_CONTROL, + targetPosition, + targetVelocity=[0, 0, 0], + positionGain=0, + velocityGain=1, + force=[1, 1, 1]) + + if (jointType == p.JOINT_PRISMATIC or jointType == p.JOINT_REVOLUTE): + p.setJointMotorControl2(humanoid, j, p.VELOCITY_CONTROL, targetVelocity=0, force=0) + p.setJointMotorControl2(humanoid3, j, p.VELOCITY_CONTROL, targetVelocity=0, force=31) + p.setJointMotorControl2(humanoid4, j, p.VELOCITY_CONTROL, targetVelocity=0, force=10) + p.setJointMotorControl2(humanoid5, j, p.VELOCITY_CONTROL, targetVelocity=0, force=0) + + #print(ji) + print("joint[", j, "].type=", jointTypes[ji[2]]) + print("joint[", j, "].name=", ji[1]) + +jointIds = [] +paramIds = [] +for j in range(p.getNumJoints(humanoid)): + #p.changeDynamics(humanoid,j,linearDamping=0, angularDamping=0) + p.changeVisualShape(humanoid, j, rgbaColor=[1, 1, 1, 1]) + info = p.getJointInfo(humanoid, j) + #print(info) + if (not useMotionCapture): + jointName = info[1] + jointType = info[2] + if (jointType == p.JOINT_PRISMATIC or jointType == p.JOINT_REVOLUTE): + jointIds.append(j) + #paramIds.append(p.addUserDebugParameter(jointName.decode("utf-8"),-4,4,0)) + #print("jointName=",jointName, "at ", j) + +p.changeVisualShape(humanoid, 2, rgbaColor=[1, 0, 0, 1]) +chest = 1 +neck = 2 +rightHip = 3 +rightKnee = 4 +rightAnkle = 5 +rightShoulder = 6 +rightElbow = 7 +leftHip = 9 +leftKnee = 10 +leftAnkle = 11 +leftShoulder = 12 +leftElbow = 13 + +#rightShoulder=3 +#rightElbow=4 +#leftShoulder=6 +#leftElbow = 7 +#rightHip = 9 +#rightKnee=10 +#rightAnkle=11 +#leftHip = 12 +#leftKnee=13 +#leftAnkle=14 + +import time + +kpOrg = [ + 0, 0, 0, 0, 0, 0, 0, 1000, 1000, 1000, 1000, 100, 100, 100, 100, 500, 500, 500, 500, 500, 400, + 400, 400, 400, 400, 400, 400, 400, 300, 500, 500, 500, 500, 500, 400, 400, 400, 400, 400, 400, + 400, 400, 300 +] +kdOrg = [ + 0, 0, 0, 0, 0, 0, 0, 100, 100, 100, 100, 10, 10, 10, 10, 50, 50, 50, 50, 50, 40, 40, 40, 40, + 40, 40, 40, 40, 30, 50, 50, 50, 50, 50, 40, 40, 40, 40, 40, 40, 40, 40, 30 +] + +once = True +p.getCameraImage(320, 200) + +while (p.isConnected()): + + if useGUI: + erp = p.readUserDebugParameter(erpId) + kpMotor = p.readUserDebugParameter(kpMotorId) + maxForce = p.readUserDebugParameter(forceMotorId) + frameReal = p.readUserDebugParameter(frameId) + else: + erp = 0.2 + kpMotor = 0.2 + maxForce = 1000 + frameReal = 0 + + kp = kpMotor + + frame = int(frameReal) + frameNext = frame + 1 + if (frameNext >= numFrames): + frameNext = frame + + frameFraction = frameReal - frame + #print("frameFraction=",frameFraction) + #print("frame=",frame) + #print("frameNext=", frameNext) + + #getQuaternionSlerp + + frameData = motion_dict['Frames'][frame] + frameDataNext = motion_dict['Frames'][frameNext] + + #print("duration=",frameData[0]) + #print(pos=[frameData]) + + basePos1Start = [frameData[1], frameData[2], frameData[3]] + basePos1End = [frameDataNext[1], frameDataNext[2], frameDataNext[3]] + basePos1 = [ + basePos1Start[0] + frameFraction * (basePos1End[0] - basePos1Start[0]), + basePos1Start[1] + frameFraction * (basePos1End[1] - basePos1Start[1]), + basePos1Start[2] + frameFraction * (basePos1End[2] - basePos1Start[2]) + ] + baseOrn1Start = [frameData[5], frameData[6], frameData[7], frameData[4]] + baseOrn1Next = [frameDataNext[5], frameDataNext[6], frameDataNext[7], frameDataNext[4]] + baseOrn1 = p.getQuaternionSlerp(baseOrn1Start, baseOrn1Next, frameFraction) + #pre-rotate to make z-up + if (useZUp): + y2zPos = [0, 0, 0.0] + y2zOrn = p.getQuaternionFromEuler([1.57, 0, 0]) + basePos, baseOrn = p.multiplyTransforms(y2zPos, y2zOrn, basePos1, baseOrn1) + p.resetBasePositionAndOrientation(humanoid, basePos, baseOrn) + + y2zPos = [0, 2, 0.0] + y2zOrn = p.getQuaternionFromEuler([1.57, 0, 0]) + basePos, baseOrn = p.multiplyTransforms(y2zPos, y2zOrn, basePos1, baseOrn1) + p.resetBasePositionAndOrientation(humanoid2, basePos, baseOrn) + + chestRotStart = [frameData[9], frameData[10], frameData[11], frameData[8]] + chestRotEnd = [frameDataNext[9], frameDataNext[10], frameDataNext[11], frameDataNext[8]] + chestRot = p.getQuaternionSlerp(chestRotStart, chestRotEnd, frameFraction) + + neckRotStart = [frameData[13], frameData[14], frameData[15], frameData[12]] + neckRotEnd = [frameDataNext[13], frameDataNext[14], frameDataNext[15], frameDataNext[12]] + neckRot = p.getQuaternionSlerp(neckRotStart, neckRotEnd, frameFraction) + + rightHipRotStart = [frameData[17], frameData[18], frameData[19], frameData[16]] + rightHipRotEnd = [frameDataNext[17], frameDataNext[18], frameDataNext[19], frameDataNext[16]] + rightHipRot = p.getQuaternionSlerp(rightHipRotStart, rightHipRotEnd, frameFraction) + + rightKneeRotStart = [frameData[20]] + rightKneeRotEnd = [frameDataNext[20]] + rightKneeRot = [ + rightKneeRotStart[0] + frameFraction * (rightKneeRotEnd[0] - rightKneeRotStart[0]) + ] + + rightAnkleRotStart = [frameData[22], frameData[23], frameData[24], frameData[21]] + rightAnkleRotEnd = [frameDataNext[22], frameDataNext[23], frameDataNext[24], frameDataNext[21]] + rightAnkleRot = p.getQuaternionSlerp(rightAnkleRotStart, rightAnkleRotEnd, frameFraction) + + rightShoulderRotStart = [frameData[26], frameData[27], frameData[28], frameData[25]] + rightShoulderRotEnd = [ + frameDataNext[26], frameDataNext[27], frameDataNext[28], frameDataNext[25] + ] + rightShoulderRot = p.getQuaternionSlerp(rightShoulderRotStart, rightShoulderRotEnd, + frameFraction) + + rightElbowRotStart = [frameData[29]] + rightElbowRotEnd = [frameDataNext[29]] + rightElbowRot = [ + rightElbowRotStart[0] + frameFraction * (rightElbowRotEnd[0] - rightElbowRotStart[0]) + ] + + leftHipRotStart = [frameData[31], frameData[32], frameData[33], frameData[30]] + leftHipRotEnd = [frameDataNext[31], frameDataNext[32], frameDataNext[33], frameDataNext[30]] + leftHipRot = p.getQuaternionSlerp(leftHipRotStart, leftHipRotEnd, frameFraction) + + leftKneeRotStart = [frameData[34]] + leftKneeRotEnd = [frameDataNext[34]] + leftKneeRot = [leftKneeRotStart[0] + frameFraction * (leftKneeRotEnd[0] - leftKneeRotStart[0])] + + leftAnkleRotStart = [frameData[36], frameData[37], frameData[38], frameData[35]] + leftAnkleRotEnd = [frameDataNext[36], frameDataNext[37], frameDataNext[38], frameDataNext[35]] + leftAnkleRot = p.getQuaternionSlerp(leftAnkleRotStart, leftAnkleRotEnd, frameFraction) + + leftShoulderRotStart = [frameData[40], frameData[41], frameData[42], frameData[39]] + leftShoulderRotEnd = [frameDataNext[40], frameDataNext[41], frameDataNext[42], frameDataNext[39]] + leftShoulderRot = p.getQuaternionSlerp(leftShoulderRotStart, leftShoulderRotEnd, frameFraction) + leftElbowRotStart = [frameData[43]] + leftElbowRotEnd = [frameDataNext[43]] + leftElbowRot = [ + leftElbowRotStart[0] + frameFraction * (leftElbowRotEnd[0] - leftElbowRotStart[0]) + ] + + if (0): #if (once): + p.resetJointStateMultiDof(humanoid, chest, chestRot) + p.resetJointStateMultiDof(humanoid, neck, neckRot) + p.resetJointStateMultiDof(humanoid, rightHip, rightHipRot) + p.resetJointStateMultiDof(humanoid, rightKnee, rightKneeRot) + p.resetJointStateMultiDof(humanoid, rightAnkle, rightAnkleRot) + p.resetJointStateMultiDof(humanoid, rightShoulder, rightShoulderRot) + p.resetJointStateMultiDof(humanoid, rightElbow, rightElbowRot) + p.resetJointStateMultiDof(humanoid, leftHip, leftHipRot) + p.resetJointStateMultiDof(humanoid, leftKnee, leftKneeRot) + p.resetJointStateMultiDof(humanoid, leftAnkle, leftAnkleRot) + p.resetJointStateMultiDof(humanoid, leftShoulder, leftShoulderRot) + p.resetJointStateMultiDof(humanoid, leftElbow, leftElbowRot) + once = False + #print("chestRot=",chestRot) + p.setGravity(0, 0, -10) + + kp = kpMotor + if (useExplicitPD): + jointDofCounts = [4, 4, 4, 1, 4, 4, 1, 4, 1, 4, 4, 1] + #[x,y,z] base position and [x,y,z,w] base orientation! + totalDofs = 7 + for dof in jointDofCounts: + totalDofs += dof + + jointIndicesAll = [ + chest, neck, rightHip, rightKnee, rightAnkle, rightShoulder, rightElbow, leftHip, leftKnee, + leftAnkle, leftShoulder, leftElbow + ] + basePos, baseOrn = p.getBasePositionAndOrientation(humanoid) + pose = [ + basePos[0], basePos[1], basePos[2], baseOrn[0], baseOrn[1], baseOrn[2], baseOrn[3], + chestRot[0], chestRot[1], chestRot[2], chestRot[3], neckRot[0], neckRot[1], neckRot[2], + neckRot[3], rightHipRot[0], rightHipRot[1], rightHipRot[2], rightHipRot[3], + rightKneeRot[0], rightAnkleRot[0], rightAnkleRot[1], rightAnkleRot[2], rightAnkleRot[3], + rightShoulderRot[0], rightShoulderRot[1], rightShoulderRot[2], rightShoulderRot[3], + rightElbowRot[0], leftHipRot[0], leftHipRot[1], leftHipRot[2], leftHipRot[3], + leftKneeRot[0], leftAnkleRot[0], leftAnkleRot[1], leftAnkleRot[2], leftAnkleRot[3], + leftShoulderRot[0], leftShoulderRot[1], leftShoulderRot[2], leftShoulderRot[3], + leftElbowRot[0] + ] + + #print("pose=") + #for po in pose: + # print(po) + + + taus = stablePD.computePD(bodyUniqueId=humanoid5, + jointIndices=jointIndicesAll, + desiredPositions=pose, + desiredVelocities=[0] * totalDofs, + kps=kpOrg, + kds=kdOrg, + maxForces=[maxForce] * totalDofs, + timeStep=timeStep) + + indices = [chest, neck, rightHip, rightKnee, + rightAnkle, rightShoulder, rightElbow, + leftHip, leftKnee, leftAnkle, + leftShoulder, leftElbow] + targetPositions = [chestRot,neckRot,rightHipRot, rightKneeRot, + rightAnkleRot, rightShoulderRot, rightElbowRot, + leftHipRot, leftKneeRot, leftAnkleRot, + leftShoulderRot, leftElbowRot] + maxForces = [ [maxForce,maxForce,maxForce], [maxForce,maxForce,maxForce],[maxForce,maxForce,maxForce],[maxForce], + [maxForce,maxForce,maxForce],[maxForce,maxForce,maxForce],[maxForce], + [maxForce,maxForce,maxForce], [maxForce], [maxForce,maxForce,maxForce], + [maxForce,maxForce,maxForce], [maxForce]] + + + kps = [1000]*12 + kds = [100]*12 + + + p.setJointMotorControlMultiDofArray(humanoid, + indices, + p.STABLE_PD_CONTROL, + targetPositions=targetPositions, + positionGains=kps, + velocityGains=kds, + forces=maxForces) + + taus3 = explicitPD.computePD(bodyUniqueId=humanoid3, + jointIndices=jointIndicesAll, + desiredPositions=pose, + desiredVelocities=[0] * totalDofs, + kps=kpOrg, + kds=kdOrg, + maxForces=[maxForce * 0.05] * totalDofs, + timeStep=timeStep) + + #taus=[0]*43 + dofIndex = 7 + for index in range(len(jointIndicesAll)): + jointIndex = jointIndicesAll[index] + if jointDofCounts[index] == 4: + + p.setJointMotorControlMultiDof( + humanoid5, + jointIndex, + p.TORQUE_CONTROL, + force=[taus[dofIndex + 0], taus[dofIndex + 1], taus[dofIndex + 2]]) + p.setJointMotorControlMultiDof( + humanoid3, + jointIndex, + p.TORQUE_CONTROL, + force=[taus3[dofIndex + 0], taus3[dofIndex + 1], taus3[dofIndex + 2]]) + + if jointDofCounts[index] == 1: + + + p.setJointMotorControlMultiDof(humanoid5, + jointIndex, + controlMode=p.TORQUE_CONTROL, + force=[taus[dofIndex]]) + p.setJointMotorControlMultiDof(humanoid3, + jointIndex, + controlMode=p.TORQUE_CONTROL, + force=[taus3[dofIndex]]) + + dofIndex += jointDofCounts[index] + + #print("len(taus)=",len(taus)) + #print("taus=",taus) + + p.setJointMotorControlMultiDof(humanoid2, + chest, + p.POSITION_CONTROL, + targetPosition=chestRot, + positionGain=kp, + force=[maxForce]) + p.setJointMotorControlMultiDof(humanoid2, + neck, + p.POSITION_CONTROL, + targetPosition=neckRot, + positionGain=kp, + force=[maxForce]) + p.setJointMotorControlMultiDof(humanoid2, + rightHip, + p.POSITION_CONTROL, + targetPosition=rightHipRot, + positionGain=kp, + force=[maxForce]) + p.setJointMotorControlMultiDof(humanoid2, + rightKnee, + p.POSITION_CONTROL, + targetPosition=rightKneeRot, + positionGain=kp, + force=[maxForce]) + p.setJointMotorControlMultiDof(humanoid2, + rightAnkle, + p.POSITION_CONTROL, + targetPosition=rightAnkleRot, + positionGain=kp, + force=[maxForce]) + p.setJointMotorControlMultiDof(humanoid2, + rightShoulder, + p.POSITION_CONTROL, + targetPosition=rightShoulderRot, + positionGain=kp, + force=[maxForce]) + p.setJointMotorControlMultiDof(humanoid2, + rightElbow, + p.POSITION_CONTROL, + targetPosition=rightElbowRot, + positionGain=kp, + force=[maxForce]) + p.setJointMotorControlMultiDof(humanoid2, + leftHip, + p.POSITION_CONTROL, + targetPosition=leftHipRot, + positionGain=kp, + force=[maxForce]) + p.setJointMotorControlMultiDof(humanoid2, + leftKnee, + p.POSITION_CONTROL, + targetPosition=leftKneeRot, + positionGain=kp, + force=[maxForce]) + p.setJointMotorControlMultiDof(humanoid2, + leftAnkle, + p.POSITION_CONTROL, + targetPosition=leftAnkleRot, + positionGain=kp, + force=[maxForce]) + p.setJointMotorControlMultiDof(humanoid2, + leftShoulder, + p.POSITION_CONTROL, + targetPosition=leftShoulderRot, + positionGain=kp, + force=[maxForce]) + p.setJointMotorControlMultiDof(humanoid2, + leftElbow, + p.POSITION_CONTROL, + targetPosition=leftElbowRot, + positionGain=kp, + force=[maxForce]) + + kinematicHumanoid4 = True + if (kinematicHumanoid4): + p.resetJointStateMultiDof(humanoid4, chest, chestRot) + p.resetJointStateMultiDof(humanoid4, neck, neckRot) + p.resetJointStateMultiDof(humanoid4, rightHip, rightHipRot) + p.resetJointStateMultiDof(humanoid4, rightKnee, rightKneeRot) + p.resetJointStateMultiDof(humanoid4, rightAnkle, rightAnkleRot) + p.resetJointStateMultiDof(humanoid4, rightShoulder, rightShoulderRot) + p.resetJointStateMultiDof(humanoid4, rightElbow, rightElbowRot) + p.resetJointStateMultiDof(humanoid4, leftHip, leftHipRot) + p.resetJointStateMultiDof(humanoid4, leftKnee, leftKneeRot) + p.resetJointStateMultiDof(humanoid4, leftAnkle, leftAnkleRot) + p.resetJointStateMultiDof(humanoid4, leftShoulder, leftShoulderRot) + p.resetJointStateMultiDof(humanoid4, leftElbow, leftElbowRot) + p.stepSimulation() + + if showJointMotorTorques: + for j in range(p.getNumJoints(humanoid2)): + jointState = p.getJointStateMultiDof(humanoid2, j) + print("jointStateMultiDof[", j, "].pos=", jointState[0]) + print("jointStateMultiDof[", j, "].vel=", jointState[1]) + print("jointStateMultiDof[", j, "].jointForces=", jointState[3]) + time.sleep(timeStep) diff --git a/examples/pybullet/gym/pybullet_examples/inverse_dynamics.py b/examples/pybullet/gym/pybullet_examples/inverse_dynamics.py new file mode 100644 index 000000000..5ec99aef8 --- /dev/null +++ b/examples/pybullet/gym/pybullet_examples/inverse_dynamics.py @@ -0,0 +1,167 @@ +import pybullet as bullet +import pybullet_data as pd + +plot = True +import time + +if (plot): + import matplotlib.pyplot as plt +import math +verbose = False + +# Parameters: +robot_base = [0., 0., 0.] +robot_orientation = [0., 0., 0., 1.] +delta_t = 0.0001 + +# Initialize Bullet Simulator +id_simulator = bullet.connect(bullet.GUI) # or bullet.DIRECT for non-graphical version +bullet.setTimeStep(delta_t) +bullet.setAdditionalSearchPath(pd.getDataPath()) + +# Switch between URDF with/without FIXED joints +with_fixed_joints = True + +if with_fixed_joints: + id_revolute_joints = [0, 3] + id_robot = bullet.loadURDF("TwoJointRobot_w_fixedJoints.urdf", + robot_base, + robot_orientation, + useFixedBase=True) +else: + id_revolute_joints = [0, 1] + id_robot = bullet.loadURDF("TwoJointRobot_wo_fixedJoints.urdf", + robot_base, + robot_orientation, + useFixedBase=True) + +bullet.changeDynamics(id_robot, -1, linearDamping=0, angularDamping=0) +bullet.changeDynamics(id_robot, 0, linearDamping=0, angularDamping=0) +bullet.changeDynamics(id_robot, 1, linearDamping=0, angularDamping=0) + +jointTypeNames = [ + "JOINT_REVOLUTE", "JOINT_PRISMATIC", "JOINT_SPHERICAL", "JOINT_PLANAR", "JOINT_FIXED", + "JOINT_POINT2POINT", "JOINT_GEAR" +] + +# Disable the motors for torque control: +bullet.setJointMotorControlArray(id_robot, + id_revolute_joints, + bullet.VELOCITY_CONTROL, + forces=[0.0, 0.0]) + +# Target Positions: +start = 0.0 +end = 1.0 + +steps = int((end - start) / delta_t) +t = [0] * steps +q_pos_desired = [[0.] * steps, [0.] * steps] +q_vel_desired = [[0.] * steps, [0.] * steps] +q_acc_desired = [[0.] * steps, [0.] * steps] + +for s in range(steps): + t[s] = start + s * delta_t + q_pos_desired[0][s] = 1. / (2. * math.pi) * math.sin(2. * math.pi * t[s]) - t[s] + q_pos_desired[1][s] = -1. / (2. * math.pi) * (math.cos(2. * math.pi * t[s]) - 1.0) + + q_vel_desired[0][s] = math.cos(2. * math.pi * t[s]) - 1. + q_vel_desired[1][s] = math.sin(2. * math.pi * t[s]) + + q_acc_desired[0][s] = -2. * math.pi * math.sin(2. * math.pi * t[s]) + q_acc_desired[1][s] = 2. * math.pi * math.cos(2. * math.pi * t[s]) + +q_pos = [[0.] * steps, [0.] * steps] +q_vel = [[0.] * steps, [0.] * steps] +q_tor = [[0.] * steps, [0.] * steps] + +# Do Torque Control: +for i in range(len(t)): + + # Read Sensor States: + joint_states = bullet.getJointStates(id_robot, id_revolute_joints) + + q_pos[0][i] = joint_states[0][0] + a = joint_states[1][0] + if (verbose): + print("joint_states[1][0]") + print(joint_states[1][0]) + q_pos[1][i] = a + + q_vel[0][i] = joint_states[0][1] + q_vel[1][i] = joint_states[1][1] + + # Computing the torque from inverse dynamics: + obj_pos = [q_pos[0][i], q_pos[1][i]] + obj_vel = [q_vel[0][i], q_vel[1][i]] + obj_acc = [q_acc_desired[0][i], q_acc_desired[1][i]] + + if (verbose): + print("calculateInverseDynamics") + print("id_robot") + print(id_robot) + print("obj_pos") + print(obj_pos) + print("obj_vel") + print(obj_vel) + print("obj_acc") + print(obj_acc) + + torque = bullet.calculateInverseDynamics(id_robot, obj_pos, obj_vel, obj_acc) + q_tor[0][i] = torque[0] + q_tor[1][i] = torque[1] + if (verbose): + print("torque=") + print(torque) + + # Set the Joint Torques: + bullet.setJointMotorControlArray(id_robot, + id_revolute_joints, + bullet.TORQUE_CONTROL, + forces=[torque[0], torque[1]]) + + # Step Simulation + bullet.stepSimulation() + +# Plot the Position, Velocity and Acceleration: +if plot: + figure = plt.figure(figsize=[15, 4.5]) + figure.subplots_adjust(left=0.05, bottom=0.11, right=0.97, top=0.9, wspace=0.4, hspace=0.55) + + ax_pos = figure.add_subplot(141) + ax_pos.set_title("Joint Position") + ax_pos.plot(t, q_pos_desired[0], '--r', lw=4, label='Desired q0') + ax_pos.plot(t, q_pos_desired[1], '--b', lw=4, label='Desired q1') + ax_pos.plot(t, q_pos[0], '-r', lw=1, label='Measured q0') + ax_pos.plot(t, q_pos[1], '-b', lw=1, label='Measured q1') + ax_pos.set_ylim(-1., 1.) + ax_pos.legend() + + ax_vel = figure.add_subplot(142) + ax_vel.set_title("Joint Velocity") + ax_vel.plot(t, q_vel_desired[0], '--r', lw=4, label='Desired q0') + ax_vel.plot(t, q_vel_desired[1], '--b', lw=4, label='Desired q1') + ax_vel.plot(t, q_vel[0], '-r', lw=1, label='Measured q0') + ax_vel.plot(t, q_vel[1], '-b', lw=1, label='Measured q1') + ax_vel.set_ylim(-2., 2.) + ax_vel.legend() + + ax_acc = figure.add_subplot(143) + ax_acc.set_title("Joint Acceleration") + ax_acc.plot(t, q_acc_desired[0], '--r', lw=4, label='Desired q0') + ax_acc.plot(t, q_acc_desired[1], '--b', lw=4, label='Desired q1') + ax_acc.set_ylim(-10., 10.) + ax_acc.legend() + + ax_tor = figure.add_subplot(144) + ax_tor.set_title("Executed Torque") + ax_tor.plot(t, q_tor[0], '-r', lw=2, label='Torque q0') + ax_tor.plot(t, q_tor[1], '-b', lw=2, label='Torque q1') + ax_tor.set_ylim(-20., 20.) + ax_tor.legend() + + plt.pause(0.01) + +while (1): + bullet.stepSimulation() + time.sleep(0.01) diff --git a/examples/pybullet/gym/pybullet_examples/inverse_kinematics.py b/examples/pybullet/gym/pybullet_examples/inverse_kinematics.py new file mode 100644 index 000000000..bf198ff32 --- /dev/null +++ b/examples/pybullet/gym/pybullet_examples/inverse_kinematics.py @@ -0,0 +1,125 @@ +import pybullet as p +import time +import math +from datetime import datetime +import pybullet_data + +clid = p.connect(p.SHARED_MEMORY) +if (clid < 0): + p.connect(p.GUI) + #p.connect(p.SHARED_MEMORY_GUI) + +p.setAdditionalSearchPath(pybullet_data.getDataPath()) + +p.loadURDF("plane.urdf", [0, 0, -0.3]) +kukaId = p.loadURDF("kuka_iiwa/model.urdf", [0, 0, 0]) +p.resetBasePositionAndOrientation(kukaId, [0, 0, 0], [0, 0, 0, 1]) +kukaEndEffectorIndex = 6 +numJoints = p.getNumJoints(kukaId) +if (numJoints != 7): + exit() + +#lower limits for null space +ll = [-.967, -2, -2.96, 0.19, -2.96, -2.09, -3.05] +#upper limits for null space +ul = [.967, 2, 2.96, 2.29, 2.96, 2.09, 3.05] +#joint ranges for null space +jr = [5.8, 4, 5.8, 4, 5.8, 4, 6] +#restposes for null space +rp = [0, 0, 0, 0.5 * math.pi, 0, -math.pi * 0.5 * 0.66, 0] +#joint damping coefficents +jd = [0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1] + +for i in range(numJoints): + p.resetJointState(kukaId, i, rp[i]) + +p.setGravity(0, 0, 0) +t = 0. +prevPose = [0, 0, 0] +prevPose1 = [0, 0, 0] +hasPrevPose = 0 +useNullSpace = 1 + +useOrientation = 1 +#If we set useSimulation=0, it sets the arm pose to be the IK result directly without using dynamic control. +#This can be used to test the IK result accuracy. +useSimulation = 1 +useRealTimeSimulation = 0 +ikSolver = 0 +p.setRealTimeSimulation(useRealTimeSimulation) +#trailDuration is duration (in seconds) after debug lines will be removed automatically +#use 0 for no-removal +trailDuration = 15 + +i=0 +while 1: + i+=1 + #p.getCameraImage(320, + # 200, + # flags=p.ER_SEGMENTATION_MASK_OBJECT_AND_LINKINDEX, + # renderer=p.ER_BULLET_HARDWARE_OPENGL) + if (useRealTimeSimulation): + dt = datetime.now() + t = (dt.second / 60.) * 2. * math.pi + else: + t = t + 0.01 + + if (useSimulation and useRealTimeSimulation == 0): + p.stepSimulation() + + for i in range(1): + pos = [-0.4, 0.2 * math.cos(t), 0. + 0.2 * math.sin(t)] + #end effector points down, not up (in case useOrientation==1) + orn = p.getQuaternionFromEuler([0, -math.pi, 0]) + + if (useNullSpace == 1): + if (useOrientation == 1): + jointPoses = p.calculateInverseKinematics(kukaId, kukaEndEffectorIndex, pos, orn, ll, ul, + jr, rp) + else: + jointPoses = p.calculateInverseKinematics(kukaId, + kukaEndEffectorIndex, + pos, + lowerLimits=ll, + upperLimits=ul, + jointRanges=jr, + restPoses=rp) + else: + if (useOrientation == 1): + jointPoses = p.calculateInverseKinematics(kukaId, + kukaEndEffectorIndex, + pos, + orn, + jointDamping=jd, + solver=ikSolver, + maxNumIterations=100, + residualThreshold=.01) + else: + jointPoses = p.calculateInverseKinematics(kukaId, + kukaEndEffectorIndex, + pos, + solver=ikSolver) + + if (useSimulation): + for i in range(numJoints): + p.setJointMotorControl2(bodyIndex=kukaId, + jointIndex=i, + controlMode=p.POSITION_CONTROL, + targetPosition=jointPoses[i], + targetVelocity=0, + force=500, + positionGain=0.03, + velocityGain=1) + else: + #reset the joint state (ignoring all dynamics, not recommended to use during simulation) + for i in range(numJoints): + p.resetJointState(kukaId, i, jointPoses[i]) + + ls = p.getLinkState(kukaId, kukaEndEffectorIndex) + if (hasPrevPose): + p.addUserDebugLine(prevPose, pos, [0, 0, 0.3], 1, trailDuration) + p.addUserDebugLine(prevPose1, ls[4], [1, 0, 0], 1, trailDuration) + prevPose = pos + prevPose1 = ls[4] + hasPrevPose = 1 +p.disconnect() diff --git a/examples/pybullet/gym/pybullet_examples/inverse_kinematics_husky_kuka.py b/examples/pybullet/gym/pybullet_examples/inverse_kinematics_husky_kuka.py new file mode 100644 index 000000000..bb0e26eaa --- /dev/null +++ b/examples/pybullet/gym/pybullet_examples/inverse_kinematics_husky_kuka.py @@ -0,0 +1,202 @@ +import pybullet as p +import time +import math +from datetime import datetime +from datetime import datetime +import pybullet_data + +clid = p.connect(p.SHARED_MEMORY) + + +if (clid < 0): + p.connect(p.GUI) + +p.setPhysicsEngineParameter(enableConeFriction=0) + +p.setAdditionalSearchPath(pybullet_data.getDataPath()) + + +p.loadURDF("plane.urdf", [0, 0, -0.3]) +husky = p.loadURDF("husky/husky.urdf", [0.290388, 0.329902, -0.310270], + [0.002328, -0.000984, 0.996491, 0.083659]) +for i in range(p.getNumJoints(husky)): + print(p.getJointInfo(husky, i)) +kukaId = p.loadURDF("kuka_iiwa/model_free_base.urdf", 0.193749, 0.345564, 0.120208, 0.002327, + -0.000988, 0.996491, 0.083659) +ob = kukaId +jointPositions = [3.559609, 0.411182, 0.862129, 1.744441, 0.077299, -1.129685, 0.006001] +for jointIndex in range(p.getNumJoints(ob)): + p.resetJointState(ob, jointIndex, jointPositions[jointIndex]) + +#put kuka on top of husky + +cid = p.createConstraint(husky, -1, kukaId, -1, p.JOINT_FIXED, [0, 0, 0], [0, 0, 0], [0., 0., -.5], + [0, 0, 0, 1]) + +baseorn = p.getQuaternionFromEuler([3.1415, 0, 0.3]) +baseorn = [0, 0, 0, 1] +#[0, 0, 0.707, 0.707] + +#p.resetBasePositionAndOrientation(kukaId,[0,0,0],baseorn)#[0,0,0,1]) +kukaEndEffectorIndex = 6 +numJoints = p.getNumJoints(kukaId) +if (numJoints != 7): + exit() + +#lower limits for null space +ll = [-.967, -2, -2.96, 0.19, -2.96, -2.09, -3.05] +#upper limits for null space +ul = [.967, 2, 2.96, 2.29, 2.96, 2.09, 3.05] +#joint ranges for null space +jr = [5.8, 4, 5.8, 4, 5.8, 4, 6] +#restposes for null space +rp = [0, 0, 0, 0.5 * math.pi, 0, -math.pi * 0.5 * 0.66, 0] +#joint damping coefficents +jd = [0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1] + +for i in range(numJoints): + p.resetJointState(kukaId, i, rp[i]) + +p.setGravity(0, 0, -10) +t = 0. +prevPose = [0, 0, 0] +prevPose1 = [0, 0, 0] +hasPrevPose = 0 +useNullSpace = 0 + +useOrientation = 0 +#If we set useSimulation=0, it sets the arm pose to be the IK result directly without using dynamic control. +#This can be used to test the IK result accuracy. +useSimulation = 1 +useRealTimeSimulation = 1 +p.setRealTimeSimulation(useRealTimeSimulation) +#trailDuration is duration (in seconds) after debug lines will be removed automatically +#use 0 for no-removal +trailDuration = 15 +basepos = [0, 0, 0] +ang = 0 +ang = 0 + + +def accurateCalculateInverseKinematics(kukaId, endEffectorId, targetPos, threshold, maxIter): + closeEnough = False + iter = 0 + dist2 = 1e30 + while (not closeEnough and iter < maxIter): + jointPoses = p.calculateInverseKinematics(kukaId, kukaEndEffectorIndex, targetPos) + for i in range(numJoints): + p.resetJointState(kukaId, i, jointPoses[i]) + ls = p.getLinkState(kukaId, kukaEndEffectorIndex) + newPos = ls[4] + diff = [targetPos[0] - newPos[0], targetPos[1] - newPos[1], targetPos[2] - newPos[2]] + dist2 = (diff[0] * diff[0] + diff[1] * diff[1] + diff[2] * diff[2]) + closeEnough = (dist2 < threshold) + iter = iter + 1 + #print ("Num iter: "+str(iter) + "threshold: "+str(dist2)) + return jointPoses + + +wheels = [2, 3, 4, 5] +#(2, b'front_left_wheel', 0, 7, 6, 1, 0.0, 0.0, 0.0, -1.0, 0.0, 0.0, b'front_left_wheel_link') +#(3, b'front_right_wheel', 0, 8, 7, 1, 0.0, 0.0, 0.0, -1.0, 0.0, 0.0, b'front_right_wheel_link') +#(4, b'rear_left_wheel', 0, 9, 8, 1, 0.0, 0.0, 0.0, -1.0, 0.0, 0.0, b'rear_left_wheel_link') +#(5, b'rear_right_wheel', 0, 10, 9, 1, 0.0, 0.0, 0.0, -1.0, 0.0, 0.0, b'rear_right_wheel_link') +wheelVelocities = [0, 0, 0, 0] +wheelDeltasTurn = [1, -1, 1, -1] +wheelDeltasFwd = [1, 1, 1, 1] +while 1: + keys = p.getKeyboardEvents() + shift = 0.01 + wheelVelocities = [0, 0, 0, 0] + speed = 1.0 + for k in keys: + if ord('s') in keys: + p.saveWorld("state.py") + if ord('a') in keys: + basepos = basepos = [basepos[0], basepos[1] - shift, basepos[2]] + if ord('d') in keys: + basepos = basepos = [basepos[0], basepos[1] + shift, basepos[2]] + + if p.B3G_LEFT_ARROW in keys: + for i in range(len(wheels)): + wheelVelocities[i] = wheelVelocities[i] - speed * wheelDeltasTurn[i] + if p.B3G_RIGHT_ARROW in keys: + for i in range(len(wheels)): + wheelVelocities[i] = wheelVelocities[i] + speed * wheelDeltasTurn[i] + if p.B3G_UP_ARROW in keys: + for i in range(len(wheels)): + wheelVelocities[i] = wheelVelocities[i] + speed * wheelDeltasFwd[i] + if p.B3G_DOWN_ARROW in keys: + for i in range(len(wheels)): + wheelVelocities[i] = wheelVelocities[i] - speed * wheelDeltasFwd[i] + + baseorn = p.getQuaternionFromEuler([0, 0, ang]) + for i in range(len(wheels)): + p.setJointMotorControl2(husky, + wheels[i], + p.VELOCITY_CONTROL, + targetVelocity=wheelVelocities[i], + force=1000) + #p.resetBasePositionAndOrientation(kukaId,basepos,baseorn)#[0,0,0,1]) + if (useRealTimeSimulation): + t = time.time() #(dt, micro) = datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S.%f').split('.') + #t = (dt.second/60.)*2.*math.pi + else: + t = t + 0.001 + + if (useSimulation and useRealTimeSimulation == 0): + p.stepSimulation() + + for i in range(1): + #pos = [-0.4,0.2*math.cos(t),0.+0.2*math.sin(t)] + pos = [0.2 * math.cos(t), 0, 0. + 0.2 * math.sin(t) + 0.7] + #end effector points down, not up (in case useOrientation==1) + orn = p.getQuaternionFromEuler([0, -math.pi, 0]) + + if (useNullSpace == 1): + if (useOrientation == 1): + jointPoses = p.calculateInverseKinematics(kukaId, kukaEndEffectorIndex, pos, orn, ll, ul, + jr, rp) + else: + jointPoses = p.calculateInverseKinematics(kukaId, + kukaEndEffectorIndex, + pos, + lowerLimits=ll, + upperLimits=ul, + jointRanges=jr, + restPoses=rp) + else: + if (useOrientation == 1): + jointPoses = p.calculateInverseKinematics(kukaId, + kukaEndEffectorIndex, + pos, + orn, + jointDamping=jd) + else: + threshold = 0.001 + maxIter = 100 + jointPoses = accurateCalculateInverseKinematics(kukaId, kukaEndEffectorIndex, pos, + threshold, maxIter) + + if (useSimulation): + for i in range(numJoints): + p.setJointMotorControl2(bodyIndex=kukaId, + jointIndex=i, + controlMode=p.POSITION_CONTROL, + targetPosition=jointPoses[i], + targetVelocity=0, + force=500, + positionGain=1, + velocityGain=0.1) + else: + #reset the joint state (ignoring all dynamics, not recommended to use during simulation) + for i in range(numJoints): + p.resetJointState(kukaId, i, jointPoses[i]) + + ls = p.getLinkState(kukaId, kukaEndEffectorIndex) + if (hasPrevPose): + p.addUserDebugLine(prevPose, pos, [0, 0, 0.3], 1, trailDuration) + p.addUserDebugLine(prevPose1, ls[4], [1, 0, 0], 1, trailDuration) + prevPose = pos + prevPose1 = ls[4] + hasPrevPose = 1 diff --git a/examples/pybullet/gym/pybullet_examples/inverse_kinematics_pole.py b/examples/pybullet/gym/pybullet_examples/inverse_kinematics_pole.py new file mode 100644 index 000000000..653581a0e --- /dev/null +++ b/examples/pybullet/gym/pybullet_examples/inverse_kinematics_pole.py @@ -0,0 +1,66 @@ +import pybullet as p +import time +import math +from datetime import datetime +import pybullet_data + +clid = p.connect(p.SHARED_MEMORY) +if (clid < 0): + p.connect(p.GUI) + +p.setAdditionalSearchPath(pybullet_data.getDataPath()) +p.loadURDF("plane.urdf", [0, 0, -1.3]) +p.configureDebugVisualizer(p.COV_ENABLE_RENDERING, 0) +sawyerId = p.loadURDF("pole.urdf", [0, 0, 0]) +p.configureDebugVisualizer(p.COV_ENABLE_RENDERING, 1) +p.resetBasePositionAndOrientation(sawyerId, [0, 0, 0], [0, 0, 0, 1]) + +sawyerEndEffectorIndex = 3 +numJoints = p.getNumJoints(sawyerId) +#joint damping coefficents +jd = [0.1, 0.1, 0.1, 0.1] + +p.setGravity(0, 0, 0) +t = 0. +prevPose = [0, 0, 0] +prevPose1 = [0, 0, 0] +hasPrevPose = 0 + +ikSolver = 0 +useRealTimeSimulation = 0 +p.setRealTimeSimulation(useRealTimeSimulation) +#trailDuration is duration (in seconds) after debug lines will be removed automatically +#use 0 for no-removal +trailDuration = 1 + +while 1: + if (useRealTimeSimulation): + dt = datetime.now() + t = (dt.second / 60.) * 2. * math.pi + else: + t = t + 0.01 + time.sleep(0.01) + + for i in range(1): + pos = [2. * math.cos(t), 2. * math.cos(t), 0. + 2. * math.sin(t)] + jointPoses = p.calculateInverseKinematics(sawyerId, + sawyerEndEffectorIndex, + pos, + jointDamping=jd, + solver=ikSolver, + maxNumIterations=100) + + #reset the joint state (ignoring all dynamics, not recommended to use during simulation) + for i in range(numJoints): + jointInfo = p.getJointInfo(sawyerId, i) + qIndex = jointInfo[3] + if qIndex > -1: + p.resetJointState(sawyerId, i, jointPoses[qIndex - 7]) + + ls = p.getLinkState(sawyerId, sawyerEndEffectorIndex) + if (hasPrevPose): + p.addUserDebugLine(prevPose, pos, [0, 0, 0.3], 1, trailDuration) + p.addUserDebugLine(prevPose1, ls[4], [1, 0, 0], 1, trailDuration) + prevPose = pos + prevPose1 = ls[4] + hasPrevPose = 1 diff --git a/examples/pybullet/gym/pybullet_examples/jacobian.py b/examples/pybullet/gym/pybullet_examples/jacobian.py new file mode 100644 index 000000000..4a7e9725c --- /dev/null +++ b/examples/pybullet/gym/pybullet_examples/jacobian.py @@ -0,0 +1,102 @@ +import pybullet as p +import pybullet_data + + + +def getJointStates(robot): + joint_states = p.getJointStates(robot, range(p.getNumJoints(robot))) + joint_positions = [state[0] for state in joint_states] + joint_velocities = [state[1] for state in joint_states] + joint_torques = [state[3] for state in joint_states] + return joint_positions, joint_velocities, joint_torques + + +def getMotorJointStates(robot): + joint_states = p.getJointStates(robot, range(p.getNumJoints(robot))) + joint_infos = [p.getJointInfo(robot, i) for i in range(p.getNumJoints(robot))] + joint_states = [j for j, i in zip(joint_states, joint_infos) if i[3] > -1] + joint_positions = [state[0] for state in joint_states] + joint_velocities = [state[1] for state in joint_states] + joint_torques = [state[3] for state in joint_states] + return joint_positions, joint_velocities, joint_torques + + +def setJointPosition(robot, position, kp=1.0, kv=0.3): + num_joints = p.getNumJoints(robot) + zero_vec = [0.0] * num_joints + if len(position) == num_joints: + p.setJointMotorControlArray(robot, + range(num_joints), + p.POSITION_CONTROL, + targetPositions=position, + targetVelocities=zero_vec, + positionGains=[kp] * num_joints, + velocityGains=[kv] * num_joints) + else: + print("Not setting torque. " + "Expected torque vector of " + "length {}, got {}".format(num_joints, len(torque))) + + +def multiplyJacobian(robot, jacobian, vector): + result = [0.0, 0.0, 0.0] + i = 0 + for c in range(len(vector)): + if p.getJointInfo(robot, c)[3] > -1: + for r in range(3): + result[r] += jacobian[r][i] * vector[c] + i += 1 + return result + + +clid = p.connect(p.SHARED_MEMORY) +if (clid < 0): + p.connect(p.DIRECT) + +p.setAdditionalSearchPath(pybullet_data.getDataPath()) + +time_step = 0.001 +gravity_constant = -9.81 +p.resetSimulation() +p.setTimeStep(time_step) +p.setGravity(0.0, 0.0, gravity_constant) + +p.loadURDF("plane.urdf", [0, 0, -0.3]) + +kukaId = p.loadURDF("TwoJointRobot_w_fixedJoints.urdf", useFixedBase=True) +#kukaId = p.loadURDF("TwoJointRobot_w_fixedJoints.urdf",[0,0,0]) +#kukaId = p.loadURDF("kuka_iiwa/model.urdf",[0,0,0]) +#kukaId = p.loadURDF("kuka_lwr/kuka.urdf",[0,0,0]) +#kukaId = p.loadURDF("humanoid/nao.urdf",[0,0,0]) +p.resetBasePositionAndOrientation(kukaId, [0, 0, 0], [0, 0, 0, 1]) +numJoints = p.getNumJoints(kukaId) +kukaEndEffectorIndex = numJoints - 1 + +# Set a joint target for the position control and step the sim. +setJointPosition(kukaId, [0.1] * numJoints) +p.stepSimulation() + +# Get the joint and link state directly from Bullet. +pos, vel, torq = getJointStates(kukaId) +mpos, mvel, mtorq = getMotorJointStates(kukaId) + +result = p.getLinkState(kukaId, + kukaEndEffectorIndex, + computeLinkVelocity=1, + computeForwardKinematics=1) +link_trn, link_rot, com_trn, com_rot, frame_pos, frame_rot, link_vt, link_vr = result +# Get the Jacobians for the CoM of the end-effector link. +# Note that in this example com_rot = identity, and we would need to use com_rot.T * com_trn. +# The localPosition is always defined in terms of the link frame coordinates. + +zero_vec = [0.0] * len(mpos) +jac_t, jac_r = p.calculateJacobian(kukaId, kukaEndEffectorIndex, com_trn, mpos, zero_vec, zero_vec) + +print("Link linear velocity of CoM from getLinkState:") +print(link_vt) +print("Link linear velocity of CoM from linearJacobian * q_dot:") +print(multiplyJacobian(kukaId, jac_t, vel)) +print("Link angular velocity of CoM from getLinkState:") +print(link_vr) +print("Link angular velocity of CoM from angularJacobian * q_dot:") +print(multiplyJacobian(kukaId, jac_r, vel)) diff --git a/examples/pybullet/gym/pybullet_examples/manyspheres.py b/examples/pybullet/gym/pybullet_examples/manyspheres.py new file mode 100644 index 000000000..4c6e5197c --- /dev/null +++ b/examples/pybullet/gym/pybullet_examples/manyspheres.py @@ -0,0 +1,38 @@ +import pybullet as p +import time +import pybullet_data + + +conid = p.connect(p.SHARED_MEMORY) +if (conid < 0): + p.connect(p.GUI) + +p.setAdditionalSearchPath(pybullet_data.getDataPath()) +p.setInternalSimFlags(0) +p.resetSimulation() + +p.loadURDF("plane.urdf", useMaximalCoordinates=True) +p.loadURDF("tray/traybox.urdf", useMaximalCoordinates=True) + +gravXid = p.addUserDebugParameter("gravityX", -10, 10, 0) +gravYid = p.addUserDebugParameter("gravityY", -10, 10, 0) +gravZid = p.addUserDebugParameter("gravityZ", -10, 10, -10) +p.setPhysicsEngineParameter(numSolverIterations=10) +p.setPhysicsEngineParameter(contactBreakingThreshold=0.001) +p.configureDebugVisualizer(p.COV_ENABLE_RENDERING, 0) +for i in range(10): + for j in range(10): + for k in range(10): + ob = p.loadURDF("sphere_1cm.urdf", [0.02 * i, 0.02 * j, 0.2 + 0.02 * k], + useMaximalCoordinates=True) + +p.configureDebugVisualizer(p.COV_ENABLE_RENDERING, 1) +p.setGravity(0, 0, -10) + +p.setRealTimeSimulation(1) +while True: + gravX = p.readUserDebugParameter(gravXid) + gravY = p.readUserDebugParameter(gravYid) + gravZ = p.readUserDebugParameter(gravZid) + p.setGravity(gravX, gravY, gravZ) + time.sleep(0.01) diff --git a/examples/pybullet/gym/pybullet_examples/mimicJointConstraint.py b/examples/pybullet/gym/pybullet_examples/mimicJointConstraint.py new file mode 100644 index 000000000..7a54f5c10 --- /dev/null +++ b/examples/pybullet/gym/pybullet_examples/mimicJointConstraint.py @@ -0,0 +1,50 @@ +#a mimic joint can act as a gear between two joints +#you can control the gear ratio in magnitude and sign (>0 reverses direction) + +import pybullet as p +import time +import pybullet_data + +p.connect(p.GUI) +p.setAdditionalSearchPath(pybullet_data.getDataPath()) +p.loadURDF("plane.urdf", 0, 0, -2) +wheelA = p.loadURDF("differential/diff_ring.urdf", [0, 0, 0]) +for i in range(p.getNumJoints(wheelA)): + print(p.getJointInfo(wheelA, i)) + p.setJointMotorControl2(wheelA, i, p.VELOCITY_CONTROL, targetVelocity=0, force=0) + +c = p.createConstraint(wheelA, + 1, + wheelA, + 3, + jointType=p.JOINT_GEAR, + jointAxis=[0, 1, 0], + parentFramePosition=[0, 0, 0], + childFramePosition=[0, 0, 0]) +p.changeConstraint(c, gearRatio=1, maxForce=10000) + +c = p.createConstraint(wheelA, + 2, + wheelA, + 4, + jointType=p.JOINT_GEAR, + jointAxis=[0, 1, 0], + parentFramePosition=[0, 0, 0], + childFramePosition=[0, 0, 0]) +p.changeConstraint(c, gearRatio=-1, maxForce=10000) + +c = p.createConstraint(wheelA, + 1, + wheelA, + 4, + jointType=p.JOINT_GEAR, + jointAxis=[0, 1, 0], + parentFramePosition=[0, 0, 0], + childFramePosition=[0, 0, 0]) +p.changeConstraint(c, gearRatio=-1, maxForce=10000) + +p.setRealTimeSimulation(1) +while (1): + p.setGravity(0, 0, -10) + time.sleep(0.01) +#p.removeConstraint(c) diff --git a/examples/pybullet/gym/pybullet_examples/motorMaxVelocity.py b/examples/pybullet/gym/pybullet_examples/motorMaxVelocity.py new file mode 100644 index 000000000..95a0c1e39 --- /dev/null +++ b/examples/pybullet/gym/pybullet_examples/motorMaxVelocity.py @@ -0,0 +1,22 @@ +import pybullet as p +import time +import pybullet_data + +p.connect(p.GUI) +p.setAdditionalSearchPath(pybullet_data.getDataPath()) +cartpole = p.loadURDF("cartpole.urdf") +p.setRealTimeSimulation(1) +p.setJointMotorControl2(cartpole, + 1, + p.POSITION_CONTROL, + targetPosition=1000, + targetVelocity=0, + force=1000, + positionGain=1, + velocityGain=0, + maxVelocity=0.5) +while (1): + p.setGravity(0, 0, -10) + js = p.getJointState(cartpole, 1) + print("position=", js[0], "velocity=", js[1]) + time.sleep(0.01) diff --git a/examples/pybullet/gym/pybullet_examples/pdControl.py b/examples/pybullet/gym/pybullet_examples/pdControl.py new file mode 100644 index 000000000..e9c902e23 --- /dev/null +++ b/examples/pybullet/gym/pybullet_examples/pdControl.py @@ -0,0 +1,152 @@ +import pybullet as p +from pdControllerExplicit import PDControllerExplicitMultiDof +from pdControllerExplicit import PDControllerExplicit +from pdControllerStable import PDControllerStable + +import time + +useMaximalCoordinates = False +import pybullet_data + +p.connect(p.GUI) +p.setAdditionalSearchPath(pybullet_data.getDataPath()) +pole = p.loadURDF("cartpole.urdf", [0, 0, 0], useMaximalCoordinates=useMaximalCoordinates) +pole2 = p.loadURDF("cartpole.urdf", [0, 1, 0], useMaximalCoordinates=useMaximalCoordinates) +pole3 = p.loadURDF("cartpole.urdf", [0, 2, 0], useMaximalCoordinates=useMaximalCoordinates) +pole4 = p.loadURDF("cartpole.urdf", [0, 3, 0], useMaximalCoordinates=useMaximalCoordinates) + +exPD = PDControllerExplicitMultiDof(p) +sPD = PDControllerStable(p) + +for i in range(p.getNumJoints(pole2)): + #disable default constraint-based motors + p.setJointMotorControl2(pole, i, p.POSITION_CONTROL, targetPosition=0, force=0) + p.setJointMotorControl2(pole2, i, p.POSITION_CONTROL, targetPosition=0, force=0) + p.setJointMotorControl2(pole3, i, p.POSITION_CONTROL, targetPosition=0, force=0) + p.setJointMotorControl2(pole4, i, p.POSITION_CONTROL, targetPosition=0, force=0) + + #print("joint",i,"=",p.getJointInfo(pole2,i)) + +timeStepId = p.addUserDebugParameter("timeStep", 0.001, 0.1, 0.01) +desiredPosCartId = p.addUserDebugParameter("desiredPosCart", -10, 10, 2) +desiredVelCartId = p.addUserDebugParameter("desiredVelCart", -10, 10, 0) +kpCartId = p.addUserDebugParameter("kpCart", 0, 500, 1300) +kdCartId = p.addUserDebugParameter("kdCart", 0, 300, 150) +maxForceCartId = p.addUserDebugParameter("maxForceCart", 0, 5000, 1000) + +textColor = [1, 1, 1] +shift = 0.05 +p.addUserDebugText("explicit PD", [shift, 0, .1], + textColor, + parentObjectUniqueId=pole, + parentLinkIndex=1) +p.addUserDebugText("explicit PD plugin", [shift, 0, -.1], + textColor, + parentObjectUniqueId=pole2, + parentLinkIndex=1) +p.addUserDebugText("stablePD", [shift, 0, .1], + textColor, + parentObjectUniqueId=pole4, + parentLinkIndex=1) +p.addUserDebugText("position constraint", [shift, 0, -.1], + textColor, + parentObjectUniqueId=pole3, + parentLinkIndex=1) + +desiredPosPoleId = p.addUserDebugParameter("desiredPosPole", -10, 10, 0) +desiredVelPoleId = p.addUserDebugParameter("desiredVelPole", -10, 10, 0) +kpPoleId = p.addUserDebugParameter("kpPole", 0, 500, 1200) +kdPoleId = p.addUserDebugParameter("kdPole", 0, 300, 100) +maxForcePoleId = p.addUserDebugParameter("maxForcePole", 0, 5000, 1000) + +pd = p.loadPlugin("pdControlPlugin") + +p.setGravity(0, 0, -10) + +useRealTimeSim = False + +p.setRealTimeSimulation(useRealTimeSim) + +timeStep = 0.001 + +while p.isConnected(): + #p.getCameraImage(320,200) + timeStep = p.readUserDebugParameter(timeStepId) + p.setTimeStep(timeStep) + + desiredPosCart = p.readUserDebugParameter(desiredPosCartId) + desiredVelCart = p.readUserDebugParameter(desiredVelCartId) + kpCart = p.readUserDebugParameter(kpCartId) + kdCart = p.readUserDebugParameter(kdCartId) + maxForceCart = p.readUserDebugParameter(maxForceCartId) + + desiredPosPole = p.readUserDebugParameter(desiredPosPoleId) + desiredVelPole = p.readUserDebugParameter(desiredVelPoleId) + kpPole = p.readUserDebugParameter(kpPoleId) + kdPole = p.readUserDebugParameter(kdPoleId) + maxForcePole = p.readUserDebugParameter(maxForcePoleId) + + basePos, baseOrn = p.getBasePositionAndOrientation(pole) + + baseDof = 7 + taus = exPD.computePD(pole, [0, 1], [ + basePos[0], basePos[1], basePos[2], baseOrn[0], baseOrn[1], baseOrn[2], baseOrn[3], + desiredPosCart, desiredPosPole + ], [0, 0, 0, 0, 0, 0, 0, desiredVelCart, desiredVelPole], [0, 0, 0, 0, 0, 0, 0, kpCart, kpPole], + [0, 0, 0, 0, 0, 0, 0, kdCart, kdPole], + [0, 0, 0, 0, 0, 0, 0, maxForceCart, maxForcePole], timeStep) + + for j in [0, 1]: + p.setJointMotorControlMultiDof(pole, + j, + controlMode=p.TORQUE_CONTROL, + force=[taus[j + baseDof]]) + #p.setJointMotorControlArray(pole, [0,1], controlMode=p.TORQUE_CONTROL, forces=taus) + + if (pd >= 0): + link = 0 + p.setJointMotorControl2(bodyUniqueId=pole2, + jointIndex=link, + controlMode=p.PD_CONTROL, + targetPosition=desiredPosCart, + targetVelocity=desiredVelCart, + force=maxForceCart, + positionGain=kpCart, + velocityGain=kdCart) + link = 1 + p.setJointMotorControl2(bodyUniqueId=pole2, + jointIndex=link, + controlMode=p.PD_CONTROL, + targetPosition=desiredPosPole, + targetVelocity=desiredVelPole, + force=maxForcePole, + positionGain=kpPole, + velocityGain=kdPole) + + taus = sPD.computePD(pole4, [0, 1], [desiredPosCart, desiredPosPole], + [desiredVelCart, desiredVelPole], [kpCart, kpPole], [kdCart, kdPole], + [maxForceCart, maxForcePole], timeStep) + #p.setJointMotorControlArray(pole4, [0,1], controlMode=p.TORQUE_CONTROL, forces=taus) + for j in [0, 1]: + p.setJointMotorControlMultiDof(pole4, j, controlMode=p.TORQUE_CONTROL, force=[taus[j]]) + + p.setJointMotorControl2(pole3, + 0, + p.POSITION_CONTROL, + targetPosition=desiredPosCart, + targetVelocity=desiredVelCart, + positionGain=timeStep * (kpCart / 150.), + velocityGain=0.5, + force=maxForceCart) + p.setJointMotorControl2(pole3, + 1, + p.POSITION_CONTROL, + targetPosition=desiredPosPole, + targetVelocity=desiredVelPole, + positionGain=timeStep * (kpPole / 150.), + velocityGain=0.5, + force=maxForcePole) + + if (not useRealTimeSim): + p.stepSimulation() + time.sleep(timeStep) diff --git a/examples/pybullet/gym/pybullet_examples/pdControllerExplicit.py b/examples/pybullet/gym/pybullet_examples/pdControllerExplicit.py new file mode 100644 index 000000000..20cd0a65e --- /dev/null +++ b/examples/pybullet/gym/pybullet_examples/pdControllerExplicit.py @@ -0,0 +1,98 @@ +import numpy as np + + +class PDControllerExplicitMultiDof(object): + + def __init__(self, pb): + self._pb = pb + + def computePD(self, bodyUniqueId, jointIndices, desiredPositions, desiredVelocities, kps, kds, + maxForces, timeStep): + + numJoints = len(jointIndices) #self._pb.getNumJoints(bodyUniqueId) + curPos, curOrn = self._pb.getBasePositionAndOrientation(bodyUniqueId) + q1 = [curPos[0], curPos[1], curPos[2], curOrn[0], curOrn[1], curOrn[2], curOrn[3]] + baseLinVel, baseAngVel = self._pb.getBaseVelocity(bodyUniqueId) + qdot1 = [ + baseLinVel[0], baseLinVel[1], baseLinVel[2], baseAngVel[0], baseAngVel[1], baseAngVel[2], 0 + ] + qError = [0, 0, 0, 0, 0, 0, 0] + qIndex = 7 + qdotIndex = 7 + zeroAccelerations = [0, 0, 0, 0, 0, 0, 0] + for i in range(numJoints): + js = self._pb.getJointStateMultiDof(bodyUniqueId, jointIndices[i]) + + jointPos = js[0] + jointVel = js[1] + q1 += jointPos + + if len(js[0]) == 1: + desiredPos = desiredPositions[qIndex] + + qdiff = desiredPos - jointPos[0] + qError.append(qdiff) + zeroAccelerations.append(0.) + qdot1 += jointVel + qIndex += 1 + qdotIndex += 1 + if len(js[0]) == 4: + desiredPos = [ + desiredPositions[qIndex], desiredPositions[qIndex + 1], desiredPositions[qIndex + 2], + desiredPositions[qIndex + 3] + ] + axis = self._pb.getAxisDifferenceQuaternion(desiredPos, jointPos) + jointVelNew = [jointVel[0], jointVel[1], jointVel[2], 0] + qdot1 += jointVelNew + qError.append(axis[0]) + qError.append(axis[1]) + qError.append(axis[2]) + qError.append(0) + desiredVel = [ + desiredVelocities[qdotIndex], desiredVelocities[qdotIndex + 1], + desiredVelocities[qdotIndex + 2] + ] + zeroAccelerations += [0., 0., 0., 0.] + qIndex += 4 + qdotIndex += 4 + + q = np.array(q1) + qdot = np.array(qdot1) + qdotdesired = np.array(desiredVelocities) + qdoterr = qdotdesired - qdot + Kp = np.diagflat(kps) + Kd = np.diagflat(kds) + p = Kp.dot(qError) + d = Kd.dot(qdoterr) + forces = p + d + maxF = np.array(maxForces) + forces = np.clip(forces, -maxF, maxF) + return forces + + +class PDControllerExplicit(object): + + def __init__(self, pb): + self._pb = pb + + def computePD(self, bodyUniqueId, jointIndices, desiredPositions, desiredVelocities, kps, kds, + maxForces, timeStep): + numJoints = self._pb.getNumJoints(bodyUniqueId) + jointStates = self._pb.getJointStates(bodyUniqueId, jointIndices) + q1 = [] + qdot1 = [] + for i in range(numJoints): + q1.append(jointStates[i][0]) + qdot1.append(jointStates[i][1]) + q = np.array(q1) + qdot = np.array(qdot1) + qdes = np.array(desiredPositions) + qdotdes = np.array(desiredVelocities) + qError = qdes - q + qdotError = qdotdes - qdot + Kp = np.diagflat(kps) + Kd = np.diagflat(kds) + forces = Kp.dot(qError) + Kd.dot(qdotError) + maxF = np.array(maxForces) + forces = np.clip(forces, -maxF, maxF) + return forces diff --git a/examples/pybullet/gym/pybullet_examples/pdControllerStable.py b/examples/pybullet/gym/pybullet_examples/pdControllerStable.py new file mode 100644 index 000000000..bec3356c4 --- /dev/null +++ b/examples/pybullet/gym/pybullet_examples/pdControllerStable.py @@ -0,0 +1,147 @@ +import numpy as np + + +class PDControllerStableMultiDof(object): + + def __init__(self, pb): + self._pb = pb + + def computePD(self, bodyUniqueId, jointIndices, desiredPositions, desiredVelocities, kps, kds, + maxForces, timeStep): + + numJoints = len(jointIndices) #self._pb.getNumJoints(bodyUniqueId) + curPos, curOrn = self._pb.getBasePositionAndOrientation(bodyUniqueId) + #q1 = [desiredPositions[0],desiredPositions[1],desiredPositions[2],desiredPositions[3],desiredPositions[4],desiredPositions[5],desiredPositions[6]] + q1 = [curPos[0], curPos[1], curPos[2], curOrn[0], curOrn[1], curOrn[2], curOrn[3]] + + #qdot1 = [0,0,0, 0,0,0,0] + baseLinVel, baseAngVel = self._pb.getBaseVelocity(bodyUniqueId) + + qdot1 = [ + baseLinVel[0], baseLinVel[1], baseLinVel[2], baseAngVel[0], baseAngVel[1], baseAngVel[2], 0 + ] + qError = [0, 0, 0, 0, 0, 0, 0] + + qIndex = 7 + qdotIndex = 7 + zeroAccelerations = [0, 0, 0, 0, 0, 0, 0] + for i in range(numJoints): + js = self._pb.getJointStateMultiDof(bodyUniqueId, jointIndices[i]) + + jointPos = js[0] + jointVel = js[1] + q1 += jointPos + + if len(js[0]) == 1: + desiredPos = desiredPositions[qIndex] + + qdiff = desiredPos - jointPos[0] + qError.append(qdiff) + zeroAccelerations.append(0.) + qdot1 += jointVel + qIndex += 1 + qdotIndex += 1 + if len(js[0]) == 4: + desiredPos = [ + desiredPositions[qIndex], desiredPositions[qIndex + 1], desiredPositions[qIndex + 2], + desiredPositions[qIndex + 3] + ] + axis = self._pb.getAxisDifferenceQuaternion(desiredPos, jointPos) + jointVelNew = [jointVel[0], jointVel[1], jointVel[2], 0] + qdot1 += jointVelNew + qError.append(axis[0]) + qError.append(axis[1]) + qError.append(axis[2]) + qError.append(0) + desiredVel = [ + desiredVelocities[qdotIndex], desiredVelocities[qdotIndex + 1], + desiredVelocities[qdotIndex + 2] + ] + zeroAccelerations += [0., 0., 0., 0.] + qIndex += 4 + qdotIndex += 4 + + q = np.array(q1) + qdot = np.array(qdot1) + + qdotdesired = np.array(desiredVelocities) + qdoterr = qdotdesired - qdot + + Kp = np.diagflat(kps) + Kd = np.diagflat(kds) + + # Compute -Kp(q + qdot - qdes) + p_term = Kp.dot(qError - qdot*timeStep) + # Compute -Kd(qdot - qdotdes) + d_term = Kd.dot(qdoterr) + + # Compute Inertia matrix M(q) + M = self._pb.calculateMassMatrix(bodyUniqueId, q1, flags=1) + M = np.array(M) + # Given: M(q) * qddot + C(q, qdot) = T_ext + T_int + # Compute Coriolis and External (Gravitational) terms G = C - T_ext + G = self._pb.calculateInverseDynamics(bodyUniqueId, q1, qdot1, zeroAccelerations, flags=1) + G = np.array(G) + # Obtain estimated generalized accelerations, considering Coriolis and Gravitational forces, and stable PD actions + qddot = np.linalg.solve(a=(M + Kd * timeStep), + b=p_term + d_term - G) + # Compute control generalized forces (T_int) + tau = p_term + d_term - Kd.dot(qddot) * timeStep + # Clip generalized forces to actuator limits + maxF = np.array(maxForces) + generalized_forces = np.clip(tau, -maxF, maxF) + return generalized_forces + + +class PDControllerStable(object): + """ + Implementation based on: Tan, J., Liu, K., & Turk, G. (2011). "Stable proportional-derivative controllers" + DOI: 10.1109/MCG.2011.30 + """ + def __init__(self, pb): + self._pb = pb + + def computePD(self, bodyUniqueId, jointIndices, desiredPositions, desiredVelocities, kps, kds, + maxForces, timeStep): + numJoints = self._pb.getNumJoints(bodyUniqueId) + jointStates = self._pb.getJointStates(bodyUniqueId, jointIndices) + q1 = [] + qdot1 = [] + zeroAccelerations = [] + for i in range(numJoints): + q1.append(jointStates[i][0]) + qdot1.append(jointStates[i][1]) + zeroAccelerations.append(0) + + q = np.array(q1) + qdot = np.array(qdot1) + qdes = np.array(desiredPositions) + qdotdes = np.array(desiredVelocities) + + qError = qdes - q + qdotError = qdotdes - qdot + + Kp = np.diagflat(kps) + Kd = np.diagflat(kds) + + # Compute -Kp(q + qdot - qdes) + p_term = Kp.dot(qError - qdot*timeStep) + # Compute -Kd(qdot - qdotdes) + d_term = Kd.dot(qdotError) + + # Compute Inertia matrix M(q) + M = self._pb.calculateMassMatrix(bodyUniqueId, q1) + M = np.array(M) + # Given: M(q) * qddot + C(q, qdot) = T_ext + T_int + # Compute Coriolis and External (Gravitational) terms G = C - T_ext + G = self._pb.calculateInverseDynamics(bodyUniqueId, q1, qdot1, zeroAccelerations) + G = np.array(G) + # Obtain estimated generalized accelerations, considering Coriolis and Gravitational forces, and stable PD actions + qddot = np.linalg.solve(a=(M + Kd * timeStep), + b=(-G + p_term + d_term)) + # Compute control generalized forces (T_int) + tau = p_term + d_term - (Kd.dot(qddot) * timeStep) + # Clip generalized forces to actuator limits + maxF = np.array(maxForces) + generalized_forces = np.clip(tau, -maxF, maxF) + return generalized_forces diff --git a/examples/pybullet/gym/pybullet_examples/pointCloudFromCameraImage.py b/examples/pybullet/gym/pybullet_examples/pointCloudFromCameraImage.py new file mode 100644 index 000000000..65d88149c --- /dev/null +++ b/examples/pybullet/gym/pybullet_examples/pointCloudFromCameraImage.py @@ -0,0 +1,138 @@ +import pybullet as p +import math +import numpy as np +import pybullet_data + +p.connect(p.GUI) +p.setAdditionalSearchPath(pybullet_data.getDataPath()) +plane = p.loadURDF("plane100.urdf") +cube = p.loadURDF("cube.urdf", [0, 0, 1]) + + +def getRayFromTo(mouseX, mouseY): + width, height, viewMat, projMat, cameraUp, camForward, horizon, vertical, _, _, dist, camTarget = p.getDebugVisualizerCamera( + ) + camPos = [ + camTarget[0] - dist * camForward[0], camTarget[1] - dist * camForward[1], + camTarget[2] - dist * camForward[2] + ] + farPlane = 10000 + rayForward = [(camTarget[0] - camPos[0]), (camTarget[1] - camPos[1]), (camTarget[2] - camPos[2])] + lenFwd = math.sqrt(rayForward[0] * rayForward[0] + rayForward[1] * rayForward[1] + + rayForward[2] * rayForward[2]) + invLen = farPlane * 1. / lenFwd + rayForward = [invLen * rayForward[0], invLen * rayForward[1], invLen * rayForward[2]] + rayFrom = camPos + oneOverWidth = float(1) / float(width) + oneOverHeight = float(1) / float(height) + + dHor = [horizon[0] * oneOverWidth, horizon[1] * oneOverWidth, horizon[2] * oneOverWidth] + dVer = [vertical[0] * oneOverHeight, vertical[1] * oneOverHeight, vertical[2] * oneOverHeight] + rayToCenter = [ + rayFrom[0] + rayForward[0], rayFrom[1] + rayForward[1], rayFrom[2] + rayForward[2] + ] + ortho = [ + -0.5 * horizon[0] + 0.5 * vertical[0] + float(mouseX) * dHor[0] - float(mouseY) * dVer[0], + -0.5 * horizon[1] + 0.5 * vertical[1] + float(mouseX) * dHor[1] - float(mouseY) * dVer[1], + -0.5 * horizon[2] + 0.5 * vertical[2] + float(mouseX) * dHor[2] - float(mouseY) * dVer[2] + ] + + rayTo = [ + rayFrom[0] + rayForward[0] + ortho[0], rayFrom[1] + rayForward[1] + ortho[1], + rayFrom[2] + rayForward[2] + ortho[2] + ] + lenOrtho = math.sqrt(ortho[0] * ortho[0] + ortho[1] * ortho[1] + ortho[2] * ortho[2]) + alpha = math.atan(lenOrtho / farPlane) + return rayFrom, rayTo, alpha + + +width, height, viewMat, projMat, cameraUp, camForward, horizon, vertical, _, _, dist, camTarget = p.getDebugVisualizerCamera( +) +camPos = [ + camTarget[0] - dist * camForward[0], camTarget[1] - dist * camForward[1], + camTarget[2] - dist * camForward[2] +] +farPlane = 10000 +rayForward = [(camTarget[0] - camPos[0]), (camTarget[1] - camPos[1]), (camTarget[2] - camPos[2])] +lenFwd = math.sqrt(rayForward[0] * rayForward[0] + rayForward[1] * rayForward[1] + + rayForward[2] * rayForward[2]) +oneOverWidth = float(1) / float(width) +oneOverHeight = float(1) / float(height) +dHor = [horizon[0] * oneOverWidth, horizon[1] * oneOverWidth, horizon[2] * oneOverWidth] +dVer = [vertical[0] * oneOverHeight, vertical[1] * oneOverHeight, vertical[2] * oneOverHeight] + +lendHor = math.sqrt(dHor[0] * dHor[0] + dHor[1] * dHor[1] + dHor[2] * dHor[2]) +lendVer = math.sqrt(dVer[0] * dVer[0] + dVer[1] * dVer[1] + dVer[2] * dVer[2]) + +cornersX = [0, width, width, 0] +cornersY = [0, 0, height, height] +corners3D = [] + +imgW = int(width / 4) +imgH = int(height / 4) + +img = p.getCameraImage(imgW, imgH, renderer=p.ER_BULLET_HARDWARE_OPENGL) +rgbBuffer = img[2] +depthBuffer = img[3] +print("rgbBuffer.shape=", rgbBuffer.shape) +print("depthBuffer.shape=", depthBuffer.shape) + +#disable rendering temporary makes adding objects faster +p.configureDebugVisualizer(p.COV_ENABLE_RENDERING, 0) +p.configureDebugVisualizer(p.COV_ENABLE_GUI, 0) +p.configureDebugVisualizer(p.COV_ENABLE_TINY_RENDERER, 0) +visualShapeId = p.createVisualShape(shapeType=p.GEOM_SPHERE, rgbaColor=[1, 1, 1, 1], radius=0.03) +collisionShapeId = -1 #p.createCollisionShape(shapeType=p.GEOM_MESH, fileName="duck_vhacd.obj", collisionFramePosition=shift,meshScale=meshScale) + +for i in range(4): + w = cornersX[i] + h = cornersY[i] + rayFrom, rayTo, _ = getRayFromTo(w, h) + rf = np.array(rayFrom) + rt = np.array(rayTo) + vec = rt - rf + l = np.sqrt(np.dot(vec, vec)) + newTo = (0.01 / l) * vec + rf + #print("len vec=",np.sqrt(np.dot(vec,vec))) + + p.addUserDebugLine(rayFrom, newTo, [1, 0, 0]) + corners3D.append(newTo) +count = 0 + +stepX = 5 +stepY = 5 +for w in range(0, imgW, stepX): + for h in range(0, imgH, stepY): + count += 1 + if ((count % 100) == 0): + print(count, "out of ", imgW * imgH / (stepX * stepY)) + rayFrom, rayTo, alpha = getRayFromTo(w * (width / imgW), h * (height / imgH)) + rf = np.array(rayFrom) + rt = np.array(rayTo) + vec = rt - rf + l = np.sqrt(np.dot(vec, vec)) + depthImg = float(depthBuffer[h, w]) + far = 1000. + near = 0.01 + depth = far * near / (far - (far - near) * depthImg) + depth /= math.cos(alpha) + newTo = (depth / l) * vec + rf + #p.addUserDebugLine(rayFrom, newTo, [1, 0, 0]) + mb = p.createMultiBody(baseMass=0, + baseCollisionShapeIndex=collisionShapeId, + baseVisualShapeIndex=visualShapeId, + basePosition=newTo, + useMaximalCoordinates=True) + color = rgbBuffer[h, w] + color = [color[0] / 255., color[1] / 255., color[2] / 255., 1] + p.changeVisualShape(mb, -1, rgbaColor=color) +p.addUserDebugLine(corners3D[0], corners3D[1], [1, 0, 0]) +p.addUserDebugLine(corners3D[1], corners3D[2], [1, 0, 0]) +p.addUserDebugLine(corners3D[2], corners3D[3], [1, 0, 0]) +p.addUserDebugLine(corners3D[3], corners3D[0], [1, 0, 0]) +p.configureDebugVisualizer(p.COV_ENABLE_RENDERING, 1) +print("ready\n") +#p.removeBody(plane) +#p.removeBody(cube) +while (1): + p.setGravity(0, 0, -10) diff --git a/examples/pybullet/gym/pybullet_examples/profileTiming.py b/examples/pybullet/gym/pybullet_examples/profileTiming.py new file mode 100644 index 000000000..96c25b300 --- /dev/null +++ b/examples/pybullet/gym/pybullet_examples/profileTiming.py @@ -0,0 +1,25 @@ +import pybullet as p +import time +#you can visualize the timings using Google Chrome, visit about://tracing +#and load the json file +import pybullet_data + +p.connect(p.GUI) +p.setAdditionalSearchPath(pybullet_data.getDataPath()) + +t = time.time() + 3.1 + +logId = p.startStateLogging(p.STATE_LOGGING_PROFILE_TIMINGS, "chrome_about_tracing.json") +while (time.time() < t): + p.stepSimulation() + p.submitProfileTiming("pythontest") + time.sleep(1./240.) + p.submitProfileTiming("nested") + for i in range (100): + p.submitProfileTiming("deep_nested") + p.submitProfileTiming() + time.sleep(1./1000.) + p.submitProfileTiming() + p.submitProfileTiming() + +p.stopStateLogging(logId) diff --git a/examples/pybullet/gym/pybullet_examples/projective_texture.py b/examples/pybullet/gym/pybullet_examples/projective_texture.py new file mode 100644 index 000000000..6116c59b0 --- /dev/null +++ b/examples/pybullet/gym/pybullet_examples/projective_texture.py @@ -0,0 +1,41 @@ +import pybullet as p +from time import sleep +import matplotlib.pyplot as plt +import numpy as np +import pybullet_data + +physicsClient = p.connect(p.GUI) + +p.setAdditionalSearchPath(pybullet_data.getDataPath()) +p.setGravity(0, 0, 0) +bearStartPos1 = [-3.3, 0, 0] +bearStartOrientation1 = p.getQuaternionFromEuler([0, 0, 0]) +bearId1 = p.loadURDF("plane.urdf", bearStartPos1, bearStartOrientation1) +bearStartPos2 = [0, 0, 0] +bearStartOrientation2 = p.getQuaternionFromEuler([0, 0, 0]) +bearId2 = p.loadURDF("teddy_large.urdf", bearStartPos2, bearStartOrientation2) +textureId = p.loadTexture("checker_grid.jpg") +#p.changeVisualShape(objectUniqueId=0, linkIndex=-1, textureUniqueId=textureId) +#p.changeVisualShape(objectUniqueId=1, linkIndex=-1, textureUniqueId=textureId) + +useRealTimeSimulation = 1 + +if (useRealTimeSimulation): + p.setRealTimeSimulation(1) + +while 1: + if (useRealTimeSimulation): + camera = p.getDebugVisualizerCamera() + viewMat = camera[2] + projMat = camera[3] + #An example of setting the view matrix for the projective texture. + #viewMat = p.computeViewMatrix(cameraEyePosition=[7,0,0], cameraTargetPosition=[0,0,0], cameraUpVector=[0,0,1]) + p.getCameraImage(300, + 300, + renderer=p.ER_BULLET_HARDWARE_OPENGL, + flags=p.ER_USE_PROJECTIVE_TEXTURE, + projectiveTextureView=viewMat, + projectiveTextureProj=projMat) + p.setGravity(0, 0, 0) + else: + p.stepSimulation() diff --git a/examples/pybullet/gym/pybullet_examples/rollPitchYaw.py b/examples/pybullet/gym/pybullet_examples/rollPitchYaw.py new file mode 100644 index 000000000..e5dac10ba --- /dev/null +++ b/examples/pybullet/gym/pybullet_examples/rollPitchYaw.py @@ -0,0 +1,28 @@ +import pybullet as p +import time +import pybullet_data + +cid = p.connect(p.SHARED_MEMORY) +if (cid < 0): + p.connect(p.GUI) + +p.setAdditionalSearchPath(pybullet_data.getDataPath()) +q = p.loadURDF("quadruped/quadruped.urdf", useFixedBase=True) +rollId = p.addUserDebugParameter("roll", -1.5, 1.5, 0) +pitchId = p.addUserDebugParameter("pitch", -1.5, 1.5, 0) +yawId = p.addUserDebugParameter("yaw", -1.5, 1.5, 0) +fwdxId = p.addUserDebugParameter("fwd_x", -1, 1, 0) +fwdyId = p.addUserDebugParameter("fwd_y", -1, 1, 0) +fwdzId = p.addUserDebugParameter("fwd_z", -1, 1, 0) + +while True: + roll = p.readUserDebugParameter(rollId) + pitch = p.readUserDebugParameter(pitchId) + yaw = p.readUserDebugParameter(yawId) + x = p.readUserDebugParameter(fwdxId) + y = p.readUserDebugParameter(fwdyId) + z = p.readUserDebugParameter(fwdzId) + + orn = p.getQuaternionFromEuler([roll, pitch, yaw]) + p.resetBasePositionAndOrientation(q, [x, y, z], orn) + #p.stepSimulation()#not really necessary for this demo, no physics used diff --git a/examples/pybullet/gym/pybullet_examples/satCollision.py b/examples/pybullet/gym/pybullet_examples/satCollision.py new file mode 100644 index 000000000..af68e143f --- /dev/null +++ b/examples/pybullet/gym/pybullet_examples/satCollision.py @@ -0,0 +1,21 @@ +import pybullet as p +import time + +import pybullet_data + +p.connect(p.GUI) +p.setAdditionalSearchPath(pybullet_data.getDataPath()) +p.setGravity(0, 0, -10) +p.setPhysicsEngineParameter(enableSAT=1) +p.loadURDF("cube_concave.urdf", [0, 0, -25], + globalScaling=50, + useFixedBase=True, + flags=p.URDF_INITIALIZE_SAT_FEATURES) +p.loadURDF("cube.urdf", [0, 0, 1], globalScaling=1, flags=p.URDF_INITIALIZE_SAT_FEATURES) +p.loadURDF("duck_vhacd.urdf", [1, 0, 1], globalScaling=1, flags=p.URDF_INITIALIZE_SAT_FEATURES) + +while (p.isConnected()): + p.stepSimulation() + pts = p.getContactPoints() + #print("num contacts = ", len(pts)) + time.sleep(1. / 240.) diff --git a/examples/pybullet/gym/pybullet_examples/sceneAabb.py b/examples/pybullet/gym/pybullet_examples/sceneAabb.py new file mode 100644 index 000000000..260fa4f64 --- /dev/null +++ b/examples/pybullet/gym/pybullet_examples/sceneAabb.py @@ -0,0 +1,42 @@ +import pybullet as p +import time +import numpy as np + +import pybullet_data + +p.connect(p.GUI) +p.setAdditionalSearchPath(pybullet_data.getDataPath()) +p.loadURDF("plane.urdf") +p.loadURDF("sphere2.urdf",[0,0,2]) + +dt = 1./240. +p.setTimeStep(dt) + +def getSceneAABB(): + aabbMins=[] + aabbMaxs=[] + + for i in range(p.getNumBodies()): + uid = p.getBodyUniqueId(i) + aabb = p.getAABB(uid) + aabbMins.append(np.array(aabb[0])) + aabbMaxs.append(np.array(aabb[1])) + + if len(aabbMins): + sceneAABBMin = aabbMins[0] + sceneAABBMax = aabbMaxs[0] + + for aabb in aabbMins: + sceneAABBMin = np.minimum(sceneAABBMin,aabb) + for aabb in aabbMaxs: + sceneAABBMax = np.maximum(sceneAABBMax,aabb) + + print("sceneAABBMin=",sceneAABBMin) + print("sceneAABBMax=",sceneAABBMax) + +getSceneAABB() + +while (1): + p.stepSimulation() + time.sleep(dt) + diff --git a/examples/pybullet/gym/pybullet_examples/signedDistanceField.py b/examples/pybullet/gym/pybullet_examples/signedDistanceField.py new file mode 100644 index 000000000..e1f94fc00 --- /dev/null +++ b/examples/pybullet/gym/pybullet_examples/signedDistanceField.py @@ -0,0 +1,17 @@ +import pybullet as p +import pybullet +import time +import pybullet_data + +p.connect(p.GUI) +p.setAdditionalSearchPath(pybullet_data.getDataPath()) +p.loadURDF("toys/concave_box.urdf") +p.setGravity(0, 0, -10) +for i in range(10): + p.loadURDF("sphere_1cm.urdf", [i * 0.02, 0, 0.5]) +p.loadURDF("duck_vhacd.urdf") +timeStep = 1. / 240. +p.setTimeStep(timeStep) +while (1): + p.stepSimulation() + time.sleep(timeStep) diff --git a/examples/pybullet/gym/pybullet_examples/snake.py b/examples/pybullet/gym/pybullet_examples/snake.py new file mode 100644 index 000000000..d70a50e0a --- /dev/null +++ b/examples/pybullet/gym/pybullet_examples/snake.py @@ -0,0 +1,144 @@ +import pybullet as p +import time +import math + +# This simple snake logic is from some 15 year old Havok C++ demo +# Thanks to Michael Ewert! +import pybullet_data + +p.connect(p.GUI) +p.setAdditionalSearchPath(pybullet_data.getDataPath()) +plane = p.createCollisionShape(p.GEOM_PLANE) + +p.createMultiBody(0, plane) + +useMaximalCoordinates = True +sphereRadius = 0.25 +#colBoxId = p.createCollisionShapeArray([p.GEOM_BOX, p.GEOM_SPHERE],radii=[sphereRadius+0.03,sphereRadius+0.03], halfExtents=[[sphereRadius,sphereRadius,sphereRadius],[sphereRadius,sphereRadius,sphereRadius]]) +colBoxId = p.createCollisionShape(p.GEOM_BOX, + halfExtents=[sphereRadius, sphereRadius, sphereRadius]) + +mass = 1 +visualShapeId = -1 + +link_Masses = [] +linkCollisionShapeIndices = [] +linkVisualShapeIndices = [] +linkPositions = [] +linkOrientations = [] +linkInertialFramePositions = [] +linkInertialFrameOrientations = [] +indices = [] +jointTypes = [] +axis = [] + +for i in range(36): + link_Masses.append(1) + linkCollisionShapeIndices.append(colBoxId) + linkVisualShapeIndices.append(-1) + linkPositions.append([0, sphereRadius * 2.0 + 0.01, 0]) + linkOrientations.append([0, 0, 0, 1]) + linkInertialFramePositions.append([0, 0, 0]) + linkInertialFrameOrientations.append([0, 0, 0, 1]) + indices.append(i) + jointTypes.append(p.JOINT_REVOLUTE) + axis.append([0, 0, 1]) + +basePosition = [0, 0, 1] +baseOrientation = [0, 0, 0, 1] +sphereUid = p.createMultiBody(mass, + colBoxId, + visualShapeId, + basePosition, + baseOrientation, + linkMasses=link_Masses, + linkCollisionShapeIndices=linkCollisionShapeIndices, + linkVisualShapeIndices=linkVisualShapeIndices, + linkPositions=linkPositions, + linkOrientations=linkOrientations, + linkInertialFramePositions=linkInertialFramePositions, + linkInertialFrameOrientations=linkInertialFrameOrientations, + linkParentIndices=indices, + linkJointTypes=jointTypes, + linkJointAxis=axis, + useMaximalCoordinates=useMaximalCoordinates) + +p.setGravity(0, 0, -10) +p.setRealTimeSimulation(0) + +anistropicFriction = [1, 0.01, 0.01] +p.changeDynamics(sphereUid, -1, lateralFriction=2, anisotropicFriction=anistropicFriction) +p.getNumJoints(sphereUid) +for i in range(p.getNumJoints(sphereUid)): + p.getJointInfo(sphereUid, i) + p.changeDynamics(sphereUid, i, lateralFriction=2, anisotropicFriction=anistropicFriction) + +dt = 1. / 240. +SNAKE_NORMAL_PERIOD = 0.1 #1.5 +m_wavePeriod = SNAKE_NORMAL_PERIOD + +m_waveLength = 4 +m_wavePeriod = 1.5 +m_waveAmplitude = 0.4 +m_waveFront = 0.0 +#our steering value +m_steering = 0.0 +m_segmentLength = sphereRadius * 2.0 +forward = 0 + +while (1): + keys = p.getKeyboardEvents() + for k, v in keys.items(): + + if (k == p.B3G_RIGHT_ARROW and (v & p.KEY_WAS_TRIGGERED)): + m_steering = -.2 + if (k == p.B3G_RIGHT_ARROW and (v & p.KEY_WAS_RELEASED)): + m_steering = 0 + if (k == p.B3G_LEFT_ARROW and (v & p.KEY_WAS_TRIGGERED)): + m_steering = .2 + if (k == p.B3G_LEFT_ARROW and (v & p.KEY_WAS_RELEASED)): + m_steering = 0 + + amp = 0.2 + offset = 0.6 + numMuscles = p.getNumJoints(sphereUid) + scaleStart = 1.0 + + #start of the snake with smaller waves. + #I think starting the wave at the tail would work better ( while it still goes from head to tail ) + if (m_waveFront < m_segmentLength * 4.0): + scaleStart = m_waveFront / (m_segmentLength * 4.0) + + segment = numMuscles - 1 + + #we simply move a sin wave down the body of the snake. + #this snake may be going backwards, but who can tell ;) + for joint in range(p.getNumJoints(sphereUid)): + segment = joint #numMuscles-1-joint + #map segment to phase + phase = (m_waveFront - (segment + 1) * m_segmentLength) / m_waveLength + phase -= math.floor(phase) + phase *= math.pi * 2.0 + + #map phase to curvature + targetPos = math.sin(phase) * scaleStart * m_waveAmplitude + + #// steer snake by squashing +ve or -ve side of sin curve + if (m_steering > 0 and targetPos < 0): + targetPos *= 1.0 / (1.0 + m_steering) + + if (m_steering < 0 and targetPos > 0): + targetPos *= 1.0 / (1.0 - m_steering) + + #set our motor + p.setJointMotorControl2(sphereUid, + joint, + p.POSITION_CONTROL, + targetPosition=targetPos + m_steering, + force=30) + + #wave keeps track of where the wave is in time + m_waveFront += dt / m_wavePeriod * m_waveLength + p.stepSimulation() + + time.sleep(dt) diff --git a/examples/pybullet/gym/pybullet_examples/soccerball.py b/examples/pybullet/gym/pybullet_examples/soccerball.py new file mode 100644 index 000000000..dae6acd8b --- /dev/null +++ b/examples/pybullet/gym/pybullet_examples/soccerball.py @@ -0,0 +1,17 @@ +import pybullet as p +import pybullet_data as pd +import time +p.connect(p.GUI) +p.setAdditionalSearchPath(pd.getDataPath()) +offset = 0 +for scale in range (1,10,1): + ball = p.loadURDF("soccerball.urdf",[offset,0,1], globalScaling=scale*0.1) + p.changeDynamics(ball,-1,linearDamping=0, angularDamping=0, rollingFriction=0.001, spinningFriction=0.001) + p.changeVisualShape(ball,-1,rgbaColor=[0.8,0.8,0.8,1]) + offset += 2*scale*0.1 +p.loadURDF("plane.urdf") +p.setGravity(0,0,-10) +p.setRealTimeSimulation(1) +while p.isConnected(): + #p.getCameraImage(320,200, renderer=p.ER_BULLET_HARDWARE_OPENGL) + time.sleep(0.5) diff --git a/examples/pybullet/gym/pybullet_examples/switchConstraintSolver.py b/examples/pybullet/gym/pybullet_examples/switchConstraintSolver.py new file mode 100644 index 000000000..b526789cc --- /dev/null +++ b/examples/pybullet/gym/pybullet_examples/switchConstraintSolver.py @@ -0,0 +1,32 @@ +import pybullet as p +import time +import pybullet_data + +p.connect(p.GUI) +p.setAdditionalSearchPath(pybullet_data.getDataPath()) +#p.setPhysicsEngineParameter(constraintSolverType=p.CONSTRAINT_SOLVER_LCP_PGS, globalCFM = 0.0001) +p.setPhysicsEngineParameter(constraintSolverType=p.CONSTRAINT_SOLVER_LCP_DANTZIG, + globalCFM=0.000001) +#p.setPhysicsEngineParameter(constraintSolverType=p.CONSTRAINT_SOLVER_LCP_PGS, globalCFM = 0.0001) + +p.loadURDF("plane.urdf") +radius = 0.025 +distance = 1.86 +yaw = 135 +pitch = -11 +targetPos = [0, 0, 0] + +p.setPhysicsEngineParameter(solverResidualThreshold=0.001, numSolverIterations=200) +p.resetDebugVisualizerCamera(distance, yaw, pitch, targetPos) +objectId = -1 + +for i in range(10): + objectId = p.loadURDF("cube_small.urdf", [1, 1, radius + i * 2 * radius]) + +p.changeDynamics(objectId, -1, 100) + +timeStep = 1. / 240. +p.setGravity(0, 0, -10) +while (p.isConnected()): + p.stepSimulation() + time.sleep(timeStep) diff --git a/examples/pybullet/gym/pybullet_examples/testrender_egl.py b/examples/pybullet/gym/pybullet_examples/testrender_egl.py new file mode 100644 index 000000000..c511e3cdc --- /dev/null +++ b/examples/pybullet/gym/pybullet_examples/testrender_egl.py @@ -0,0 +1,102 @@ + +#using the eglRendererPlugin (hardware OpenGL acceleration) +#using EGL on Linux and default OpenGL window on Win32. + +#make sure to compile pybullet with PYBULLET_USE_NUMPY enabled +#otherwise use testrender.py (slower but compatible without numpy) +#you can also use GUI mode, for faster OpenGL rendering (instead of TinyRender CPU) + +import numpy as np +import matplotlib.pyplot as plt +import pybullet +import time +import pkgutil + +plt.ion() + +img = np.random.rand(200, 320) +#img = [tandard_normal((50,100)) +image = plt.imshow(img, interpolation='none', animated=True, label="blah") +ax = plt.gca() +import pybullet_data + + +pybullet.connect(pybullet.DIRECT) + +pybullet.setAdditionalSearchPath(pybullet_data.getDataPath()) + +egl = pkgutil.get_loader('eglRenderer') +if (egl): + pluginId = pybullet.loadPlugin(egl.get_filename(), "_eglRendererPlugin") +else: + pluginId = pybullet.loadPlugin("eglRendererPlugin") +print("pluginId=",pluginId) +pybullet.loadURDF("plane.urdf", [0, 0, -1]) +pybullet.loadURDF("r2d2.urdf") + +camTargetPos = [0, 0, 0] +cameraUp = [0, 0, 1] +cameraPos = [1, 1, 1] +pybullet.setGravity(0, 0, -10) + +pitch = -10.0 + +roll = 0 +upAxisIndex = 2 +camDistance = 4 +pixelWidth = 320 +pixelHeight = 200 +nearPlane = 0.01 +farPlane = 100 + +fov = 60 + +main_start = time.time() +while (1): + for yaw in range(0, 360, 10): + pybullet.stepSimulation() + start = time.time() + + viewMatrix = pybullet.computeViewMatrixFromYawPitchRoll(camTargetPos, camDistance, yaw, pitch, + roll, upAxisIndex) + aspect = pixelWidth / pixelHeight + projectionMatrix = pybullet.computeProjectionMatrixFOV(fov, aspect, nearPlane, farPlane) + img_arr = pybullet.getCameraImage(pixelWidth, + pixelHeight, + viewMatrix, + projectionMatrix, + shadow=1, + lightDirection=[1, 1, 1], + renderer=pybullet.ER_BULLET_HARDWARE_OPENGL) + stop = time.time() + #print("renderImage %f" % (stop - start)) + + w = img_arr[0] #width of the image, in pixels + h = img_arr[1] #height of the image, in pixels + rgb = img_arr[2] #color data RGB + dep = img_arr[3] #depth data + + #print('width = %d height = %d' % (w, h)) + + #note that sending the data to matplotlib is really slow + + #reshape is not needed + np_img_arr = np.reshape(rgb, (h, w, 4)) + np_img_arr = np_img_arr * (1. / 255.) + + #show + #plt.imshow(np_img_arr,interpolation='none',extent=(0,1600,0,1200)) + #image = plt.imshow(np_img_arr,interpolation='none',animated=True,label="blah") + + image.set_data(np_img_arr) + ax.plot([0]) + #plt.draw() + #plt.show() + plt.pause(0.01) + #image.draw() + +main_stop = time.time() + +print("Total time %f" % (main_stop - main_start)) + +pybullet.resetSimulation() diff --git a/examples/pybullet/gym/pybullet_examples/testrender_np.py b/examples/pybullet/gym/pybullet_examples/testrender_np.py new file mode 100644 index 000000000..2c313a457 --- /dev/null +++ b/examples/pybullet/gym/pybullet_examples/testrender_np.py @@ -0,0 +1,90 @@ +#make sure to compile pybullet with PYBULLET_USE_NUMPY enabled +#otherwise use testrender.py (slower but compatible without numpy) +#you can also use GUI mode, for faster OpenGL rendering (instead of TinyRender CPU) + +import numpy as np +import matplotlib.pyplot as plt +import pybullet +import time +import pybullet_data + +plt.ion() + +img = np.random.rand(200, 320) +#img = [tandard_normal((50,100)) +image = plt.imshow(img, interpolation='none', animated=True, label="blah") +ax = plt.gca() + +#pybullet.connect(pybullet.GUI) +pybullet.connect(pybullet.DIRECT) + +pybullet.setAdditionalSearchPath(pybullet_data.getDataPath()) +pybullet.loadURDF("plane.urdf", [0, 0, -1]) +pybullet.loadURDF("r2d2.urdf") + +camTargetPos = [0, 0, 0] +cameraUp = [0, 0, 1] +cameraPos = [1, 1, 1] +pybullet.setGravity(0, 0, -10) + +pitch = -10.0 + +roll = 0 +upAxisIndex = 2 +camDistance = 4 +pixelWidth = 320 +pixelHeight = 200 +nearPlane = 0.01 +farPlane = 100 + +fov = 60 + +main_start = time.time() +while (1): + for yaw in range(0, 360, 10): + pybullet.stepSimulation() + start = time.time() + + viewMatrix = pybullet.computeViewMatrixFromYawPitchRoll(camTargetPos, camDistance, yaw, pitch, + roll, upAxisIndex) + aspect = pixelWidth / pixelHeight + projectionMatrix = pybullet.computeProjectionMatrixFOV(fov, aspect, nearPlane, farPlane) + img_arr = pybullet.getCameraImage(pixelWidth, + pixelHeight, + viewMatrix, + projectionMatrix, + shadow=1, + lightDirection=[1, 1, 1], + renderer=pybullet.ER_BULLET_HARDWARE_OPENGL) + stop = time.time() + print("renderImage %f" % (stop - start)) + + w = img_arr[0] #width of the image, in pixels + h = img_arr[1] #height of the image, in pixels + rgb = img_arr[2] #color data RGB + dep = img_arr[3] #depth data + + print('width = %d height = %d' % (w, h)) + + #note that sending the data to matplotlib is really slow + + #reshape is needed + np_img_arr = np.reshape(rgb, (h, w, 4)) + np_img_arr = np_img_arr * (1. / 255.) + + #show + #plt.imshow(np_img_arr,interpolation='none',extent=(0,1600,0,1200)) + #image = plt.imshow(np_img_arr,interpolation='none',animated=True,label="blah") + + image.set_data(np_img_arr) + ax.plot([0]) + #plt.draw() + #plt.show() + plt.pause(0.01) + #image.draw() + +main_stop = time.time() + +print("Total time %f" % (main_stop - main_start)) + +pybullet.resetSimulation() diff --git a/examples/pybullet/gym/pybullet_examples/transparent.py b/examples/pybullet/gym/pybullet_examples/transparent.py new file mode 100644 index 000000000..8a4831002 --- /dev/null +++ b/examples/pybullet/gym/pybullet_examples/transparent.py @@ -0,0 +1,25 @@ +import pybullet as p +import time +import pybullet_data + +p.connect(p.GUI) +p.setAdditionalSearchPath(pybullet_data.getDataPath()) +p.loadURDF("plane.urdf") +sphereUid = p.loadURDF("sphere_transparent.urdf", [0, 0, 2]) + +redSlider = p.addUserDebugParameter("red", 0, 1, 1) +greenSlider = p.addUserDebugParameter("green", 0, 1, 0) +blueSlider = p.addUserDebugParameter("blue", 0, 1, 0) +alphaSlider = p.addUserDebugParameter("alpha", 0, 1, 0.5) + +while (1): + red = p.readUserDebugParameter(redSlider) + green = p.readUserDebugParameter(greenSlider) + blue = p.readUserDebugParameter(blueSlider) + alpha = p.readUserDebugParameter(alphaSlider) + p.changeVisualShape(sphereUid, -1, rgbaColor=[red, green, blue, alpha]) + p.getCameraImage(320, + 200, + flags=p.ER_SEGMENTATION_MASK_OBJECT_AND_LINKINDEX, + renderer=p.ER_BULLET_HARDWARE_OPENGL) + time.sleep(0.01) diff --git a/examples/pybullet/gym/pybullet_examples/vhacd.py b/examples/pybullet/gym/pybullet_examples/vhacd.py new file mode 100644 index 000000000..8b4bcf77d --- /dev/null +++ b/examples/pybullet/gym/pybullet_examples/vhacd.py @@ -0,0 +1,13 @@ +import pybullet as p +import pybullet_data as pd +import os + +import pybullet_data + +p.connect(p.DIRECT) +p.setAdditionalSearchPath(pybullet_data.getDataPath()) +name_in = os.path.join(pd.getDataPath(), "duck.obj") +name_out = "duck_vhacd.obj" +name_log = "log.txt" +p.vhacd(name_in, name_out, name_log) + diff --git a/examples/pybullet/gym/pybullet_examples/video_sync_mp4.py b/examples/pybullet/gym/pybullet_examples/video_sync_mp4.py new file mode 100644 index 000000000..7a517b10e --- /dev/null +++ b/examples/pybullet/gym/pybullet_examples/video_sync_mp4.py @@ -0,0 +1,32 @@ +import pybullet as p +import time +import pybullet_data + +#Once the video is recorded, you can extract all individual frames using ffmpeg +#mkdir frames +#ffmpeg -i test.mp4 "frames/out-%03d.png" + +#by default, PyBullet runs at 240Hz +p.connect(p.GUI, options="--width=320 --height=200 --mp4=\"test.mp4\" --mp4fps=240") + +p.setAdditionalSearchPath(pybullet_data.getDataPath()) +p.configureDebugVisualizer(p.COV_ENABLE_GUI,0) +p.configureDebugVisualizer(p.COV_ENABLE_SINGLE_STEP_RENDERING,1) +p.loadURDF("plane.urdf") + +#in 3 seconds, the object travels about 0.5*g*t^2 meter ~ 45 meter. +r2d2 = p.loadURDF("r2d2.urdf",[0,0,45]) +#disable linear damping +p.changeDynamics(r2d2,-1, linearDamping=0) +p.setGravity(0,0,-10) + +for i in range (3*240): + txt = "frame "+str(i) + item = p.addUserDebugText(txt, [0,1,0]) + p.stepSimulation() + #synchronize the visualizer (rendering frames for the video mp4) with stepSimulation + p.configureDebugVisualizer(p.COV_ENABLE_SINGLE_STEP_RENDERING,1) + #print("r2d2 vel=", p.getBaseVelocity(r2d2)[0][2]) + p.removeUserDebugItem(item) + +p.disconnect() diff --git a/examples/pybullet/gym/pybullet_examples/vr_kuka_setup.py b/examples/pybullet/gym/pybullet_examples/vr_kuka_setup.py new file mode 100644 index 000000000..ee94d5f30 --- /dev/null +++ b/examples/pybullet/gym/pybullet_examples/vr_kuka_setup.py @@ -0,0 +1,184 @@ +import pybullet as p +import time +#p.connect(p.UDP,"192.168.86.100") +import pybullet_data + +cid = p.connect(p.SHARED_MEMORY) + +if (cid < 0): + p.connect(p.GUI) + +p.setAdditionalSearchPath(pybullet_data.getDataPath()) + +p.resetSimulation() +#disable rendering during loading makes it much faster +p.configureDebugVisualizer(p.COV_ENABLE_RENDERING, 0) +objects = [ + p.loadURDF("plane.urdf", 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000) +] +objects = [ + p.loadURDF("samurai.urdf", 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, + 1.000000) +] +objects = [ + p.loadURDF("pr2_gripper.urdf", 0.500000, 0.300006, 0.700000, -0.000000, -0.000000, -0.000031, + 1.000000) +] +pr2_gripper = objects[0] +print("pr2_gripper=") +print(pr2_gripper) + +jointPositions = [0.550569, 0.000000, 0.549657, 0.000000] +for jointIndex in range(p.getNumJoints(pr2_gripper)): + p.resetJointState(pr2_gripper, jointIndex, jointPositions[jointIndex]) + +pr2_cid = p.createConstraint(pr2_gripper, -1, -1, -1, p.JOINT_FIXED, [0, 0, 0], [0.2, 0, 0], + [0.500000, 0.300006, 0.700000]) +print("pr2_cid") +print(pr2_cid) + +objects = [ + p.loadURDF("kuka_iiwa/model_vr_limits.urdf", 1.400000, -0.200000, 0.600000, 0.000000, 0.000000, + 0.000000, 1.000000) +] +kuka = objects[0] +jointPositions = [-0.000000, -0.000000, 0.000000, 1.570793, 0.000000, -1.036725, 0.000001] +for jointIndex in range(p.getNumJoints(kuka)): + p.resetJointState(kuka, jointIndex, jointPositions[jointIndex]) + p.setJointMotorControl2(kuka, jointIndex, p.POSITION_CONTROL, jointPositions[jointIndex], 0) + +objects = [ + p.loadURDF("lego/lego.urdf", 1.000000, -0.200000, 0.700000, 0.000000, 0.000000, 0.000000, + 1.000000) +] +objects = [ + p.loadURDF("lego/lego.urdf", 1.000000, -0.200000, 0.800000, 0.000000, 0.000000, 0.000000, + 1.000000) +] +objects = [ + p.loadURDF("lego/lego.urdf", 1.000000, -0.200000, 0.900000, 0.000000, 0.000000, 0.000000, + 1.000000) +] +objects = p.loadSDF("gripper/wsg50_one_motor_gripper_new_free_base.sdf") +kuka_gripper = objects[0] +print("kuka gripper=") +print(kuka_gripper) + +p.resetBasePositionAndOrientation(kuka_gripper, [0.923103, -0.200000, 1.250036], + [-0.000000, 0.964531, -0.000002, -0.263970]) +jointPositions = [ + 0.000000, -0.011130, -0.206421, 0.205143, -0.009999, 0.000000, -0.010055, 0.000000 +] +for jointIndex in range(p.getNumJoints(kuka_gripper)): + p.resetJointState(kuka_gripper, jointIndex, jointPositions[jointIndex]) + p.setJointMotorControl2(kuka_gripper, jointIndex, p.POSITION_CONTROL, jointPositions[jointIndex], + 0) + +kuka_cid = p.createConstraint(kuka, 6, kuka_gripper, 0, p.JOINT_FIXED, [0, 0, 0], [0, 0, 0.05], + [0, 0, 0]) + +pr2_cid2 = p.createConstraint(kuka_gripper, + 4, + kuka_gripper, + 6, + jointType=p.JOINT_GEAR, + jointAxis=[1, 1, 1], + parentFramePosition=[0, 0, 0], + childFramePosition=[0, 0, 0]) +p.changeConstraint(pr2_cid2, gearRatio=-1, erp=0.5, relativePositionTarget=0, maxForce=100) + +objects = [ + p.loadURDF("jenga/jenga.urdf", 1.300000, -0.700000, 0.750000, 0.000000, 0.707107, 0.000000, + 0.707107) +] +objects = [ + p.loadURDF("jenga/jenga.urdf", 1.200000, -0.700000, 0.750000, 0.000000, 0.707107, 0.000000, + 0.707107) +] +objects = [ + p.loadURDF("jenga/jenga.urdf", 1.100000, -0.700000, 0.750000, 0.000000, 0.707107, 0.000000, + 0.707107) +] +objects = [ + p.loadURDF("jenga/jenga.urdf", 1.000000, -0.700000, 0.750000, 0.000000, 0.707107, 0.000000, + 0.707107) +] +objects = [ + p.loadURDF("jenga/jenga.urdf", 0.900000, -0.700000, 0.750000, 0.000000, 0.707107, 0.000000, + 0.707107) +] +objects = [ + p.loadURDF("jenga/jenga.urdf", 0.800000, -0.700000, 0.750000, 0.000000, 0.707107, 0.000000, + 0.707107) +] +objects = [ + p.loadURDF("table/table.urdf", 1.000000, -0.200000, 0.000000, 0.000000, 0.000000, 0.707107, + 0.707107) +] +objects = [ + p.loadURDF("teddy_vhacd.urdf", 1.050000, -0.500000, 0.700000, 0.000000, 0.000000, 0.707107, + 0.707107) +] +objects = [ + p.loadURDF("cube_small.urdf", 0.950000, -0.100000, 0.700000, 0.000000, 0.000000, 0.707107, + 0.707107) +] +objects = [ + p.loadURDF("sphere_small.urdf", 0.850000, -0.400000, 0.700000, 0.000000, 0.000000, 0.707107, + 0.707107) +] +objects = [ + p.loadURDF("duck_vhacd.urdf", 0.850000, -0.400000, 0.900000, 0.000000, 0.000000, 0.707107, + 0.707107) +] +objects = p.loadSDF("kiva_shelf/model.sdf") +ob = objects[0] +p.resetBasePositionAndOrientation(ob, [0.000000, 1.000000, 1.204500], + [0.000000, 0.000000, 0.000000, 1.000000]) +objects = [ + p.loadURDF("teddy_vhacd.urdf", -0.100000, 0.600000, 0.850000, 0.000000, 0.000000, 0.000000, + 1.000000) +] +objects = [ + p.loadURDF("sphere_small.urdf", -0.100000, 0.955006, 1.169706, 0.633232, -0.000000, -0.000000, + 0.773962) +] +objects = [ + p.loadURDF("cube_small.urdf", 0.300000, 0.600000, 0.850000, 0.000000, 0.000000, 0.000000, + 1.000000) +] +objects = [ + p.loadURDF("table_square/table_square.urdf", -1.000000, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 1.000000) +] +ob = objects[0] +jointPositions = [0.000000] +for jointIndex in range(p.getNumJoints(ob)): + p.resetJointState(ob, jointIndex, jointPositions[jointIndex]) + +objects = [ + p.loadURDF("husky/husky.urdf", 2.000000, -5.000000, 1.000000, 0.000000, 0.000000, 0.000000, + 1.000000) +] +ob = objects[0] +jointPositions = [ + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000 +] +for jointIndex in range(p.getNumJoints(ob)): + p.resetJointState(ob, jointIndex, jointPositions[jointIndex]) + +p.configureDebugVisualizer(p.COV_ENABLE_RENDERING, 1) + +p.setGravity(0.000000, 0.000000, 0.000000) +p.setGravity(0, 0, -10) + +##show this for 10 seconds +#now = time.time() +#while (time.time() < now+10): +# p.stepSimulation() +p.setRealTimeSimulation(1) + +while (1): + p.setGravity(0, 0, -10) +p.disconnect() diff --git a/setup.py b/setup.py index 84d61f329..ef2748b4a 100644 --- a/setup.py +++ b/setup.py @@ -459,7 +459,7 @@ hh = setup_py_dir + "/" + datadir for root, dirs, files in os.walk(hh): for fn in files: ext = os.path.splitext(fn)[1][1:] - if ext and ext in 'yaml index meta data-00000-of-00001 png gif jpg urdf sdf obj txt mtl dae off stl STL xml '.split( + if ext and ext in 'yaml index meta data-00000-of-00001 png gif jpg urdf sdf obj txt mtl dae off stl STL xml gin npy '.split( ): fn = root + "/" + fn need_files.append(fn[1 + len(hh):]) From 5205dafcc2cf4bb6eb094992717918053b40b7e5 Mon Sep 17 00:00:00 2001 From: Erwin Coumans Date: Mon, 5 Apr 2021 19:51:38 -0700 Subject: [PATCH 34/36] add __init__.py --- examples/pybullet/examples/__init__.py | 1 + 1 file changed, 1 insertion(+) create mode 100644 examples/pybullet/examples/__init__.py diff --git a/examples/pybullet/examples/__init__.py b/examples/pybullet/examples/__init__.py new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/examples/pybullet/examples/__init__.py @@ -0,0 +1 @@ + From dcf9c8d6a5c4c76ade7823895d286b397c66b49b Mon Sep 17 00:00:00 2001 From: jaraujo98 Date: Tue, 6 Apr 2021 11:26:39 -0700 Subject: [PATCH 35/36] Replace xrange with range The xrange function was deprecated in Python 3. Removing it for compatibility. --- .../minitaur/envs/env_randomizers/minitaur_env_randomizer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/pybullet/gym/pybullet_envs/minitaur/envs/env_randomizers/minitaur_env_randomizer.py b/examples/pybullet/gym/pybullet_envs/minitaur/envs/env_randomizers/minitaur_env_randomizer.py index 0fbfef36d..81b89f301 100644 --- a/examples/pybullet/gym/pybullet_envs/minitaur/envs/env_randomizers/minitaur_env_randomizer.py +++ b/examples/pybullet/gym/pybullet_envs/minitaur/envs/env_randomizers/minitaur_env_randomizer.py @@ -56,7 +56,7 @@ class MinitaurEnvRandomizer(env_randomizer_base.EnvRandomizerBase): leg_masses_upper_bound = np.array(leg_masses) * (1.0 + self._minitaur_leg_mass_err_range[1]) randomized_leg_masses = [ np.random.uniform(leg_masses_lower_bound[i], leg_masses_upper_bound[i]) - for i in xrange(len(leg_masses)) + for i in range(len(leg_masses)) ] minitaur.SetLegMasses(randomized_leg_masses) From 0a8e4f3f6c31555f6acfaefc41614c5312241539 Mon Sep 17 00:00:00 2001 From: erwincoumans Date: Sat, 10 Apr 2021 15:56:13 -0700 Subject: [PATCH 36/36] Update README.md --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index e0fb2af97..4aec06f86 100644 --- a/README.md +++ b/README.md @@ -7,8 +7,11 @@ This is the official C++ source code repository of the Bullet Physics SDK: real- ![PyBullet](https://pybullet.org/wordpress/wp-content/uploads/2019/03/cropped-pybullet.png) +## Issues ## +The Issue tracker was flooded with support questions and is closed until it is cleaned up. Use the [PyBullet forums](http://pybullet.org) to discuss with others. + ## PyBullet ## -New in Bullet 2.85: pybullet Python bindings, improved support for robotics and VR. Use pip install pybullet and checkout the [PyBullet Quickstart Guide](https://docs.google.com/document/d/10sXEhzFRSnvFcl3XxNGhnD4N2SedqwdAvK3dsihxVUA/edit#heading=h.2ye70wns7io3). +It is highly recommended to use PyBullet Python bindings for improved support for robotics, reinforcement learning and VR. Use pip install pybullet and checkout the [PyBullet Quickstart Guide](https://docs.google.com/document/d/10sXEhzFRSnvFcl3XxNGhnD4N2SedqwdAvK3dsihxVUA/edit#heading=h.2ye70wns7io3). Installation is simple: ```

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