Skip to content

Latest commit

 

History

208 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

Direct-Drive Finger for Scooping

We present our Direct-Drive End-Effector with Spatulate Fingertip that rapidly inserts beneath an object and scoops it without ejection. This project is inspired by and extends the work of Direct-Drive-Gripper-with-Swivel-Fingertips.

Image

Related repos

Table of Contents


Parts

Bill of Materials (BOM)

Off-the-Shelf Parts

3D Printing

Image

Motors

We need two motor subassemblies. Each one can be assembled as follows. Image

Wiring

The components should be connected following the diagram below. For power supply, the system supports an input range of DC 12-48V. In our setup, we supplied 24V. The encoder connection will be further elaborated. Image

Encoder Connection

For the encoder connection, we fabricated a cable assembly as shown in the schematic below.

The wires were joined using heat-shrinkable tube (3.0 × 45 mm) instead of soldering. After aligning the wires inside the tube, apply heat with a heat gun or lighter to shrink the tube and secure the connection.

And Finally, insert the connector into the Odrive S1 as shown in the figure below. Image Image

Motor Connection

Keep the 3-phase connection consistent as shown below. Image

Motor Calibration

Each actuator module require calibration before use. This step can not be done after the gripper is assembled, so do not postpone this step.

We explicitly define the direction of the rotor to be the direction the hexagonal logo on the rotor is pointing at, and the zero position of the motor to be when the direction of the motor is pointing at the opposite direction of the power port on the stator. Image

Calibrate Odrive

ODrive provides a GUI service for setting up the motordriver. Odrive GUI In the configuration tab in this GUI, You can set up the motordriver's configuration. (this step need motor move freely so you don't set like Calibrate Zero Position diagram)

  • Power source

    • DC bus overvoltage trip level: 26
    • DC bus undervoltage trip level: 22
    • DC max positive current: 'Leave it blank'
    • DC max negative current: -0.5
  • Motor

    • Type: Gimbal
    • Phase resistance: 2.675
    • Pole pairs: 7
    • KV: 26
    • Current limit: 1
    • Motor calib current: 10
    • Motor calib voltage: 2
    • Lock-in spin current: 10
  • Encoder

    • Type: SPI (AMS protocol)
    • nCS pin: GPIO 12
  • Control mode

    • control mode: Position Control
    • Soft velocity limit: 10
    • Hard velocity limit: 13.75
    • Torque limit: 0.192
  • Interface

    • UART (115200)

Calibrate Zero Position

Here we calibrate the zero position of the motor. Mount the actuator on the calibration stand and install the calibration arm onto the actuator according to the diagram Image Put the motor into zero position as show in the diagram below. Press down the calibration arm to make sure the stand and arm touch tightly. Image when your motor is zero position you go to (ODrive0, ODrive1) in the 'inspector' tab of the Odrive GUI and set like picture below.(when you finish First step, Second step is you have to click save_configuration variable call button, Refer to Odrive doucument) guirrreaaaal

Assembly Instructions

Direct-Drive Finger Assembly

Image Image

Mounting

Image

Customization

If the default mounting does not work for you, it's very easy to make a custom mount. The end-effector has a 30 mm PCD with 4 ⨉ M4 mounting interface, as shown in the drawing below.

Image

The end-effector is designed to be compatible with ISO 9409-1-50-4-M6 Flange (applied Rainbow robotics RB5, Universal Robots UR10e, Universal Robots UR5, etc.). For other robot systems, it would be better to customize the adapter plate and coupling.

Image

Software

Implemented in Python 3 on Ubuntu. For ODrive basics, see official docs.

Prerequisites

Versions

  • Ubuntu: 22.04
  • Python: 3.10.11
  • ODrive control utility: 0.6.7

Git clone our software.

https://github.com/taehwaru/Single-Finger-Gripper-for-Scooping-Object.git

Virtual Environment Settings

Please open Visual Studio Code terminal and copy and paste the code below to set your virtual environment.

sudo apt-get install python3-venv
python3 -m venv myenv
source myenv/bin/activate
pip install --upgrade odrive

if you finish Virtual Environment Settings part, Please refer to JS-RML, Direct-Drive Gripper with Swivel Fingertips/Software/Getting started to get started.

How to connect Robot Arm and PC

(1) connect RB5-850 control box and PC with lan cable.

(2) Go to network in Ubuntu settings and enter the information as shown in the picture below. Screenshot from 2025-11-25 19-53-14

(3) Open the terminal and type ping 192.168.0.10. If it comes out like the picture below, the robot arm and the PC are communicating. Screenshot from 2025-11-25 20-38-34

Run Finger for Scooping Object

Before running the code

Modify GRIPPER/Spatula.py as follows.

(1) Define the variables SN_M1, SN_M2 using the serial numbers of each odrive.

SN_M1 = '383F34723539'
SN_M2 = '00E848E15413'

(2) Create odrive objects using those SN_M1, SN_M2.

odrv0 = odrive.find_any(serial_number=SN_M1)
odrv1 = odrive.find_any(serial_number=SN_M2)

(3) Create Actuator objects using the odrive objects above.

MOTOR1 = Actuator(odrv0, 0, 1, 45) 
MOTOR2 = Actuator(odrv1, 0, 1, 45)

(4) Select controlSignal in GRIPPER/mainGripper.py.

controlSignal = 'Scoop'
#controlSignal = 'testFinger'
#controlSignal = 'testEdge'
#controlSignal = 'testGetTheta'
#controlSignal = 'testGetEdge'
#controlSignal = 'testGetFingerTip'
#controlSignal = 'testMotionStop'

Let the finger for Scooping Object

Run main.py.

python3 main.py

How to customize control parameters

There are a set of control parameters that you can customize for different objects to scoop.

  • initialConfiguration: Initial configuration
  • goalConfiguration: Goal configuration
  • pgain: Motor P-gains after collision.
  • softmax: Motor current limit
  • torque_soft_max: Motor positive torque limit(this variable not contain at code so if you want to fix it, you can use odrive gui)
  • torque_soft_min: Motor negative torque limit(this variable not contain at code so if you want to fix it, you can use odrive gui)
  • sensi: Motor angle Error range

for instance. In the code, the parameters are preset as follows, to scoop a iphone 13 mini (155g).

#Example code
x0=-40 ,y0=130
shoulder01, shoulder02 = ik_5bar_fingerTip(x0, y0)
initialConfiguration=[shoulder01,shoulder02]

x1=100,y1=10
shoulder11, shoulder12 = ik_5bar_fingerTip(x1, y1)
goalConfiguration=[shoulder11, shoulder12]

pgain=[15,15]
softmax=[4,4]
torque_soft_max=[0.8,0.8]
torque_soft_min=[-0.8,-0.8]
sensi=5

Motor Manipulation

Our end-effector uses a Coaxial 5-bar (Diamond) Linkage. The system can be controlled in two modes — either based on the linkage edge point E(xₑ, yₑ) or the fingertip point T(xₜ, yₜ), depending on the desired level of precision. The controller accepts the endpoint position (either E or T) and outputs the two motor commands 𝜃₁ and 𝜃₂.

Image Image

Example ① : input E

Image

Example ② : input T

Image

Experiments

Experiment Setting

Image

Results

Task Objects Mass (g) P-Gain (Stiffness) Torque Limit (N·m) Success Rate
3D Printed 10-50 15 ±0.4 90% (27/30)
Carton Box 63 15 ±0.4 66.6% (20/30)
Phone 155 150 ±0.8 60% (20/30)

Experiment ① : Test Object (30 g)

Image

Experiment ② : Test Object (50 g)

Image

Experiment ③ : Carton Box (63 g)

Image

Experiment ④ : iphone13 mini (155 g)

Image

Contributors

About

Single-Finger Gripper for Scooping Object

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages