RobotStudio event

Toolpathing of a spiral

Hello,

I would like to create a spiral toolpath shown in the attached image. I would only like the Robotic arm to move only in the XZ plane (please see lables superimposed on in the attached image). I would also like the Joint 2 of the positioner to turn concurrently in order to maintain a fixed speed along the spiral. I am hoping that I do not have to manually teach the robot and the positioner hundreds of points in order to achieve my goal.

Can someone please suggest a good way to approach this problem?

Thank you.

Best Regards,

Eric

Comments

  • Hi,
    It might be possible to do something like this.
    1. Use AutoPath to create a path with targets along the spiral. Use circlar approximation to keep the number of targets down, and specify a reference surface from the workpiece to orient the targets.
    2. Fix orientation of the targets if needed.
    3. Sync to RAPID.
    4. Modify the external axes value of each target. Either manually by rotating the positioner until the target is straight up, or by calculating the rotation from the x-y position of the target in the rotating workobject. E.g. extax.eaxc = (n * 360) + atan2(trans.x, trans.y) where n is the number of revolutions so far. (Tip: use the data editor, perhaps in conjunction with Excel!)
    Johannes Weiman
    Software Engineer
    RobotStudio Team, ABB Robotics
  • ..On the other hand it might be better to take the procedural approach, see attached example.
    Note that it uses circular movements of 180 degrees which might not be a good enough approximation of a spiral. In that case you'd have to use more points.
    Johannes Weiman
    Software Engineer
    RobotStudio Team, ABB Robotics
  • Hello JWeiman,

    Thank you for your response. Your sample program was of great help. You have given me a lot to think about.

    Best Regards,

    Eric
  • Thanks for this, it helped me make some real progress.
    In my current setup however only jointtargets will work (task has external axis and robot).
    Is there any way around this or is it possible to convert to jointargets on the fly?
  • I think it would be difficult because jointtargets don't support linear or circular movement. But I'm not sure I understand why you can't use robtargets?
    Johannes Weiman
    Software Engineer
    RobotStudio Team, ABB Robotics
  • k_schmid
    k_schmid
    edited June 2019
    Thanks for the reply. My multimive setup has external axes (a rotating one for the workobject, vertical elevators) in the tasks so robotstudio wont allow me to use robtargets?
  • multimive supposed to be multimove
    So we have 2 robots that share 2 external axes and are both drawing helix like objects in sync.
    I didn't expect it to be easy or automatic. When adding the external axis to the robtarget how good is the synchronization?
  • I can use the moveC code with the multimove setup (thats great) but running into near singularity errors.
    Maybe my axes arent right.
    Also, Robotstudio gui wont show positions of targets updated in code?
  • Sorry for the spam after looking at the setup more I am curious about the external axes setup. Looks like there are 2 axes: 8 and 9?
  • 2 more probably beginner questions:
    Is there an advantage to making the positioner a robot with tcp instead of a mechanical unit?
    The white line drawing in the gui isnt a path but something else?I switched off view> paths and it stayed around. How is it done?
    Thanks so much
  • Question. Why not attach a sensor to the external axis base plate and connect it via Input with the robot? Inside your program run a trap routine which offsets the current jt every time the signal is activated. By doing this the trigger for the offset is the signal from the external axis and is every time on the same position. 
  • We might do that. Found the tcp trace option...
  • kschmid
    kschmid
    edited June 2019
    For an actual coordianted system  I put the robot  and positioner in separate tasks framed by SyncMoveOns?
    Like
        PROC main() ! positioner
            MoveExtJ JointTargetP_5,vmax,fine;! stop
            WaitSyncTask s1,t1;
            SyncMoveOn s7,t1;
            FOR i FROM 1 TO numTurns DO
                JointTargetP_1.extax.eax_a:=JointTargetP_1.extax.eax_a + rot_cw;! - 180
                MoveExtJ JointTargetP_1\ID:=10,vrot100,z10;
                JointTargetP_1.extax.eax_a:= JointTargetP_1.extax.eax_a + rot_cw;! - 360
                MoveExtJ JointTargetP_1\ID:=20,vrot100,z10;
            ENDFOR
            SyncMoveOff s4;! \Timeout:=30;
        ENDPROC

        PROC main() ! robot
            WaitSyncTask s1,t1;
            ConfL \On;
            MoveJ Target_R2_30,v100,fine,tool0\WObj:=Workobject_1; !\ID:=0
            !MoveAbsJ JointTarget_5,vmax,fine,tool0; !\ID:=0
               SyncMoveOn s7,t1;
            FOR i FROM 1 TO numRotations DO
                MoveC Target_R2_20,Target_R2_50\ID:=10,v100,z10,tool0\WObj:=Workobject_1;! -180
                MoveC Target_R2_40,Target_R2_30\ID:=20,v100,fine,tool0\WObj:=Workobject_1; !-360           
                Target_R2_40.trans.z:=Target_R2_40.trans.z + 5;
                Target_R2_30.trans.z:=Target_R2_30.trans.z + 5;
                Target_R2_20.trans.z:=Target_R2_20.trans.z + 5;
                Target_R2_50.trans.z:=Target_R2_50.trans.z + 5;           
            ENDFOR
            SyncMoveOff s4;

        ENDPROC