/parrot_gripper

Parrot-inspired gripper for in-hand manipulation

Primary LanguageJupyter Notebook

Parrot Gripper

1. Overview

The parrot gripper is a robotic end-effector that imitates the parrot's feeding apparatus with a pair of powerful beaks and a soft tongue. This end-effector is implemented by retrofitting an off-the-shelf industrial robotic gripper with customized hardware devices. The tongue (or palm) is a five-bar parallel manipulator that is direct-driven by two brushless gimbal motors, which can achieve force control, virtual compliance, and rapid motion. The beaks (or fingers) are actuated by two servo motors that morphs the adaptive linkages of the gripper.

This repository provides the instructions of assembling and controlling the parrot gripper.

Related Patents:

  • K. H. Mak, Z. Yin, and J. Seo, "System and Method for Robotic In-Hand Manipulation," (Under preparation).

2. Bill of Materials

CAD Model (SolidWorks2018 or newer is required)

Actuators

Electronics

3. Assembly Instructions

3.1 Assembling servo link to gripper bracket

Note: Repeat this step for the other side of the bracket. The M3 x 25 screw should be placed into the hole before attaching the motor.

3.2 Attaching the brushless motor to gripper bracket

Note: Repeat this step again for another bracket

3.3 Assembling the palm links

Note: Repeat this step again for another bracket

3.4 Assembling the palm end-effector

3.5 Assembling gripper finger servo

Note: Repeat this step for another finger

3.6 Attaching the assembled brackets to the gripper

3.7 Fastening the gripper brackets

3.8 Connecting the palm end-effector

3.9 Connecting the finger servo link

Note: Repeat this step for another finger

4. System Schematic

4.1 ODrive Connections

Connecting the motors through the header to the motor terminals

Connecting the encoders to ODrive through SPI interface

Note: The two encoders are identified by the GPIO pin that they connected to. For example, the CSN pin of encoder #1 is connected to GPIO pin 5 and encoder #2 is connection to pin 6.

USB and power connection

5. Software

5.1 Prerequisites

  • Install python3: sudo apt install python3 python3-pip
  • Install ODrive tool: sudo pip3 install --upgrade odrive
  • Install urx: sudo pip install urx
  • Install Jupyter Notebook: sudo pip3 install jupyter

5.2 Setting up ODrive

Configuring ODrive

To configure the ODrive board with the provided config file, run:

cd ~/parrot_gripper/odrive
odrivetool restore-config palm_config.json

Note: If the config file cannot be restored due to mismatched firmware on the ODrive board, you can configure the ODrive by running the commands in the terminal. To set the configs:

  • Start ODrive tool in terminal odrivetool.
  • Copy the commands in odrive/palm_config_cmd and execute them in the terminal.
  • Save the configuration by running odrv0.save_configuration() before powering off the ODrive board.

Calibrating motors and encoders

After setting the config parameters, the motors and encoders have to be calibrated to measure the motor resistance and encoder offset.

  • Start ODrive tool in terminal odrivetool.
  • Run odrv0.<axis>.requested_state = AXIS_STATE_FULL_CALIBRATION_SEQUENCE to start the calibration. Change <axis> to axis0 or axis1 to calibrate the two axes.
  • Run odrv0.<axis>.encoder.config.pre_calibrated = True and odrv0.<axis>.motor.config.pre_calibrated = True for both axes.
  • Run odrv0.save_configuration().

Testing the motor control

  • Run odrv0.axis0.requested_state = AXIS_STATE_CLOSED_LOOP_CONTROL to see if the motor is holding its position.

For more details, see ODrive documentation.

5.3 Example script

The example script of controlling the parrot gripper can be found in /script/example.ipynb. To run the script:

  • Start a Jupyter Notebook server in terminal jupyter notebook.
  • Run example.ipynb via the Jupyter Notebook web interface.

6. Maintenance

For any technical issues, please contact Ka Hei Mak khmakac@connect.ust.hk