Control Modes for the BarrettHand BH8-280 and BH8-282
Torque (MODE = 2, TSTOP = 0)
You can stream torque commands to each of the four motors (or any subset) while receiving joint position feedback. The actual torques applied at the finger joints are only loosely related to the commanded motor torques because of the large amount of friction introduced by the worm drives. If you want to use torque control, you should implement your own higher-level control wrapper around the torque (using position or velocity). You must also keep track of the finger speeds, motor temperature, and joint limits yourself to prevent damage to the BarrettHand. We recommend an update rate of at least 200Hz to maintain smooth motions in this mode.
Position (MODE = 3, TSTOP = 0)
You can stream position commands to each of the four motors (or any subset). The BarrettHand will attempt to reach the desired position instantly using its PID gain properties KP, KD, and KI. You must not give the BarrettHand a set of positions that is too far from the present position or else the controller will go unstable. You should write your own position profile generator and use the encoder positions as feedback. We recommend an update rate of at least 50Hz in order to maintain smooth motions in this mode. The BarrettHand is aware of its own joint stops in this mode and will not let you drive the fingers past their joint stops. However, you must limit the finger velocities with your own controller.
Velocity (MODE = 4, TSTOP = 0)
You can stream velocity commands to each of the four motors (or any subset). The BarrettHand will maintain the previously sent velocity until a new velocity command is received. The BarrettHand is aware of its own joint stops in this mode and will not let you drive the fingers past their joint stops. The BarrettHand will also limit the max finger velocity in this mode (to property MV). There is no minimum recommended update rate, so this mode works well for high-latency applications.
Trapezoidal velocity profile (MODE = 5, TSTOP = 50, F1/F2/F3 HOLD = 0, Spread HOLD = 1)
You can send discrete target endpoint positions (property E) to each of the four motors (or any subset). The BarrettHand will generate its own trapezoidal velocity profile to accelerate from its present position (using ACCEL) until it reaches max velocity (MV), then it will decelerate to reach the target endpoint position at zero velocity. You should not stream positions in this mode. This mode is intended for discrete motion commands separated in time, usually several seconds apart. The BarrettHand is aware of its own joint stops in this mode and will not let you drive the fingers past their joint stops. The BarrettHand will also limit the max finger velocity in this mode (to property MV). There is no minimum recommended update rate, so this mode works well for high-latency applications. However you should not send a new endpoint value until the present motion is complete. The MODE property of each finger will drop from 5 (TRAP) to either 3 (POS) or 0 (IDLE) when the motion is complete. If the HOLD property is set to 1, the MODE will drop from 5 to 3, and the finger will actively hold position at the end of a trapezoidal move. If the HOLD property is set to 0, the MODE will drop from 5 to 0, and the motor will be able to move freely at the end of a trapezoidal move. The HOLD property is especially applicable to the "Spread" motor as it is driven by a backdrivable spur gear instead of a non-backdrivable worm gear as is found in the finger motor drives.