WOW!!! That is cool!!! Very nice job so far.

After a quick look at the code I see a lot of things going on between range checks.
Just wondering what would happen it you setup a timer to trigger an interrupt routine.
The interrupt routine would be the range check. That way the range would be know almost instantly for corrections.

Or add range checking in between the IF/ENDIF statements. Places like this
Code:
aftermain:
gosub skidandreverse                           
frontfreetostopreverse = frontfreetostopreversesetup
 

if rangefront < frontfree then 'turn left as there is something ahead in front

gosub SteerFullLeft

goto main 
endif



IF rangeright = 0 then
endif

if rangeright > outertrack then 'turn right as we are too far away
gosub SteerHalfRight
endif


if rangeright < desiredtrack and oldrangeright < rangeright then
gosub SteerStraight  
endif 
        
          

if rangeright > desiredtrack and oldrangeright > rangeright then
gosub SteerStraight  
endif