Skip to content

Latest commit

 

History

History
166 lines (135 loc) · 6.59 KB

README.md

File metadata and controls

166 lines (135 loc) · 6.59 KB

Advanced High-Speed Scooping (2024)

1. Overview

This repository contains the latest software implementation of High-Speed Scooping using our latest direct-drive gripper. It can be applied to rapidly and adaptively picking thin objects off from a hard surface, as illustrated below.

High-Speed Scooping

Adaptive High-Speed Scooping

Our swivel fingertips help scoop objects even when the gripper's workplane is not exactly normal to the ground surface.

Fragile objects, such as seaweed and cracker, can also be picked up.

Related repos

2. Prerequisites

Hardware

Software

Our software is implemented with python3 and tested on Ubuntu 20.04.

Git clone our software.

git clone https://github.com/JS-RML/Advanced-high-speed-scooping.git

Install odrivetool. If you've already installed this pakage when you calibrate odrive, you can skip this step.

pip install --upgrade odrivetool

Connect your motor drivers (odriveS1) with your PC and run odrivetool in the terminal.

odrivetool

If successful, you will see the following output.

ODrive control utility v0.6.7
Please connect your ODrive
You can also type help() or quit().

Connected to ODrive S1 384D34783539 (firmware v0.6.7) as odrv0
Connected to ODrive S1 383F34723539 (firmware v0.6.7) as odrv1
Connected to ODrive S1 3868345A3539 (firmware v0.6.7) as odrv2
Connected to ODrive S1 3866346F3539 (firmware v0.6.7) as odrv3

Record these serial numbers (384D34783539, 383F34723539 ...) to create Actuator objects later.

3. Run High-Speed Scooping

Before running the code

Modify GRIPPER/Gripper.py as follows.

(1) Define the variables SN_L0, SN_L1, SN_R0, and SN_R1 using the serial numbers aforementioned.

SN_L0 = '384D34783539'
SN_L1 = '383F34723539'
SN_R0 = '3868345A3539'
SN_R1 = '3866346F3539'

(2) Create odrive objects using those SN_L0, SN_L1, SN_R0, and SN_R1.

odrv0 = odrive.find_any(serial_number=SN_L0)
odrv1 = odrive.find_any(serial_number=SN_L1)
odrv2 = odrive.find_any(serial_number=SN_R0)
odrv3 = odrive.find_any(serial_number=SN_R1)

(3) Create Actuator objects using the odrive objects above. The second argument of each Actuator object is the motor offset value (refer to 'Calibrate Zero Position' of the direct-drive gripper repo). Just let the third and fourth arguments be 1 and 45 (you won't need to change these values).

LF0 = Actuator(odrv0, 0.966, 1, 45) # left finger
LF1 = Actuator(odrv1, 0.955, 1, 45)
RF0 = Actuator(odrv2, 0.977, 1, 45) # right finger
RF1 = Actuator(odrv3, 0.338, 1, 45)

(4) Set control parameters in GRIPPER/mainGripper.py. You can load preset values by selecting one of the options below and commenting out the others.

controlSignal = 'card'
# controlSignal = 'domino'
# controlSignal = 'goStone'
# controlSignal = 'cracker'
# controlSignal = 'chip'
# controlSignal = 'envelope'
# controlSignal = 'seaweed'
# controlSignal = 'testMotion'

Let the robot high-speed scoop

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 (motor angles in degrees).
  • goalConfiguration : Goal configuration (motor angles in degrees).
  • beforeCollisionStiffness : Motor P-gains before collision.
  • afterCollisionStiffness : Motor P-gains after collision.
  • beforeCollisionVelGain : Motor D-gains before collision.
  • afterCollisionVelGain : Motor D-gains after collision.

Each parameter is a four-tuple that specifies the values for the motors L0, L1, R0, and R1, respectively.

Take GRIPPER/OBJECTS/Card.py for instance. In the code, the parameters are preset as follows, to scoop a plastic card.

# Example code
initialConfiguration = [27, 28, 44, -47]
goalConfiguration = [45, 10, -35, -17]
beforeCollisionStiffness = [20, 20, 20, 20]
afterCollisionStiffness = [20, 20, 100, 100]
beforeCollisionVelGain = [0.15,0.15,0.15,0.15]
afterCollisionVelGain = [0.15,0.15,0.15,0.15]

Maintenance

Hyeonje Cha (guswp3611@gmail.com) and Seunghwa Oh (seunghwa9118@pusan.ac.kr)