|   | 1 | The BarrettHand has several control modes: | 
                  
                          |   | 2 |  | 
                  
                          |   | 3 | * Torque (MODE = 2, TSTOP = 0) - You can stream torque commands to each | 
                  
                          |   | 4 | of the four motors (or any subset) while receiving joint position | 
                  
                          |   | 5 | feedback. The actual torques applied at the finger joints are only | 
                  
                          |   | 6 | loosely related to the commanded motor torques because of the large | 
                  
                          |   | 7 | amount of friction introduced by the worm drives. If you want to use | 
                  
                          |   | 8 | torque control, you should implement your own higher-level control | 
                  
                          |   | 9 | wrapper around the torque (using position or velocity). You must also | 
                  
                          |   | 10 | keep track of the finger speeds, motor temperature, and joint limits | 
                  
                          |   | 11 | yourself to prevent damage to the BarrettHand. We recommend an update | 
                  
                          |   | 12 | rate of at least 200Hz to maintain smooth motions in this mode. | 
                  
                          |   | 13 |  | 
                  
                          |   | 14 | * Position (MODE = 3, TSTOP = 0) - You can stream position commands to | 
                  
                          |   | 15 | each of the four motors (or any subset). The BarrettHand will attempt to | 
                  
                          |   | 16 | reach the desired position instantly using its PID gain properties KP, | 
                  
                          |   | 17 | KD, and KI. You must not give the BarrettHand a set of positions that is | 
                  
                          |   | 18 | too far from the present position or else the controller will go | 
                  
                          |   | 19 | unstable. You should write your own position profile generator and use | 
                  
                          |   | 20 | the encoder positions as feedback. We recommend an update rate of at | 
                  
                          |   | 21 | least 50Hz in order to maintain smooth motions in this mode. The | 
                  
                          |   | 22 | BarrettHand is aware of its own joint stops in this mode and will not | 
                  
                          |   | 23 | let you drive the fingers past their joint stops. However, you must | 
                  
                          |   | 24 | limit the finger velocities with your own controller. | 
                  
                          |   | 25 |  | 
                  
                          |   | 26 | * Velocity (MODE = 4, TSTOP = 0) - You can stream velocity commands to | 
                  
                          |   | 27 | each of the four motors (or any subset). The BarrettHand will maintain | 
                  
                          |   | 28 | the previously sent velocity until a new velocity command is received. | 
                  
                          |   | 29 | The BarrettHand is aware of its own joint stops in this mode and will | 
                  
                          |   | 30 | not let you drive the fingers past their joint stops. The BarrettHand | 
                  
                          |   | 31 | will also limit the max finger velocity in this mode (to property MV). | 
                  
                          |   | 32 | There is no minimum recommended update rate, so this mode works well for | 
                  
                          |   | 33 | high-latency applications. | 
                  
                          |   | 34 |  | 
                  
                          |   | 35 | * Trapezoidal velocity profile (MODE = 5, TSTOP = 1) - You can send | 
                  
                          |   | 36 | discrete target endpoint positions (property E) to each of the four | 
                  
                          |   | 37 | motors (or any subset). The BarrettHand will generate its own | 
                  
                          |   | 38 | trapezoidal velocity profile to accelerate from its present position | 
                  
                          |   | 39 | (using ACCEL) until it reaches max velocity (MV), then it will | 
                  
                          |   | 40 | decelerate to reach the target endpoint position at zero velocity. You | 
                  
                          |   | 41 | should not stream positions in this mode. This mode is intended for | 
                  
                          |   | 42 | discrete motion commands separated in time, usually several seconds | 
                  
                          |   | 43 | apart. The BarrettHand is aware of its own joint stops in this mode and | 
                  
                          |   | 44 | will not let you drive the fingers past their joint stops. The | 
                  
                          |   | 45 | BarrettHand will also limit the max finger velocity in this mode (to | 
                  
                          |   | 46 | property MV). There is no minimum recommended update rate, so this mode | 
                  
                          |   | 47 | works well for high-latency applications. However you should not send a | 
                  
                          |   | 48 | new endpoint value until the present motion is complete. The MODE | 
                  
                          |   | 49 | property of each finger will drop from 5 (TRAP) to either 3 (POS) or 0 | 
                  
                          |   | 50 | (IDLE) when the motion is complete. If the HOLD property is set to 1, | 
                  
                          |   | 51 | the MODE will drop from 5 to 3, and the finger will actively hold | 
                  
                          |   | 52 | position at the end of a trapezoidal move. If the HOLD property is set | 
                  
                          |   | 53 | to 0, the MODE will drop from 5 to 0, and the motor will be able to move | 
                  
                          |   | 54 | freely at the end of a trapezoidal move. The HOLD property is especially | 
                  
                          |   | 55 | applicable to the "Spread" motor as it is driven by a backdrivable spur | 
                  
                          |   | 56 | gear instead of a non-backdrivable worm gear as is found in the finger | 
                  
                          |   | 57 | motor drives.  |