Our main headache at work right now is that we're frying motor control boards. These are based on an H Bridge design, which I posted about previously. I finally found a good resource talking about snubber circuits (circuits that buffer the large voltage spikes caused by the heavy-duty inductance and huge current flows of large DC motors) for H bridges. So maybe the FET based H bridge will work out after all.
If it doesn't, our plan B is to go to a relay-based bridge. There are two good candidates on how to do this. One uses DPDT relays - that is, relays with two sets of two inputs but only one set of two outputs. You hook up the battery connections the "right" way to one set of inputs, and the "wrong" way to the other set of inputs, then switch the outputs (which feed the motor) between them. This way you can choose between forward and reverse. Advantages of this scheme are really low part count (1 relay per motor, and you can run it both forwards and backwards), and "shoot through" (where current goes from power to ground without passing through the motor) is impossible. Disadvantages are that DPDT relays are expensive. Like, $10-15 each for ones that can handle more than 10 amps. Also, you have to buy special "Normally Open" type relays where the outputs are not connected to either set of inputs until you pull them there. Or else your choices will be "forward" and "reverse" but no "stop."
Another scheme to use relays for motor control, that I think slightly better, is what I've decided to call the "I Bridge." (Insert Apple joke here.) I'm far from the first to think of this configuration, but I am pleased to say that I did rediscover it independently. The I-Bridge is a motor control circuit based on two SPDT relays per motor. An SPDT relay is one that has two inputs and one output. You choose which input goes to the output. The idea here is to connect one relay above the motor, which is able to select from either power or ground. And one below the motor, also able to select either power or ground. By default, both terminals of the motor are connected to ground unless you actively switch them otherwise. By switching on only the top relay, current will flow through the motor from top to bottom, and it will go forward. Switch on only the bottom relay, current will flow up through the motor, and spin it backwards. Both relays off means that both terminals of the motor are connected to ground, and nothing happens. Turn both relays on, and both inputs to the motor see the identical battery voltage, and... still nothing happens.
This circuit has the advantage of shoot-though still being impossible, since there is no path from power to ground that doesn't go through the motor. Also, SPDT relays are also much cheaper than DPDT ones. Check out these NEC EN2 series parts, which have 2 SPDT relays integrated into a single 1.3"x0.6" package. And they can flow 30 amps continuous! Mouser has them in stock for $4.91 in qty 1. Do the math - a board to control 4 motors for under $20! Inexpensive, reliable, small part count, and pretty goof-proof. Can't beat it with a stick.
Of course, you're still going to need drive transistors and freewheel diodes and all that stuff, but you'd need those no matter what kind of motor control you're making. And you can't do PWM with this setup either, because the relays don't really switch fast enough. But that's true of all mechanical relay based designs. So I'm pretty pleased with this, all told.