- Kinematics: area of Mechanics (and thus Physics)
- studies "motion of objects without reference to the forces which cause the motion."
- model trains emulate real trains
- we model the model trains
- velocity is inherently an average: distance / time

- location tracking
- collision avoidance
- accurate stopping

- train efficiency: complete trips as fast as possible

- how many speed levels to investigate?
- determine minimum speed (per segment?) to avoid getting stuck
- stop from lower speed is more accurate
- how much data can you feasibly collect?
- document and justify decisions!

- recommendation: use tight polling loop (no kernel)
- sensor → timestamp
- measurement errors
- signal delivery, Märklin processing: constant (?)
- constant errors cancel out when subtracting timestamps

- delivery to software: variable (polling loop)
- statistical modelling (see below)

- processing in software: small (?)
- ignore small errors

- signal delivery, Märklin processing: constant (?)

- assume actual sensor times uniformly distributed across duration of polling loop (~70ms)
- time interval between two sensors is sum of uniform distributions
- general case: Irwin-Hall distribution
- special case (N=2): triangular distribution
- sample mean/variance are good estimates of real mean/variance
- could also use min/max to estimated midpoint?

- but velocity (distance/time) is non-linear in time!
- average of time is straightforwarded; average of velocity not so much
- consider simple example: 100m distance, 2 time samples 10s, 20s
- speed: 10m/s, 5m/s → average would be 7.5m/s
- compute average time first, then speed: 100m/15s = 6.66m/s

*observation*: measured data typically forms bimodal distribution- why? is that a problem?
- low-frequency sampling (70ms): sample distribution bimodal (corner cases trimodal)

- general recommendation: keep experiment raw data as much as possible
- bug in processing → repeat only processing
- new approach to data processing → possible with raw data

- verify validity of and/or update current estimates
- long-term variability: track degradation? (or improvement)
- real-world variations (wear and tear): difficult to model
- need window of recent measurements
- basic technique: Exponentially Weighted Moving Average (EWMA)
- c: current estimate; d: next data sample, a: weighting factor
- c := c * (1 - a) + d * a
- no need to store array of samples
- with appropriate choice of a, can use bitshift instead of division
- can use similar approximation for standard deviation

- velocity is the derivate of movement
- acceleration is the derivative of velocity
- deceleration is negative acceleration
- kinematic reality:
- velocity is finite → movement must be continuous
- alternative would be teleportation

- acceleration is finite → velocity must be continous
- alternative would be infinite forces tearing train apart

- show with graphs: movement, velocity, acceleration

- velocity is finite → movement must be continuous
- simplified kinematic model: assume constant acceleration
- approximate as average velocity during acceleration interval
- or approximate as velocity step change in the middle of acceleration interval
- both are ok, if somewhat lower-quality location estimate is acceptable during acceleration

- measure similar to velocity
- measure time between two sensors
- change speed level at first sensor
- compute acceleration based on known estimates for velocities
- first detect whether train has reached target velocity at 2nd sensor?
- constant acceleration → average velocity during acceleration =
(v
_{1}+ v_{2}) / 2

- assume acceleration from known velocity v
_{1}to v_{2}- experiment changes the speed at a sensor and measures the time to another sensor hit
- measure times and estimate time averages first, as before!
- t: average time; d: distance
- average velocity during acceleration: v
_{a}= (v_{1}+ v_{2}) / 2

- Scenario 1: acceleration complete before 2nd sensor hit (d/t > v
_{a})- split d into two segments (d
_{1}acceleration, d_{2}stable velocity v_{2}): d = d_{1}+ d_{2} - split t into corresponding segments: t = t
_{1}+ t_{2} - v
_{a}= d_{1}/ t_{1} - v
_{2}= d_{2}/ t_{2} - can solve for d
_{1}, d_{2}, t_{1}, t_{2} - acceleration: (v
_{2}- v_{1}) / t_{1}

- split d into two segments (d
- Scenario 2: acceleration not complete before 2nd sensor hit (d/t < v
_{a})- actual average velocity during acceleration: v
_{s}= d / t - velocity at 2nd sensor hit: v
_{r}= v_{s}+ (v_{s}- v_{1}) - acceleration: (v
_{r}- v_{1}) / t

- actual average velocity during acceleration: v