To achieve realistic feedback, all steps should be executed with approximately 1 kHz frequency [8]. However, in our applications involving complex CAD models, the collision detection rate was highly variable, averaging around 10 Hz - which is 40 times slower than needed (see Table 1). Thus, to achieve realistic interaction rates, we need to determine some reasonable feedback to apply during the idle collision detection updates. Our solution was to use a heuristic to decide if a collision occurred during these idle periods. Since we collect approximate paths anyway (Section 6), a heuristic is an acceptable solution (i.e., undetected collisions are acceptable).
Consider the scenario shown in Figure 4(a).
Suppose the last collision detection call returned a collision
free result when the robot was in the configuration
, and
let
denote the minimum distance vector from
to
an obstacle (also returned by the collision detection call).
While the system waits for the result of the next collision detection
call, the user continues to move the robot.
During this time, the PHANTOM tracks the current configuration
of the robot
.
If the projection of
(the vector from
to
)
on
is greater
than
, then our heuristic determines that a collision
occurred and applies a force opposite to
.
Now suppose the last collision detection request returned a collision when
the robot was in configuration
(Figure 4(b)), and
let
denote the vector from our last known free configuration
to
. In this case, we heuristically determine the robot is still
in collision if the projection of
on
is greater
than
, and apply a reaction force opposite to
.
Table 1 summarizes the importance of the heuristic function. It can be seen that almost all collision detection calls are handled by the heuristic function. We also note that the client's (i.e., the haptic system) average wait time for a collision detection request is approximately twice as long as the average collision detection computation time on the server. This delay is caused by the interprocess communication. Our experiments showed that if we had computed the collision detection locally, the wait time would be around 500-700ms.