During my
Master thesis, I was in the need for some proprioception from a humanoid robot’s
foot. The final objective was to make the humanoid robot climb and descent
stairs, so I placed some pressure sensors and a proximity sensor on the robot
foot.
With all these
sensors in the foot, having a direct wiring to the controller would imply a lot
of cables (ground, vcc, signals…), therefore I decided to connect them to the Dynamixel
bus. I used an Arduino Nano for this matter.
I used a Sharp
GP2Y0A21YK0F proximity sensor and four FSR pressure sensors, all connected to
the Arduino analog inputs. FSR sensors are quite noisy, so I applied a rolling
average to filter the measured values.
Arduino has
a UART TTL that communicates using 3 lines: Tx, Rx, and GND. Dynamixel
communication bus has 3 different lines: Vcc, GND and Data; this last one used to
send and receive. To convert the 2 data lines on the Arduino board to only one,
I used and 74LS241 chip that has several 3 states buffers by implementing the
connections described in this web. Note that I had to use an enable signal
from the Arduino to the buffer.
External circuit from Arduino to Dynamixel bus. Image from Savage Electronics. |
I
programmed the Arduino to keep listening to serial messages on the serial bus,
when he detects the header of the Dynamixel data frame, then go to check the ID
of the device, and if it is the right ID, check the rest of the message.
Dynamixel frame format. Message sent from Master to Slave. |
Data from
each sensor were assigned to a different address, creating this way a logical
table with sensor data. When the Arduino is asked for data from a specific address,
it will respond with a message with a 2 byte value as showed in the following
example.
Dynamixel frame format. Message response from Slave to Master. |
Finally I soldered
all the circuits created on a prototype board and placed the Arduino Nano on
top of the components to save space. Looking like below picture. Pins are for connection
to sensors and Dynamixel bus.
Implemented circuit (components are below Arduino Nano). |
When I
placed the board into the foot and connected the sensors, I looked like the
following pictures.
Assembled circuit on the robot's foot |
New smart feet placed on the robot. |