Smooth toolpathing

  • Hi Guys,


    Got a question for your more than capable minds :face_with_tongue:


    So I am the lead programmer for Offline Programming and Our Water Jet systems (I dont have alot of experience in robotics so im as surprised as you are).


    The issue I am having is the ABB's we are using (A master and slave system that relies on case files to call the correct jobs) seems to hate the transition from linear to curve.


    Everytime there is the transition, the robot arm itself shakes alittle and due to the nature of water jet cutting, that shake can be clearly seem on our cut lines.

    I've managed to smooth them out as best I could by pulling some points out - I figured distance was a factor that could be contributing to this issue but the issue has remained constant over the last handful of jobs we have trialed on this cell.


    Originally I had the speed settings for to "100, 100, 50, 50" and slowed it down to "60, 60, 50, 50" and it improved it.


    Originally, I was told to have the linear speed settings at "150, 150, 50, 50" and the curve speed was "100, 100, 50, 50" but after arguing the point I managed to convince them to allow me to slow the robots down. So, what I ended up doing was using the one universal speed setting across all movements which is: "60, 60, 50, 50"


    Another thing I have noticed is that even though im specifying my zones are Z0 or Z1 the robots are briefly stopping at these points and moving on, which I assumed only happened with "fine" zones which I assumed acted the same as the "Motoman Pos level = 0" function.


    I apologise if I have confused anyone with my explanation.


    Thank you all for any and all help :smiling_face:

  • What robot modell are you using? Who made the system?


    There could be a number of things causing this. I am guessing you are using the industry standard with some hanging robots, probably 1600/2400/2600. If that is the case then you should be able to go way faster then what you are right now. I normally cut with 400-600mm/s in waterjet applications.


    Its been like 20 years since i programmed motoman robots but i seem to remember them handling zones way different then ABB. I guess your cutting something other then carpets since your are using such small zones. There is a behavior in the robot when using such small zones that will cause the robot to slow down in each transition from L to C and vice versa. This will happen if you are using small zones and there is some kind of reorientation in the movement. You can get around this by making your own zonedata and increase the oriantation zone.


    Code
    CONST zonedata z0:=[FALSE,0.3,0.3,0.3,0.03,0.3,0.03];
    CONST zonedata z1:=[FALSE,1,1,1,0.1,1,0.1];
    
    CONST zonedata zone0:=[FALSE,0.3,20,0.3,0.03,0.3,0.03];
    CONST zonedata zone1:=[FALSE,1,20,1,0.1,1,0.1];


    I assume you know this but i am going to say it anyway just in case. The first two entrys in your speed data are linear speed and orientation speed for the robot the second two are for external axis. The orientation only applies when you re orientate the tool and the value is degrees per second. Now if you are using the small robots 16/24/26 then you should not have to go below 120°/s. If you need to go lower then that the problem is usually something else in the system.

    There are a lot of things you can change in the system to go faster with perfect quality. Some things are complicated and some are hard. I would recommend trying a lower acceleration and see if you can get the speed up.


    Code
    ! On
    PathAccLim TRUE\AccMax:=2,TRUE\DecelMax:=2;
    
    !Off
    PathAccLim FALSE,FALSE;

    You can play around with accelerations, valied values are 0.1 to 20 and the value is meter/second².

    You can take a look at a software from ABB called TuneMaster it is free and can be downloaded from ABB's web page. It can be used to tune foundations stiffness and resonance depending on robot modell and robotware version. This tool will usually help the 1600 and 2600 a lot.


  • Hi Gilldur!


    The robots I am using are ABB S4CPLUS M2000 (on the metal tag on the cabinet)


    No, the two robots aren't hanging. They both just sit parallel to the working table. we have one Robot a Motoman that is hanging inverted but that is for milling purposes. I was aiming for around those speed settings you are currently using but due to this problem I've been having I am hesitant to increase the speed to that level.


    From my (very basic) understanding, Motoman uses position levels whereas ABB uses zones. So a motoman position level = 0 should act the same as an ABB fine zone? They both force the robot to go to those coordinates, brief stop then continue?


    Is that section of Code what you would use to widen the orientation zones within the zonedata? I apologise for the stupid questions, a lot of robotics is still a mystery to me as 9 out of 10 times im forced to learn from my mistakes instead of my superiors (I don't have a whole lot of support).


    Yeah, I was sort of aware of that but not to the degree you explain. I am fortunate enough to have a Maintenance supervisor who actually worked for ABB and has a fair amount of experience (although he admits alot of it is forgotten by now) and he told me to only edit the first two values in speeddata and ignore the last two (the one you explained controls the ext-axis, the two robots aren't on any rails so they can't move on it).


    I'll have to have a look into Robotware and Tunemaster etc for the ABB's. The only software regarding Robotics im used to is an Offline Programming software called Robotmaster V7.


    Thank you so much for your help, Gilldur!

  • Hi Gilldur,


    I just realised I gave you strictly the Robot model of the Cabinet and not the robot themselves.


    Both of our water jet robots read this:


    Type: IRB4400 M2000

    Robotversion: IRB4400L/10 Type A


    I hope that was the info you were asking for mate


    Apologies, bud.

  • Hello again.


    The S4c+ systems are nice and bullet proof but they are getting quite old. The problem with that is that most of the tuning possibilities that exist in a modern controller where not implemented yet. Pretty sure tune master won't work for that old controller.


    The 4400/L10 is a good robot and normally has some really good path performance. I am actually getting nostalgic thinking about tuning those old systems and robots. Now most likely you are having some issues with friction or axis resonance. I am thinking that you cant use tune master to fix any of that so instead i have something you can try.


    Copy paste this code into the start of your cutting routine.

    Code
            WaitTime\InPos,0.01;
            PathResol 70;
            AccSet 50,50;
            TuneServo ROB_ID,1,60\Type:=TUNE_DH;

    WaitTime\inpos will force the robot to be in compleate stop for 0.01 seconds. This is important, the robot will not like it if you tune servo parameters when its moving. (it wont break, but it will hate you).


    PathResol will change the path resolution time to 70% of its original value, this will increase the path resolution. If this value is to low you might se an error saying something along the lines of "corner path failure", you can ignore that error as long as the path is good.


    AccSet lowers acceleration and acceleration ramp. Instead of using PathAccLim it is better to use AccSet on a 4400 robot since they respond really well to the increased ramp. Values are %.


    Tuneservo command is used to change servo parameters, this is ok to do and it is well documented in the manual. "DH" tuning is the robots finite impulse respons filter, lowering the value will increase the amount of filtering, This should smooth out your path a lot. If the value is to low you will see the robot taking smal shortcuts in zones.


    This tuning is 100% safe and won't damage anything.


    As for the zones, this is data declarations.


    Code
    CONST zonedata zone0:=[FALSE,0.3,20,0.3,0.03,0.3,0.03];
    CONST zonedata zone1:=[FALSE,1,20,1,0.1,1,0.1];

    You can copy these lines into your base modules in your tasks. This will make them available to all programs in the system.


    This will allow you to use these custom zones in you movement instructions.

    Code
    ! Go from this
    MoveL p10,v200,z0,tool0;
    ! To this
    MoveL p10,v200,zone0,tool0;

    It should help you keep the speed up int he small zones.

    The abb robot will let you create custom data of more or less anything so you can get it to do exactly what you want it to do.


    And as you stated the abb "fine" zone is the one that will force the robot to stop completely, all the other zones including z0 will not force the robot to stop. But z0 is a zone of 0,3mm and the robot is quite big so its hard for it to maintain speed through the zone.


    Don't worry about your lack of experience, everyone in this forum was in your shoes at some point. Just see every day as a chance to learn something new and you will ace your job.

Advertising from our partners