Offline Programming
with RoboDK

Easily simulate and program industrial robot arms using an intuitive and user-friendly interface. You can click and drag objects to create your layout and program your robot.

Programming experience is not required with RoboDK software.

Learn more about RoboDK software

Offline Programming

Offline Programming (or Off-Line Programming) means programming robots outside the production environment. Offline Programming eliminates production downtime caused by shopfloor programming.

Simulation and Offline Programming allows studying multiple scenarios of a robot work cell before setting up the production cell. Mistakes commonly made in designing a work cell can be predicted in time.

Offline Programming is the best way to maximize return on investment for robot systems and it requires appropriate simulation tools. The time for the adoption of new programs can be cut from weeks to a single day, enabling the robotization of short-run production.

Robotics API

Access the RoboDK API, the most advanced API for programming robot arms.

With the RoboDK API you can simulate and program any industrial robot using your preferred programming language and development environment.

The RoboDK API is available for Python, C#/.Net, C++ and Matlab.

Learn more about the RoboDK API

Post Processors

Once your simulation produces the desired effect you can generate your robot programs offline with just 2 clicks (Offline Programming).

RoboDK includes over 100 post processors to generate programs for more than 1200 robots and 80 robot manufacturers.

Learn more about Post Processors

As an example, the following program will be generated for an ABB robot.

Robot Offline Programming result for an ABB IRC5 robot controller:

MODULE MOD_HexagonPath

PROC HexagonPath()
  ! Program generated by RoboDK for ABB IRB 1600ID-4/1.5
  ConfJ \On;
  ConfL \On;
  tl.tframe:=[-4,0,371.3],[0.92387953,0,0.38268343,0];
  MoveJ [[1010.6,-114.4,662.2],[0,0,1,0],[-1,0,-1,0],ex],sp,z1,tl;
  MoveL [[810.6,-114.4,662.2],[0,0,1,0],[-1,0,-1,0],ex],sp,z1,tl;
  MoveL [[910.6,58.7,662.2],[0,0,1,0],[0,-1,0,0],ex],sp,z1,tl;
  MoveL [[1110.6,58.7,662.2],[0,0,1,0],[0,-1,0,0],ex],sp,z1,tl;
  MoveL [[1210.6,-114.4,662.2],[0,0,1,0],[-1,0,-1,0],ex],sp,z1,tl;
  MoveL [[1110.6,-287.6,662.2],[0,0,1,0],[-1,0,-1,0],ex],sp,z1,tl;
  MoveL [[910.6,-287.6,662.2],[0,0,1,0],[-1,0,-1,0],ex],sp,z1,tl;
  MoveL [[810.6,-114.4,662.2],[0,0,1,0],[-1,0,-1,0],ex],sp,z1,tl;
  Program_Done;
  MoveL [[1010.6,-114.4,662.2],[0,0,1,0],[-1,0,-1,0],ex],sp,z1,tl;
ENDPROC
ENDMODULE

Program example using the RoboDK API

# Draw a hexagon around Target 1
from robolink import *    # RoboDK API
from robodk import *      # Math toolbox for robots
 
# Start the RoboDK API:
RDK = Robolink()
 
# Retrieve the robot
robot = RDK.Item('', ITEM_TYPE_ROBOT)
 
# Get the target reference:
target = RDK.Item('Target 1')
target_pose = target.Pose()
xyz_ref = target_pose.Pos()
 
# Move the robot to the reference target:
robot.MoveJ(target)
 
# Draw a hexagon around the reference target:
for i in range(7):
    ang = i*2*pi/6 # Angle = 0,60,120,...,360
    R = 200        # Radius
    
    # Calculate the new position:
    x = xyz_ref[0] + R*cos(ang) # new X coordinate
    y = xyz_ref[1] + R*sin(ang) # new Y coordinate
    z = xyz_ref[2]              # new Z coordinate
    target_pose.setPos([x,y,z])
    
    # Move to the new target:
    robot.MoveL(target_pose)
 
# Trigger a program call at the end of the movement
robot.RunInstruction('Program_Done')
 
# Move back to the reference target:
robot.MoveL(target)