VR-Forces 4.0.4 Class Documentation
Human Kinematics Model

Table of Contents

The human kinematics model is a simple model of human movement.

The entity will speed up, slow down, and turn instantly when the requested values change. It maintains an appropriate posture for movement and takes current terrain conditions into account.

Inputs to the Model

The model accepts the following control inputs:

Other factors taken into consideration:

Resulting Behavior

The model responds instantly to changes in the control inputs. For example, if an entity is being controlled in such a way as to follow a route (for example by the DtHumanMoveAlongController, it will abruptly change direction at each vertex along the route, at a constant speed.

Model Details

The model must be ticked periodically. Each tick, the length of time of the previous tick, dT, is available as a parameter in the current tick. Below is an outline of what the model does each tick:

  1. Retrieve the 'old' state variables (values from the previous tick) from the entity's state repository:
  1. Compute old_direction_of_movement (topographic heading) from old_local_position and old_local_velocity.
  2. Check the input ports for new values. If new data is available then use it, otherwise use previous values for:

If the following condtions for the entity are true:

then no additional work is necessary and the computation for the tick is complete. Otherwise, we need to compute new values for state and update the entity's state repository.

  1. Compute the max_speed that the entity can move over the terrain:
pitch_scale_factor = 1 - ( pitch / maximum_allowed_pitch ) 
max_speed *= pitch scale 
  1. Compute the new_body_velocity for the entity. Use max_speed as an upper bound on desired speed, as necessary.
new_speed = desired_speed
if ( new_speed > max_speed ) then new_speed = max_speed
new_body_velocity.x = new_speed
new_body_velocity.y = 0
new_body_velocity.z = 0  
  1. Compute the new projected location. Entity is initially oriented to face along movement_direction at its old_local_position.
  1. If model has been configured to check for terrain collisions, it will check to see if it is blocked by terrain. If so, it will set the entity's velocity to zero. The algorithm for determining if the entity is blocked by terrain is to check for a terrain intersection by a chord going from the old bounding volume center to the new center point of the front face of the bounding volume. If the entity is blocked, it positions the entity such that the front face of the entity's bounding volume is even with the intersection point.
    Note:
    This algorithm is only applicable when the entity is moving forward.

Document ID: Generated on Fri Jun 29 16:33:32 EDT 2012 from SVN revision 116588
Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (www.mak.com)