top of page

Here is a brief overview of the suspension kinematic software that I developed. If you are interested in learning more about this project you can download a full pdf report on the project here

This the a visualization of a shakedown test from 2019. The position of the vehicle, shock positions, and steering angle are the only inputs. The position of each body is calculated.


The design of a race car is obviously extremely complex, and requires the use of many design tools to develop a well performing car. The suspension system is of particular interest to the subject of this course, as there are over 30 rigid bodies interacting in different ways to ultimately allow the vehicle to roll down the track.

The Formula UBC Racing team has used multiple software packages and design techniques to help develop the suspension kinematics of their vehicles. 

  1. Spreadsheets and hand calculations

  2. Team developed lap time simulation

  3. Off the shelf vehicle modelling software (Optimum Kinematics)

  4. CAD packages (Solidworks)


The tool developed as a part of this project aims to replace item 3 in the previous list. The software used currently costs the team hundreds of dollars each year, and developing our own software will allow for greater control and understanding of the underlying calculations. Specifically, the goals of this project are:

  1. Model the motion of suspension components in 3D space.

  2. Allow the user to easily input geometry

  3. Be written in a general enough manner that it is possible to model different suspension layouts. (eg. double wishbone, multi-link, solid axle, etc.) This can be done by either

    • ˆ Altering the inputs given to the tool

    • ˆMaking minor alterations to the source code.

      • "Minor" = less than 20 lines.

  4. Model forward kinematics

    • Inputs are :

      • 4X Shock Positions​

      • Steering Angle

      • 3X Vehicle Position (X, Y, Z)

      • 3X Vehicle Orientation (α, β, γ)

  5. Visualize the vehicle to the user

    • This is required to ensure that the configuration and inputs are as expected.

  6. Provide a framework for calculating desired suspension output values


The suspension is broken into it's individual component bodies. Each body is represented by a series of points. (These are the green and red dots show in the video above.) Each body has a set of associated parameters that are used to define it's position in 3d space. The most any one body can have is 6, but most bodies will have less. For example: an A-arm is connected to the chassis through 2 ball joints. The axis that passes through these two points forms the axis of a revolute joint, which has one degree of freedom. Therefore, an A-arm would have a single parameter defining it's position. Similar logic is used to significantly reduce the total number of parameters that need to be calculated. These parameters are then compiled into a list. 

When the suspension is loaded into the software, the user must provide a connection array that indicates which points on which bodies are connected together. The objective of the kinematic solver is to minimize the distance between connected points. It does this using a numerical solver, and adjusting the values of the parameters until the objective function is minimized. 


I verified the outputs from my model against off the shelf vehicle modelling software. The results aligned within an acceptable margin for what I am attempting to accomplish. The plots below show a sweep of toe and camber angle as the vehicle rolls. The solid line were values calculated using my model, and the stars are from the off the shelf software.

Optimum K comparison.png
bottom of page