Tanks for you help.
Yes I always test in that order, run motors open loop to verify basic operation and the direction s correct. Tun PID parameters in "Studio" then very simple tests using ROS. I was dong that last step when the failure occurred.
I was worried the 2x15 might be under sized what I re-read that motor stall current is about 7 amps. If all three wheels stalled the current would be 21 amps, More then the 15A rating of the controller. So 15 is a maximum continuous
current not maximum peak
The test that cause the smoke was running forward then reverse using ROS_Node and ROS teleoperation on a test stand. Possibly the forward to reverse transition caused a stall current on all wheels.
One more possible factor. I found I was using a "DC extension cable" I use it so the battery can be remotely located. For indoor testing I keep battery in a fireproof container. This extension cable had a fuse with no diode. I bet THIS was the fuse that blew All fuses were 20A. The on-robot fuse has the diode paralleled to it.
Let's say the direction reverse pulled 7 x 6 = 42 amps from the battery, fuse blew and could the motors de-energizing have created and over voltage? Yes I know placing fuses in series is pointless but I had a fire a couple years ago with high current DC -- prototype robots can sometimes eat cables causing short
I need to scrub the heat sink grease off the MOSFETs, read the part numbers and get a data sheet.
Thanks again, I will send the unit back after I hear from firstname.lastname@example.org