This repo is an implementation of Exact 3D Path Generation via 3D Cam-Linkage Mechanisms [Cheng et al. 2022]. If you have any problems when using this code, you can contact me any time through chengyj@mail.ustc.edu.cn
If you make use of this repo in your scientific work, please cite our paper. For your convenience, you can use the following bibtex snippet:
@article {Cheng-2022-3DCamLinkage,
author = {Yingjie Cheng and Peng Song and Yukun Lu and Wen Jie Jeremy Chew and Ligang Liu},
title = {Exact 3D Path Generation via 3D Cam-Linkage Mechanisms},
journal = {ACM Transactions on Graphics (SIGGRAPH Asia 2022)},
volume = {41},
number = {6},
pages = {225:1 -- 225:13},
year = {2022}}
This repo presents a computational approach of designing a cam-linkage mechanism to make a point exactly move along a prescribed 3D path, driven by a single actuator.
We implemented our computational design tool in C++ and libigl
[Jacobson et al. 2018] on a desktop computer with 3.6 GHz 8-Core Intel processor and 16 GB RAM.
Our code can be ran on MacOS and Unbuntu (Linux) system. First clone the repository, run CMake to generate Makefiles or CMake/Visual Studio project files, and the rest should just work automatically.
- MacOS and Ubuntu(Linux):
cd [current folder path]
mkdir build
cd build
cmake ..
make
It's better to build it with release
because of CGAL.
This should find and build the dependencies and create a SpatialLinkages_rMain
binary.
- Windows: currently unavailable.
The control panel is shown below. There are 4 components in the control panel:
Optimization Process, I/O files, Operation Control, Render Control.
-
Read Input Curve
Read an input curve from folder/data/InputCurves
Optimization
Optimize a mechanism to realize the input curve. -
Read CamLinkage
Our program can readmats.dat
files from folder/data/Demo
-
Stop Motion
/Restart Motion
Interruption or continuation of movementMotion Speed
Adjust the motion velocity -
Control the object visualization state.
You can show the demo by clicking Read Camlinkage
, importing any mats.dat
file from the folder /data/Demo
.
Following is an example about tennisCurve
:
These instructions give an example to you of how to use our code to generate a cam-linkage mechanism by yourself.
Import any input curve file by clicking Read Input Curve
button.
Click the Optimization
button. It would cost about an hour! Break for a cup of coffee.
Use Restart Motion
,Stop Motion
,Motion Speed
to control the movement. Use mouse to adjust the camera view.
We thank the reviewers for their valuable comments, Ke Chen for proofreading the paper, and Robert Ferréol for providing equations of some input parametric curves. This work was supported by the SUTD Start-up Research Grant (Number: SRG ISTD 2019 148), and the National Natural Science Foundation of China (62025207)