The title of this thread is locked, presumably due to the length of time it’s been active, but the it should read: now beta6
I put some serious work into the mower over the past few days, and I think it really paid off.
First, I uploaded a video detailing the wifi enabled fixed base/telemetry station that I’ve been using for most of the project. I’ve hardly touched it in over a year - it just plain works…every time! I know many of you have been asking for more details, and I intend for that video to be the first of several in a series.
Then, partially motivated by this breakdown, and mostly because there was just too much monkey motion between the steering servo horn and the transaxle (with a ton of stacked washers as makeshift spacers and no good bushings/bearings anywhere), I upgraded the steering linkage and removed nearly all of the free play in the system.
My first attempt failed. I didn’t realize just how close the rear tires are to the frame, and my servo mount interfered with the tire.
So I changed things up a bit and mounted the servos inboard. Thankfully, the Heim joints have enough articulation available to remain free throughout the range of motion.
I was kind of proud of the creative use of fasteners in the pic below. I wanted to solidly locate a 1/4" bolt through the 7/16" hole in the top of the transaxle control plate. It turns out that a #8 washer is a perfect press fit for that hole, so after carefully drilling a few of them out to 1/4", I pressed 3 of them into the hole using a bolt, washer, and nut. It really worked well!
If you’re not interested in clicking the video links, here’s a picture of the linkage I made. It’s only mocked up in this picture. Final install included lock nuts, LocTite, and some zip ties to tidy the wiring.
The resulting linkage requires a slightly shorter throw of the servo arm than previous and achieves full stop-to-stop motion, where the previous version actually couldn’t quite push the control plate to the full forward position. As a result, I had to redo all of the SERVO1* and SERVO3* PWM parameters.
I used the Servo Output page under Setup in Mission Planner to set the end stops by visually observing the PWM value where the plate was at full travel, and then I jacked the mower up and started the engine to roughly set the trim values to neutral (no wheel movement). I then fine tuned the trim values using @ktrussell’s wheel tracking method, where you put a piece of tape on each wheel (still jacked up off the ground), push the RC stick forward in manual mode, and tune the trim values up or down to achieve the same wheel speed on each side.
Since the servo travel is significantly different now, it was necessary to retune the throttle and steering parameters. Because the mower was already pretty well tuned previously , I was able to use a waypoint file and auto mode to do much of the tuning (in a wide open spot). A word to the wise - don’t underestimate the importance of CRUISE_THROTTLE! Set it first and get it right (or undershoot slightly, I think).
Once the throttle was tuned, I moved on to steering. The lack of free play in the system was apparent, and everything was more responsive. I was able to slightly increase the FF gain, and I noticed a probable error in my previous tune with a very high I value, and things calmed down a bit when I backed that off. I then moved on to pivot turn tuning, mostly just messing with ATC_STR_ANG_P in small increments until it nailed the heading on each turn.
When things were looking pretty good, I fine tuned the WP_RADIUS parameter to ensure that the mower pivoted as close to the actual waypoint position as possible. I already have the ATC_ACCEL* and DECEL* parameters about as aggressive as I can make them, so changing WP_RADIUS is the mechanism I used to ensure pinpoint turn precision. I think too small a WP_RADIUS can have ill effects in waypoint nav, so be careful setting it too low (or zero). I ended up at 0.43m.
With the mower turning almost exactly on top of each waypoint, I was able to really dial ATC_STR_ANG_P so that it exits every turn with minimal under/overshoot.
Lastly, I wanted to see how the GPS_POS* and INS_POS* parameters might help or hinder things. When I tuned my quadcopter, I recognized just how precise these flight controllers can be, and how important “perfect” inputs are. The big lumbering mower masks some of the precision available within the flight controller, so I got great results without worrying too much about the exact science of accelerometer or GPS position with respect to turn axis. But now that the steering and speed were pretty dialed in, perhaps there was more to be gained.
I took some careful measurements, referencing the rear (drive) axle centerline, which should be the pivot axis. The GPS antennas were only about 2" aft, but I entered a negative X offset to account for that, nonetheless. The Cube is almost a foot forward of the rear axle, so I entered a positive X offset. Just for grins, I entered a negative Z offset for the GPS antennas as well, since they are nearly 2 feet above the flight controller.
The result was quite interesting! I had to retune the steering parameters slightly, and what minimal overshoots I had became less. In fact, it appears that things are dialed in so closely now, that I can determine that the mower doesn’t do perfect pivot turns. It looks like the outside wheel travels a little farther than the inside wheel, making a little diagonal trace on each turn (pic below). I’m curious to see if I can bias the servo trim a little toward the reverse direction and get even closer to perfect.
EDIT: Alternatively, perhaps I have the GPS_POS*_X a little too far forward with respect to the actual pivot axis. Since it’s easier to change that than to retune the servo output, I’ll try that first and, if that works, bias INS_POS*_X rearward by the same amount. I expect that I’ll have to increase WP_RADIUS by the same value as well to keep things on track.
Ok, enough of the diatribe. Results! This is probably the single most perfect mowing pattern I’ve ever achieved, and I’ve gotten some pretty good ones! I ran out of daylight (and solar battery on the fixed base), but for the 6-9 passes I got done, I saw absolutely no skips, even when the mower reversed direction, which is typically the most problematic spot. There’s still just a bit of nav/steering oscillation that looks worse on the MP screen than it does in real life. I’ll report back if I ever solve that entirely.