Inspired by Roger and others, I'm making a SAWPPY-Alike rover, adding my own tweaks and mods.
To make the experience fit your profile, pick a username and tell us what interests you.
Tenacity rolling through a local park
Portable Network Graphics (PNG) - 494.39 kB - 08/12/2021 at 05:26
I've been lucky enough to be able to spend some time with the Boston Dynamics "Spot" quadruped robot and one thing I noticed right away was that it does obstacle avoidance even in teleop mode. On many robot platforms, "teleop mode" is a kind of dumb joystick control where the motors are being driven directly by joystick input. If the driver isn't paying attention or doesn't have sufficient skill, it's entirely possible to drive it into a wall or off the top of the stairs. Not "Spot". It deftly weaves and jogs around posts and ducts in the middle of the room, stops in front of doors and halts at the edge of stairs.
This seemed like pretty low-hanging fruit to add to Tenacity, so I made a weekend project out of making some sensor mounts, installing them and writing up some code for an Arduino to talk to them and publish the data as a ROS Range message. There are two HC-SR04 sonars, left and right, on the front wheel pods and a V53L0X in the center for a "cliff sensor".
I CAD-ed up a mount to fit on the brackets of the steering columns. They conform to the part and clip into the holes on either side. The part is mirrored for a left and right mount. I wanted something I could mount sonars or even a small camera like an ESP32-CAM to, so I left the attachment space purposefully flat and blank with the idea that they'd get mounted via double-sided tape or velcro.
A Python script subscribes to the ROS /ultrasonic topic(s) and publishes turn decisions to /cmd_vel to do the obstacle avoidance logic.
Here's a demo. I'm driving the rover forward here, deliberately aiming it at walls, shelves and other random obstacles. It's really doing quite well I think. I don't think I could cut some of these turns quite this close even if I tried. I'd love to hear your thoughts and comments.
I got these in the mail the other day:
Sawppy builders will recognize these as the triangular wheel hubs used to mount the wheels to the drive shafts of the motor pods. My buddy Ed "Steamboat" Haas and I have been collaborating on replacing the 3D-printed parts of the motor pods that have failed most often with metal equivalents. We're about a 2-hour drive from each other and the pandemic hasn't made collaboration any easier, but we've both got 3D-printers and tools and Internet connectivity and the hacker mindset to do crazy things and this the result. A bunch of hand-machined, hand-tapped triangular wheel hubs that started life as a single piece of round Aluminum stock.
I had to do a bit of filing and Dremel-ing to get them to fit inside the wheels, but that didn't take long. The Aluminum is soft, almost butter-like in comparison to the steel axles.
I also had to grind out the detents on the axles a bit deeper and make them lie a bit flatter because the metal hubs don't flex and deform at all, so any angles or nubs in the detents showed up in the new hubs tilting against the shaft which led to the wheels themselves visibly processing when driven.
For somebody like me who knows just enough about materials to be dangerous, this was a bit of an eye-opener. I knew there were divots and digs in the shaft detents, even if they appeared mostly flat, but the way the PETG conformed to these, even under the tension of the set screw biting into the shafts really masked these imperfections quite a bit. Even after this additional filing, the wheels still process a bit when free-wheeling, but this is mostly damped out with the rover on the ground and the wheels come under weight. On a couple initial test drives, this doesn't seem to affect the way the rover drives. I kind of don't care for now because this rover is still such an experiment and the metal hubs should go quite a ways to solving my problems of having to do wheel maintenance and swap out PETG hubs after a day's worth of driving.
Ed has his own album up over on Flickr documenting how these were made.
He also has a lot of neat stuff over on his Thingiverse account
I've been playing with this idea of an "airless" tire for Tenacity for a while now. I like Roger's original design WRT faithfulness to the actual style and dimensions of the Perseverance Rover wheels, but I think they're going to wear pretty quickly in the off-road conditions I hope to have Tenacity rolling around in.
I like the design of the wheel "knuckles", and don't want to completely redo all that, so as an intermediate step I was thinking last weekend about "Hey, maybe I could give it some slip-on treads...".
So, here you go: Procedural, parameterized slip-on "snow-tires" for your rover !
OpenSCAD script here:
I just really could not be happier at this point and have been posting this everywhere else on the Intercats, so this page should get the update too :)
The new metal bits I described in the previous post are installed. Set screws are biting hard against metal vs. sqooshing into nylon. It's like a whole new rover!
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.
Become a member to follow this project and never miss any updates