When developing intelligent agents inside a simulation, one has the benefit of having perfect information about every aspect of the robot and its environment.
However, if one wants to test or develop the same agent on real hardware, its perception has to be developed first. This significantly slows down development time.
The goal of this project was to bridge the gap between simulations and real life. By monitoring an area in the real world the RoGaTa engine should provide an agent with the same information a simulation would normally provide.
To provide the same functionality as a simulation, real-life objects have to be recognized as game objects which can then be interacted with.
For ease of use, the setup of these objects has to be straightforward and fast.
Since ease of setup and price where important considerations I opted for a computer vision approach.
The system tracks objects an areas using the color of their border and a unique aruco marker. To set up the object colors and marker IDs i developed a lightweight configuration GUI.
To allow easy interfacing with agents the system I packaged the system into a ROS node. Using this node it is possible to create virtual laser scanners, detect the line of sight between objects or whether an object has entered a defined area.
The resulting Game engine allows for automatic tracking of moving objects and basic functionality such as:
- get the state of any desired game object
- calculate the line of sight between robots without on-board cameras
- check if a robot has entered a specified area
- simulate laser scanner readings with virtual walls
The complete documentation can be found on https://rogata-engine.readthedocs.io/
What I learned
The rogata engine was the first significant project I designed to be used by people outside of my lab. For this reason, I concerned myself a lot with auto-generating and hosting documentation, streamlining the package installation, and using proper error handling. Using the engine in my lecture robotic games let me test these features and taught me how to use them in anticipation of user problems.