Ok, the parts mostly arrived, except for the few goofs I made during ordering. Below is a timelapse of the build, taken over a few evenings.
The liquid in the red bottle is (confusingly) ‘blue’ Loctite. The actual liquid is reddish. It’s the 222 formula, which is about the limit for some of the small fasteners I’m using; if I’d used a more permanent formula it’s possible that if I tried to loosen a screw it would just tear the head off.
The wheels are Dagu ‘Wild Thumper’ types, and the hub setback is totally opposite what I wanted and not reversable, which pushes the wheels out wider than the design called for. It’s not fixable, but until I test out driving on a sideslope I’m not going to bother trying.
The hub to shaft adapters are Lynxmotion 6mm shaft to 12mm hex, which should really be 1/4″ to 12mm hex. There is the smallest amount of play in them when mated to the IG32 motors.
The motor brackets are far too thin to work in this application, and after a week of sitting on them they started to deform. Because there were only 4 in stock when I placed the order I made two more out of brackets from Home Depot, and those don’t bend. At least the pre-drilled ones gave me a good template to work from!
The fiddly bit in the middle spar is the differential that tries to keep the body level (or at half of each rocker/bogie angle). It’s shown in the video as 3 gears, but really 4 is needed to keep gear backlash to a minimum. Here is a shot with 4 gears; I had to put a D-flat in a potentiometer shaft to support the 4th gear; I’d like to replace that with a pot that has a 1/2″ shaft because it’s getting in the way of the battery where it is now.
The motor controllers are Cytron MD10C’s; they are rated up to 13A, and there are 4 of them. The front and rear wheels on each side share one controller, the middle wheel has it’s own. The idea is that in certain turn-in-place moves I’d like the middle wheel to not drive (or drive as much) as the front and rear wheels, so I wanted to keep that control separate. The space at the front of the carrier plate is space for the wiring harnesses, and also for Pololu +/-30A current sensors, which I haven’t bought yet.
… and where it sits in the back of the body, just in front of the fans. Those fans are 12v, so they are wired in series to the 24v supply. They aren’t exactly what I had in mind in terms of airflow (37 cfm?) but until I test it under load to see what kind of heat the drivers generate I’m not too worried. They are also PWM capable, so I might add code to control that later.
Here is a sample of the wiring harness for the 24v side; this takes power from the battery up to 2 panel switches, and ground out to a bus bar that goes out to the motor controllers and to the logic side.
At the front of the enclosure is a carrier for the brains; here it is incomplete; there is an Arduino Uno and a Chipkit Max32 on standoffs, and a PCB I haven’t started building for the other three Atmel 328’s. The standoffs aren’t the same height so I can keep USB and power cables connected easily.
The Max32 (the big red one) is an 80Mhz 32 bit MCU, so it does the real ‘thinking’. The Uno is an interface to the GPS Shield (an Adafruit GPS+logger), as well as the Magnetometer/Accelerometer via I2C, so it summarizes the position and orientation of the chassis. The 3 bare Atmel MCU’s control and sense different things:
– one sends the drive signal PWM to the motor drivers, and does the encoder counting and temperature sensing
– one controls the steering PWM signals (to servos now, but may need an upgrade later) and reads 4 IR type sensors that look down in front of the corner wheels.
– and one controls the Pan/Tilt head and sensors.
I suppose I could have used a PWM breakout and fewer microcontrollers, but there is enough feedback in the system I’d need even more ADC to read the sensors. There are 8 temperature sensors, 2 voltage sensors, and possibly 6 current sensors, plus a host of light sensors and indicator lighting, so the code would get very ‘unmodular’ in a hurry. This way I can change a bit of code on just one MCU and debug it a bit faster. It’s complicated enough already, here is the layout of the MCU board:
Here is the back view, I don’t have filters on the fans yet. The operator panel at the top has 3 main power switches, one for logic, and two for the left/right drive power distribution. This keeps the power per switch below the 20A rating. There are a bunch of LED’s in and around the switches to inform the user when it’s safe to turn things on and off. The round button is the run/stop switch, so the rover can sit powered on but not moving until told to. The RJ-45 jack basically feeds power and the I2C bus from the Max32 out to a hand controller that has some buttons and a 2 line LCD display (the Adafruit I2C RGB LCD).
In the video I said it was 18.5lbs, another checkup with most of the guts mounted (or in the body) shows I’ve hit 22lbs, so it’s adding up quickly. I haven’t checked my documentation and calculations yet, but I recollect being ok up to 26 lbs, which was notionally what the first Mars Pathfinder rover was.
The WCRS rules say ‘no wireless’, so I didn’t add that yet, the hand controller interface is pretty much the only way to do on the fly calibration, short of pulling the microSD card out of the GPS logger and changing the config file on it.
I did buy a set of the cheap 2km 433Mhz TX/RX for debugging, but they are a gigantic fail. The reception is spotty and the speed is way to slow for anything but status signalling at something like 1 byte per second (4 bits per transfer at 0.5 seconds per send). I guess I’ll have to go with my first instinct, and use Synapse boards.
One last thing – there is a cable draped across the top of the panel in that last image covered in that nylon sheathing used in PC cases… it’s crap to use. It looks and feels fancy, but if you manipulate it more than once it starts to fray badly, since the ends need to be unfused to open up to slide the wiring in. Stay away!
That’s it for now… hopefully by next weekend I’ll have the first-drive done and some fun video and images to show for it!