Robot simulation with RoboDK
Introduction to RoboDK
RoboDK is a software used to simulate and program a wide variety of industrial robots. It's a commercial software but it has a free version1) you can use at home as well as an education version, which is the one installed at school. We will use this application as a means of introducing robotics in our course.
RoboDK is used to simulate a robot station, that is a robot and its working environment. This allows for testing multiple scenarios before deploying the robot in production and avoid possible mistakes. A large library of robots from different manufacturers is available and, besides simulating them, RoboDK can generate software you can run on the actual robot, thereby acting as a vendor-independent off-line programming tool.
Further significant features are:
- GUI based, no programming skills needed
- web application available
At the moment this software constitutes the best fit for our school as we can get started with robotics before having an actual robot in our labs. Nonetheless, offline programming will still be useful when we buy one since it allows its student to develop its own program individually.
Lesson 1: Adding a robot and its tool
Let's launch RoboDK and start our first project. The user interface is quite simple: there are a menu and a toolbar on top, a tree view of the robot station on the left and, when opened, a window on the right to manage object properties and control the robot. The remaining area shows a 3D model of the robot and its working environment.
Every project consists of a robot station which has the following objects inside:
- the robot
- the robot tool
- a list of targets for the robot tool
- programs with joint movements and further instructions
An empty project only shows the origin of the robot station with its reference frame. A reference frame is a coordinate system that allows placing objects in a 3D space with respect to it. It appears on screen as a set of three arrows with:
- the x axis in red
- the y axis in green
- the z axis in blue
The axes names can be shown by ticking an option in the Display tab reached from Tools|Options in the menu.
A Reference Frame defines the location of an item with respect to another item, with a given position and orientation. An item can be an object, a robot or another reference frame. It must be noted that when a reference frame is moved every nested object moves along with it.
The relationship of one reference frame with respect to another one is also known as a pose, a set of position and orientation data which by default is represented by:
- the X, Y, Z coordinates
- the Euler angle orientation in the X→Y→Z format, which is the order of the rotations around the axes of the static reference2)
Adding a robot
Robots can be added to the project with the Open robot library button in the toolbar (it is the world shaped one). By clicking it, a page in the browser is opened to show all the available robots. It is possible to narrow down the list by using filters based on brand, payload, reach and more. Let's say we want to add a Yaskawa HC10 cobot; first we select the Yaskawa brand, the we reduce the payload range and finally, we scroll down to click Open when we find the exact model we are looking for. The robot is automatically downloaded from the page, added to the project and displayed in the 3D work space. On the left we can see that two new objects are added to the robot station:
- a reference frame for the robot base
- the robot itself
A double click on these object opens a side window on the right. The base frame details window shows its coordinates with respect to the station reference frame. A different reference frame and alternate coordinates formats are available by clicking the respective drop-down buttons. It is also possible to move the base frame by entering new values in the coordinates fields. The robot panel window has similar reference frame information as well as controls for joint axes movements.
Now in the main window two new sets of arrows are shown: the robot base and the robot flange reference frames.
Before adding a tool to the robot let's see how navigation in a 3D space works. The main actions are:
- select, clicking the left button of the mouse
- pan, clicking the scroll wheel button and moving the mouse
- rotate, clicking the right button and moving the mouse
- zoom, using the mouse wheel
Two buttons in the toolbar can be used to set default views:
- fit all (the one with four arrows)
- default views (the one with a blue cube and drop.down list)
Adding a tool
A robot is useless without an end-effector. Tools ca be added from the robot library just like we've done before, just choose tool in the type filter of the library. For our example project let's look for the Generic Dispenser tool and click open. The tool is automatically added to the flange of the robot and a new reference frame is displayed on its end. This new frame is called TCP (tool center point) and is positioned and oriented according to the tool task. This is the place where the tool action is performed and is the only frame we need to move and control to get the robot job done. On the robot panel window we can see how its pose is defined with respect to the robot flange or some other reference frame.
Lesson 2: programming the robot
In a typical robot application you define targets to be reached then write a program which consists of:
- joint movements to reach these targets
- actions to be performed
Targets are defined by manually moving the robot to the desired position then by clicking the add new target for the selected robot button in the toolbar. It is good practice to define these targets with respect to some reference frame different from the robot base frame. Such additional frame can be created by clicking the add reference frame button in the toolbar and setting its position according to the robot working environment. It could be a corner of a table where objects are picked, an edge of an object to be painted, and so on.
Moving the robot
In a moment we will see how to move the robot but first it should be noted that every robot imported from the library has its own home position. When first imported in the project the robot is drawn in default position, but you can always move it back there:
- by right-clicking on the robot name in the station tree and choosing Move home
- by clicking the Home button in the Joint Axis jog panel in the robot panel window
There are different methods to move the robot:
- using the joint axis jog section of the robot panel, where every axis can be moved independently
- selecting one translation/rotation axis and using the spinning wheel just above3)
- typing-in the coordinates in the cartesian jog section (you will want to use the tool frame with respect to reference frame fields)
- holding down the Alt button on the keyboard4) and than, for any reference frame, dragging the arrows, to move along a particular axis or dragging any of the three colored squares, to move in a particular plane
The last method is by far the most convenient, especially when using the TCP reference frame.
Adding an object
Now that we know how to move the robot, let's add a new reference frame, an object and some targets.
To add a reference frame just click the Add a Reference Frame button in the toolbar (three arrows and a plus sign). Now rename it to object frame by right-clicking it in the station tree and choosing Rename. Next change its position by double-clicking its name in the station tree and entering
800 in the X coordinate and
0 in the Y coordinate5).
To add a new object click the Open robot library button then choose Box in the Type section to filter results. Now open the first item, Box 12x7in (Closed). The new object should be nested in the new reference frame. If it's not, drag-and-drop it in the object frame from the station tree6).
We will now add some targets so that the robot will move to the corner in the top of the box then travels along the four edges and finally comes back to its home position. This kind of path could be used to seal the top of an object by using a glue dispensing tool.
Let's add the first target. First move the robot to its home position than click the Add new target for the selected robot button in the toolbar (the one with a target and a plus sign). Rename the target as home from the station tree.
We now need four more targets at each corner of the box. Getting their exact position by manually moving the robot could be tricky; that is why we will use the Teach target(s) on Surface feature from the Program menu. When selecting it a window opens on the left side showing some options. We will select the Automatically extract surface corners button so that when moving the mouse above the top surface of the box the robot follows it while keeping its TCP perpendicular to the surface. Now move the TCP to the four corners and click the left-button to add targets. While doing so panning, rotating and zooming help picking the correct position. If necessary, wrong targets can be deleted by right clicking their names and selecting Delete while choosing Options from the same menu helps fine tuning the target position.
Movements and programs
Once targets are added you can click on them, one after the other, to move the robot to their respective position. This is indeed useful to preview robot movements. Now it is time to precisely define the robot behavior by creating a program and adding instructions to specify movements and other actions to be performed. To do so click the Add Program button in the toolbar (the one with the white sheet and the plus sign). A new item is added to the station tree called Prog1; rename it to approach.
Movement instructions are added by selecting a target then clicking one of the three move buttons in the toolbar (the ones with yellow arrows):
- Move Joint results in a curved movement between two joints
- Move Linear results in a straight movement between two joints
- Move Circular results in a circular movement starting from a target and going through two extra ones
Joint movements are the most used but for certain applications, such as moving along the edges of a box, linear movements are required. That said, select the first target on the box and click the Move Joint button. You will see three items added to the approach program: one sets a reference frame, one sets the robot tool and one is the move instruction to the selected target (starting from home). The program we have just created moves the TCP from the home target to the box; we will write two extra ones, one for the box movements and one to get back home, and call all of them from a main program.
Let's add a new program and call it box. One at a time, select the three remaining targets on the box and then the first one again. Add Move Linear instructions to go through each one of them. Once done, execute the program by double-clicking box in the station tree: you should see the TCP moving straight along the defined path, which is shown as a yellow line. Let's add one last program and call it retract. Select the home target and add a Move Joint instruction to return to it.
There's one thing left: creating a main program that calls the three sub-programs. The easiest way to accomplish this is to select the three sub-programs - clicking their names while holding down the CTRL key - then by right-clicking and and selecting Make Main program. A new item is added to the station tree called MainProgram with nested calls to the sub-programs. It is possible to re-arrange the program calls or add more instructions between the calls (for example you could change the robot speed by using the Set Speed instruction). Our simulation is now complete: let's test the program by double-clicking MainProgram. You will see the robot move while executing its program. When the simulation is running, a task bar with a slider and some control buttons is shown in the lower part of the screen. You can use it to pause or restart the simulation and keep track of the time taken to complete it.