ARTICHOKE V1.2 FIRMWARE USER GUIDE


OVERVIEW

In this tutorial you'll learn how to download and install the Artichoke V1.2 firmware for the Ada robotic hand. Artichoke is the version of hand control firmware designed for the Ada hand, running on the Almond board.

This tutorial is for:

You will need:


GETTING ARTICHOKE

Artichoke includes full serial control of individual fingers and grip patterns, muscle control through EMG sensors and provides a framework for adding extra functionality to the hand (nunchuck/joystick control). As with all of Open Bionics developer materials, this firmware is completely free to download and use, and we strongly encourage you to incorporate this into your projects, to improve it and build upon it.

DOWNLOADING AND INSTALLING FINGERLIB.H

Before downloading Artichoke, you need to download and install FingerLib.h, a custom finger control library. FingerLib.h is designed to run on a number of different Arduino compatible microcontrollers, and manages all of the low level motor control and handling of timers, it also includes various example sketches for simple finger control applications.

You will first need to download and install the Arduino IDE (click here for the Arduino installation tutorial), next we will install FingerLib.h

  1. Navigate to our GitHub www.github.com/Open-Bionics/FingerLib
  2. Download FingerLib as a ZIP
  3. Extract FingerLib-master.zip and rename it to 'FingerLib' instead of 'FingerLib-master'
  4. Move the FingerLib folder to your Arduino libraries folder (usually My Documents\Arduino\libraries)
  5. Restart Arduino by closing it and opening it again
Download and install Arduino

Download and install Arduino

Download FingerLib from GitHub

Download FingerLib from GitHub

DOWNLOADING AND INSTALLING ARTICHOKE

After FingerLib.h has been downloaded, we now need to download Artichoke and upload it to the Almond board.

  1. Navigate to www.github.com/Open-Bionics/Artichoke
  2. Download OpenBionics_Artichoke as a ZIP
  3. Extract Artichoke-master.zip
  4. Open the file OpenBionics_Artichoke.ino in the Arduino IDE
  5. Power up and connect the Ada hand to your computer
  6. Select the Arduino board (Arduino Mega 2560 or equivalent)
  7. Select the appropriate COM port (Instructions for Mac or PC)
  8. Upload the Artichoke firmware to the hand (if it is a right hand, the thumb may twitch when uploading)
  9. Once uploaded for the first time, the hand may be in demo mode
  10. Whilst in demo mode, the hand cycles through all of the various grips and finger movements
  11. See the next chapter to exit demo mode
Download Artichoke from GitHub

Download Artichoke from GitHub

Open 'OpenBionics_Artichoke.ino' using Arduino

Open 'OpenBionics_Artichoke.ino' using Arduino


USING ARTICHOKE

INITIAL CONFIG

Once uploaded to the Ada hand, connect to the hand via the Serial Monitor. On the bottom right hand corner of the Serial Monitor, set the baud rate to 38400, and set the line ending to 'Carriage Return'.

You should first be greeted with a printout of the firmware version number and board name, followed by a list of possible serial commands. The demo mode should then start, and can be disabled by entering 'A0', without the apostrophes. Entering 'A0' toggles whether demo mode will run on start up (default enabled), and entering 'D' will run demo mode once.

At any time, if you enter '?' the hand will print the list of serial commands, and entering 'A1' will toggle whether the serial commands display on start up. Note that all characters must be uppercase.

Enter '?' to view the list of serial commands

Enter '?' to view the list of serial commands

HAND TYPE

To select whether the Ada hand is a left or right hand, enter one of the following commands:

  • H1            Set the hand to be RIGHT
  • H2           Set the hand to be LEFT
  • H             View whether the hand is LEFT or RIGHT

GRIP CONTROL

With demo mode disabled, if you enter 'G0' the hand should close in grip pattern 0 (Fist Grip), if you enter 'G0' again it should toggle the hand open in grip pattern 0.

Try this with 'G#' where # is a number between 0 - 5 to perform a movement in a selected grip pattern, the grip patterns are as follows;

  • G0 Fist Grip
  • G1 Palm Grip (Fist Grip but with thumb extended)
  • G2 Thumbs Up
  • G3 Point
  • G4 Pinch
  • G5 Tripod (Pinch using both index and middle fingers)

For a more detailed explanation on the grip patterns and how to create custom grips, visit this tutorial.

Enter 'G0' to toggle the hand between open and close in 'Fist Grip'

Enter 'G0' to toggle the hand between open and close in 'Fist Grip'

FINGER CONTROL

The fingers can be controlled individually by entering 'F#', where # is a finger number between 0 - 4.

  • F0 Thumb
  • F1 Index
  • F2 Middle
  • F3 Ring
  • F4 Pinky
Enter 'F0' to toggle the thumb between open and close

Enter 'F0' to toggle the thumb between open and close

 

POSITION AND SPEED MODIFIERS

You can also set the fingers to move to a certain position (P0 - P100) for a selected grip or finger, for example if you enter 'G5 P50' the hand will move to the halfway position of the Tripod grip, or with 'F1 P10' the Index finger will be almost fully closed (P0 = fully open, P100 = fully closed).

The speed can be set in a similar manner by entering 'G# S???', where ??? is a number between 0 - 255 (note that due to the PWM frequency, the motors will struggle to move at any value below around 200).

Both the position and speed can be added to a grip (G#) or a finger (F#) command at the same time, e.g. 'F1 P50 S240'

Move the index finger to be 50% closed at a speed of 240

Move the index finger to be 50% closed at a speed of 240

ADVANCED SETTINGS

Using an advanced command 'A#' allows different modes and settings to be configured, a full list of these settings can be seen by entering the '?' command.


Muscle Control & extras

For details on the different control methods available within Artichoke V1.2, visit out Control Methods Guide.

IMPORTANT NOTE ABOUT I2C

The 2 data lines passed through the 3.5mm headphone port on the Almond board are connected to both I2C pins and analogue pins (through a 10k resistor). If the headphone port is being used for analogue data (e.g. muscle sensors), you should not initialise I2C. When using I2C (e.g Nunchuck), the analogue pins need to be pulled high to act as the pull ups for the I2C lines. 

pinMode(A6,OUTPUT);
pinMode(A7,OUTPUT);
digitalWrite(A6,HIGH);
digitalWrite(A7,HIGH);

Artichoke V1.1 Control Methods


OVERVIEW

In this guide you'll learn about the various methods for controlling the Ada robotic hand.

With the release of Artichoke V1.2, the Ada hand can now be controlled using number of different methods. It also includes a several modes geared towards use in a research environment. This guide will detail the various options for controlling the hand, as well as the different types of data outputs which can be used for simulation, analysis or control.

This tutorial is for:

You will need:


control methods

The Ada hand can be controlled by a number of different control methods.

We have written guides and tutorials regarding the following control inputs:

  • Basic serial control - control the Ada hand via basic serial instructions
  • Low latency serial control - control of the Ada hand optimised for speed
  • EMG control - control the Ada hand via muscle and surface electrodes
  • Joystick control - control the Ada hand using the joystick of a Wii Nunchuck

The Ada hand can also be controlled using the following (untested):

The above lists will be constantly updated as new control methods are developed.


Serial Control

For most applications, the most suitable control method will be to connect the Ada hand to a computer and to control it via a serial connection. All of these serial control methods require a 'Carriage Return' as the line ending.

BASIC MODE

This mode is the default control mode of the Ada hand, as it is very user friendly and slightly resembles the Gcode format. This control method is explained in detail in the Artichoke V1.2 Firmware User Guide.

LOW LATENCY MODE 

Low latency mode allows the position of each finger to be controlled at a faster rate than basic mode, and is very suited to interfacing with desktop applications (e.g. Matlab, Python). This mode receives the target position for each finger, and outputs the current position of each finger in the Comma Separated Value (CSV) format.

To enter into this mode (aka 'Research mode 0, finger position control') enter the serial command 'A10'. This setting changes the default hand control mode, meaning that on power up the hand will remain in 'Research mode 0'. To disable this mode, enter the command 'A10.

The format for the CSV string for both the setting the target position and reading the current position of each finger is detailed below.

Finger0_Pos, Finger1_Pos, Finger2_Pos, Finger3_Pos, Finger4_Pos
  • Finger0_Pos       position of the thumb (0 - 1023)
  • Finger1_Pos        position of the index finger (0 - 1023)
  • Finger2_Pos       position of the middle finger (0 - 1023)
  • Finger3_Pos       position of the ring finger (0 - 1023)
  • Finger4_Pos       position of the pinky (0 - 1023)

Where position 0 is a fully extended finger (open), and position 1023 is a fully contracted finger (closed).

WARNING, WE STRONGLY ADVISE THAT YOU ONLY USE A VALUE BETWEEN 50 - 973 TO PREVENT THE MOTORS FROM HITTING THEIR ENDSTOPS.

In Basic Mode, the position value 0 - 100 is mapped to 50 - 973, meaning there is no chance of the motors hitting their endstops in Basic Mode.

For example, sending the following string will move all of the fingers to the mid-position.

500,500,500,500,500

The target position of each finger is stored until it is overwritten by the latest target position CSV string, but the current position of each finger is printed over serial constantly. Therefore you can send a single target position command, and only send the next target position command until you read that the current position has reached the previous target position.

e.g. Pseudo code

targetPos_CSV= 50,50,973,973,50        // (this would move the fingers to perform the 'spiderman' grip gesture)
send targetPos_CSV to hand
while not (positionReached):
    read currentPos_CSV from hand
    if currentPos_CSV is equal to targetPos_CSV:
        positionReached is true
targetPos_CSV= 50,50,50,50,50        // (this would move the fingers to the open position)
send targetPos_CSV to hand

EMG control

The Artichoke firmware and the Almond board are configured so as to allow the Ada hand to be controlled via Electromyography (EMG) sensors. These sensors attach to surface electrodes placed on the forearm, and detect when the muscle is active. For a complete tutorial on this control method, visit our Muscle Control Tutorial.


JOYSTICK CONTROL

Any release after Artichoke V1.1 allows the Ada hand to be controlled via a Wii Nunchuck. This control method is called the 'HANDle', and is the most intuitive control method. This control method most suited to tasks that require grasping motions. For a complete tutorial on the HANDle, visit this tutorial


MATLAB INTEGRATION 

HAND CONTROL

The Ada hand is very suited to being integrated into projects using Matlab. With the hand in low latency mode (Research Mode 0), Matlab can be used to receive the current finger position data as a CSV string, which can then be split into it's individual components and logged. 

A simple Matlab UI could also be implemented to control the position of each finger using sliders, where the slider value for each finger is concatenated into a CSV string, which is then sent to the Ada hand.

Adding extra sensors

The Ada hand has been designed as a research platform. We fully encourage the addition of extra sensors for force feedback or other metrics. There are two main options for adding extra sensors to the hand, detailed below.

OPTION 1 - Add Ons

The Almond board datasheet details the unused Atmega2560 pins which have been broken out to the edge of the board. These can be used to communicate with external sensors, detailed below.

  • 2 x Analogue Pins
  • 8 x Digital IO (max)
  • 3 x 5V
  • 3 x GND
  • SPI
  • UART

Various sensors, such as Force Sensitive Resistors (FSR), can be soldered to the Almond board directly. The Artichoke firmware would then need to be modified to read the added sensors and print them over the serial port to the computer.

One advantage of using this option is that it requires only a single serial connection (Hand - Computer), resulting in a relatively compact and portable system.

The disadvantages of this option are that a maximum of 2 analogue pins are available. Furthermore, the sample rate of the sensor over the serial port may be slow, as the Artichoke firmware still needs to perform the various hand control functions.

OPTION 2 - extra arduino

A simpler option is to buy a small arduino (ArduinoNano) and connect the sensors to this extra arduino. The software running on the extra arduino can be incredibly simple, thus increasing the sample rate. It would also allow many more analogue inputs.

The disadvantages of this option are that the setup would require 2 serial connections (Hand - Computer, Extra arduino - Computer).


Artichoke V1.1 Firmware User Guide


THIS TUTORIAL HAS BEEN ADDED TO THE ARCHIVES ON 22/08/16 AS IT HAS BEEN REPLACED BY ARTICHOKE V1.2 FIRMWARE USER GUIDE

OVERVIEW

In this tutorial you'll learn how to download and install the Artichoke V1.1 firmware for the Ada robotic hand. Artichoke is the version of hand control firmware designed for the Ada hand, running on the Almond board.

This tutorial is for:

You will need:


Getting Artichoke

THIS TUTORIAL HAS BEEN ADDED TO THE ARCHIVES ON 22/08/16 AS IT HAS BEEN REPLACED BY ARTICHOKE V1.2 FIRMWARE USER GUIDE

Artichoke includes full serial control of individual fingers and grip patterns, muscle control through EMG sensors and provides a framework for adding extra functionality to the hand (nunchuck/joystick control). As with all of Open Bionics developer materials, this firmware is completely free to download and use, and we strongly encourage you to incorporate this into your projects, to improve it and build upon it.

Downloading and installing FINGERlib.h

Before downloading Artichoke, you need to download and install FingerLib.h, a custom finger control library. FingerLib.h is designed to run on a number of different Arduino compatible microcontrollers, and manages all of the low level motor control and handling of timers, it also includes various example sketches for simple finger control applications.

You will first need to download and install Arduino, next we will install FingerLib.h

  1. Navigate to our GitHub www.github.com/Open-Bionics/FingerLib
  2. Download FingerLib as a ZIP
  3. Extract FingerLib-master.zip and rename it to 'FingerLib' instead of 'FingerLib-master'
  4. Move the FingerLib folder to your Arduino libraries folder (usually My Documents\Arduino\libraries)
  5. Restart Arduino by closing it and opening it again
Download and install Arduino

Download and install Arduino

Download FingerLib from GitHub

Download FingerLib from GitHub

DOWNLOADING and installing ARTICHOKE

THIS TUTORIAL HAS BEEN ADDED TO THE ARCHIVES ON 22/08/16 AS IT HAS BEEN REPLACED BY ARTICHOKE V1.2 FIRMWARE USER GUIDE

After FingerLib.h has been downloaded, we now need to download Artichoke and upload it to the Almond board.

  1. Navigate to www.github.com/Open-Bionics/Artichoke
  2. Download OpenBionics_Artichoke as a ZIP
  3. Extract Artichoke-master.zip
  4. Open the file OpenBionics_Artichoke.ino in the Arduino IDE
  5. Power up and connect the Ada hand to your computer
  6. Select the Arduino board (Arduino Mega 2560 or equivalent)
  7. Select the appropriate COM port (Instructions for Mac or PC)
  8. Upload the Artichoke firmware to the hand (if it is a right hand, the thumb may twitch when uploading)
  9. Once uploaded for the first time, the hand may be in demo mode
  10. Whilst in demo mode, the hand cycles through all of the various grips and finger movements
  11. See the next chapter to exit demo mode
Download Artichoke from GitHub

Download Artichoke from GitHub

Open OpenBionics_Artichoke.ino in Arduino (note, the other files within the folder may differ from this image as the firmware is updated)

Open OpenBionics_Artichoke.ino in Arduino (note, the other files within the folder may differ from this image as the firmware is updated)


Using Artichoke

Initial Config

THIS TUTORIAL HAS BEEN ADDED TO THE ARCHIVES ON 22/08/16 AS IT HAS BEEN REPLACED BY ARTICHOKE V1.2 FIRMWARE USER GUIDE

Once uploaded to the Ada hand, connect to the hand via the Serial Monitor (baud 38400).

You should first be greeted with a printout of the firmware version number and board name, followed by a list of possible serial commands. The demo mode should then start, and can be disabled by entering 'A0', without the apostrophes. Entering 'A0' toggles whether demo mode will run on start up (default enabled), and entering 'D' will run demo mode once.

At any time, if you enter '?' the hand will print the list of serial commands, and entering 'A1' will toggle whether the serial commands display on start up. Note that all characters must be uppercase.

Enter '?' to view the list of serial command

Enter '?' to view the list of serial command

HAND TYPE

THIS TUTORIAL HAS BEEN ADDED TO THE ARCHIVES ON 22/08/16 AS IT HAS BEEN REPLACED BY ARTICHOKE V1.2 FIRMWARE USER GUIDE

To select whether the Ada hand is a left or right hand, enter one of the following commands:

  • H1            Set the hand to be RIGHT
  • H2           Set the hand to be LEFT
  • H             View whether the hand is LEFT or RIGHT

Grip Control

THIS TUTORIAL HAS BEEN ADDED TO THE ARCHIVES ON 22/08/16 AS IT HAS BEEN REPLACED BY ARTICHOKE V1.2 FIRMWARE USER GUIDE

With demo mode disabled, if you enter 'G0' the hand should should close in grip pattern 0 (Fist Grip), if you enter 'G0' again it should toggle the hand open in grip pattern 0.

Try this with 'G#' where # is a number between 0 - 5 to perform a movement in a selected grip pattern, the grip patterns are as follows;

  • G0 Fist Grip
  • G1 Palm Grip (Fist Grip but with thumb extended)
  • G2 Thumbs Up
  • G3 Point
  • G4 Pinch
  • G5 Tripod (Pinch using both index and middle fingers)

For a more detailed explanation on the grip patterns and how to create custom grips, visit this tutorial.

Enter 'G0' to toggle the hand between open and close in 'Fist Grip'

Enter 'G0' to toggle the hand between open and close in 'Fist Grip'

Finger Control

THIS TUTORIAL HAS BEEN ADDED TO THE ARCHIVES ON 22/08/16 AS IT HAS BEEN REPLACED BY ARTICHOKE V1.2 FIRMWARE USER GUIDE

The fingers can be controlled individually by entering 'F#', where # is a finger number between 0 - 4.

  • F0 Thumb
  • F1 Index
  • F2 Middle
  • F3 Ring
  • F4 Pinky
Enter 'F0' to toggle the thumb between open and close

Enter 'F0' to toggle the thumb between open and close

Position and speed modifiers

THIS TUTORIAL HAS BEEN ADDED TO THE ARCHIVES ON 22/08/16 AS IT HAS BEEN REPLACED BY ARTICHOKE V1.2 FIRMWARE USER GUIDE

You can also set the fingers to move to a certain position (P0 - P100) for a selected grip or finger, for example if you enter 'G5 P50' the hand will move to the halfway position of the Tripod grip, or with 'F1 P10' the Index finger will be almost fully closed (P0 = fully open, P100 = fully closed).

The speed can be set in a similar manner by entering 'G# S???', where ??? is a number between 0 - 255 (note that due to the PWM frequency, the motors will struggle to move at any value below around 200).

Both the position and speed can be added to a grip (G#) or a finger (F#) command at the same time, e.g. 'F1 P50 S240'

Move the index finger to be 50% closed at a speed of 24

Move the index finger to be 50% closed at a speed of 24

Advanced settings

THIS TUTORIAL HAS BEEN ADDED TO THE ARCHIVES ON 22/08/16 AS IT HAS BEEN REPLACED BY ARTICHOKE V1.2 FIRMWARE USER GUIDE

Using an advanced command 'A#' allows different modes and settings to be configured, a full list of these settings can be seen by entering the '?' command.


EXTRAS

THIS TUTORIAL HAS BEEN ADDED TO THE ARCHIVES ON 22/08/16 AS IT HAS BEEN REPLACED BY ARTICHOKE V1.2 FIRMWARE USER GUIDE

For details on the different control methods available within Artichoke V1.1, visit out Control Methods Guide.

IMPORTANT NOTE ABOUT I2C

THIS TUTORIAL HAS BEEN ADDED TO THE ARCHIVES ON 22/08/16 AS IT HAS BEEN REPLACED BY ARTICHOKE V1.2 FIRMWARE USER GUIDE

The 2 data lines passed through the 3.5mm headphone port on the Almond board are connected to both I2C pins and analogue pins (through a 10k resistor). If the headphone port is being used for analogue data (e.g. muscle sensors), you should not initialise I2C. When using I2C (e.g Nunchuck), the analogue pins need to be pulled high to act as the pull ups for the I2C lines. 

pinMode(A6,OUTPUT);
pinMode(A7,OUTPUT);
digitalWrite(A6,HIGH);
digitalWrite(A7,HIGH);

THIS TUTORIAL HAS BEEN ADDED TO THE ARCHIVES ON 22/08/16 AS IT HAS BEEN REPLACED BY ARTICHOKE V1.2 FIRMWARE USER GUIDE


Grip Patterns - Artichoke


OVERVIEW

This post details how grips are produced and how grips can be customised in Artichoke V1.2.

This tutorial is for:

You will need:

Default Grips

Artichoke V1.2 incorporates 6 predefined grip patterns;

  • G0 Fist Grip

  • G1 Palm Grip (Fist Grip but with thumb extended)

  • G2 Thumbs Up

  • G3 Point

  • G4 Pinch

  • G5 Tripod

When using Serial control, the grip is selected based on the grip number (G#) entered, when using muscle control, the grips are cycled through from 0-5 when the outer forearm muscle is tensed for a set duration, and when using HANDle control, the grips can be cycled through by pressing either of the buttons.

(Each of the control methods ABOVE will link to their specific tutorial)

Finger positions

Each grip pattern is simply a combination of the individual finger positions, and each grip movement is a conversion of the desired grip position into the desired position of each finger within the grip. The function 'gripMovement( )' maps the input grip position (0 - 100) to individual finger positions defined by the values within the 'animation[ ][ ][ ]' array.

Simple

The animation[ ][ ][ ] array

The animation[ ][ ][ ] array

Without needed to know how the grip positions are processed (discussed in COMPLEX), you can modify the positions of the fingers within each grip by modifying the values within the 'animation[ ][ ][ ]' array within the 'AnimationPositions.h' file.

The array is split into 6 segments, where each segment represents one of the 6 grips. Each grip segment is then split into 6 columns, a grip position column (COUNT) and 5 finger position columns (F0 - F4). 

The array can be read by looking at the grip segment you wish to modify, then read down the grip position column to the grip position at which you wish to modify the finger positions, the finger position at that grip position can then be changed.

For example, if you wish to modify the position of a finger when the hand is closed in the tripod grip, you would look at the bottom segment (TRIPOD), look along the bottom row (COUNT = 100) and modify the finger position of the desired finger.

Both FULLY_OPEN and FULLY_CLOSED are defined presets within FingerLib.h, and are the maximum and minimum positions of the motors (50 - 973).

Complex

As detailed above, the array is read by first reading from the segment relating to the grip, the grip position is then used to determine the row of finger positions to use, however the actual function of this grip control is slightly more complex.

The segment of the array that applies to fist grip

The segment of the array that applies to fist grip

The function 'gripMovement( int grip position )' starts by looks through the COUNT elements of the desired grip pattern, and searches for two elements that the grip position is between. For example, in the above image, a grip position of 5 would be between COUNTA = 0 (Row 0) and COUNTB = 10 (Row 1), and a grip position of 50 would be between a position of COUNTA = 40 and COUNTB = 100.

After determining the two count values either side of the grip position (COUNTA and COUNTB), the position of the finger is determined by reading the finger position along the same row as the COUNT values. If the finger position reading (POSA) along the COUNTA row is read as BLANK, then the finger position from the row above is used, and if the finger position reading (POSB) along the COUNTB row is read as BLANK, then the finger position from the row below is used. The grip position (0 - 100) is then mapped from the range of COUNTA - COUNTB, to POSA - POSB, which calculates the finger position values between the ones in the array.

The Fist grip is designed so that when closing, the thumb moves across quickly to oppose the fingers, it then stays in the opposing position for a bit whilst the fingers close further, when the grip gets to a certain position, the thumb then continues closing to apply similar force to the opposing fingers. The graph below shows the how the positions of the fingers change (Y-axis) as the grip position is changed (X-axis) in Fist grip.

Fist grip movement

Note that F1 to F4 are all represented by F4

Using the Fist grip above as an example, when the grip position 0, we can generate the COUNT and POS values for each finger, as detailed below;

Grip Pos F0 F1 F2 F3 F4
0 50 50 50 50 50
5 400 96 96 96 96
10 750 142 142 142 142
15 750 188 188 188 188
20 750 235 235 235 235
25 750 281 281 281 281
30 750 327 327 327 327
35 750 373 373 373 373
40 750 419 419 419 419
45 769 465 465 465 465
50 787 512 512 512 512
55 806 558 558 558 558
60 824 604 604 604 604
65 843 650 650 650 650
70 862 696 696 696 696
75 880 742 742 742 742
80 899 788 788 788 788
85 917 835 835 835 835
90 936 881 881 881 881
95 954 927 927 927 927
100 973 973 973 973 973
  • FINGER0

    • COUNT A = 0

    • COUNTB = 10

    • POSA = FULLY_OPEN (50)

    • POSB = 750

  • FINGER1 to FINGER4

    • COUNTA = 0

    • COUNTB = 100

    • POSA = FULLY_OPEN (50)

    • POSB = FULLY_CLOSED (973)

Note that for FINGER1 to FINGER4, the finger positions for both Row 1 and Row 2 are BLANK, therefore COUNTB = 100.

When the grip position of 0 is mapped using the above values, the target position of each finger is calculated as 50. When the grip position is 5, the COUNT and POS values are still the same, but the mapped values are as follows;

  • FINGER0 = 400 (almost halfway closed)

  • FINGER1 to FINGER 4 = 96 (slightly closed)

When the grip position is at 25, the COUNT and POS values are different, but produce the following results;

  • FINGER0 = 750 (3/4 closed)

  • FINGER1 to FINGER 4 = 235 (1/4 closed)

We can see from the graph that fingers 0 - 4 move in a linear motion, whilst finger 0 moves quickly from 50 to 750, and remains at position 750 for a while, it then moves slowly from 750 to 973.


Ada V1.1 Printing Instructions


OVERVIEW

Parts on printer.PNG

In this tutorial you'll learn how to download and 3D print the Ada robotic hand, for a tutorial on the assembly of the hand click here.  The Ada robotic hand is the new generation of robotic hand, derived from our previous Dextrus robotic hand.

This tutorial is for:

You will need:


Downloading the Ada hand

The Ada robotic hand is released under Creative Commons Attribution-ShareAlike 4.0 license, meaning that it is completely free to download and use, we only require that any modifications and improvements are also released to the community with the same freedoms.

To download the latest version of our Ada hand:

  1. Download the 3D files here
  2. Extract the downloaded ZIP file (ada-robotic-hand.zip)

This folder contains the components required for a left and a right Ada hand (8 STL files), each part is prefaced with 'L' or 'R' denoting whether it is a part for a left or right hand. A single hand requires the following 3D printed components:

  • Palm - Ninjaflex
  • Back cover PLA/ABS
  • PCB tray upper PLA/ABS
  • PCB tray lower PLA/ABS

 


part ORIENTATION

palm

The palm is orientated to produce the best surface finish on the palm and the ventral (front) surface of the fingers, and also allows the finger joints to print correctly. With the part in this orientation, it requires support material between the print bed and the bottom surface; support material is not required for any of the internal parts of the palm.

The palm is printed with the fingers hyper-extended as this allows them to provide a more constant force when actuated and prevents the fingers from being too floppy at their naturally-extended position.

 

Back cover

The back cover is orientated so that the face of the wrist connector is on the print bed, and the text prints facing the correct way up. This part requires (line pattern) support material both between the bed and the bottom surface of the cover, and for the internals of the cover.

 

PCB Tray (Upper & Lower)

The PCB tray prints as 2 separate components, which are then glued together. They are orientated with their flat faces on the bed and do not require any support.


Recommended PRINT settings

Print settings will vary between printers, If you have already dialled in your printer for using Ninjaflex and PLA, then we recommend you use those settings. Below are the print settings we have used to print the Ada hand.

PLA

  • Ada Parts: Back cover, PCB tray upper, PCB tray lower
  • Layer Height: 0.3mm
  • Temperature: 205°C - 230°C
  • Print Speed: 
    • Outer shell: 30 mm/s
    • Inner shell: 70mm/s
    • Infill: 70 mm/s
  • Infill Density: 30%
  • Overhang Angle: 60%

Ninjaflex

  • Ada Parts: Palm
  • Layer Height: 0.3mm
  • Temperature: 230°C (Lulzbot Taz)
  • Print Speed: 
    • Outer shell: 16 mm/s
    • Inner shell: 20mm/s
    • Infill: 20 mm/s
  • Infill Density: 45%
  • Overhang Angle: 30%
  • Support Density: 25%

Please read the 'Tips for printing with flexible filament' section below for a more detailed discussion on printing with Ninjaflex, or visit the Ninjaflex website for their recommended print settings.


Print finishing

Palm

The support material on the back and inside of the palm needs to be removed, as well as any support material in the fingertips and in the motor slots.

Flex each finger in turn and make sure that there is no excess support material preventing the finger flexing.

 

Back Cover

Remove the support material from the inside of the back cover, the wrist connector holes and around the base of the back cover (support is highlighted in grey in the images).

 

PCB Tray

The PCB tray is printed in 2 separate components, upper and lower. Use super glue to join the two flat faces together, making sure that the slots for the motor cables line up, and allow time for the super glue to dry. 

 

tuning the STIFFNESS OF THE finger joints

The joints in the fingers have been designed in order that both of the joints close at the same rate, however the joint stiffness is greatly affected by the print settings. If one joint closes before the other, then you may need to manually adjust the joint stiffness, either by adding super glue or by slightly cutting the joint material with a scalpel. This step can damage the hand, so only adjust the stiffness of the joints if you feel that it is absolutely necessary.

When a finger is closed, if the proximal (bottom) joint completely closes before the distal (top) joint starts to close, or if the proximal joint seems overly floppy, you will need to stiffen the proximal joint. Use a toothpick or cotton bud to apply a small dab of super glue to the inside of the proximal joint. The tip with this method is to add a small amount of super glue, wait for it to dry, test the joint stiffness and then repeat. 

If when the finger is closed, the distal joint closes completely before the proximal joint start to close, then you may need to reduce the stiffness of the proximal joint. Use a scalpel to create a small cut on the inside of the proximal joint (highlighted blue), this should loosen the joint.

If the motors appear to struggle to close the finger, you may need to loosen both of the finger joints. Use a scalpel on both the proximal and distal joints, as described above.


TIPS for PRINTING WITH FLEXIBLE FILAMENT

Our Printing setup

Our 3D printing arsenal comprises of the following:

We use all of these printed to produce the various components of the Ada hand. The Mini is primarily used to print the PLA parts (Back Cover & PCB Tray) and both the Ultimaker's and the Taz's are used to print the Ninjaflex parts (Palm). We have modified/upgraded both the Taz's and the Ultimaker's to allow them to reliably print flexible filaments such as Ninjaflex. Below are a few of our tips, modifications and techniques for printing with flexible filaments.

Nozzle Size

The force applied by the feeding the filament into the hot end creates pressure in the nozzle which forces the melted filament through the nozzle. The nozzle pressure is influenced by many different factors, such as the consistency of the material at certain temperatures, the extrusion speed, the nozzle size etc. 

Flexible filaments require a low nozzle pressure to extrude reliably. One way to reduce this nozzle pressure is to increase the nozzle size. We use a 0.6mm nozzle on both the Ultimaker's and the Taz's. A nozzle size of 0.5mm still allowed us to print Ninjaflex reliably, however increasing the nozzle size to 0.6mm allows us to increase the extrusion speed, thus decreasing the print time.

extruding Flexible filament

An issue with flexible filament is that it can compress and buckle under pressure, which means that the distance between the extruder and the hot end should be as short as possible. There should also be as few gaps and pinch points as possible, such as the gap between the knurled bolt and the hot end. 

The Taz uses a direct drive extruder, therefore it is relatively simple to modify to print flexible filament. You only need to the standard extruder with the flexystruder, which removes all of the pinch points and possible gaps in the extruder.

The Ultimaker uses a bowden extruder setup, which comprises of a stepper motor mounted on the frame of the printer which feeds the filament through a length of tubing connected to the hot end. This setup reduces the mass and size of the print head, thus increasing the possible print speed. However this setup is not suitable for printing flexible filament as flexible filament tends to buckle in the bowden tube and the amount the filament can compress and stretch over the large length results in a less responsive hot end.

To modify the Ultimaker to print flexible filament we have used a Flex3Drive. The Flex3Drive uses a flexible drive shaft connected the frame mounted stepper motor, which also connects to an geared extruder assembly mounted on the print head. This means that the print head still has a small mass and footprint, but reduces the distance between the extruder and the hot end, effectively turning the configuration into a direct drive setup.

Temperature

The Ninjaflex website suggests that Ninjaflex is printed at 230°C (225°C - 235°C). We currently print Ninjaflex on the TAZ at 230°C, and at 195°C on the Ultimakers. The temperature of the Ultimaker is so low to prevent strings and to allow it to print bridges relatively successfully.

Print speeds

As detailed above, we need to keep the nozzle pressure relatively low in order to allow for reliable extrusion. Another way to reduce this pressure is to print slowly. We use print Ninjaflex at around 1/3 of the speed we use for PLA.

Retraction

Flexible filament compresses as it is extruded and stretches when retracted. This means that the retraction speeds and distances need to be increased to prevent stringing on the print.

Colour Pigments

We have found that the settings for printing Ninjaflex differ slightly between colours, for example we have found the following Ninjaflex colours to print inconsistently.

Inconsistent colours:

  • Sapphire Blue
  • Concrete

Consistent colours:

  • Black
  • White
  • Orange
  • Red
  • Green
  • Pink

Take this information about material inconsistencies with a pinch of salt, as there may have been other contributing factors causing the print inconsistencies.

More

More information on printing with flexible filaments can be found at Gyrobot and RichRap.