All Projects → petercorke → Robotics Toolbox Python

petercorke / Robotics Toolbox Python

Licence: mit
Robotics Toolbox for Python

Programming Languages

python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to Robotics Toolbox Python

Rl
The Robotics Library (RL) is a self-contained C++ library for rigid body kinematics and dynamics, motion planning, and control.
Stars: ✭ 391 (+5.96%)
Mutual labels:  robotics, motion-planning, dynamics, kinematics
Pinocchio
A fast and flexible implementation of Rigid Body Dynamics algorithms and their analytical derivatives
Stars: ✭ 432 (+17.07%)
Mutual labels:  robotics, motion-planning, dynamics, kinematics
Robotics Toolbox Matlab
Robotics Toolbox for MATLAB
Stars: ✭ 601 (+62.87%)
Mutual labels:  robotics, motion-planning, dynamics, kinematics
Pybotics
The Python Toolbox for Robotics
Stars: ✭ 192 (-47.97%)
Mutual labels:  robotics, dynamics, kinematics
Dart
Dynamic Animation and Robotics Toolkit
Stars: ✭ 596 (+61.52%)
Mutual labels:  robotics, dynamics, kinematics
Rigidbodydynamics.jl
Julia implementation of various rigid body dynamics and kinematics algorithms
Stars: ✭ 184 (-50.14%)
Mutual labels:  robotics, dynamics, kinematics
biomechanics dataset
Information of public available data sets for biomechanics.
Stars: ✭ 31 (-91.6%)
Mutual labels:  kinematics, dynamics
wb-toolbox
Simulink toolbox to rapidly prototype robot controllers
Stars: ✭ 20 (-94.58%)
Mutual labels:  kinematics, dynamics
Robotics-Planning-Dynamics-and-Control
RPDC : This contains all my MATLAB codes for the Robotics, Planning, Dynamics and Control . The implementations model various kinds of manipulators and mobile robots for position control, trajectory planning and path planning problems.
Stars: ✭ 171 (-53.66%)
Mutual labels:  kinematics, dynamics
SLAM AND PATH PLANNING ALGORITHMS
This repository contains the solutions to all the exercises for the MOOC about SLAM and PATH-PLANNING algorithms given by professor Claus Brenner at Leibniz University. This repository also contains my personal notes, most of them in PDF format, and many vector graphics created by myself to illustrate the theoretical concepts. Hope you enjoy it! :)
Stars: ✭ 107 (-71%)
Mutual labels:  robotics, motion-planning
HRVO
The Hybrid Reciprocal Velocity Obstacle (C++)
Stars: ✭ 90 (-75.61%)
Mutual labels:  robotics, motion-planning
TORA.jl
Trajectory Optimization for Robot Arms
Stars: ✭ 27 (-92.68%)
Mutual labels:  robotics, motion-planning
Helicopter-Simulation
A complete 6DOF helicopter simulation (physics engine + visualization)
Stars: ✭ 45 (-87.8%)
Mutual labels:  kinematics, dynamics
Airsim Neurips2019 Drone Racing
Drone Racing @ NeurIPS 2019, built on Microsoft AirSim
Stars: ✭ 220 (-40.38%)
Mutual labels:  robotics, motion-planning
scikit-robot
A Flexible Framework for Robot Control in Python
Stars: ✭ 70 (-81.03%)
Mutual labels:  kinematics, motion-planning
Rvo2 Cs
Optimal Reciprocal Collision Avoidance (C#)
Stars: ✭ 208 (-43.63%)
Mutual labels:  robotics, motion-planning
piper
No description or website provided.
Stars: ✭ 50 (-86.45%)
Mutual labels:  robotics, motion-planning
CLF reactive planning system
This package provides a CLF-based reactive planning system, described in paper: Efficient Anytime CLF Reactive Planning System for a Bipedal Robot on Undulating Terrain. The reactive planning system consists of a 5-Hz planning thread to guide a robot to a distant goal and a 300-Hz Control-Lyapunov-Function-based (CLF-based) reactive thread to co…
Stars: ✭ 21 (-94.31%)
Mutual labels:  robotics, motion-planning
AVO2
Reciprocal Collision Avoidance with Acceleration-Velocity Obstacles (C++)
Stars: ✭ 24 (-93.5%)
Mutual labels:  robotics, motion-planning
Toppra
robotic motion planning library
Stars: ✭ 254 (-31.17%)
Mutual labels:  robotics, motion-planning

Robotics Toolbox for Python

PyPI version PyPI - Python Version License: MIT Binder QUT Centre for Robotics Open Source

Build Status Coverage Language grade: Python PyPI - Downloads

A Python implementation of the Robotics Toolbox for MATLAB®

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 will also support 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.

Code Example

We will load a model of the Franka-Emika Panda robot defined classically using modified (Craig's convention) Denavit-Hartenberg notation

import roboticstoolbox as rtb
robot = rtb.models.DH.Panda()
print(robot)

	┏━━━━━━━━┳━━━━━━━━┳━━━━━┳━━━━━━━┳━━━━━━━━━┳━━━━━━━━┓
	 aⱼ₋₁     ⍺ⱼ₋₁   θⱼ    d      q       q   
	┣━━━━━━━━╋━━━━━━━━╋━━━━━╋━━━━━━━╋━━━━━━━━━╋━━━━━━━━┫
	    0.0    0.0°   q1  0.333  -166.0°  166.0° 
	    0.0  -90.0°   q2    0.0  -101.0°  101.0° 
	    0.0   90.0°   q3  0.316  -166.0°  166.0° 
	 0.0825   90.0°   q4    0.0  -176.0°   -4.0° 
	-0.0825  -90.0°   q5  0.384  -166.0°  166.0° 
	    0.0   90.0°   q6    0.0    -1.0°  215.0° 
	  0.088   90.0°   q7  0.107  -166.0°  166.0° 
	┗━━━━━━━━┻━━━━━━━━┻━━━━━┻━━━━━━━┻━━━━━━━━━┻━━━━━━━━┛
	
	┌─────┬───────────────────────────────────────┐
	tool  t = 0, 0, 0.1; rpy/xyz = -45°, 0°, 0° 
	└─────┴───────────────────────────────────────┘
	
	┌─────┬─────┬────────┬─────┬───────┬─────┬───────┬──────┐
	name  q0   q1      q2   q3     q4   q5     q6   
	├─────┼─────┼────────┼─────┼───────┼─────┼───────┼──────┤
	  qz   0°   0°      0°   0°     0°   0°     0°  
	  qr   0°  -17.2°   0°  -126°   0°   115°   45° 
	└─────┴─────┴────────┴─────┴───────┴─────┴───────┴──────┘

T = robot.fkine(robot.qz)  # forward kinematics
print(T)

	   0.707107    0.707107    0           0.088        
	   0.707107   -0.707107    0           0            
	   0           0          -1           0.823        
	   0           0           0           1          

(Python prompts are not shown to make it easy to copy+paste the code, console output is indented)

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

T = SE3(0.7, 0.2, 0.1) * SE3.OA([0, 1, 0], [0, 0, -1])
sol = robot.ikine_LM(T)         # solve IK
print(sol)
	IKsolution(q=array([  0.2134,    1.867,  -0.2264,   0.4825,   0.2198,    1.396,   -2.037]), success=True, reason=None, iterations=12, residual=1.4517646473808178e-11)

q_pickup = sol.q
print(robot.fkine(q_pickup))    # FK shows that desired end-effector pose was achieved

	Out[35]: 
		-1            9.43001e-14  2.43909e-12  0.7          
		 9.43759e-14  1            7.2574e-13   0.2          
		-2.43913e-12  7.2575e-13  -1            0.1          
		 0            0            0            1 

Note that because this robot is redundant we don't have any control over the arm configuration apart from end-effector pose, ie. we can't control the elbow height.

We can animate a path from the upright qz configuration to this pickup configuration

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

Panda trajectory animation

which uses the default matplotlib backend. Grey arrows show the joint axes and the colored frame shows the end-effector pose.

Let's now load a URDF model of the same robot. The kinematic representation is no longer based on Denavit-Hartenberg parameters, it is now a rigid-body tree.

robot = rtb.models.URDF.Panda()  # load URDF version of the Panda
print(robot)    # display the model

	┌───┬──────────────┬─────────────┬──────────────┬─────────────────────────────────────────────┐
	id      link        parent        joint                          ETS                     
	├───┼──────────────┼─────────────┼──────────────┼─────────────────────────────────────────────┤
	 0   panda_link0            -                                                            
	 1   panda_link1  panda_link0  panda_joint1                           tz(0.333) * Rz(q0) 
	 2   panda_link2  panda_link1  panda_joint2                            Rx(-90°) * Rz(q1) 
	 3   panda_link3  panda_link2  panda_joint3                ty(-0.316) * Rx(90°) * Rz(q2) 
	 4   panda_link4  panda_link3  panda_joint4                tx(0.0825) * Rx(90°) * Rz(q3) 
	 5   panda_link5  panda_link4  panda_joint5  tx(-0.0825) * ty(0.384) * Rx(-90°) * Rz(q4) 
	 6   panda_link6  panda_link5  panda_joint6                             Rx(90°) * Rz(q5) 
	 7   panda_link7  panda_link6  panda_joint7                 tx(0.088) * Rx(90°) * Rz(q6) 
	 8  @panda_link8  panda_link7  panda_joint8                                    tz(0.107) 
	└───┴──────────────┴─────────────┴──────────────┴─────────────────────────────────────────────┘

The symbol @ indicates the link as an end-effector, a leaf node in the rigid-body tree.

We can instantiate our robot inside a browser-based 3d-simulation environment.

env = rtb.backends.Swift()  # instantiate 3D browser-based visualizer
env.launch()                # activate it
env.add(robot)              # add robot to the 3D scene
for qk in qt.q:             # for each joint configuration on trajectory
      robot.q = qk          # update the robot state
      env.step()            # update visualization

Getting going

Installing

You will need Python >= 3.6

Using pip

Install a snapshot from PyPI

pip3 install roboticstoolbox-python

Available options are:

  • vpython install VPython backend
  • collision install collision checking with pybullet

Put the options in a comma separated list like

pip3 install roboticstoolbox-python[optionlist]

Swift, a web-based visualizer, is installed as part of Robotics Toolbox.

From GitHub

To install the bleeding-edge version from GitHub

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

Run some examples

The notebooks folder contains some tutorial Jupyter notebooks which you can browse on GitHub.

Or you can run them, and experiment with them, at mybinder.org.

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

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]


Common Issues

See the common issues with fixes here.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].