No version for distro humble showing github. Known supported distros are highlighted in the buttons above.

Repository Summary

Description C++ Implementation of a Multibody Vehicle Dynamics Simulation
Checkout URI https://github.com/tumftm/open-car-dynamics.git
VCS Type git
VCS Version main
Last Updated 2026-02-24
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

README

ocd_logo

Open Car Dynamics provides a comprehensive, modular, and highly efficient implementation of a vehicle's dynamic behavior. Following the philosophy of modeling vehicle behavior "in as much detail as necessary, but as simply as possible," the library drastically simplifies parametrization and adaptation to custom requirements. Written in modern C++ for maximum performance, the library offers seamless integrations for Python and ROS 2. Furthermore, vehicle dynamics has been rigorously validated against data recorded with the AV21 autonomous racecar used in the Indy Autonomous Challenge to ensure simulation accuracy and reliability.

[![C++](https://img.shields.io/badge/C%2B%2B-20-1e6293?logo=c%2B%2B&logoColor=white)](https://isocpp.org/) [![CMake](https://img.shields.io/badge/CMake-3.18-1e6293?logo=cmake&logoColor=white)](https://cmake.org/) [![Docker](https://img.shields.io/badge/Container-docker-1e6293.svg?&logo=docker&logoColor=white)](https://www.docker.com/) [![Apache 2.0](https://img.shields.io/badge/License-Apache%202.0-1e6293.svg?&logo=apache&logoColor=white)](https://www.apache.org/licenses/LICENSE-2.0) [![DOI](https://img.shields.io/badge/DOI-10.1109%2FIV55156.2024.10588858-1e6293.svg?&logo=doi&logoColor=white)](https://doi.org/10.1109/IV55156.2024.10588858)
[![Python](https://img.shields.io/badge/Python-3.12%20%7C%203.10-e3781f?logo=python&logoColor=white)](https://www.python.org/) [![ROS 2](https://img.shields.io/badge/ROS_2-Humble%20%7C%20Jazzy-e3781f.svg?logo=ros&logoColor=white)](https://docs.ros.org/en/humble/) ![Ubuntu](https://img.shields.io/badge/Ubuntu-24.04%20%7C%2022.04-e3781f?logo=ubuntu&logoColor=white)

Table of Contents

1. How it works

The model is designed to be an ordinary differential equation in state-space formulation. This state space model is solved using the Dormand-Prince scheme with a constant integration step size to enable real-time execution.

To achieve modularity, each vehicle model consists of 3 different submodels:

  • Vehicle Dynamics
  • Drivetrain
  • Steering Actuator

The interfaces connecting the different models are shown in the following figure:

<img src="doc/Model_Composition.drawio.svg" alt="model_composition", width="80%" style="margin-bottom: 30px;">

Furthermore, the vehicle dynamics models can incorporate submodels for modeling aerodynamics and tire behavior. However, these models are stateless, which distinguishes them from the 3 submodels mentioned above.

All of these 5 submodel components can be freely combined with each other, enabling a vast number of different vehicle implementations. With this design, our library is able to model a lot of different vehicles without modifying the source code, also enabling rapid extension and collaboration. New variations of any submodel can be created by just inheriting and implementing the corresponding base class.

The submodels are automatically combined at compile time (hence the heavy templating in this library) by concatenating their state vectors to form one big model. Since combination happens at compile time, the compiler is able to heavily optimize the model, making it highly efficient. Even the most complex model currently inside the repository achieves a full simulation time step (using Dormand-Prince~ode4 integration) with an execution time below 10 µs on our benchmark system (AMD Ryzen 9 7950X).

2. Compiling and Running the Model

The model and its different bindings (ROS 2, Python) can be compiled in multiple ways from source. First, ensure you meet the prerequisites in section 2.1.

Afterwards, refer to the respective subsection depending on how and what you want to compile.

2.1. Prerequisites

Before building, ensure you have the following installed:

  • OS: Ubuntu 22.04 or 24.04
  • Compiler: A modern C++ compiler (GCC/Clang) supporting C++20
  • Build Tools: CMake (>= 3.18), Make/Ninja
  • Libraries: Eigen3, Boost
  • (Optional) ROS 2: Humble or Jazzy (for ROS 2 nodes and Python bindings)
  • (Optional) Docker: If building Python bindings without a local ROS 2 installation

2.2. Clone Repository

First clone the repository using the command:

git clone --recursive https://github.com/TUMFTM/Open-Car-Dynamics.git

File truncated at 100 lines see the full file

No version for distro jazzy showing github. Known supported distros are highlighted in the buttons above.

Repository Summary

Description C++ Implementation of a Multibody Vehicle Dynamics Simulation
Checkout URI https://github.com/tumftm/open-car-dynamics.git
VCS Type git
VCS Version main
Last Updated 2026-02-24
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

README

ocd_logo

Open Car Dynamics provides a comprehensive, modular, and highly efficient implementation of a vehicle's dynamic behavior. Following the philosophy of modeling vehicle behavior "in as much detail as necessary, but as simply as possible," the library drastically simplifies parametrization and adaptation to custom requirements. Written in modern C++ for maximum performance, the library offers seamless integrations for Python and ROS 2. Furthermore, vehicle dynamics has been rigorously validated against data recorded with the AV21 autonomous racecar used in the Indy Autonomous Challenge to ensure simulation accuracy and reliability.

[![C++](https://img.shields.io/badge/C%2B%2B-20-1e6293?logo=c%2B%2B&logoColor=white)](https://isocpp.org/) [![CMake](https://img.shields.io/badge/CMake-3.18-1e6293?logo=cmake&logoColor=white)](https://cmake.org/) [![Docker](https://img.shields.io/badge/Container-docker-1e6293.svg?&logo=docker&logoColor=white)](https://www.docker.com/) [![Apache 2.0](https://img.shields.io/badge/License-Apache%202.0-1e6293.svg?&logo=apache&logoColor=white)](https://www.apache.org/licenses/LICENSE-2.0) [![DOI](https://img.shields.io/badge/DOI-10.1109%2FIV55156.2024.10588858-1e6293.svg?&logo=doi&logoColor=white)](https://doi.org/10.1109/IV55156.2024.10588858)
[![Python](https://img.shields.io/badge/Python-3.12%20%7C%203.10-e3781f?logo=python&logoColor=white)](https://www.python.org/) [![ROS 2](https://img.shields.io/badge/ROS_2-Humble%20%7C%20Jazzy-e3781f.svg?logo=ros&logoColor=white)](https://docs.ros.org/en/humble/) ![Ubuntu](https://img.shields.io/badge/Ubuntu-24.04%20%7C%2022.04-e3781f?logo=ubuntu&logoColor=white)

Table of Contents

1. How it works

The model is designed to be an ordinary differential equation in state-space formulation. This state space model is solved using the Dormand-Prince scheme with a constant integration step size to enable real-time execution.

To achieve modularity, each vehicle model consists of 3 different submodels:

  • Vehicle Dynamics
  • Drivetrain
  • Steering Actuator

The interfaces connecting the different models are shown in the following figure:

<img src="doc/Model_Composition.drawio.svg" alt="model_composition", width="80%" style="margin-bottom: 30px;">

Furthermore, the vehicle dynamics models can incorporate submodels for modeling aerodynamics and tire behavior. However, these models are stateless, which distinguishes them from the 3 submodels mentioned above.

All of these 5 submodel components can be freely combined with each other, enabling a vast number of different vehicle implementations. With this design, our library is able to model a lot of different vehicles without modifying the source code, also enabling rapid extension and collaboration. New variations of any submodel can be created by just inheriting and implementing the corresponding base class.

The submodels are automatically combined at compile time (hence the heavy templating in this library) by concatenating their state vectors to form one big model. Since combination happens at compile time, the compiler is able to heavily optimize the model, making it highly efficient. Even the most complex model currently inside the repository achieves a full simulation time step (using Dormand-Prince~ode4 integration) with an execution time below 10 µs on our benchmark system (AMD Ryzen 9 7950X).

2. Compiling and Running the Model

The model and its different bindings (ROS 2, Python) can be compiled in multiple ways from source. First, ensure you meet the prerequisites in section 2.1.

Afterwards, refer to the respective subsection depending on how and what you want to compile.

2.1. Prerequisites

Before building, ensure you have the following installed:

  • OS: Ubuntu 22.04 or 24.04
  • Compiler: A modern C++ compiler (GCC/Clang) supporting C++20
  • Build Tools: CMake (>= 3.18), Make/Ninja
  • Libraries: Eigen3, Boost
  • (Optional) ROS 2: Humble or Jazzy (for ROS 2 nodes and Python bindings)
  • (Optional) Docker: If building Python bindings without a local ROS 2 installation

2.2. Clone Repository

First clone the repository using the command:

git clone --recursive https://github.com/TUMFTM/Open-Car-Dynamics.git

File truncated at 100 lines see the full file

No version for distro kilted showing github. Known supported distros are highlighted in the buttons above.

Repository Summary

Description C++ Implementation of a Multibody Vehicle Dynamics Simulation
Checkout URI https://github.com/tumftm/open-car-dynamics.git
VCS Type git
VCS Version main
Last Updated 2026-02-24
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

README

ocd_logo

Open Car Dynamics provides a comprehensive, modular, and highly efficient implementation of a vehicle's dynamic behavior. Following the philosophy of modeling vehicle behavior "in as much detail as necessary, but as simply as possible," the library drastically simplifies parametrization and adaptation to custom requirements. Written in modern C++ for maximum performance, the library offers seamless integrations for Python and ROS 2. Furthermore, vehicle dynamics has been rigorously validated against data recorded with the AV21 autonomous racecar used in the Indy Autonomous Challenge to ensure simulation accuracy and reliability.

[![C++](https://img.shields.io/badge/C%2B%2B-20-1e6293?logo=c%2B%2B&logoColor=white)](https://isocpp.org/) [![CMake](https://img.shields.io/badge/CMake-3.18-1e6293?logo=cmake&logoColor=white)](https://cmake.org/) [![Docker](https://img.shields.io/badge/Container-docker-1e6293.svg?&logo=docker&logoColor=white)](https://www.docker.com/) [![Apache 2.0](https://img.shields.io/badge/License-Apache%202.0-1e6293.svg?&logo=apache&logoColor=white)](https://www.apache.org/licenses/LICENSE-2.0) [![DOI](https://img.shields.io/badge/DOI-10.1109%2FIV55156.2024.10588858-1e6293.svg?&logo=doi&logoColor=white)](https://doi.org/10.1109/IV55156.2024.10588858)
[![Python](https://img.shields.io/badge/Python-3.12%20%7C%203.10-e3781f?logo=python&logoColor=white)](https://www.python.org/) [![ROS 2](https://img.shields.io/badge/ROS_2-Humble%20%7C%20Jazzy-e3781f.svg?logo=ros&logoColor=white)](https://docs.ros.org/en/humble/) ![Ubuntu](https://img.shields.io/badge/Ubuntu-24.04%20%7C%2022.04-e3781f?logo=ubuntu&logoColor=white)

Table of Contents

1. How it works

The model is designed to be an ordinary differential equation in state-space formulation. This state space model is solved using the Dormand-Prince scheme with a constant integration step size to enable real-time execution.

To achieve modularity, each vehicle model consists of 3 different submodels:

  • Vehicle Dynamics
  • Drivetrain
  • Steering Actuator

The interfaces connecting the different models are shown in the following figure:

<img src="doc/Model_Composition.drawio.svg" alt="model_composition", width="80%" style="margin-bottom: 30px;">

Furthermore, the vehicle dynamics models can incorporate submodels for modeling aerodynamics and tire behavior. However, these models are stateless, which distinguishes them from the 3 submodels mentioned above.

All of these 5 submodel components can be freely combined with each other, enabling a vast number of different vehicle implementations. With this design, our library is able to model a lot of different vehicles without modifying the source code, also enabling rapid extension and collaboration. New variations of any submodel can be created by just inheriting and implementing the corresponding base class.

The submodels are automatically combined at compile time (hence the heavy templating in this library) by concatenating their state vectors to form one big model. Since combination happens at compile time, the compiler is able to heavily optimize the model, making it highly efficient. Even the most complex model currently inside the repository achieves a full simulation time step (using Dormand-Prince~ode4 integration) with an execution time below 10 µs on our benchmark system (AMD Ryzen 9 7950X).

2. Compiling and Running the Model

The model and its different bindings (ROS 2, Python) can be compiled in multiple ways from source. First, ensure you meet the prerequisites in section 2.1.

Afterwards, refer to the respective subsection depending on how and what you want to compile.

2.1. Prerequisites

Before building, ensure you have the following installed:

  • OS: Ubuntu 22.04 or 24.04
  • Compiler: A modern C++ compiler (GCC/Clang) supporting C++20
  • Build Tools: CMake (>= 3.18), Make/Ninja
  • Libraries: Eigen3, Boost
  • (Optional) ROS 2: Humble or Jazzy (for ROS 2 nodes and Python bindings)
  • (Optional) Docker: If building Python bindings without a local ROS 2 installation

2.2. Clone Repository

First clone the repository using the command:

git clone --recursive https://github.com/TUMFTM/Open-Car-Dynamics.git

File truncated at 100 lines see the full file

No version for distro rolling showing github. Known supported distros are highlighted in the buttons above.

Repository Summary

Description C++ Implementation of a Multibody Vehicle Dynamics Simulation
Checkout URI https://github.com/tumftm/open-car-dynamics.git
VCS Type git
VCS Version main
Last Updated 2026-02-24
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

README

ocd_logo

Open Car Dynamics provides a comprehensive, modular, and highly efficient implementation of a vehicle's dynamic behavior. Following the philosophy of modeling vehicle behavior "in as much detail as necessary, but as simply as possible," the library drastically simplifies parametrization and adaptation to custom requirements. Written in modern C++ for maximum performance, the library offers seamless integrations for Python and ROS 2. Furthermore, vehicle dynamics has been rigorously validated against data recorded with the AV21 autonomous racecar used in the Indy Autonomous Challenge to ensure simulation accuracy and reliability.

[![C++](https://img.shields.io/badge/C%2B%2B-20-1e6293?logo=c%2B%2B&logoColor=white)](https://isocpp.org/) [![CMake](https://img.shields.io/badge/CMake-3.18-1e6293?logo=cmake&logoColor=white)](https://cmake.org/) [![Docker](https://img.shields.io/badge/Container-docker-1e6293.svg?&logo=docker&logoColor=white)](https://www.docker.com/) [![Apache 2.0](https://img.shields.io/badge/License-Apache%202.0-1e6293.svg?&logo=apache&logoColor=white)](https://www.apache.org/licenses/LICENSE-2.0) [![DOI](https://img.shields.io/badge/DOI-10.1109%2FIV55156.2024.10588858-1e6293.svg?&logo=doi&logoColor=white)](https://doi.org/10.1109/IV55156.2024.10588858)
[![Python](https://img.shields.io/badge/Python-3.12%20%7C%203.10-e3781f?logo=python&logoColor=white)](https://www.python.org/) [![ROS 2](https://img.shields.io/badge/ROS_2-Humble%20%7C%20Jazzy-e3781f.svg?logo=ros&logoColor=white)](https://docs.ros.org/en/humble/) ![Ubuntu](https://img.shields.io/badge/Ubuntu-24.04%20%7C%2022.04-e3781f?logo=ubuntu&logoColor=white)

Table of Contents

1. How it works

The model is designed to be an ordinary differential equation in state-space formulation. This state space model is solved using the Dormand-Prince scheme with a constant integration step size to enable real-time execution.

To achieve modularity, each vehicle model consists of 3 different submodels:

  • Vehicle Dynamics
  • Drivetrain
  • Steering Actuator

The interfaces connecting the different models are shown in the following figure:

<img src="doc/Model_Composition.drawio.svg" alt="model_composition", width="80%" style="margin-bottom: 30px;">

Furthermore, the vehicle dynamics models can incorporate submodels for modeling aerodynamics and tire behavior. However, these models are stateless, which distinguishes them from the 3 submodels mentioned above.

All of these 5 submodel components can be freely combined with each other, enabling a vast number of different vehicle implementations. With this design, our library is able to model a lot of different vehicles without modifying the source code, also enabling rapid extension and collaboration. New variations of any submodel can be created by just inheriting and implementing the corresponding base class.

The submodels are automatically combined at compile time (hence the heavy templating in this library) by concatenating their state vectors to form one big model. Since combination happens at compile time, the compiler is able to heavily optimize the model, making it highly efficient. Even the most complex model currently inside the repository achieves a full simulation time step (using Dormand-Prince~ode4 integration) with an execution time below 10 µs on our benchmark system (AMD Ryzen 9 7950X).

2. Compiling and Running the Model

The model and its different bindings (ROS 2, Python) can be compiled in multiple ways from source. First, ensure you meet the prerequisites in section 2.1.

Afterwards, refer to the respective subsection depending on how and what you want to compile.

2.1. Prerequisites

Before building, ensure you have the following installed:

  • OS: Ubuntu 22.04 or 24.04
  • Compiler: A modern C++ compiler (GCC/Clang) supporting C++20
  • Build Tools: CMake (>= 3.18), Make/Ninja
  • Libraries: Eigen3, Boost
  • (Optional) ROS 2: Humble or Jazzy (for ROS 2 nodes and Python bindings)
  • (Optional) Docker: If building Python bindings without a local ROS 2 installation

2.2. Clone Repository

First clone the repository using the command:

git clone --recursive https://github.com/TUMFTM/Open-Car-Dynamics.git

File truncated at 100 lines see the full file

Repository Summary

Description C++ Implementation of a Multibody Vehicle Dynamics Simulation
Checkout URI https://github.com/tumftm/open-car-dynamics.git
VCS Type git
VCS Version main
Last Updated 2026-02-24
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

README

ocd_logo

Open Car Dynamics provides a comprehensive, modular, and highly efficient implementation of a vehicle's dynamic behavior. Following the philosophy of modeling vehicle behavior "in as much detail as necessary, but as simply as possible," the library drastically simplifies parametrization and adaptation to custom requirements. Written in modern C++ for maximum performance, the library offers seamless integrations for Python and ROS 2. Furthermore, vehicle dynamics has been rigorously validated against data recorded with the AV21 autonomous racecar used in the Indy Autonomous Challenge to ensure simulation accuracy and reliability.

[![C++](https://img.shields.io/badge/C%2B%2B-20-1e6293?logo=c%2B%2B&logoColor=white)](https://isocpp.org/) [![CMake](https://img.shields.io/badge/CMake-3.18-1e6293?logo=cmake&logoColor=white)](https://cmake.org/) [![Docker](https://img.shields.io/badge/Container-docker-1e6293.svg?&logo=docker&logoColor=white)](https://www.docker.com/) [![Apache 2.0](https://img.shields.io/badge/License-Apache%202.0-1e6293.svg?&logo=apache&logoColor=white)](https://www.apache.org/licenses/LICENSE-2.0) [![DOI](https://img.shields.io/badge/DOI-10.1109%2FIV55156.2024.10588858-1e6293.svg?&logo=doi&logoColor=white)](https://doi.org/10.1109/IV55156.2024.10588858)
[![Python](https://img.shields.io/badge/Python-3.12%20%7C%203.10-e3781f?logo=python&logoColor=white)](https://www.python.org/) [![ROS 2](https://img.shields.io/badge/ROS_2-Humble%20%7C%20Jazzy-e3781f.svg?logo=ros&logoColor=white)](https://docs.ros.org/en/humble/) ![Ubuntu](https://img.shields.io/badge/Ubuntu-24.04%20%7C%2022.04-e3781f?logo=ubuntu&logoColor=white)

Table of Contents

1. How it works

The model is designed to be an ordinary differential equation in state-space formulation. This state space model is solved using the Dormand-Prince scheme with a constant integration step size to enable real-time execution.

To achieve modularity, each vehicle model consists of 3 different submodels:

  • Vehicle Dynamics
  • Drivetrain
  • Steering Actuator

The interfaces connecting the different models are shown in the following figure:

<img src="doc/Model_Composition.drawio.svg" alt="model_composition", width="80%" style="margin-bottom: 30px;">

Furthermore, the vehicle dynamics models can incorporate submodels for modeling aerodynamics and tire behavior. However, these models are stateless, which distinguishes them from the 3 submodels mentioned above.

All of these 5 submodel components can be freely combined with each other, enabling a vast number of different vehicle implementations. With this design, our library is able to model a lot of different vehicles without modifying the source code, also enabling rapid extension and collaboration. New variations of any submodel can be created by just inheriting and implementing the corresponding base class.

The submodels are automatically combined at compile time (hence the heavy templating in this library) by concatenating their state vectors to form one big model. Since combination happens at compile time, the compiler is able to heavily optimize the model, making it highly efficient. Even the most complex model currently inside the repository achieves a full simulation time step (using Dormand-Prince~ode4 integration) with an execution time below 10 µs on our benchmark system (AMD Ryzen 9 7950X).

2. Compiling and Running the Model

The model and its different bindings (ROS 2, Python) can be compiled in multiple ways from source. First, ensure you meet the prerequisites in section 2.1.

Afterwards, refer to the respective subsection depending on how and what you want to compile.

2.1. Prerequisites

Before building, ensure you have the following installed:

  • OS: Ubuntu 22.04 or 24.04
  • Compiler: A modern C++ compiler (GCC/Clang) supporting C++20
  • Build Tools: CMake (>= 3.18), Make/Ninja
  • Libraries: Eigen3, Boost
  • (Optional) ROS 2: Humble or Jazzy (for ROS 2 nodes and Python bindings)
  • (Optional) Docker: If building Python bindings without a local ROS 2 installation

2.2. Clone Repository

First clone the repository using the command:

git clone --recursive https://github.com/TUMFTM/Open-Car-Dynamics.git

File truncated at 100 lines see the full file

No version for distro galactic showing github. Known supported distros are highlighted in the buttons above.

Repository Summary

Description C++ Implementation of a Multibody Vehicle Dynamics Simulation
Checkout URI https://github.com/tumftm/open-car-dynamics.git
VCS Type git
VCS Version main
Last Updated 2026-02-24
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

README

ocd_logo

Open Car Dynamics provides a comprehensive, modular, and highly efficient implementation of a vehicle's dynamic behavior. Following the philosophy of modeling vehicle behavior "in as much detail as necessary, but as simply as possible," the library drastically simplifies parametrization and adaptation to custom requirements. Written in modern C++ for maximum performance, the library offers seamless integrations for Python and ROS 2. Furthermore, vehicle dynamics has been rigorously validated against data recorded with the AV21 autonomous racecar used in the Indy Autonomous Challenge to ensure simulation accuracy and reliability.

[![C++](https://img.shields.io/badge/C%2B%2B-20-1e6293?logo=c%2B%2B&logoColor=white)](https://isocpp.org/) [![CMake](https://img.shields.io/badge/CMake-3.18-1e6293?logo=cmake&logoColor=white)](https://cmake.org/) [![Docker](https://img.shields.io/badge/Container-docker-1e6293.svg?&logo=docker&logoColor=white)](https://www.docker.com/) [![Apache 2.0](https://img.shields.io/badge/License-Apache%202.0-1e6293.svg?&logo=apache&logoColor=white)](https://www.apache.org/licenses/LICENSE-2.0) [![DOI](https://img.shields.io/badge/DOI-10.1109%2FIV55156.2024.10588858-1e6293.svg?&logo=doi&logoColor=white)](https://doi.org/10.1109/IV55156.2024.10588858)
[![Python](https://img.shields.io/badge/Python-3.12%20%7C%203.10-e3781f?logo=python&logoColor=white)](https://www.python.org/) [![ROS 2](https://img.shields.io/badge/ROS_2-Humble%20%7C%20Jazzy-e3781f.svg?logo=ros&logoColor=white)](https://docs.ros.org/en/humble/) ![Ubuntu](https://img.shields.io/badge/Ubuntu-24.04%20%7C%2022.04-e3781f?logo=ubuntu&logoColor=white)

Table of Contents

1. How it works

The model is designed to be an ordinary differential equation in state-space formulation. This state space model is solved using the Dormand-Prince scheme with a constant integration step size to enable real-time execution.

To achieve modularity, each vehicle model consists of 3 different submodels:

  • Vehicle Dynamics
  • Drivetrain
  • Steering Actuator

The interfaces connecting the different models are shown in the following figure:

<img src="doc/Model_Composition.drawio.svg" alt="model_composition", width="80%" style="margin-bottom: 30px;">

Furthermore, the vehicle dynamics models can incorporate submodels for modeling aerodynamics and tire behavior. However, these models are stateless, which distinguishes them from the 3 submodels mentioned above.

All of these 5 submodel components can be freely combined with each other, enabling a vast number of different vehicle implementations. With this design, our library is able to model a lot of different vehicles without modifying the source code, also enabling rapid extension and collaboration. New variations of any submodel can be created by just inheriting and implementing the corresponding base class.

The submodels are automatically combined at compile time (hence the heavy templating in this library) by concatenating their state vectors to form one big model. Since combination happens at compile time, the compiler is able to heavily optimize the model, making it highly efficient. Even the most complex model currently inside the repository achieves a full simulation time step (using Dormand-Prince~ode4 integration) with an execution time below 10 µs on our benchmark system (AMD Ryzen 9 7950X).

2. Compiling and Running the Model

The model and its different bindings (ROS 2, Python) can be compiled in multiple ways from source. First, ensure you meet the prerequisites in section 2.1.

Afterwards, refer to the respective subsection depending on how and what you want to compile.

2.1. Prerequisites

Before building, ensure you have the following installed:

  • OS: Ubuntu 22.04 or 24.04
  • Compiler: A modern C++ compiler (GCC/Clang) supporting C++20
  • Build Tools: CMake (>= 3.18), Make/Ninja
  • Libraries: Eigen3, Boost
  • (Optional) ROS 2: Humble or Jazzy (for ROS 2 nodes and Python bindings)
  • (Optional) Docker: If building Python bindings without a local ROS 2 installation

2.2. Clone Repository

First clone the repository using the command:

git clone --recursive https://github.com/TUMFTM/Open-Car-Dynamics.git

File truncated at 100 lines see the full file

No version for distro iron showing github. Known supported distros are highlighted in the buttons above.

Repository Summary

Description C++ Implementation of a Multibody Vehicle Dynamics Simulation
Checkout URI https://github.com/tumftm/open-car-dynamics.git
VCS Type git
VCS Version main
Last Updated 2026-02-24
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

README

ocd_logo

Open Car Dynamics provides a comprehensive, modular, and highly efficient implementation of a vehicle's dynamic behavior. Following the philosophy of modeling vehicle behavior "in as much detail as necessary, but as simply as possible," the library drastically simplifies parametrization and adaptation to custom requirements. Written in modern C++ for maximum performance, the library offers seamless integrations for Python and ROS 2. Furthermore, vehicle dynamics has been rigorously validated against data recorded with the AV21 autonomous racecar used in the Indy Autonomous Challenge to ensure simulation accuracy and reliability.

[![C++](https://img.shields.io/badge/C%2B%2B-20-1e6293?logo=c%2B%2B&logoColor=white)](https://isocpp.org/) [![CMake](https://img.shields.io/badge/CMake-3.18-1e6293?logo=cmake&logoColor=white)](https://cmake.org/) [![Docker](https://img.shields.io/badge/Container-docker-1e6293.svg?&logo=docker&logoColor=white)](https://www.docker.com/) [![Apache 2.0](https://img.shields.io/badge/License-Apache%202.0-1e6293.svg?&logo=apache&logoColor=white)](https://www.apache.org/licenses/LICENSE-2.0) [![DOI](https://img.shields.io/badge/DOI-10.1109%2FIV55156.2024.10588858-1e6293.svg?&logo=doi&logoColor=white)](https://doi.org/10.1109/IV55156.2024.10588858)
[![Python](https://img.shields.io/badge/Python-3.12%20%7C%203.10-e3781f?logo=python&logoColor=white)](https://www.python.org/) [![ROS 2](https://img.shields.io/badge/ROS_2-Humble%20%7C%20Jazzy-e3781f.svg?logo=ros&logoColor=white)](https://docs.ros.org/en/humble/) ![Ubuntu](https://img.shields.io/badge/Ubuntu-24.04%20%7C%2022.04-e3781f?logo=ubuntu&logoColor=white)

Table of Contents

1. How it works

The model is designed to be an ordinary differential equation in state-space formulation. This state space model is solved using the Dormand-Prince scheme with a constant integration step size to enable real-time execution.

To achieve modularity, each vehicle model consists of 3 different submodels:

  • Vehicle Dynamics
  • Drivetrain
  • Steering Actuator

The interfaces connecting the different models are shown in the following figure:

<img src="doc/Model_Composition.drawio.svg" alt="model_composition", width="80%" style="margin-bottom: 30px;">

Furthermore, the vehicle dynamics models can incorporate submodels for modeling aerodynamics and tire behavior. However, these models are stateless, which distinguishes them from the 3 submodels mentioned above.

All of these 5 submodel components can be freely combined with each other, enabling a vast number of different vehicle implementations. With this design, our library is able to model a lot of different vehicles without modifying the source code, also enabling rapid extension and collaboration. New variations of any submodel can be created by just inheriting and implementing the corresponding base class.

The submodels are automatically combined at compile time (hence the heavy templating in this library) by concatenating their state vectors to form one big model. Since combination happens at compile time, the compiler is able to heavily optimize the model, making it highly efficient. Even the most complex model currently inside the repository achieves a full simulation time step (using Dormand-Prince~ode4 integration) with an execution time below 10 µs on our benchmark system (AMD Ryzen 9 7950X).

2. Compiling and Running the Model

The model and its different bindings (ROS 2, Python) can be compiled in multiple ways from source. First, ensure you meet the prerequisites in section 2.1.

Afterwards, refer to the respective subsection depending on how and what you want to compile.

2.1. Prerequisites

Before building, ensure you have the following installed:

  • OS: Ubuntu 22.04 or 24.04
  • Compiler: A modern C++ compiler (GCC/Clang) supporting C++20
  • Build Tools: CMake (>= 3.18), Make/Ninja
  • Libraries: Eigen3, Boost
  • (Optional) ROS 2: Humble or Jazzy (for ROS 2 nodes and Python bindings)
  • (Optional) Docker: If building Python bindings without a local ROS 2 installation

2.2. Clone Repository

First clone the repository using the command:

git clone --recursive https://github.com/TUMFTM/Open-Car-Dynamics.git

File truncated at 100 lines see the full file

No version for distro melodic showing github. Known supported distros are highlighted in the buttons above.

Repository Summary

Description C++ Implementation of a Multibody Vehicle Dynamics Simulation
Checkout URI https://github.com/tumftm/open-car-dynamics.git
VCS Type git
VCS Version main
Last Updated 2026-02-24
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

README

ocd_logo

Open Car Dynamics provides a comprehensive, modular, and highly efficient implementation of a vehicle's dynamic behavior. Following the philosophy of modeling vehicle behavior "in as much detail as necessary, but as simply as possible," the library drastically simplifies parametrization and adaptation to custom requirements. Written in modern C++ for maximum performance, the library offers seamless integrations for Python and ROS 2. Furthermore, vehicle dynamics has been rigorously validated against data recorded with the AV21 autonomous racecar used in the Indy Autonomous Challenge to ensure simulation accuracy and reliability.

[![C++](https://img.shields.io/badge/C%2B%2B-20-1e6293?logo=c%2B%2B&logoColor=white)](https://isocpp.org/) [![CMake](https://img.shields.io/badge/CMake-3.18-1e6293?logo=cmake&logoColor=white)](https://cmake.org/) [![Docker](https://img.shields.io/badge/Container-docker-1e6293.svg?&logo=docker&logoColor=white)](https://www.docker.com/) [![Apache 2.0](https://img.shields.io/badge/License-Apache%202.0-1e6293.svg?&logo=apache&logoColor=white)](https://www.apache.org/licenses/LICENSE-2.0) [![DOI](https://img.shields.io/badge/DOI-10.1109%2FIV55156.2024.10588858-1e6293.svg?&logo=doi&logoColor=white)](https://doi.org/10.1109/IV55156.2024.10588858)
[![Python](https://img.shields.io/badge/Python-3.12%20%7C%203.10-e3781f?logo=python&logoColor=white)](https://www.python.org/) [![ROS 2](https://img.shields.io/badge/ROS_2-Humble%20%7C%20Jazzy-e3781f.svg?logo=ros&logoColor=white)](https://docs.ros.org/en/humble/) ![Ubuntu](https://img.shields.io/badge/Ubuntu-24.04%20%7C%2022.04-e3781f?logo=ubuntu&logoColor=white)

Table of Contents

1. How it works

The model is designed to be an ordinary differential equation in state-space formulation. This state space model is solved using the Dormand-Prince scheme with a constant integration step size to enable real-time execution.

To achieve modularity, each vehicle model consists of 3 different submodels:

  • Vehicle Dynamics
  • Drivetrain
  • Steering Actuator

The interfaces connecting the different models are shown in the following figure:

<img src="doc/Model_Composition.drawio.svg" alt="model_composition", width="80%" style="margin-bottom: 30px;">

Furthermore, the vehicle dynamics models can incorporate submodels for modeling aerodynamics and tire behavior. However, these models are stateless, which distinguishes them from the 3 submodels mentioned above.

All of these 5 submodel components can be freely combined with each other, enabling a vast number of different vehicle implementations. With this design, our library is able to model a lot of different vehicles without modifying the source code, also enabling rapid extension and collaboration. New variations of any submodel can be created by just inheriting and implementing the corresponding base class.

The submodels are automatically combined at compile time (hence the heavy templating in this library) by concatenating their state vectors to form one big model. Since combination happens at compile time, the compiler is able to heavily optimize the model, making it highly efficient. Even the most complex model currently inside the repository achieves a full simulation time step (using Dormand-Prince~ode4 integration) with an execution time below 10 µs on our benchmark system (AMD Ryzen 9 7950X).

2. Compiling and Running the Model

The model and its different bindings (ROS 2, Python) can be compiled in multiple ways from source. First, ensure you meet the prerequisites in section 2.1.

Afterwards, refer to the respective subsection depending on how and what you want to compile.

2.1. Prerequisites

Before building, ensure you have the following installed:

  • OS: Ubuntu 22.04 or 24.04
  • Compiler: A modern C++ compiler (GCC/Clang) supporting C++20
  • Build Tools: CMake (>= 3.18), Make/Ninja
  • Libraries: Eigen3, Boost
  • (Optional) ROS 2: Humble or Jazzy (for ROS 2 nodes and Python bindings)
  • (Optional) Docker: If building Python bindings without a local ROS 2 installation

2.2. Clone Repository

First clone the repository using the command:

git clone --recursive https://github.com/TUMFTM/Open-Car-Dynamics.git

File truncated at 100 lines see the full file

No version for distro noetic showing github. Known supported distros are highlighted in the buttons above.

Repository Summary

Description C++ Implementation of a Multibody Vehicle Dynamics Simulation
Checkout URI https://github.com/tumftm/open-car-dynamics.git
VCS Type git
VCS Version main
Last Updated 2026-02-24
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

README

ocd_logo

Open Car Dynamics provides a comprehensive, modular, and highly efficient implementation of a vehicle's dynamic behavior. Following the philosophy of modeling vehicle behavior "in as much detail as necessary, but as simply as possible," the library drastically simplifies parametrization and adaptation to custom requirements. Written in modern C++ for maximum performance, the library offers seamless integrations for Python and ROS 2. Furthermore, vehicle dynamics has been rigorously validated against data recorded with the AV21 autonomous racecar used in the Indy Autonomous Challenge to ensure simulation accuracy and reliability.

[![C++](https://img.shields.io/badge/C%2B%2B-20-1e6293?logo=c%2B%2B&logoColor=white)](https://isocpp.org/) [![CMake](https://img.shields.io/badge/CMake-3.18-1e6293?logo=cmake&logoColor=white)](https://cmake.org/) [![Docker](https://img.shields.io/badge/Container-docker-1e6293.svg?&logo=docker&logoColor=white)](https://www.docker.com/) [![Apache 2.0](https://img.shields.io/badge/License-Apache%202.0-1e6293.svg?&logo=apache&logoColor=white)](https://www.apache.org/licenses/LICENSE-2.0) [![DOI](https://img.shields.io/badge/DOI-10.1109%2FIV55156.2024.10588858-1e6293.svg?&logo=doi&logoColor=white)](https://doi.org/10.1109/IV55156.2024.10588858)
[![Python](https://img.shields.io/badge/Python-3.12%20%7C%203.10-e3781f?logo=python&logoColor=white)](https://www.python.org/) [![ROS 2](https://img.shields.io/badge/ROS_2-Humble%20%7C%20Jazzy-e3781f.svg?logo=ros&logoColor=white)](https://docs.ros.org/en/humble/) ![Ubuntu](https://img.shields.io/badge/Ubuntu-24.04%20%7C%2022.04-e3781f?logo=ubuntu&logoColor=white)

Table of Contents

1. How it works

The model is designed to be an ordinary differential equation in state-space formulation. This state space model is solved using the Dormand-Prince scheme with a constant integration step size to enable real-time execution.

To achieve modularity, each vehicle model consists of 3 different submodels:

  • Vehicle Dynamics
  • Drivetrain
  • Steering Actuator

The interfaces connecting the different models are shown in the following figure:

<img src="doc/Model_Composition.drawio.svg" alt="model_composition", width="80%" style="margin-bottom: 30px;">

Furthermore, the vehicle dynamics models can incorporate submodels for modeling aerodynamics and tire behavior. However, these models are stateless, which distinguishes them from the 3 submodels mentioned above.

All of these 5 submodel components can be freely combined with each other, enabling a vast number of different vehicle implementations. With this design, our library is able to model a lot of different vehicles without modifying the source code, also enabling rapid extension and collaboration. New variations of any submodel can be created by just inheriting and implementing the corresponding base class.

The submodels are automatically combined at compile time (hence the heavy templating in this library) by concatenating their state vectors to form one big model. Since combination happens at compile time, the compiler is able to heavily optimize the model, making it highly efficient. Even the most complex model currently inside the repository achieves a full simulation time step (using Dormand-Prince~ode4 integration) with an execution time below 10 µs on our benchmark system (AMD Ryzen 9 7950X).

2. Compiling and Running the Model

The model and its different bindings (ROS 2, Python) can be compiled in multiple ways from source. First, ensure you meet the prerequisites in section 2.1.

Afterwards, refer to the respective subsection depending on how and what you want to compile.

2.1. Prerequisites

Before building, ensure you have the following installed:

  • OS: Ubuntu 22.04 or 24.04
  • Compiler: A modern C++ compiler (GCC/Clang) supporting C++20
  • Build Tools: CMake (>= 3.18), Make/Ninja
  • Libraries: Eigen3, Boost
  • (Optional) ROS 2: Humble or Jazzy (for ROS 2 nodes and Python bindings)
  • (Optional) Docker: If building Python bindings without a local ROS 2 installation

2.2. Clone Repository

First clone the repository using the command:

git clone --recursive https://github.com/TUMFTM/Open-Car-Dynamics.git

File truncated at 100 lines see the full file