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.
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.
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:
The UR5 is equipped with a Mini40 force/torque sensor
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).
Besides the currently installed version of ROS, the following packages should be installed using sudo apt-get install ros-fuerte-<package name>
- universal-robot (Universal robot drivers) - Provides drivers and a bringup to test the robot. Do not run the driver/test_move.py without changing the joint values. It will make the robot will smash into the wall with the standard values. (Setup the universal-robot package)
- arm_navigation (Arm navigation documentation) - For kinematics, planning and simulation. (Setup the arm_navigation package)
- moveit (New arm navigation stack) - Will replace the arm_navigation stack in future releases. (Setup MoveIt)
- industrial (Generic industrial robots package) - Not really used at the moment. Maybe useful in Groove.
To use the Force/torque sensor, the follwing package should be installed as well
- netft (Force/torque Sensor) - Interfaces the netft driver to the Mini40 Force/torque sensor using the Net F/T protocol. (Setup netFT )
Common errors and workarounds
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.