ROS-Industrial Universal Robot meta-package. See the ROS wiki page for compatibility information and other more information.
Installation
There are two different ways to install the packages in this repository. The following sections detail installing the packages using the binary distribution and building them from source in a Catkin workspace.
Using apt (Ubuntu, Debian)
On supported Linux distributions (Ubuntu, up to 16.04 (Xenial), i386 and amd64) and ROS versions:
sudo apt-get install ros-$ROS_DISTRO-universal-robot
replace $ROS_DISTRO with hydro, indigo or kinetic, depending on which ROS version you have installed.
Building from Source
There are releases available for ROS Hydro, Indigo and Kinetic. However, for the latest features and developments you might want to build the packages from source.
NOTE: please prefer using the binary release (see previous section) over building from source where possible. Source installs will not be automatically updated by new package releases and require more work to setup.
The following instructions assume that a Catkin workspace has been created at $HOME/catkin_ws and that the source space is at $HOME/catkin_ws/src. Update paths appropriately if they are different on the build machine.
In all other cases the packages will have to be build from sources in a Catkin workspace:
cd $HOME/catkin_ws/src
# retrieve the sources (replace '$ROS_DISTRO' with the ROS version you are using)
git clone -b $ROS_DISTRO-devel https://github.com/ros-industrial/universal_robot.git
cd $HOME/catkin_ws
# checking dependencies (again: replace '$ROS_DISTRO' with the ROS version you are using)
rosdep update
rosdep install --rosdistro $ROS_DISTRO --ignore-src --from-paths src
# building
catkin_make
# activate this workspace
source $HOME/catkin_ws/devel/setup.bash
Usage
With real Hardware
There are launch files available to bringup a real robot - either UR5 or UR10.
In the following the commands for the UR5 are given. For the UR10, simply replace the prefix accordingly.
Don't forget to source the correct setup shell files and use a new terminal for each command!
To bring up the real robot, run:
roslaunch ur_bringup ur5_bringup.launch robot_ip:=IP_OF_THE_ROBOT [reverse_port:=REVERSE_PORT]
CAUTION:
Remember that you should always have your hands on the big red button in case there is something in the way or anything unexpected happens.
MoveIt! with real Hardware
Additionally, you can use MoveIt! to control the robot.
There exist MoveIt! configuration packages for both robots.
For setting up the MoveIt! nodes to allow motion planning run:
roslaunch ur5_moveit_config ur5_moveit_planning_execution.launch
For starting up RViz with a configuration including the MoveIt! Motion Planning plugin run:
roslaunch ur5_moveit_config moveit_rviz.launch config:=true
NOTE:
As MoveIt! seems to have difficulties with finding plans for the UR with full joint limits [-2pi, 2pi], there is a joint_limited version using joint limits restricted to [-pi,pi]. In order to use this joint limited version, simply use the launch file arguments 'limited', i.e.:
roslaunch ur_bringup ur5_bringup.launch limited:=true robot_ip:=IP_OF_THE_ROBOT [reverse_port:=REVERSE_PORT]
roslaunch ur5_moveit_config ur5_moveit_planning_execution.launch limited:=true
roslaunch ur5_moveit_config moveit_rviz.launch config:=true
Usage with Gazebo Simulation
There are launch files available to bringup a simulated robot - either UR5 or UR10.
In the following the commands for the UR5 are given. For the UR10, simply replace the prefix accordingly.
Don't forget to source the correct setup shell files and use a new terminal for each command!
To bring up the simulated robot in Gazebo, run:
roslaunch ur_gazebo ur5.launch
MoveIt! with a simulated robot
Again, you can use MoveIt! to control the simulated robot.
For setting up the MoveIt! nodes to allow motion planning run:
roslaunch ur5_moveit_config ur5_moveit_planning_execution.launch sim:=true
For starting up RViz with a configuration including the MoveIt! Motion Planning plugin run:
roslaunch ur5_moveit_config moveit_rviz.launch config:=true
NOTE:
As MoveIt! seems to have difficulties with finding plans for the UR with full joint limits [-2pi, 2pi], there is a joint_limited version using joint limits restricted to [-pi,pi]. In order to use this joint limited version, simply use the launch file arguments 'limited', i.e.:
roslaunch ur_gazebo ur5.launch limited:=true
roslaunch ur5_moveit_config ur5_moveit_planning_execution.launch sim:=true limited:=true
roslaunch ur5_moveit_config moveit_rviz.launch config:=true
YOLO + OpenCV + Python + Realsense
The main goal for this code is to get the x,y,z coordinates of the targeted object, and in order to do so, a L515 Lidar is used. The L515 Lidar has RGB camera, depth camera and laser scan https://www.intelrealsense.com/lidar-camera-l515/ , so there are two possible methods to detect an object using this Lidar: (1) Image based detection. (2) Point cloud based detection, or the two alternatives can be fused. In this project, image based detection with YOLO v3 algorithm are used, as a result we obtain the boundary box of the targeted object. The center of this boundary box is found Xc,Yc in pixel dimension from the color frame that captured by the RGB camera, and for the third coordinate Zc, it found by getting the depth of the corresponding pixel in the depth frame which is captured by the depth camera. Since, Xc and Yc are already found in pixel's and Zc in meters, the extrinsic and intrinsic parameters is achieved using the Pyrealsense2 library provided by Realsense , and as result the xc, yc and zc coordinates in meters of the boundary box center are found relative to the sensor coordinate, in other words how far the object is located from the sensor in x, y and z direction.
How to run • In order to be able to run this code make sure that you have all the files in folder, the find_coordinates.py file is the main file that used to get the coordinates. This code will find and print out the coordinates of different objects since it Yolov3 that is used it’s trained on COCO dataset, however it can easily be modified to find just the coordinates of the targeted object, then, these coordinates is saved into a csv.file called Coord so it can be sent using ROS to another node to move the manipulator using Moveit! to pick the targeted object.
• get_mouse_coordinates.py file can be used to find the coordinates for mouse pointer.
Dependencies
• Opencv
• Numpy
• Pyrealsense2
