Skip to main content

A Pythonic wrapper for pybullet

Project description

pybulletX

License: MIT GitHubCI CircleCI Code style: black

The lightweight pybullet wrapper for robotics researchers. Build robot simulation with less code. Scale your research with less boilerplate.

Examples

Here is an example of controlling Kuka arm with PyBulletX.

import time

import numpy as np
import pybullet as p
import pybulletX as px

P_GAIN = 50
desired_joint_positions = np.array([1.218, 0.507, -0.187, 1.235, 0.999, 1.279, 0])

def main():
    px.init()

    robot = px.Robot("kuka_iiwa/model.urdf", use_fixed_base=True)
    robot.torque_control = True

    while True:
        time.sleep(0.01)

        error = desired_joint_positions - robot.get_states().joint_position
        actions = robot.action_space.new()
        actions.joint_torque = error * P_GAIN
        robot.set_actions(actions)

        p.stepSimulation()

if __name__ == "__main__":
    main()

Here is the same example but without PyBulletX.

import time

import numpy as np
import pybullet as p
import pybullet_data

P_GAIN = 50
desired_joint_positions = np.array([1.218, 0.507, -0.187, 1.235, 0.999, 1.279, 0])

def main():
    p.connect(p.GUI)

    p.setAdditionalSearchPath(pybullet_data.getDataPath())
    p.loadURDF("plane.urdf")

    robot_id = p.loadURDF("kuka_iiwa/model.urdf", useFixedBase=True)

    num_dofs = 7
    joint_indices = range(num_dofs)

    # The magic that enables torque control
    p.setJointMotorControlArray(
        bodyIndex=robot_id,
        jointIndices=joint_indices,
        controlMode=p.VELOCITY_CONTROL,
        forces=np.zeros(num_dofs),
    )

    while True:
        time.sleep(0.01)

        joint_states = p.getJointStates(robot_id, joint_indices)
        joint_positions = np.array([j[0] for j in joint_states])
        error = desired_joint_positions - joint_positions
        torque = error * P_GAIN

        p.setJointMotorControlArray(
            bodyIndex=robot_id,
            jointIndices=joint_indices,
            controlMode=p.TORQUE_CONTROL,
            forces=torque,
        )

        p.stepSimulation()

if __name__ == "__main__":
    main()

The examples above are available in examples/with_pybulletX.py and examples/without_pybulletX.py.

License

PyBulletX is licensed under MIT License.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

pybulletX-0.4.1-py3-none-any.whl (64.0 kB view details)

Uploaded Python 3

File details

Details for the file pybulletX-0.4.1-py3-none-any.whl.

File metadata

  • Download URL: pybulletX-0.4.1-py3-none-any.whl
  • Upload date:
  • Size: 64.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.25.1 setuptools/49.6.0.post20200814 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.7.7

File hashes

Hashes for pybulletX-0.4.1-py3-none-any.whl
Algorithm Hash digest
SHA256 ae3999325d7b4d8ed0ffa7a2bd85727bce195d6deac0523350032093a98b58ee
MD5 2d2f3c8b88dc042e007aea9ffa12319d
BLAKE2b-256 6703d9733ea3cd3fe6a4b8f25395e4387b208f46af8e8a6996709d8c92f305f4

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page