GitPedia

Robotics toolbox python

Robotics Toolbox for Python

From petercorke·Updated June 14, 2026·View on GitHub·

A Python implementation of the Robotics Toolbox for MATLAB® The project is written primarily in C++, distributed under the MIT License license, first published in 2015. It has gained significant community traction with 3,119 stars and 580 forks on GitHub. Key topics include: dynamics, hessian, jacobian, kinematics, motion-planning.

Latest release: v1.3.0
June 14, 2026View Changelog →

Robotics Toolbox for Python

A Python Robotics Package
Powered by Spatial Maths
QUT Centre for Robotics Open Source

PyPI version
Anaconda version
PyPI - Python Version

Build Status
Coverage
PyPI - Downloads
License: MIT

<table style="border:0px"> <tr style="border:0px"> <td style="border:0px"> <img src="https://raw.githubusercontent.com/petercorke/robotics-toolbox-python/main/docs/figs/RobToolBox_RoundLogoB.png" width="200"></td> <td style="border:0px"> A Python implementation of the <a href="https://github.com/petercorke/robotics-toolbox-matlab">Robotics Toolbox for MATLAB<sup>&reg;</sup></a> <ul> <li><a href="https://github.com/petercorke/robotics-toolbox-python">GitHub repository </a></li> <li><a href="https://petercorke.github.io/robotics-toolbox-python">Documentation</a></li> <li><a href="#6">ICRA Paper</a></li> <li><a href="https://github.com/petercorke/robotics-toolbox-python/wiki">Wiki (examples and details)</a></li> </ul> </td> </tr> </table> <!-- <br> -->

Contents

<br>

<a id='1'></a>

Synopsis

This toolbox brings robotics-specific functionality to Python, and leverages
Python's advantages of portability, ubiquity and support, and the capability of
the open-source ecosystem for linear algebra (numpy, scipy), graphics
(matplotlib, three.js, WebGL), interactive development (jupyter, jupyterlab,
mybinder.org), and documentation (sphinx).

The Toolbox provides tools for representing the kinematics and dynamics of
serial-link manipulators - you can easily create your own in Denavit-Hartenberg
form, import a URDF file, or use over 30 supplied models for well-known
contemporary robots from Franka-Emika, Kinova, Universal Robotics, Rethink as
well as classical robots such as the Puma 560 and the Stanford arm.

The Toolbox contains fast implementations of kinematic operations. The forward
kinematics and the manipulator Jacobian can be computed in less than 1 microsecond
while numerical inverse kinematics can be solved in as little as 4 microseconds.

The toolbox also supports mobile robots with functions for robot motion models
(unicycle, bicycle), path planning algorithms (bug, distance transform, D*,
PRM), kinodynamic planning (lattice, RRT), localization (EKF, particle filter),
map building (EKF) and simultaneous localization and mapping (EKF).

The Toolbox provides:

  • code that is mature and provides a point of comparison for other
    implementations of the same algorithms;
  • routines which are generally written in a straightforward manner which
    allows for easy understanding, perhaps at the expense of computational
    efficiency;
  • source code which can be read for learning and teaching;
  • backward compatability with the Robotics Toolbox for MATLAB

The Toolbox leverages the Spatial Maths Toolbox for Python to
provide support for data types such as SO(n) and SE(n) matrices, quaternions, twists and spatial vectors.

<br>

<a id='2'></a>

Getting going

You will need Python >= 3.6

Using pip

Install a snapshot from PyPI

shell
pip3 install roboticstoolbox-python

Available options are:

  • swift install Swift, a web-based visualizer
  • qp install quadratic-programming IK dependencies (qpsolvers, quadprog)
  • bullet install collision checking with pybullet
  • collision alias of bullet (backward compatibility)
  • all install swift, qp, and bullet

Put the options in a comma separated list like

shell
pip3 install roboticstoolbox-python[optionlist]

If you want the Swift visualizer, install the swift extra.

Install matrix:

  • Core only
shell
pip3 install roboticstoolbox-python
  • Swift visualizer only
shell
pip3 install roboticstoolbox-python[swift]
  • QP solver dependencies only
shell
pip3 install roboticstoolbox-python[qp]
  • Bullet collision dependencies only
shell
pip3 install roboticstoolbox-python[bullet]
  • Everything (swift + qp + bullet)
shell
pip3 install roboticstoolbox-python[all]
  • Multiple extras explicitly
shell
pip3 install roboticstoolbox-python[swift,qp,bullet]

From GitHub

To install the bleeding-edge version from GitHub

shell
git clone https://github.com/petercorke/robotics-toolbox-python.git cd robotics-toolbox-python pip3 install -e .

Build a JupyterLite/Pyodide wasm wheel (cp313)

This project includes a reproducible wasm wheel build target aligned to current
JupyterLite runtimes based on Python 3.13.

Build using cibuildwheel's Pyodide platform:

shell
make wheel-pyodide

Optionally pin the Pyodide runtime family to match your JupyterLite deployment:

shell
PYODIDE_VERSION=0.28.3 make wheel-pyodide

The target writes to dist/ and runs make wheel-pyodide-check, which validates
the wheel filename contains:

  • cp313-cp313
  • wasm32
  • pyemscripten_<major>_<minor> or pyodide_<major>_<minor>

To inspect the produced artifact path:

shell
ls -1 dist/*wasm32*.whl
<br>

<a id='3'></a>

Tutorials

<table style="border:0px"> <tr style="border:0px"> <td style="border:0px"><a href="https://bit.ly/3ak5GDi"><img src="https://github.com/jhavl/dkt/raw/main/img/article1.png" width="400"></a></td> <td style="border:0px"><a href="https://bit.ly/3ak5GDi"><img src="https://github.com/jhavl/dkt/raw/main/img/article2.png" width="400"></a></td> <td style="border:0px"> Do you want to learn about manipulator kinematics, differential kinematics, inverse-kinematics and motion control? Have a look at our <a href="https://bit.ly/3ak5GDi">tutorial</a>. This tutorial comes with two articles to cover the theory and 12 Jupyter Notebooks providing full code implementations and examples. Most of the Notebooks are also Google Colab compatible allowing them to run online. </td> </tr> </table> <br>

<a id='4'></a>

Code Examples

We will load a model of the Franka-Emika Panda robot defined by a URDF file

python
import roboticstoolbox as rtb robot = rtb.models.Panda() print(robot) ERobot: panda (by Franka Emika), 7 joints (RRRRRRR), 1 gripper, geometry, collision ┌─────┬──────────────┬───────┬─────────────┬────────────────────────────────────────────────┐ │link │ link │ joint │ parent │ ETS: parent to link │ ├─────┼──────────────┼───────┼─────────────┼────────────────────────────────────────────────┤ 0 │ panda_link0 │ │ BASE │ │ 1 │ panda_link1 │ 0 │ panda_link0 │ SE3(0, 0, 0.333) ⊕ Rz(q0)2 │ panda_link2 │ 1 │ panda_link1 │ SE3(-90°, -0°, 0°) ⊕ Rz(q1)3 │ panda_link3 │ 2 │ panda_link2 │ SE3(0, -0.316, 0; 90°, -0°, 0°) ⊕ Rz(q2)4 │ panda_link4 │ 3 │ panda_link3 │ SE3(0.0825, 0, 0; 90°, -0°, 0°) ⊕ Rz(q3)5 │ panda_link5 │ 4 │ panda_link4 │ SE3(-0.0825, 0.384, 0; -90°, -0°, 0°) ⊕ Rz(q4)6 │ panda_link6 │ 5 │ panda_link5 │ SE3(90°, -0°, 0°) ⊕ Rz(q5)7 │ panda_link7 │ 6 │ panda_link6 │ SE3(0.088, 0, 0; 90°, -0°, 0°) ⊕ Rz(q6)8 │ @panda_link8 │ │ panda_link7 │ SE3(0, 0, 0.107) └─────┴──────────────┴───────┴─────────────┴────────────────────────────────────────────────┘ ┌─────┬─────┬────────┬─────┬───────┬─────┬───────┬──────┐ │name │ q0 │ q1 │ q2 │ q3 │ q4 │ q5 │ q6 │ ├─────┼─────┼────────┼─────┼───────┼─────┼───────┼──────┤ │ qr │ 0° │ -17.2° │ 0° │ -126° │ 0° │ 115° │ 45° │ │ qz │ 0° │ 0° │ 0° │ 0° │ 0° │ 0° │ 0° │ └─────┴─────┴────────┴─────┴───────┴─────┴───────┴──────┘

The symbol @ indicates the link as an end-effector, a leaf node in the rigid-body
tree (Python prompts are not shown to make it easy to copy+paste the code, console output is indented).
We will compute the forward kinematics next

Te = robot.fkine(robot.qr)  # forward kinematics
print(Te)

	0.995     0         0.09983   0.484
	0        -1         0         0
	0.09983   0        -0.995     0.4126
	0         0         0         1

We can solve inverse kinematics very easily. We first choose an SE(3) pose
defined in terms of position and orientation (end-effector z-axis down (A=-Z) and finger
orientation parallel to y-axis (O=+Y)).

python
from spatialmath import SE3 Tep = SE3.Trans(0.6, -0.3, 0.1) * SE3.OA([0, 1, 0], [0, 0, -1]) sol = robot.ik_LM(Tep) # solve IK print(sol) (array([ 0.20592815, 0.86609481, -0.79473206, -1.68254794, 0.74872915, 2.21764746, -0.10255606]), 1, 114, 7, 2.890164057230228e-07) q_pickup = sol[0] print(robot.fkine(q_pickup)) # FK shows that desired end-effector pose was achieved 1 -8.913e-05 -0.0003334 0.5996 -8.929e-05 -1 -0.0004912 -0.2998 -0.0003334 0.0004912 -1 0.1001 0 0 0 1

We can animate a path from the ready pose qr configuration to this pickup configuration

python
qt = rtb.jtraj(robot.qr, q_pickup, 50) robot.plot(qt.q, backend='pyplot', movie='panda1.gif')
<p align="center"> <img src="./docs/figs/panda1.gif"> </p>

where we have specified the matplotlib pyplot backend. Blue arrows show the joint axes and the coloured frame shows the end-effector pose.

We can also plot the trajectory in the Swift simulator (a browser-based 3d-simulation environment built to work with the Toolbox)

python
robot.plot(qt.q)
<p align="center"> <img src="./docs/figs/panda2.gif"> </p>

We can also experiment with velocity controllers in Swift. Here is a resolved-rate motion control example

python
import swift import roboticstoolbox as rtb import spatialmath as sm import numpy as np env = swift.Swift() env.launch(realtime=True) panda = rtb.models.Panda() panda.q = panda.qr Tep = panda.fkine(panda.q) * sm.SE3.Trans(0.2, 0.2, 0.45) arrived = False env.add(panda) dt = 0.05 while not arrived: v, arrived = rtb.p_servo(panda.fkine(panda.q), Tep, 1) panda.qd = np.linalg.pinv(panda.jacobe(panda.q)) @ v env.step(dt) # Uncomment to stop the browser tab from closing # env.hold()
<p align="center"> <img src="./docs/figs/panda3.gif"> </p>

Run some examples

The notebooks folder contains some tutorial Jupyter notebooks which you can browse on GitHub. Additionally, have a look in the examples folder for many ready to run examples.

<br>

<a id='6'></a>

Toolbox ICRA Paper and Citation Info

Check out our ICRA 2021 paper on IEEE Xplore or get the PDF from Peter's website.

If the toolbox helped you in your research, please cite

@inproceedings{rtb,
  title={Not your grandmother’s toolbox--the Robotics Toolbox reinvented for Python},
  author={Corke, Peter and Haviland, Jesse},
  booktitle={2021 IEEE International Conference on Robotics and Automation (ICRA)},
  pages={11357--11363},
  year={2021},
  organization={IEEE}
}
<br>

<a id='7'></a>

Using the Toolbox in your Open Source Code?

If you are using the Toolbox in your open source code, feel free to add our badge to your readme!

For the powered by robotics toolbox badge

Powered by the Robotics Toolbox

copy the following

[![Powered by the Robotics Toolbox](https://raw.githubusercontent.com/petercorke/robotics-toolbox-python/main/.github/svg/rtb_powered.min.svg)](https://github.com/petercorke/robotics-toolbox-python)

For the powered by python robotics badge

Powered by Python Robotics

copy the following

[![Powered by Python Robotics](https://raw.githubusercontent.com/petercorke/robotics-toolbox-python/main/.github/svg/pr_powered.min.svg)](https://github.com/petercorke/robotics-toolbox-python)
<br>

<a id='8'></a>

Common Issues and Solutions

See the common issues with fixes here.

Using the Toolbox with Windows?

Graphical visualisation via swift is currently not supported under Windows. However there is a hotfix, by changing in SwiftRoute.py

self.path[9:] to self.path[10:]

<br> <br>

<a id='5'></a>

Toolbox Research Applications

The toolbox is incredibly useful for developing and prototyping algorithms for research, thanks to the exhaustive set of well documented and mature robotic functions exposed through clean and painless APIs. Additionally, the ease at which a user can visualize their algorithm supports a rapid prototyping paradigm.

Publication List

J. Haviland, N. Sünderhauf and P. Corke, "A Holistic Approach to Reactive Mobile Manipulation," in IEEE Robotics and Automation Letters, doi: 10.1109/LRA.2022.3146554. In the video, the robot is controlled using the Robotics toolbox for Python and features a recording from the Swift Simulator.

[Arxiv Paper] [IEEE Xplore] [Project Website] [Video] [Code Example]

<p> <a href="https://youtu.be/-DXBQPeLIV4"> <img src="https://raw.githubusercontent.com/petercorke/robotics-toolbox-python/main/docs/figs/holistic_youtube.png" width="560"> </a> </p>

J. Haviland and P. Corke, "NEO: A Novel Expeditious Optimisation Algorithm for Reactive Motion Control of Manipulators," in IEEE Robotics and Automation Letters, doi: 10.1109/LRA.2021.3056060. In the video, the robot is controlled using the Robotics toolbox for Python and features a recording from the Swift Simulator.

[Arxiv Paper] [IEEE Xplore] [Project Website] [Video] [Code Example]

<p> <a href="https://youtu.be/jSLPJBr8QTY"> <img src="https://raw.githubusercontent.com/petercorke/robotics-toolbox-python/main/docs/figs/neo_youtube.png" width="560"> </a> </p>

K. He, R. Newbury, T. Tran, J. Haviland, B. Burgess-Limerick, D. Kulić, P. Corke, A. Cosgun, "Visibility Maximization Controller for Robotic Manipulation", in IEEE Robotics and Automation Letters, doi: 10.1109/LRA.2022.3188430. In the video, the robot is controlled using the Robotics toolbox for Python and features a recording from the Swift Simulator.

[Arxiv Paper] [IEEE Xplore] [Project Website] [Video] [Code Example]

<p> <a href="https://youtu.be/vobLvg4E3kM"> <img src="https://raw.githubusercontent.com/petercorke/robotics-toolbox-python/future/docs/figs/vmc_youtube.png" width="560"> </a> </p>

A Purely-Reactive Manipulability-Maximising Motion Controller, J. Haviland and P. Corke. In the video, the robot is controlled using the Robotics toolbox for Python.

[Paper] [Project Website] [Video] [Code Example]

<p> <a href="https://youtu.be/Vu_rcPlaADI"> <img src="https://raw.githubusercontent.com/petercorke/robotics-toolbox-python/main/docs/figs/mmc_youtube.png" width="560"> </a> </p> <br> <br>

Contributors

Showing top 12 contributors by commit count.

View all contributors on GitHub →

This article is auto-generated from petercorke/robotics-toolbox-python via the GitHub API.Last fetched: 6/14/2026