Nematoduino is an Arduino Uno-compatible robotic simulation of the C. elegans nematode.
The core of this simulation is the nanotode framework, which implements a simple leaky integrate-and-fire model of the biological worm's spiking neural network. This implementation is based on prior work [1], but with the following improvements:
- A compressed representation of the connectome network (8 kilobytes)
- Ability to run on the ubiquitous and low-cost Arduino Uno platform
- A biologically motivated conntectome-motor interface
The nematoduino software consumes a significant portion of the Arduino Uno's onboard program and dynamic memory (probably about half of each), but that still leaves plenty of room for tweaking and experimentation. It's my hope that nematoduino will end up in the hands of a lot of students and neurorobotics hobbyists!
Web-based C. elegans simulator/game: nematode.farmIf you'd like to play with C. elegans simulations that are nearly identical to a nematoduino robot, check out the related project: nematode.farm
To build a nematoduino robot you'll need the following:
- An AlphaBot2-Ar robot platform kit
- Arduino Uno board
- Two 14500 lithium ion batteries
- A Phillips-head screwdriver
AphaBot2-Ar kits (minus Arduino Uno) can currently be had on eBay for about $60, and I've had success with this $15 charger/battery set on Amazon for the 14500s.
InstructionsNOTE: Making a nematoduino is very straightforward, but these instructions do assume that you've had some experience with an Arduino Uno before, and are comfortable uploading software to a board.
1 ) Build the robot
The AlphaBot2-Ar is very easy to assemble, and if you've had any basic electronics experience before you probably won't need instructions. However, if you get stuck or need some hints, check out the first three minutes of this video by the manufacturer.
2) Download the nematoduino software
Head to the project's GitHub page, and download the nematoduino source by selecting the green 'Clone or download' button near the top of the page. Click the 'Download ZIP' button, and unzip the file that downloads.
3) Upload the software to the robot
Open the nemaoduino/nemtoduino.ino file in the Arduino IDE, and add the nematoduino library by going to Sketch -> Include Library -> Add.ZIP Library... and selecting the Nematoduino_Library folder.
After this step the nematoduino software is ready to upload to the Arduino Uno, so go ahead and do so now.
4) Turn on your nematoduino
Turn the robot on using the sliding switch on the bottom. Now place it on the ground and watch it roll around doing worm-y things :)
Tweaking your robotThe nematoduino.ino file has some #define statements at the top that can be used to tweak some of the basic behavior of your robot:
- MUSCLE_FACTOR: Controls how fast your robot moves
- MOTOR_RUN_TIME: How long (in milliseconds) the robot should run its motors after each update of the neural simulation
- SENSOR_DIST: Distance (in centimeters) at which the ultrasonic sensor triggers, informing the worm's nervous system that its nose is being touched (NOTE: This robot also employs IR sensors for the same function, and these will always trigger when the robot is in close contact with an obstacle)
As in Ref. 1, either the chemotaxis ("smell finding") or nose touch neurons are stimulated depending on whether an obstacle detecting sensor has been triggered. A flow chart representing how sensor state feeds through the connectome simulation and out through the motors is given in Figure 1. Particular weight is given to the neck muscles of the worm, as they provide the direction of locomotion (see Ref. 3).
Backward and forward movement in the biological worm are governed by A and B-type motor neurons, with a nose touch resulting in a reversal of the worm's locomotion. Since backward motion is driven by A-type cells (see Fig.1 of Ref. 2), the average activation of these motor neurons in the connectome is used as a trigger for reverse locomotion in the robot.
Indeed, the normalized activity of A-type motor neurons shows a stronger response to nose touch input than B-type, so this approach seems reasonably well motivated.
Further work (to do)- You might notice that your nematoduino robot has a slight "limp" and lists to one side. This is because the motor response on each side is typically not symmetric in cheap robots. There might be some kind of "calibration routine" I could devise that could ameliorate this.
- It would be nice to use a light sensor to see if the qualitative chemotaxis behavior investigated in Ref. 3 can be reproduced using this connectome model.
[1] Busbice, T. Extending the C. Elegans Connectome to Robotics. URL: https://goo.gl/pxavvY
[2] Zhen M., Samuel, A. C. elegans locomotion: small circuits, complex functions. URL: https://goo.gl/L1xXaw
[3] Morse, T. M., Ferrée, T. C., Lockery S. R. Robust spatial navigation in a robot inspired by chemotaxis in C. elegans. URL: http://lox.uoregon.edu/papers/ab1998.pdf
Comments