Product
CR Hand
2,000 USD
Free shipping.
It will be shipped approximately 2-4 weeks after placing your order.
The CR Hand is a truly human-sized robotic hand with 6 degrees of freedom. The distance from the wrist mounting surface to the fingertips is only 172 mm. All motors and the control box are integrated into this compact design, making it ready to operate as soon as you connect a USB cable and power supply. By utilizing high-precision FDM 3D printing, we have achieved an affordable price. It is ideal for educational and research purposes.
<Main Features>
Diverse movements with 13 joints and 6 motors.
Capable of precise pinching and powerful grasping.
Joints with built-in springs enable flexible interaction and help avoid damage during collisions.
The fingertips are detachable with M2 screws, allowing various sensors and materials to be attached for versatile use.
<Specifications>
Weight: 326g
Voltage: 6V
Max Motor Force: 18N(Per Finger)
Material: PTEG
Control Board: Pololu Micro Maestro 6-Channel USB Servo Controller
Accessories: Power Adapter, USB2.0 Cable(mini-B type)
<Approximate dimensions / Wrist mounting dimensions>
<Fingertip mounting dimensions>
For quotes, orders, or any other inquiries, please contact us at admin@curious-robotics.com
The following is technical information.
<How to use>
1. Using the GUI
You can use the Maestro Control Center by downloading Pololu’s driver and software. The Maestro Control Center is an intuitive tool for operating and configuring the robotic hand. Its key features include:
- Real-time control: Each motor can be controlled individually, and you can adjust motor positions simply by dragging the sliders.
- Cross-platform compatibility: Supports both Windows and Linux.
- Script creation and execution: The built-in script editor allows you to create, edit, and execute scripts directly. This enables automation and customization of movements.
- Motion recording and playback: You can record motor movements as sequences and replay them. This makes it easy to create and modify complex motion patterns.
These features allow for intuitive and efficient configuration and control of the CR Hand.
2. Using with a Program
The built-in control board, Pololu Micro Maestro 6-Channel USB Servo Controller, supports serial communication, allowing you to control the CR Hand using programming languages such as Python.
Before using serial communication, make sure to set the Serial mode to "USB Dual Port" in the Serial Settings of the Maestro Control Center as mentioned earlier.
The following is an example of using Processing to control the hand's posture via keyboard input.
import processing.serial.*;
// Serial object
Serial myPort;
// Define servo positions to be set when each key ('1' to '7') is pressed
// Index: 0-6 corresponds to Ch0-Ch5
// Example: scenarios[0] represents the servo positions when key '1' is pressed
int[][] scenarios = {
{4000, 4000, 4000, 4000, 4000, 4000}, // '1' Open
{8000, 7000, 4000, 8000, 8000, 8000}, // '2' Pinch_open
{8000, 7000, 6000, 8000, 8000, 8000}, // '3' Pinch_close
{8000, 4000, 4000, 4000, 4000, 4000}, // '4' Grasp_open
{8000, 6000, 8000, 8000, 8000, 8000}, // '5' Grasp_close
{4000, 4000, 8000, 8000, 8000, 8000}, // '6' Thumb_pinch_open
{4000, 8000, 8000, 8000, 8000, 8000} // '7' Thumb_pinch_close
};
void setup() {
size(400, 200);
// Display available serial ports (for debugging)
println(Serial.list());
// Connect to the Maestro Command Port (change the port name as needed)
myPort = new Serial(this, "COM4", 9600);
println("Connected to COM4");
// Set the initial state, for example, to the position for key '1'
setAllServos(scenarios[0]);
}
void draw() {
// No processing required
}
// Called when a key is pressed
void keyPressed() {
// Check if the key is between '1' and '7'
if (key >= '1' && key <= '7') {
int index = key - '1'; // Calculate: '1' corresponds to 0, '2' to 1, and so on
if (index >= 0 && index < scenarios.length) {
// Set the servo positions defined in scenarios[index]
setAllServos(scenarios[index]);
}
}
}
// Function to set positions for all servos (Ch0 to Ch5)
void setAllServos(int[] positions) {
for (int ch = 0; ch < 6; ch++) {
setServoPosition(ch, positions[ch]);
}
}
// Function to set a servo position
void setServoPosition(int channel, int target) {
byte[] command = new byte[4];
command[0] = (byte)0x84; // Servo position setting command (0x84)
command[1] = (byte)channel;
command[2] = (byte)(target & 0x7F); // Lower 7 bits
command[3] = (byte)((target >> 7) & 0x7F); // Upper 7 bits
println("Sending command to Ch" + channel + ": "
+ hex(command[0]) + " "
+ hex(command[1]) + " "
+ hex(command[2]) + " "
+ hex(command[3]));
println("Target: " + target + " (" + (target * 0.25) + "µs)");
myPort.write(command);
}