Swift
![QUT Centre for Robotics Open Source](https://github.com/qcr/qcr.github.io/raw/master/misc/badge.svg)
![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)
Swift is a light-weight browser-based simulator built on top of the Robotics Toolbox for Python. This simulator provides robotics-specific functionality for rapid prototyping of algorithms, research, and education. Built using Python and Javascript, Swift is cross-platform (Linux, MacOS, and Windows) while also leveraging the ubiquity and support of these languages.
Through the Robotics Toolbox for Python, Swift can visualise over 30 supplied robot models: 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. Swift is under development and will support mobile robots in the future.
Swift provides:
- visualisation of mesh objects (Collada and STL files) and primitive shapes;
- robot visualisation and simulation;
- recording and saving a video of the simulation;
- source code which can be read for learning and teaching;
Installing
Using pip
Swift is designed to be controlled through the Robotics Toolbox for Python. By installing the toolbox through PyPI, swift is installed as a dependency
pip3 install roboticstoolbox-python
Otherwise, Swift can be install by
pip3 install swift-sim
Available options are:
nb
provides the ability for Swift to be embedded within a Jupyter Notebookvision
implements an RTC communication strategy allowing for visual feedback from Swift and allows Swift to be run on Google Colab
Put the options in a comma-separated list like
pip3 install swift-sim[optionlist]
From GitHub
To install the latest version from GitHub
git clone https://github.com/jhavl/swift.git
cd swift
pip3 install -e .
Code Examples
Robot Plot
We will load a model of the Franka-Emika Panda robot and plot it. We set the joint angles of the robot into the ready joint configuration qr.
import roboticstoolbox as rp
panda = rp.models.Panda()
panda.plot(q=panda.qr)
Resolved-Rate Motion Control
We will load a model of the Franka-Emika Panda robot and make it travel towards a goal pose defined by the variable Tep.
import roboticstoolbox as rtb
import spatialmath as sm
import numpy as np
from swift import Swift
env = Swift()
env.launch(realtime=True)
panda = rtb.models.Panda()
panda.q = panda.qr
Tep = panda.fkine(panda.q) * sm.SE3.Tx(0.2) * sm.SE3.Ty(0.2) * sm.SE3.Tz(0.45)
env.add(panda)
arrived = False
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(0.05)
Embed within a Jupyter Notebook
To embed within a Jupyter Notebook Cell, use the browser="notebook"
option when launching the simulator.
import roboticstoolbox as rtb
import spatialmath as sm
import numpy as np
from swift import Swift
env = Swift()
env.launch(realtime=True, browser="notebook")
panda = rtb.models.Panda()
panda.q = panda.qr
Tep = panda.fkine(panda.q) * sm.SE3.Tx(0.2) * sm.SE3.Ty(0.2) * sm.SE3.Tz(0.45)
env.add(panda)
arrived = False
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(0.05)