MAMBO logo MAMBO & the MAMBO Toolbox MAMBO logo

Sample project - Rolling Contact

To illustrate the significance of using initial conditions that satisfy the configuration constraints.

This Mambo project contains two non-stationary spheres and a stationary plane. The configuration of the non-stationary spheres relative to the world observer may be specified in three independent steps, namely
  1. Specify the position of the center of the first sphere.
  2. Specify the orientation of the first sphere.
  3. Specify the position of the second sphere on the surface of the first sphere.
The motion of the first sphere is constrained in such a way that it makes rolling contact with the plane at the location of the second sphere provided that tangential contact is established by the initial configuration.

rho: scaling factor corresponding to the radius of the first sphere.

q1, q2, and q3: coordinates of the center of the sphere in a coordinate system with origin at the reference point of the world observer and axes parallel to the basis vectors of the reference triad of the world observer.

q4, q5, and q6: 3-1-3 sequence of Euler angles representing the orientation of the first sphere relative to the reference triad of the world observer.

q7 and q8: spherical angle coordinates of the center of the second sphere in a coordinate system with origin at the center of the first sphere and axes parallel to the basis vectors of the reference triad of the first sphere.

Use initial conditions that do not satisfy the configuration constraint and explain the resulting motion.

rollingcontact.zip (zip file, 17 kb, December 30, 2012)
This zip archive contains MAMBO and the MAMBO toolbox source files to visualize the MAMBO project and regenerate visualization files using maple 16, mupad 5.6.0 (matlab R2011a), and mathematica 8.0 versions of the code found below.


Click here to expand/contract!
>Restart():

Click here to expand/contract!
>DeclareObservers(W,A):
>DeclarePoints(W,A,P):
>DeclareTriads(w,a):
>DefineObservers([W,W,w],[A,A,a]):
>DefinePoints([W,A,w,q1,q2,q3],[A,P,a,rho*sin(q7)*cos(q8),rho*sin(q7)*sin(q8),rho*cos(q7)]):
>DefineTriads(w,a,[q4,3],[q5,1],[q6,3]):
>DefineNeighbors(W,A):

Click here to expand/contract!
>DefineObjects(
   [W,'Block',xlength=rho*10,ylength=rho*10,zlength=rho/20,color=green],
   [A,'Sphere',radius=rho,color=red],
   [A,'Sphere',point=P,radius=rho/7,color=blue]):

Click here to expand/contract!
>DeclareStates(q1,q2,q3,q4,q5,q6,q7,q8):
>confconst1:=FindTranslation(W,P) &oo MakeTranslations(w,3)=0:
>confconst2:=MakeTranslations(a,rho*cos(q7)*cos(q8),rho*cos(q7)*sin(q8),-rho*sin(q7)) &oo MakeTranslations(w,3)=0:
>confconst3:=MakeTranslations(a,-rho*sin(q7)*sin(q8),rho*sin(q7)*cos(q8),0) &oo MakeTranslations(w,3)=0:
>motionconst1:=DiffTime(confconst1):
>motionconst2:=DiffTime(confconst2):
>motionconst3:=DiffTime(confconst3):
>linvel:=LinearVelocity(W,A):
>angvel:=AngularVelocity(w,a):
>motionconst4:=(linvel &++ (angvel &xx FindTranslation(A,P))) &oo MakeTranslations(w,1)=0:
>motionconst5:=(linvel &++ (angvel &xx FindTranslation(A,P))) &oo MakeTranslations(w,2)=0:
>kde:={seq(angvel &oo MakeTranslations(a,i)=cat(u,i+3),i=1..3),motionconst1,motionconst2,motionconst3,motionconst4,motionconst5}:

Click here to expand/contract!
>GeometryOutput(main=W,parameters=[rho],states=[q1,q2,q3,q4,q5,q6,q7,q8],checktree,checkargs,filename="rollingcontact.geo"):
>MotionOutput(ode=kde,states=[q1=0,q2=0,q3=1,q4=.6,q5=1.8,q6=-0.1,q7=7.624777961,q8=-7.753989756],parameters=[rho=1],insignals=[u4=cos(2t),u5=sin(t),u6=.4*cos(t)],checkargs,checksings,filename="rollingcontact.dyn");

Sample projects