Getting started in Simbody
controlsdesignsimulationanalysisI'm testing Simbody for mechanical system modeling, here are some quick notes.
VisualStudio 2016 setup
I followed the x64 VisualStudio instructions, placing the final installation in C:\Simbody. After creating a new C/C++ Win32 Console Application and a blank source file (to access the C/C++ options), I entered these project properties:
Configuration Properties | VC++ Directories | Executable Directories = C:\Simbody\bin
Configuration Properties | C/C++ | All Options | Additional Include Directories = C:\Simbody\include
Configuration Properties | Linker | All Options | Additional Library Directories = C:\Simbody\lib
Configuration Properties | Linker | All Options | Additional Dependencies = libblas.lib;liblapack.lib; pthreadVC2_x64.lib;SimTKcommon.lib;SimTKmath.lib; SimTKsimbody.lib (all in the lib directory)
I'm no expert on VS; the above work for me.
A basic check of the dynamics
Let's model the elementary mass/spring/damper system and calculate the natural frequency and damping from the response:
See github and the many comments in verifyDynamics.cpp. Included there is a basic PositionReporter that writes positions into a given text file.
The values given in the figure allow calculation of the system's response, with some relevant parameters being:
$\omega_n = \sqrt{\frac{K_{spring}}{M}} = 2.2361$ [rad/s]
$\zeta = \frac{C_{damp}}{2 \sqrt{K_{spring}M}} = 0.0112 $ (underdamped)
$\omega_d = \omega_n \sqrt{1-\zeta^2} = 2.2359$ [rad/s]
Now, let's measure these same parameters from the simulated response. Running verifyDyanmics.cpp produces a csv file with the x position written out every 0.1sec. Plotting this in Matlab gives:
The dashpot causes the initial 10m/s velocity to decay exponentially, with the response envelope given by $A e^{-\zeta \omega_n t}$. If we measure the time between peaks or valleys, we find the damped time constant $t_d$, which is related to the damped natural frequency by:
$\omega_d = \frac{2\pi}{t_d} = 2.3639 $ versus $2.2359$ calculated above.
The above response also draws the envelope function, with the cyan giving the calculated envelope and the red dashed Matlab's 1D exponential estimate.
So, this was a very simple check on Simbody's physics and a good excuse to figure out how to easily move data out of Simbody.