Slide 29 from the final presentation, the underlying component diagram is from planning/proposal; additional information in color presents more details of the actual final realization.
Blue boundaries are between C++ and SCCharts, red lines are thread boundaries, yellow additions are technical "components" that were not part of the original component diagram, purple shows other executables and build scripts.


The program is structured into multiple C++ source files and one SCChart. The main program (main.cpp) handles spawning threads and allocating reserved cores. There are multiple classes that hold global data for synchronization/communication between the threads, most of them defined in the image detection source file. (They act like channels, relying on locking or atomics depending on whether locking behavior could interrupt the SCChart or not.) These classes are instantiated in the main file in stack memory, each with one object, and for each thread that thread's main function is called with references to the communication objects that they need to access.

There are threads for

The main communication points between these threads are:

The program generates debug outputs to the terminal from image detection and the SCChart about how much time processing each frame and executing each ticks takes.

There are some utility classes in seperate cpp files:

The SCChart is in sctx/controller.sctx, there are user-labels with a high-level description of (almost) every edge in the diagram. For an overview of the communication between all the regions, activate induced data-flow and compile the SCChart down to after Reference Expansion.