DC Gearmotors For Little Sawppy Rover

Based on my experience modifying wheel drive motors on my little rover Micro Sawppy Beta 2 (MSB2), I decided it was trending towards a rover design that would be too difficult to work on. If I, as the designer of MSB2, am tearing my hair out struggling with wire routing, how can I realistically expect beginners to work with this thing? I think MSB2 succeeded at being really cute, unfortunately the beauty was only skin deep and its core difficulties are not what I want.

But while I stopped further work on MSB2, I wanted to continue the task I was in the middle of: trying out the idea of using DC gearmotors. The micro-servos I used in MSB2 taught me that my original idea for driving little rover wheels were unreliable. While we could modify micro servos for continuous rotation, there’s no guarantee their control circuits would give us usable speed control. Sometimes they don’t! In order to guarantee a little Sawppy rover could be reliably built, I must take motor speed control into my own hands.

This decision started when I removed all electronics from MSB2 wheel servos, using them as just a motor with a gearbox inside a micro-servo sized enclosure. (FYI Adafruit product #2941 is exactly like this, no modification required.) Even though I’m throwing out half the device, it’s still a very inexpensive way to obtain a small DC gearmotor thanks to the large volume market of generic commodity micro servos. But if we are going to use a small high volume commodity DC gearmotor to drive little rover wheels, there’s actually a better option: TT gear motors.

These DC motor + gearbox units are ubiquitous like generic micro servos, mass produced by many manufacturers at high volume and low cost. It is available as Adafruit #3777 but they are definitely not the only retailers. (*) I first learned they existed when I saw them pop up in multiple projects submitted to a Hackaday contest, and a little background research unveiled how widespread they were.

Since I’ve decided to add the complexity of DC motor driver modules, these TT motors immediately jump to the top of the list. Unlike micro servos, TT gear motors were designed for driving wheels.


(*) Disclosure: As an Amazon Associate I earn from qualifying purchases.

Micro Sawppy Beta 2 Wire Channels Are Too Hard To Work With

My little rover project Micro Sawppy Beta 2 (MSB2) turned out to have (effectively) three speeds: stopped, full speed forward, and full speed reverse. MSB2 originally intended to get its six-wheel drive from inexpensive micro servos modified for continuous rotation. This approached worked for its predecessor MSB1, but MSB2 used servos from a different manufacturer and their feedback control circuit had very poor (or poorly tuned, or nonexistent) proportional control. As a result it was nearly impossible to drive MSB2 at partial throttle.

Given this setback opportunity to try other ideas, I started modifying all six wheel drive servos. I unsoldered the flawed control circuit board and soldered wires directly to the motor input terminals, intending to route those wires to a motor control H-bridge circuit of my own choosing. This would mean I’m only using the mechanical portions of the micro servos, effectively turning it into a DC gearmotor.

But I only got halfway. Unsoldering the board and soldering motor wires is well within my comfort zone, but wrangling with wires got very tedious and frustrating. In order to replace the three-wire continuous rotation servo wires with two-wire motor control, I have to struggle with the intricate wiring channels I’ve designed into suspension components. In fact I have to struggle with it twice: once to remove the wire, and once to add the replacement.

That’s when I realized MSB2 has failed some very important project objectives: making the rover easy to build, easy to diagnose, and easy to repair. For the three wheels I managed to convert, it took far more time to wrestle with the wires than it did to perform soldering, and that’s just wrong. I want a design where, if a servo dies, it can be quickly replaced to get the rover back up and running. The wiring channels may give us a tidy looking rover, but not one easy to work with. As a result I’ve decided MSB2 is going down the wrong path and stopped work on this iteration. But I am thankful for the cute little rover, it taught me the tradeoff for tidy wiring and gave me motivation to examine using DC gear motors to drive a little rover’s wheels.

Micro Sawppy Beta 2: The Runaway Rover

Once I built up my little rover Micro Sawppy Beta 2 (MSB2) I observed that its steering servos were acting differently from the batch I used for MSB1. Beyond the clearly visible physical differences, these servos also had different control logic that can get into a never-ending oscillation.

A contributing factor here (if not the main factor) is that this micro servo’s motor control logic is far too eager in its corrections. It applies too much power and, if that power is not absorbed by damping, we have over-correction which repeats the cycle. In theory the motor controller uses power in proportion to the error in position. If the target position is close, it should use less power than if the target was far away. This particular servo control board has poor (or at least poorly tuned) proportion control. It seems to use the same amount of power whether the target position is close or far away.

The occasional oscillation is moderately annoying for rover steering, but at least it is usually damped out when the rover is sitting on its wheels. I didn’t experience the full impact of control algorithm used in these micro servos until I converted them to continuous rotation for rover’s six wheel drive. Now the poor proportional response manifests in a rover that I can’t run at partial power. I could make MSB1 crawl slowly up obstacles, but MSB2 didn’t want to crawl slowly like a real Mars rover would. It is either stopped or booking across the landscape at full speed.

In this scenario I suppose I could also apply damping by increasing the workload. Which means either adding friction to the drivetrain or making the rover heavier. This is assuming the motor will exhibit proportional behavior at higher load levels, which is possible but not yet proven. But despite the light weight causing other problems, I didn’t like the idea of adding friction or weight purely for the sake of ballast. So I am going to explore a different venue by removing the flawed servo control board. I’ll have to find some other motor controller and use only the mechanical portions of these micro servos as a DC gearmotor assembly.

Micro Sawppy Beta 2 Has The Shakes

The robot arm I built as a test mockup for my little rover Micro Sawppy Beta 2 (MSB2) was a simple manually-posed affair. I wanted to get a better feel of how such a thing would articulate before I put in the work to motorize it, and I had no suitable actuators on hand anyway. In fact, I had no idea what I would use for such a project, since I found problems with the micro servos I’m already using in this project.

There are a few robot arm designs built around the same small affordable micro servos. For example, the MeArm is a super minimalist robot arm designed to be assembled from laser-cut pieces. I’ve seen a few MeArm in person and based on how they moved, I could tell there are some challenges to use them effectively. One problem I witnessed was that, under certain circumstances, a particular servo would get into an oscillation bouncing on either side of the target position. Unable to ever reach that position and hold it steadily.

I built and ran MSB1 without seeing such behavior and had been feeling pretty good about things, but MSB2 used a different batch of micro servos from a different manufacturer. With this batch, I saw the same oscillation I saw on a few MeArm affecting MSB2 steering and I think it’s coming from certain servo control boards. Or at least I don’t see how it could be caused by my mechanical design changes between MSB1 and MSB2.

The comments on my tweet support my hypothesis: this batch of micro servos have some shortcomings in its feedback control logic to cause this behavior. I think it is very likely a deliberate engineering tradeoff decision dropping some feature to make it cheaper, given that these micro servos were built to minimize cost. There were multiple suggestions to add damping which does indeed mitigate the problem. For MSB2, this oscillation only occurs when I hold the steering mechanism up in the air. Once I set down the wheel, friction between wheel and ground adds enough damping to stop the oscillation.

I’m feeling particularly irritated at this servo behavior, because it turned my beloved feature into a bug: the smooth low friction rotation enabled by ball bearings is a contributing factor for this oscillation. If I didn’t use ball bearings and had high friction steering, this oscillation would probably not happen. But annoying as this was for steering, it became a disaster for driving.

Micro Sawppy Beta 2 Robot Arm

My little rover Micro Sawppy Beta 2 (MSB2) has a mock RTG in the back, and in the front I installed a mockup for a rover robot arm. Even as a non-motorized mockup, it was more than Sawppy V1 ever got! A Sawppy arm was always on the to-do list but I never dedicated the time to make it happen. In the absence of my own efforts, I’m happy to see some other Sawppy builders have added robot arms to their rovers. Like CJ’s arm documented here on Hackaday.io and on YouTube.

And this rover flexing its arm on Twitter.

Both of these robot arm projects followed the mechanical geometry of real Mars rover arms, which makes me happy in a “These are my kind of people!” kind of way. I haven’t studied the arm as much as these other Sawppy builders had, so I decided to start simple and small with MSB2. I designed and printed a very simple arm as practice. I didn’t have any kind of actuators on hand that would work at such a small scale, so this arm is limited to manual articulation. (I could pose it like an action figure, but no remote control or autonomy.)

Still, it was instructive to see what kind of motion is possible with this mechanism. I knew two things from the start: it needed to go into the stowed position and it needed to extend out to act like it is retrieving a Mars sample. Once I started playing with it, though, I learned two other things.

The first lesson is that this draft had only a subset of range of motion as the real thing. I couldn’t replicate the sample storage movement sequence shown in a NASA tweet illustrating how Perseverance will transfer core samples to the carousel handling tools and sample tubes. The second lesson is that I had a vague idea to build a rover that can be friendly and wave “Hi” to people, but this arm could not bend the way I wanted because it would collide with the left front wheel steering servo. I’m glad I learned these lessons on a simple test arm, before I spent the effort to motorize my arm. What I could use for arm actuator is a problem itself, as I encountered a problem with the micro-servos I’ve been using.

Micro Sawppy Beta 2 RTG Power

The equipment bay for my little rover Micro Sawppy Beta 2 (MSB2) had enough space for the temporary setup of Raspberry Pi 3 and Adafruit PWM/Servo HAT along with all wires and a battery. However, I’m trying to think ahead to more elaborate setups and how I might accommodate their needs. One obvious concern is that bigger computers would need more space and bigger batteries, both competing for room inside the equipment bay.

Mars rover engineers at JPL had already encountered this problem and we can see their solution: Curiosity and Perseverance draw their electrical power from a radioisotope thermoelectric generator (RTG). Unlike their predecessors, who drew electrical power from solar panels that imposed a lot of operational limitations. Mars-bound RTG are large and bulky devices bolted prominently to the rear of those two rovers, giving them a very distinctive rump. Since MSB2 tries to look like the big rovers, it will also have a similar-looking attachment to the back, so we might as well make it serve the same purpose! (And to be clear I meant power supply, not a radioactive generator.)

Since MSB2 could fit its battery inside the main body, I didn’t need to make this faux RTG functional just yet. For MSB2 it is only a test run mockup without any paths for power wiring. I found that if I made it according to proper scale, the mock RTG would be (just barely) large enough to accommodate a single 18650 lithium-ion cell. It also looks pretty easy to make the chamber easily accessible, so the battery could be swapped out.

But with that success, my ambition grew: what if I could find a little more room? I could accommodate a USB power bank built around a single 18650 cell. If micro Sawppy could be built to run off a commodity USB power bank, that would make it a lot more beginner friendly. First, the construction would be simpler and second, beginners would be spared the learning curve of working directly with infamously temperamental lithium ion battery cells.

So that’s another research project: what are the power requirements for a micro rover, and would it fit within the power delivery capabilities of a USB power bank? I know this specific USB power bank in my picture doesn’t have the grunt to keep a Pi 3 running, so it is another motivation to scale down from the current electronics configuration to make room in the power budget for other component like a robot arm.

Micro Sawppy Beta 2 Equipment Bay

My little rover prototype Micro Sawppy Beta 2 (MSB2) had a few suspension changes relative to its predecessor MSB1, but the real attraction is the rover body. Whereas MSB1 had a minimalist box, MSB2 makes an effort to look like Mars rover Perseverance.

The minimalist box of MSB1 is, in fact, a little too minimalist. I thought I made it large enough to accommodate a Raspberry Pi 3 and Adafruit PWM/Servo HAT but I made some mistakes and it was too small, leaving its brain dangling outside the body by wires. Not exactly a robust approach. MSB2 has a much larger body with a correspondingly larger enclosed equipment bay for electronics.

The major structural points of a Curiosity/Perseverance-like rover are where the differential pivot attaches plus the two rocker attachment points. These three attachment points carry the entire weight of the rover so I wanted it to be a strong single piece, but printing it as one piece added a lot of complication elsewhere. MSB2 body was printed upside down so they could be together, but that meant I couldn’t print a bottom since it would be an unsupported top surface while printing. And while I could theoretically seal off the top of the box (since it’s bottom and facing the print bed when printed upside down) I didn’t want to do so for two reasons: One, I wanted to print some surface features to resemble Perseverance, and I couldn’t do that if it’s flat against the print bed. And second, I wanted the equipment bay to be accessible while the rover is standing on its wheels right side up. With all these conflicting desires, the main body box ended up with too many separate pieces. I plan to play with other ideas in future iterations, the next thing I’ll try is to abandon the desire to print all three structural attachment points with a single piece. At this scale, a few M3 fasteners are strong enough to hold things together.

One thing I did like about this box was the volume, which is modest but enough for a Raspberry Pi and Adafruit HAT. I have ambition to build smaller and/or simpler electronics for future iterations of micro Sawppy, but those plans have not yet solidified. I think leaving enough room for Pi and a hat leaves a good upgrade path, but there’s always a question of how much to plan for upgrades. I think it’ll fit some Ardupilot control units, but I don’t know for sure since I lack experience with them. This body is definitely not big enough for something like an Intel NUC, though perhaps it’s enough for a Jetson Nano. However, the sealed box would present cooling challenges for those power-hungry devices, in addition to their need for big batteries.

Micro Sawppy Beta 2 Differential Link

My little rover prototype Micro Sawppy Beta 2 (MSB2) has a few suspension changes relative to MSB1. The change to its differential linkage system is not as significant as the changes to steering mechanism, more of a small evolution.

While driving MSB1 around I watched the linkage move and thought it was worth an experiment to see if I could eliminate all the metal components. (Bearing and associated screw and nut.) The linkages became two 3D-printed living hinges that are designed to flex on axis perpendicular to each other. Ideally it would allow each hinge to accommodate most of motion along one axis letting the other one handle the rest. In practice this only partially worked and the hinges were too stiff. The loads didn’t distribute as nicely as I had imagined in my head. Real world is like that sometimes! (Actually most of the time, if I’m being honest.) The end result is that these differential link hinges hindered weight distribution mechanism of the rocker-bogie suspension.

I could make these hinges more flexible by printing thinner plastic, but then we increase risk of fatigue and breakage. PETG is more ductile and durable than PLA, but neither of them are close to properties of dedicated flexible filament. Not all printers can handle TPU or similar materials, and I want to design my rovers to be printable even on cheap basic printers that only handle PLA.

The potential for breakage highlights another problem with tightly integrated designs: if the living hinge breaks, the entire component has to be reprinted. I’m still undecided about using 3D-printed living hinges, so there will be a few more rounds of experimentation to gather more data. But if I want to use living hinges printed from plastic filament not intended to be flexible, I should at least change the design to be a multi-piece part. If the living hinge itself is a smaller separate component, it can be reprinted quickly for replacement in case of breakage. Which I don’t think is a huge risk when rolling around, but unintentional sharp jolts happen a lot when I am trying to open up this rover’s equipment bay.

Micro Sawppy Beta 2 Steering

Most of the focus for Micro Sawppy Beta 2 (MSB2) is on building a body that resembles real Mars rovers, so its miniaturized rocker-bogie suspension is largely unchanged relative to MSB1, inheriting all the same flaws. The most notable suspension changes are in how its steering servos are installed.

Relative to MSB1, steering servo body is flipped around front-back so the bulk of the servo body faces away from the steering knuckle. The upside is that it allows that bracket to be narrower thus saving space. The downside is that wire routing becomes more convoluted as the wires jut out away from the body and have to double back. It “wastes” some wire length but that has minimal impact, as I’ve determined I had to use servo extension cables anyway.

The other change is that the top half of the bracket is no longer in line (when viewed from the top) with the bottom half housing wheel driving servo, it has been rotated 90 degrees to be in line with wheel travel direction. This approach has several benefits, starting from a cleaner look when the rover is traveling straight ahead. It also increases the steering angle range, giving the bracket more distance before it would make contact with a suspension arm. This change, combined with the fact it is now narrower to begin with, allows much more room for the robot arm.

But there are a few downsides. Since it was printed 45 degrees relative to the 3D print bed, this design doesn’t enjoy the strength offered by a design aligned with print layers. To compensate for this, I made the bracket thicker in high-stress areas, but it still suffered breaks along layer lines in ways that the previous design would not.

Another downside is that it further compromised ground clearance, increasing the chances this plastic might impact obstacles on the ground. I think it’s still acceptable in light of modifications other have made to Sawppy V1, but it is definitely a step backwards.

The lesson I learned from this experiment is: while an one-piece design would satisfy the goals of reducing parts count, it is hard to satisfy all objectives and still remain in one piece. The thicker yet still more breakable bracket made it more difficult to assemble, which also made it harder to diagnose problems and repair them. And neither of these single piece designs allowed manual steering trim adjustment, which is a feature on my wish list.

In light of these experimental results, for the next version of micro rover steering mechanism I will go to a multi-piece design. I also decided to go multi-piece on differential link but for slightly different reasons.

Micro Sawppy Beta 2

The main objective of MSB1 was to establish that a scaled-down rocker-bogie suspension system could nominally function and expose problems along the way. That objective did not require much of a rover body, so MSB1 only had a minimalist “Scarecrow” box. The main objective of MSB2 was to build upon its established suspension system and add a body with some resemblance to Mars rovers Curiosity and Perseverance.

On top of that body is not a realistic model of a rover camera array. Instead, it has a smiling face, which follows the precedence set by rover illustration JPL used for Mars 2020 “Name the Rover” contest (resulting in Perseverance) and that of ESA’s ExoMy rover. I had contemplated various ideas on how the face can change, maybe small OLED panels or an e-ink display. For this first trial I just drew a face with black marker. (There was also a layer of cellophane tape to block marker ink from capillary action.) I did this during a virtual meet of makers and I was surprised that a simply drawn smiling face made a hugely positive difference on how people perceived my little rover project. Though I probably shouldn’t be surprised: there was a similar change in perception when I added googly eyes to Sawppy V1 after seeing it done by another Sawppy builder. A tiny change makes people smile.

For electromechanical actuation, MSB2 used MG90S metal gear servos from a different manufacturer so I can compare how they perform against the ones used in MSB1. This particular batch were the MG90S that had a mild case of false advertising: only the final output gear was metal (visible as silvery metal) and the remainder were all black plastic. The two batches were bought from the same Amazon vendor on the same product page (*) but they are obviously distinctly different products. One of the differences had a serious impact on MSB2 and changed the direction of the project, more details in a future post.

I originally intended for MSB2 to be up and running in time for launch of Perseverance rover, but as is usually the case, other things happened. All I could do was a short video where I manually moved MSB2’s poseable arm waving a flag cheering Perseverance on. But it became a part of JPL’s official launch tweet, and I’m quite happy with that accomplishment even as I work through MSB2 design problems.


(*) Disclosure: As an Amazon Associate I earn from qualifying purchases.

Micro Sawppy Beta 1 Kicking Up Its Middle Wheels

Modifying Micro Sawppy Beta 1 (MSB1) suspension geometry to be front-back symmetric didn’t seem to cause any problems. Or at least, it didn’t seem to add any new ones. One trait I observed while running my little rover around is a tendency to kick up its middle wheel. When MSB1 encounters an obstacle it cannot climb, the front wheel stops moving but the rear wheel tries to push forward. As a result the suspension folds up, lifting the middle wheel. This is something that can be traced back to features inherited from big rovers.

Here are two side views for comparison between MSB1 and Curiosity rover. In an effort to draw up a cute little baby rover, I compressed overall length (front-back distance). This gives us a stubby little rover, but it also meant the rear wheel now has better leverage for lifting up the middle wheel.

I see this behavior occasionally on Sawppy V1, but not as frequently. Part of this is because Sawppy V1 proportions are faithful to Curiosity proportions and not squashed for cuteness, but also because of its heavier weight. In order to lift the middle wheel, we also need to lift a portion of the rover’s weight, and MSB1 is proportionally far lighter.

This lighter weight is a natural property of all scale models. MSB1 is roughly 1/3 scale of Sawppy V1, meaning it is about 1/3 as long. Which means it occupies about 1/9 the floor space, and occupies roughly 1/27 of the volume. All else being equal (they weren’t, but just for the sake of this simplified explanation) we would expect MSB1 to weight about 1/27 as much as Sawppy V1, making wheel lifts much more likely.

This propensity to lift a wheel is puzzling when we look at the forces involved and notice what happens when the rover is traveling backwards: If it encounters an obstacle it cannot climb, the rear wheel stops and the middle wheel will try to push backwards. In this case, the push will help lift the rear wheel so it could climb the obstacle, making the wheel lift a feature and not a bug. I was able to experimentally verify this property with MSB1: it climbs better running backwards than forwards.

Why would JPL engineers design a Mars rover that has superior climbing ability traversing backwards than forwards? It makes sense when we consider the operating environment: there are no roads or roadside assistance on Mars. Curiosity is designed so that it can back out of whatever situation it might get into, because the nearest tow truck is over 54 million kilometers away.

But this means we have to make a decision for little rovers running on earth, where we have the option to walk over and pick it up if it gets stuck. Do we flip around the suspension geometry so it climbs better? Or do we maintain geometry faithful to Mars rovers? For Sawppy V1 I chose to copy Curiosity, but I might need to take the other path for Micro Sawppy rover given its shorter limbs and light weight. That’s a decision I haven’t made for MSB2 but if I do so in the future at least I have precedent. JPL’s own Open Source Rover has its bogies up front instead of back.

Micro Sawppy Beta 1 Symmetric Front-Back Wheel Spacing

While working on wiring I remembered a design decision I made for Micro Sawppy Beta 1 (MSB1). One of the features that surprised me about Curiosity rover were its wheel spacing. With a casual glance at the rover layout, I saw three wheels on each side and assumed they were evenly spaced, but once I studied them in more detail I learned they were not. The two bogie wheels are slightly closer together than the distance between middle wheel and front wheel. I’m sure this represented the best tradeoff between many factors I’m ignorant of, but I have no idea what they might have been. I don’t even know what words to use to search for papers that might have been published to explain it.

What I do know is that their different distances meant each corner wheel had different results for calculating their Ackermann steering angles. When traveling in an arc, this results in four different steering angles and different wheel rotational velocities for all six wheels. This calculation itself isn’t a big deal right now. Since such math is pretty trivial for hardware platform like Sawppy’s Raspberry Pi 3, and executing different steering angles and wheel rotations is similarly easy with LX-16A serial bus servos.

But my goal is to make a rover that is smaller and simpler, and a part of that is willingness to deviate from Curiosity’s proportions. So I made this rover’s wheel spacing front-back symmetric. The middle wheel is now set equidistant from front and rear wheels. Now steering angle and wheel velocity only has to be calculated once for each side. The front and rear corners wheels on the same side would steer to the same angle (just opposite directions) and those two wheels would roll at the same speed.

Halving the math has little impact for MSB1, as its Raspberry Pi 3 had so much computing power to spare. And since it used the Adafruit PWM/Servo HAT for control, there were no reduction in complexity for electronics either. But MSB1 proved this approach can function, and is not the biggest problem with MSB1 suspension geometry. And once proven, it opens up possibilities for future simplifications. Allowing future rovers to use software and electronics that are less capable than what is on board MSB1.

Micro Sawppy Beta 1 Wiring

The electronics components I had used to get Micro Sawppy Beta 1 (MSB1) up and running are not representative of my final ambitions. It has a Raspberry Pi 3 with microSD card, the Adafruit PWM/Servo HAT plus two MP1584 buck converters. The upside of this system is simplicity of assembly: thanks to Adafruit, their HAT is close to plug-and-play with a Pi. And if someone uses another power solution, they might not need to solder those MP1584 converters. The servos, for example, could have been powered by a 4- or 5-pack of AA batteries.

The downside is that a remote-control toy rover is really only using a tiny fraction of the capabilities of this system, and these tasks can be done with something simpler and less expensive. For Sawppy V1 I wanted to leave headroom for explorations into autonomy, but it’s been a lot of fun even without that. So I’m OK with downsizing for a micro Sawppy as long as there’s an upgrade path. Whether it be Raspberry Pi, Ardupilot, or some other advanced controller. I still want to make micro Sawppy more affordable, but it’ll be a balance between low cost against ease of assembly.

For wiring, I followed ExoMy’s lead and designed in a lot of wiring channels in the suspension arms, trying to keep wires tidy and out of sight all the way until they pass through narrow channels into the body. Not all of these efforts worked. Some channels were too narrow, making installation impossible. Some channels were too wide, and wires fell out. This was disappointing, but also completely expected. I’m learning how to design wire management channels, I wouldn’t get it all right the first time.

But these intricate pathways had another impact: these micro servos are built with approximately 25cm of wire (plus or minus a few centimeters) which would have been long enough for a little rover whose overall length is about the same. However, now that they have to wind their way back and forth inside suspension components, 25cm is no longer enough.

I had a similar problem with Sawppy V1, where the wires that came with LX-16A serial bus servos were not long enough for a rover. I cut those wires apart and spliced them into a custom wiring harness, but I’d like to avoid that kind of electrical work for building a little Sawppy. Fortunately, unlike LX-16As, micro servos use commodity remote control hobby servo plugs. Which means I could use commodity servo extension cables. (*) And no wire cutting or soldering iron would be required to make MSB1 wires fit inside its suspension geometry.


(*) Disclosure: As an Amazon Associate I earn from qualifying purchases.

Micro Sawppy Beta 1 Electronics

The past several posts have described various aspects of Micro Sawppy Beta 1 (MSB1) that are explorations of new ideas for a little rover. Since there were already many new ideas piled onto the little guy, I decided the control electronics and software should step back and reuse known quantities. Even though I don’t intend this to be the final approach, I wanted to reuse existing components here just to keep things from going too wild and confused if the little rover should encounter problems.

Hence the onboard electronics of MSB1 is very close to those used on Sawppy, which was in turn adapted from code written for SGVHAK Rover. Not from the official JPL Open Source Rover instructions, but the hack I hastily slammed together for its world premier at Southern California Linux Expo. Back then we faced the problem of a broken steering gearbox a week ahead of the event, and it would take over a week for replacements to arrive. So while Emily hacked up a way for a full-sized RC servo to handle steering, I hacked up the rover software to add option to control a servo via what I had on hand: the Adafruit PWM/Servo HAT.

Years later, I still have that same HAT on hand and now I have a rover full of micro servos. Putting them together was an obvious thing to try. My software for that servo steering hack turned out to be very easy to adapt for continuous rotation servos powering the wheels. (Only a single bug had to be fixed.)

There was another happy accident: since the SGVHAK rover software already had software provisions for steering trim, it was easy to use that for throttle trim as well. This was useful to compensate for the fact that the converted continuous rotation servos in the six wheels aren’t necessarily centered like they theoretically were. Resistors with identical markings don’t actually offer perfectly equal resistance, and the control circuit of a cheap micro servo isn’t very good about precise voltage measurements anyway. If I didn’t have this software throttle trim control, it might have been much more difficult to get MSB1 up and running.

For power supply I had a small 2-cell Lithium Polymer battery on hand, previously seen on these pages in exploration of a thrift store Neato. Dropping its voltage (8.4V when fully charged) down to something that wouldn’t fry the micro servos was the job of MP1584 buck converters. I had discovered these worked well for powering a Raspberry Pi and one of them is again enlisted into that role. In order to reduce the chances of a power sag causing the Raspberry Pi to reset, I added a second buck converter to give the micro servos an independent power plane. Both buck converters are soldered onto the little prototyping area Adafruit provided on their HAT. Once I had the electronics circuit stack assembled, I could start wiring up all the components.

Micro Sawppy Beta 1 Differential Link

All my Sawppy rovers big and small copy the rocker-bogie suspension geometry of real Mars rovers Curiosity and Perseverance. To distribute rover weight between its left and right sides, the two suspension rockers are connected to each other via a differential bar across the top of the body. The differential bar rotates along an axis that is perpendicular to rotational axis for the two rockers, which presents a bit of a challenge to link them all together. Each link connecting the top of the rocker to the differential bar needs at least two joints, and each joint needs to accommodate motion along two axes of rotation. The translation component isn’t much, but it’s definitely more than zero and a design consideration.

To properly handle rotation along more than one axis, we need to use a ball joint of some sort. Most people’s experience with mechanical ball joints are in an automotive context, or at least Wikipedia believes that should be the default. Smaller versions made for remote-control vehicles were used by JPL’s Open Source Rover and my Sawppy V1 copied their approach. (*)

I don’t think these are rare, but I also don’t know if I can safely assume these to be widely available everywhere. Also, it’s not guaranteed to be available at other sizes, which became a problem when someone wants to build a smaller or bigger rover. It was certainly a concern when Quinn Morley wanted to build a big rover, and these links were something that had to be changed.

So following Quinn’s lead, Micro Sawppy Beta 1 (MSB1) included my first exploration to alternate approaches. At this small scale, it might be possible to ignore that second axis and use single-axis joints. We might be able to get away with letting slop in the system or flexing of structural members to absorb that motion. The latter would be a benefit of using 3D-printed plastic, which would let us flex far more than the steel and titanium used by real Mars rovers.

The differential bar of MSB1 incorporated the links with a small “U” section that is intentionally made thin so it could flex, a design technique called a “living hinge”. I placed that U as far away from the rocker as I could, because a longer link translates to a smaller amount of flex for a given distance of movement. The top of the rocker incorporated a 623 bearing to handle one axis of rotation, and we depend on flexibility of the plastic to absorb the other axis. For really good living hinges, we need to print with plastic designed to flex, but for small movements like this we might be able to get away with the typical PLA or PETG printed plastics.

The experiment appears to have worked to some degree as visible in the short drive video posted to Twitter embedded above. The rocker-bogie suspension was able to perform its duty of weight distribution, and the (technically subpar) differential links posed no obviously visible hinderance to differential function. I’ll continue to iterate on this idea in future prototypes. And since the micro Sawppy line of prototypes are focused on exploring new physical form factors and associated mechanisms, I decided to reuse previously established electronics and software.


(*) Disclosure: As an Amazon Associate I earn from qualifying purchases.

Micro Sawppy Beta 1 Suspension Rocker

Micro Sawppy Beta 1 (MSB1) suspension bogie was a single 3D printed piece that incorporated all the features of its bigger sibling’s multi-piece counterpart. Sawppy V1’s suspension bogie was built from three 3D-printed parts, two aluminum extrusion beams, and tens of M3 fasteners. Going smaller on MSB1 allowed such integration, which was a great step towards a key goal of micro Sawppy: Drastically reduce the number of parts. I hoped doing so would make the project easier to do for relative beginners to build.

The suspension rocker, however, was much more difficult to integrate into a single printed part. Its unique geometry was dictated by position of four attachment points:

  1. Suspension bogie
  2. Front steering knuckle
  3. Body
  4. Differential

These four points do not lie on a plane in the suspension geometry of Curiosity and Perseverance rovers. Even though I was willing to be a little more lax about faithful scale dimensions, I couldn’t find a way to incorporate all the necessary components onto a single part that can be 3D printed flat on the bed without supports. (Supports are another thing I wanted to avoid, to make this friendly to 3D printing beginners.)

My intuition insists there should be a way to do it and still meet all structural requirements, which mostly meant avoid aligning layer lines along weak points making them vulnerable to fracture. But after several hours fruitlessly scribbling in CAD I resigned to a three-part print for MSB1. Maybe I’ll have a flash of insight for future versions, but MSB1 rocker is split across a front arm, rear arm, and center hub that clamps both arms at the correct angle and attaches to the differential.

I designed a little leeway where the front and rear arms meet, to explore turning the multi-piece construction into a feature. Maybe I can adapt the real rovers’ rocker deploy pivot. RDP is how Curiosity and Perseverance folds up for their trip to Mars and it was on my list of nice-to-have for an evolved rover. Without the center hub clip, these two parts can move a little bit but not quite enough to let the rover fold.

Once the clip is installed, the arms are not supposed to move relative to each other. But because I printed in ductile PETG I detect some undesirable movement. The forces are also tricky to handle in a FDM 3D printer, because no matter which way I orient the hub, it is still at risk of experiencing forces that will split it apart at layer lines.

Several thin hubs were broken before I ended with this thick unit. I guess it fits with the theme of stumpy limbs for a cute baby rover? Nevertheless the stout nature of this hub meant it is really difficult to remove once it is installed, so this variant of the RDP would not be very usable. At least it gives a very solid attachment point to the rover differential.

Micro Sawppy Beta 1 Suspension Bogie

Continuing the tour of micro Sawppy beta 1 (MSB1) from the ground up, the rear steering knuckles are attached to the suspension bogie. In Sawppy V1, the bogie’s attachment joint to suspension rocker had a mechanical design oversight: there were no mechanical limiters to rotation angle. I didn’t realize it was even a problem until Sawppy over-rotated during a climbing demo and flipped the bogie assembly, pointing mid and rear wheels skyward. Not only does it render Sawppy immobile, but it also puts a ton of stress on the wiring harness. I designed and installed a crude limiter to prevent wire breakage, but solving the problem more elegantly was on my to-do list. MSB1 represented the first attempt.

The joint itself is an adaptation of Sawppy V1’s design. A pair of bearings are embedded in the printed joint. On Sawppy a length of 8mm metal shaft is used as rotational axle, and the bearings are held in place with E-clips cut into the shaft. I wanted to move away from those clips so here I’m trying Ameer’s idea of using fasteners directly. In the case of MSB1, M3 screws.

A washer is used as spacer to give the bogie a little room to rotate without rubbing against the rocker arm, this aspect was the same as on Sawppy V1. (After I took this picture I realized the washer is shown installed on the wrong side, they’re supposed to be on the far side of the camera.)

I was wary of bearings damaging the M3 thread, but hoped the rover is light weight enough that it would not become a huge issue. That turned out to be secondary to a bigger problem: this design is very sensitive to how tightly the fastener was torqued down. In Sawppy V1 this wasn’t a problem because the e-clips stay in their slots. But as this screw is tightened, it presses down along bearing center axis. Too much pressure, and the bearing could no longer rotate smoothly. Too little pressure, and the joint rattles. This is a problem shared with a few other designs like the 4tronix rover, which mentioned this specific issue in their online assembly instructions.

I put that on my list of new problems to think about, and moved on to the old problem of over-rotation. I 3D-printed several ideas to interrupt rotation in some way and eventually settled on this design:

A little C-shaped piece of plastic that can clip into place over the M3 screw. One end goes over the head of the screw, and the other end covers the nut on the opposite side. This keeps its center portion in place between the rocker and bogie suspension components, preventing over-rotation. This draft is bulkier than it needs to be, I will thin it down for future revisions so it looks less like a big wart on this bogie’s connection to suspension rocker.

Micro Sawppy Beta 1 Steering

I had decided to use micro servos, converted to continuous rotation, to drive the wheels of my micro Sawppy beta 1. (MSB1) The next challenge was to design a way to steer the four corner wheels.

Given my fixation on using ball bearings to shoulder workloads in rover designs, it shouldn’t be a huge surprise that the first thing I worked on was a method to incorporate a ball bearing into my design.

Mounted at the bottom of a suspension arm with a single M3 screw into plastic, it will bear the weight of the rover and define this corner’s axis of rotation. It will also become the fulcrum for any lateral wheel movements pushing against the steering servo.

In consideration of these forces, the servo horn sits at the top of the steering assembly to maximize length of lever arm and minimize stress on servo gearbox.

I oriented the servo such that the wires are pointing towards the body. This seemed like the obvious choice for wire path management. And given that servo wires exit at varying locations from one micro servo manufacturer to the next, I had to design a “funnel” to accept a range of wire positions.

A consequence of this decision is that the steering knuckle is quite wide in order to give enough clearance to the body of the servo. This consumes precious space in such a tiny rover. At the rear of the rover, I wonder if this will clear the body.

At the front of the rover, it limits the amount of space available for a rover robot arm. This front view picture shows the steering knuckle is taking up almost a third of the width between steering servos.

Fortunately, I could shape the structure to minimize impact on wheel ground clearance. These wheels are quite happy to climb over obstacles with little risk of collision with the steering knuckle body. Which is one less thing to worry about as I moved on to designing the suspension bogie for MSB1.

Converting MG90S Metal Gear Micro Servo to Continuous Rotation

By default, remote control hobby servos are tasked to hold a particular rotational angle specified by its given control signal. However, a common modification is to turn them into “continuous rotation servo” where the control signal commands the motor forward or backwards without regard for position. This is useful for tasks like driving a little rover’s wheels.

Performing this modification is done by disconnecting the potentiometer from the output shaft, and replace it with resistors that will result in an unchanging resistance value. Such a servo will think the control shaft is always at center. So when given the command to move to a position off center, its control circuit will fruitlessly spin the motor trying to get to a position it will never reach, giving us our forward/back motor control.

Studying a few micro servos batches sold by different vendors, I’ve established there’s a fair amount of variety among generic micro servos. So these pictures will probably not exactly match whatever might be on hand for your project, but the general concepts should still hold.

This conversion starts with a standard servo with two resistors. The precise value isn’t very important, but they do need to be at least a few hundred ohms (so very little current flows through them) and they need to be as close to identical to each other as practical. I used two 1 kΩ resistors.

In reality, the two resistances will not be equal, and servos at this price range wouldn’t be very precise about voltage measurement anyway. So this conversion method should only be used when we have means to adjust throttle trim (a.k.a. defining the center point) in the control system. If our control system doesn’t have such adjustments, then the potentiometer needs to be preserved to allow physical adjustment. In the case of this project, I have software adjustment, so I could proceed.

Hopefully your micro servos are not glued shut and can be opened up by removing a few screws. In this particular type, removing two screws allow access to both the gearbox and control electronics.

Even though MG90S micro servos are commonly called metal gear servos, I’ve found that some of them don’t actually have all metal gears. They might have metal gear only on the final output shaft or maybe one or two intermediate stages behind that. This particular one is actually all metal, but of course there’s no guarantee on how strong the metal might be. What’s important right now is whether the final output gear has something that prevents continuous rotation. Not all of these servos have one. But if present, it needs to be removed. Hold that output gear securely…

And remove the stop.

Now the servo is mechanically able to rotate continuously, and we can proceed to electronics modification to the position-sensing potentiometer.

Hold the control circuit board securely.

Unsolder the three legs of the potentiometer.

Use the two resistors to build a voltage divider that evenly divides the voltage across either side into an average value on the center pin. This is what the potentiometer used to do at its center position, and now it will read as that position forever.

Reassembling all parts completes the conversion. We are left with a extraneous piece of mechanical stop, and a potentiometer that is no longer used to sense position. Now this motor can be controlled like a small gearmotor assembly with built-in H-bridge, perfect for mounting inside a micro rover wheel steering knuckle.

Micro Sawppy Beta 1 Wheels

Micro Sawppy Beta 1 (MSB1) is the test chassis I built to verify I could miniaturize concepts of my Sawppy rover down to a smaller simpler version built around micro servos. This tour of MSB1 starts at the bottom where the rubber plastic meets the road dirt. These wheels were a simplified version of Sawppy wheels, keeping the 48 grousers inspired by Perseverance rover’s wheels. The six wheels spokes don’t conform to the shape of the real thing, because that required multiple pieces made with 5-axis CNC machining and I wanted a design that is 3D-printable in one piece. But I did keep the curved spiral that also contributes to shock absorption, something also present in bigger Sawppy wheels.

I tried to carry over Sawppy’s wheel axle design, where a metal shaft is responsible for shouldering all the weight of the rover, helped by a few ball bearings. This freed the LX-16A serial bus servos from structural load duty, letting them focus on their job of turning the wheel to drive the rover forward/back. Unfortunately I couldn’t figure out a good way to scale down that design without inheriting all the problems.

Thus these wheels were mounted directly to the servo horn via some self-tapping M1.2 screws. Those fasteners were from an assortment kit of small self-tapping metric screws I found on Amazon (*) but I’m worried whether they are commonly available worldwide.

Fastening the wheels directly to servo horns meant the micro servo gearbox will have to shoulder weight in addition to their responsibility for driving the wheels. This force will be applied perpendicular to its axis of rotation and the micro servo gearbox isn’t optimized to handle that type of force long term. As an attempt to mitigate this, I decided to mount the wheel on the inside surface of the horn, shortening the lever arm by a few precious millimeters.

Despite my misgivings about this design, I decided to forge onward. Perhaps a micro rover is lightweight enough that gearbox wear would not be an issue, and building this prototype will tell me if there were other unforeseen problems with this approach. Before I can drive a rover with these, though, I’ll need to convert them from position control actuators into continuous rotation servos.


(*) Disclosure: As an Amazon Associate I earn from qualifying purchases.