Skip to content
LIBRARY
PlanarMechanics.examples.TwoTrackModelTest.md

PlanarMechanics.examples.TwoTrackModelTest

A double track model of a car.

Usage

MultibodyComponents.PlanarMechanics.examples.TwoTrackModelTest()

Behavior

[connect(inertia+splinea,wheelJoint1+flangea)connect(inertia3+splinea,wheelJoint4+flangea)connect(body2+framea,wheelJoint4+framea,rightTrail+framea)connect(body+framea,wheelJoint1+framea,leftTrail+frameb)connect(pulse+y,torque+tau)connect(rightTrail+frameb,revolute+framea)connect(revolute2+flangea,revolute+flangea,torque+spline)connect(fixedTranslation5+framea,revolute+frameb)connect(fixedTranslation5+frameb,fixedTranslation4+frameb)connect(fixedTranslation1+frameb,fixedTranslation4+frameb)connect(wheelJoint3+framea,fixedTranslation3+framea)connect(wheelJoint2+framea,fixedTranslation2+framea)connect(wheelJoint3+flangea,inertia2+splinea)connect(wheelJoint2+flangea,inertia1+splinea)connect(fixedTranslation2+frameb,fixedTranslation3+frameb,fixedTranslation1+framea,body1+framea)connect(differentialGear+flangeleft,wheelJoint2+flangea)connect(differentialGear+flangeright,wheelJoint3+flangea)connect(engineTorque+spline,differentialGear+flangeb)connect(constantTorque+y,engineTorque+tau)connect(dynamicload+y,wheelJoint1+dynamicLoad,wheelJoint2+dynamicLoad,wheelJoint4+dynamicLoad,wheelJoint3+dynamicLoad)connect(fixed1+spline,torque+support)connect(fixed+spline,engineTorque+support)connect(revolute2+frameb,fixedTranslation4+framea)connect(leftTrail+framea,revolute2+framea)world.frameb.x(t)=0world.frameb.y(t)=0world.frameb.phi(t)=0connect(frameb,framevis+frame_a)world.framevis.phi(t)=world.framevis.frame_a.phi(t)world.framevis.x_shape.r(t)=arrayliteral([3],world.framevis.frame_a.x(t),world.framevis.frame_a.y(t),world.framevis.z_position)world.framevis.x_shape.R(t)=arrayliteral([33],cos(world.framevis.phi(t)),sin(world.framevis.phi(t)),0,sin(world.framevis.phi(t)),cos(world.framevis.phi(t)),0,0,0,1)world.framevis.x_shape.r_shape(t)=[000]world.framevis.x_shape.length_direction(t)=[100]world.framevis.x_shape.width_direction(t)=[001]world.framevis.x_shape.length(t)=world.framevis.axis_lengthworld.framevis.x_shape.width(t)=2world.framevis.axis_radiusworld.framevis.x_shape.height(t)=2world.framevis.axis_radiusworld.framevis.y_shape.r(t)=arrayliteral([3],world.framevis.frame_a.x(t),world.framevis.frame_a.y(t),world.framevis.z_position)world.framevis.y_shape.R(t)=arrayliteral([33],cos(world.framevis.phi(t)),sin(world.framevis.phi(t)),0,sin(world.framevis.phi(t)),cos(world.framevis.phi(t)),0,0,0,1)world.framevis.y_shape.r_shape(t)=[000]world.framevis.y_shape.length_direction(t)=[010]world.framevis.y_shape.width_direction(t)=[001]world.framevis.y_shape.length(t)=world.framevis.axis_lengthworld.framevis.y_shape.width(t)=2world.framevis.axis_radiusworld.framevis.y_shape.height(t)=2world.framevis.axis_radiusworld.framevis.z_shape.r(t)=arrayliteral([3],world.framevis.frame_a.x(t),world.framevis.frame_a.y(t),world.framevis.z_position)world.framevis.z_shape.R(t)=arrayliteral([33],cos(world.framevis.phi(t)),sin(world.framevis.phi(t)),0,sin(world.framevis.phi(t)),cos(world.framevis.phi(t)),0,0,0,1)world.framevis.z_shape.r_shape(t)=[000]world.framevis.z_shape.length_direction(t)=[001]world.framevis.z_shape.width_direction(t)=[100]world.framevis.z_shape.length(t)=world.framevis.axis_lengthworld.framevis.z_shape.width(t)=2world.framevis.axis_radiusworld.framevis.z_shape.height(t)=2world.framevis.axis_radiusbody.r(t)=arrayliteral([2],body.framea.x(t),body.framea.y(t))body.v(t)=dbody.r(t)dtbody.phi(t)=body.framea.phi(t)body.w(t)=dbody.phi(t)dtbody.a(t)=dbody.v(t)dtbody.alpha(t)=dbody.w(t)dtbody.f(t)=arrayliteral([2],body.framea.fx(t),body.framea.fy(t))body.f(t)+arrayliteral([2],body.mgn2d1,body.mgn2d2)=body.mbody.a(t)body.Ibody.alpha(t)=body.framea.tau(t)body.shape.r(t)=arrayliteral([3],body.framea.x(t),body.framea.y(t),body.zposition)body.shape.R(t)=arrayliteral([33],cos(body.phi(t)),sin(body.phi(t)),0,sin(body.phi(t)),cos(body.phi(t)),0,0,0,1)body.shape.rshape(t)=[000]body.shape.lengthdirection(t)=[001]body.shape.widthdirection(t)=[100]body.shape.length(t)=2body.radiusbody.shape.width(t)=2body.radiusbody.shape.height(t)=2body.radiusbody1.r(t)=arrayliteral([2],body1.framea.x(t),body1.framea.y(t))body1.v(t)=dbody1.r(t)dtbody1.phi(t)=body1.framea.phi(t)body1.w(t)=dbody1.phi(t)dtbody1.a(t)=dbody1.v(t)dtbody1.alpha(t)=dbody1.w(t)dtbody1.f(t)=arrayliteral([2],body1.framea.fx(t),body1.framea.fy(t))arrayliteral([2],body1.mgn2d1,body1.mgn2d2)+body1.f(t)=body1.mbody1.a(t)body1.Ibody1.alpha(t)=body1.framea.tau(t)body1.shape.r(t)=arrayliteral([3],body1.framea.x(t),body1.framea.y(t),body1.zposition)body1.shape.R(t)=arrayliteral([33],cos(body1.phi(t)),sin(body1.phi(t)),0,sin(body1.phi(t)),cos(body1.phi(t)),0,0,0,1)body1.shape.rshape(t)=[000]body1.shape.lengthdirection(t)=[001]body1.shape.widthdirection(t)=[100]body1.shape.length(t)=2body1.radiusbody1.shape.width(t)=2body1.radiusbody1.shape.height(t)=2body1.radiusbody2.r(t)=arrayliteral([2],body2.framea.x(t),body2.framea.y(t))body2.v(t)=dbody2.r(t)dtbody2.phi(t)=body2.framea.phi(t)body2.w(t)=dbody2.phi(t)dtbody2.a(t)=dbody2.v(t)dtbody2.alpha(t)=dbody2.w(t)dtbody2.f(t)=arrayliteral([2],body2.framea.fx(t),body2.framea.fy(t))arrayliteral([2],body2.mgn2d1,body2.mgn2d2)+body2.f(t)=body2.mbody2.a(t)body2.Ibody2.alpha(t)=body2.framea.tau(t)body2.shape.r(t)=arrayliteral([3],body2.framea.x(t),body2.framea.y(t),body2.zposition)body2.shape.R(t)=arrayliteral([33],cos(body2.phi(t)),sin(body2.phi(t)),0,sin(body2.phi(t)),cos(body2.phi(t)),0,0,0,1)body2.shape.rshape(t)=[000]body2.shape.lengthdirection(t)=[001]body2.shape.widthdirection(t)=[100]body2.shape.length(t)=2body2.radiusbody2.shape.width(t)=2body2.radiusbody2.shape.height(t)=2body2.radiuswheelJoint1.e0(t)=arrayliteral([22],cos(wheelJoint1.framea.phi(t)),sin(wheelJoint1.framea.phi(t)),sin(wheelJoint1.framea.phi(t)),cos(wheelJoint1.framea.phi(t)))wheelJoint1.radjoint(wheelJoint1.r)wheelJoint1.rwheelJoint1.vvec(t)=arrayliteral([2],dwheelJoint1.framea.x(t)dt,dwheelJoint1.framea.y(t)dt)wheelJoint1.phiroll(t)=wheelJoint1.flangea.phi(t)wheelJoint1.wroll(t)=dwheelJoint1.phiroll(t)dtwheelJoint1.vlong(t)=dot(wheelJoint1.vvec(t),wheelJoint1.e0(t))wheelJoint1.vlat(t)=wheelJoint1.e01(t)wheelJoint1.vvec_2(t)wheelJoint1.e02(t)wheelJoint1.vvec_1(t)wheelJoint1.vslip_lat(t)=wheelJoint1.vlat(t)wheelJoint1.vslip_long(t)=wheelJoint1.vlong(t)wheelJoint1.radiuswheelJoint1.wroll(t)wheelJoint1.vslip(t)=0.0001+(wheelJoint1.vslip_long(t))2+(wheelJoint1.vslip_lat(t))20=wheelJoint1.flangea.tau(t)+wheelJoint1.radiuswheelJoint1.flong(t)wheelJoint1.framea.tau(t)=0wheelJoint1.vAdhesion(t)=max(wheelJoint1.vAdhesionmin,wheelJoint1.sAdhesion|wheelJoint1.radiuswheelJoint1.wroll(t)|)wheelJoint1.vSlide(t)=max(wheelJoint1.vSlidemin,wheelJoint1.sSlide|wheelJoint1.radiuswheelJoint1.wroll(t)|)wheelJoint1.fN(t)=max(0,wheelJoint1.N+wheelJoint1.dynamicLoad(t))wheelJoint1.f(t)=wheelJoint1.fN(t)limitS_triple(wheelJoint1.vAdhesion(t),wheelJoint1.vSlide(t),wheelJoint1.muA,wheelJoint1.muS,wheelJoint1.vslip(t))wheelJoint1.flong(t)=wheelJoint1.vslip_long(t)wheelJoint1.f(t)wheelJoint1.vslip(t)wheelJoint1.flat(t)=wheelJoint1.vslip_lat(t)wheelJoint1.f(t)wheelJoint1.vslip(t)wheelJoint1.flong(t)=wheelJoint1.framea.fx(t)wheelJoint1.e01(t)+wheelJoint1.e02(t)wheelJoint1.framea.fy(t)wheelJoint1.flat(t)=wheelJoint1.framea.fx(t)wheelJoint1.e02(t)+wheelJoint1.e01(t)wheelJoint1.framea.fy(t)wheelJoint1.tireshape.r(t)=arrayliteral([3],wheelJoint1.framea.x(t),wheelJoint1.framea.y(t),wheelJoint1.zposition)wheelJoint1.tireshape.R(t)=arrayliteral([33],1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0)wheelJoint1.tireshape.r_shape(t)=arrayliteral([3],0.03wheelJoint1.e02(t),0.03wheelJoint1.e01(t),0.0)wheelJoint1.tireshape.length_direction(t)=arrayliteral([3],wheelJoint1.e02(t),wheelJoint1.e01(t),0)wheelJoint1.tireshape.width_direction(t)=[001]wheelJoint1.tireshape.length(t)=wheelJoint1.wheelwidthwheelJoint1.tireshape.width(t)=2wheelJoint1.radiuswheelJoint1.tireshape.height(t)=2wheelJoint1.radiuswheelJoint1.rim1shape.r(t)=arrayliteral([3],wheelJoint1.framea.x(t),wheelJoint1.framea.y(t),wheelJoint1.zposition)wheelJoint1.rim1shape.R(t)=arrayliteral([33],wheelJoint1.e02(t)2+(1wheelJoint1.e02(t)2)cos(wheelJoint1.phiroll(t)),wheelJoint1.e01(t)wheelJoint1.e02(t)+wheelJoint1.e01(t)wheelJoint1.e02(t)cos(wheelJoint1.phiroll(t)),wheelJoint1.e01(t)sin(wheelJoint1.phiroll(t)),wheelJoint1.e01(t)wheelJoint1.e02(t)+wheelJoint1.e01(t)wheelJoint1.e02(t)cos(wheelJoint1.phiroll(t)),wheelJoint1.e01(t)2+(1wheelJoint1.e01(t)2)cos(wheelJoint1.phiroll(t)),wheelJoint1.e02(t)sin(wheelJoint1.phiroll(t)),wheelJoint1.e01(t)sin(wheelJoint1.phiroll(t)),wheelJoint1.e02(t)sin(wheelJoint1.phiroll(t)),cos(wheelJoint1.phiroll(t)))wheelJoint1.rim1shape.r_shape(t)=arrayliteral([3],0,0,wheelJoint1.radius)wheelJoint1.rim1shape.length_direction(t)=[001]wheelJoint1.rim1shape.width_direction(t)=[100]wheelJoint1.rim1shape.length(t)=2wheelJoint1.radiuswheelJoint1.rim1shape.width(t)=wheelJoint1.rimdiameterwheelJoint1.rim1shape.height(t)=wheelJoint1.rimdiameterwheelJoint1.rim2shape.r(t)=arrayliteral([3],wheelJoint1.framea.x(t),wheelJoint1.framea.y(t),wheelJoint1.zposition)wheelJoint1.rim2shape.R(t)=arrayliteral([33],wheelJoint1.e02(t)2+cos(1.570796326794895wheelJoint1.phiroll(t))(1wheelJoint1.e02(t)2),wheelJoint1.e01(t)wheelJoint1.e02(t)+cos(1.570796326794895wheelJoint1.phiroll(t))wheelJoint1.e01(t)wheelJoint1.e02(t),sin(1.570796326794895wheelJoint1.phiroll(t))wheelJoint1.e01(t),wheelJoint1.e01(t)wheelJoint1.e02(t)+cos(1.570796326794895wheelJoint1.phiroll(t))wheelJoint1.e01(t)wheelJoint1.e02(t),wheelJoint1.e01(t)2+cos(1.570796326794895wheelJoint1.phiroll(t))(1wheelJoint1.e01(t)2),sin(1.570796326794895wheelJoint1.phiroll(t))wheelJoint1.e02(t),sin(1.570796326794895wheelJoint1.phiroll(t))wheelJoint1.e01(t),sin(1.570796326794895wheelJoint1.phiroll(t))wheelJoint1.e02(t),cos(1.570796326794895wheelJoint1.phiroll(t)))wheelJoint1.rim2shape.r_shape(t)=arrayliteral([3],0,0,wheelJoint1.radius)wheelJoint1.rim2shape.length_direction(t)=[001]wheelJoint1.rim2shape.width_direction(t)=[100]wheelJoint1.rim2shape.length(t)=2wheelJoint1.radiuswheelJoint1.rim2shape.width(t)=wheelJoint1.rimdiameterwheelJoint1.rim2shape.height(t)=wheelJoint1.rimdiameterwheelJoint2.e0(t)=arrayliteral([22],cos(wheelJoint2.framea.phi(t)),sin(wheelJoint2.framea.phi(t)),sin(wheelJoint2.framea.phi(t)),cos(wheelJoint2.framea.phi(t)))wheelJoint2.radjoint(wheelJoint2.r)wheelJoint2.rwheelJoint2.vvec(t)=arrayliteral([2],dwheelJoint2.framea.x(t)dt,dwheelJoint2.framea.y(t)dt)wheelJoint2.phiroll(t)=wheelJoint2.flangea.phi(t)wheelJoint2.wroll(t)=dwheelJoint2.phiroll(t)dtwheelJoint2.vlong(t)=dot(wheelJoint2.vvec(t),wheelJoint2.e0(t))wheelJoint2.vlat(t)=wheelJoint2.vvec_1(t)wheelJoint2.e02(t)+wheelJoint2.vvec_2(t)wheelJoint2.e01(t)wheelJoint2.vslip_lat(t)=wheelJoint2.vlat(t)wheelJoint2.vslip_long(t)=wheelJoint2.vlong(t)wheelJoint2.radiuswheelJoint2.wroll(t)wheelJoint2.vslip(t)=0.0001+(wheelJoint2.vslip_lat(t))2+(wheelJoint2.vslip_long(t))20=wheelJoint2.flangea.tau(t)+wheelJoint2.radiuswheelJoint2.flong(t)wheelJoint2.framea.tau(t)=0wheelJoint2.vAdhesion(t)=max(wheelJoint2.vAdhesionmin,wheelJoint2.sAdhesion|wheelJoint2.radiuswheelJoint2.wroll(t)|)wheelJoint2.vSlide(t)=max(wheelJoint2.vSlidemin,wheelJoint2.sSlide|wheelJoint2.radiuswheelJoint2.wroll(t)|)wheelJoint2.fN(t)=max(0,wheelJoint2.N+wheelJoint2.dynamicLoad(t))wheelJoint2.f(t)=wheelJoint2.fN(t)limitS_triple(wheelJoint2.vAdhesion(t),wheelJoint2.vSlide(t),wheelJoint2.muA,wheelJoint2.muS,wheelJoint2.vslip(t))wheelJoint2.flong(t)=wheelJoint2.f(t)wheelJoint2.vslip_long(t)wheelJoint2.vslip(t)wheelJoint2.flat(t)=wheelJoint2.f(t)wheelJoint2.vslip_lat(t)wheelJoint2.vslip(t)wheelJoint2.flong(t)=wheelJoint2.framea.fx(t)wheelJoint2.e01(t)+wheelJoint2.framea.fy(t)wheelJoint2.e02(t)wheelJoint2.flat(t)=wheelJoint2.framea.fx(t)wheelJoint2.e02(t)+wheelJoint2.framea.fy(t)wheelJoint2.e01(t)wheelJoint2.tireshape.r(t)=arrayliteral([3],wheelJoint2.framea.x(t),wheelJoint2.framea.y(t),wheelJoint2.zposition)wheelJoint2.tireshape.R(t)=arrayliteral([33],1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0)wheelJoint2.tireshape.r_shape(t)=arrayliteral([3],0.03wheelJoint2.e02(t),0.03wheelJoint2.e01(t),0.0)wheelJoint2.tireshape.length_direction(t)=arrayliteral([3],wheelJoint2.e02(t),wheelJoint2.e01(t),0)wheelJoint2.tireshape.width_direction(t)=[001]wheelJoint2.tireshape.length(t)=wheelJoint2.wheelwidthwheelJoint2.tireshape.width(t)=2wheelJoint2.radiuswheelJoint2.tireshape.height(t)=2wheelJoint2.radiuswheelJoint2.rim1shape.r(t)=arrayliteral([3],wheelJoint2.framea.x(t),wheelJoint2.framea.y(t),wheelJoint2.zposition)wheelJoint2.rim1shape.R(t)=arrayliteral([33],wheelJoint2.e02(t)2+cos(wheelJoint2.phiroll(t))(1wheelJoint2.e02(t)2),wheelJoint2.e01(t)wheelJoint2.e02(t)+cos(wheelJoint2.phiroll(t))wheelJoint2.e01(t)wheelJoint2.e02(t),sin(wheelJoint2.phiroll(t))wheelJoint2.e01(t),wheelJoint2.e01(t)wheelJoint2.e02(t)+cos(wheelJoint2.phiroll(t))wheelJoint2.e01(t)wheelJoint2.e02(t),wheelJoint2.e01(t)2+cos(wheelJoint2.phiroll(t))(1wheelJoint2.e01(t)2),sin(wheelJoint2.phiroll(t))wheelJoint2.e02(t),sin(wheelJoint2.phiroll(t))wheelJoint2.e01(t),sin(wheelJoint2.phiroll(t))wheelJoint2.e02(t),cos(wheelJoint2.phiroll(t)))wheelJoint2.rim1shape.r_shape(t)=arrayliteral([3],0,0,wheelJoint2.radius)wheelJoint2.rim1shape.length_direction(t)=[001]wheelJoint2.rim1shape.width_direction(t)=[100]wheelJoint2.rim1shape.length(t)=2wheelJoint2.radiuswheelJoint2.rim1shape.width(t)=wheelJoint2.rimdiameterwheelJoint2.rim1shape.height(t)=wheelJoint2.rimdiameterwheelJoint2.rim2shape.r(t)=arrayliteral([3],wheelJoint2.framea.x(t),wheelJoint2.framea.y(t),wheelJoint2.zposition)wheelJoint2.rim2shape.R(t)=arrayliteral([33],wheelJoint2.e02(t)2+cos(1.570796326794895wheelJoint2.phiroll(t))(1wheelJoint2.e02(t)2),wheelJoint2.e01(t)wheelJoint2.e02(t)+cos(1.570796326794895wheelJoint2.phiroll(t))wheelJoint2.e01(t)wheelJoint2.e02(t),sin(1.570796326794895wheelJoint2.phiroll(t))wheelJoint2.e01(t),wheelJoint2.e01(t)wheelJoint2.e02(t)+cos(1.570796326794895wheelJoint2.phiroll(t))wheelJoint2.e01(t)wheelJoint2.e02(t),wheelJoint2.e01(t)2+cos(1.570796326794895wheelJoint2.phiroll(t))(1wheelJoint2.e01(t)2),sin(1.570796326794895wheelJoint2.phiroll(t))wheelJoint2.e02(t),sin(1.570796326794895wheelJoint2.phiroll(t))wheelJoint2.e01(t),sin(1.570796326794895wheelJoint2.phiroll(t))wheelJoint2.e02(t),cos(1.570796326794895wheelJoint2.phiroll(t)))wheelJoint2.rim2shape.r_shape(t)=arrayliteral([3],0,0,wheelJoint2.radius)wheelJoint2.rim2shape.length_direction(t)=[001]wheelJoint2.rim2shape.width_direction(t)=[100]wheelJoint2.rim2shape.length(t)=2wheelJoint2.radiuswheelJoint2.rim2shape.width(t)=wheelJoint2.rimdiameterwheelJoint2.rim2shape.height(t)=wheelJoint2.rimdiameterwheelJoint3.e0(t)=arrayliteral([22],cos(wheelJoint3.framea.phi(t)),sin(wheelJoint3.framea.phi(t)),sin(wheelJoint3.framea.phi(t)),cos(wheelJoint3.framea.phi(t)))wheelJoint3.radjoint(wheelJoint3.r)wheelJoint3.rwheelJoint3.vvec(t)=arrayliteral([2],dwheelJoint3.framea.x(t)dt,dwheelJoint3.framea.y(t)dt)wheelJoint3.phiroll(t)=wheelJoint3.flangea.phi(t)wheelJoint3.wroll(t)=dwheelJoint3.phiroll(t)dtwheelJoint3.vlong(t)=dot(wheelJoint3.vvec(t),wheelJoint3.e0(t))wheelJoint3.vlat(t)=wheelJoint3.e01(t)wheelJoint3.vvec_2(t)wheelJoint3.e02(t)wheelJoint3.vvec_1(t)wheelJoint3.vslip_lat(t)=wheelJoint3.vlat(t)wheelJoint3.vslip_long(t)=wheelJoint3.vlong(t)wheelJoint3.radiuswheelJoint3.wroll(t)wheelJoint3.vslip(t)=0.0001+(wheelJoint3.vslip_long(t))2+(wheelJoint3.vslip_lat(t))20=wheelJoint3.flangea.tau(t)+wheelJoint3.radiuswheelJoint3.flong(t)wheelJoint3.framea.tau(t)=0wheelJoint3.vAdhesion(t)=max(wheelJoint3.vAdhesionmin,wheelJoint3.sAdhesion|wheelJoint3.radiuswheelJoint3.wroll(t)|)wheelJoint3.vSlide(t)=max(wheelJoint3.vSlidemin,wheelJoint3.sSlide|wheelJoint3.radiuswheelJoint3.wroll(t)|)wheelJoint3.fN(t)=max(0,wheelJoint3.N+wheelJoint3.dynamicLoad(t))wheelJoint3.f(t)=limitS_triple(wheelJoint3.vAdhesion(t),wheelJoint3.vSlide(t),wheelJoint3.muA,wheelJoint3.muS,wheelJoint3.vslip(t))wheelJoint3.fN(t)wheelJoint3.flong(t)=wheelJoint3.f(t)wheelJoint3.vslip_long(t)wheelJoint3.vslip(t)wheelJoint3.flat(t)=wheelJoint3.f(t)wheelJoint3.vslip_lat(t)wheelJoint3.vslip(t)wheelJoint3.flong(t)=wheelJoint3.framea.fx(t)wheelJoint3.e01(t)+wheelJoint3.e02(t)wheelJoint3.framea.fy(t)wheelJoint3.flat(t)=wheelJoint3.framea.fx(t)wheelJoint3.e02(t)+wheelJoint3.e01(t)wheelJoint3.framea.fy(t)wheelJoint3.tireshape.r(t)=arrayliteral([3],wheelJoint3.framea.x(t),wheelJoint3.framea.y(t),wheelJoint3.zposition)wheelJoint3.tireshape.R(t)=arrayliteral([33],1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0)wheelJoint3.tireshape.r_shape(t)=arrayliteral([3],0.03wheelJoint3.e02(t),0.03wheelJoint3.e01(t),0.0)wheelJoint3.tireshape.length_direction(t)=arrayliteral([3],wheelJoint3.e02(t),wheelJoint3.e01(t),0)wheelJoint3.tireshape.width_direction(t)=[001]wheelJoint3.tireshape.length(t)=wheelJoint3.wheelwidthwheelJoint3.tireshape.width(t)=2wheelJoint3.radiuswheelJoint3.tireshape.height(t)=2wheelJoint3.radiuswheelJoint3.rim1shape.r(t)=arrayliteral([3],wheelJoint3.framea.x(t),wheelJoint3.framea.y(t),wheelJoint3.zposition)wheelJoint3.rim1shape.R(t)=arrayliteral([33],wheelJoint3.e02(t)2+cos(wheelJoint3.phiroll(t))(1wheelJoint3.e02(t)2),wheelJoint3.e01(t)wheelJoint3.e02(t)+cos(wheelJoint3.phiroll(t))wheelJoint3.e01(t)wheelJoint3.e02(t),sin(wheelJoint3.phiroll(t))wheelJoint3.e01(t),wheelJoint3.e01(t)wheelJoint3.e02(t)+cos(wheelJoint3.phiroll(t))wheelJoint3.e01(t)wheelJoint3.e02(t),wheelJoint3.e01(t)2+cos(wheelJoint3.phiroll(t))(1wheelJoint3.e01(t)2),sin(wheelJoint3.phiroll(t))wheelJoint3.e02(t),sin(wheelJoint3.phiroll(t))wheelJoint3.e01(t),sin(wheelJoint3.phiroll(t))wheelJoint3.e02(t),cos(wheelJoint3.phiroll(t)))wheelJoint3.rim1shape.r_shape(t)=arrayliteral([3],0,0,wheelJoint3.radius)wheelJoint3.rim1shape.length_direction(t)=[001]wheelJoint3.rim1shape.width_direction(t)=[100]wheelJoint3.rim1shape.length(t)=2wheelJoint3.radiuswheelJoint3.rim1shape.width(t)=wheelJoint3.rimdiameterwheelJoint3.rim1shape.height(t)=wheelJoint3.rimdiameterwheelJoint3.rim2shape.r(t)=arrayliteral([3],wheelJoint3.framea.x(t),wheelJoint3.framea.y(t),wheelJoint3.zposition)wheelJoint3.rim2shape.R(t)=arrayliteral([33],wheelJoint3.e02(t)2+(1wheelJoint3.e02(t)2)cos(1.570796326794895wheelJoint3.phiroll(t)),wheelJoint3.e01(t)wheelJoint3.e02(t)+wheelJoint3.e01(t)wheelJoint3.e02(t)cos(1.570796326794895wheelJoint3.phiroll(t)),sin(1.570796326794895wheelJoint3.phiroll(t))wheelJoint3.e01(t),wheelJoint3.e01(t)wheelJoint3.e02(t)+wheelJoint3.e01(t)wheelJoint3.e02(t)cos(1.570796326794895wheelJoint3.phiroll(t)),wheelJoint3.e01(t)2+(1wheelJoint3.e01(t)2)cos(1.570796326794895wheelJoint3.phiroll(t)),sin(1.570796326794895wheelJoint3.phiroll(t))wheelJoint3.e02(t),sin(1.570796326794895wheelJoint3.phiroll(t))wheelJoint3.e01(t),sin(1.570796326794895wheelJoint3.phiroll(t))wheelJoint3.e02(t),cos(1.570796326794895wheelJoint3.phiroll(t)))wheelJoint3.rim2shape.r_shape(t)=arrayliteral([3],0,0,wheelJoint3.radius)wheelJoint3.rim2shape.length_direction(t)=[001]wheelJoint3.rim2shape.width_direction(t)=[100]wheelJoint3.rim2shape.length(t)=2wheelJoint3.radiuswheelJoint3.rim2shape.width(t)=wheelJoint3.rimdiameterwheelJoint3.rim2shape.height(t)=wheelJoint3.rimdiameterwheelJoint4.e0(t)=arrayliteral([22],cos(wheelJoint4.framea.phi(t)),sin(wheelJoint4.framea.phi(t)),sin(wheelJoint4.framea.phi(t)),cos(wheelJoint4.framea.phi(t)))wheelJoint4.radjoint(wheelJoint4.r)wheelJoint4.rwheelJoint4.vvec(t)=arrayliteral([2],dwheelJoint4.framea.x(t)dt,dwheelJoint4.framea.y(t)dt)wheelJoint4.phiroll(t)=wheelJoint4.flangea.phi(t)wheelJoint4.wroll(t)=dwheelJoint4.phiroll(t)dtwheelJoint4.vlong(t)=dot(wheelJoint4.vvec(t),wheelJoint4.e0(t))wheelJoint4.vlat(t)=wheelJoint4.vvec_1(t)wheelJoint4.e02(t)+wheelJoint4.vvec_2(t)wheelJoint4.e01(t)wheelJoint4.vslip_lat(t)=wheelJoint4.vlat(t)wheelJoint4.vslip_long(t)=wheelJoint4.vlong(t)wheelJoint4.radiuswheelJoint4.wroll(t)wheelJoint4.vslip(t)=0.0001+(wheelJoint4.vslip_lat(t))2+(wheelJoint4.vslip_long(t))20=wheelJoint4.flangea.tau(t)+wheelJoint4.radiuswheelJoint4.flong(t)wheelJoint4.framea.tau(t)=0wheelJoint4.vAdhesion(t)=max(wheelJoint4.vAdhesionmin,wheelJoint4.sAdhesion|wheelJoint4.radiuswheelJoint4.wroll(t)|)wheelJoint4.vSlide(t)=max(wheelJoint4.vSlidemin,wheelJoint4.sSlide|wheelJoint4.radiuswheelJoint4.wroll(t)|)wheelJoint4.fN(t)=max(0,wheelJoint4.N+wheelJoint4.dynamicLoad(t))wheelJoint4.f(t)=limitS_triple(wheelJoint4.vAdhesion(t),wheelJoint4.vSlide(t),wheelJoint4.muA,wheelJoint4.muS,wheelJoint4.vslip(t))wheelJoint4.fN(t)wheelJoint4.flong(t)=wheelJoint4.vslip_long(t)wheelJoint4.f(t)wheelJoint4.vslip(t)wheelJoint4.flat(t)=wheelJoint4.vslip_lat(t)wheelJoint4.f(t)wheelJoint4.vslip(t)wheelJoint4.flong(t)=wheelJoint4.framea.fy(t)wheelJoint4.e02(t)+wheelJoint4.e01(t)wheelJoint4.framea.fx(t)wheelJoint4.flat(t)=wheelJoint4.framea.fy(t)wheelJoint4.e01(t)wheelJoint4.e02(t)wheelJoint4.framea.fx(t)wheelJoint4.tireshape.r(t)=arrayliteral([3],wheelJoint4.framea.x(t),wheelJoint4.framea.y(t),wheelJoint4.zposition)wheelJoint4.tireshape.R(t)=arrayliteral([33],1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0)wheelJoint4.tireshape.r_shape(t)=arrayliteral([3],0.03wheelJoint4.e02(t),0.03wheelJoint4.e01(t),0.0)wheelJoint4.tireshape.length_direction(t)=arrayliteral([3],wheelJoint4.e02(t),wheelJoint4.e01(t),0)wheelJoint4.tireshape.width_direction(t)=[001]wheelJoint4.tireshape.length(t)=wheelJoint4.wheelwidthwheelJoint4.tireshape.width(t)=2wheelJoint4.radiuswheelJoint4.tireshape.height(t)=2wheelJoint4.radiuswheelJoint4.rim1shape.r(t)=arrayliteral([3],wheelJoint4.framea.x(t),wheelJoint4.framea.y(t),wheelJoint4.zposition)wheelJoint4.rim1shape.R(t)=arrayliteral([33],wheelJoint4.e02(t)2+cos(wheelJoint4.phiroll(t))(1wheelJoint4.e02(t)2),wheelJoint4.e01(t)wheelJoint4.e02(t)+cos(wheelJoint4.phiroll(t))wheelJoint4.e01(t)wheelJoint4.e02(t),sin(wheelJoint4.phiroll(t))wheelJoint4.e01(t),wheelJoint4.e01(t)wheelJoint4.e02(t)+cos(wheelJoint4.phiroll(t))wheelJoint4.e01(t)wheelJoint4.e02(t),wheelJoint4.e01(t)2+cos(wheelJoint4.phiroll(t))(1wheelJoint4.e01(t)2),sin(wheelJoint4.phiroll(t))wheelJoint4.e02(t),sin(wheelJoint4.phiroll(t))wheelJoint4.e01(t),sin(wheelJoint4.phiroll(t))wheelJoint4.e02(t),cos(wheelJoint4.phiroll(t)))wheelJoint4.rim1shape.r_shape(t)=arrayliteral([3],0,0,wheelJoint4.radius)wheelJoint4.rim1shape.length_direction(t)=[001]wheelJoint4.rim1shape.width_direction(t)=[100]wheelJoint4.rim1shape.length(t)=2wheelJoint4.radiuswheelJoint4.rim1shape.width(t)=wheelJoint4.rimdiameterwheelJoint4.rim1shape.height(t)=wheelJoint4.rimdiameterwheelJoint4.rim2shape.r(t)=arrayliteral([3],wheelJoint4.framea.x(t),wheelJoint4.framea.y(t),wheelJoint4.zposition)wheelJoint4.rim2shape.R(t)=arrayliteral([33],wheelJoint4.e02(t)2+cos(1.570796326794895wheelJoint4.phiroll(t))(1wheelJoint4.e02(t)2),wheelJoint4.e01(t)wheelJoint4.e02(t)+cos(1.570796326794895wheelJoint4.phiroll(t))wheelJoint4.e01(t)wheelJoint4.e02(t),sin(1.570796326794895wheelJoint4.phiroll(t))wheelJoint4.e01(t),wheelJoint4.e01(t)wheelJoint4.e02(t)+cos(1.570796326794895wheelJoint4.phiroll(t))wheelJoint4.e01(t)wheelJoint4.e02(t),wheelJoint4.e01(t)2+cos(1.570796326794895wheelJoint4.phiroll(t))(1wheelJoint4.e01(t)2),sin(1.570796326794895wheelJoint4.phiroll(t))wheelJoint4.e02(t),sin(1.570796326794895wheelJoint4.phiroll(t))wheelJoint4.e01(t),sin(1.570796326794895wheelJoint4.phiroll(t))wheelJoint4.e02(t),cos(1.570796326794895wheelJoint4.phiroll(t)))wheelJoint4.rim2shape.r_shape(t)=arrayliteral([3],0,0,wheelJoint4.radius)wheelJoint4.rim2shape.length_direction(t)=[001]wheelJoint4.rim2shape.width_direction(t)=[100]wheelJoint4.rim2shape.length(t)=2wheelJoint4.radiuswheelJoint4.rim2shape.width(t)=wheelJoint4.rimdiameterwheelJoint4.rim2shape.height(t)=wheelJoint4.rimdiameterconnect(idealplanetary+sun,flangeleft)connect(idealplanetary+carrier,flangeright)connect(idealplanetary+ring,flangeb)(1+differentialGear.idealplanetary.ratio)differentialGear.idealplanetary.carrier.phi(t)=differentialGear.idealplanetary.sun.phi(t)+differentialGear.idealplanetary.ratiodifferentialGear.idealplanetary.ring.phi(t)differentialGear.idealplanetary.ring.tau(t)=differentialGear.idealplanetary.ratiodifferentialGear.idealplanetary.sun.tau(t)differentialGear.idealplanetary.carrier.tau(t)=(1differentialGear.idealplanetary.ratio)differentialGear.idealplanetary.sun.tau(t)pulse.y(t)=ifelse(pulse.starttime<t,pulse.offset+pulse.amplitude(1+4pulse.frequency(pulse.starttime+t)22pulse.frequency(pulse.starttime+t)),pulse.offset)torque.support.phi(t)=torque.phisupport(t)torque.support.tau(t)=torque.spline.tau(t)torque.phi(t)=torque.phisupport(t)+torque.spline.phi(t)torque.spline.tau(t)=torque.tau(t)fixed.spline.phi(t)=fixed.phi0constantTorque.y(t)=constantTorque.kengineTorque.support.phi(t)=engineTorque.phisupport(t)engineTorque.support.tau(t)=engineTorque.spline.tau(t)engineTorque.phi(t)=engineTorque.phisupport(t)+engineTorque.spline.phi(t)engineTorque.spline.tau(t)=engineTorque.tau(t)inertia.phi(t)=inertia.splinea.phi(t)inertia.phi(t)=inertia.splineb.phi(t)dinertia.phi(t)dt=inertia.w(t)dinertia.w(t)dt=inertia.a(t)inertia.Jinertia.a(t)=inertia.splinea.tau(t)+inertia.splineb.tau(t)inertia1.phi(t)=inertia1.splinea.phi(t)inertia1.phi(t)=inertia1.splineb.phi(t)dinertia1.phi(t)dt=inertia1.w(t)dinertia1.w(t)dt=inertia1.a(t)inertia1.Jinertia1.a(t)=inertia1.splineb.tau(t)+inertia1.splinea.tau(t)inertia2.phi(t)=inertia2.splinea.phi(t)inertia2.phi(t)=inertia2.splineb.phi(t)dinertia2.phi(t)dt=inertia2.w(t)dinertia2.w(t)dt=inertia2.a(t)inertia2.Jinertia2.a(t)=inertia2.splinea.tau(t)+inertia2.splineb.tau(t)inertia3.phi(t)=inertia3.splinea.phi(t)inertia3.phi(t)=inertia3.splineb.phi(t)dinertia3.phi(t)dt=inertia3.w(t)dinertia3.w(t)dt=inertia3.a(t)inertia3.Jinertia3.a(t)=inertia3.splineb.tau(t)+inertia3.splinea.tau(t)fixedTranslation1.phi(t)=fixedTranslation1.framea.phi(t)fixedTranslation1.w(t)=dfixedTranslation1.phi(t)dtfixedTranslation1.r0(t)=arrayliteral([22],cos(fixedTranslation1.phi(t)),sin(fixedTranslation1.phi(t)),sin(fixedTranslation1.phi(t)),cos(fixedTranslation1.phi(t)))fixedTranslation1.rfixedTranslation1.r0(t)=arrayliteral([2],fixedTranslation1.frameb.x(t)fixedTranslation1.framea.x(t),fixedTranslation1.framea.y(t)+fixedTranslation1.frameb.y(t))fixedTranslation1.framea.phi(t)=fixedTranslation1.frameb.phi(t)fixedTranslation1.framea.fx(t)+fixedTranslation1.frameb.fx(t)=0fixedTranslation1.framea.fy(t)+fixedTranslation1.frameb.fy(t)=0fixedTranslation1.framea.tau(t)+fixedTranslation1.frameb.tau(t)fixedTranslation1.frameb.fx(t)fixedTranslation1.r02(t)+fixedTranslation1.r01(t)fixedTranslation1.frameb.fy(t)=0fixedTranslation1.shape.r(t)=arrayliteral([3],fixedTranslation1.framea.x(t),fixedTranslation1.framea.y(t),fixedTranslation1.zposition)fixedTranslation1.shape.R(t)=arrayliteral([33],1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0)fixedTranslation1.shape.rshape(t)=[000]fixedTranslation1.shape.lengthdirection(t)=arrayliteral([3],fixedTranslation1.r01(t)fixedTranslation1.l,fixedTranslation1.r02(t)fixedTranslation1.l,0)fixedTranslation1.shape.widthdirection(t)=[001]fixedTranslation1.shape.length(t)=fixedTranslation1.lfixedTranslation1.shape.width(t)=2fixedTranslation1.radiusfixedTranslation1.shape.height(t)=2fixedTranslation1.radiusfixedTranslation2.phi(t)=fixedTranslation2.framea.phi(t)fixedTranslation2.w(t)=dfixedTranslation2.phi(t)dtfixedTranslation2.r0(t)=arrayliteral([22],cos(fixedTranslation2.phi(t)),sin(fixedTranslation2.phi(t)),sin(fixedTranslation2.phi(t)),cos(fixedTranslation2.phi(t)))fixedTranslation2.rfixedTranslation2.r0(t)=arrayliteral([2],fixedTranslation2.frameb.x(t)fixedTranslation2.framea.x(t),fixedTranslation2.frameb.y(t)fixedTranslation2.framea.y(t))fixedTranslation2.framea.phi(t)=fixedTranslation2.frameb.phi(t)fixedTranslation2.frameb.fx(t)+fixedTranslation2.framea.fx(t)=0fixedTranslation2.frameb.fy(t)+fixedTranslation2.framea.fy(t)=0fixedTranslation2.framea.tau(t)+fixedTranslation2.frameb.tau(t)fixedTranslation2.frameb.fx(t)fixedTranslation2.r02(t)+fixedTranslation2.frameb.fy(t)fixedTranslation2.r01(t)=0fixedTranslation2.shape.r(t)=arrayliteral([3],fixedTranslation2.framea.x(t),fixedTranslation2.framea.y(t),fixedTranslation2.zposition)fixedTranslation2.shape.R(t)=arrayliteral([33],1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0)fixedTranslation2.shape.rshape(t)=[000]fixedTranslation2.shape.lengthdirection(t)=arrayliteral([3],fixedTranslation2.r01(t)fixedTranslation2.l,fixedTranslation2.r02(t)fixedTranslation2.l,0)fixedTranslation2.shape.widthdirection(t)=[001]fixedTranslation2.shape.length(t)=fixedTranslation2.lfixedTranslation2.shape.width(t)=2fixedTranslation2.radiusfixedTranslation2.shape.height(t)=2fixedTranslation2.radiusfixedTranslation3.phi(t)=fixedTranslation3.framea.phi(t)fixedTranslation3.w(t)=dfixedTranslation3.phi(t)dtfixedTranslation3.r0(t)=arrayliteral([22],cos(fixedTranslation3.phi(t)),sin(fixedTranslation3.phi(t)),sin(fixedTranslation3.phi(t)),cos(fixedTranslation3.phi(t)))fixedTranslation3.rfixedTranslation3.r0(t)=arrayliteral([2],fixedTranslation3.frameb.x(t)fixedTranslation3.framea.x(t),fixedTranslation3.framea.y(t)+fixedTranslation3.frameb.y(t))fixedTranslation3.framea.phi(t)=fixedTranslation3.frameb.phi(t)fixedTranslation3.frameb.fx(t)+fixedTranslation3.framea.fx(t)=0fixedTranslation3.framea.fy(t)+fixedTranslation3.frameb.fy(t)=0fixedTranslation3.frameb.tau(t)+fixedTranslation3.framea.tau(t)fixedTranslation3.frameb.fx(t)fixedTranslation3.r02(t)+fixedTranslation3.r01(t)fixedTranslation3.frameb.fy(t)=0fixedTranslation3.shape.r(t)=arrayliteral([3],fixedTranslation3.framea.x(t),fixedTranslation3.framea.y(t),fixedTranslation3.zposition)fixedTranslation3.shape.R(t)=arrayliteral([33],1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0)fixedTranslation3.shape.rshape(t)=[000]fixedTranslation3.shape.lengthdirection(t)=arrayliteral([3],fixedTranslation3.r01(t)fixedTranslation3.l,fixedTranslation3.r02(t)fixedTranslation3.l,0)fixedTranslation3.shape.widthdirection(t)=[001]fixedTranslation3.shape.length(t)=fixedTranslation3.lfixedTranslation3.shape.width(t)=2fixedTranslation3.radiusfixedTranslation3.shape.height(t)=2fixedTranslation3.radiusfixedTranslation4.phi(t)=fixedTranslation4.framea.phi(t)fixedTranslation4.w(t)=dfixedTranslation4.phi(t)dtfixedTranslation4.r0(t)=arrayliteral([22],cos(fixedTranslation4.phi(t)),sin(fixedTranslation4.phi(t)),sin(fixedTranslation4.phi(t)),cos(fixedTranslation4.phi(t)))fixedTranslation4.rfixedTranslation4.r0(t)=arrayliteral([2],fixedTranslation4.framea.x(t)+fixedTranslation4.frameb.x(t),fixedTranslation4.frameb.y(t)fixedTranslation4.framea.y(t))fixedTranslation4.framea.phi(t)=fixedTranslation4.frameb.phi(t)fixedTranslation4.framea.fx(t)+fixedTranslation4.frameb.fx(t)=0fixedTranslation4.framea.fy(t)+fixedTranslation4.frameb.fy(t)=0fixedTranslation4.framea.tau(t)+fixedTranslation4.frameb.tau(t)fixedTranslation4.frameb.fx(t)fixedTranslation4.r02(t)+fixedTranslation4.frameb.fy(t)fixedTranslation4.r01(t)=0fixedTranslation4.shape.r(t)=arrayliteral([3],fixedTranslation4.framea.x(t),fixedTranslation4.framea.y(t),fixedTranslation4.zposition)fixedTranslation4.shape.R(t)=arrayliteral([33],1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0)fixedTranslation4.shape.rshape(t)=[000]fixedTranslation4.shape.lengthdirection(t)=arrayliteral([3],fixedTranslation4.r01(t)fixedTranslation4.l,fixedTranslation4.r02(t)fixedTranslation4.l,0)fixedTranslation4.shape.widthdirection(t)=[001]fixedTranslation4.shape.length(t)=fixedTranslation4.lfixedTranslation4.shape.width(t)=2fixedTranslation4.radiusfixedTranslation4.shape.height(t)=2fixedTranslation4.radiusfixedTranslation5.phi(t)=fixedTranslation5.framea.phi(t)fixedTranslation5.w(t)=dfixedTranslation5.phi(t)dtfixedTranslation5.r0(t)=arrayliteral([22],cos(fixedTranslation5.phi(t)),sin(fixedTranslation5.phi(t)),sin(fixedTranslation5.phi(t)),cos(fixedTranslation5.phi(t)))fixedTranslation5.rfixedTranslation5.r0(t)=arrayliteral([2],fixedTranslation5.framea.x(t)+fixedTranslation5.frameb.x(t),fixedTranslation5.framea.y(t)+fixedTranslation5.frameb.y(t))fixedTranslation5.framea.phi(t)=fixedTranslation5.frameb.phi(t)fixedTranslation5.frameb.fx(t)+fixedTranslation5.framea.fx(t)=0fixedTranslation5.framea.fy(t)+fixedTranslation5.frameb.fy(t)=0fixedTranslation5.frameb.tau(t)+fixedTranslation5.framea.tau(t)+fixedTranslation5.r01(t)fixedTranslation5.frameb.fy(t)fixedTranslation5.r02(t)fixedTranslation5.frameb.fx(t)=0fixedTranslation5.shape.r(t)=arrayliteral([3],fixedTranslation5.framea.x(t),fixedTranslation5.framea.y(t),fixedTranslation5.zposition)fixedTranslation5.shape.R(t)=arrayliteral([33],1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0)fixedTranslation5.shape.rshape(t)=[000]fixedTranslation5.shape.lengthdirection(t)=arrayliteral([3],fixedTranslation5.r01(t)fixedTranslation5.l,fixedTranslation5.r02(t)fixedTranslation5.l,0)fixedTranslation5.shape.widthdirection(t)=[001]fixedTranslation5.shape.length(t)=fixedTranslation5.lfixedTranslation5.shape.width(t)=2fixedTranslation5.radiusfixedTranslation5.shape.height(t)=2fixedTranslation5.radiusleftTrail.phi(t)=leftTrail.framea.phi(t)leftTrail.w(t)=dleftTrail.phi(t)dtleftTrail.r0(t)=arrayliteral([22],cos(leftTrail.phi(t)),sin(leftTrail.phi(t)),sin(leftTrail.phi(t)),cos(leftTrail.phi(t)))leftTrail.rleftTrail.r0(t)=arrayliteral([2],leftTrail.framea.x(t)+leftTrail.frameb.x(t),leftTrail.frameb.y(t)leftTrail.framea.y(t))leftTrail.framea.phi(t)=leftTrail.frameb.phi(t)leftTrail.framea.fx(t)+leftTrail.frameb.fx(t)=0leftTrail.framea.fy(t)+leftTrail.frameb.fy(t)=0leftTrail.frameb.tau(t)+leftTrail.framea.tau(t)+leftTrail.frameb.fy(t)leftTrail.r01(t)leftTrail.r02(t)leftTrail.frameb.fx(t)=0leftTrail.shape.r(t)=arrayliteral([3],leftTrail.framea.x(t),leftTrail.framea.y(t),leftTrail.zposition)leftTrail.shape.R(t)=arrayliteral([33],1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0)leftTrail.shape.rshape(t)=[000]leftTrail.shape.lengthdirection(t)=arrayliteral([3],leftTrail.r01(t)leftTrail.l,leftTrail.r02(t)leftTrail.l,0)leftTrail.shape.widthdirection(t)=[001]leftTrail.shape.length(t)=leftTrail.lleftTrail.shape.width(t)=2leftTrail.radiusleftTrail.shape.height(t)=2leftTrail.radiusrightTrail.phi(t)=rightTrail.framea.phi(t)rightTrail.w(t)=drightTrail.phi(t)dtrightTrail.r0(t)=arrayliteral([22],cos(rightTrail.phi(t)),sin(rightTrail.phi(t)),sin(rightTrail.phi(t)),cos(rightTrail.phi(t)))rightTrail.rrightTrail.r0(t)=arrayliteral([2],rightTrail.frameb.x(t)rightTrail.framea.x(t),rightTrail.frameb.y(t)rightTrail.framea.y(t))rightTrail.framea.phi(t)=rightTrail.frameb.phi(t)rightTrail.frameb.fx(t)+rightTrail.framea.fx(t)=0rightTrail.frameb.fy(t)+rightTrail.framea.fy(t)=0rightTrail.framea.tau(t)+rightTrail.frameb.tau(t)rightTrail.frameb.fx(t)rightTrail.r02(t)+rightTrail.frameb.fy(t)rightTrail.r01(t)=0rightTrail.shape.r(t)=arrayliteral([3],rightTrail.framea.x(t),rightTrail.framea.y(t),rightTrail.zposition)rightTrail.shape.R(t)=arrayliteral([33],1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0)rightTrail.shape.rshape(t)=[000]rightTrail.shape.lengthdirection(t)=arrayliteral([3],rightTrail.r01(t)rightTrail.l,rightTrail.r02(t)rightTrail.l,0)rightTrail.shape.widthdirection(t)=[001]rightTrail.shape.length(t)=rightTrail.lrightTrail.shape.width(t)=2rightTrail.radiusrightTrail.shape.height(t)=2rightTrail.radiusrevolute.w(t)=drevolute.phi(t)dtrevolute.alpha(t)=drevolute.w(t)dtrevolute.framea.x(t)=revolute.frameb.x(t)revolute.framea.y(t)=revolute.frameb.y(t)revolute.framea.phi(t)+revolute.phi(t)=revolute.frameb.phi(t)revolute.frameb.fx(t)+revolute.framea.fx(t)=0revolute.framea.fy(t)+revolute.frameb.fy(t)=0revolute.frameb.tau(t)+revolute.framea.tau(t)=0revolute.framea.tau(t)=revolute.tau(t)revolute.flangea.phi(t)=revolute.phi(t)revolute.flangea.tau(t)=revolute.tau(t)revolute.shape.r(t)=arrayliteral([3],revolute.framea.x(t),revolute.framea.y(t),revolute.zposition)revolute.shape.R(t)=arrayliteral([33],cos(revolute.framea.phi(t)),sin(revolute.framea.phi(t)),0,sin(revolute.framea.phi(t)),cos(revolute.framea.phi(t)),0,0,0,1)revolute.shape.rshape(t)=arrayliteral([3],0,0,12revolute.cylinderlength)revolute.shape.lengthdirection(t)=[001]revolute.shape.widthdirection(t)=[100]revolute.shape.length(t)=revolute.cylinderlengthrevolute.shape.width(t)=2revolute.radiusrevolute.shape.height(t)=2revolute.radiusrevolute2.w(t)=drevolute2.phi(t)dtrevolute2.alpha(t)=drevolute2.w(t)dtrevolute2.framea.x(t)=revolute2.frameb.x(t)revolute2.framea.y(t)=revolute2.frameb.y(t)revolute2.framea.phi(t)+revolute2.phi(t)=revolute2.frameb.phi(t)revolute2.frameb.fx(t)+revolute2.framea.fx(t)=0revolute2.frameb.fy(t)+revolute2.framea.fy(t)=0revolute2.framea.tau(t)+revolute2.frameb.tau(t)=0revolute2.framea.tau(t)=revolute2.tau(t)revolute2.flangea.phi(t)=revolute2.phi(t)revolute2.flangea.tau(t)=revolute2.tau(t)revolute2.shape.r(t)=arrayliteral([3],revolute2.framea.x(t),revolute2.framea.y(t),revolute2.zposition)revolute2.shape.R(t)=arrayliteral([33],cos(revolute2.framea.phi(t)),sin(revolute2.framea.phi(t)),0,sin(revolute2.framea.phi(t)),cos(revolute2.framea.phi(t)),0,0,0,1)revolute2.shape.rshape(t)=arrayliteral([3],0,0,12revolute2.cylinderlength)revolute2.shape.lengthdirection(t)=[001]revolute2.shape.widthdirection(t)=[100]revolute2.shape.length(t)=revolute2.cylinderlengthrevolute2.shape.width(t)=2revolute2.radiusrevolute2.shape.height(t)=2revolute2.radiusdynamicload.y(t)=dynamicload.kfixed1.spline.phi(t)=fixed1.phi0]

Source

dyad
"A double track model of a car."
example component TwoTrackModelTest
  world = MultibodyComponents.PlanarMechanics.World(g = 0) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 20, "y1": 20, "x2": 120, "y2": 120, "rot": 0}
      },
      "tags": []
    }
  }
  body = MultibodyComponents.PlanarMechanics.Body(m = 100, I = 1, render = false) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 190, "y1": 110, "x2": 290, "y2": 210, "rot": 270}
      },
      "tags": []
    }
  }
  body1 = MultibodyComponents.PlanarMechanics.Body(m = 300, I = 0.1, render = false) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 450, "y1": 680, "x2": 350, "y2": 780, "rot": 0}
      },
      "tags": []
    }
  }
  body2 = MultibodyComponents.PlanarMechanics.Body(m = 100, I = 1, render = false) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 840, "y1": 110, "x2": 740, "y2": 210, "rot": 90}
      },
      "tags": []
    }
  }
  wheelJoint1 = MultibodyComponents.PlanarMechanics.SlipBasedWheelJoint(radius = 0.25, r = [0, 1], mu_A = 1, mu_S = 0.7, N = 1000, sAdhesion = 0.04, sSlide = 0.12, vAdhesion_min = 0.05, vSlide_min = 0.15) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 290, "y1": 250, "x2": 190, "y2": 350, "rot": 0}
      },
      "tags": []
    }
  }
  wheelJoint2 = MultibodyComponents.PlanarMechanics.SlipBasedWheelJoint(radius = 0.25, r = [0, 1], mu_A = 1, mu_S = 0.7, N = 1500, sAdhesion = 0.04, sSlide = 0.12, vAdhesion_min = 0.05, vSlide_min = 0.15) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 270, "y1": 820, "x2": 170, "y2": 920, "rot": 0}
      },
      "tags": []
    }
  }
  wheelJoint3 = MultibodyComponents.PlanarMechanics.SlipBasedWheelJoint(radius = 0.25, r = [0, 1], mu_A = 1, mu_S = 0.7, N = 1500, sAdhesion = 0.04, sSlide = 0.12, vAdhesion_min = 0.05, vSlide_min = 0.15) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 750, "y1": 820, "x2": 850, "y2": 920, "rot": 0}
      },
      "tags": []
    }
  }
  wheelJoint4 = MultibodyComponents.PlanarMechanics.SlipBasedWheelJoint(radius = 0.25, r = [0, 1], mu_A = 1, mu_S = 0.7, N = 1000, sAdhesion = 0.04, sSlide = 0.12, vAdhesion_min = 0.05, vSlide_min = 0.15) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 740, "y1": 250, "x2": 840, "y2": 350, "rot": 0}
      },
      "tags": []
    }
  }
  differentialGear = MultibodyComponents.PlanarMechanics.DifferentialGear() {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 450, "y1": 890, "x2": 550, "y2": 990, "rot": 0}
      },
      "tags": []
    }
  }
  pulse = BlockComponents.Sources.Square(frequency = 0.5, offset = 0, start_time = 1, amplitude = -2) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 650, "y1": 90, "x2": 550, "y2": 190, "rot": 0}
      },
      "tags": []
    }
  }
  torque = RotationalComponents.Sources.TorqueSource() {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 460, "y1": 260, "x2": 560, "y2": 360, "rot": 90}
      },
      "tags": []
    }
  }
  fixed = RotationalComponents.Components.Fixed() {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 360, "y1": 1180, "x2": 460, "y2": 1280, "rot": 0}
      },
      "tags": []
    }
  }
  constantTorque = BlockComponents.Sources.Constant(k = 25) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 220, "y1": 1030, "x2": 320, "y2": 1130, "rot": 0}
      },
      "tags": []
    }
  }
  engineTorque = RotationalComponents.Sources.TorqueSource() {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 360, "y1": 1030, "x2": 460, "y2": 1130, "rot": 0}
      },
      "tags": []
    }
  }
  inertia = RotationalComponents.Components.Inertia(J = 1) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 130, "y1": 250, "x2": 30, "y2": 350, "rot": 0}
      },
      "tags": []
    }
  }
  inertia1 = RotationalComponents.Components.Inertia(J = 1) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 130, "y1": 820, "x2": 30, "y2": 920, "rot": 0}
      },
      "tags": []
    }
  }
  inertia2 = RotationalComponents.Components.Inertia(J = 1) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 890, "y1": 820, "x2": 990, "y2": 920, "rot": 0}
      },
      "tags": []
    }
  }
  inertia3 = RotationalComponents.Components.Inertia(J = 1) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 890, "y1": 250, "x2": 990, "y2": 350, "rot": 0}
      },
      "tags": []
    }
  }
  fixedTranslation1 = MultibodyComponents.PlanarMechanics.FixedTranslation(r = [0, 2]) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 450, "y1": 620, "x2": 550, "y2": 720, "rot": 270}
      },
      "tags": []
    }
  }
  fixedTranslation2 = MultibodyComponents.PlanarMechanics.FixedTranslation(r = [0.75, 0]) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 360, "y1": 760, "x2": 460, "y2": 860, "rot": 0}
      },
      "tags": []
    }
  }
  fixedTranslation3 = MultibodyComponents.PlanarMechanics.FixedTranslation(r = [-0.75, 0]) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 640, "y1": 760, "x2": 540, "y2": 860, "rot": 0}
      },
      "tags": []
    }
  }
  fixedTranslation4 = MultibodyComponents.PlanarMechanics.FixedTranslation(r = [0.75, 0]) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 400, "y1": 480, "x2": 500, "y2": 580, "rot": 0}
      },
      "tags": []
    }
  }
  fixedTranslation5 = MultibodyComponents.PlanarMechanics.FixedTranslation(r = [-0.75, 0]) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 610, "y1": 480, "x2": 510, "y2": 580, "rot": 0}
      },
      "tags": []
    }
  }
  leftTrail = MultibodyComponents.PlanarMechanics.FixedTranslation(r = [0, -0.05]) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 440, "y1": 250, "x2": 340, "y2": 350, "rot": 90}
      },
      "tags": []
    }
  }
  rightTrail = MultibodyComponents.PlanarMechanics.FixedTranslation(r = [0, 0.05]) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 690, "y1": 250, "x2": 590, "y2": 350, "rot": 270}
      },
      "tags": []
    }
  }
  revolute = MultibodyComponents.PlanarMechanics.Revolute() {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 590, "y1": 390, "x2": 690, "y2": 490, "rot": 90}
      },
      "tags": []
    }
  }
  revolute2 = MultibodyComponents.PlanarMechanics.Revolute() {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 440, "y1": 390, "x2": 340, "y2": 490, "rot": 270}
      },
      "tags": []
    }
  }
  dynamic_load = BlockComponents.Sources.Constant(k = 0) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 120, "y1": 520, "x2": 220, "y2": 620, "rot": 0}
      },
      "tags": []
    }
  }
  fixed1 = RotationalComponents.Components.Fixed() {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 380, "y1": 190, "x2": 480, "y2": 90, "rot": 0}
      },
      "tags": []
    }
  }
relations
  initial body1.r = [1.0, 1.0]
  initial body1.v = [0.0, 0.0]
  initial body1.phi = 0.0
  initial body1.w = 0.0
  initial inertia.phi = 0.0
  initial inertia.w = 0.0
  initial inertia1.phi = 0.0
  initial inertia1.w = 0.0
  initial inertia2.phi = 0.0
  initial inertia2.w = 0.0
  initial inertia3.phi = 0.0
  initial inertia3.w = 0.0
  initial revolute2.phi = -0.43633231299858
  initial revolute2.w = 0.0
  connect(inertia.spline_a, wheelJoint1.flange_a) {"Dyad": {"renderStyle": "standard", "edges": [{"S": 1, "E": 2, "M": []}]}}
  connect(inertia3.spline_a, wheelJoint4.flange_a) {"Dyad": {"renderStyle": "standard", "edges": [{"S": 1, "E": 2, "M": []}]}}
  connect(body2.frame_a, wheelJoint4.frame_a, rightTrail.frame_a) {
    "Dyad": {
      "edges": [
        {"S": 1, "M": [], "E": -1},
        {"S": -1, "M": [], "E": 2},
        {"S": 3, "M": [{"x": 640, "y": 230}], "E": -1}
      ],
      "junctions": [{"x": 790, "y": 230}],
      "renderStyle": "standard"
    }
  }
  connect(body.frame_a, wheelJoint1.frame_a, leftTrail.frame_b) {
    "Dyad": {
      "edges": [
        {"S": 1, "M": [], "E": -1},
        {"S": -1, "M": [], "E": 2},
        {"S": 3, "M": [{"x": 390, "y": 230}], "E": -1}
      ],
      "junctions": [{"x": 240, "y": 230}],
      "renderStyle": "standard"
    }
  }
  connect(pulse.y, torque.tau) {
    "Dyad": {
      "edges": [{"S": 1, "M": [{"x": 510, "y": 140}], "E": 2}],
      "renderStyle": "standard"
    }
  }
  connect(rightTrail.frame_b, revolute.frame_a) {"Dyad": {"renderStyle": "standard", "edges": [{"S": 1, "E": 2, "M": []}]}}
  connect(revolute2.flange_a, revolute.flange_a, torque.spline) {
    "Dyad": {
      "edges": [
        {"S": 1, "M": [], "E": -1},
        {"S": -1, "M": [], "E": 2},
        {"S": 3, "M": [], "E": -1}
      ],
      "junctions": [{"x": 510, "y": 440}],
      "renderStyle": "standard"
    }
  }
  connect(fixedTranslation5.frame_a, revolute.frame_b) {
    "Dyad": {
      "renderStyle": "standard",
      "edges": [{"S": 1, "M": [{"x": 640, "y": 530}], "E": 2}]
    }
  }
  connect(fixedTranslation5.frame_b, fixedTranslation4.frame_b) {"Dyad": {"renderStyle": "standard", "edges": [{"S": 1, "E": 2, "M": []}]}}
  connect(fixedTranslation1.frame_b, fixedTranslation4.frame_b) {
    "Dyad": {
      "renderStyle": "standard",
      "edges": [{"S": 1, "M": [{"x": 500, "y": 530}], "E": 2}]
    }
  }
  connect(wheelJoint3.frame_a, fixedTranslation3.frame_a) {
    "Dyad": {
      "edges": [{"S": 1, "M": [{"x": 800, "y": 810}], "E": 2}],
      "renderStyle": "standard"
    }
  }
  connect(wheelJoint2.frame_a, fixedTranslation2.frame_a) {
    "Dyad": {
      "edges": [{"S": 1, "M": [{"x": 220, "y": 810}], "E": 2}],
      "renderStyle": "standard"
    }
  }
  connect(wheelJoint3.flange_a, inertia2.spline_a) {"Dyad": {"edges": [{"S": 1, "M": [], "E": 2}], "renderStyle": "standard"}}
  connect(wheelJoint2.flange_a, inertia1.spline_a) {"Dyad": {"edges": [{"S": 1, "M": [], "E": 2}], "renderStyle": "standard"}}
  connect(fixedTranslation2.frame_b, fixedTranslation3.frame_b, fixedTranslation1.frame_a, body1.frame_a) {
    "Dyad": {
      "edges": [
        {"S": 1, "M": [], "E": -1},
        {"S": -1, "M": [], "E": 2},
        {"S": 3, "M": [], "E": -2},
        {"S": -2, "M": [], "E": -1},
        {"S": 4, "M": [], "E": -2}
      ],
      "junctions": [{"x": 500, "y": 810}, {"x": 500, "y": 730}],
      "renderStyle": "standard"
    }
  }
  connect(differentialGear.flange_left, wheelJoint2.flange_a) {
    "Dyad": {
      "edges": [{"S": 1, "M": [{"x": 170, "y": 940}], "E": 2}],
      "renderStyle": "standard"
    }
  }
  connect(differentialGear.flange_right, wheelJoint3.flange_a) {
    "Dyad": {
      "edges": [{"S": 1, "M": [{"x": 850, "y": 940}], "E": 2}],
      "renderStyle": "standard"
    }
  }
  connect(engineTorque.spline, differentialGear.flange_b) {
    "Dyad": {
      "edges": [{"S": 1, "M": [{"x": 500, "y": 1080}], "E": 2}],
      "renderStyle": "standard"
    }
  }
  connect(constantTorque.y, engineTorque.tau) {"Dyad": {"edges": [{"S": 1, "M": [], "E": 2}], "renderStyle": "standard"}}
  connect(dynamic_load.y, wheelJoint1.dynamicLoad, wheelJoint2.dynamicLoad, wheelJoint4.dynamicLoad, wheelJoint3.dynamicLoad) {
    "Dyad": {
      "edges": [
        {"S": 1, "M": [], "E": -1},
        {"S": -1, "M": [{"x": 310, "y": 300}], "E": 2},
        {"S": 3, "M": [{"x": 310, "y": 870}], "E": -1},
        {"S": 4, "M": [{"x": 710, "y": 300}], "E": -2},
        {"S": -2, "M": [], "E": -1},
        {"S": 5, "M": [{"x": 710, "y": 870}], "E": -2}
      ],
      "junctions": [{"x": 310, "y": 570}, {"x": 710, "y": 570}],
      "renderStyle": "standard"
    }
  }
  connect(fixed1.spline, torque.support) {
    "Dyad": {
      "edges": [{"S": 1, "M": [{"x": 430, "y": 310}], "E": 2}],
      "renderStyle": "standard"
    }
  }
  connect(fixed.spline, engineTorque.support) {"Dyad": {"edges": [{"S": 1, "M": [], "E": 2}], "renderStyle": "standard"}}
  connect(revolute2.frame_b, fixedTranslation4.frame_a) {
    "Dyad": {
      "renderStyle": "standard",
      "edges": [{"S": 1, "M": [{"x": 390, "y": 530}], "E": 2}]
    }
  }
  connect(leftTrail.frame_a, revolute2.frame_a) {"Dyad": {"renderStyle": "standard", "edges": [{"S": 1, "E": 2, "M": []}]}}
metadata {"Dyad": {"tests": {"case1": {"stop": 20}}}}
end
Flattened Source
dyad
"A double track model of a car."
example component TwoTrackModelTest
  world = MultibodyComponents.PlanarMechanics.World(g = 0) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 20, "y1": 20, "x2": 120, "y2": 120, "rot": 0}
      },
      "tags": []
    }
  }
  body = MultibodyComponents.PlanarMechanics.Body(m = 100, I = 1, render = false) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 190, "y1": 110, "x2": 290, "y2": 210, "rot": 270}
      },
      "tags": []
    }
  }
  body1 = MultibodyComponents.PlanarMechanics.Body(m = 300, I = 0.1, render = false) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 450, "y1": 680, "x2": 350, "y2": 780, "rot": 0}
      },
      "tags": []
    }
  }
  body2 = MultibodyComponents.PlanarMechanics.Body(m = 100, I = 1, render = false) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 840, "y1": 110, "x2": 740, "y2": 210, "rot": 90}
      },
      "tags": []
    }
  }
  wheelJoint1 = MultibodyComponents.PlanarMechanics.SlipBasedWheelJoint(radius = 0.25, r = [0, 1], mu_A = 1, mu_S = 0.7, N = 1000, sAdhesion = 0.04, sSlide = 0.12, vAdhesion_min = 0.05, vSlide_min = 0.15) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 290, "y1": 250, "x2": 190, "y2": 350, "rot": 0}
      },
      "tags": []
    }
  }
  wheelJoint2 = MultibodyComponents.PlanarMechanics.SlipBasedWheelJoint(radius = 0.25, r = [0, 1], mu_A = 1, mu_S = 0.7, N = 1500, sAdhesion = 0.04, sSlide = 0.12, vAdhesion_min = 0.05, vSlide_min = 0.15) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 270, "y1": 820, "x2": 170, "y2": 920, "rot": 0}
      },
      "tags": []
    }
  }
  wheelJoint3 = MultibodyComponents.PlanarMechanics.SlipBasedWheelJoint(radius = 0.25, r = [0, 1], mu_A = 1, mu_S = 0.7, N = 1500, sAdhesion = 0.04, sSlide = 0.12, vAdhesion_min = 0.05, vSlide_min = 0.15) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 750, "y1": 820, "x2": 850, "y2": 920, "rot": 0}
      },
      "tags": []
    }
  }
  wheelJoint4 = MultibodyComponents.PlanarMechanics.SlipBasedWheelJoint(radius = 0.25, r = [0, 1], mu_A = 1, mu_S = 0.7, N = 1000, sAdhesion = 0.04, sSlide = 0.12, vAdhesion_min = 0.05, vSlide_min = 0.15) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 740, "y1": 250, "x2": 840, "y2": 350, "rot": 0}
      },
      "tags": []
    }
  }
  differentialGear = MultibodyComponents.PlanarMechanics.DifferentialGear() {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 450, "y1": 890, "x2": 550, "y2": 990, "rot": 0}
      },
      "tags": []
    }
  }
  pulse = BlockComponents.Sources.Square(frequency = 0.5, offset = 0, start_time = 1, amplitude = -2) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 650, "y1": 90, "x2": 550, "y2": 190, "rot": 0}
      },
      "tags": []
    }
  }
  torque = RotationalComponents.Sources.TorqueSource() {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 460, "y1": 260, "x2": 560, "y2": 360, "rot": 90}
      },
      "tags": []
    }
  }
  fixed = RotationalComponents.Components.Fixed() {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 360, "y1": 1180, "x2": 460, "y2": 1280, "rot": 0}
      },
      "tags": []
    }
  }
  constantTorque = BlockComponents.Sources.Constant(k = 25) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 220, "y1": 1030, "x2": 320, "y2": 1130, "rot": 0}
      },
      "tags": []
    }
  }
  engineTorque = RotationalComponents.Sources.TorqueSource() {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 360, "y1": 1030, "x2": 460, "y2": 1130, "rot": 0}
      },
      "tags": []
    }
  }
  inertia = RotationalComponents.Components.Inertia(J = 1) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 130, "y1": 250, "x2": 30, "y2": 350, "rot": 0}
      },
      "tags": []
    }
  }
  inertia1 = RotationalComponents.Components.Inertia(J = 1) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 130, "y1": 820, "x2": 30, "y2": 920, "rot": 0}
      },
      "tags": []
    }
  }
  inertia2 = RotationalComponents.Components.Inertia(J = 1) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 890, "y1": 820, "x2": 990, "y2": 920, "rot": 0}
      },
      "tags": []
    }
  }
  inertia3 = RotationalComponents.Components.Inertia(J = 1) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 890, "y1": 250, "x2": 990, "y2": 350, "rot": 0}
      },
      "tags": []
    }
  }
  fixedTranslation1 = MultibodyComponents.PlanarMechanics.FixedTranslation(r = [0, 2]) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 450, "y1": 620, "x2": 550, "y2": 720, "rot": 270}
      },
      "tags": []
    }
  }
  fixedTranslation2 = MultibodyComponents.PlanarMechanics.FixedTranslation(r = [0.75, 0]) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 360, "y1": 760, "x2": 460, "y2": 860, "rot": 0}
      },
      "tags": []
    }
  }
  fixedTranslation3 = MultibodyComponents.PlanarMechanics.FixedTranslation(r = [-0.75, 0]) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 640, "y1": 760, "x2": 540, "y2": 860, "rot": 0}
      },
      "tags": []
    }
  }
  fixedTranslation4 = MultibodyComponents.PlanarMechanics.FixedTranslation(r = [0.75, 0]) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 400, "y1": 480, "x2": 500, "y2": 580, "rot": 0}
      },
      "tags": []
    }
  }
  fixedTranslation5 = MultibodyComponents.PlanarMechanics.FixedTranslation(r = [-0.75, 0]) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 610, "y1": 480, "x2": 510, "y2": 580, "rot": 0}
      },
      "tags": []
    }
  }
  leftTrail = MultibodyComponents.PlanarMechanics.FixedTranslation(r = [0, -0.05]) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 440, "y1": 250, "x2": 340, "y2": 350, "rot": 90}
      },
      "tags": []
    }
  }
  rightTrail = MultibodyComponents.PlanarMechanics.FixedTranslation(r = [0, 0.05]) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 690, "y1": 250, "x2": 590, "y2": 350, "rot": 270}
      },
      "tags": []
    }
  }
  revolute = MultibodyComponents.PlanarMechanics.Revolute() {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 590, "y1": 390, "x2": 690, "y2": 490, "rot": 90}
      },
      "tags": []
    }
  }
  revolute2 = MultibodyComponents.PlanarMechanics.Revolute() {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 440, "y1": 390, "x2": 340, "y2": 490, "rot": 270}
      },
      "tags": []
    }
  }
  dynamic_load = BlockComponents.Sources.Constant(k = 0) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 120, "y1": 520, "x2": 220, "y2": 620, "rot": 0}
      },
      "tags": []
    }
  }
  fixed1 = RotationalComponents.Components.Fixed() {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 380, "y1": 190, "x2": 480, "y2": 90, "rot": 0}
      },
      "tags": []
    }
  }
relations
  initial body1.r = [1.0, 1.0]
  initial body1.v = [0.0, 0.0]
  initial body1.phi = 0.0
  initial body1.w = 0.0
  initial inertia.phi = 0.0
  initial inertia.w = 0.0
  initial inertia1.phi = 0.0
  initial inertia1.w = 0.0
  initial inertia2.phi = 0.0
  initial inertia2.w = 0.0
  initial inertia3.phi = 0.0
  initial inertia3.w = 0.0
  initial revolute2.phi = -0.43633231299858
  initial revolute2.w = 0.0
  connect(inertia.spline_a, wheelJoint1.flange_a) {"Dyad": {"renderStyle": "standard", "edges": [{"S": 1, "E": 2, "M": []}]}}
  connect(inertia3.spline_a, wheelJoint4.flange_a) {"Dyad": {"renderStyle": "standard", "edges": [{"S": 1, "E": 2, "M": []}]}}
  connect(body2.frame_a, wheelJoint4.frame_a, rightTrail.frame_a) {
    "Dyad": {
      "edges": [
        {"S": 1, "M": [], "E": -1},
        {"S": -1, "M": [], "E": 2},
        {"S": 3, "M": [{"x": 640, "y": 230}], "E": -1}
      ],
      "junctions": [{"x": 790, "y": 230}],
      "renderStyle": "standard"
    }
  }
  connect(body.frame_a, wheelJoint1.frame_a, leftTrail.frame_b) {
    "Dyad": {
      "edges": [
        {"S": 1, "M": [], "E": -1},
        {"S": -1, "M": [], "E": 2},
        {"S": 3, "M": [{"x": 390, "y": 230}], "E": -1}
      ],
      "junctions": [{"x": 240, "y": 230}],
      "renderStyle": "standard"
    }
  }
  connect(pulse.y, torque.tau) {
    "Dyad": {
      "edges": [{"S": 1, "M": [{"x": 510, "y": 140}], "E": 2}],
      "renderStyle": "standard"
    }
  }
  connect(rightTrail.frame_b, revolute.frame_a) {"Dyad": {"renderStyle": "standard", "edges": [{"S": 1, "E": 2, "M": []}]}}
  connect(revolute2.flange_a, revolute.flange_a, torque.spline) {
    "Dyad": {
      "edges": [
        {"S": 1, "M": [], "E": -1},
        {"S": -1, "M": [], "E": 2},
        {"S": 3, "M": [], "E": -1}
      ],
      "junctions": [{"x": 510, "y": 440}],
      "renderStyle": "standard"
    }
  }
  connect(fixedTranslation5.frame_a, revolute.frame_b) {
    "Dyad": {
      "renderStyle": "standard",
      "edges": [{"S": 1, "M": [{"x": 640, "y": 530}], "E": 2}]
    }
  }
  connect(fixedTranslation5.frame_b, fixedTranslation4.frame_b) {"Dyad": {"renderStyle": "standard", "edges": [{"S": 1, "E": 2, "M": []}]}}
  connect(fixedTranslation1.frame_b, fixedTranslation4.frame_b) {
    "Dyad": {
      "renderStyle": "standard",
      "edges": [{"S": 1, "M": [{"x": 500, "y": 530}], "E": 2}]
    }
  }
  connect(wheelJoint3.frame_a, fixedTranslation3.frame_a) {
    "Dyad": {
      "edges": [{"S": 1, "M": [{"x": 800, "y": 810}], "E": 2}],
      "renderStyle": "standard"
    }
  }
  connect(wheelJoint2.frame_a, fixedTranslation2.frame_a) {
    "Dyad": {
      "edges": [{"S": 1, "M": [{"x": 220, "y": 810}], "E": 2}],
      "renderStyle": "standard"
    }
  }
  connect(wheelJoint3.flange_a, inertia2.spline_a) {"Dyad": {"edges": [{"S": 1, "M": [], "E": 2}], "renderStyle": "standard"}}
  connect(wheelJoint2.flange_a, inertia1.spline_a) {"Dyad": {"edges": [{"S": 1, "M": [], "E": 2}], "renderStyle": "standard"}}
  connect(fixedTranslation2.frame_b, fixedTranslation3.frame_b, fixedTranslation1.frame_a, body1.frame_a) {
    "Dyad": {
      "edges": [
        {"S": 1, "M": [], "E": -1},
        {"S": -1, "M": [], "E": 2},
        {"S": 3, "M": [], "E": -2},
        {"S": -2, "M": [], "E": -1},
        {"S": 4, "M": [], "E": -2}
      ],
      "junctions": [{"x": 500, "y": 810}, {"x": 500, "y": 730}],
      "renderStyle": "standard"
    }
  }
  connect(differentialGear.flange_left, wheelJoint2.flange_a) {
    "Dyad": {
      "edges": [{"S": 1, "M": [{"x": 170, "y": 940}], "E": 2}],
      "renderStyle": "standard"
    }
  }
  connect(differentialGear.flange_right, wheelJoint3.flange_a) {
    "Dyad": {
      "edges": [{"S": 1, "M": [{"x": 850, "y": 940}], "E": 2}],
      "renderStyle": "standard"
    }
  }
  connect(engineTorque.spline, differentialGear.flange_b) {
    "Dyad": {
      "edges": [{"S": 1, "M": [{"x": 500, "y": 1080}], "E": 2}],
      "renderStyle": "standard"
    }
  }
  connect(constantTorque.y, engineTorque.tau) {"Dyad": {"edges": [{"S": 1, "M": [], "E": 2}], "renderStyle": "standard"}}
  connect(dynamic_load.y, wheelJoint1.dynamicLoad, wheelJoint2.dynamicLoad, wheelJoint4.dynamicLoad, wheelJoint3.dynamicLoad) {
    "Dyad": {
      "edges": [
        {"S": 1, "M": [], "E": -1},
        {"S": -1, "M": [{"x": 310, "y": 300}], "E": 2},
        {"S": 3, "M": [{"x": 310, "y": 870}], "E": -1},
        {"S": 4, "M": [{"x": 710, "y": 300}], "E": -2},
        {"S": -2, "M": [], "E": -1},
        {"S": 5, "M": [{"x": 710, "y": 870}], "E": -2}
      ],
      "junctions": [{"x": 310, "y": 570}, {"x": 710, "y": 570}],
      "renderStyle": "standard"
    }
  }
  connect(fixed1.spline, torque.support) {
    "Dyad": {
      "edges": [{"S": 1, "M": [{"x": 430, "y": 310}], "E": 2}],
      "renderStyle": "standard"
    }
  }
  connect(fixed.spline, engineTorque.support) {"Dyad": {"edges": [{"S": 1, "M": [], "E": 2}], "renderStyle": "standard"}}
  connect(revolute2.frame_b, fixedTranslation4.frame_a) {
    "Dyad": {
      "renderStyle": "standard",
      "edges": [{"S": 1, "M": [{"x": 390, "y": 530}], "E": 2}]
    }
  }
  connect(leftTrail.frame_a, revolute2.frame_a) {"Dyad": {"renderStyle": "standard", "edges": [{"S": 1, "E": 2, "M": []}]}}
metadata {"Dyad": {"tests": {"case1": {"stop": 20}}}}
end


Test Cases

Test Case case1

  • Examples

  • Experiments

  • Analyses