Posts by lionpeloux

    Hey,


    Thank you both for your suggestions. I'm on KSS 5.6.
    As a big array does not seem appropriate in my case, I've came up with this solution :


    Code
    workingpath_1.dat, workingpath_2.dat, ..., workingpath_N.dat files with all the same data structure but different values in it
    workingpath_1.src, workingpath_2.src, ..., workingpath_N.src files that all call the same global subroutine :
    
    
    DEF workingpath_I()
      subroutine(arg1, arg2, ... argM)
    END


    main.src : the main program, where the global subroutine is defined ONCE with OUT args corresponding do the data fields in workingpath_I.dat (arg1, arg2, ... argM)
    in main.src I can then call my process with the dataset I want by invoking workingpath_I(), I in [1 ... N].


    Note that in my case workingpath_.dat and workingpath_.src are auto generated by an external program.

    Hey,


    ... I should do that in T1, that is what you suggest ?


    Indeed, I'm doing a TouchUp to a dummy LIN instruction (to have instant BCO on the position I want) and immediately after save $POS_ACT.
    This is the only "trick" I have came up with to do this "semi-auto" procedure.
    I'm also focusing the operator attention on this instruction by putting all the extra code in some folds.


    So I think my procedure is structure like what you used to do in the past :icon_wink:


    Thanks,
    Lionel

    Hello,


    I have prepared several .dat files (workingpath_1.dat, workingpath_2.dat, ..., workingpath_N.dat) with the exact same structure.


    Lets say for simplicity that each dat file contains one target frame :

    Code
    DEFDAT WORKINGPATH_I
      FRAME targetFrame = {X x, Y y, Z z, A a, B b, C c}
    ENDAT


    I would like to load the data from a main workingpath.src file and use the targetFrame variable :


    1) given index I in [1,N], load workingpath_I.dat in workingpath.src (or workingpath.dat)
    2) do PTP targetFrame
    3) END


    I can't find a way to do that. Do you have any suggestion on how to proceed ?


    Many thanks,
    Lionel

    Ok thanks.


    I've already managed to launch my code through a menu item with the help of UserTech (kfd file).


    However, what I'm trying to achieve is a semi-auto calibration method for a turntable (see : https://www.robot-forum.com/ro…hing/msg121789/#msg121789).


    I have a predefined set of targets : a spike is fixed on my turntable and the table is rotated N times until a fullturn is achieved.
    At each step, I'm approaching the spike automatically (I know the theoretical position from the spike position and the rotation angle).
    Then, in T2 mode, I do a touchUp of the real fixed spike position and store the position in a .dat
    Then I rotate the table to put the spike in a new position and automatically approach this new position.
    Then, in T2 mode, I do a touchUp of the real fixed spike position and store the position in a .dat
    I repeat the process until a full turn is achieved ...


    With the real position in the .dat I can compute the bestfit circle through least square method and have its center and rotation axis.


    My problem is when I jog the arm to touchup the real spike position I loose the BCO.
    At the moment I've inserted a fake LIN instruction in my program at the place where I need to jog the robot and stop at this line (#STEP execution)
    When my arm correctly touches the spike, I hit the "TouchUp" button on the LIN instruction.
    Thus, I can run the LIN instruction to achieve BCO and continue the program execution (going to the next position ...)


    I would like to have something more user friendly and hide this trick to restore the BCO each time the arm is jogged :
    1) warn the user that the robot will now approach the next spike position
    2) auto rotate the table and move the arm near the next spike position
    3) ask the user to jog the TCP to properly touchup the real spike position
    4) ask the user to validate the touchup position and store the result in .dat
    5) repeat 1-4 until full turn is achieved


    Any suggestions to achieve this would be greatly appreciate !
    Many thanks,
    Lionel

    Hello,


    I have a KR5002-MT, KRC2, KSS 5.6.


    I would like to make a custom calibration method, something like service > measure > tool > XYZ - 4Points but for more points to increase accuracy. Lets say I want to make a XYZ - 8Points method.


    I have already written the KRL code. But I don't understand how I can expose my code step by step like the XYZ - 4Points method through a set of dialog boxes and forms.


    I've already dig into the UserTech package but I don't think I can achieve what I want with this package.


    Can you please point me to useful ressources / plugins / TP that can help me do that ?


    Thanks,
    Lionel

    Thank you both for your advice,


    I was already sticking to a unique TCP orientation but its good to have a confirmation that this is the right thing to do.
    To answer to my own question (how to switch from a programmed motion to manual jogging in the same program in order to touchup my spike in T1 mode) I simply place a dummy LIN move after a HALT. I stop on this line (step by step execution, then jog, then store the new position by cling on "save pos", then continue to the next point and the actual position is saved in PTS[i] :



    panic mode : I'm doing this because in the kuka procedure you need a built-in spike on your table so you know precisely $ET2_TPINFL. This is not my case as it's a home made table for very heavy loads. Moreover I will touch 10/20 times my spike to reduce the error. I will also do that at two levels (z=0.5m and Z = 2.0m).

    Hi there,


    This is my first topic. I've found many valuable solutions on this forum by the past. But no clues for this one :


    I'm working with a KR500-2MT / KRC2 / KSS5.6 and a home made turntable (for stone milling).
    I need to improve the calibration of the turn table, that is to find its rotation axis regarding $world.


    For several reasons this is the method I want to use :


    1) place a fixed spike on the table. The spike head describes a circle around the turn table axis when the table turns.
    2) record the position of the head of the spike by touching it (manual jog) with a properly calibrated spike mounted on my robot arm ($POS_ACT)
    3) do that for several angles along a full turn (more points => greater accuracy)
    4) fit the best circle through the measured points (least square method)
    5) from the circle, deduce the turn table center and axis


    My concern is that I need to touche and record a good bunch of points to increase the accuracy (10/20). I know how to get "almost" from one position to the next one (it is just a matter of rotation in the table basis). I have already written a program so that the robot arm follows the spike from position to position.


    My question is how can I pause my program at each step, then manually jog the robot so the two spikes touch each others, then save the teach position by reading $POS_ACT, then return to the automatic execution of the program that will move table and robot to the (almost) next position, ... ??


    Thanks,
    Lionel


Advertising from our partners