The GE1x series grippers, such as the GE11 gripper, are a series of third-party grippers that are sold by Zaber and supported by Zaber Motion Library.
The GE1x series has two methods of control:
Movement and configuration can be controlled using a USB/Serial connection
Movement can be controlled using digital I/O
Zaber Motion Library allows you to control movement and configuration using USB/Serial directly. By connecting a GE1x series gripper to an X-MCC or other Zaber device with digital I/O, you can also control the gripper using the digital I/O of that Zaber device.
For information on how to connect to a GE1x series gripper, see the setup guide.
USB/Serial Control
Using a USB/Serial connection is the best way to control and configure a GE1x series gripper if you don't need precise coordinated motion and are able to make the physical USB/Serial connection to the gripper. This type of connection has the most functionality and is the easiest to get started with.
let gripper =tryawaitGe1xGripper.openConnection(portName: "COM3")
print("Connected to gripper!")
Movement
Before moving a gripper, it must be homed. Homing ensures that the gripper knows its current position by moving to one end of travel and detecting resistance:
Python
C#
C++
JavaScript
MATLAB
Java
Swift
MATLAB (legacy)
gripper.home()
print(f"Gripper is homed: {gripper.is_homed()}")
await gripper.home();
console.log(`Gripper is homed: ${await gripper.isHomed()}`);
gripper.Home();
Console.WriteLine($"Gripper is homed: {gripper.IsHomed()}");
gripper.home();
System.out.println(String.format("Gripper is homed: %b", gripper.isHomed()));
gripper.home();
fprintf('Gripper is homed: %d\n', gripper.isHomed());
gripper.home();
fprintf('Gripper is homed: %d\n', gripper.isHomed());
tryawait gripper.home()
print("Gripper is homed: \(tryawait gripper.isHomed())")
A gripper can be moved to the closed position, the open position, or to a percentage representing the position from 0 (closed) to 100 (open). Movement functions return only after the movement completes, but this can be optionally overridden by setting waitUntilIdle to false:
Various settings can be set on the gripper. Settings are saved to flash and persist on power-off by default, unless otherwise specified:
Python
C#
C++
JavaScript
MATLAB
Java
Swift
MATLAB (legacy)
# Disable auto home on power-up
gripper.set_auto_home(False)
# Change the home direction to close without saving to flash
gripper.set_home_direction(Ge1xGripperDirection.CLOSE, save_to_flash=False)
// Disable auto home on power-upawait gripper.setAutoHome(false);
// Change the home direction to close without saving to flashawait gripper.setHomeDirection(Ge1xGripperDirection.CLOSE, { saveToFlash: false });
// Disable auto home on power-up
gripper.SetAutoHome(false);
// Change the home direction to close without saving to flash
gripper.SetHomeDirection(Ge1xGripperDirection.Close, saveToFlash: false);
// Disable auto home on power-up
gripper.setAutoHome(false);
// Change the home direction to close without saving to flash
gripper.setHomeDirection(Ge1xGripperDirection.CLOSE, false);
% Disable auto home on power-up
gripper.setAutoHome(false);
% Change the home direction to close without saving to flash
gripper.setHomeDirection(Ge1xGripperDirection.CLOSE, false);
% Disable auto home on power-up
gripper.setAutoHome(false);
% Change the home direction to close without saving to flash
gripper.setHomeDirection(Ge1xGripperDirection.Close, saveToFlash=false);
// Disable auto home on power-up
gripper.setAutoHome(false);
// Change the home direction to close without saving to flash
gripper.setHomeDirection(Ge1xGripperDirection::CLOSE, false);
// Disable auto home on power-uptryawait gripper.setAutoHome(enabled: false)
// Change the home direction to close without saving to flashtryawait gripper.setHomeDirection(direction: Ge1xGripperDirection.close, saveToFlash: false)
The GE1x series gripper supports up to 4 presets that can be triggered via I/O or via the activatePreset method:
Python
C#
C++
JavaScript
MATLAB
Java
Swift
MATLAB (legacy)
# Set preset 1 to open
gripper.set_preset(1, 100)
# Set preset 2 to close at half force
gripper.set_preset(2, 0, force=50)
# Set preset 3 to a middle position at half force and half speed
gripper.set_preset(3, 50, force=50, speed=50)
# Move the gripper to preset 2
gripper.activate_preset(2)
// Set preset 1 to openawait gripper.setPreset(1, 100);
// Set preset 2 to close at half forceawait gripper.setPreset(2, 0, { force: 50 });
// Set preset 3 to a middle position at half force and half speedawait gripper.setPreset(3, 50, { force: 50, speed: 50 });
// Move the gripper to preset 2await gripper.activatePreset(2);
// Set preset 1 to open
gripper.SetPreset(1, 100);
// Set preset 2 to close at half force
gripper.SetPreset(2, 0, force: 50);
// Set preset 3 to a middle position at half force and half speed
gripper.SetPreset(3, 50, force: 50, speed: 50);
// Move the gripper to preset 2
gripper.ActivatePreset(2);
// Set preset 1 to open
gripper.setPreset(1, 100);
// Set preset 2 to close at half force
gripper.setPreset(2, 0, 50);
// Set preset 3 to a middle position at half force and half speed
gripper.setPreset(3, 50, 50, 50);
// Move the gripper to preset 2
gripper.activatePreset(2);
% Set preset 1 to open
gripper.setPreset(1, 100);
% Set preset 2 to close at half force
gripper.setPreset(2, 0, 50);
% Set preset 3 to a middle position at half force and half speed
gripper.setPreset(3, 50, 50, 50);
% Move the gripper to preset 2
gripper.activatePreset(2);
% Set preset 1 to open
gripper.setPreset(1, 100);
% Set preset 2 to close at half force
gripper.setPreset(2, 0, force=50);
% Set preset 3 to a middle position at half force and half speed
gripper.setPreset(3, 50, force=50, speed=50);
% Move the gripper to preset 2
gripper.activatePreset(2);
// Set preset 1 to open
gripper.setPreset(1, 100);
// Set preset 2 to close at half force
gripper.setPreset(2, 0, 50);
// Set preset 3 to a middle position at half force and half speed
gripper.setPreset(3, 50, 50, 50);
// Move the gripper to preset 2
gripper.activatePreset(2);
// Set preset 1 to opentryawait gripper.setPreset(presetNumber: 1, position: 100)
// Set preset 2 to close at half forcetryawait gripper.setPreset(presetNumber: 2, position: 0, force: 50)
// Set preset 3 to a middle position at half force and half speedtryawait gripper.setPreset(presetNumber: 3, position: 50, force: 50, speed: 50)
// Move the gripper to preset 2tryawait gripper.activatePreset(presetNumber: 2)
I/O Control
I/O control allows the gripper to be controlled via its 2 digital inputs. I/O control can be beneficial if you want to move the gripper as part of a Zaber controller's stream or PVT sequence, if you want to control the gripper using a Zaber controller without a separate USB/Serial connection, or if you want to control the gripper using a non-Zaber device. See the setup guide for more details.
First, configure the gripper for I/O control:
Python
C#
C++
JavaScript
MATLAB
Java
Swift
MATLAB (legacy)
gripper.set_io_enabled(True)
# Set preset 1 to open
gripper.set_preset(1, 100)
# set preset 2 to close slowly
gripper.set_preset(2, 0, speed=10)
await gripper.setIoEnabled(true);
// Set preset 1 to openawait gripper.setPreset(1, 100);
// set preset 2 to close slowlyawait gripper.setPreset(2, 0, { speed: 10 });
gripper.SetIoEnabled(true);
// Set preset 1 to open
gripper.SetPreset(1, 100);
// set preset 2 to close slowly
gripper.SetPreset(2, 0, speed: 10);
gripper.setIoEnabled(true);
// Set preset 1 to open
gripper.setPreset(1, 100);
// set preset 2 to close slowly
gripper.setPreset(2, 0, 100, 10, true);
gripper.setIoEnabled(true);
% Set preset 1 to open
gripper.setPreset(1, 100);
% set preset 2 to close slowly
gripper.setPreset(2, 0, 100, 10, true);
gripper.setIoEnabled(true);
% Set preset 1 to open
gripper.setPreset(1, 100);
% set preset 2 to close slowly
gripper.setPreset(2, 0, speed=10);
gripper.setIoEnabled(true);
// Set preset 1 to open
gripper.setPreset(1, 100);
// set preset 2 to close slowly
gripper.setPreset(2, 0, 100, 10);
tryawait gripper.setIoEnabled(enabled: true)
// Set preset 1 to opentryawait gripper.setPreset(presetNumber: 1, position: 100)
// set preset 2 to close slowlytryawait gripper.setPreset(presetNumber: 2, position: 0, speed: 10)
Then, open a connection to the X-MCC and use it to drive the gripper's I/O:
let connection =tryawaitConnection.openSerialPort(portName: "COM4")
let devices =tryawait connection.detectDevices()
let mcc = devices[0]
let preset1: [DigitalOutputAction] = [.off, .off, .keep, .keep]
let preset2: [DigitalOutputAction] = [.on, .off, .keep, .keep]
tryawait mcc.io.setAllDigitalOutputs(values: preset1)
tryawaitTask.sleep(nanoseconds: 2_000_000_000)
tryawait mcc.io.setAllDigitalOutputs(values: preset2)
To control the gripper as part of a PVT sequence with one or more movable axes, I/O actions on the Zaber controller can be interleaved with PVT points:
var sequence = mcc.Pvt.GetSequence(1);
sequence.SetupLive(1);
sequence.SubmitSequenceData(new PvtSequenceItem[] {
new PvtPoint {
Positions = new[] { new Measurement { Value = 10, Unit = Units.Length_Millimetres } },
Velocities = new[] { new Measurement { Value = 5, Unit = Units.Velocity_MillimetresPerSecond } },
Time = new Measurement { Value = 1, Unit = Units.Time_Seconds },
Relative = false,
},
new PvtSetAllDigitalOutputsAction { Values = preset1 },
new PvtPoint {
Positions = new[] { new Measurement { Value = 0, Unit = Units.Length_Millimetres } },
Velocities = new[] { new Measurement { Value = 0, Unit = Units.Velocity_MillimetresPerSecond } },
Time = new Measurement { Value = 1, Unit = Units.Time_Seconds },
Relative = false,
},
});