-
Notifications
You must be signed in to change notification settings - Fork 474
Backends
The Toolbox supports a number of backends to display a robot animation or to control a physical robot.
By default, only the PyPlot backend is included in the Toolbox install. The others require additional installation steps.
This backend displays the robot as a noodle using matplotlib graphics. matplotlib is the most ubiquitous graphics library for Python and runs on all platforms.
>>> import roboticstoolbox as rtb
>>> p560 = rtb.models.DH.Puma560()
>>> qt = rtb.tools.trajectory.jtraj(p560.qz, p560.qr, 50)
>>> p560.plot(qt.q)
Options exist to:
- attach a velocity or force ellipsoid,
- display link frames and joint axes,
- save the animation to a file as an animated GIF
This backend displays the robot in 3D in a browser window using JavaScript and VPython. At the moment it only works with models defined using DH notation and requires STL meshes.
>>> import roboticstoolbox as rtb
>>> p560 = rtb.models.DH.Puma560()
>>> env = p560.plot(qt.q, backend='vpython')
If you wish to record the scene, it is recommended to slow the robot down and record in a slow rate. Trying to record in high fps can lag and jumble the resulting video.
>>> env.record_start(5) # Record at 5 fps
>>> for q in qt.q:
>>> time.sleep(1/5)
>>> env.step(puma, q=q)
>>> env.record_stop('vpython_video.mp4', save_fps=25) # Save the resulting file at 25 fps
Swift displays in a web browser table using three.js. At the moment it only works with models defined using URDF and can use STL or Collada meshes.
>>> import roboticstoolbox as rtb
>>> p560 = rtb.models.URDF.Puma560()
>>> qt = rtb.tools.trajectory.jtraj(p560.qz, p560.qr, 50)
>>> p560.plot(qt.q)
TODO ADD CODE EXAMPLE AND IMAGE/ANIMATION
The simplest way is using plot
with a backend
option as shown above. The alternative is to create a backend environment
from roboticstoolbox.backends.BACKEND import BACKEND
env = BACKEND()
# where BACKEND is PyPlot, VPython or Swift
env.launch() # start the backend
env.add(robot) # add a robot to the backend
for ...:
robot.q = some value
env.step()
Follow the instructions on the Swift home page.
CopelliaSim is a mature and capable cross-platform robot simulation environment with a free licence to use for education.
TODO ADD CODE EXAMPLE AND IMAGE/ANIMATION
ADD DETAILS FOR COPSIM, CONFIGURATION
The backend supports a simple API defined in backends/Connector.py
-
launch()
launch the external program with an empty or specific scene as defined by args -
step(dt)
requests the external program to make a time step of defined time updating the state of the environment, including all robots, as defined by the robot's actions. -
id = add(object)
adds an object to the external environment. If object is a robot, it must be of an appropriate class. This adds the object to a list of which will act upon the step() method being called. This method returns the id of the object. -
remove(id)
removes the specified object from the external environment. -
reset()
triggers the external program to reset to the original state defined by launch -
restart()
request the external program to close and relaunch to the state defined by launch -
close()
requests that the external program to gracefully close -
hold()
requests that the external program stays open, will prevent Python from exiting the script. Is blocking -
getframe()
return a PIL image for current frame if possible
- tidy up objects that can be added, they should have a common superclass with abstract methods that addables must have
- teach panel, this is still an underscore function.
-
getframe
method. Can we make this work for VPython and Swift? We have too many different ways of recording movies, need to unify
- Frequently asked questions (FAQ)
- Documentation Style Guide
- Typing Style Guide
- Background
- Key concepts
- Introduction to robot and link classes
- Working with Jupyter
- Working from the command line
- What about Simulink?
- How to contribute
- Common Issues
- Contributors