CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/pypi-pybullet

Official Python Interface for the Bullet Physics SDK specialized for Robotics Simulation and Reinforcement Learning

Pending
Overview
Eval results
Files

inverse-kinematics-dynamics.mddocs/

Inverse Kinematics and Dynamics

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.

Capabilities

Inverse Kinematics

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."""

Inverse Dynamics

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
    """

Jacobian Computation

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."""

Usage Examples

Basic Inverse Kinematics

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

docs

collision-detection.md

connection-simulation.md

index.md

inverse-kinematics-dynamics.md

joint-motor-control.md

mathematical-utilities.md

object-loading.md

physics-configuration.md

rendering-visualization.md

state-management-logging.md

vr-input-handling.md

tile.json