Official Python Interface for the Bullet Physics SDK specialized for Robotics Simulation and Reinforcement Learning
—
Compute inverse kinematics solutions for robotic manipulation and inverse dynamics for force computation and control. Essential for robotic applications requiring precise end-effector positioning and force control.
def calculateInverseKinematics(bodyUniqueId, endEffectorLinkIndex, targetPosition, targetOrientation=None, lowerLimits=None, upperLimits=None, jointRanges=None, restPoses=None, maxNumIterations=20, residualThreshold=1e-4, physicsClientId=0):
"""
Calculate inverse kinematics solution for target end-effector pose.
Args:
bodyUniqueId (int): Robot body unique ID
endEffectorLinkIndex (int): End effector link index
targetPosition (list): Target position [x, y, z]
targetOrientation (list, optional): Target orientation quaternion [x, y, z, w]
lowerLimits (list, optional): Joint lower limits
upperLimits (list, optional): Joint upper limits
jointRanges (list, optional): Joint ranges for null space optimization
restPoses (list, optional): Rest pose joint angles
maxNumIterations (int, optional): Maximum IK iterations. Defaults to 20.
residualThreshold (float, optional): Convergence threshold. Defaults to 1e-4.
physicsClientId (int, optional): Physics client ID. Defaults to 0.
Returns:
list: Joint angles solution
"""
def calculateInverseKinematics2(bodyUniqueId, endEffectorLinkIndices, targetPositions, targetOrientations=None, lowerLimits=None, upperLimits=None, jointRanges=None, restPoses=None, jointDamping=None, solver=0, maxNumIterations=20, residualThreshold=1e-4, physicsClientId=0):
"""Calculate IK for multiple end effectors simultaneously."""def calculateInverseDynamics(bodyUniqueId, objPositions, objVelocities, objAccelerations, physicsClientId=0):
"""
Calculate joint torques using inverse dynamics.
Args:
bodyUniqueId (int): Body unique ID
objPositions (list): Joint positions
objVelocities (list): Joint velocities
objAccelerations (list): Desired joint accelerations
physicsClientId (int, optional): Physics client ID. Defaults to 0.
Returns:
list: Required joint torques
"""def calculateJacobian(bodyUniqueId, linkIndex, localPosition, objPositions, objVelocities, objAccelerations, physicsClientId=0):
"""
Calculate Jacobian matrices for given configuration.
Returns:
tuple: (linearJacobian, angularJacobian)
"""
def calculateMassMatrix(bodyUniqueId, objPositions, physicsClientId=0):
"""Calculate mass matrix for given configuration."""import pybullet as p
p.connect(p.GUI)
robotId = p.loadURDF("kuka_iiwa/model.urdf")
# Target end-effector position
targetPos = [0.5, 0.2, 0.7]
targetOrn = p.getQuaternionFromEuler([0, -math.pi/2, 0])
# Calculate IK solution
jointPositions = p.calculateInverseKinematics(
robotId,
6, # End effector link index
targetPos,
targetOrn
)
# Apply solution
for i, pos in enumerate(jointPositions):
p.setJointMotorControl2(robotId, i, p.POSITION_CONTROL, targetPosition=pos)[Complete documentation with detailed examples and usage patterns]
Install with Tessl CLI
npx tessl i tessl/pypi-pybullet