Development of a bridge between C++ and Unity environment to visualize simulations
Isaksson, Otto (2025)
Diplomityö
Isaksson, Otto
2025
School of Energy Systems, Konetekniikka
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi-fe20251201113328
https://urn.fi/URN:NBN:fi-fe20251201113328
Tiivistelmä
This thesis looks at the development and testing of a communication link between a C++ simulation environment and the Unity game engine. This link will allow for real-time visualization of the dynamics of mechanical systems, with a focus on heavy machinery applications. C++ is great for doing physics-based simulations quickly, but Unity is a good choice for making interactive 3D visualizations. Many current solutions depend on ROS-based communication, are mostly for mobile robotics, or add latency through TCP-based middleware. This work fills the gap by creating lightweight, Windows-native integration methods that work with articulated heavy machinery models.
Two bridging architectures were developed and evaluated: a native plugin utilizing a C++ dynamic-link library (DLL) and a socket-based client-server interface employing TCP. A simplified pendulum model was used as a test case to check numerical accuracy, latency, and synchronization between simulation and rendering in a controlled way. Unity was able to call C++ functions directly with the DLL method, which allowed for stable real-time updates. The socket-based architecture made it easier to separate processes and made the system more flexible, but it also added latency because of buffering and thread management. Tämä diplomityö tarkastelee viestintäyhteyden kehittämistä ja testaamista C++-pohjaisen simulaatioympäristön ja Unity-pelimoottorin välillä. Tällainen yhteys mahdollistaa mekaanisten järjestelmien reaaliaikaisen visualisoinnin, erityisesti raskaan kaluston sovelluksissa. C++ soveltuu erinomaisesti laskennallisesti raskaiden fysiikkasimulaatioiden suorittamiseen, kun taas Unity tarjoaa tehokkaan alustan interaktiivisten 3D-visualisointien luomiseen.
Tutkimuksessa toteutettiin ja arvioitiin kaksi erilaista siltaratkaisua: C++-dynaamista linkkikirjastoa (DLL) hyödyntävä natiivi plugini sekä TCP:hen perustuva socket-pohjainen asiakas–palvelinrajapinta. Testitapauksena käytettiin yksinkertaistettua heilurimallia, jonka avulla voitiin hallitusti arvioida numeerista tarkkuutta, viivettä ja synkronointia simulaation ja visualisoinnin välillä. DLL-pohjaisessa ratkaisussa Unity pystyi kutsumaan C++-funktioita suoraan, mikä mahdollisti vakaan ja viiveettömän reaaliaikaisen päivityksen. Socket-pohjainen arkkitehtuuri tarjosi paremman prosessierottelun ja joustavuuden, mutta lisäsi viivettä puskuroinnin ja säikeidenhallinnan vuoksi.
Two bridging architectures were developed and evaluated: a native plugin utilizing a C++ dynamic-link library (DLL) and a socket-based client-server interface employing TCP. A simplified pendulum model was used as a test case to check numerical accuracy, latency, and synchronization between simulation and rendering in a controlled way. Unity was able to call C++ functions directly with the DLL method, which allowed for stable real-time updates. The socket-based architecture made it easier to separate processes and made the system more flexible, but it also added latency because of buffering and thread management.
Tutkimuksessa toteutettiin ja arvioitiin kaksi erilaista siltaratkaisua: C++-dynaamista linkkikirjastoa (DLL) hyödyntävä natiivi plugini sekä TCP:hen perustuva socket-pohjainen asiakas–palvelinrajapinta. Testitapauksena käytettiin yksinkertaistettua heilurimallia, jonka avulla voitiin hallitusti arvioida numeerista tarkkuutta, viivettä ja synkronointia simulaation ja visualisoinnin välillä. DLL-pohjaisessa ratkaisussa Unity pystyi kutsumaan C++-funktioita suoraan, mikä mahdollisti vakaan ja viiveettömän reaaliaikaisen päivityksen. Socket-pohjainen arkkitehtuuri tarjosi paremman prosessierottelun ja joustavuuden, mutta lisäsi viivettä puskuroinnin ja säikeidenhallinnan vuoksi.
