home *** CD-ROM | disk | FTP | other *** search
/ Virtual Reality Zone / VRZONE.ISO / mac / PC / PCGLOVE / GLOVE / GESTURE.TXT < prev    next >
Text File  |  1993-05-12  |  8KB  |  198 lines

  1. This information was graciously excepted from the printed
  2. documentation that comes with Object Glove.  This information
  3. is Copyright 1992, 1993 by Mark Thomas Pflaging.  No support
  4. for defining or using Gestures will be given to unregistered
  5. users of Object Glove and Court Jesture.
  6.  
  7.  
  8.  
  9. Using the "Court Jesture" Recognition System
  10.  
  11.  
  12.  
  13. Court Jesture is a gesture recognition system for Object Glove
  14. that is supplied with Object Glove.  It operates in real time,
  15. allows definition of gestures by the end user, and dispenses the
  16. gestures selectively to application objects in an
  17. object-oriented way.  Gestures can be grouped into "sets" and
  18. gesture sets can be activated and deactivated dynamically by the
  19. application.  When two gloves are used, each glove can have
  20. separate gesture sets or the same gesture sets.  As with Object
  21. Glove, it works under DOS and Windows and has been combined with
  22. Rend386.
  23.  
  24.  
  25.  
  26. How Court Jesture Works
  27.  
  28.  
  29.  
  30. Court Jesture works by measuring changes in the glove input and
  31. reporting when the change is "close" to the values defined for
  32. any gesture.  A gesture is nothing but a predefined change in
  33. the glove input over time.  (There are other ways of defining
  34. gestures, but this is the definition used in Court Jesture.)
  35. Given this simple definition, there are a wide variety of
  36. gestures that are possible.  One of the primary purposes of a
  37. gesture recognition system should be to provide "commands" to
  38. the application instead of a steady flow of unfiltered data.
  39. Court Jesture succeeds in this task.
  40.  
  41.  
  42.  
  43.  Let's look at a couple of examples.  Suppose we want to define
  44. a gesture like "turn the wrist upward and pull toward the body,
  45. while the fingers are in a fist."  First, we observe that the
  46. gesture does not depend on the X or Y values that come from the
  47. glove.  Second, we have not defined how long it will take the
  48. user to make this gesture.  This is important because, if this
  49. time is too short, the user will not have enough time to move
  50. his hand.  If the (duration) count is too long, the user has to
  51. wait in order to see the effect of the gesture.  In Court
  52. Jesture, a count of 100 corresponds to a gesture duration of
  53. about a second.  So a duration of 80 might be chosen for this
  54. gesture.  Third, we should realize that we are asking for the
  55. "change" in the finger input to be zero!  (Because we said
  56. "while" the fingers were in a fist.)  For the fingers, it would
  57. obviously be more convenient to specify a "static" value - one
  58. that is not a change, but a specification of the position of the
  59. finger.  In a closed fist position, the finger values are all
  60. zero.  Lastly, we have choose changes for the Z value and for
  61. the rotation.  Over a change of .8 seconds, the user can
  62. probably move their hand about two feet toward their body.  This
  63. corresponds to a change in the Z value of positive 30.  A
  64. rotation of positive 5 corresponds to a wrist moving clockwise
  65. (from the point of view of the user) about 165 degrees.
  66.  
  67.  
  68.  
  69.  We have decided on the following "delta" (change in input):
  70.  
  71.  Duration of change:  80
  72.  Change in X:  don't care
  73.  Change in Y: don't care
  74.  Change in Z: positive 30
  75.  Change in Rotation: positive 5
  76.  Static Thumb value:  zero
  77.  Static Index finger value:  zero
  78.  Static Middle finger value:  zero
  79.  Static Ring finger value:  zero
  80.  
  81.  
  82.  
  83. Another possible gesture might be "open your fist while the
  84. glove is near the center of the sensing area.  We don't how far
  85. the glove is from the sensors, just use the X and Y values."
  86. Making a fist implies that the glove fingers change from a
  87. closed position (of 0) to an open position (of 3).  So, the
  88. delta for each finger is negative 3.  We don't care about the
  89. change in X and Y, we only care that they are near zero.  The Z
  90. and rotation values should be totally ignored.  The duration
  91. will probably be pretty short, so we can use a value of 40.
  92. Summing up,
  93.  
  94.  Duration of change:  80
  95.  Static X value:  0
  96.  Static Y value: 0
  97.  Change in Z: don't care
  98.  Change in Rotation: don't care
  99.  Change in Thumb:  -3
  100.  Change in  Index finger:  -3
  101.  Change in  Middle finger:  -3
  102.  Change in  Ring finger:  -3
  103.  
  104.  
  105.  
  106.  As you can see, a wide variety of gestures can be specified in
  107. this way.  There is one more aspect of Court Jesture that is
  108. somewhat esoteric.  Every gesture has a priority that is used to
  109. "lock out" other gestures.  Each time a gesture is sensed, it
  110. sends an "on" message to the application only if there is no
  111. other "on" gesture with a higher priority.  When the gesture is
  112. no longer detected by the program, an "off" message is sent to
  113. the application, and lower priority gestures can occur.  This
  114. can be very useful if a particular motion tends to set off more
  115. than one gesture.  Generally you want to assign the highest
  116. priority to the gesture that gets triggered first.  That way,
  117. only one gesture will be sent to the application - the one with
  118. the highest priority.  If two gestures arrive at exactly the
  119. same time (it is possible!), then the priority of the gesture
  120. with the longest duration will be checked first.  It is typical
  121. to assign a priority of 100 when priority is not an issue.
  122.  
  123.  
  124.  
  125.  
  126. Editing Gestures for the Demo Program
  127.  
  128.  
  129.  
  130. Now we can try out our example gestures.  An easy way to do this
  131. is to use one of the demo programs (either the DOS or Windows
  132. version.)  They automatically read the gestures specified in the
  133. ``[Gestures]'' and ``[Buttons]'' sections.  We will deal with
  134. the ``[Gestures]'' section for now.  When a gesture from the
  135. ``[Gestures]'' section is received by the demo application, it's
  136. name is printed on the screen.
  137.  
  138.  
  139.  
  140. On each line, the following parameters are specified in order:
  141. Priority, Duration, Change in X, Change in Y, Change in Z,
  142. Change in Rotation, Change in Thumb, Change in Index finger,
  143. Change in Middle finger, Change in Ring finger, and Change in
  144. Keypad buttons.  If a parameter has a ``static'' attribute,
  145. meaning that it specifies a fixed value instead of a delta, then
  146. it should be directly preceded by an asterisk ('*').  If we
  147. don't care about a particular value, it's place should be held
  148. by an 'X'.  The number of spaces between the values is
  149. arbitrary.  Here are the lines for the two examples given above:
  150.  
  151.  Example1=100 80 X X 30 5 *0 *0 *0 *0 X
  152.  Example2=100 40 *0 *0 X -3 -3 -3 -3 X
  153.  
  154.  
  155.  
  156. You should study the relationship between the specification
  157. given in Section 1, and the Gestures given here.  There is one
  158. gesture parameter that hasn't been discussed - the ``change in
  159. Keypad buttons'' parameter.  It works like the other parameters,
  160. except that its value is not a number - it can only be one of
  161. the following: ``0'', ``Center'', ``1'', ``2'', ``3'', ``4'',
  162. ``5'', ``6'', ``7'', ``8'', ``9'', ``Left'', ``Up'', ``Down'',
  163. ``Right'', ``Enter'', ``Select'', ``Start'', ``A'', or ``B''.
  164. They correspond obviously to the buttons on the glove keypad.
  165. ``0'' and ``Center'' are wired together on the glove, so they
  166. correspond to the same value.  You cannot have a negative sign
  167. in front of the button, but you can have a '*' in front of it,
  168. which means the gesture needs to have that button down only at
  169. the time the gesture is finished.  The gestures in the
  170. ``[Buttons]'' section are used to trigger events in the demo
  171. programs.  You can see that they are just gestures that respond
  172. to buttons being pushed.  They can be redefined if you wish, but
  173. make sure to use the same parameter names.  (i.e. keep the left
  174. hand sides of the settings the same.)
  175.  
  176.  
  177.  
  178.  In the Windows version of the demo program, you can associate
  179. gestures with sounds by specifying the association in the
  180. ``[Sounds]'' section of ``GLOVE.INI''.  The sound is played
  181. through the Windows 3.1 Multimedia Interface, so this works best
  182. when you have a sound card installed.  You should go into the
  183. Control Panel application, and from there to the ``Sound''
  184. applet to change and edit the system sound assignments.  See the
  185. file ``GLOVE.INI'' for further information and examples.
  186.  
  187.  
  188.  
  189. Addendum:
  190.  
  191. There are several sections in GLOVE.INI that define gestures
  192. for the various demo programs.  [1.Gestures] and [2.Gestures]
  193. are used by the DOS and Windows demo programs.  [1.Rend386]
  194. and [2.Rend386] are used by "DEMO4B.EXE".  (See DEMO4B.DOC.)
  195. [Windows] is used by "GLOVMOUS.EXE" and [Buttons] is used
  196. by the DOS and Windows demo programs.
  197.  
  198.