TECHNICAL FIELD
[0001] Vehicle steering systems have utilized absolute position sensors to determine absolute
positions of vehicle steering columns. A drawback with an absolute position sensor
is that the sensor is relatively expensive to utilize in a vehicle steering system.
BACKGROUND OF THE INVENTION
[0002] Accordingly, the inventors herein have recognized a need for a method for determining
an absolute position of a vehicle steering column without utilizing an absolute position
sensor.
SUMMARY OF THE INVENTION
[0003] A method for determining an absolute rotational position of a vehicle steering column
in accordance with an exemplary embodiment is provided. The vehicle steering column
is operably coupled to a steering assist motor. The method includes determining whether
a vehicle is being driven substantially straight relative to a longitudinal axis of
the vehicle on a roadway. The method further includes when the vehicle is being driven
substantially straight, then performing steps of: (i) determining a plurality of relative
motor rotational position values from signals received from a relative position sensor
operably coupled to the steering assist motor, (ii) determining a plurality of relative
vehicle steering column rotational position values based on the plurality of relative
motor rotational position values, (iii) determining a rotational position offset value
from the plurality of relative vehicle steering column rotational position values,
(iv) determining an absolute rotational position value from a current relative vehicle
steering column rotational position value and the rotational position offset value,
the absolute rotational position value being indicative of the absolute rotational
position of the vehicle steering column, and (v) storing the absolute rotational position
value in a memory device.
BRIEF DESCRIPTION OF THE DRAWINGS
[0004]
Figure 1 is a schematic of a vehicle having a steering system and a control system
in accordance with an exemplary embodiment;
Figures 2-13 are flowcharts of a method for controlling a steering assist motor in
the steering system of Figure 1 utilizing the control system of Figure 1;
Figure 14 is a schematic of exemplary curves illustrating commanded torque commands
generated by the control system of Figure 1 for the steering assist motor; and
Figure 15 is a schematic of exemplary curves associated with a Travel Exclusion subroutine
implemented by the control system of Figure 1.
DESCRIPTION OF THE PREFERRED EMBODIMENTS
[0005] Referring to Figure 1, a vehicle 10 having a steering system 12 and a control system
14 is illustrated. For purposes of understanding, the term "signal" utilized herein
is defined as any electrical signal or any stored or transmitted value. For example,
a signal can comprise a voltage, or a current. Further, a signal can comprise any
stored or transmitted value such as binary values, scalar values, or the like.
[0006] The steering system 12 is provided to steer the vehicle 10 in a desired direction.
The steering system includes a handwheel 20, an upper steering column 22, a universal
joint 24, a lower steering column 26, a worm gear 28, a worm 30, a gear housing 34,
a steering mechanism 36, tie rods 38, 40, steering knuckles 42, 44, and roadway wheels
46, 48. In one exemplary embodiment, the steering system 12 is an electric power steering
system that utilizes a rack and pinion steering mechanism 36. The steering mechanism
36 includes a toothed rack (not shown) and a pinion gear (not shown) located under
the gear housing 34. During operation, as the handwheel 20 is turned by a vehicle
operator, the upper steering column 22 connected to the lower steering column 26 turns
the pinion gear. Rotation of the pinion gear moves the toothed rack which moves the
tie rods 39, 40 which in turn moves the steering knuckles 42, 44, respectively, which
turns the roadway wheels 46, 48, respectively.
[0007] The control system 14 is provided to assist in controlling the steering system 12.
In particular, the control system 14 provides: (i) electric power steering assist
for assisting a vehicle operator in steering the vehicle and (ii) active autocentering
of the vehicle steering column when the vehicle 10 is being driven substantially straight
relative to a longitudinal axis of the vehicle 10. The control system 14 includes
a column torque sensor 70, a vehicle speed sensor 72, a motor position sensor 74,
a vehicle ignition system 77, a steering controller 78, a motor control circuit 80,
and a battery 90.
[0008] The steering column torque sensor 70 is provided to generate a signal (Col_Torq)
indicative of an amount of torque being applied to the vehicle handwheel 20 and the
upper steering column 22 by a vehicle operator. In one exemplary embodiment, the steering
column torque sensor 70 includes a torsion bar (not shown) which outputs a variable-resistance
signal to the controller 78 based on an amount of twist of the torsion bar. Of course,
in alternative embodiments, other types of torque sensors known to those skilled in
the art could be utilized.
[0009] The vehicle speed sensor 72 is provided to generate a signal (VS) indicative of a
speed of the vehicle 10. The vehicle speed sensor 72 operably communicates with the
steering controller 78.
[0010] The motor position sensor 74 is provided to generate a signal indicative of a relative
rotational or angular position of a rotor of the steering assist motor 82. The motor
position sensor 74 operably communicates with the steering controller 78.
[0011] The vehicle ignition system 77 is provided to control ignition a vehicle engine (not
shown) in the vehicle 10. The vehicle ignition system 77 operably communicates with
the steering controller 78. During operation, the steering controller 78 queries the
vehicle ignition system 77 to determine when an ignition shutdown event occurs.
[0012] The steering controller 78 is provided to generate control signals that are received
by the motor control circuit 80 for controlling operation of the steering assist motor
82. In particular, the steering controller 78 is configured to control the steering
assist motor 82 to provide electric power steering assist for assisting a vehicle
operator in steering the vehicle 10, and to provide active auto-centering of a vehicle
steering column when the vehicle 10 is being driven substantially straight relative
to a longitudinal axis of the vehicle. The steering controller 78 is electrically
coupled to the steering column torque sensor 70, the vehicle speed sensor 72, the
motor position sensor 74, the vehicle ignition system 77, and the motor control circuit
80.
[0013] The motor control circuit 80 is provided to receive command torque control signals
from the steering controller 78 and to generate electrical currents for controlling
operation of the steering assist motor 82. As shown, the motor control circuit 80
is electrically coupled between the steering controller 78 and the steering assist
motor 82. The motor 82 is configured to drive the worm 30 which is operably coupled
to the worm gear 28 for moving the lower steering column 26, the steering mechanism
36, tie rods 38, 40, steering knuckles 42, 44, toward an operational position wherein
the road wheels 46, 48 have a desired front road wheel angle.
[0014] The battery 90 provides electrical power to the steering controller 78 and to the
motor control circuit 80. As shown, the battery 90 is electrically coupled to the
steering controller 78 and to the motor control circuit 80.
[0015] Referring to Figures 2-13, a flowchart of a method for determining an absolute position
of a vehicle steering column and for controlling the steering assist motor 82 will
now be explained. In particular, the method can determine an absolute rotational position
of either the vehicle steering column 26 or the vehicle steering column 22 based on
a relative position signal from the motor position sensor 74 operably coupled to the
steering assist motor 82. However, for purposes of simplicity, the flowchart will
describe determining an absolute rotational position of the vehicle steering column
26.
[0016] At step 110, the controller 78 selects Low Speed Calibration Values from a first
calibration table. After step 110, the method advances to step 112.
[0017] At step 112, the controller 78 makes a determination as to whether a valid absolute
rotational position value was stored in a memory device 89 during the prior ignition
cycle. If the value of step 112 equals "yes", the method advances to step 114. Otherwise,
the method advances to step 116.
[0018] At step 114, the controller 78 sets the current absolute rotational position value
(Abs_Pos_Val) equal to the stored valid absolute rotational position value, and a
third position confidence value equal to a predetermined high position confidence
value. After step 114, the method advances to step 116.
[0019] At step 116, the controller 78 executes an Autocentering subroutine which will be
explained in f
[0020] At step 118, the controller 78 makes a determination as to whether a first position
confidence value for an absolute rotational position of a vehicle steering column
26 determined by the Autocentering subroutine is greater than zero. If the value of
step 118 equals "yes", the method advances to step 120. Otherwise, the method advances
to step 130 which executes a Travel Exclusion subroutine.
[0021] At step 120, the controller 78 makes a determination is whether High Speed Calibration
Values have been selected. If the value of step 120 equals "yes", the method advances
to step 122. Otherwise, the method advances to step 126.
[0022] At step 122, the controller 78 retrieves a first torque value from an Autocentering
High Speed Active Return Table, based on the absolute rotational position of the vehicle
steering column 26. After step 122, the method advances to step 124.
[0023] At step 124, the controller 78 determines a commanded torque command utilizing the
following equation: commanded torque command = first torque value * first position
confidence value. After step 124, the method advances to step 148.
[0024] Referring again to step 120, if the value of step 120 equals "no", the method advances
to step 126. At step 126, the controller 78 retrieves a second torque value from an
Autocentering Low Speed Active Return Table, based on the absolute rotational position
of the vehicle steering column. After step 126, the method advances to step 128.
[0025] At step 128, the controller 78 determines a commanded torque command utilizing the
following equation: commanded torque command = second torque value * first position
confidence value. After step 128, the method advances to step 148.
[0026] Referring again to step 118, if the value of step 118 equals "no", the method advances
to step 130. At step 130, the controller 78 executes the Travel Exclusion subroutine
which will be explained in further detail below. After step 130, the method advances
to step 132.
[0027] At step 132, the controller 78 makes a determination as to whether a second position
confidence value associated with absolute rotational position range determined by
the Travel Exclusion subroutine is greater than zero. If the value of step 132 equals
"yes", the method advances to step 134. Otherwise, the method advances to step 138.
[0028] At step 134, the controller 78 retrieves a third torque value from a Travel Exclusion
Active Return Table, based on whether the absolute rotational position range of the
vehicle steering column 26 indicates (i) the vehicle steering column 26 is fully rightward
of an absolute center position of the steering column, or (ii) the vehicle steering
column 26 is fully leftward of an absolute center position of the steering column.
After step 134, the method advances to step 136.
[0029] At step 136, the controller 78 determines a commanded torque command utilizing the
following equation: commanded torque command = third torque value * second position
confidence value. After step 136, the method advances to step 148.
[0030] Referring again to step 132, if the value of step 132 equals "no", the method advances
to step 138. At step 138, the controller 78 executes a Last Stored Position subroutine
which will be explained in further detail below. After step 138, the method advances
to step 140.
[0031] At step 140, the controller 78 makes a determination as to whether a third position
confidence value associated with a stored last valid absolute rotational position
value obtained by Last Stored Position subroutine is greater than zero. If the value
of step 140 equals "yes", the method advances to step 142. Otherwise, the method advances
to step 146.
[0032] At step 142, the controller 78 retrieves a fourth torque value from a Last Stored
Position Table, based on the stored last valid absolute rotational position value
associated with the vehicle steering column 26. After step 142, the method advances
to step 144.
[0033] At step 144, the controller 78 determines a commanded torque command utilizing the
following equation: commanded torque command = fourth torque value * third position
confidence value. After step 144, the method advances to step 148.
[0034] Referring again to step 140, if the value of step 140 equals "no", the method advances
to step 146. At step 146, the controller 78 sets a commanded torque command equal
to zero, and controller 78 sets a fourth position confidence value equal to zero.
After step 146, the method advances to step 148.
[0035] At step 148, the controller 78 makes a determination as to whether a selected subroutine
for determining an absolute rotational position of vehicle steering column 26 has
changed. For example, when the Autocentering subroutine is initially utilized to determine
the absolute rotational position of the steering column 26, and thereafter, the Travel
Exclusion subroutine is utilized to determine the absolute rotational position, the
subroutine for determining the position has changed. If the value of step 148 equals
"yes", the method advances to step 150. Otherwise, the method advances to step 152.
[0036] At step 150, the controller 78 induces the motor 82 to ramp a motor torque from a
last commanded torque to a torque corresponding to the commanded torque command. After
step 150, the method is exited.
[0037] At step 152, the controller 78 outputs the commanded torque command to the motor
82 to induce the motor 82 to move the vehicle steering column 26 in a first rotational
position toward an absolute rotational center position. After step 152, the method
is exited.
[0038] Referring to Figures 6-8, the Autocentering subroutine will now be explained.
[0039] At step 170, the controller 78 receives a first signal from the column torque sensor
70 operably coupled to a vehicle steering column 26 and determines a column torque
value (CT) value based on the first signal.
[0040] At step 172, controller 78 sums the column torque value (CT) with a commanded torque
value to determine a pinion value (Pin_Tq) and low pass filters the pinion value (Pin_Tq)
to obtain a pinion value (Pin_Tq_Lp).
[0041] At step 174, the controller 78 receives a second signal from the motor position sensor
74 operably coupled to the steering assist motor 82 and iteratively determines a motor
velocity value (Mtr_Vel) based on the second signal.
[0042] At step 176, the controller 78 receives a third signal from the vehicle speed sensor
72 and iteratively determines a vehicle speed value (Veh_Speed) from the third signal.
[0043] At step 178, the controller 78 retrieves an absolute rotational position range (TE_Pos)
determined by the Travel Exclusion subroutine.
[0044] At step 180, the controller 78 executes an Update Calibration Values subroutine which
will be explained in further detail hereinafter.
[0045] At step 182, the controller 78 makes a determination as to whether the following
conditions are met: (i) Abs(Pin_Tq_Lp) <= first calibration value, (ii) Abs(Mtr_Vel)
<= second calibration value, (iii) Abs(Veh_Speed) <= third calibration value, and
(iv) Abs(TE_Pos) <= fourth calibration value. The term "Abs" corresponds to an absolute
value. If the value of step 182 equals "yes", the method advances to step 184. Otherwise,
the method advances to step 183.
[0046] At step 183, the controller sets the first enable flag equal to logical "0." After
step 183, the method advances to step 216.
[0047] At step 184, the controller 78 sets the first enable flag equal to a logical "1."
After step 184, the method advances to step 188.
[0048] At step 188, the controller 78 makes a determination as to whether the first enable
flag = "1" for a first predetermined time interval. If the value of step 188 equals
"yes", the method advances to step 190. Otherwise, the method advances to step 192.
[0049] At step 190, the controller 78 sets a second enable flag = "1." After step 190, the
method advances to step 194.
[0050] At step 192, the controller 78 sets the second enable flag = "0" and the first enable
flag = "0." After step 192, the method advances to step 216.
[0051] At step 194, the controller 78 executes a first conditional low pass filter being
initialized with an initial relative rotational position value corresponding to a
relative rotational position of the steering assist motor 82. The first conditional
low pass filter filters signals from the relative position sensor 74 coupled to the
steering assist motor 82 to iteratively output a filtered relative rotational position
value (Filt_Rel_Pos). It should be noted that the first conditional low pass filter
filters an input signal when the first and second enable flags equal "1", and the
first conditional low pass filter holds its prior filtered value when the first and
second enable flags do not equal "1." After step 194, the method advances to step
196.
[0052] At step 196, the controller 78 determines a calibration window (Cal_Win) that is
centered at the filtered relative rotational position value (Filt_Rel_Pos) and has
a width of (2B) where B is a calibration value. After step 196, the method advances
to step 198.
[0053] At step 198, the controller 78 makes a determination as to whether signals from relative
position sensor 74 indicates the steering assist motor 82 has a relative rotational
position within the calibration window (Cal_Win). If the value of step 198 equals
"yes", the method advances to step 200. Otherwise, the method advances to step 202.
[0054] At step 200, the controller 78 sets a third enable flag = "1." After step 200, the
method advances to step 204.
[0055] At step 202, the controller 78 sets the third enable flag = "0", the second enable
flag = "0", and the first enable flag = "0." After step 202, the method advances to
step 204.
[0056] At step 204, the controller 78 makes a determination as to whether the second enable
flag = "1" and the third enable flag = "1." If the value of step 204 equals "yes",
the method advances to step 206. Otherwise, the method advances to step 216.
[0057] At step 206, the controller 78 waits a second predetermined time interval and then
executes a second conditional low pass filter being initialized with filtered relative
rotational position value (Filt_Rel_Pos), the second conditional low pass filter filtering
signals from the relative position sensor 74 coupled to the steering assist motor
82 to iteratively output a rotational position offset value (Offset_Val). It should
be noted that the second conditional low pass filter only filters an input signal
when the first, second and third enable flags maintain a logical "1" value during
the second predetermined time interval, and the second conditional low pass filter
holds its prior filtered value when the first, second and third enable flags do not
equal "1." After step 206, the method advances to step 208.
[0058] At step 208, the controller 78 calculates an absolute rotational position value (Abs_Pos_Val)
indicating an absolute rotational position of the vehicle steering column 26 by subtracting
(Offset_Val) from a current relative rotational position determined from signals from
the relative position sensor 74 coupled to the steering assist motor 82. After step
208, the method advances to step 210.
[0059] At step 210, controller 78 stores the absolute rotational position value (Abs_Pos_Val)
in the memory device 89. After step 210, the method advances to step 212.
[0060] At step 212, the controller 78 makes a determination as to whether signals from the
relative position sensor 74 indicates the steering assist motor 82 has a relative
rotational position within the calibration window (Cal_Win) and a plurality of rotational
position offset values (Offset_Val) are substantially consistent with one another.
If the value of step 212 equals "yes", the method advances to step 214. Otherwise,
the method advances to step 216.
[0061] At step 214, the controller 78 sets the first position confidence value to a predetermined
high position confidence value. After step 214, the Autocentering subroutine is exited.
[0062] At step 216, the controller 78 sets the first position confidence value to zero.
After step 216, the Autocentering subroutine is exited.
[0063] Referring to Figure 9, the Update Calibration Values subroutine will now be explained.
[0064] At step 230, the controller 78 makes a determination as to whether the following
conditions are met: (i) Abs(Pin_Tq) <= fifth calibration value, (ii) Abs(Mtr_Vel)
<= sixth calibration value, (iii) Abs(Veh_Speed) <= seventh calibration value, (iv)
signals from the relative position sensor 74 indicate the steering assist motor 82
has a relative rotational position within the calibration window (Cal_Win), and (v)
first enable flag = "1" for a first predetermined time interval. If the value of step
230 equals "yes", the method advances to step 232. Otherwise, the Update Calibration
Values subroutine is exited.
[0065] At step 232, the controller 78 waits for a predetermined time interval and then selects
High Speed Calibration Values from a second calibration table. It should be noted
that the step 232 is only executed when the value of step 230 is equal to "yes" for
the predetermined time interval. After step 232, the Update Calibration Values subroutine
is exited.
[0066] Referring to Figures 10-12, the Travel Exclusion subroutine will now be explained.
[0067] At step 250, the controller 78 calculates a current relative rotational position
value (Current_Rel_Pos) based on signals from the relative position sensor 74 operably
coupled to the steering assist motor 82. After step 250, the method advances to step
251.
[0068] At step 251, the controller 78 initializes a maximum absolute starting position value
(Max_Abs_Start_Pos) utilizing the following equation:
Max_Abs_Start_Pos = Theta_Max_Cal; wherein Theta_Max_Cal is a maximum expected travel
of the steering system. After step 251, the method advances to step 252.
[0069] At step 252, the controller 78 initializes a minimum absolute starting position value
(Min_Abs_Start_Pos) utilizing the following equation:
Min_Abs_Start_Pos = Theta_Min_Cal; wherein Theta_Min_Cal is a minimum expected travel
of the steering system. It should be noted that in one exemplary embodiment, Theta_Min_Cal
is a negative number. After step 252, the method advances to step 254.
[0070] At step 254, the controller 78 calculates the maximum absolute starting position
value (Max_Abs_Start_Pos) utilizing the following equation:
Max_Abs_Start_Pos = Theta_Max_Cal - Current_Rel_Pos. After step 254, the method advances
to step 256.
[0071] At step 256, the controller 78 calculates the minimum absolute starting position
value (Min_Abs_Start_Pos) utilizing the following equation:
Min_Abs_Start_Pos = Theta_Min_Cal - Current_Rel_Pos. After step 256, the method advances
to step 258.
[0072] At step 258, the controller 78 calculates a total maximum absolute starting position
value (Total_Max_Abs_Start_Pos) utilizing the following equation:
Total_Max_Abs_Start_Pos = minimum of (current Max_Abs_Start_Pos or prior Max_Abs_Start_Pos).
After step 258, the method advances to step 260.
[0073] At step 260, the controller 78 calculates a total minimum absolute starting position
value (Total_Min_Abs_Start_Pos) utilizing the following equation: Total_Min_Abs_Start_Pos
= maximum of (current Min_Abs_Start_Pos or prior Min_Abs_Start_Pos). After step 260,
the method advances to step 262.
[0074] At step 262, the controller 78 determines absolute position range value (TE_Pos)
based on total maximum absolute starting position value (Total_Max_Abs_Start_Pos)
and total minimum absolute starting position value (Total_Min_Abs_Start_Pos). After
step 262, the method advances to step 264.
[0075] At step 264, the controller 78 calculates a maximum absolute current position value
(Max_Abs_Current_Pos) utilizing the following equation: Max_Abs_Current_Pos = Total_Max_Abs_Start_Pos
+ Current_Rel_Pos. After step 264, the method advances to step 266.
[0076] At step 266, the controller 78 calculates a minimum absolute current position value
(Min_Abs_Current_Pos) utilizing the following equation:
Min_Abs_Current_Pos = Total_Min_Abs_Start_Pos + Current_Rel_Pos. After step 266, the
method advances to step 268.
[0077] At step 268, the controller 78 makes a determination as to whether the Max_Abs_Current_Pos
is less than zero. If the value of step 268 equals "yes", the method advances to step
270. Otherwise, the method advances to step 272.
[0078] At step 270, the controller 78 sets a current absolute rotational position value
(Abs_Pos_Val) equal to (Max_Abs_Current_Pos). After step 270, the method advances
to step 272.
[0079] At step 272, the controller 78 makes a determination as to whether the Min_Abs_Current_Pos
is greater than zero. If the value of step 272 equals "yes", the method advances to
step 274. Otherwise, the method advances to step 276.
[0080] At step 274, the controller 78 sets a current absolute rotational position value
(Abs_Pos_Val) equal to (Min_Abs_Current_Pos). After step 274, the method advances
to step 276.
[0081] At step 276, the controller 78 makes a determination as to whether Max_Abs_Current_Pos
>= 0 or Min_Abs_Current_Pos <= 0. If the value of step 276 equals "no", the method
advances to step 278. Otherwise, the Travel Exclusion subroutine is exited.
[0082] At step 278, the controller 78 determines a deadband value or region of position
uncertainty utilizing the following equation: Deadband = Total_Max_Abs_Start_Pos -
Total_Min_Abs_Start_Pos. After step 278, the method advances to step 280.
[0083] At step 280, the controller 78 makes a determination as to whether the Deadband is
greater than a threshold calibration value. The value of step 280 equals "yes", the
method advances to step 282. Otherwise, the method advances to step 284.
[0084] At step 282, the controller 78 sets a second position confidence value to a predetermined
high position confidence value. After step 282, the Travel Exclusion subroutine is
exited.
[0085] At step 284, the controller 78 sets the second position confidence value to a predetermined
low position confidence value. After step 284, the Travel Exclusion subroutine is
exited.
[0086] Referring to Figure 13, the Last Stored Position subroutine will now be explained.
[0087] At step 300, the controller 78 makes a determination as to whether vehicle ignition
shutdown has been detected. If the value of step 300 equals "yes", the method advances
to step 302. Otherwise, the Last Stored Position subroutine is exited.
[0088] At step 302, the controller 78 iteratively determines a plurality of absolute rotational
position values associated with the vehicle steering column 26 for a predetermined
time interval after the vehicle ignition shutdown. After step 302, the method advances
to step 304.
[0089] At step 304, the controller 78 stores a last valid absolute rotational position value
from the plurality of absolute rotational position values, in the nonvolatile memory
device 89. After step 304, the Last Stored Position subroutine is exited.
[0090] Referring to Figure 14, exemplary curves of commanded torque values over time generated
by the method of Figures 2-13 are illustrated. In particular, for example, the curve
310 represents commanded torque values over time generated by the Last Stored Position
subroutine. Further, for example, the curve 312 represents commanded torque values
over time generated by the Travel Exclusion subroutine. Further, for example, the
curve 314 represents commanded torque values over time generated by the Autocentering
subroutine when utilizing low speed calibration values. Further, for example, the
curve 316 represents commanded torque values over time generated by the Autocentering
subroutine when utilizing high speed calibration values.
[0091] Referring to Figure 15, exemplary curves of position values determined by the Travel
Exclusion subroutine are illustrated. In particular, a curve 330 corresponds to an
actual absolute vehicle column position over time. Further, a curve 332 corresponds
to the current relative rotational position value (Current_Rel_Pos) associated with
the steering assist motor over time. Further, a curve 334 corresponds to the total
absolute starting position value (Total_Max_Abs_Start_Pos) over time. Further, a curve
336 corresponds to the total minimum absolute starting position value (Total_Min_Abs_Start_Pos)
over time. Finally, a distance along the y-axis between the curves 334 and 336 corresponds
to the Deadband angular range.
[0092] As described above, the above-described methods can be embodied in the form of computer-implemented
software algorithms and apparatuses for practicing those processes. In an exemplary
embodiment, the methods are embodied in computer program code executed by one or more
elements. The present methods may be embodied in the form of computer program code
containing instructions stored in tangible media, such as floppy diskettes, CD-ROMs,
hard drives, flash memory, or any other computer-readable storage medium, wherein,
when the computer program code is loaded into and executed by a computer, the computer
becomes an apparatus for practicing the invention.