I’m working on a robot chassis in SketchUp this week (even though we’re closed). Over the last several of months I’ve been working on consulting designs and product development, and got behind on one of the research projects I wanted to spend time on. This week I’ve had a chance to catch up a little.
A robot with independent wheel drive is something we’ve been working on in our spare time. Here is the latest iteration of the prototype.
Over the last couple of months we’ve been testing different mechanical systems to control robot wheel position. In addition to position each wheel is to have independent control over the motor speed and direction. This prototype gets us part of the way to what we were shooting for.
Motor control: Currently this robot is using skid steering where the left hand motors are driven by a shared control signal (a single H-bridge), and the right hand motors are driven by a separate signal. This is similar to how a tank or bulldozer is driven. We used a Parallax BASIC Stamp 2 to read radio control signals (1-2ms pulses) and convert them to motor drive commands. The BASIC Stamp converts the pulses to serial commands that are then sent to the Motor Mind C, a dual motor controller. This allows the robot to turn left and right as well as move forward and reverse. The RC channels are “mixed” in the BASIC Stamp 2 which makes control of the robot more intuitive for the operator using an RC transmitter. The next step is to control each motor with its own H-bridge.
Wheel Position: We built a simple lever arm using some brass rectangular tubes. These were bolted onto servo horns on one end and the other end was bolted to the motors. Circular brass tubes were used to create pivot points, and where the brass connections needed to be solid we just brazed it using a heat gun and solder. The mechanism allows close to 90 degrees of movement. In our code we limited the range to about 45 degrees. Each wheel position can be independently controlled, and we used an Arduino Uno to read inputs from our BASIC Stamp 2 and convert those to 4 servo drive signals.
RC Signals: Originally we wanted to use our Firstbot Arduino clone to run this design. We ran into two problems. The first was not having a lot of time for coding and testing. The second was that the Arduino is not very good at doing multiple timing things at the same time. We wanted to read 4 RC channels (measure pulses 1-2ms in duration with a period around 20ms). We also wanted to generate 4 RC signals for servo control (output 1-2ms pulses with a 20ms period). And we need to generate 4 PWM signals to control the motors. There were a variety of problems we ran into when attempting this. Servo control was at times erratic, and even caused one to burn out. PWM control was lost on one of our channels due resource sharing in the Arduino. I’m pretty sure we could get close making this work if we broke away from using Arduino macros and implemented some interrupt based code. But being short on time we decided to through in a BASIC Stamp 2 and Motor Mind C. This offloaded the pulse reading and motor control functions. And Arduino Uno was then used to control the wheel position by generating servo signals.
Servos: We used HiTek HS-645MG servos. The had decent torque and metal gears (about 100 oz-in). Unfortunately they run about $35 each retail. These can operate to 180 degrees if provided with a pulse of 0.6-2.4ms. The 4 servos required close to 2A.
Power: An 8.4V 3000mAh RC battery was used to run the motors and a Castle Creations servo regulator was used to step voltage this down to 5.1V to keep the servos from catching fire.
Motors: 4 12V 200RPM gear head motors were used. These are smallish, have a decent mix of torque and speed, and were in stock.
Next step: We’ve got a couple of ideas to run with on this design. First, a small board that handles the RC signals, servo outputs, and PWM signals would be cool to have. Second, there are 4 brass pieces that were used for each wheel. We want to see if they can be boiled down into a single strut. We could have that laser cut to make the hardware a little more clean. Finally, we never had a chance to try and control each wheel by itself. Another issue is that with only 4 RC channels to control everything you end up with a user interface problem. You really need control channels to control each motor and each servo separately. Not sure how to handle that. Perhaps move to a WiFi / PC interface?
Friday and Saturday we attended the Robotics and Microcontroller Expo put on by Parallax. They did a great job, especially considering the rain we had on Friday. Parallax had tours of their business, demonstrations of the various robotics systems they sell, and even had a soldering class for kids. Our company took the opportunity to speak with all of the enthusiasts who build robots that showed up. We also tried to engage young people by showing them both our products and the instruments we use to design them (oscilloscopes, waveform generators, etc). The robot pictured above was built by a group of students who were high-school aged.
This video shows a clip of our test run using the final code with RC channel mixing and serial data control of the motors. It’s not much but does give you an idea of how the design turned out.
We also uploaded a schematic and Parallax BASIC Stamp 2 code to our application note page under the Motor Mind C product as AN710.
I guess this is step 6 of the Joustbot epic assembly adventure. At the end of step 5 I was waiting for some 9.6V batteries to arrive and was a little concerned about how the 12V motors would behave at less than 12V. It turns out that that they run just fine, and the robots are fun to drive at this lower voltage. Unfortunately, I did run into a problem that scuttled my grand plans of finishing this project last Friday.
With the Parallax Robot and Microcontroller Expo just a week away I’m still trying to get a pair of jousting robots put together. In this installment of the Joustbot saga I’ve got the basics of the robots assembled and will be able to do a little testing next week.
How did I get to this point? Mostly by taking measurements, going to the hardware store, employing some hand tools, and applying a little paint. To start I created some paper models of the battery pack, radio receiver, and carrier board, and laid them out with the motors and motor mounts. This created a 2-D footprint that allowed me to try out different options for where things needed to go. Since I wanted the carrier board visible and accessible I decided to stack that on top of the chassis and keep the battery, wiring, and receiver underneath it.
Step 2: I cut and bent all the metal pieces, drilled the holes, painted anything that didn’t move (and a few things that did), and put it all in a big pile for the photo-op above.
With the Parallax Robot and Microcontroller Expo coming up (4-13 and 4-14) we’ve been working on some product demos. We have three different BASIC Stamp 2 position control demos based on the Synaptron Micro. We’re also assembling a two axis solar tracker. For the tracker we’ve got the mechanics designed and assembled and the motors have been selected and tested (we have a linear actuator with analog feedback and a slew drive with an encoder feedback). Mechanics, movement, and motor control has been tested but we haven’t completed the overarching control scheme yet. We’re leaning toward using an Arduino Uno. In addition to that work I was trying to come up with something I could put together quick that would be a little more “hands-on” fun for people at the expo. I came up with the idea of robotic jousting. It’s kind of like robot combat, but without the saw blades and napalm.