This repsoitory provides the implementation of Multidirectional Gaussian-Process Tire Models for Kalman Filtering in Vehicle Dynamics State Estimation. The respective Paper covering the theoretical details is linked below.
The key idea is to enable vehicle-model based state estimation (velocity and side slip angle) with limited training data. This is facilitated by utilizing acceleration and velocity measurements to parametrize a Gaussian process (GP) resembling the tire behavior offline and utilize this model afterward in an Unscented Kalman Filter (UKF) with adaptive covariance. The covariance is adjusted with respect to the GP predictions to account for slip areas not represented in the training data. The GP model is set up in a way to feature multiple input directions (slip, combined slip, tire temperature).
The side slip angle estimation is developed based on 3DVehicleDynamicsStateEstimation, where an integration into a ROS2 Node along with an integration into the state estimation of the TUM Autonmous Motorsport Team are implemented.
- dependencies:
- msgs: package containing message definitions
- TAM_param_management: package for parameter management (copied from TAM Param Management)
- tsl: package for logging of time series (copied from TSL)
- tum_helpers_cpp: helper functions (copied from 3DVehicleDynamicsStateEstimation)
- tum_type_conversions_ros_cpp: type conversions (copied from 3DVehicleDynamicsStateEstimation)
- tum_types_cpp: additional type definitions (copied from 3DVehicleDynamicsStateEstimation)
- lib_cpp:
- base: base classes and modules (fir, imu handler)
- constants: templates for ssa estimator
- gp_tire_cpp: implementation adapted based on cpp implementation of "Gaussian Processes for Machine Learning" / Dependencies: LBFGS++
- ssa_estimation_cpp: implementation of the ssa estimation incl. UKF
- vehicle_model_cpp: implementation of the vehicle model used in the UKF
- ssa_simulation: setup of observation files + test of ssa estimator; executables: force_calc_sim.cpp, ssa_estimation_sim.cpp
The code was tested on an Intel Core i7-1270P CPU with an Ubuntu 22.04 LTS operating system. The implementation of estimation and simulation is done in native C++ and does not include ROS-dependencies. However, dependendcies and package configurations require ROS to build the required packages. The code was tested using ROS2 Humble for this matter.
Build using colcon and source the install folder in each used terminal (after sourcing ROS "source /opt/ros/humble/setup.zsh"):
colcon build
source ./install/setup.bashTo execute the force simulation: The available option can be seen using the suffix --help. Example:
./install/ssa_simulation/lib/ssa_simulation/force_simulation --train_file a2rl_1025_q1 --eval_file a2rl_1025_q1 --obs_grid_size_x1 4 --obs_grid_size_x2 2 --tire_pos rear_latUsing the force simulation the observation files can be created (adjust observation space using the available options). These observation files can afterwards be used in the side slip angle estimation (define file name and storage folder in 02_configs/UKF.yml).
Exemplary options for the simulation of the side slip angle estimation:
./install/ssa_simulation/lib/ssa_simulation/ssa_simulation --tire_model MFSimple --run_name a2rl_1025_q1 --early_stopping falseIf you use this repository in your work please consider citing our paper:
@article{Goblirsch2026,
author = {Sven Goblirsch and Mattia Piccinini and Johannes Betz and Markus Lienkamp},
title = {Multidirectional Gaussian-process tire models for Kalman filtering in vehicle dynamics state estimation},
journal = {Vehicle System Dynamics},
volume = {0},
number = {0},
pages = {1--29},
year = {2026},
publisher = {Taylor \& Francis},
doi = {10.1080/00423114.2026.2665407},
URL = {https://doi.org/10.1080/00423114.2026.2665407},
eprint = {https://doi.org/10.1080/00423114.2026.2665407}}