This repository contains the technical artifacts of a case study on engineering a digital twin (DT) for adaptive cruise control (ACC) in autonomous vehicles (AV). The aim of the case study is to evaluate the suitability of the ISO 23247 reference architecture in automotive settings.
The RoboRacer (formerly F1Tenth) stack serves as the physical twin.
ROS packages with a _fe suffix correspond to the respective functional entity (FE) from the ISO 23247 reference architecture.
The corresponding publication, Engineering Automotive Digital Twins on Standardized Architectures: Lessons from a Case Study, is under review for the 2nd International Conference on Engineering Digital Twins (EDTconf 2025), co-hosted with MODELS.
Our demonstration video is available on YouTube.
The Digital Twin System is hosted across three devices: the Physical Twin Entity, the Digital Twin Entity, and the User Entity. An overview of this architecture, as well as its mapping to the ISO 23247 reference architecture, is below:
The implemented DT extends the functionality of ACC by providing the following:
- Data Monitoring: provides a virtual cockpit to the user
- Remote Management: allows high-level control of ACC remotely through a control panel
- Computation Offloading: the ACC computations are offloaded from the vehicle to the DT for stronger compute resources
3D visualization and the corresponding on-board camera stream:
Control panel:
The 1/10 scale vehicle is developed following the build provided by RoboRacer.
The project is developed and tested using the following software environments:
- Ubuntu 20.04
- ROS2 Foxy
- Nvidia Jetson JetPack 5.0
- MATLAB R2023a (required only to CodeGen new packages)
To install the remaining dependencies, run the following:
rosdep install -i --from-path src --rosdistro foxy
To build the ROS2 packages:
colcon build
The Digital Twin System (DTS) runs on three separate devices (PT Entity, DT Entity, and User Entity) connected to the same local Wi-Fi network.
Ensure that the f1thenth_system is set up and functional, as described in the RoboRacer Driver Stack Setup.
To establish communication between the three devices, note down the IP addresses of all three devices.
In src/communication_fe/config/params.yaml, update the ip fields with the correct IP addresses, as indicated by the comments.
On the PT Entity in the f1tenth_system workspace, run:
ros2 launch f1tenth_stack bringup_launch.py
On the PT Entity in this repo, run:
ros2 launch launchers pt_entity_launch.py
On the DT Entity, run:
ros2 launch launchers dt_entity_launch.py
On the User Entity, run:
ros2 launch launchers user_entity_launch.py
A single device can also host multiple entities.
To do so, replace the appropriate IP address with 127.0.0.1.
The on-board camera stream is currently not properly integrated with the User Entity due to bandwidth considerations. Future development will be conducted to compress and transmit it to the User Entity without incurring a significant latency increase.
The authors would like to thank McMaster's Centre for Software Certification (McSCert) team for their expertise and the RoboRacer hardware. The authors would also like to thank the maintainers of RoboRacer for an excellent 1/10 scale vehicle testbed.
This repository is released under the Apache 2.0 license as found in the LICENSE file.




