8 native modular robots supported
“VisibleSim is a framework for creating behavioral simulators for distributed lattice-based modular robotic systems in a regular 3D environment. It supports modules in all kinds of lattices and with diverse motion capabilities, embedded sensors, and actuators.” —Dr. Benoit Piranda
2D Nodes
Lattice: square (2D)
Neighbors: 4
Motion: slides along or turns around an edge
Display: RGB colors
Smart Blocks
Lattice: square (2D)
Neighbors: 4
Motion: slides along a vertical border
Display: RGB colors and upper side numbers
Hexanodes
Lattice: hexagonal (2D)
Neighbors: 6
Motion: turns around a neighbor (pivot)
Display: RGB colors
2D Catoms
Lattice: hexagonal (2D vertical)
Neighbors: 6
Motion: turns around a neighbor (pivot)
Display: RGB colors
Blinky Blocks
Lattice: cubic (3D)
Neighbors: 6
Display: RGB colors
Sensor: tap
Sliding Cubes
Lattice: cubic (3D)
Neighbors: 6
Motion: slides along or turns around an edge
Display: lights in color
3D Catoms
Lattice: Face-Centered Cubic (3D)
Neighbors: 12
Motion: turns around a neighbor (pivot)
Display: RGB colors
Datoms
Lattice: Face-Centered Cubic (3D)
Neighbors: 12
Motion: deforms around a neighbor (pivot)
Display: RGB colors
Visiblesim let the user import his own custom modular robot type.
A behavioral simulator
Physics simulation is not the purpose of VisibleSim, instead it aims at providing the tools for studying the behavior of modular robots.
Performances
Each module in the system is assigned a unique identifier, and executes the same controller as all other modules, generating environmental events that are handled deterministically by VisibleSim's discrete-event scheduler.
Introducing the BlockCodes
In VisibleSim, each module executes the same distributed program, acting as the controller of the module, the BlockCode.
“BlockCodes are C++ programs that describe what actions should be carried out by the module upon initialization, and in response to various internal or external events (communication received, neighborhood updates, end of motion, timer, etc...).” — Pierre Thalamy
Startup function
Such a function runs by each module upon startup, that initializes internal variables and usually sends a message to neighbor modules.
Event handler
Runs a thread associated to the particular type of the processed event, that updates the internal state of the modules and carries out any necessary action.
Message handler
Launches a process associated to the particular type of the received message, that updates internal variables and carries out any necessary action such as forwarding the message to neighbors.
Run your BlockCode online
VisibleSim is available online, requires no download and no installation, just sign up and try it.
Write your BlockCode in C++, JavaScript or Python. Build an initial XML config file.
Upload these two on the server and run the simulation.
Enjoy visualizing your code and interacting with it!
We are also making available for free an online tool for generating customizable application template files for any supported module types.
Visit our Youtube channel
VisibleSim has been our dedicated programmable matter simulation tool for almost a decade. Over the years, it has been used to experiment and validate work on various modular robotic architectures and models, with many results appearing in published research. Watch them all in video!
Available resources
Download
VisibleSim is available as an open-source software under AGPLv3 license. You can get the latest stable version or clone it from our development stream.
An online tool for generating customizable application templates for any supported module types.
Get involved and contribute
Feel free to contact us if you want to become part of the active community of developers for VisibleSim and its tools.