Here is the README located in the blend file that will inform any person who decides to continue this work -----------------------------------
Author: Kane Hadley
Date: August 29, 2011
File: shaker.blend
This is a readme outlining the design behind this simulation. The shaker program was
created to mimic Steve Berard's shaker plate code in dvc3 by using Binh Nguyen's dVC3D
timestepper code. There are two relevant scripts: partd and twod.
++++++++++twod: script that defines the behavior of the shaking plate.++++++++++++++++
The script twod is implemented to copy the motion of Steve's shaker plate which is
position controlled to generate the same or similar motion. The paper defines the X
and Y coordinates and the angled orientation, theta, of the plate to be:
theta = alpha * sin(omega * t)
X = yOffset * cos(theta + pi/2)
Y = yOffset * sin(theta + pi/2) - yOffset
t is the current time, and alpha and omega are two constants. I have not found a way
to easily and consistently control the time for timestep calculations so I have thrown
in a placeholder variable called own["time"] that all computations are based on for the
total time that has passed for the simulation. It is increased by the designated timestep
for each calculation.
Two more values, the X velocity and the Y velocity, are being calculated to try and fill
in the delta psi / delta time for the dynamics equation, but it is not apparent whether
this is effective or not and is implemented experimentally. Their equations are:
X_vel = -yOffset * cos(alpha * sin(omega * t)) * alpha * cos(omega * t) * omega
Y_vel = -yOffset * sin(alpha * sin(omega * t)) * alpha * cos(omega * t) * omega
For our simulation the Y axis serves as the X axis used in the equations and the Z axis
in our simulation serves as the Y axis in the equations.
++++++++++partd: script that defines the behavior of the moving part body.+++++++++++++
The script partd is designed to help the part behave the same as in Steve Berard's 2D
shaker plate program. Unfortunately the beta version of Blender that dVC3D is implemented
in does not allow locking the rotation of a body, but it does allow locking the
translation of a body. As such the entirety of this script is to ensure that the part
behaves in a 2D manner and does not rotate about either the Y or Z axis since it should
only rotate about the X axis (the axis coming out and going into the screen), and does
not let the part slide in the X direction due to rotations. As long as the time step is
0.01 or smaller it has been assumed (an assumption I make with no justification) that
the part will make relatively small adjustments that need to be dampened. As such
if the part attempts to rotate around an unrotatable axis it is nudged back into place.
The same is true if it attempts to translate in the X direction into or out of the
screen.
As in the script twod a variable (own["time"]) is used to keep track of the simulation
speed and ensures the part is updated at the same time the plate is.
+++++++++++++++++++++++++ Additional Information ++++++++++++++++++++++++++++++++++++++
The code that these scripts are based off of can be found on the svn repository in the
directory:
/var/svn/repo/dvc/trunk/dvc-2d/examples/shaker
in the file "PlatePositionController.h".
The equations being used can be found in the paper "Sources of Error in a Simulation of
Rigid Parts on a Vibrating Rigid Plate" Technical Report 08-10 on the robotics wiki:
http://www.cs.rpi.edu/twiki/pub/RoboticsWeb/LabPublications/BNATtr08.pdf
--
KaneHadley - 2011-08-30