2024-07-26
This tutorial will follow a format in which:
I am a professor in the Compute Science Department at Pomona College in Southern California, USA.
I’ve spent arguably too much time playing around with different simulation methods (ODE, Bullet, DART, Box2D, Simulink, Chrono, MuJoCo, Gazebo, Unreal, Unity, Godot, Webots, SimPy, FEA, custom, …).
The use of evolutionary algorithms to explore the design space of robots and their control software.
There is a wide variety of research in evolutionary robotics, but I’ll focus on:
Fitness = tuple[float, float]
Genome = list[float]
Individual = tuple[Genome, Fitness]
Population = list[Individual]
def initialize(size: int) -> Population: ...
def evaluate(pop: Population) -> Population: ...
def stop(pop: Population) -> bool: ...
def select(pop: Population) -> Population: ...
def modify(pop: Population) -> Population: ...
def combine(pop1: Population, pop2: Population) -> Population: ...
This section and the related demos are the focus of this tutorial.
Choose the correct level of abstraction.
The main challenge: reality gap
Consider your simulation characteristics.
Decouple simulation, visualization, and optimization.
Always prototype.
Save all data if you can.
Consider your computational resources.
Setup good tools for analysis.
Write about your work.
Let’s start with the following problem statement:
We want to evolve an autonomous wheeled mobile robot (WMR) to navigator quickly over obstacles and then stop in front of a wall.
Simulation demos:
Full ER demo:
Anthony J. Clark, SimER Tutorial