Skip to content

feagi/brain-visualizer

Repository files navigation

This information may be outdated. Please refer to the Wiki for the most up to date information.

Monitoring artificial brain cortical activity

 

Introduction

This tool enables users to visualize neuronal activity produced in the cortical areas of the artificial brain generated by FEAGI using the Godot game engine. Visualizing artificial brain activity can be useful for characterizing, troubleshooting and, ultimately, better understanding brain functioning.

 

Artificial brain cortical activity

Artificial brain cortical areas are represented in Godot in accordance with the dimensions specified in feagi/src/evo/static_genome.json for each defined area and are comprised of voxels (i.e. blocks), which can be populated with neurons capable of forming synapses. In the Godot environment, red voxels indicate intrinsic neuronal activity. As cortical activity is generated and propagates in the artificial brain, data describing the general dimensions of the area and locations of voxels with active (i.e. firing) neurons are transmitted to Godot for visualization. Cortical areas must have visualization enabled (see Enable cortical areas for visualization in Godot environment) to appear in the Godot environment.

plane copy

In the following example, observe the instances of neuronal activity occurring within the motor thalamus cortical area. The rate at which active (red) voxels appear (i.e. burst frequency) is defined and controlled by FEAGI.
voxel

In these examples, voxels in the cortical areas (ir_ipu and proximity_ipu, respectively) are activating in response to external stimuli detected by the robot in the virtual environment. As the virtual robot's three IR sensors (located on the bottom/front of the robot facing downward) are exposed to the black line, neurons in the IR IPU cortical area voxels corresponding to the sensors are activated (Left). Similarly, voxels in the proximity IPU cortical area are activated in a manner dependent on the proximity of an object relative to the virtual robot (Right).
IR proximity

 

Launching the visualization tool

Click here to see detailed steps To launch a containerized version of the Godot visualization tool, perform the following steps:
1. Navigate to feagi/docker/
2. docker-compose -f feagi.yml build --no-cache
3. docker-compose -f feagi.yml up
4. Navigate to http://127.0.0.1:6080/ in a browser

Browser output should resemble the following image: demo

To run the tool locally:

1. Navigate to feagi/third_party/godot/local_machine/
2. ./FEAGI_initalize.sh

Visualization tool camera controls

Action Key
Rotate left A
Rotate right D
Rotate up W
Rotate down S
Move Left left arrow
Move Right right arrow
Move forward up arrow
Move backward down arrow

 

Enable cortical areas for visualization in Godot environment

Click here for more details Cortical areas in the artificial brain generated by FEAGI require additional configuration to appear in Godot visualizations. To enable visualization for a cortical area, add the following key-value pairs in `src/evo/static_genome.json` under the desired area (above the `"geometric_boundaries"` key - see image below):
        "relative_coordinate": [
             x,
             y,
             z
        ],
        "visualization": True,

Ensure "visualization" is set to True. Relative coordinates determine the positioning of the cortical area in the Godot simulation environment. Select coordinates appropriate for your monitoring purposes and ensure that discrete areas are not overlapping.

image

To change the relative coordinates:

1. Navigate to feagi/src/evo/static_genome.json
2. Search for "relative_coordinate".
3. Change the values of x,y,z under the "relative_coordinate" key
4. Save and launch FEAGI.
5. Launch FEAGI_initalize.sh

 

Change FEAGI cortical area size

Click here for more details

To change a cortical area's width, depth and height:

1. Navigate to feagi/src/evo/static_genome.json
2. Search for "block_boundaries" under the target cortical area
3. Change the W,D,H values as needed (see image below)

static_genome