I think this is too broad a question for simplistic answers. First, you need to determine WHY it veers. It could be anything from your algorithm to noise to a mechanical issue to a software bug, to loss of GPS, etc. Maybe, as far as the robot is concerned, it’s going exactly where it’s supposed to. Maybe the motors aren’t powerful enough to overcome terrain issues. I could go on.
Does it ALWAYS veer to the right, or only sometimes? Does it exhibit any other erroneous behaviors? Are you just using GPS to control it’s motion? How robust is your GPS system? For example, GPS in a cellphone is only accurate to about 15 feet.