Skip to content

rustlluk/pyCub

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

README

pyCub is iCub humanoid robot simulator written in Python. It uses PyBullet for simulation and Open3D for visualization.

Known bugs

Installation

  1. Install dependencies
    • use Docker
    • or install python3 (3.8 and higher; tested in 3.11) and python3 -m pip install pybullet numpy scipy open3d
      • open3d 0.16.0 and higher is required
        • you may need to upgrade pip first: python3 -m pip install --upgrade pip
  2. Pull this repository
  3. try run some example, e.g., python3 PATH_TO_THE_REPOSITORY/icub_pybullet/examples/push_the_ball_cartesian.py
  4. (optional, but recommended) add export PYTHONPATH=$PYTHONPATH:PATH_TO_THE_REPOSITORY/icub_pybullet to your ~/.bashrc file
    • this will allow you to run scripts from any location

Examples

  • push_the_ball_pure_joints.py contains an example that shows how to control the robot in joint space
  • push_the_ball_cartesian.py contains an example that shows how to control the robot in Cartesian space
  • skin_test.py contains an example with balls falling the robot and skin should turn green on the places where contact occurs. You may want to slow the simulation a little bit to see that :)

Information

  • documentation can be found at lukasrustler.cz/pycub or in pyCub.pdf
  • presentation with description of functionality can be found at pyCub presentation
  • simulator code is in pycub.py
    • it uses PyBullet for simulation and provides high-level interface
  • visualization code in visualizer.py
    • it uses Open3D for visualization as it is much more customizable than PyBullet default GUI
  • movement is done using position control. You can either use position control directly (pycub.move_position()) or use cartesian control (pycub.move_cartesian())
    • Neither of these check for collision before movement!
    • Function pycub.motion_done() check whether all joints reached the target or whether collision ocurred. If collision, the variable pycub.collision_during_movement is set. You can also run pycub.motion_done() with check_collision=False to ignore collision checks, e.g., to get out of collision state
  • until you add export PYTHONPATH=$PYTHONPATH:PATH_TO_THE_REPOSITORY/icub_pybullet to your ~/.bashrc file (or change PYTHONPATH everytime you open a new terminal) you have to add something like sys.path.append(0, "PATH_TO_THE_REPOSITORY/icub_pybullet") to every file you want to run
    • scripts in examples folder already contain such line, so the examples can be run easily

Docker

https://github.com/rustlluk/easy-docker is utilized to use Docker

Installation

  • install docker-engine (DO NOT INSTALL DOCKER DESKTOP), do post-installation steps and (optional) install nvidia-docker for GPU support

  • For ubuntu (and Mint, but you have) users:

    • if you are a mint user, change VERSION_CODENAME to UBUNTU_CODENAME
    sudo apt-get update
    sudo apt-get install ca-certificates curl gnupg
    sudo install -m 0755 -d /etc/apt/keyrings
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
    sudo chmod a+r /etc/apt/keyrings/docker.gpg
    
    echo \
      "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
      "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
      sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    sudo apt-get update
    sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
    
    • and post-installation to use docker without sudo:
    sudo groupadd docker
    sudo usermod -aG docker $USER
    
    • and restart your computer
  • clone this repository

    cd SOME_PATH
    git clone https://github.com/rustlluk/pyCub.git
    
  • (optionally) rename it to be called the same as in docker

    mv PATH_TO_THE_REPOSITORY/pycub SOME_PATH/pycub_ws
    
  • build the docker (see Parameters for more parameters)

    cd SOME_PATH/pycub_ws/Docker
    ./deploy.py -b -p PATH_TO_THE_REPOSITORY/pycub_ws -c pycub
    
  • after you built the container, you can run it next time as

    ./deploy.py -e -c pycub
    
  • if you want to open new terminal in existing container, run

    ./deploy.py -c pycub -t
    

Docker + PyCharm

You have two option:

  1. Either run pycharm from docker
  2. Open your pycharm on your host machine:
    • add ssh interpreter
      • user docker
      • ip can be localhost or ip where you run the docker
      • port 2222
    • uncheck automatic upload to remote folder
    • change remote path to /home/docker/pycub_ws

Common steps:

  • mark all folder icub_pybullet as Source Root
  • for X11 forwarding:
    • Click on configurations drop menu -> Edit Configurations -> Edit configuration templates -> Python -> Edit environment variables -> add DISPLAY with the same value as in docker and uncheck 'Include system environment variables'. Every new configuration will have that settings from now
      • if you already have configuration created before doing the above -> delete it and create again, or change it manually

Deploy Parameters

  • cd to folder with Dockerfile
  • ./deploy.py
    • -b or --build when building
      • default: False
    • -nv or --nvidia when you want to use your Nvidia card
      • you have to use it when creating a new container
      • default: False
    • -e if you just want to run existing docker without building
      • default: False
    • -p or --path with path to current folder
      • default: ""
    • c or --container with desired name of the new, created container
      • default: my_new_docker
    • t or --terminal to run new terminal in running docker session
      • default: False
    • -pv or --python-version to specify addition python version to install
      • default: 3.11
    • -pcv or --pycharm-version to specify version of pycharm to use
      • default: 2023.2.3
    • -bi or --base-image to specify base image that will be used
      • default: nvidia/cuda:11.0.3-devel-ubuntu20.04
      • other can be found at hub.docker.com

Do this on computer where you will run the code. If you have a server you have to run it on the server over SSH to make things work properly.

FAQ

  • applications do not run on your screen (or you have some strange screen related errors)
    • in another terminal run xhost local:docker
      • if it does not work, try xhost +
        • if this does not work, nothing can be done
  • you get error of not being in sudo group when running image
    • check output of id -u command. If the output is not 1000 you have to build the image by yourself and can not pull it
      • this happens when your account is not the first one created on your computer
  • sudo apt install something does not work
    • you need to run sudo apt update first after you run the container for the first time
      • apt things are removed in Dockerfile, so it does not take unnecessary space in the image

About

iCub simulator in Python

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published