Inspiration
The idea for GuidoPro came from that iconic scene from the movie, Cars, where Guido changed McQueen's tires single-handedly in record time! That scene made me realize how important precision, timing, and split-second decisions are to gain a competitive advantage. Inspired by Guido's legendary pit stop, I set out to build a tool that brings that same focus to race strategy. Being able to work with real racing data from the Toyota GR Cup series made it even more important to address the challenges that cause teams to struggle with optimal pit timing under pressure, because every racer deserves to have their own Guido in the pits.
What it does
GuidoPro is a race strategy analytics platform that helps racing teams make real-time data-driven decisions. Specifically, its features include:
- Lap-by-Lap Race Replay: Steps through races one lap at a time and runs full auto-replay simulations using timing data from all the tracks
- Pit Strategy Optimization: Analyzes tire degradation curves and calculates optimal pit windows by comparing multiple scenarios (Pit Now vs. Stay Out vs. Pit Later) to minimize total race time
- Auto-Detection: Reads race metadata from the results files to automatically configure track-specific parameters like total race laps (17-27 laps depending on circuit)
- Traffic Position Tracking: Identifies undercut opportunities by monitoring field positions and gap timing between competitors (requires the 'AnalysisEnduranceWithSections' files)
- Tire Degradation Modeling: Supports manual configuration (seconds per lap degradation).
- Real-Time Recommendations: Provides colour-coded pit strategy advice based on time-saving calculations
How I built it
- Frontend: Deployed a Streamlit application that consists of a three-tab interface (Setup, Race Analysis, Advanced Settings) and interactive controls for race replay and configuration
- Data Processing: Implemented the Pandas library for handling multiple .CSV file types, including 'lap_time' files, 'telemetry_data' files, and the 'AnalysisEnduranceWithSections' files
- Analytics Modules: Created Python modules for pit window optimization, traffic modeling, anomaly detection, and caution flag probability
- Testing: Created 71 unit tests using pytest to validate data processing and analytics
Challenges I ran into
- When looking at the 'lap_time' files for each track, some of them did not have a 'value' column (only 'timestamp' column)
- The 'Next Lap' button of my application under the Race Analysis tab skips by every 2 laps or does not display any data, so the 'Auto-Replay' button is the go-to method for now
- Loading the telemetry-related files in Streamlit caused performance issues, so for now they are excluded (while features like anomaly detection and auto-degradation from lateral G-forces still exist within the code, they are not functional)
Accomplishments that I'm proud of
- Learned Streamlit and some of its features
- Created a data loader to handle two cases depending on the .CSV file (1. Use pre-processed lap times when available and 2. Calculate from timestamps when NOT available)
- Implemented a feature to auto-detect the number of laps for each track
- Implemented colour-coded pit strategy recommendations that extracts current lap data lap-by-lap and displays information (Action, Reason, Optimal Pit Lap, Expected Savings (in seconds))
- Included a JSON output that displays base recommendation for the current race state and caution decision logic (connecting with the pit strategy)
What I learned
- Introduced to Streamlit and its features
- UI bugs can be harder to track than bugs in algorithms
- Underestimated how much knowledge involving real-world physics and strategy was needed to build realistic algorithms for racing
What's next for GuidoPro
- Create a better UI to improve the look and fix display issues (such as the 'Next Lap' increment bug)
- Look deeper into performance issues to have telemetry-related features included and working
- Conduct more research on real-world race engineering for more accurate results
Log in or sign up for Devpost to join the conversation.