Pinocchio

3.9.0 · active · verified Mon Apr 13

Pinocchio is a library for efficiently computing the dynamics (and derivatives) of a robot model, or of any articulated rigid-body model. It is primarily written in C++ with comprehensive Python bindings, leveraging Eigen for linear algebra and FCL for collision detection. It provides state-of-the-art rigid body algorithms and their analytical derivatives. The current version is 3.9.0, with frequent minor and patch releases.

Warnings

Install

Imports

Quickstart

This quickstart demonstrates how to create a simple robot model using a built-in sample, generate a random configuration, and perform forward kinematics to find the end-effector position. It also includes commented lines for loading a URDF model, which typically requires the `example-robot-data` package.

import pinocchio as pin
import numpy as np

# Create a simple 6-DOF kinematic chain (built-in sample model)
model = pin.buildSampleModelManipulator()
data = model.createData()

# Get model information
print(f"Model name: {model.name}")
print(f"Number of joints: {model.nq}")

# Sample a random configuration
q = pin.randomConfiguration(model)
print(f"Random configuration (q): {q.T}")

# Perform forward kinematics
pin.forwardKinematics(model, data, q)

# Update all the placements for the joints and frames
pin.updateFramePlacements(model, data)

# Print the position of the end-effector frame
EE_frame_idx = model.getFrameId("joint6") # Assuming 'joint6' is the end-effector
if EE_frame_idx < model.nframes:
    print(f"End-effector (joint6) position: {data.oMf[EE_frame_idx].translation.T}")
else:
    print("End-effector frame 'joint6' not found in model.")

# Example for loading a URDF (requires 'example-robot-data' and a URDF file)
# from example_robot_data import loadUR
# robot = loadUR(robot_name='ur5')
# model_urdf = robot.model
# data_urdf = model_urdf.createData()
# q_urdf = pin.randomConfiguration(model_urdf)
# print(f"URDF model name: {model_urdf.name}, random config: {q_urdf.T}")

view raw JSON →