Originally Posted by GeeTwo
The biggest reason is the carpet. Almost any surface pair will have a larger coefficient of static friction than of dynamic friction due to developing bonds between the two surfaces. In the case of carpet, it deforms relatively slowly and rebounds inelastically, so the net friction rises as speeds decrease. I suspect that carpet fibers also work their way into any crevices in the wheels over time, furthering this effect.
Well, our current plan is to attempt to better-account for the effect of friction by, rather than computing Kv from a single data point (measured max speed), run the robot at a variety of voltages, measure steady-state speed at each, and perform a linear regression. The reciprocal of the slope will become Kv, and the negation of the intercept will become a constant "friction compensation term" that we will add to all of our velocity setpoints. This should, in theory, accurately account for any frictional effect that is itself linear with velocity (and a glance at the residuals from the regression should give us some insight into the degree to which it is nonlinear).
We will document how well this works, and probably write a short whitepaper on it. Hopefully, it will go some ways towards allowing us to have a single Ka gain work reasonably well over a wider range of accelerations.