
What is Formula Student (AI)?
Formula Student is a worldwide engineering competition in which university teams design, build and race their own vehicles. The UK competition, Formula Student UK, attracts teams from universities around the world.
Traditionally, Formula Student focused on vehicles powered by internal combustion engines. However, the competition has evolved significantly in recent years alongside advances in electric vehicle technology, with many teams now developing fully electric cars. More recently, advances in machine learning, computational power and artificial intelligence have introduced a new dimension to the competition: Formula Student AI (FS-AI).
In FS-AI, teams are challenged not only to design and build a high-performance vehicle, but also to integrate the computing hardware and software required for it to race autonomously. Using sensors, perception systems and control algorithms, the vehicle must navigate an unfamiliar track without human input, balancing speed with the ability to safely understand and respond to its environment.

What I did


The UGRacing society attempts to follow real-world organisation methods, splitting development areas into subteams each led by a subteam head, with a head software engineer deciding the long-term development workflow and a team principal to represent the team officially. Upon joining the team in 2021 in my first year of University, I was placed in the Perception subteam, which was responsible for maintaining and improving the systems which detect and represent the track during dynamic events.
When I initialy joined the team, the perception system was camera-based, and the team had only just acquired a new Velodyne VLP-16 LiDAR, but had written no software for it yet. My first project was to get the LiDAR sensor working. This took some time, as I had to dig through documentation and manuals not only to understand how such a sensor worked but also how the Robot Operating System (ROS) ecosystem worked – as it was the framework we used for writing our code.
Getting the sensor to produce a poitncloud was only half the battle, as it is not a trivial task to turn a cloud of thousands of points in 3-dimensional space into a representation of the track in front of the vehicle in an efficient way (such that it can be done ten times per second). As the track is delimited by cones, we are mainly interested in determining the 3d positions of these cones in front of the sensor. These cones are small in comparison to other objects which can be on the track and so a large part of any LiDAR object detection module is first noise removal / filtering. This can take on simple forms such as static cropping, and can be more sophisticated such as the use of dynamic ground plane identification and filtering – as the LiDAR will always return points representing the floor and constituting unusuful noise in our usecase.
After sucessfully developing a LiDAR perception system, my next task was to find a good way to combine estimates from both the LiDAR and Camera perception systems so that we could achieve a ‘best of both worlds’ scenario – where the fast update rate and good range of the camera could be combined with the higher precision and better field of view of the lidar to negotiate slow corners. This task required careful calibration between the camera and LiDAR, as their different mounting positions meant that cone observations were represented in different world frames. Additionally, data came in out of sync, so data had to be synchronised to be used and finally, observation noise can lead to ambiguity when attempting to correlate cone observation instances across sensors, as particularly noisy estimates can be misattributed to unrelated cones.
After completing this work and proving myself motivated and capable, I was chosen to be the new Head Software Engineer in the 2023-2024 season. During this season, my work continued to include software engineering, but also became a higher level management of the team, deciding upon software development philosophies, overarching goals and objectives and how our progress can be presented to the judges at the competition. During this year, I also embarked on the implementation of FastSLAM, as well as optimising our stereo camera perception. I achieved a significant speed up (50%) in our camera perception as well as significantly improving the robustness by making use of some high probability asusmptions to vastly simplify the 3d regression problem.
What I gained
Up until this point, I had mainly worked on personal projects. With a personal project, there is rarely a hard deadline and objectives can remain flexible. Often, how far you get is determined by how long your interest lasts, and when you feel you have achieved enough or want to move on, you can simply consider the project finished. In the UGRacing team, however, things were very different. There were always more good ideas than we had the time or resources to implement, making it crucial to properly allocate both. The key skill I gained from this was prioritisation — learning to identify which features would provide the most value for the time and resources they required.
Several years of competing, and repeatedly thinking “if I had done this, we wouldn’t have this issue”, taught me to approach projects very differently. Time moves quickly, and you often achieve less than you initially expect, making it important to invest time in planning and organising before starting the work itself. In a real project, time is finite, stakes are higher, and every feature comes at the cost of something else that could have been developed instead. Moving from experimenting in my spare time to working on a project with real timelines and deadlines taught me to give serious thought to each decision, commit to a plan, while still leaving enough room to adapt when things inevitably don’t go as expected.
