-
Notifications
You must be signed in to change notification settings - Fork 91
Joints
Dexter's hardware has 5 joints in the base model, and the v2 Tool Interface adds 2 more for a total of 7. Each FPGA measured joint has an encoder.
| # | FPGA | Connector | Human / Description | Slots | Eye Rotation* |
|---|---|---|---|---|---|
| 1 | 1 | Base | Roll. Shoulder rotate (vertical) | 200 | Counter |
| 2 | 3** | Pivot | Pitch. Shoulder lift | 180 | Counter |
| 3 | 2 | End | Pitch. Elbow. Pwr set R65/66 | 157 | Counter |
| 4 | 4 | Angle | Pitch. DiffA1 Differential with 5 | 115 | Counter |
| 5 | 5 | Rotate | Yaw. DIffA2 4 and 5 make the wrist | 100 | Clockwise |
| 6 | 6 | External | (not used, could be extrude) | ||
| 6 | n/a | J20 bottom pin | Rotate Dynamixel | n/a | n/a |
| 7 | n/a | J20 bottom pin | Gripper Dynamixel | n/a | n/a |
* The direction of the rotation of the eye for Joint 5 is the opposite of the others.
** Development of the FPGA code started in the middle and so the numbering of the joints is not consistent. Specifically, when reading (or writing) the AdcCenters.txt file from the share folder, the 2nd and 4th, and 3rd and 5th, lines must be swapped
Because joints may (do) have different gearing and drive systems, the conversion between one step of the motor and 1 degree of motion for the joint requires a factor. These also account for microstepping and the conversion from degrees to arc seconds. There is also an compensation factor required for joints 4 and 5 when joint 3 is moved (ANGLE_END_RATIO). All of this information is stored in the AxisCal.txt file on the share. Anytime an angle value is sent or recieved by the Firmware, it is multiplied by the conversion factor for that joint (JointsCal array). The following Javascript (for use in DDE) calculates the correct values given the gear ratios, stepper motor steps per revolution, and stepper driver microstepping setting.
var motor_steps = 400
var micro_step = 16
var gear_ratios = [
52 / 1, //Joint 1: Harmonic drive (changed for cycloidal, worm, etc...)
52 / 1, //Joint 2
52 / 1, //Joint 3
90 / 16, //Joint 4: Pulley on Joint 3 / Pulley on motor shaft
90 / 16 //Joint 5: Pulley on Joint 3 / Pulley on motor shaft
]
var AxisCal_string = ""
for(let i = 0; i < 5; i++){
AxisCal_string += -(gear_ratios[i]*micro_step*motor_steps) / (3600*360) + "\n"
}
AxisCal_string += -Math.round(gear_ratios[3] / gear_ratios[2] * Math.pow(2, 24))
// gear_ratios is a zero index array so [3] is joint 4 and [2] is joint 3.
The axis 5 line in the file, second line from the end, may need it's sign swapped. If you do a move_to([x,y,z], [-1,0,-1]) the end effector should be pointing in the negative x direction. That is, if the [x,y,z] values are all positive, and you are standing behind the robot (robots point of view), then the end effector should be pointing to your left at 45' with a direction of [-1,0,-1]. If this is wrong, the position of the tip of the end effector will change when going to a point from different directions. E.g. move_to([0,0.5,0.075], [-1,0,-1]) with place the end effector at a different point than move_to([0,0.5,0.075], [1,0,-1])
Status data for each of the joints is returned via the 'g' command oplet and automatically after most commands.
To search the Wiki, use the main search box in the black bar at the top, then select WiKi to filter the results or go to https://github.com/HaddingtonDynamics/Dexter/search?type=Wikis&q= and then add your search terms to the end of the URL.
To report errors, or request additional data, please chat with us on discord and/or raise a new issue