Skip to content
JamesNewton edited this page Jun 7, 2020 · 54 revisions

Note: Changing end effectors, assuming they have different lengths, changes Link Lengths, and that will make the Kinematics change. If you are using onboard Kin, via the 'M' and 'T' oplets, the SetParameter LinkLengths needs to be updated with a single value to change length 5.

In DDE, when using the "move_to" or other Kinematics commands, search the help panel for "link lengths" to ensure it is setup correctly.

How to measure Length Links

Table of contents:

Tool Interfaces

Version 1

The end point of the standard Dexter robot hardware is a replaceable "tool interface" It has a shape which makes it easy for other tools to be clicked on and off. There are spring loaded connectors, sometimes called "pogo pins" at the end for electrical connection, and space for a Tinyduino if additional processing of the signals is needed.

The signals available to the end effector include power, ground, and whatever signals the main board has been configured to produce. Early versions were wired to USB connection. Later version bring out the AUX1 and AUX2 GPIO pins from the FPGA via J20 and J21 which can be configured to produce different signals.

J19 pin 7

IO pin 7 of connector J19 on bottom of PCB. This is controlled via the GripperMotor SetParameter. e.g.

Dexter.move_all_joints(0, 0, 0, 0, 0)
make_ins("S", "GripperMotor", 1), //Digital output pin. 0 = off 1 = 5v TODO: Verify this?

The FPGA support high resolution PWM on this pin, via W Oplet address 73 to 75. Bit 0 of W oplet address 75 enables / disables this pin. e.g. W 73 1 enables it. Address 74 controls the off time, and address 75 controls the on time.

J20 / J21 (Blue and Green wires)

AUX1 and AUX2 GPIO pins from the FPGA via J20 and J21. These are the white connectors in the upper right on the back of the motor board. On Dexter HD, the J20 pins are brought out to the end effector as the "green" and "blue" wires. Green is the top pin on J20, and blue is the bottom.

In the original firmware, these were connected to the EERoll and EESpan SetParameter commands. Dexter.move_all_joints(0, 0, 0, 0, 0)
make_ins("S", "EERoll", 512), //PWN pin. Integer range of 0-512

In commit 42df0e01285ef8b67764ed53f3cc697df44d4d93, Roll and Span were changed to instead expect Dynamixel servos. However, the wires can still be set manually via the W oplet, at address 64-66.

w oplet address 64:

Bit Wire Function
6, 7 Blue 6,7 Mode
0,0 GPIO (see bits 0, 1)
0,1 PWM High speed (not for servos)
1,0 RC PWM For standard servos
1,1 Dynamixel
4, 5 Green 4,5 Mode
0,0 GPIO (see bits 2, 3)
0,1 PWM High speed (not for servos)
1,0 RC PWM For standard servos
3 Green Output level: When Tristate is 0 and mode GPIO, 0=low, 1=high
2 Green Tristate 0=output (high or low), 1=input
1 Blue Output level: When Tristate is 0 and mode GPIO, 0=low, 1=high
0 Blue Tristate: 0=output (high or low), 1=input

E.g. w 64 80 sets both wires for RC servo PWM output. 80 = 1010000 binary.

In PWM modes, the associated tristate bit must be zero, and the duty cycle is set via w 65 _dutycycle_ or w 66 _dutycycle_. Instead of EESpan use w 65 _dutycycle_ and for EERoll, w 66 _dutycycle_ The dutycycle value should be 591*degrees+1142000

Version 2

Version 2 Tool Interface Exploded View.

The standard going forward will be a new tool interface which incorporates 2 Dynamixel XL-320 servos and a Tinyscreen+ (ARM based, small OLED screen, 4 buttons, lots of IO). One FPGA IO pin will be configured to send and receive data via the Dynamixel protocol 2.0. This requires an update to the FPGA image.

To move the Dynamixel servos, the standard "a" move all joints command has been extended to include two more (optional) joint angles. E.g.:
Dexter.move_all_joints(J1, J2, J3, J4, J5, J6, J7) //assumes variables J1-7 are set to degrees
make_ins("a", 0, 0, 0, 0, 0, 512, 100)

Low level commands to directly communicate on the Dynamixel Protocol are also available e.g.
make_ins("S", "ServoSet", servo_addr, register_addr, val_8bit)
make_ins("S", "ServoSet2X", servo_addr, register_addr, val_16bit)

The Tinyscreen+ will listen on the servo bus and may return data there or via the dedicated return data line. e.g.
make_ins("S", "ServoSet2X", 2, char1 + char2<<8, char3+char4<<8)

Version 2 Wiring

Signals from the Dexter Motor Control PCB to the Tool Interface:

  • Black: Ground (J25 pin 1, top pin)
  • Red: Logic power +5 Volts (J25 pin 2, the bottom pin). Note: Although out of spec, this actually appears to work very well as a power supply for the servos, making the next signal unnecessary.
  • Supply power (18V to 36V DC from AC adapter J25?), Could be regulated to Servo power voltage (6 - 8.75V) at the interface by the servo power supply board See: Parts, source, Schematic and PCB design. Note: The +5 supply line appears to work ok instead.
  • Blue: Servo data bus, bidirectional. AUX1 via J20 (bottom pin, on bottom connector left side of motor board)
  • Green: Aux / Return serial data. AUX2 via J21?
  • White: The Dexter HD has 1 additional wire which could be used for the servo power (6 - 8.75V) if we want to route that separately from the main supply power. On the HDI, it is used as a second ground wire.

Note: J20 and J21 accept TE Connectivity part 2-179694-2 ^ ^ ^ . A 2 position, 2mm, IDC, AMP CT connector. While this is an IDC part, the crimp head cost is insain even without the crimp handle so manually pressing it in with round nose tweezers or just soldering the wire on maybe the practical choice.

Multiple signals are available from the Tinyscreen+ for many different purposes. A PCB to breakout those signals and make them accessible to end effectors via "spring loaded contacts" (pogos) is being designed. Schematic and PCB

Mechanically, the Tool Interface has a diamond shaped slide and a "power takeoff" (joint 7) to which end effectors are mounted. The slide can be lubricated with pencil graphite to ease insertion and removal of end effectors. The power takeoff should be rotated as shown below before inserting a new end effector. If you wish to leave the robot powered on while changing tools, position Joint 7 at about 170 degrees. (The raw value is 585) It should look like this:

Correct orientation for insertion / removal of tools from the Version 2 Tool Changer.

If the end effector isn't all the way on, usually the power takeoff will pull it on the rest of the way with the first activation.

End effectors:

for the Original Tool Interface

New Servo Tool Interface

To insert the removable finger into the gripper, and install it into Tool Interface, first turn the knob so that the dial points to the line as shown here:
Then push the finger in until the dial points toward the Tool Interface, and slide it in.

See also:

Clone this wiki locally