User Manual Part 2

IS-900 User Guide Page 140 of 159
By choosing to have the data port output occur at one of the earlier numbered phase points, there
is a bit more latency, but also more slack to allow for an occasional rendering cycle that just
slightly exceeds the allotted 16.7 ms.
Figure 43 illustrates the tracker set up to output data at phase point # 3. The timing slack has
absorbed this anomaly so that the image is still rendered with the same 1 2/3 frame latency as
the frames before it, resulting in no visual glitch. Of course, if there are several frames in a row
that run longer than 16.7 ms, the system will eventually drop a frame, resulting in a jarring
transition to 2 2/3 frame latency. To prevent this, the user must insure that the average frame
rate before attempting synchronization is ALWAYS above 60 Hz, so that once the
synchronization is enabled, the frame rate will be fixed at 60 Hz with no annoying shifts.
As a precaution, if the frame rate of the rendering engine drops below 60 Hz, the software driver
that is reading data from the tracker should always check to make sure that it is reading the latest
available data record. After reading a complete record, check to see if there are any further bytes
in the receive buffer, and if so wait for there to be a complete record and read it in replacing the
just read record. If this is implemented in the software driver, multiple data records could become
queued up in the ‘receive’ buffer, resulting in extra latency.
time(ms) 0 16.7 33.3 50.0
183.3
Display scan out
Rendering
Tracking
first
processing
stage
second
processing
stage
sample
InertiaCube
latency
1 2 3 4 5 6
Figure 43 - Timing Diagram: IS-900 Adjusted with Proper Phase for 60 Hz Display Refresh
The second reason why it may be desirable to adjust the output record transmission to an earlier
phase point is to allow for serial port transmission time. In the diagrams above, the slant of the
arrow pointing up from the tracking loop to the rendering loop represents the delay of transmitting
the results from the tracker to the host. If you use binary data mode, and set up the IS-900 to
only transmit 6 bytes of data (3 Euler angles plus 3 position values) using the command
O1,2,4<>, then the total number of bytes per record will be 29 which corresponds to 290 bits. At
a baud rate of 115,200 bits/sec, this record will take about 2.7 ms to transmit. Thus, the tightest
timing loop illustrated in the first diagram above can be achieved if the rendering time is always
less than (16.7 ms 2.5 ms) = 14.2 ms, but it should probably not be attempted with any longer
output data record format or slower baud rate.