How to create a smooth movement by feeding a series of the target points on YuMi

  • I have a question about how to create a smooth movement by feeding a series of the target points on YuMi. I’m trying to move the TCP based on 3D mouse input. For IRB, it was easy because I could use EGM.


    Currently, I’m sending the targets via TCP/IP communication by mostly using open_abb like code. Every PC running cycle, I send the following instruction to the robot. Params{1} - {7} is the position and the pose of the next target. I can change the frequency to send, and I tried 0.02, 0.1 and 0.2 sec (= 50Hz, 10Hz, 5Hz).
    cartesianTarget :=[[params{1},params{2},params{3}],
    [params{4},params{5},params{6},params{7}],
    initialCartesianPose.robconf,
    externalAxis];


    MoveJ cartesianTarget, v100, z0, currentTool \WObj:=currentWobj ;
    However, the movement created wasn’t what I wanted. The robot repeated small movement and stopped around every 0.2 - 0.5 sec and didn’t move smoothly (and had a lot of “50024 Corner path failure” warnings). I observed that the robot executed around 3 - 5 MoveJ intrusions and then stopped for every small movement cycle. The length between each target was around 10-20 mm in the most of the case, it was sometimes around 5mm, but still bigger than the size of zone area for fly-by point setting.


    To understand how PP works and how close I can set each target point, I also conducted the following experiment. Based on a given number, the following code created many targets and moved the robot as it drew a circle. Of course, if I feed too big number like 1000, the robot won’t move smoothly because of the corner path failure or “50124 zone converted to fine point”. When I used 600 points, the robot still moved very smoothly. 600 points mean 0.6 degree per one movement from point to point (= around 1mm in this setting, which is bigger than z0 zoning setting) and each single movement takes around 0.01sec to complete.
    FOR i FROM 1 TO (params{1}) DO
    cartesianTarget :=[[300+100*Sin(360*i/params{1}),-300+100*Cos(360*i/params{1}),250],
    [0,0,1,0],
    initialCartesianPose.robconf,
    externalAxis];
    MoveJ cartesianTarget, v100, z0, currentTool \WObj:=currentWobj ;


    ENDFOR


    To me, the conditions such as a number of points, the length between the points were much strict in the second implementation, but it did work.
    Then, here is my question; Why the first implementation didn’t make a smooth movement? How can I make a smooth movement based on it?

Advertising from our partners