Control of an IGUS drylin Delta robot

For applications in the industrial environment, it is of course not only relevant that the motion controller is a professional product, the quality of the robot is just as important. IGUS offers with its drylin series not quite cheap but high quality delta robots. We have one of these robots in our lab, let's have a look at what you can do with it.

Programming

Our movement consists of several curves (see picture). Basically we define for each curve the velocity vector, position and time, our solver then calculates the optimal curve under compliance with the boundary condition, maximum acceleration and max. velocity.

pick and place trajectory

We set the following parameters for our trajectory:

pickPoint: [-0.1, 0, -0.08] #pick position
placePoint: [0.05, 0.03, -0.12] #place position

fastSpeedLimit: 5.0  #movement speed between pick and place position
touchdownSpeed: 0.6  touchdown movement speed for pick and place operations
accelerationLimit: 15 #max. acceleration we're allowing (depending on the motors and robot)
pickElevation: 0.02 #pick operation z direction elevation
placeElevation: 0.02 #place operation z direction elevation

#here we're defining some parameters to simplify the trajectories
abovePickPoint: = set_z(.pickPoint , z(.pickPoint) + .pickElevation) 
abovePlacePoint: = set_z(.placePoint , z(.placePoint) + .placeElevation)

#here we're defining some drift limits for the trajectories 
jerk_limit: 3 Ableitung der Trajektorie
drift_limit_fast: max. Abweichung von der Idealkurve
drift_limit_touchdown: 

Now we only have to implement the motion segments (here is an excerpt)

Defined for each curve are the parameters

p: target position,

(vx, vy, vz): Velocity

T: Time of the total movement

If certain values are not specified, they are maximized by the internal solver.

        preparePick:
          Type: MOVEMENT
          Parameters:
            p: ..abovePickPoint
            vz: = - ..touchdownSpeed
            speed_limit: = ..fastSpeedLimit
            max_dynamic_error: 0.02
            drift_limit: ..drift_limit_fast
            "*": ..
        preparePlace:
          Type: MOVEMENT
          Parameters:
            p: ..abovePlacePoint
            vz: = - ..touchdownSpeed
            speed_limit: = ..fastSpeedLimit
            max_dynamic_error: 0.02
            drift_limit: ..drift_limit_fast
            "*": ..
        pickTouchdown:
          Type: MOVEMENT
          Parameters:            
            vz: = - ..touchdownSpeed
            speed_limit: = ..touchdownSpeed * 1.1
            pz: = - ..pickElevation
            T: = ..pickElevation / ..touchdownSpeed
            is_relative: true
            drift_limit: ..drift_limit_touchdown
            "*": ..
        pickMoveUp:
          Type: MOVEMENT
          Parameters:            
            vz: ..touchdownSpeed
            pz: ..pickElevation
            is_relative: true
            speed_limit: = ..touchdownSpeed * 1.1
            drift_limit: ..drift_limit_touchdown
            "*": ..
        placeTouchdown:
          Type: MOVEMENT
          Parameters:            
            vz: = - ..touchdownSpeed
            pz: = - ..placeElevation
            speed_limit: = ..touchdownSpeed * 1.1
            # in our case we want a constant speed, hence we're 
            # setting T and not let optmize it
            T: = ..placeElevation / ..touchdownSpeed
            is_relative: true
            drift_limit: ..drift_limit_touchdown
            "*": ..
        placeMoveUp:
          Type: MOVEMENT
          Parameters:            
            vz: ..touchdownSpeed
            pz: ..placeElevation
            speed_limit: = ..touchdownSpeed * 1.1
            is_relative: true
            drift_limit: ..drift_limit_touchdown
            "*": ..

All prepared for first tests, we start with the following speeds:

fastSpeedLimit: 0.1 #movement speed between pick and place position

touchdownSpeed: 0.5 touchdown movement speed for pick and place operations

This leads to about 40 pick and place per minute.

For our tests we’re using steppers with encoders to identify lost steps or other hardware related issues. We activate this feature by adding a node in our Actiongraph script, we set the max. allowed error to 1 mm.

m:
    Type: DeltaRobotEncoderFailsafeMonitor
    Parameters:
    robot: Hardware
    threshold: 0.001

Let’s increase speed:

fastSpeedLimit: 20 #movement speed between pick and place position

touchdownSpeed: 0.5 touchdown movement speed for pick and place operations

This leads to about 95 pick and place per minute:

MotionC++

by

Dübon Engineering

Weiter
Weiter

Do it yourself delta robot