High-performance optical fabrication simulation based on the Position-Velocity-Time (PVT) motion control model.
This repository provides a PVT-based, fast velocity scheduler and simulator for the control of stages in optical fabrication. The core modules are listed as follows. PVT describes the motion as 3rd order polynomials as
MATLAB module is provided as a fast simulator when the problem size is small. It is easy to use and the simulation animation can be saved as a video. But this takes unreasonablly long time as the problem size grows.
C++ module is necessary if the number of dwell points is large and the demanded simulation grid is dense. It relies on paralle computing and high-performance math libraries.
-
pvtengine: the implementation of the PVT-based scheduler and simulator algorithms
- Scheduler: given
$p_{i}$ and$t_{i}$ , calculate$v_{i}$ and$a_{i}$ ,$b_{i}$ ,$c_{i}$ ,$d_{i}$ via optimization. - Sampler: re-sample the scheduled PVTs to prepare for more precise material removal estimation.
- Simulator: given a Tool Influence Function (TIF) and the scheduled PVT, simulate the material removal process.
- Scheduler: given
- unittest: test the engine using Google test.
- pvtapp: a UI application provided to show the animation of the simulation in real time.
- Intel Math Kernel Library (MKL): using BLAS and LAPACK rountines optimized on Intel processors. Eigen below is also using MKL.
- Eigen: for convenient matrix and vector manipulations.
- qpOASES: for the QP solver used in the velocity optimization. A Visual Studio 2022, dynamically linked version is also available at TWANG006/qpOASES.
- OSQP-CPP: an alternative QP solver to qpOASES that is a wrapper of the OSQP. The speed is faster than qpOASES. But both qpOASES and OSQP are less accurate and slower than MATLAB's QP solver. So if you have MATLAB, you can make a shared MATLAB session by
matlab.engine.shareEngine('engine_name')
then use it in the given C++ PVT engine. - ABSL: required by OSQP-CPP.
- HDF5: for I/O.
- QT6: for GUI, which is optional.
- QCustomPlot: for plotting and anmiation.
- Windows + Visual Studio 2022: this is the default configuration that can be directly used, if the following 3rd-party libraries are downloaded and the system environmental variables are set.
-
$(EIGEN_DIR)
: e.g.D:\Codes\Source\3rds\eigen-3.4.0\
, this can be downloaded from Eigen -
$(MATLAB_ROOT)
: e.g.C:\Program Files\MATLAB\R2018a\
- The following libraries can be directly download here, which have been compiled using Visual Studio 2022.
-
$(HDF5_DIR_64)
: e.g.D:\Codes\Source\3rds\HDF5\1.12.2\
-
$(ABSL_ROOT)
: e.g.D:\Codes\Source\3rds\absl\
-
$(QPOASES_DIR)
: e.g.D:\Codes\Source\3rds\qpOASES\
-
$(OSQP_CPP_ROOT)
: e.g.D:\Codes\Source\3rds\osqp-cpp\
-
$(OSQP_ROOT)
: e.g.D:\Codes\Source\3rds\osqp\
-
- Mac OS: TODO with CMake
- Linux: TODO with CMake
Lei HUANG |
Tianyi Wang |
Xiaolong Ke |
GHVipender |
[1] Tianyi Wang, Xiaolong Ke, Lei Huang, Vipender Negi, Heejoo Choi, Weslin Pullen, Daewook Kim, Yi Zhu, Mourad Idir, "Computer-controlled finishing with a novel position-velocity-time modulated velocity scheduler", (2022), Journal of Manufacturing Processes, peer review.
[2] Zhou, L., Xie, X., Dai, Y., Jiao, C., & Li, S. (2009). Realization of velocity mode in flat optics machining using ion beam. J. Mech. Eng, 45(7), 152-156.