Project Info

MagProprio SoftHand

August / 2024 / Soft robotics

Maggie

Maggie, a 3D-printed soft robotic hand, holding a pair of AirPods

Maggie is a fully 3D-printed, anatomically accurate, highly underactuated, tendon-driven soft robotic hand with magnetic proprioception.

Designed and fabricated at the Bristol Robotics Laboratory in Bristol, UK, supervised by postdoctoral researcher Dr. Chris Ford and co-supervised by Prof. Nathan Lepora and Dr. Efi Psomopoulou.

grasptest1
grasptest2
Maggie soft robotic hand on blackMaggie holding AirPods, full arm view

Magnetic proprioception

Maggie's fingers are pulled by tendons, and two motors drive all five of them, one for flexion and one for extension. That keeps the hand simple, but the motor positions cannot tell you where each finger is: when the hand closes on an object, every finger stops wherever the object stops it. Proprioception gives the hand that missing sense of its own joint angles.

Each finger has three joints, and at each joint a linkage connects two geared phalanges. Two small neodymium ring magnets, 6 mm across and 1 mm thick, sit in every linkage, and a flexible PCB carrying an AS5070B magnetic position sensor wraps over the joint. As the finger bends, the magnet turns relative to the sensor, and the sensor reports that rotation as an angle. Five fingers with three joints each make fifteen sensors.

A white 3D-printed test finger on a desk, with flexible PCBs wrapped over two joints and red, yellow and black wires running to them
Flexible PCBs fitted over the joints of a test finger.
Bending one joint by hand while the serial monitor prints its angle, 16 August 2024.

The flexible PCB

The first sensor I got reading, an AS5145B, was easy to talk to over SPI but needed eight pins and was too big for the smaller joints. The AS5070B needs only three connections, 5 V, signal and ground, so the board could become a thin strip that bends around the finger. I designed the flexible PCB in Fusion: two layers, the sensor at one end and three pads for a JST connector at the other.

The fifteen sensors plug into an I/O board I designed and soldered on an Arduino shield, one 3-pin JST socket per joint on digital pins D2 to D19, plus TX and RX for the board that drives the motors. The first flexible PCBs had one mistake, a capacitor placed between 5 V and VCC that has to be bridged with solder. It is fixed in the schematic, but not yet in the layout.

The flexible PCB layout in Fusion: top copper in red and bottom copper in blue, with three pads labelled 5V, SIGNAL and GND and the AS5070B footprint
The layout: top copper in red, bottom in blue.
A flexible PCB panel on black, showing the stiffened strip with three solder pads
Front: the three pads.
The back of the flexible PCB panel held beside a thumb, with the small eight-pin AS5070B sensor soldered on
Back: the AS5070B.
An Arduino proto shield with fifteen white 3-pin JST sockets in rows
The I/O board: one socket per joint.
The underside of the Arduino proto shield, hand-wired with coloured jumper wires
Its wiring underneath.

From magnet to finger pose

The AS5070B is configured over a one-wire serial link that needs parity, and can then send its angle out as a SENT or PWM signal. With a lab colleague I wrote a library that sets it up: SENT or PWM output, the extended magnetic field range, the mechanical start and stop angles of a joint, about 60 degrees apart, and the transfer function between them. Decoding SENT on the Arduino, and reading PWM through an RC low-pass filter into an analog pin, both gave readings that did not follow the magnet, which pointed back at the configuration.

What read consistently was asking the sensor for its angle register directly. On start-up the code takes 50 readings of each joint at rest, discards the first 25 while the sensor settles, averages the other 25 as that joint's zero, and subtracts it from every reading after.

Three angles then place a finger. Because the phalanges roll on gears, each joint bends twice as far as its linkage turns, and the finger is rotated to its own angle on the palm. A Node.js server passes the angles over Socket.io to a Three.js model of the hand, a digital twin that moves with it. Malia Smith started the visualization, and I joined it to the motor control and the sensing.

By the end of the summer the pieces ran as one system: motor control from a browser GUI, joint angles read live from the flexible PCBs as a finger bends, and a digital twin that recreates the whole hand in 3D and moves with the angles the Arduino streams. The next step was reading all fifteen sensors at the same time, with a microcontroller that has more serial pins or with the sensor's SENT output.

Pipeline diagram: the Arduino talks over a serial port to a Node.js servo control server, which sends servo and sensor feedback over Socket.io to a Vite server running the 3D visualization of the hand
The pipeline: Arduino, Node.js server, 3D visualization.
Zhixing Chen[email protected]

Zhixing Chen

Artist. Designer. Engineer. Musician.

Z
000
Z
000