This repository contains the code behind the Rockwell Automation "Pong" exhibit at the Discovery World Museum in Milwaukee, WI
An overview of this repo's history and goals can be found in the vision.md document.
See Contributing.md
Docker (and Docker Compose) are required to build the containers. Other OCI compliant runtimes like Podman should work. To run the exhibit, an Intel Realsense 435 camera and drivers is required. See post-install.sh for a full exhibit setup script from a vanilla Ubuntu install.
The docker compose file provides profiles to select the containers appropiate for a specific use case.
- prod: Build only the containers used on the exhibit.
- Example:
docker compose --profile prod up
- Example:
- dev: Build additional development containers including a mqtt gui and a
single screen containing all exhibit screens
- When using prod, you must select the top and bottom players as well.
To match the exhibit, use profiles
top-player-ai-gpuandbottom-player-depthas such:docker compose --profile dev --profile top-player-ai-gpu --profile bottom-player-depth up. The following 'players' are available:top-player-ai-gpuThis is the AI player used in the exhibit. Expects an Nvidia GPU and appropiate docker configuration with Nvidia container toolkittop-player-ai-cpuThe exact same AI player used in the exhibit, but configured to expect to use CPU inferencing rather than GPU. Very CPU intesivebottom-player-depthThe 'human player' used in the exhibit. Uses an Intel Realsense depth camera to detect the human player and move the paddle accordinglytop-player-webdebugging controller that gives left and right buttons to click on the move the top paddle. Access vialocalhost:5004bottom-player-webdebugging controller that gives left and right buttons to click on the move the bottom paddle. Access vialocalhost:5005
- When using prod, you must select the top and bottom players as well.
To match the exhibit, use profiles
Rockwell Automation requires all machines (incl containers) to have a ZScaler
SSL certificate installed in order to connect to the internet. These containers
support this and will install the certs with the build argument CERTS=zscaler
as shown below. Without this arguement, the certificates will not be installed.
docker compose --profile prod up --build-arg CERTS=zscaler
The latest reslease/x.y.z tag is the most recent stable version.
The latest tag is not used.
Maintainers should always be specifying a version when pulling, and if a maintainer truely needs
"the latest version", next better communicates that it is the bleeding edge.
The CI/CD system will automatically build and push containers for all main and PR commits.
All proposed code should be built in the same way that the final code is built so that any
discrepancies in the build environment between developer machines and the release built system are
accounted for.
In addition, this facilitates easier testing by pulling from the registry instead of building.
This allows developers to test proposed code an exhibit twin (or any other suitable test system) by
just pulling from the compose instead of pulling the source in rebuilding, and removes any potential
issues with local build system.
Finally, in an emergency, the exhibit itself can use proposed code from any published commit while a
hotfix is deployed to the main codebase.
To start the containers using docker-compose run the following:
docker compose --profile prod up -d
To stop the containers using docker-compose run the following:
docker compose --profile prod down
To open each GUI window in their positions used in the exhibit, run the following:
./setup/open_windows.sh
Keep in mind that unless the machine has its monitors configured similarly to the exhibit, the behavior is undefined. To manually open the windows, open an internet browser to the following sites:
To close all GUI windows, run the following
./setup/close_windows.sh
