For accurate control of the joint, ODrive requires an encoder. There are many options here, but I wanted something as lightweight and small as possible. Without the need to write a new device driver, ODrive supports encoders using the ABI format so I picked out a magnetic encoder; the AS5047 (in retrospect, I should probably have gone with the AS5147 which has better resolution). This is a single chip encoder which relies on a spinning magnet, attached to the motor shaft, to monitor the motor position.
Attaching the magnet to the motor shaft was a bit of a pain. I tried a couple of epoxies and 3d-printed jig setups before I found something which would center the magnet well and keep it stuck in place - JB Weld for the glue and a two part jig which snuggly held the magnet in place on the motor shaft while the glue dried.
Once the magnet was stuck, the AS5047 board was mounted, face down, above it. I cut down the 3.3V/5V selector and hard-wired it to 5V (see the unsightly solder blob).
With everything assembled I now need to run though the ODrive configuration and calibration process.