Skip to content
Switch branches/tags
Go to file

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time


ENGR3590: A Computational Introduction to Robotics, Olin College of Engineering, FA2020

Nathan Estill, Jonathan Zerez

In this project, we set out to create a simulated decentralized robot swarm that would exhibit self-assembling properties. Specifically, we wanted to replicate morphogenesis, the process by which cells are able to self-organize themselves in order to form complex tissues and organs through local interactions alone. This is of great interest to us, as decentralized systems are full of complexity, and are quite different from centralized robotic systems. Decentralized swarms offer a number of really cool advantages in that they are very robust to external noise, damage to a number of individual agents within the swarm, and unpredictable variations in the environment.

If you would like to read more, check out the website

For reference, we have also created an important demo video for the project, which can be found here.

To Run


If you want to change parameters yourself, change the parameters at the bottom of The parameters are, in order:

  • nSteps: the number of time steps the simulation will run for
  • gridSize: the overall size of the space the robots will be in
  • rdParams: a tuple, with the following:
    • cA: the diffusion ratio of A
    • cB: the diffusion ratio of B
    • a_add_rate: the amount of A to add at each step
    • b_add_rate add rate: the amount of B to add at each step (usually negative to remove B)
  • sideLength: the length of the side of the square of robots, or diameter if a circle
  • stepsPerFrame: the number of time steps between each captured frame of the animation
  • stepsPerChemicalUpdate: the number of time steps between when the robots update their chemical concentration
  • stepsPerRobotMovement: the number of time steps between when the robots move

As a potential starting point for the rdParams, the values (0.43,0.19,0.035,-0.1) will give polka-dots, and the values (0.5,0.25,0.06,-0.124) will give a worm.


  • numpy
  • matplotlib
  • scipy


How does complexity arise from relatively simple agents?



No releases published


No packages published