I haven’t heard much feedback on the next topic, this is mostly my experience with my own Sawppy. The root cause here are the output shaft angle sensors used in inexpensive servo motors such as the LewanSoul/HiWonder LX-16A serial bus servos used on my rover. For the most part, they are just inexpensive potentiometers, and they are not terribly consistent. In practice, this means steering angles on each of Sawppy’s four corner steering servos are a little different for every Sawppy driving session. I don’t know all the variables involved, there’s probably some combination of temperature, humidity, or maybe even the phase of the moon. Who knows?
One solution is to buy better components with precision angle sensors. But since an overriding goal of the project is to keep the rover affordable and accessible, I’m going to resist going down that path as much as I can.
Sawppy was designed with a way to adjust steering center angle. What I had in mind were the set screws and where they dug into the steering shaft, which would have been a relatively unmoving thing. So Sawppy steering trim is adjusted by the rover chassis configuration file that is loaded by the software at bootup. This would have been fine if it was something a rover builder only had to do once when building the rover. I did not anticipate steering would fall out of trim on a recurring basis, and requiring this file be edited for every driving session is a huge hassle.
SGVHAK rover also had a trim adjustment issue. That rover’s steering motors had relative encoders but had no homing reference point so it didn’t know where “straight ahead” was upon bootup. Since I expected it to have to be adjusted on every startup, I added a menu in software to perform steering trim adjustment. This is friendlier than a configuration text file, but it was a multi-step process that takes at least thirty seconds per corner. I still consider that too much work.
For a future rover revision, I intend to add some mechanical mean to compensate for drifting potentiometers. I want to loosen something (using screwdriver, or wrench, or even a tool-less contraption if I’m clever) to release the corner steering mechanism, steer the wheel by hand to desired alignment, and tighten things back down. Ideally I want to adjust the steering angle in under 10 seconds per corner.
The JPL Open Source Rover uses high quality (and expensive!) steering angle sensors. The sensor angles have no such drift to speak of, but the steering shafts do sometimes slip inside their steering couplers resulting again in misaligned wheels. Fortunately, these sensors are easily accessible and with a crescent wrench I could turn the sensor inside their mounted position to adjust trim. This is the kind of adjustment I want.
I have a very crude equivalent for Sawppy right now. Sometimes I have an emergency and need to adjust steering trim in a hurry. I can loosen the set screw in the steering servo coupler, steer the wheel manually, and tighten that set screw back down. This only worked because the set screws I bought from McMaster-Carr are much harder than steering shaft material, so tightening it would dig a new hole at the desired position. But I could only do this a limited number of times before the shaft is too chewed up to hold any angle and I need to cut a new shaft.
But it taught me that a mechanical steering trim adjustment mechanism is fast and easy to use. I just need to find a way to preserve that user experience in a more well-thought and more enduring design. Even if Sawppy’s suspension system is rather underutilized most of the time.