Second Place Solution in Spring 2025 Simulation Racing Series
Written by: Mark Menaker, Aryan Mukherjee, and Radin Khosraviani, on behalf of their team from University High School (Irvine).
GitHub: https://github.com/MightyMark3/ROAR_1_S25
Table of Contents
Introduction and History
The 2nd place spring 2025 solution was largely based on the 1st place solution from Fall 2024 by BHS Racing. This solution was slightly modified from their 1st place solution from Summer 2024, which our 2nd place solution from Fall 2024 was adapted from. Thus, our solution was nearly identical to our 2nd place solution from Fall 2024, with slight modifications that we will outline below. We had a final time of 323.2 seconds.
Modifications from Fall 2024 Winning Solution
The baseline solution from Fall 2024 by BHS Racing was quick but inconsistent (finishing about 70% of the time). It was challenging to improve time because as the car’s speed increased it crashed more often. We started with the plan to improve consistency first and then improve time. However, improving consistency turned out to be a lot more difficult (and time-consuming) than expected, so it ended up being our only focus this season. We tried several ideas and discarded all but the following two:
1. more consistent selection of a target waypoint for steering and
2. modified radius computation (which influences predicted max speed)
Waypoint for Steering
As we examined sources of inconsistency we plotted the waypoint used for steering at each time tick and noticed that it was ‘cutting the corners’ nicely but did not make a smooth line. It jumped, sometimes back and sometimes sharply to the side. This is the result of averaging to find that point and the fact that averaging depends on the lookahead distance and the
lookahead depends on speed. We tried to eliminate the ‘jump back’ phenomenon but
discovered that it was necessary for sharp turns approached at high speed. We still wanted to use this averaged line as it appeared efficient in the corners but we needed to smooth it out.
This was done in Google Colab by removing duplicates and back-tracking segments and then applying curve smoothing with splprep (b-spline representation from the scipy.interpolate package with a good example here.
Once we had a set of steering points on a smooth line we modified our Python code to always choose some point on this line. The next steering point can jump forward or back compared to the previous steering point, but all steering points would remain on this smooth line. This was done by computing the average point as before and then using this average point to find the closest point on our ‘smooth line’.
Radius computation
We also plotted the actual(observed) car locations for each time tick and the waypoint line (marking the center of the lane). This revealed another source of inconsistency: we computed max speed based on the radius of the waypoint line but the car did not stay on the waypoint line, especially in the turns!
To make our speed prediction more accurate/consistent we saved the observed car locations and used them as a more accurate approximation of the car’s future path.
Steering challenges
Tuning the pure-pursuit controller for steering was a major annoyance. First, the parameters must make the car lunge into the turn quickly, but not too quickly to avoid hitting the inside wall. Then, these parameters must be finessed to make the car come out of the corner without hitting the outside wall. After going through on the lap, the car sometimes rolls up to the same corner with a slightly different speed and ends up in the wall.
Debugging notes
Our gratitude goes to the ‘BHS Racing’ team for their code to save debugging info.
This season more than ever, we relied on the debugging information collected during the car’s drive. Many things we wanted to examine were added to the exported debug info and then copy/pasted into external tools.
– Google Colab helped us with offline data processing.
– https://www.desmos.com/calculator was helpful to visualize data and provided an easy
way to interact with data: zoom, pan, click to reveal values.
Attempted computation of Racing Lines
We attempted using polynomial, logistic, and trigonometric regression graphs that would define the waypoint paths in each subsection of the map and make the car’s navigation with lookahead points smoother, but found that this method did not improve lap times. However, we may explore this method further in future series. We also fit our map of waypoints to Desmos to track any anomalies that could be modified, but such modifications risked a greater number of crashes and thus were not implemented.
Conclusion
A big thank you to Dr. Allen Yang, Mr. Huo Chao Kuan, and your team of experts for all the effort put into running the competition! As second year ROAR club members, we enjoyed the opportunity to explore ROAR at our school. Another big Thank You goes to Mr. Shulman, who advises the Autonomous Car Racing Club at University High School! Finally, we would like to thank our other teammates: Pirouz Ruppert and Benjamin Tan!