UR5

From Rsewiki

The Universal Robot in 326/005 can be controlled in several different ways. The aim of this page is to collect and present the most relevant data regarding the robot arm.

General information

For remote access to the robot, i.e. from ROS or via a Python scrict, use the host name rt29.

Starting the robot

To power on the robot, press the green button on the control box.

After the controller computer has booted, the screen will report that the robot has changed state and needs to be initialized. To do this, press the button in the noticifation box on the screen. On the new screen, press the top Auto button until the joints reports Ready. Then hold down the Auto button until all joints report ok. Note that this will make the robot joints move, if the robot is about to collide with itself, release the auto button and move the apropriate joint(s) to avoid a collision. When all joints are 'OK', press the Ok button in the lower right corner.

To move the robot into a desired position, press either of the top two buttons, and select the Move-tap. Then move the robot by using the arrows or by holding down the Teach button and move the robot by hand.

Denavit-Hartenberg parameters

All values used for inertia and kinematics calculation can be found in the ROS Model data file.

The most important DH parameters are listed here for reference:

Denavit-Hartenberg parameters
Joint Type a α d θ Offset
1 Revolute 0.00000 π/2 0.089159 q1 0.00
2 Revolute -0.42500 0.00 0.00000 q2 -π/2
3 Revolute -0.39225 0.00 0.00000 q3 0.00
4 Revolute 0.00000 π/2 0.10915 q4 -π/2
5 Revolute 0.00000 -π/2 0.09465 q5 0.00
6 Revolute 0.00000 0.00 0.0823 q6 0.00

Force/torque sensor

The UR5 is equipped with a Mini40 force/torque sensor

Gripper information

The parallel gripper can be controlled via a socket connection to rt13 on port 31101.

To launch the server on the computer, you need to be logged in as root. The currently most up-to-date server program is /shome/ex02/mobotware-3.22b/mrc/trunk/tools/dxl_ros_server


It supports the following functions:

setpos x: Sets the servo to a specific position

setdist x: Set the distance between the gripper fingers to x mm, max is approx 120 mm

getpos: Returns the servo position

stop: Closes the connection between the client and the server. Note that if this is not called, the server needs to be restarted before another connection can be made.


The servo angle for a given distance can be found with the expression math.asin((dist+2.28)/120.0) * 180.0/math.pi. Note that for very small values, this is not correct.

The opening distance, for an angle a, can be found as 120*sin(a)-2.28

Also, for more information, the gripper was designed by "Eugene Stassen", and his thesis "Analysis and Design of Robot Grippers." is avaliable on dtu findit.

Using the robot with ROS

Setting up ROS

The following information concerns the Fuerte version of ROS, which should be installed on all the desktop computers in the lab. To get it to work properly, you might have to edit ~/.bashrc to use the correct version of ROS. The easiest way to do this is to copy the last 4-5 lines, starting with if [ -f /opt/ros... and paste it just below, and then change the version name (i.e. from electric to fuerte).

Required packages

Besides the currently installed version of ROS, the following packages should be installed using sudo apt-get install ros-fuerte-<package name>

To use the Force/torque sensor, the follwing package should be installed as well

Common errors and workarounds

Network name unavailable

The assigned network name is done using a Windows name server. Linux have some difficulties renewing this host name, which might lead to the name server forgetting the network mapping. To resolve the problem, just restart the computer and boot into Windows. The reboot into Linux.

Using the robot with MRC

Using the robot with Python

The python program robot_server.py is found in /vhome/ttan/ur5 Copy the file to your own home folder to edit it as necessary.


The program opens a socket on port 31001, and listens for commands. It accepts the following commands

  • status: shows the status of each joint and the pose of the tool or arm. (3 can also be used as shortcout to status)
  • setmode: Sets the reference for the pose to either the end of the arm (setmode arm) or the gripper tool center point (setmode tool).

The rotation mode can be changed by setmode rpy, setmode quat, setmode axis or setmode matrix for roll-pitch-yaw, quaternion, axis-angle or rotation matrix mode, respectively. The program is per default runnig setmode tool rpy

  • movel ([x, y, z, r, p, y], a, v, t, wp): Moves the gripper to the given pose with acceleration a, velocity v in time t, and signal when waypoint wp has been reached. The last four values should not be used in normal operation.
  • speedl ([x, y, z, r, p, y], a, t, wp): Makes the arm move with the given velocities with acceleration a in time t, and signal when waypoint wp has been reached. Always remember to give a value for the time, otherwise the robot will keep moving until it hits something or itself.
  • stopl: Stops the arm from moving in a speedl movement.
  • quit: Closes the connection between the client and the robot_server.py program. The connection between robot_server.py and the arm is maintained.