Your reasoning is partly correct and partly not.
As the script is now, and if motor compensation is set correctly at 200, we will have a gap at any low current / small stick movements etc from stationary.
Not quite. We will have a gap when BatteryCurrent = 0. PWM 200 is a good bit higher than the point at which battery current registers and I chose that for basic MotorResistance tuning to be sure that it's never in that 0 battery current condition. On your mobot, on its wheels, you start to read BattI = 0.1A at about PWM = 100 when not turning, but it will be at lower PWM when turning because scrubbing load increases current. On Rachi's chair, the lower impedance motors give BatteryCurrent of 0.5 A at PWM = ca. 50 (when not turning), but the chair is barely moving at PWM = 50. Battery current is measurable when barely above PWM = 0 if starting a turn in place (horrid casters and CG). So on your chair there is indeed a gap to be filled; up to PWM = ca. 100 going straight. If you put some weight on the mobot, such as the mower assembly, I'd expect the gap to be smaller. On Rachi's there's a tiny gap going straight and essentially none for t-i-p. It's because that gap is big on the mobot that this attempt to avoid sensors may end up having been a wild goose chase.
Adding low boost seems to do the wrong thing. In that it adds arbitrary boost to fill in that gap. But it isnt load sensitive.
Yes and no. It is not sensitive to variation of external mechanical load, but it is sensitive to intrinsic motor load. The logic was this. For an ideal mobot motor and constant external load, battery current will go from 0 A at PWM = 0 to 0.1A at PWM = 100. Motor current is undefined at PWM=0 (0 divided by 0 = ?) , but after that it will be constant. I've called that constant LowIBoost. That's for an ideal motor and is conservative for a real motor - there will be too little compensation at low PWM. That linear assumption could be modified if necessary, to match the power curve of the real motor, but it will still never be responsive to external physical load below battery current = 0.1 A. If physical load is added, such as carrying more weight, turning, climbing over an obstacle, or going up-slope the transition to battery current = 0.1A will come earlier, and then compensation does become physical load sensitive earlier as well, but there will still be some gap. On Rachi's chair the gap is so small that the value of LowIBoost turns out to be almost irrelevant over a very wide range of numbers.
The amount of low boost added before the roboteq reads anything, may need to be a lot, or even negative if turning on a slope for eg.
Quite correct. Within the 0 battery-current gap there will be no physical load compensation. This is less of a problem on the positive-load side as the zero current gap gets smaller as load increases, but the gap still extends to PWM = 40 or so for the mobot with the motor stalled. It will, however, absolutely give a speed-up when loads go negative. Again, the existence of this gap may make sensorless-operation unworkable for the mobot, but it does work on Rachi's chair and it should work on the BM3 (lower impedance so higher current at low PWM) and even better on Will's chair (yet lower impedance - so much lower with brushless that you need controller-limited current at very low PWM; it will trigger stall detection if it's made too sensitive - the same phenomenon that made the Invacare Explorer unworkable for you).
There was a similar "going negative" problem with CompTurnBoost for turn-in-place on Rachi's chair - after the caster has swiveled, load drops and there was a feeling of overshoot of turn rate. But at turn start it's outside the 0 current gap on her chair so I was able to detect this as a drop in battery current and simply bypass CompTurnBoost as soon as the the turn has gotten underway. So there's very strong boost to swivel those treadlesss, square, overloaded casters, but no overshoot afterwards. Again, however, this depends on having measurable battery current at least when starting the turn, so it's not applicable to negative loads within the 0 current gap. The same kind of bypass logic could, however, be easily added to remove LowIBoost if a negative load makes battery current go from 0.1 A to 0. That is, don't do LowIBoost if the last reading of battery current was > 0. Or perhaps better yet, bypass LowIBoost if any of the previous n battery current readings was > 0 - that would get rid of any sudden swerve or speedup while slowing down or when coming down off an obstacle. But I won't code that for now. I don't want to add any more complexity until I see how things are behaving when the current design is tuned the way I advised. I may decide to invest my mental energy in figuring out how to make current sensor failure safe instead.
To summarize, sensorless control may not be usable with lightly-loaded, high impedance motors, but only systematic testing is going to let us really know that.