1)
I am assuming you are continuously reading the distance estimates, and the readouts are in a while loop with a constant delay (between readouts update).
I am also assuming that you do not have a velocity sensor, that is you are estimating the velocity by measuring two distances (d2 and d1) and dividing the difference by the time delay of the loop.
If this is the case, the software time delay (of the loop) can be used.
Velocity=(d2-d1)/(time delay between measurements)
2)Normally there is one set of tuning parameters that should work for all regions of interest (of set points). However, in the case where there too much of non linearity between regions, you may have to use two or more set of parameters. This is set by gain scheduling (
if the set point is inbetween interval 1, use this set of parameters, and if it is inbetween interval 2, use another set, etc).
3) you can always preset the PID loop to start at some predetrmined voltage (instead of starting from 0), this will speed up the control and bypass any starting dead zones (bands) of response and control.
4) Note also that if you are estimating and controlling velocity from the distances you are controlling with the PID loop, there is a dependance between the two. The control loop of the distance should have an input from the velcoity, However, assuming independance will make it work for most part.