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.

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.

Micro Sawppy Beta 1

With mechanical foundations established, it took a few weeks of experimentation to get to Micro Sawppy Beta 1. (MSB1) My first running test of a small Sawppy rover, this prototype verified I could make a rocker-bogie rover chassis using micro servos for all electromechanical articulation. It was also my first time veering away from mechanical scale fidelity, altering proportions towards a cute baby rover.

Since the focus was on rocker-bogie suspension design, I didn’t put much effort into the rover body for this chassis, it’s just a minimalist box. This follows the precedence of NASA JPL’s “Scarecrow” rover which was likewise a test chassis for Curiosity rover’s rocker-bogie suspension and has no body to speak of. It also has no onboard computer processing, and this lack of electronic brain is where its “Scarecrow” name came from.

MSB1 similarly has no onboard autonomy, but that matches my Sawppy V1 rover which never got software beyond turning it into a remote control vehicle. In fact, like my Sawppy, MSB1 is also running the software I wrote for SGVHAK rover. Shortly before its public premiere, SGVHAK rover needed software support for a steering hack with remote control hobby servo, and I reused that code base for this micro servo rover. What was slapped together for a single steering servo was expanded to cover servo control for four steering servos and wheels driven by six continuous-rotation servos.

Using SGVHAK rover code, running on a Raspberry Pi 3 with the Adafruit 16-channel PWM/Servo HAT, was the most expedient way to get MSB1 up and running. Following ExoMy’s lead, I had put some effort into wire management, but the end result is a tangled mess because I made a miscalculation somewhere in the scarecrow body box for this rover. It was too small to hold a Pi 3 with the servo HAT, so those two circuit boards were forced to dangle outside the box and now everything is a mess. Ah well, that’s why we do prototypes.

So let’s take a little tour of MSB1 from the ground up, starting with its wheels.

Little Sawppy Rover Intends To Be Adorable

I do tend to catch myself obsessing over tiny mechanical implementation details, and I have to periodically remind myself that they all have to work in service of overall project goals. The primary goal of the little Sawppy rover is to make a DIY motorized 3D-printed Mars rover model accessible to people that would be otherwise excluded by the larger rover. A lower cost to make it within reach of those who found Sawppy too expensive. Fewer parts and easier to build for those who found Sawppy too complex. Which has a side effect of a smaller size for those who found Sawppy too big and bulky.

The smaller size also opened another path that I wanted to explore: not just a little rover, but a cute little rover. Sawppy mostly followed the scale and proportions of Curiosity rover. Most of the deviations came from when I made sacrifices to make parts easier to 3D print. But as soon as I saw the cute rover illustration for JPL’s Mars 2020 naming contest I knew I wanted to make a rover that willingly sacrifices scale fidelity in order to gain physical appeal. This was reinforced when I learned of ExoMy. Which took the designs of ESA ExoMars mission rover Rosalind Franklin, and turned it into a cute rover with a smiling face.

My little Sawppy rover can’t help but look cute next to a full size Sawppy, like a duckling following around mama duck. Rather than putting up any futile effort to fight it, I plan to lean into the cute angle. Aside from just the sheer fun of it, I also hope a cute appearance will make the project appealing and attract an audience who would otherwise be less interested in a mechanically faithful scale model.

From a design standpoint, this means changing around some proportion on the little rover. Adapting counterparts to traits that we humans instinctively associate with young animals. Following ExoMy’s lead, a little rover will start with the following:

  • Replace the mast camera assembly with a larger anthropomorphic face as ExoMy did. This is analogous to how young animals have larger heads relative to their body and big eyes on those heads.
  • Shorten individual segments of the rocker-bogie suspension, corresponding to proportionally shorter limbs of young animals.
  • Wheels that are larger than scale, emulating proportionally larger feet of young animals. However, this is less important than the previous item: once the suspension segments are shortened, the wheels will naturally look larger in comparison even if I don’t make them larger than scale.

But that is only a starting point, there are many other potential ideas along those lines:

  • Faster motors and a drive system that allows it to come across as high-energy relative to more sedate “grown up” rovers.
  • If some sort of vocalization are to be added, the little rover would have a higher pitched voice.

I expect it’ll take several iterations before I get a decent design for a little Sawppy rover. Lessons learned and incorporated as I go, starting with prototype number one.

Accommodate 3D Printer Variation With Crush Ribs

For Sawppy V1 I tried to create a design that would be tolerant of variations between 3D printers, but I failed to overcome two problem areas. Both are where 3D-printed plastic mated up against unyielding metal. One area were holes for 608 bearings used in each axis of rotation, a feature I plan to keep and scale down by using 623 bearings. The other area are holes for heat-set inserts, which has proved problematic in multiple ways and thus something I am now trying to avoid.

To deal with the bearings, I reminded myself exactly why they are a part of my rover designs: smooth rotation. The bearings are to ensure loads are carried through axes of rotation without introducing friction that could bind up. Friction is especially bad in the rocker-bogie suspension system, because it is a completely passive design for distributing weight of the rover across all six wheels. If any of the joints seize up, then the rover’s weight would not be distributed properly.

So smoothness of ball race bearing are the critical feature here, and the fact they have the strength of steel is less important. Weight of a rover is a tiny fraction of the maximum weight capacity of these ball bearings, which means I have the option to mount ball bearings using crush ribs. This is a concept I read about on Hackaday and I think it is appropriate to use for a small 3D-printed rover design. Previously I would allocate a cylindrical cavity to hold a bearing, but that meant the precise diameter of the cylinder became critical for a proper fit. Too large, and the bearing would move about loosely. Too small, and the bearing could not be inserted or perhaps damage the surrounding plastic during installation.

So instead of trying to hit the perfect diameter in a smooth cylindrical cavity, I could design a slightly too-large hole but with a few small ribs inside. When a bearing is inserted, the steel outer race will push little extraneous bits of plastic out of the way and dig itself a cozy home in between these ribs. If a 3D printer prints a little more or less than ideal amount of plastic, the size of those ribs would change but it is easier for a bearing to crush small ribs than to reshape the entire cylinder.

This approach has two problems:

  1. The bearing load is transmitted only through these small contact patches. But again the forces here are small and could be handled by the crushed ribs.
  2. The center of the bearing will end up in an unpredictable location. It will be within a small range but the actual position will depend on which ribs give way more than others. Fortunately, precise location is not critical for a little rover.

These problems make crush ribs unsuitable for most precision metal machining, which demands high precision for metal parts to work together. But we are in the world of 3D printing, where tolerances are quite loose relative to those seen in machining. Crush ribs allow us to turn the problem of loose tolerance into a feature and I can proceed with mechanical design for a cute little rover.

Type 623 Ball Bearing For Small Rover

I want to design a smaller and affordable variant of my Sawppy rover. I’ve been looking over the mechanical and electronic properties of micro servos I intend to use as the little rover’s actuators. They represent the biggest mechanical unknown due to the variations between products in this generic category. Thankfully, consistency is much better in the other mechanical part impractical to 3D-print: ball bearings.

Using ball bearings are apparently “My Thing” when it comes to designing and building rover models. When I reviewed other rover projects earlier, several didn’t use ball bearings at all, and most of the rest only used ball bearings on a subset of rotational axes. I want to put them everywhere I can!

Every rotational axes of Sawppy V1 were supported by ball bearings that went by the designation 608. I first came into contact with this type in the context of rollerblades, and they’re popular in other related wheeled footwear such as roller skates and skateboards. However, 608 bearings would be unnecessarily large for a little rover, so I went back to the well of mass-produced commodity ball bearings to find something suitable for a smaller rover.

My primary criteria is an inner diameter of 3mm, because I thought M3 would be a good fastener to use for the little rover. It is a metric standard commonly available worldwide. M3 fasteners were also used extensively in Sawppy V1, but they were on the small side so I compensated with sheer numbers. That was a design decision I regretted and want to fix in the future. For the little rover, M3 would be relatively big and strong so I would only need a few of them.

There are several different common bearing types with a 3mm inner diameter, and an unscientific poll of Amazon vendors hinted the 623 bearings (*) are the most popular and least expensive among them. I thought it was interesting that they were still more expensive than the batch of 608 bearings I bought (*), and I take this to mean that significantly more 608 bearings are produced than 623. Either that or I have yet to find the right outlets. A little rover can happily use cheap 623 bearings that have failed rigorous quality assurance tests for industrial use, as those “bad” bearings will still be far superior to nothing at all. But for now I’ll be content with the lowest bidder of the day. (*)

Like 608 bearings, the letters and numbers surround 623 designate various other related features, such as how the ball bearings are shielded from the environment. But 623 itself is the important part here, as it describes an inner diameter of 3mm, outer diameter of 10mm, and thickness of 4mm. And generic 623 bearings will follow these dimensions much more tightly than generic micro servos adhere to their mechanical dimensions. Which is one less thing to worry about when I already have to compensate for varying dimensions of 3D-printed plastic that will host these bearings.


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

Notes on Micro Servo Electronics

Examining my batches of micro servos unveiled a lot more mechanical variation than I had initially expected, even before we get into fine details like plastic injecting molding draft angles. But I got enough of an understanding to start pondering how I’d mechanically accommodate designs across the generic spectrum, so I started looking at the electrical side of things. Given the mechanical variations, I now know to expect their electronics to be different, and that was the correct attitude.

Three micro-servos from three different batches, and a casual glance is enough to tell there are three distinctly different control boards. (Plus examples from a fourth batch, in other pictures of this blog post.) Two of them have the motor soldered directly to their PCB, the third example here has a smaller circuit board but then must take the extra cost and assembly processing of motor wires. The three potentiometers are slightly different, but all of the motors are externally identical. Implying a commodity form factor that I am currently ignorant about, but can set aside to investigate later.

In their product listings, all of these micro servos were listed with an operating voltage range from 4.8V to 6.0V. This traces back to the days of hobby remote control receivers, which can operate from 4 Nickel-Cadmium rechargeable battery cells in series. Each cell has a nominal operating voltage of 1.2, so 4 * 1.2 = 4.8V. However, the voltage of a fully charged cell is 1.5V, so servos must be able to tolerate up to 6V.

To explore the low end, I connected a servo tester to these servos and drove them at 4.8V. While all of the SG90 seem to operate well at that voltage, there was a surprising outlier in the MG90S. One batch could work at 4.8V, but just barely. If the voltage drops below 4.8V at all it stops responding. This could happen when the battery cells get low. This could also happen when connected to a servo extension cable, or by the jumper wires I had used.

I found this curious. Does it mean this particular servo design expected higher voltage? For full size servos, it is now fairly common to accept nominal power of 7.4V, which is two lithium chemistry battery cells in series. Perhaps this particular micro servo was designed for lithium batteries? I increased the supply voltage up to 7.4V and it continued to function. But that is nominal voltage — fully charged lithium rechargeable batteries deliver 4.2V per cell or 8.4V for two cells in series.

Supplying this micro servo with 8.4V resulted in an audible pop and a visible flash. This gave me an answer: no, this micro-servo is not designed for lithium rechargeable batteries. Taking a closer look at the control board, I see a hole in the control chip right next to the power supply wire that delivered the killing 8.4V. In this picture a red arrow points to the hole, and I held up another control board from the same batch (without hole) for comparison.

Now that I’ve established 4.8V is too low for reliable operation with certain generic servos, and 8.4V is definitely too high, I’ll aim to supply somewhere in the 5V-6V range. With that electronics baseline established, I switch focus to the bearings I will use for this micro servo Sawppy rover.

Notes on Micro Servo Horn

I had toyed with the idea of 3D-printing parts that would bolt directly onto a micro servo’s output shaft. But after studying the variation in output shaft dimensions from a few different batches, I’ve changed my mind and plan on using the servo horns that come bundled with each servo. These horns will have the best chances of fitting and matching properly.

Even though these servo horns are all plastic, there are differences beyond cosmetic color: they also vary in thickness and strength. Servos sold under the MG90S category usually (but not always) have stronger servo horns than those sold under the SG90 banner. Here I am pushing two servo horns against each other and we can see one deflects much more easily.

The next challenge is the variation between their shapes. All of these micro servos came bundled with three horns, featuring one, two, and four protrusions from their center hub. The smaller protrusions found in the four-point version seem to match, but they wouldn’t have much leverage. I wanted to use the larger protrusions, but here we see variations as well. There appears to be at least two popular profiles, with slightly different shapes, lengths, and number of holes. I don’t know the history here, but I assume there were two popular types at one point and these generic models copy them both. Lacking names I will just refer them as SIX and SEVEN after the number of holes in each profile.

It would be convenient if the holes on SIX lined up with the first six hones on SEVEN, but no such luck. They have slightly different spacing. It also seems popular to have both profiles represented on the four-protrusion variant of the servo horn, making it asymmetric.

This particular SG90 servo has the asymmetric four-protrusion design, SIX on the right and SEVEN on the left. The two-protrusion design is symmetric with SIX on both left and right. For the smallest horn, it decided to go with the SIX profile.

This particular MG90S made similar choices for the two- and four-protrusion horns, but the smallest horn went with the SEVEN profile instead.

This pattern seems to hold with the servos I’ve bought to examine, but I don’t know how far to trust that observation. Are there micro servos out there with SEVEN+SEVEN for their two-protrusion horns? Are there any using symmetric four-protrusion horns? Just because I don’t see them in my batches doesn’t mean they don’t exist. This is all very puzzling to me because I’ve seen designs for 3D printed contraptions that incorporate slots in the shape of these horns. How do they account for these variations?

With all these variables in thickness, strength, shape, length, it’s not obvious how to design a rover that can employ arbitrary generic micro servos. This is a challenge to ponder.

But to end on a bit of happy news, it seems like there’s one final de-facto standard dimension that all these designs adhere to: despite the variation between servo horn thickness and mounting tab thickness, it appears that the distance between the bottom of the mounting tab to the top of the servo horn is fairly consistent. Again there’s no guarantee all the micro servos out there would adhere to this convention, but at least it gives me a starting point on mechanical design as I move on to look at the electronics within.