Welding experiments with the ZA6

I’ve had a number of people contact me about using the ZA6 for welding applications. None of the beta test participants used the ZA6 for welding, but a friend of mine works for a company that was looking for a welding robot and they were open to giving the ZA6 a shot.

To prove out the concept with minimal effort I used hose clamps to secure a cheap ($40, Amazon) wire feed torch to an old end effector I had left over from a previous project:

I don’t have a wire feed welder in my garage (TIG only :slight_smile: ) but I talked our local makerspace Sector 67 into helping out.

After moving the robot down to Sector 67 we interfaced it with a Miller welder. The electrical interface was simple - the Miller has two crimped-on bullet connectors that allow you to easily replace the gun/trigger. The welder starts welding and feeding when there is continuity accross those two connectors. The robot’s outputs are 24V on, 0V off, so Chris from Sector wired a 24V relay with the coil powered by the robot’s output #1 and the contacts connected to the Miller. A quick check from the status screen verified that when output 1 was energized, the wire started feeding.

We started with a very simple task - laying a bead down in a straight line on a test coupon. We wanted to answer a few questions:

  1. Did we need a dwell when the weld starts?
  2. What’s the appropriate feed rate?
  3. Would the wire stick to the puddle at the end of the weld, and if so, what happens?
  4. Is a linear path sufficient for a decent weld, or do we need/want a path that looks more like a series of loops?

It was easier than expected - only the feed rate needed to be adjusted (linear move - .5% of max vel).

Dwell didn’t seem to be required. We have yet to have an issue where the wire is stuck in the puddle, but I expect that it will result in a J5 or J6 fault as the robot tries to pull away from the workpiece, assuming the workpiece is rigidly fixed to the table. The linear move produced a weld that is good enough for this application, so no need (yet) to experiment with that “stack of dimes” weld path.

Next we set up a few samples from my friend’s company. Programming was done by teaching waypoints. Joint moves were used to do initial positioning, then linear moves were programmed for the welds using a velocity setting slower than conversational code currently allows - we had to hand-edit the robot program in PyCharm to reduce it to a 0.005 command. Here is the result:

And a video of the weld:

Next steps (if we take them) will involve making a fixture plate to hold 10 or 20 pieces at once, then writing a more robust program that does some error checking and can weld multiple pieces. The company makes many different parts, so a different fixure would be needed for each design. One interesting idea is to use CV (either AR tag recognition or something like Google Teachable Machine) that would let the robot recognize which fixture plate has been presented to it and then choose the appopriate program.


I think that this would be a good application for barcode scanning as well. Have the bar code integrated into the fixture plate for each part in order to identify the program to run.

The one thing I’d worry about with MIG welding is spatter getting on the J6 reducer.


Thank you for joining the Tormach user forums!

A barcode would certainly identify the fixture plate but an AR tag is just as easy to create and it has a couple advantages:

  1. The robot already reads AR tags for other tasks, so the software work is mostly done.
  2. AR tags give the robot some location information (within a mm or so), which might help double-check that the fixture plate was positioned properly.

I’m still intrigued by the teachable machine object recognition idea. It’s overkill (an AR tag or barcode would work fine here) but it seems really neat to have a robot that can visually recognize what has been put in front of it and then operate on it. It’s also pretty easy to code because Google makes training the models really simple and then lets you export a python library. I’ve always wanted to try a real application for it, so perhaps this will be the one. If I write the code I’ll post examples to Github for others to extrapolate from.

I’m not so worried about spatter - the production robots have a replaceable thick plastic cover over the J6 reducer.

1 Like

The spatter wasn’t too bad but we’re running bare wire with shield gas right now. I imagine if we increase material thickness and start running flux core wire we’d have some longer-range spatter issues :slight_smile:

Next steps are to build a test fixture plate so we can hold parts without getting in the way of the torch.

I’m playing devil’s advocate a little bit, but would object recognition be able to handle recognizing that on 50 of X part the left side needs to be welded, but on the next 50 of X part the right side needs to be welded?

Fixture plate, for now sure. That could mean a lot of fixtures to store and swap out with larger production runs and inventory to justify the setup times. Shoot for a second robot to do the fixturing.

@EdKorn Thanks for joining the Tormach user forums!

I completely understand the desire to fully automate this process. However, my friend’s company is still a very manual shop and I think they need to take small steps to better understand and trust the process. I’m rethinking the idea of a 20 piece fixture plate, and instead I’m going to recommend that they keep doing exactly what they are doing now, but replace the human welding with the robot welding. Using their single-piece fixture is something they already know and are comfortable with. They will still have to dedicate a laborer to loading/unloading the fixture, but at least they will get a perfect weld every time and they won’t have to pay welder wages for the position.

I think if they use the robot to weld parts on their single piece fixtures for a month or two it will be easier for them to learn fundamental robotics concepts. One they are comfortable with “one piece at a time” they might see the benefits of a multi-piece fixture. At that point it will be easier for them to learn user frames, pose-type waypoints, and other concepts required for them to program the weld toolpath for a multi-piece fixture.

I am more concerned with teaching them how to be successful with the robot than with providing them wit a solution, and I don’t want to overwhelm them right out of the gate.

I think you are correct, that accounting for the Human Factor takes precedence over any gee whiz factor like two robots, one holding the other welding.

Have you put much effort into making weave patterns for welding? One of the things that makes robotic welding so powerful is being able to lay down consistent weave patterns so you can make big welds or multi pass welds.

It would be interesting to use TRPL to define weave functions based off parameters.

I am curious about the intricacies of getting joint resistance feedback from HAL as the robot comes off the end of the weld and incorporating that into the python code. If the work piece is only setting in a cradle (to increase load/unload time) then we could check for how easy it is for the robot to pick up the tool at the end of the weld. If within a certain window then it could be assumed that the wire did not stick to the piece. If <Value, then assume that the wire stuck and there is a piece of metal hanging from the end of the gun and throw an error. Then you could, theoretically, increase the speed of that check and know before you dislodge the piece from the cradle, pop the trigger to break the connection then move on.


No effort yet. I think it would be a nice thing to have, and I expected to need to do it to achieve a good weld on these sample parts, but they came out so nicely with just a linear move and in the end the customer and I thought it was “good enough”. I expect if the ZA6 gets used regularly in welding applications we’ll add a process move with an optional ‘weave’, ‘zig_zag’, or ‘half_mooons’ parameter. Have you done much work with other industrial welding robots? Do you know how it’s commonly programmed??


Yes - we considered that and were just discussing using force feedback to interrupt a move and notify the operator the other day. Right now we can do it in a very inelegant way, but doing it elegantly is on the near term task list. The plan is essentially to create a derivative of a probing move, but to allow what used to be the probe input to be connected to an arbitrary input or function. You could then define an expression (e.g. j5_torque_actual_value > 80) that, when true, interrupts motion.

Being able to stop motion based on torque feedback is a very useful function, I’m glad it’s being work on. I used an equivalent all the time on Fanuc robots, primarily for placing parts on an object on another object the height of which would vary and as a collision detection mechanism when in tight quarters.

The ideal scenario would include three robots. Two used to hold the work pieces as a fixture replacement and one welding.

A lot of scenarios where the wire would stick can be avoided by doing one of the following (or a combination of the two):

  1. At the end of the weld, slow the pass speed of the robot, move closer to the work piece slightly for a split second and then back off quickly at the same time you are disengaging the torch.

  2. Rotate the torch head towards the completed weld bead path at the end of the weld a split second before disengaging the torch.

In the absence of any kind of torque feedback these would at least be easy things to implement in programming.

@livinglightshows - Welcome to the Tormach User Forums!

I appreciate the tips on wire sticking from someone with more experience than me. The robot shown welding above in this thread is now at the local welding shop, set up with a swappable fixture plate that holds 12 of those parts at a time. A couple of weeks ago I trained the shop foreman on how to program the robot, and in 45 minutes he had 4 out of 12 fixture positions programmed, and told me he thought the others would be a snap. I need to follow up with some photos of the setup, and assuming they’ve got the welder interface working, the robot doing some production welding. If they have problems your advice will be very useful. Even if not, the program was written in such a way that making your changes should be easy to implement across all 12 parts.