Robotic hands typically use servos with positional control mechanisms such as potentiometers, resolvers, or hall effect sensors to track finger positions. However, this approach introduces several challenges:
- Increased complexity
- Higher costs
- Space constraints for servo horns and positional sensors
- Limited rotation (usually up to 180 degrees), restricting finger movement
- Reduced finger force
Linear servos offer distinct advantages:
- Unlimited finger movement
- Higher force output
However, they lack built-in rotational control and require external sensors, leading to the same issues of cost, complexity, and space constraints.
We propose a time-based approach to finger position estimation. This method involves:
- Attaching a tactile switch to the tip of each finger to detect movement limits, reversing the movement.
- Calibrating each finger by moving it in and out multiple times at various speeds.
- Recording movement duration, servo channel, speed, and direction to build a database of motion profiles.
- Using this database to estimate finger positions based on past movement data.
A secondary program continuously updates the last recorded position of each finger based on its most recent movement, allowing the system to predict positioning with reasonable accuracy.
For testing, we used the widely known 3D-printed prosthetic hand from Thingiverse:
- https://www.thingiverse.com/thing:1691704 (modified for 5 servos)
- Alternative: https://www.thingiverse.com/thing:4807141 (designed for 5 servos)
- Best option: Inmoov I2 Hand (spring-based for improved precision and durability)
Our prototype uses inexpensive DS04-NFC servos controlled by a PCA-9685 servo driver, connected to a Jetson Orin AGX 64. However, any Jetson board should work.
- Assemble a suitable robotic hand and attach a TS-02 tactile switch to both sides of each finger (see photos). For more accuracy, instead of buttons HAL effect sensors can be used. Note that the buttons need to use pull-up resistors, as Jetsons do not have these in their GPIO ports like Arduino boards: look at the schematic and photos and ensure you test the buttons with the testbutton.py code included: the code use GPIO 16 and 18, but it can be altered
- Install the required libraries:
pip install -r requirements.txt
- Run the program "testbuttons.py" to ensure both buttons work seamlessly, as otherwise the finger will reach the end and stress the servo
- Edit
measure.py
to specify the correct servo channel for the finger being trained. - Run the program:
python measure.py
- The script will move the finger back and forth at random speeds, recording movement times in a file (
servo(channel).txt
). - The longer the program runs, the more precise future movements will be.
- The script will move the finger back and forth at random speeds, recording movement times in a file (
- Repeat the process for each finger.
- Enhancing position estimation accuracy with additional sensors or feedback mechanisms.
- Implementing machine learning for adaptive motion prediction.
- Exploring alternative servo and motor options for better performance.
This project aims to create a more cost-effective and flexible control system for robotic hands, removing the limitations of traditional position-controlled servos.