Inspired by Roger and others, I'm making a SAWPPY-Alike rover, adding my own tweaks and mods.
I've decided to plant a flag on some of the 3D-printed aspects of Tenacity, makes notes to myself(and here) and move on. I've got lots left to do and can't really do it when axles snap every 10-30 minutes. I've been working on Tenacity for a bit over a year now and have been through a bunch of iterations of the drive, steering and suspension components and am ready to move on.
So, the question is:
Can you, in 2020, 3D-print yourself a robot that weighs almost 20 lbs and have it support its own weight and move around ?
I'm going to answer that with a qualified "Yes". First, you're not going to do it just with PLA, or even just with PETG. You will need Nylon or some sort of Nylon-like blend for load-bearing parts and even then you're going to be replacing long, thin parts pretty often. But Tenacity did take its first rolls on all 3D-printed parts, except for the 1515 Aluminum body frame, center suspension rod and various nuts and bolts. I was able to set it down on the ground and the rocker-bogie shafts and the axles on the wheels and the corner steering all bore the weight of the rover.
So, where I'm going from here is moving back over to metal for the long, thin parts like the axles and shafts(about which in the next post) because as much as I've enjoyed being a total materials geek, I really need to get to where I can have Tenacity reliably rolling around and start testing some software, get the ROS stack firmed up, etc. I'm excited that I got as far as I did, and certainly just having the printed parts get me this far has really helped bring my version of SAWPPY to life.
|ABS|| Steering & Drive shafts||Snapped off clean. ||A few hours||These snapped when going over a hard bump. |
Sometimes along the retainer ring slot, but more often where the part was held by a set-screw.
|Carbon Fiber-Nylon blend(NylonX)||Rocker & Bogie shafts, steering shafts, ||Deflected, but held up the weight of the whole rover. Broke under shocks/stress. ||Static:Indefinite |
Rolling/Operational: 10-30 minutes
|These snapped at the retainer-ring slots as the rover entered a turn at speed and the weight/stress shifted to one side. |
Nylon, even with carbon-fiber stiffening, really wants to be part of an object with some "bulk" and not a long, thin part.
|Carbon Fiber-Nylon blend(NylonX) ||Drive & Steering Shafts, motor couplers, wheel hubs. ||Steering shafts: Last longer than the rocker/bogie ones, but still eventually snapped. |
Motor shafts/axles: Rarely broke, deflected a bit.
|Steering : Hours to days. |
|The motor/drive axles are the real success story here. They are short enough to cross some sort of mechanical stress and volume threshold, even when the rover was going along at a good clip and swerving into turns, with the steering servos twitching left and right. |
I think I replaced maybe one or two of them and on analysis, found them to not have been printed at 100% infill. The solid ones didn't break.
The couplers and wheel hubs were also pretty indestructable and are still in place.
Again, chunky, substantial parts vs. long, thin ones.
|Polycarbonate (PC) ||Drive & Steering shafts, motor couplers, Wheel hubs. ||Split or shattered within minutes, sometimes even when a set-screw was being tightened....|
One important thing for a rover, esp. one that is capable of moving beyond line-of-sight is management/tracking of power. I've known I wanted some sort of networked, data-reporting battery and power management system. I feel like I have the software side of things down pretty well and electronics is sort of where I come up short. Fortunately, digging around on the Intercats for "Open Source battery monitor" or "ROS Battery monitor" or something similar, led me to this ROS-aware Battery Voltage Monitor.
The circuit itself is a big network of voltage dividers, which even I know how to put together, so not too horrible to put together over a weekend.
and the final realization installed on Tenacity, complete with readings off an 11.1V 5000 mAh LiPO battery shown as a ROS topic.
Here's some screenshots of some of the CAD I've been working on over the past month or two, while stuck inside because global viral pandemic.
Let's walk through a couple things in this image so you can get an idea of some of my plots and plans for when I can get back to working on Tenacity.
First we have these "sensor stalks". The one with the flat top is what's currently mounted on the rover. I'm playing with different angles on the top to incline a camera or LIDAR and give it a better view of the obstacles in front of it vs. seeing things at knee height and missing things underfoot. The one off to the left in the back is inclined 15 degrees. The one in the front is tilted 10 degrees.
As much as I've tried to keep the cable plant under control with twisting and flex-wrapping the cable bundles, velcro-ing and routing them along the corners, it's becoming obvious that I'm going to need to add an additional "equipment deck" above the top of the body box. The original impetus behind this was to have a place to mount a Jetson TX1, but the more I worked out what the compute and vision-processing system would look like, the more I realized I just plain needed more space.
So here's a quick sketch of what that might look, modeled in a mix of OnShape and OpenSCAD.
The bracket is slotted for a length of 1515 to be inserted to support the weight of the additional hardware mounted up top.
Finally, we come to this bracket here, which has been showing up in most of the images here and should be recognizable by most Sawppy Builders as the bottom part of the differential holder. When I was building my Sawppy last summer, I became rather captivated and inspired by this particular piece. I really liked how it fit into the upper part of the differential and how it clamped onto the crossbar. So I "repaired" the holes in Onshape to make it a universal mounting bracket.
I'll upload these to my GitHub fork of Roger's Sawppy repo in case anybody finds them useful.
Tenacity is back on the road!(carpet), fresh from what turned out to be an almost 3 month(-ish) refit.
A good bit of consulting work came barrelling out of nowhere right after the start of the New Year, so I've spent most of the past couple months taking care of the funding that makes this rover roll. "No bucks, no Buck Rogers" as a man once said.
One thing that kept breaking last fall was the keypad that was part of the chording keypad teleop control. Replacing that meant getting serious about a proper control system, which led to a complete rewiring and internal reconfig, but overall a much more complete rover and much closer to an actual completed first rev platform.
Current config is:
Most of the NylonX parts have snapped at this point. The suspension for the rocker/bogie assembly have been replaced with metal. The surviving parts are all the shorter or thicker bits like the motor couplers and drive shafts. The last of the steering shafts broke last weekend when Tenacity got rear-ended by a runaway DonkeyCar. This has provided me with an excuse to open a spool of polycarbonate (PC) and print off some replacement parts. We'll see how these fare compared to the nylon. I will do a longer post about the whole 3D-printed structural adventure and all the different materials I've tried at some point in the future.
-Get working on vision and navigation now that I have a driveable rover.
-Add power management support via an INA219 so I can get some sort of software visibility into the overall power consumption of the whole system and from there individual components.
-Sonar and maybe some bump sensors "for better hallway vision".
Anyway, that's an off-the-top-of-my head update on what's going on with Tenacity. Post below if you have comments or questions.
While I'm doing a lot of deep under-the-hood type stuff, I've noticed my little roving friend has been getting kind of antsy recently. Having tasted what it's like to rove and being stuck up on its crate over the holiday break, I've detected a distinct whiff of Grumpy Rover syndrome wafting about my hackspace of late. So, I've tried to appease my little friend with a means to express itself by adding a little USB speaker and it chose to quote one of my favorite movie bits back at me :)
Hang tight there buddy, you'll be back on your wheels in no time and roving better than ever.
(The more detailed update here is that I've been busy pretty much redoing the entire guts of the rover over the past month or so. In an attempt to get it ROS-ready and move on to a PI or Jetson from the Arduino(s) that were driving it this summer/fall, it turns out a complete rewiring was needed. Things are almost done and there's much more space to install needed boards, sensors and widgets than before).
I've "fixed" the steering axle that broke last week by cutting a new metal one out of the 8mm stock I have left over from Tenacity's steel differential shaft using the drill-press-and-hacksaw method to cut the grooves. Even when everything is properly marked and jigged, there's still a good bit of approximation and hand-waving going about. I also took the opportunity to look at the rocker shafts and fix some of the slop in how they fit against the body box. Suddenly, with those re-grooved and the gaps gone, the rover suddenly drives a lot straighter. There is still some drift, but it's over the course of several yards and not just a foot or so.
I also found an issue in the Arbotix Controller code that could see the Dynamixels being allowed to relax vs. being actively driven to maintain their position at all times. This could also cause some unintentional castering as well. There's one final bit of deflection to be taken care of at the rear, where the back wheel pods are splayed out a bit at the back. I don't think the other Sawppy-'bots out there that I've seen are doing this. In other words, the system as a whole is working well enough to highlight individual parts that need tuning and general work.
I'm going to be bootstrapping ROS onto the 'bot in the next few weeks, the question is onto what board. The temptation is to install a Jetson or other high-end board onto it, but the real "Curiosity" is really just a data-gathering platform with the processing being done back on Earth, plus space is kind of at a premium in the body-box there, so a Pi is a more likely choice.
So, after a successful evening roll around the Homebrew Robotics Club meeting, I was starting to drive the rover(Which, in the spirit of other rover names, I've decided to name "Tenacity"), towards the door, when it skidded to a halt.
Yup, I broke another steering shaft.
What you see here is NylonX at 100% infill snapped clean off during a turn, but not one it hadn't done earlier that night or day. These parts can clearly support Tenacity's weight at rest, and even in motion, but they deflect and eventually break with use. So far, all the 3D-printed shafts, other than the shorter ones for the wheel/motor pods, have failed.
If we look at the Sawppy Parts List, and in particular, the 8mm shaft stock docs, we see that the drive shafts are spec'ed to 50mm long and the others are 60-84mm long. So, 50mm by 8mm is some sort of strain limit for 3D-printed nylon parts, even if they're stiffened with carbon fiber. The other thing worth pointing out here is that each of the failed parts is getting shear forces either vertically or horizontally. The steering shafts sit vertically, attaching the steering motor pod to the steering servo. The rocker-bogie shafts mount horizontally. So this isn't purely a matter of not being able to bear the weight of one whole side of the robot. Nylon does best when used to make parts with significant bulk, for lack of a better term.
So, where to go from here ?
I have a spool of PC(Polycarbonate) and, of course, the STLs for all the related parts, so I'm thinking about giving that a go. I also have some 8mm steel rod and access to a drill-press again, so I could go the Poor man's lathe route. Right now, just to get the 'bot back on it feet again, I think this is the best, quickest, route to take.
Unless, of course, Matterhackers wants to sponsor Tenacity a set of shafts with their new metal filament and sintering service. What do you think guys ? (Baby) Rover needs a new set of shafts(shoes) !
We're rolling! I demo'ed the 'bot at the Homebrew Robotics Club meeting last night.
In the spirit of the names of the other actual rovers rolling around on Mars, I've decided to name this one "Tenacity" or more fully "S.P.R. Tenacity" with "S.P.R." standing for "Spare Parts Rover".
It feels great to get to this point!
I pushed up a bunch of changes to my fork of the Sawppy Repo, that, among other things, include a good number of the models I had to rework because of issues with the heat-insert holes on things like the Steering Knuckle assembly, wheel hubs, etc. being too big. This is not at all a slam on Roger or the work he's done, it's just the current reality of building things with parts made by a printer that doesn't cost as much or more than a new late-model car.
If you are going to be building something like a Sawppy be prepared to budget for failures, even if the print completes successfully. Things may just not fit right and post-processing may or may not help and you might have to resort to other methods to resolve the situation. For the Steering Knuckles that provide corner-steering for the rover, I did not re-print them but instead went with #6-32 inserts instead of the 3mm that are used elsewhere in the model. I would allot a whole extra spool for these sort of problems because printing them out at full-size in your final material is really the only way to figure it out. Resist the temptation to print out things in super-cheap PLA for fit-and-finish because it's going to flow and expand and contract differently than PETG.
Anyway, that's more of a ramble than I'd planned on about all this.
I got all the motor pods connected and running tonight. There's a bit of precession going on with a couple of them and I'm not exactly sure what's going on with that. It could be a wheel or axle that is not mounted entirely flush against a hub or mount or something. I'm going to take them off this weekend and investigate. The important bit though is that I can command each motor pod individually and that all the time I've put into wiring and mapping out the pins and terminals and everything has paid off. I flipped the switch this afternoon and all the wheels started rolling in the same direction at the same speed, first time off, which is HUGE.
I'm using 3 LM298N dual motor controllers, hooked up to an Arduino MEGA 2560 via screw-terminal shield.
That will ultimately be connected to a Pi or maybe even a Jetson that is running ROS.
For now though, I'm pretty psyched that I've gotten this far. Teleop control is just around the corner, hopefully sometime in the next week or so, after I get the precession issues sorted.