# Validation: how accurate is opensus?

> Measured accuracy of the opensus suspension solver against an independent closed-form double wishbone solution and hand calculations: wheel position within 0.000001 mm, angles within 0.000003 degrees, roll center and steering geometry exact.

opensus's linkage solver matches an independent closed-form double wishbone solution to within **0.000001 mm** in wheel position and **0.000003°** in wheel angle across ±46 mm of travel and ±30 mm of steering, and reproduces hand-calculated roll center, camber gain, kingpin geometry and anti-dive exactly. These checks run automatically on every change to the code.

## 1. Against a closed-form solution

A double wishbone can also be solved directly with geometry, one closed-form step at a time, with no general solver involved. opensus's test suite includes such an independent solver and compares the two on the same hardpoints.

| Quantity | Positions compared | Largest difference |
|---|--:|--:|
| Wheel center position | 125 (−46 to +46 mm travel × −30 to +30 mm rack) | 0.000000001 mm |
| Spindle direction (camber and toe) | 125 | 0.0000021° |
| Spring length through the pushrod and rocker | 25 | 0.000000001 mm |

## 2. Lookup table against the exact solve

The whole-car model reads corner positions from a precomputed table. Against the exact solve at 170 positions between the table's grid points:

| Quantity | Largest difference |
|---|--:|
| Wheel center position | 0.001 mm |
| Spindle direction | 0.0013° |
| Spring length | 0.002 mm |

## 3. Against hand calculations

The [docs example double wishbone](/docs/double-wishbone/) was chosen so every metric can be worked by hand. opensus's results, using its general motion-based method:

| Metric | By hand | opensus |
|---|--:|--:|
| Front-view instant center | (−1206.4, 270.5) mm | (−1206.4, 270.5) mm |
| [Roll center height](/docs/roll-center/) | 89.9 mm | 89.9 mm |
| [Camber gain](/docs/camber-gain/) at ride height | −0.317° / 10 mm | −0.317° / 10 mm |
| [Kingpin inclination, caster](/docs/scrub-radius/) | 5.19° | 5.19° |
| [Scrub radius](/docs/scrub-radius/) | 39.1 mm | 39.1 mm |
| [Mechanical trail](/docs/scrub-radius/) | 15.9 mm | 15.9 mm |
| [Anti-dive](/docs/anti-dive-anti-squat/), Formula SAE front | 12.6 % | 12.6 % |
| [Wheel rate](/docs/motion-ratio/), Formula SAE front | 60 × 0.674² = 27.2 N/mm | 27.2 N/mm |
| [Ride frequency](/docs/motion-ratio/), Formula SAE front | 3.11 Hz | 3.11 Hz |

## 4. Consistency checks

- **Link loads**: feeding the tire model's own forces into the [load case](/docs/load-cases/) linkage solver, the spring force it finds matches the whole-car model to within 0.05 % at every corner in cornering, braking and combined cases, including the sway bar's share.
- **Compliance** is linear: the 1 g cornering result equals the lateral-force and aligning-torque results added together, and halving the reference stiffness doubles every deflection exactly.
- **Symmetry**: left and right corners of a symmetric axle give mirror-image results.
- **Every template** (double wishbone, MacPherson, five-link, semi-trailing arm) assembles with exactly one free motion and reports the entered static camber and toe at ride height.

## What validation does not cover

These checks show opensus solves its model correctly. The model itself has limits: rigid links, a simplified tire model, and prescribed accelerations in transients. See [methodology](/docs/methodology/). Results are engineering estimates; verify safety-critical parts independently.

Source: https://opensus.app/docs/validation/ (last updated 2026-11-07)
