How to deal with units in code implementation for PID-controller
Assuming that the PID controller has a transfer function of:
$$u(s)=K_p\cdot(\varepsilon + \dfrac{1}{Ti}\int\varepsilon dt + T_d\dfrac{d\varepsilon}{dt}) $$
Then Kp units is whatever to transform input units to output units, meanwhile Ti and Td are in seconds.
Note that if you have a different transfer function, like this one:
$$u(s)=k_p\cdot\varepsilon + k_i\int\varepsilon dt + k_d\dfrac{d\varepsilon}{dt} $$
... then above stated isn't valid. So you'd better stay with the implementation of the PID with above transfer function, which will give you the possibility to use Ziegler-Nichols tuning methods and you'll have Ti, Td in seconds, that you don't have to change each time you change the Kp.
Sometimes is more easy to debug if input units are some physical units, in your example m/s, and output is expressed in %, then the Kp has units :
$$ \% =\dfrac{m}{s}\cdot K_p $$
$$ K_p [\%\dfrac{s}{m}] $$

If the answer above is yes, then what purpose does a PID controller
even have in this system?

In such case, if you already know what the output should be (we say knowing 'a priori'), you can feedforward it. The controller has a role of 'a posteriori' aka corrector. If there is a mismatch of the 'a priori' output setting, the controller will correct the discrepancy.

Even if I find a linear relation between input signal and output
signal, doesn't this only hold true for a certain load (i.e. a certain
surface friction and incline)?

That's why the controller is needed.



simulate this circuit &ndash; Schematic created using CircuitLab