General Purpose Autonomous Rover

Alright where’s the videos? :wink::rofl:

Must be the ones fund under play button, at the top of this page.
Edit : didn’t understand the joke from Hobbyfarmer.

Mine is still a work in progress. I just hit a headache that has taken me 20 hours to cure… turned out my ADS1115 had died. Diagnosing that was fun…

I’ll post a vid as soon as I get it working, I do promise :slight_smile:

Edit: Just while I’m here, may I clarify something?

I’ve installed the new ADS1115 and it seems to be working fine, but when I monitor the output in Serial Monitor, it’s not holding steading; fluctuating from 0,0 - 10.0.

Can I confirm that the value that needs editing for WAS calibration is

#define SteerPosZero

I’m fairly sure that’s right. I’ve had to put mine up to 2164 to get close to 0,0. Is this normal, or have I done something odd?

Am playing with the micro a bit. I have the turn radius set to 10 but the turn it does on the screen is is maybe 150 to 200. Is there more steering settings to make it turn tighter?

Edit: there must be different settings. The last turn was with 250 turn radius and the previous ones were 10. To bring things into prospective the tool I’m using is 10 wide

Capture

It will still only turn so tight. Set the max steer angle to max, make sure you are running standley. Make the wheel base larger. Set wheel base and tool width about 100 cm. Use dubins for the turns. Try turning your ab line 90 degrees if the you turns just quit half way. Lots of variables.

Edit: I’ve now modified the turning angle clamp to allow for tighter turns as well. Below is a 1 meter tool on a 1 meter wheel base. Everything turned up high. What has just happened in this view, the boundary sets the youturn angle to force the tractor to turn back on itself. This is that atan function that has given the small tool a fit from the beginning. It just gives up trying to turn and will set the steer angle to Zero and drive off at a tangent. Here it shuts off at the boundary. Earlier, I did some modifications to the main file, to run this sequence: If the you turn is triggered, follow sequence as normal, if the angle that it needs to steer is greater than can be calculated, just steer hard right (or left) until we can steer that angle again. That worked also. I allowed more control in the Stanley aggressiveness and overshot. 13 and 12 were good numbers in the simulator for the tool I was running. Gets bad jerky over that. But you can run it up to see what it does in the simulator. Original values were max 3 and 5.

image

1 Like

TADA!

Finally got this working after a lot of support from you guys, really appreciate all the help.

As promised, here’s a couple of short videos of it in action. Sorry for the brevity, I’ll do better ones soon, but it works remarkably well.

1 Like

Very nice!! Where is your GPS mounted?

It’s all a bit temporary at the moment, but the simplertk2b is in the small green box on the front. You can see the antenna stuck to the top.

Cool, Were you able to keep it inside of AOG with the geofence in the Micropengps? Or did you stick with the PI? How straight does it run?

I was using the standard V4 of AOG for this as I was having a problem with motor control with Micropengps, but I will try with MOG again later today (hopefully. Just when everything was looking good, guess which idiot just realised he left the laptop in the football field last night…!!)

I have the steering set pretty aggressively, no NTRIP running and rover-only (no base station). It was acutely holding the AB Line to within 1CM.

Will get back to you on MOG, thank you for all of your help with this.

Bummer on the laptop. Hope you fine it. I wonder about repeatability without the NTRIP? V4 should work just fine with the larger turning radius. MOG was just for the very tight radii. I’d like to see a picture of your steering assembly.

I have other laptops, so have rebuilt the system already. Unfortunately when I took it out tonight, it decided to rain so further testing will be completed tomorrow.

The vehicle is currently in my car so I’ll get you a better pic tomorrow, but here’s the steering assembly. It’s a windscreen wiper motor and I’ve used half of the linkages to drive a shaft connected to the steering rack.

The connecting bracket is set in the 9 o’ clock position so, if the motor moves clockwise, then it drives the steering to the right (and vice versa).

The wiper motor has masses of torque, so it manages small adjustments in steering very well. You can also just about make out the ride height sensor on the opposite side of the steering column to the wiper motor.

It’s all driven by an old 12V UPS battery.

1 Like

Actually, here is a video I took of the first attempt at this on a mobility scooter.

Right…

Is it possible that some of the headaches I have been having are due to the fact that I had about a dozen AOG directories in appdata\local? I cleaned this out, fired up MOG, calibrated the SteerPosZero and it’s running like a dream. Didn’t need recalibrating after a reboot either.

1 Like

And a year later…

It’s been busy, covid lockdown really restricted my ability to test things and sapped a lot of motivation, but it looks like we are through the worst of it and so I’m all motivated again.

Having now built a couple of PCBs, the cart is now upgraded to a stable PCB v2. I’ve tired to get this working with Micropengps, but hit problems and so installed v5 which worked out of the box.

Long shot, can v5 also be set to trigger a relay that kills the main motor if a geofence is breached? You did add this feature for me before, just wondering if it would be a chew for you to do the same with v5?

Big ask, if you don’t have time, then I’ll go back to an earlier version.

Got this vehicle on full remote control now with both manual and remote (Wi-fi) control for speed and direction. Just need it to kill a 24v drive motor before it runs off into a ditch!

If I recall we set the last section (#16) to on while in the geofence and off when breached. Is that correct?

Yes, the last section was reserved for this relay. On while inside the geofence, off when geofence broken.

This has all the sections above seven turned off. 8 is the geofence byte. It does not have the small radius or the modified angular velocity or the crunched U-turn. Make sure you are in the MicrOpenGPS branch before downloading.

MICROGEOFENCE

3 Likes

Did you put the geofence back in v5?

No, it was a hack. Just before it builds the machine byte, it checks to see if it “IsInsideGeoFenceAKABoundary()” if so, turn on section[7], if not turn it off. This section and all sections above, the visibility was set to false. Then just noted that they are not available in the config. form. Below is the modified BuildMachineByte() routine.

 private void BuildMachineByte()
        {
            int set = 1;
            int reset = 2046;
            p_254.pgn[p_254.sc1to8] = (byte)0;
            p_254.pgn[p_254.sc9to16] = (byte)0;

            int machine = 0;
            if (bnd.bndArr.Count > 0)
            {
                if (IsInsideGeoFenceAKABoundary()) section[7].isSectionOn = true;
                else section[7].isSectionOn = false;
            }


            //check if super section is on
            if (section[tool.numOfSections].isSectionOn)
            {
                for (int j = 0; j < tool.numOfSections; j++)
                {
                    //all the sections are on, so set them
                    machine |= set;
                    set <<= 1;
                }
            }

            else
            {
                for (int j = 0; j < MAXSECTIONS; j++)
                {
                    //set if on, reset bit if off
                    if (section[j].isSectionOn) machine |= set;
                    else machine &= reset;

                    //move set and reset over 1 bit left
                    set <<= 1;
                    reset <<= 1;
                    reset += 1;
                }
            }
            


            //sections in autosteer
            p_254.pgn[p_254.sc9to16] = unchecked((byte)(machine >> 8));
            p_254.pgn[p_254.sc1to8] = unchecked((byte)machine);

            //machine pgn
            p_239.pgn[p_239.sc9to16] = p_254.pgn[p_254.sc9to16];
            p_239.pgn[p_239.sc1to8] = p_254.pgn[p_254.sc1to8];
            p_239.pgn[p_239.tram] = unchecked((byte)tram.controlByte);

            //out serial to autosteer module  //indivdual classes load the distance and heading deltas 
        }
3 Likes