Non-reproducible results when welding circularly

Hello!

We are using a UR20 with an extruder as a tool to weld PP plates together. For straight-line welds, this has been working fine so far.

However, we have recently started looking into welding circularly (for windows), and have not been able to find a good setup that works so far. Specifically, the program we currently have seems to produce different results every time we run it.

For the weld we have some requirements:

  1. The extruder (tool) needs to always have the same angle towards the edge between window and wall (45°)
  2. The extruder needs to move at a constant speed
  3. The extruder has a vent for hot air at its tip. This always needs to be facing towards the the direction of the weld, meaning that by the end of the weld, the tool must have turned by 360°

I am appending the program at the bottom of the post. To walk you through it, we are setting a TCP, then moving into the Home position. Then we are turning the robot towards the window and approach the window from the bottom. We then move towards it until we make contact and start using Force mode. Inside Force, we use MoveP to move in a circular motion. Here, we have set up four circular moves to complete the entire circle. At the end, we do some untangling to prepare for the next window. Note that this is necessary since our extruder (tool) is turning 360° during the weld to ensure that the hot air is always blowing into the correct direction. Also note that our robot is positioned on a 7th axis (called TruLifter) in order to move horizontally between welds (to do the same weld for a second window, which is about 150 centimeters apart from the first one). At the end of the loop, we have some waypoints to untangle the joints and move back to the home position, so the same process can be applied on the second window.

We have tried two Force setups:

  1. Frame, applying force in the tool direction Z+ (25N) while having Y active with 0N. Speeds are set to 10mm/s
  2. Point, applying force in the Y+ direction (25N) towards a point one radius of the window towards the back of it while having Z active with 0N. Speeds are set to 10mm/s
    For option 2, we had a separate TCP and a point defined in Features. The point was set up to be one radius of the window behind the center point of the window to ensure a 45° angle when rotating around it

Independent of the chosen Force setup, the program shows odd behavior. I am appending a picture to illustrate this point. Sometimes, the circular movement works pretty much as expected (A). Sometimes, the movement starts out fine but at some point, the robot starts going into one direction only (B/C). This can happen at any point around the circle. Finally, sometimes this deterioration happens, but the robot manages to correct itself and finds the gap again to continue with the circular motion as expected.

We would greatly appreciate any kind of input that could help us solve this issue. Primarily we are trying to

  • understand why running this program has different results each time
  • find a good setup for our circular weld which satisfies all aforementioned requirements

Thank you!

Robot Program
     Set
     Home
     TruLifter 1 Reference
     TruLifter 1L  Abs (mm): 1740.00 S:250 A:500
     Loop 2 times
       MoveJ
         TurnToUnit
         ApproachWall
       MoveJ
         CenterOfWindow
         Midway1
         Midway2
       zero_ftsensor()
       MoveL
         Waypoint_2
         Direction: Tool Y+
           Until (tool_contact_detection)
       Force
         MoveP
           Waypoint_1
           CircleMove
             ViaPoint_3
             EndPoint_3
           CircleMove
             ViaPoint_2
             EndPoint_2
           CircleMove
             ViaPoint_4
             EndPoint_4
           CircleMove
             ViaPoint_1
             EndPoint_1
       MoveL
         Waypoint_5
       MoveJ
         Waypoint_6
         Waypoint_7
         Waypoint_8
         Home
       If Loop_1?=0
         TruLifter 1L  Rel (mm): 1490.00u S:250 A:500
   Thread_1
     f=force()
     sync()

Can you clarify for me why you need to use Force? Are you trying to track a seam on the part or something? Is there a reason you can’t just have it run your 4 curved moves and call it a day?

Hey Eric!

When welding using the extruder, hot filament comes out the top of the extruder. This filament needs to go as close into the corner between the wall and the window as possible in order to guarantee a waterproof result. Ideally, the tip of the extruder should at all times touch the wall on the one side and the surface of the window on the other side to make sure that the filament gets evenly spread and touches both sides.
When the filament is pushed out of the extruder, the extruder is pushed backwards slightly, which is also why when handled by a human, force is applied towards the corner to steady it. We are simply trying to replicate this process, and logic would dictate that force is necessary to stay in the corner due to imprecise movement during the circular motion as well as the natural pushback of the extruder.

Hey @stephan1,

I am unable to judge if you should use force_mode or not. But if you are going without force_mode the force will be define by your feeder and it properties.

When utilizing force_mode the circular movement will only be followed in the non compliant axis defined be the force_mode frame. While the actual force and close loop system will define movement in the compliant axis. You should be aware that the setup you have is not updating the frame. You can take a look here for more information on how to continiusly updating the frame: Universal Robots - URScript: Dynamic Force Control

Ebbe