RobotStudio event

Optimal workobject placement

Options

Hello,

Let us imagine that my task is to quickly move from one robtarget to another. These robtargets are fixed with respect to a workobject. How can I choose the best placement for the workobject with respect to my robot, so that the motion between the two robtargets is the fastest possible?

Ilian

Comments

  • j_proulx
    Options

    Hello Ilian,

    The workobject placement has nothing to do with the speed of the robot. The workobject is a coordinate frame that your positions are programmed to. The speed is determined by your load, programmed TCP speed, zone size, movement type joint or linear, axis reorientation and distance between the points. Note that a faster tcp speed does not always produce faster movements. The closer that points are, using high speeds may overlap position zones and cause fine point positioning.

    Br

    Jim Proulx

  • Ilian
    Options

    Hello Jim,

    Thanks for the prompt response. Unfortunately, I am afraid that you did not understand my question... Robot's performance is not uniform within its workspace. Its TCP speed is limited by the speed (and other limits) of each motor (i.e., axis). For example, if the robot needs to follow a linear segment that passes close to a singularity (i.e., close to the axis of joint 1), the maximum possible TCP speed will be much smaller than if the segment is far from singularities.

    I hope this explanation is better.

    Ilian

  • Ilian
    Options

    Hello Again,

    To those who do not believe me, here are three videos showing a robot (an IRB 1600) moving between two robtargets fixed with respect to a workobject. By placing the workobject at different locations with respect to the robot, I get process times of 1.1 sec, 1.3 sec, and 2.1 sec, respectively. In all cases, I use a linear motion with ConfL Off  and maximum velocity (vmax).

    http://www.gpa.etsmtl.ca/cours/gpa546/Videos/M1p1.wmv

    http://www.gpa.etsmtl.ca/cours/gpa546/Videos/M1p3.wmv

    http://www.gpa.etsmtl.ca/cours/gpa546/Videos/M2p1.wmv

    Ilian

    P.S. By the way, if I use joint mode (MoveJ), even if I don't change the workobject, but simply change the start and/or end configurations (confdata), I obtain substantial differences in the processing time. This, of course, is of no surprise but I wonder why isn't there a feature in RobotStudio that assigns these start and end configurations in a way that the motion is the fastest one. I tried with AutoConfiguration, but it does not give me the fastest combination.

    Ilian2008-3-16 4:4:12
  • msalminen
    Options

    hi,

    I normally create program which change e.g wobj position (or some other interesting variables) and let robotstudio simulate possible range over variables during night.

    In the morning I use e.g. exel to analyse the results. Following picture example shows the cycle time relative to position of wobj when changing x and y positions.

    this way it is easy to see the cycle time valley and where you should place you wobj.

    Regards, Mika

     

    image

  • Ilian
    Options

    Hello Mika,

    Thanks for your accurate response. This is exactly what I was thinking of doing but I couldn't believe that RobotStudio does not offer that kind of functionality.

    I am perplexed that most users purchase robots to speed up tasks (think of the FlexPicker) but then underuse them, which is probably the reason why ABB does not offer some kind of automatic optimal task placement. I agree that, in general, this optimization problem is quite complex, but in some cases (e.g., finding the optimal height of a FlexPicker with respect to a conveyor), it is quite simple. The problem is definitely simpler than the MultiMove functionality, for example.

    I start to think that industrial robot manufacturers market 6-axes articulated robots as if these are homogeneous systems such as a five-axes machine tool (having the same maximum TCP linear velocity and repeatability throughout the whole workspace).

    Ilian

  • MaWi81
    Options


    [QUOTE=msalminen]I normally create program which change e.g wobj position (or some other interesting variables) and let robotstudio simulate possible range over variables during night.[/QUOTE]
    Hi Mika!

    I'm trying to change work-objects (their positions) at runtime, too. It seems to me that you have an answer how I could do this automatically or how did you carry out your test series?

    Background: We have varying kinds of workobjects whose size is measured only a few seconds before they have to be transported. Therefore it is not possible to change the program's code and restart the application before targeting the next object. The objects should be variable.

    Is there a possibility to solve this?

    Marcel
    MaWi812008-4-17 16:19:59
  • msalminen
    Options

    Hi,

    following sample scan through some region of xy plane and set workobject position for simulation. wobjConveyor have constant difference(dx,dy) relative to the wobjRack. The robot movements, etc. are done in PathMain subroutine (not included here).

    The results (wobj position and cycletime) are written to text file.

    Hope this code gives you some light. Ask if you don't get it.

      PROC InspPos()
        ! Calculate initial wobj difference
        dx:=1795-1710;
        dy:=870+1090;
        !
        Open "HOME:"File:="InspPos.txt",fileWrite;
        strFile:="count x y cycletime";
        Write file,strFile;
        count:=1;
        countk:=1;
        miny:=1300;
        !
        ! Loop x
        FOR i FROM 1 TO 15 DO
            IF i=1 maxy:=2550;
            IF i=2 maxy:=2500;
            IF i=3 maxy:=2500;
            IF i=4 maxy:=2450;
            IF i=5 maxy:=2450;
            IF i=6 maxy:=2400;
            IF i=7 maxy:=2350;
            IF i=8 maxy:=2300;
            IF i=9 maxy:=2250;
            IF i=10 maxy:=2200;
            IF i=11 maxy:=2150;
            IF i=12 maxy:=2100;
            IF i=13 maxy:=2050;
            IF i=14 maxy:=2000;
            IF i=15 maxy:=1950;
      
          wobjRack.uframe.trans.x:=1350+i*50;
          wobjRack.uframe.trans.y:=maxy;
          wobjConveyor.uframe.trans.x:=wobjRack.uframe.trans.x+dx;
          wobjConveyor.uframe.trans.y:=wobjRack.uframe.trans.y-d y;
          ! Loop y
          WHILE wobjRack.uframe.trans.y>=1300 DO
            PathMain;
            ! strFile:="count x y cycletime";
            strFile:=NumToStr(count,0);
            strFile:=strFile+" "+NumToStr(wobjRack.uframe.trans.x,0);
            strFile:=strFile+" "+NumToStr(wobjRack.uframe.trans.y,0);
            strFile:=strFile+" "+ValToStr(nCycleTime);
            Write file,strFile;
            TPWrite strFile;
            wobjRack.uframe.trans.y:=wobjRack.uframe.trans.y-50;
            count:=count+1;
          ENDWHILE
         ENDFOR
        Close file;
      ENDPROC

    Mika

  • MaWi81
    Options
    Huh, didn't expect this would be so easy image
    Thanks!