Skip to main content

A Python library for robotics education and research

Project description

Robotics Toolbox for Python

Note about this fork This repository is a fork of the upstream Robotics Toolbox for Python with the following differences:

  • Joint wrapping behavior: joint solutions are only wrapped when doing so helps satisfy joint limits, preventing wrap-induced limit violations.
  • Performance: DHRobot now uses LRU caching to speed up repeated computations.
  • Optional visualization deps: spatialgeometry and swift-sim are now optional. Core kinematics (FK, Jacobian, IK) work without them. Install with pip install roboticstoolbox-python-source-robotics[viz] if you need Swift visualization or geometry features.
  • Upstream changes: incorporates updates from the upstream "future" branch.

Upstream project: https://github.com/petercorke/robotics-toolbox-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

A Python implementation of the Robotics Toolbox for MATLAB®

Contents


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.


Getting going

You will need Python >= 3.10

Using pip

Install a snapshot from PyPI

pip3 install roboticstoolbox-python-source-robotics

If you already have the upstream package installed, uninstall it first because both distributions provide the same roboticstoolbox import package:

pip3 uninstall roboticstoolbox-python
pip3 install roboticstoolbox-python-source-robotics

Available options are:

  • collision install collision checking with pybullet
  • viz install visualization dependencies (Swift and spatialgeometry)

Put the options in a comma separated list like

pip3 install roboticstoolbox-python-source-robotics[viz,collision]

Note: Core kinematics (FK, Jacobian, IK) work without any optional dependencies.

From GitHub

To install the bleeding-edge version from GitHub

git clone https://github.com/Source-Robotics/robotics-toolbox-python-source-robotics.git
cd robotics-toolbox-python-source-robotics
pip3 install -e .

Tutorials

Do you want to learn about manipulator kinematics, differential kinematics, inverse-kinematics and motion control? Have a look at our tutorial. 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.

Code Examples

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

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

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

qt = rtb.jtraj(robot.qr, q_pickup, 50)
robot.plot(qt.q, backend='pyplot', movie='panda1.gif')

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)

robot.plot(qt.q)

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

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()

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.


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

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/master/.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/master/.github/svg/pr_powered.min.svg)](https://github.com/petercorke/robotics-toolbox-python)

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:]



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]

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]

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]

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]



Project details


Download files

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

Source Distribution

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

roboticstoolbox_python_source_robotics-1.3.0.post1-cp314-cp314-win_amd64.whl (1.9 MB view details)

Uploaded CPython 3.14Windows x86-64

roboticstoolbox_python_source_robotics-1.3.0.post1-cp311-cp311-win_amd64.whl (1.9 MB view details)

Uploaded CPython 3.11Windows x86-64

File details

Details for the file roboticstoolbox_python_source_robotics-1.3.0.post1.tar.gz.

File metadata

File hashes

Hashes for roboticstoolbox_python_source_robotics-1.3.0.post1.tar.gz
Algorithm Hash digest
SHA256 cc0520513e84689a504b656e2072547ea60692e7315c7af8f6cfd711146bed0a
MD5 53655ebd62c38a367bbc8ed51f9a4820
BLAKE2b-256 1873d765364c677d7b4d262520de5e05e26b08a80dda8c2038c38f1424c88f0b

See more details on using hashes here.

File details

Details for the file roboticstoolbox_python_source_robotics-1.3.0.post1-cp314-cp314-win_amd64.whl.

File metadata

File hashes

Hashes for roboticstoolbox_python_source_robotics-1.3.0.post1-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 344cfb9faff9b64ffc185b859efda3199763a496edf8275314b991ca857f87c9
MD5 6b568f337dbc8f838e6b2dd9613678d5
BLAKE2b-256 247274d21b8740053aaed5ef214ed013c9d91d45b1f07f8a4d20c7340d0fb41c

See more details on using hashes here.

File details

Details for the file roboticstoolbox_python_source_robotics-1.3.0.post1-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for roboticstoolbox_python_source_robotics-1.3.0.post1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 a99bdeca28b9bd2c9e671d99779a91e59a7d74d2d3667f50781be772f7db2f62
MD5 2633c202bbf8418f74ad77e366c7bb82
BLAKE2b-256 bdcc3815c151673157bbcbbf5b94dd264f5fd7a3d76bb9512306bc3faf02bf34

See more details on using hashes here.

Supported by

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