Hands' movement is controlled by UDynamixel module. This module must be enabled in the robot configuration file. 

Robot hands structure

ATTENTION!!! Using direct joint value slot (val) without trajectory generator, motor will achieve the position as fast as it can. If the goal position will be far from the current position it will sudden movements. You should avoid such situations. More safety is using MovePosition(...) and MoveOrientation(...) functions which have trajectory generators.

 LEFT
                     f1   f2   f3  
                     |    |    |  
                     O    O    O coupled with q1  
                     |    |    |  
                 q1  O    O    O  
                     |    |    |  
                 q2  O    O    O  
                 q3 (o)  (o)  (o)  
                      \   |   /  
                       \__|__/    
            f4 --o--o(o)_____ 
                q1 q2 q3 | |
                         |^| q_yaw
                         (O) q_pitch    
 
 
  RIGHT
                     f3   f2   f1  
                     |    |    |
                     O    O    O coupled with q1  
                     |    |    |   
                 q1  O    O    O    
                     |    |    |   
                 q2  O    O    O  
                 q3 (o)  (o)  (o)   
                      \   |   /    
                       \__|__/      
                        _____(o)o--o-- f4  
                         | | q3 q2 q1  
                  q_yaw  |^|  
                 q_pitch (O) 
 
   // absolute finger angle value [deg.]
robot.body.arm[left|right].hand.finger[1|2|3|4][1|2|3].val;
robot.body.arm[left|right].hand.finger[1|2|3|4][1|2|3].val->rangemin;
robot.body.arm[left|right].hand.finger[1|2|3|4][1|2|3].val->rangemax;   
   // absolute wrist angle value [deg.]
robot.body.arm[left|right].hand.yaw.val;
robot.body.arm[left|right].hand.yaw.val->rangemin;
robot.body.arm[left|right].hand.yaw.val->rangemax;
robot.body.arm[left|right].hand.pitch.val;
robot.body.arm[left|right].hand.pitch.val->rangemin;
robot.body.arm[left|right].hand.pitch.val->rangemax;
   //
   // set all finger positions (using smooth trajectiory generators) 
   // f - finger, q - joint
robot.body.arm[left|right].hand.MovePosition(time, f1q1, f1q2, f1q3,
                                             f2q1, f2q2, f2q3,
                                             f3q1, f3q2, f3q3,
                                             f4q1, f4q2, f4q3);
   // set hand orientation (using smooth trajectory generators)
robot.body.arm[left|right].hand.MoveOrientation(time, yaw, pitch);
Simple movments (basic examples, can be extended...)

This is a basic set of movement functions, that can be use instead of every single joints. 

   // Use following function parameters
   // intensity - is based on a scale of [0..10] and defines the move intensity. 
   // time - defines the duration of action [s].
   //
   // open/close hand: right, left or booth
robot.body.arm[left|right]|(nothing).hand.MoveOpen(time);
robot.body.arm[left|right]|(nothing).hand.MoveClose(intensity,time);
   // do the pointing gesture
robot.body.arm[left|right]|(nothing).hand.MovePoint(time);
   // do the OK emblem
robot.body.arm[left|right]|(nothing).hand.MoveOK(time);
   // close one finger - 1, 2, 3 or 4
robot.body.arm[left|right]|(nothing).hand.MoveFingerClose(finger,intensity,time);
Stop all movements
robot.body.arm.hand.Stop();

 

 

 

EMYS and FLASH are Open Source and distributed according to the GPL v2.0 © Rev. 0.8.0, 27.04.2016

FLASH Documentation