stepjam / PyRep

A toolkit for robot learning research.
MIT License
692 stars 165 forks source link

PyRep Build Status Discord

PyRep is a toolkit for robot learning research, built on top of CoppeliaSim (previously called V-REP).

Install

PyRep requires version 4.1 of CoppeliaSim. Download:

Once you have downloaded CoppeliaSim, you can pull PyRep from git:

git clone https://github.com/stepjam/PyRep.git
cd PyRep

Add the following to your ~/.bashrc file: (NOTE: the 'EDIT ME' in the first line)

export COPPELIASIM_ROOT=EDIT/ME/PATH/TO/COPPELIASIM/INSTALL/DIR
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$COPPELIASIM_ROOT
export QT_QPA_PLATFORM_PLUGIN_PATH=$COPPELIASIM_ROOT

__Remember to source your bashrc (source ~/.bashrc) or zshrc (source ~/.zshrc) after this.

Finally install the python library:

pip3 install -r requirements.txt
pip3 install .

You should be good to go! Try running one of the examples in the examples/ folder.

Although you can use CoppeliaSim on any platform, communication via PyRep is currently only supported on Linux.

Troubleshooting

Below are some problems you may encounter during installation. If none of these solve your problem, please raise an issue.

Running Headless

You can run PyRep/CoppeliaSim headlessly with VirtualGL. VirtualGL is an open source toolkit that gives any Unix or Linux remote display software the ability to run OpenGL applications with full 3D hardware acceleration. First insure that you have the nVidia proprietary driver installed. I.e. you should get an output when running nvidia-smi. Now run the following commands:

sudo apt-get install xorg libxcb-randr0-dev libxrender-dev libxkbcommon-dev libxkbcommon-x11-0 libavcodec-dev libavformat-dev libswscale-dev
sudo nvidia-xconfig -a --use-display-device=None --virtual=1280x1024
# Install VirtualGL
wget https://sourceforge.net/projects/virtualgl/files/2.5.2/virtualgl_2.5.2_amd64.deb/download -O virtualgl_2.5.2_amd64.deb
sudo dpkg -i virtualgl*.deb
rm virtualgl*.deb

You will now need to reboot, and then start the X server:

sudo reboot
nohup sudo X &

Now we are good to go! To render the application with the first GPU, you can do the following:

export DISPLAY=:0.0
python my_pyrep_app.py

To render with the second GPU, you will insetad set display as: export DISPLAY=:0.1, and so on.

Acknowledgement: Special thanks to Boyuan Chen (UC Berkeley) for bringing VirtualGL to my attention!

Getting Started

  1. First take a look at Usage and the examples in the examples/ folder to see if PyRep might be able to accelerate your research.
  2. Take a look at the CoppeliaSim tutorials.

Usage

The best way to see how PyRep can help in your research is to look at the examples in the examples/ folder!

Launching the simulation

from pyrep import PyRep

pr = PyRep()
# Launch the application with a scene file in headless mode
pr.launch('scene.ttt', headless=True) 
pr.start()  # Start the simulation

# Do some stuff

pr.stop()  # Stop the simulation
pr.shutdown()  # Close the application

Modifying the Scene

from pyrep.objects.shape import Shape
from pyrep.const import PrimitiveShape

object = Shape.create(type=PrimitiveShape.CYLINDER, 
                      color=[r,g,b], size=[w, h, d],
                      position=[x, y, z])
object.set_color([r, g, b])
object.set_position([x, y, z])

Using Robots

Robots are designed to be modular; arms are treated separately to grippers.

Use the robot ttm files defined in robots/ttms. These have been altered slightly from the original ones shipped with CoppeliaSim to allow them to be used with motional planning out of the box. The 'tip' of the robot may not be where you want it, so feel free to play around with this.

from pyrep import PyRep
from pyrep.robots.arms.panda import Panda
from pyrep.robots.end_effectors.panda_gripper import PandaGripper

pr = PyRep()
# Launch the application with a scene file that contains a robot
pr.launch('scene_with_panda.ttt') 
pr.start()  # Start the simulation

arm = Panda()  # Get the panda from the scene
gripper = PandaGripper()  # Get the panda gripper from the scene

velocities = [.1, .2, .3, .4, .5, .6, .7]
arm.set_joint_target_velocities(velocities)
pr.step()  # Step physics simulation

done = False
# Open the gripper halfway at a velocity of 0.04.
while not done:
    done = gripper.actuate(0.5, velocity=0.04)
    pr.step()

pr.stop()  # Stop the simulation
pr.shutdown()  # Close the application

We recommend constructing your robot in a dictionary or a small structure, e.g.

class MyRobot(object):
  def __init__(self, arm, gripper):
    self.arm = arm
    self.gripper = gripper

arm = Panda()  # Get the panda from the scene
gripper = PandaGripper()  # Get the panda gripper from the scene

# Create robot structure
my_robot_1 = MyRobot(arm, gripper)
# OR
my_robot_2 = {
  'arm': arm,
  'gripper': gripper
}

Running Multiple PyRep Instances

Each PyRep instance needs its own process. This can be achieved using Pythons multiprocessing module. Here is a simple example:

from multiprocessing import Process

PROCESSES = 10

def run():
  pr = PyRep()
  pr.launch('my_scene.ttt', headless=True)
  pr.start()
  # Do stuff...
  pr.stop()
  pr.shutdown()

processes = [Process(target=run, args=()) for i in range(PROCESSES)]
[p.start() for p in processes]
[p.join() for p in processes]

Supported Robots

Here is a list of robots currently supported by PyRep:

Arms

Grippers

Mobile Robots

Feel free to send pull requests for new robots!

Adding Robots

If the robot you want is not currently supported, then why not add it in!

Here is a tutorial for adding robots.

Contributing

We want to make PyRep the best tool for rapid robot learning research. If you would like to get involved, then please get in contact!

Pull requests welcome for bug fixes!

Projects Using PyRep

If you use PyRep in your work, then get in contact and we can add you to the list!

Acknowledgements

What Happened to V-REP?

Coppelia Robotics discontinued development of V-REP. Instead, they now focus their efforts on CoppeliaSim. CoppeliaSim is 100% compatible with V-REP. See more information here.

PyRep is fully compatible with both V-REP and CoppeliaSim.

Citation

@article{james2019pyrep,
  title={PyRep: Bringing V-REP to Deep Robot Learning},
  author={James, Stephen and Freese, Marc and Davison, Andrew J.},
  journal={arXiv preprint arXiv:1906.11176},
  year={2019}
}