CS452 - Real-Time Programming - Winter 2013
Lecture 16 - Calibration I
Pubilc Service Annoucements
- Due date for kernel four.
- Serial I/O questions.
- Measurement is an activity that is not speeded up by being smart.
- Exam: ??
Train Properties
Note. I try to be consistent in distinguishing between two closely related
concepts: speed and velocity.
- A train's speed is the value you send to the train controller,
an integer between 0 and 14.
- A train's velocity is the rate at which it moves along the
physical tracks, a real number measured in centimetres per second.
Velocity is controlled by changing the train's speed, BUT, the mapping
between speed and velocity is complex.
- Velocity changes are not instantaneous.
- After the speed is changed the train speeds up and slows down
gradually.
- `Tricks' that make the train stop instantly are not acceptable
because they wear out the trains.
- The velocity decreases when travelling over turn outs or around curves.
- The smaller the radius of curvature the slower the velocity.
- Different locomotives travel at different velocities when set to the
same speed.
- Velocity of a given locomotive decreases over time
- As the track gets dirty.
- As the time since the locomotive's last lubrication increases
- As the locomotive gradually wears out
Important. Some of these effects matter; some don't. It's
part of your task to find out which is which.
Furthermore, things can go wrong, such as
- A turn-out switches while a locomotive is on top of it.
- You need to estimate where the train will be when the turn-out
switches in order to know if it is safe to execute a switch
command
- Locomotives run off the ends of sidings.
- You need to know how far a train will travel between when you give
the stop command and when the train stops.
- Locomotives stall because they pass over difficult parts of the track
too slowly.
- Why? Friction increases when a train is on curved track.
- Sensors fail to trigger, or trigger in the absence of a locomotive
- You need to know when you expect the sensor to be triggered if you
are to know that it has not been triggered.
Avoiding such failures, or responding sensibly to them, is possible only
if you have a `good enough' velocity calibration. (You get a perfect
calibration only in the limit t->infinity, and train you are calibrating
is dead long before that.) Failures like these also pollute your attempt to
acquire reliable data for your calibration.
Factors that might effect a calibration.
In general the velocity of a locomotive may be a function of many
variables
- which locomotive it is
- which speed is set
- time since the last speed change
- the velocity at which it was travelling before the last speed
change
- where it is on the track
- possibly on what type of track it is on
- how long since the track was cleaned
- how long since the locomotive was lubricated
Important. Some of these effects are matter; some don't.
It's part of your task to find out which is which.
Calibration
Where is it?
A question with two different answers
- A location known by the the person who asked the question, a
landmark.
- A route to the item about which the question was asked, taking the
asker into unknown territory. The route contains
- to be discovered landmarks, such as the second traffic light,
and
- abstract geometry, such as seven metres north, which require
measurement.
Where am I?
The usual answer is a combination of a landmark plus a measurement.
- "I'm half a block past the big tree."
To get the second part of the answer you can
- measure explicitly, by eye or with a tape measure, or
- integrate velocity over time.
The second of these is called dead reckoning. To know
where a train is we use a combination of landmarks, sensors, and dead
reckoning, knowing the train's velocity and how long it has been travelling
since the landmark.
Philosophy
You can't do anything until you know where the train is. You accomplish
this by
- Knowing the train's location when it arrives at a landmark, and
- Interpolating between landmarks by knowing the train's velocity all the
time.
Measurement is costly, and you should squeeze every bit of information you
can out of every measurement you make.
1. Calibrating Stopping Distance
The simplest objective:
- know where the train stops when you give it a command to stop
- restrict the stop commands to just after the train passes a sensor
- only one train moving
Sequence of events
- Train triggers sensor at
- Application receives report at
- You give command at
- Train receives and executes command at
- Train slows and stops at
- train at cm
- (You measure with a tape measure.)
Questions you need to answer
- If you do this again, same sensor, same speed, will you get the same
answer?
- If you do this again, different sensor, same speed, will you get the
same answer?
- If you do this again, same sensor, different speed, will you get the
same answer?
- If you do this again, different sensor, different speed, will you get
the same answer?
- Or a different train, or different track condition, or ...
Comments
- The sequence of events above has a whole lot of small delays that get
added together
- Each one has a constant part and a random part. Try to use values
that are diffferences of measurements to eliminate the constant
parts.
- Some delays can be eliminated a priori because they are extremely
small compared to other delays. The more you figure this out in
advance the less measurement you have to do.
- Knowing where you stop is very important when running the train on
routes that require reversing
- Why are reversing routes important?
- Clearly, knowing when you stop is equally important.
This is very time-consuming!
- The only way to reduce the number of measurements is to eliminate
factors that are unimportant.
- The only way to know that a factor is always unimportant is to measure.
Developing the ability to estimate quickly, and to find the worst case
quickly is the main way of being smart in tasks like this one.
Now make a table
|
Sensor 1 |
Sensor 2 |
... |
| Speed 6 |
|
|
|
| Speed 8 |
|
|
|
| ... |
|
|
|
There are enough measurements in each cell of the table that you can
estimate the random error. (Check with other groups to make certain that your
error is not too big.)
Based on calibrations I have seen in previous terms you will find
substantial variation with speed setting and train, little variation with
sensor.
Group across cells that have the `same' value. Maybe all have the same
value.
Hint. Interacting with other groups is useful to confirm that you are on
track. Of course, simply using another group's calibration, with or without
saying so, is `academic dishonesty'.
2. Calibrating Constant Velocity
At this point there are a few places on the track where you can stop with
a precision of a train length or better. However, suppose you want to reverse
direction at a switch.
- You want to be close to the switch, clear of the switch, and on the
right side of the switch when you stop.
- You want to know when the train has stopped because until then you
cannot give the command to throw the switch.
- You want to know when the switch-throwing is complete because until
then you cannot start the train running in reverse.
Knowing the Current Velocity
An implicit assumption you are making is that the future will closely
resemble the past.
- You measure the time interval between two adjacent sensor reports.
- Knowing the distance between the sensors you calculate the velocity of
the train
- velocity = distance / time interval
- measured in cm / sec.
Note that on average the lag mentioned above -- waiting for sensor
read, time in train controller, time in your system before time stamp --
is unimportant.
- Sensor1 actually hit at .
- You record (S1, t1 + dt) as the first event.
- Sensor2 actually hit at t2
- You record (S2, t2 + dt) as the second event
- You compute the velocity as (S2 - S1) / (t2 + dt - (t1 + dt)) = (S2 - S1) / (t2 - t1)
- But the variation in dt from measurement to measurement adds noise
to the measurement.
- After many measurements you build a table
- Use the table to determine the current velocity
- Use the time since the last sensor report to calculate the distance
beyond the sensor
- distance = velocity * time interval
Using Resources Effectively
The most scarce resources
- Bandwidth to the train controller
- Use of the train itself
The most plentiful resource
Any time you can use a plentiful resource to eliminate use of a scarce one
you have a win. For example
Practical Problems You Have to Solve
- The table is too big.
- You need a ton of measurements
- The values you measure vary randomly.
- You need to average and estimate error.
The values you measure vary systematically
- For example, each time you measure the velocity estimate is slower,
presumably because the train is moving towards needing oiling.
- You need to make fewer measurements or use the measurement you make
more effectively.
3. Calibrating Acceleration and Deceleration
How Long does it Take to Stop?
Try the following exercise.
- Choose a sensor.
- Put the train on a course that will cross the sensor.
- Run the train up to a constant speed.
- Give the speed zero command at a location that stops the train with its
contact on the sensor
- Calculate the time between when you gave the command and when the
sensor triggered.
- Look for regularities.
How Long does it Take the Train to Get up to Speed?
Return to: