All Projects → PaulDanielML → MuJoCo_RL_UR5

PaulDanielML / MuJoCo_RL_UR5

Licence: other
A MuJoCo/Gym environment for robot control using Reinforcement Learning. The task of agents in this environment is pixel-wise prediction of grasp success chances.

Programming Languages

python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to MuJoCo RL UR5

Pytorch Rl
This repository contains model-free deep reinforcement learning algorithms implemented in Pytorch
Stars: ✭ 394 (+264.81%)
Mutual labels:  robotics, mujoco
kinpy
Simple kinematics calculation toolkit for robotics
Stars: ✭ 48 (-55.56%)
Mutual labels:  robotics, mujoco
trajopt
Trajectory optimization algorithms for robotic control.
Stars: ✭ 74 (-31.48%)
Mutual labels:  robotics, mujoco
Mjrl
Reinforcement learning algorithms for MuJoCo tasks
Stars: ✭ 162 (+50%)
Mutual labels:  robotics, mujoco
RustRobotics
Rust implementation of PythonRobotics such as EKF, DWA, Pure Pursuit, LQR.
Stars: ✭ 40 (-62.96%)
Mutual labels:  robotics
UDTStudio
UniSwarm Tools for UDT interface and CANOpen in Qt5
Stars: ✭ 13 (-87.96%)
Mutual labels:  robotics
awesome-photogrammetry
😎 Awesome photogrammetry projects
Stars: ✭ 199 (+84.26%)
Mutual labels:  robotics
2019-UGRP-DPoom
2019 DGIST DPoom project under UGRP : SBC and RGB-D camera based full autonomous driving system for mobile robot with indoor SLAM
Stars: ✭ 35 (-67.59%)
Mutual labels:  robotics
trac ik
ROS 2 port of `trac_ik`, an alternative Inverse Kinematics solver to the popular inverse Jacobian methods in KDL.
Stars: ✭ 14 (-87.04%)
Mutual labels:  robotics
robo-playground
Games and examples built for RoboMaster EP with RoboMasterPy | 与你的大疆机甲大师愉快玩耍,基于RoboMasterPy构建
Stars: ✭ 33 (-69.44%)
Mutual labels:  robotics
SLAM AND PATH PLANNING ALGORITHMS
This repository contains the solutions to all the exercises for the MOOC about SLAM and PATH-PLANNING algorithms given by professor Claus Brenner at Leibniz University. This repository also contains my personal notes, most of them in PDF format, and many vector graphics created by myself to illustrate the theoretical concepts. Hope you enjoy it! :)
Stars: ✭ 107 (-0.93%)
Mutual labels:  robotics
academy
🎓 Video tutorials, slide decks and other training materials for developers learning about the FIWARE ecosystem.
Stars: ✭ 12 (-88.89%)
Mutual labels:  robotics
graspnet-baseline
Baseline model for "GraspNet-1Billion: A Large-Scale Benchmark for General Object Grasping" (CVPR 2020)
Stars: ✭ 146 (+35.19%)
Mutual labels:  robotics
aruw-vision-platform-2019
ARUW's vision code from the 2019 season. Published here, read-only, for public reference.
Stars: ✭ 37 (-65.74%)
Mutual labels:  robotics
erwhi-hedgehog
Erwhi Hedgehog main repository
Stars: ✭ 31 (-71.3%)
Mutual labels:  robotics
jiminy
Jiminy: a fast and portable Python/C++ simulator of poly-articulated systems with OpenAI Gym interface for reinforcement learning
Stars: ✭ 90 (-16.67%)
Mutual labels:  robotics
mgym
A collection of multi-agent reinforcement learning OpenAI gym environments
Stars: ✭ 41 (-62.04%)
Mutual labels:  gym-environment
robocup-firmware
Georgia Tech RoboJackets Firmware for the RoboCup Small Size League
Stars: ✭ 22 (-79.63%)
Mutual labels:  robotics
PnC
Planning and Control Algorithms for Robotics
Stars: ✭ 22 (-79.63%)
Mutual labels:  robotics
AI-Lab
🔬 Absolutely comfort lab for me to work around with my own AIs and to empirically observe how powerful and impactful these technologies are. I do love these technologies!
Stars: ✭ 19 (-82.41%)
Mutual labels:  robotics

Accompanying repository of Master's thesis at TU Berlin / Aalborg University. No longer under active development. Developed in my earlier Python days, please forgive the unformatted spaghetti code.

Deep Reinforcement Learning for robotic pick and place applications using purely visual observations

Author: Paul Daniel ([email protected])

Traits of this environment: Very large and multi-discrete actionspace, very high sample-cost, visual observations, binary reward.

Trained agent in action Example of predicted grasp chances
Setup iteration Relevant changes
IT5 - Many more objects, randomly piled
- Actionspace now multi-discrete, with second dimension being a rotation action
IT4 - Z-coordinate for grasping now calculated using depth data
- Objects now vary in size
IT3 - New two-finger gripper implemented
IT2 - Grasp success check now after moving to drop location (1000 steps)
IT1 (Baseline) - Grasp success check after moving straight up (500 steps of trying to close the gripper)
- Fixed z-coordinate for grasping
- Objects of equal size

This repository provides several python classes for control of robotic arms in MuJoCo:

  • MJ_Controller: This class can be used as a standalone class for basic robot control in MuJoCo. This can be useful for trying out models and their grasping capabilities. Alternatively, its methods can also be used by any other class (like a Gym environment) to provide some more functionality. One example of this might be to move the robot back into a certain position after every episode of training, which might be preferable compared to just resetting all the joint angles and velocities. The controller currently also holds the methods for image transformations, which might be put into another separate class at some point.

  • GraspEnv: A Gym environment for training reinforcement learning agents. The task to master is a pick & place task. The difference to most other MuJoCo Gym environments is that the observation returned is a camera image instead of a state vector of the simulation. This is meant to resemble a real world setup more closely.

The robot configuration used in this setup (Universal Robots UR5 + Robotiq S Model 3 Finger Gripper) is based on this resource. It has since been heavily modified. Most current XML-file: UR5gripper_2_finger.xml
The python bindings used come from mujoco_py.
The PID controllers implemented are based on simple_pid.
A simple inverse kinematics solver for translating end-effector positions into joint angles has been implemented using ikpy.

The required modules can be installed either manually or using the provided requirements.txt - file.

Setup

Download and install MuJoCo from here. Set up a license and activate it here.

Then clone this repo:

git clone https://github.com/PaulDanielML/MuJoCo_RL_UR5.git

Then change into the newly created directory:

cd MuJoCo_RL_UR5/

If desired, activate a virtual environment, then run

pip install -r requirements.txt

This will install all required packages using pip. The first time you run a script that uses the Mujoco_UR5_controller class some more setup might happen, which can take a few moments. This is all the setup required to use this repo.

Usage

GraspEnv - class:

Gym-environment for training agents to use RGB-D data for predicting pixel-wise grasp success chances.
The file example_agent.py demonstrates the use of a random agent for this environment.
The file Grasping_Agent.py gives an example of training a shortsighted DQN-agent in the environment to predict pixel-wise grasping success (PyTorch). The created environment has an associated controller object, which provides all the functionality of the MJ_Controller - class to it.

  • Action space: Pixel space, can be specified by setting height and width. Current defaults: 200x200. This means there are 40.000 possible actions. This resolution translates to a picking accuracy of ~ 4mm.
  • State space: The states / observations provided are dictionaries containing two arrays: An RGB-image and a depth-image, both of the same resolution as the action space
  • Reward function: The environment has been updated to a binary reward structure:
    • 0 for choosing a pixel that does not lead to a successful grasp.
    • +1 for choosing a pixel that leads to a successful grasp.

The user gets a summary of each step performed in the console. It is recommended to train agents without rendering, as this will speed up training significantly.

console

The rgb part of the last captured observation will be shown and updated in an extra window.

observation

MJ_Controller - class:

Example usage of some of the class methods is demonstrated in the file example.py.

The class MJ_Controller offers high and low level methods for controlling the robot in MuJoCo.

  • move_ee : High level, moves the endeffector of the arm to the desired XYZ position (in world coordinates). This is done using very simple inverse kinematics, just obeying the joint limits. Currently there is not collision avoidance implemented. Since this whole repo is created with grasping in mind, the delivered pose will always be so that the gripper is oriented in a vertical way (for top down grasps).
  • actuate_joint_group : Low level, lets the user specify motor activations for a specified group
  • grasp : Uses the specified gripper group to attempt a grasp. A simple check is done to determine weather the grasp was successful or not and the result will be output blinking in the console.

gif1

Updates

Trials for Offline RL: The folder Offline RL contains scripts for generating and learning from a dataset of (state, action, reward)-transitions. generate_data.py can be used to generate as many files as required, each file containing 12 transitions.

New gripper model available: A new, less bulky, 2-finger gripper was implemented in the model in training setup iteration 3.

new_gripper

Image normalization: Added script normalize.py, which samples 100 images from the environment and writes the mean values and standard deviations of all channels to a file.

Reset shuffle: Calling the environments step method now rearranges all the pickable objects to random positions on the table.

gif2

Record grasps: The step method of the GraspingEnv now has the optional parameter record_grasps. If set to True, it will capture a side camera image every time a grasp is made that is deemed successful by the environment. This allows for "quality control" of the grasps, without having to watch all the failed attempts. The captured images can also be useful for fine tuning grasping parameters.

grasp

Point clouds: The controller class was provided with new methods for image transformations.

  • depth_2_meters: Converts the normalized depth values returned by mujoco_py into m.
  • create_camera_data: Constructs a camera matrix, focal length and sets the camera's position and rotation based on a provided camera name and desired image width and depth.
  • world_2_pixel: Accepts a XYZ world position and returns the corresponding x-y pixel coordinates
  • pixel_2_world: Accepts x-y pixel coordinates and a depth value, returns the XYZ world position. This method can be used to construct point clouds out of the data returned by the controllers get_image_data method.

cloud

Joint plots: All methods that move joints now have an optional plot parameter. If set to True, a .png-file will be created in the local directory. It will show plots for each joint involved in the trajectory, containing the joint angles over time, as well as the target values. This can be used to determine which joints overshoot, oscillate etc. and adjust the controller gains based on that.
The tolerance used for the trajectory are plotted in red, so it can easily be determined how many steps each of the joints needs to reach a value within tolerance.

plot1

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].