Virtual Cycling Environment
The Virtual Cycling Environment (VCE) is a simulation framework that allows a person to interact with simulated vehicle-to-anything communication (V2X) in real time, or 'in the loop'.
The VCE consists of a bicycle on a training stand with sensors for speed and steering angle, a 3D environment built in a game engine (previously Unity, now Godot), traffic simulated in SUMO, V2X communication using Veins/OMNeT++, and a component tying all these elements together called the Ego Vehicle Interface (EVI).
My Contributions
When I started working on the VCE for my master's thesis in 2018, these components already existed as a prototype. My main task was to integrate a psychological perception experiment for measuring participants' visual attention. This included the implementation of a framework for presenting and logging visual stimuli, for generating levels and traffic density conditions, as well as for gamification of the experiment. The gamification in particular was meant to motivate participants to stay focused throughout the experiment and not leave the predefined course through the virtual city. The goal was to find out whether such visual attention experiments can still produce usable results when they are embedded in interactive 3D environments as opposed to the usual abstract 2D shapes.
In addition to these goals, I also implemented a steering sensor with significantly higher refresh rate than the previous 2 Hz-solution by writing a small Android application that would transmit the smartphone's orientation from the handle bar. Furthermore, I improved the visual appearance of the 3D environment by fixing visual glitches on buildings and road elements, and through the integration of a new custom bicycle model with articulating wheels, pedals, and brakes.
Several students have built on top of the VCE after I had completed my thesis, either in student projects or for their own theses. A documentation page with detailed installation instructions has proven invaluable for this. Since the VCE consists of several components with tricky dependencies, I containerized as many of these components as I could. Later on, I also wrote a launcher script that is able to read one configuration file with parameters for all other components, and which can launch a tmux session with each component in its own window and optionally run in a container.
Links:
Technologies used:
- C#
- Python
- Unity (game engine)
- Godot
- Android
- ESP-IDF
- Containerization with Apptainer