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
 
                        