Skip to content

Background

Peter Corke edited this page Sep 12, 2020 · 1 revision

The Robotics Toolbox for Python is a modern reimplementation of the Robotics Toolbox for MATLAB which has been used for 25 years for teaching and research worldwide.

The Python version takes advantage of popular open-source packages and resources to provide platform portability, fast browser-based 3D graphics, quality documentation, fast numerical and symbolic operations, powerful IDEs, shareable and web-browseable notebooks all powered by GitHub and the open-source community. The new Toolbox provides well-known functionality for spatial mathematics (homogeneous transformations, quaternions, triple angles and twists), trajectories, kinematics (zeroth and first order) kinematics, dynamics and a rich assortment of robot models. In addition, we've taken the opportunity to new capabilities such as branched mechanisms, collision checking, URDF import, and interfaces to CopelliaSim, ROS and Dynamixel servomotors. With familiar simple but powerful functions and the clarity of Python syntax but without the complexity of ROS, our goal is that users from beginner to advanced will find this a powerful open-source toolset for robotics education and research.

History

The Robotics Toolbox for MATLAB (RTB-M) was created to support the first author’s PhD research 1991-93 and first published as "A computer tool for simulation and analysis: the Robotics Toolbox for MATLAB", Proceedings of the 1995 National Conference of the Australian Robot Association, Melbourne, Australia, pp 319-330, July 1995. It has evolved over 25 years to track changes and improvements in the MATLAB language, such as the addition of structures, objects, lists (cell arrays) and strings, and myriad improvements to the language, graphics and associated tools such as IDE, debugger, notebooks (LiveScripts) and apps. An adverse consequence is that many poor (in retrospect) early design decisions hinder development. Over time additional functionality was added, in particular for vision, and two major refactoring events led to the current state of three toolboxes: Robotics Toolbox for MATLAB and Machine Vision Toolbox for MATLAB (1999) both of which are built on the Spatial Math Toolbox for MATLAB (SMTB-M) in 2019.

The code was formally open sourced to support its use for the third edition of John Craig’s book "Introduction to Robotics" and was hosted on ftp sites, personal web servers, Google code and currently GitHub. Over time it was maintained under a roll call of version control tools: rcs, cvs, svn and git. A support forum on Google Groups was established in 2008 and currently has over 1400 members.

Design goals for the Python version

The imperative for a Python version has long existed and the first port was made in 2009 but ultimately failed for lack of ongoing resources to complete it and maintain it. Subsequent attempts have all met the same fate.

The design goals of this (2020) version can be summarised as:

  • Improved functionality

    • Build on the Spatial Math Toolbox for Python which provides objects to represent rotations as matrices SO(2) and SO(3) as well as unit-quaternions, rigid-body motions as matrices SE(2) and SE(3) matrices as well as twists in se(2) and se(3), and Featherstone’s spatial vectors.
    • Collision checking
    • Support models expressed using Denavit-Hartenberg notation (standard and modified), elementary transform strings\cite{}, and URDF-style rigid-body trees. Support branched but not closed-loops or parallel robots
  • Improved software engineering (build it well, on strong foundations)

    • Use Python 3 (3.4 and greater)
    • Utilize WebGL and Javascript graphics technologies
    • Documentation in ReStructured Text using Sphinx and delivered by GitHub pages.
    • Hosted on GitHub with continuous integration via GitHub actions
    • Work with ROS but not be dependent on ROS
    • High code-quality metrics for code coverage and LGTM automated code review and security analysis
    • As few dependencies as possible
    • Modular approach to interfacing to different graphics libraries, simulators and physical robots.
    • Support Python notebooks which allows publication of static notebooks (for example via GitHub) and interactive online notebooks (MyBinder.org).