450 lines (389 with data), 14.9 kB
/// This folder contains the environment, i.e. the chair
AnyFolder EnvironmentModel = {
/// The global reference frame, i.e. ground.
AnyFixedRefFrame GlobalRef = {
AnyFolder &Dim = .Seg.ChairDimensions;
AnyRefNode GroundNode = {
sRel = {1/2*.Dim.SeatLength, -.Dim.BackRestHeight, 0};
};
}; // Global reference frame
//-----------------------------------------------------
// Segments
//-----------------------------------------------------
AnyFolder Seg = {
AnyFolder ChairDimensions = {
AnyVar FootRestLength = 0.50;
AnyVar FootRestWidth = 0.40;
AnyVar FootRestThickness = 0.05;
AnyVar BackRestHeight = 0.90;
AnyVar BackRestWidth = 0.40;
AnyVar BackRestThickness = 0.05;
AnyVar SeatLength = 0.50;
AnyVar SeatWidth = 0.40;
AnyVar SeatThickness = 0.05;
AnyVar HeadRestHeight = 0.2;
AnyVar HeadRestWidth = 0.2;
AnyVar HeadRestThickness = 0.05;
AnyVar LegRestLength = 0.6;
AnyVar LegRestWidth = 0.3;
AnyVar LegRestThickness = 0.05;
AnyVar ArmRestX = 0.30;
AnyVar ArmRestY = 0.3;
AnyVar ArmRestZ = 0.05;
AnyVar ArmRestHeight = 0.32;
}; // ChairDimensions
//--------------------------------------------------------
// BackRest
//--------------------------------------------------------
AnySeg BackRest = {
AnyFolder &Dim = .ChairDimensions;
Mass = 0.0;
AnyVar Ixx = 1/12*(Dim.BackRestHeight^2+Dim.BackRestWidth^2);
AnyVar Iyy = 1/12*(Dim.BackRestThickness^2+Dim.BackRestWidth^2);
AnyVar Izz = 1/12*(Dim.BackRestHeight^2+Dim.BackRestThickness^2);
Jii = {Ixx, Iyy, Izz};
AnyRefNode BackRestSeatJntNode = {
sRel = {0, -1/2*.Dim.BackRestHeight, 0};
};
AnyRefNode BackRestHeadRestJntNode = {
sRel = {0, 1/2*.Dim.BackRestHeight, 0};
};
AnyRefNode BackRestSupportNode = {
sRel = {-0.2, -0.2, 0};
};
AnyRefNode BackArmRestRightJntNode = {
sRel = {0, .Dim.ArmRestHeight-1/2*.Dim.BackRestHeight, 1/2*.Dim.BackRestWidth};
};
AnyRefNode BackArmRestLeftJntNode = {
sRel = {0, .Dim.ArmRestHeight-1/2*.Dim.BackRestHeight, -1/2*.Dim.BackRestWidth};
};
AnyDrawSTL BackRest = {
FileName = "BackRest.stl";
RGB = {0, 0, 1};
Opacity = 0.2;
AnyStyleDrawMaterial1 style =
{
EnableCreasing = On;
CreasingAngle = 0.524;
SpecularRGB = 0.05*{1,1,1};
};
};
}; // BackRest
//--------------------------------------------------------
// Seat
//--------------------------------------------------------
AnySeg Seat = {
AnyFolder &Dim = .ChairDimensions;
Mass = 0.0;
AnyVar Ixx = 1/12*(Dim.SeatWidth^2+Dim.SeatThickness^2);
AnyVar Iyy = 1/12*(Dim.SeatLength^2+Dim.SeatWidth^2);
AnyVar Izz = 1/12*(Dim.SeatLength^2+Dim.SeatThickness^2);
Jii = {Ixx, Iyy, Izz};
AnyRefNode SeatNode = {
sRel = {0, 0, 0};
ARel = {{0, 1, 0}, {-1, 0, 0}, {0, 0, 1}};
AnyDrawSTL Seat = {
FileName = "Seat.stl";
RGB = {0, 0, 1};
Opacity = 0.2;
AnyStyleDrawMaterial1 style =
{
EnableCreasing = On;
CreasingAngle = 0.524;
SpecularRGB = 0.05*{1,1,1};
};
};
};
AnyRefNode SeatBackRestJntNode = {
sRel = {0, 1/2*.Dim.SeatLength, 0};
};
AnyRefNode SeatAdjNode = {
sRel = {0, 0, 0};
};
AnyRefNode SeatLegRestJntNode = {
sRel = {0, -1/2*.Dim.SeatLength, 0};
};
}; // Seat
//-----------------------------------------------------
// HeadRest
//-----------------------------------------------------
AnySeg HeadRest = {
AnyFolder &Dim = .ChairDimensions;
Mass = 0.0;
AnyVar Ixx = 1/12*(Dim.HeadRestHeight^2+Dim.HeadRestWidth^2);
AnyVar Iyy = 1/12*(Dim.HeadRestWidth^2+Dim.HeadRestThickness^2);
AnyVar Izz = 1/12*(Dim.HeadRestHeight^2+Dim.HeadRestThickness^2);
Jii = {Ixx, Iyy, Izz};
AnyRefNode HeadRestBackRestJntNode = {
sRel = {0, -1/2*.Dim.HeadRestHeight, 0};
// AnyDrawNode DrwNode = {};
};
// AnyDrawSeg HeadRest = {};
AnyDrawSTL HeadRest = {
FileName = "HeadRest.stl";
RGB = {0, 0, 1};
Opacity = 0.4;
AnyStyleDrawMaterial1 style =
{
EnableCreasing = On;
CreasingAngle = 0.524;
SpecularRGB = 0.05*{1,1,1};
};
};
}; // HeadRest
//-------------------------------------------------------
// LegRest
//-------------------------------------------------------
AnySeg LegRest = {
AnyFolder &Dim = .ChairDimensions;
Mass = 0.0;
AnyVar Ixx = 1/12*(Dim.LegRestLength^2+Dim.LegRestWidth^2);
AnyVar Iyy = 1/12*(Dim.LegRestWidth^2+Dim.LegRestThickness^2);
AnyVar Izz = 1/12*(Dim.LegRestLength^2+Dim.LegRestThickness^2);
Jii = {Ixx, Iyy, Izz};
AnyRefNode LegRestSeatJntNode = {
sRel = {0, 1/2*.Dim.LegRestLength, 0};
};
AnyRefNode LegRestFootRestJntNode = {
sRel = {0, -1/2*.Dim.LegRestLength, 0};
};
AnyDrawSTL LegRest = {
FileName = "LegRest.stl";
RGB = {0, 0, 1};
Opacity = 0.2;
AnyStyleDrawMaterial1 style =
{
EnableCreasing = On;
CreasingAngle = 0.524;
SpecularRGB = 0.05*{1,1,1};
};
};
}; // LegRest
//---------------------------------------------------
// FootRest
//---------------------------------------------------
AnySeg FootRest = {
AnyFolder &Dim = .ChairDimensions;
Mass = 5.0;
AnyVar Ixx = 1/12*(Dim.FootRestThickness^2+Dim.FootRestWidth^2);
AnyVar Iyy = 1/12*(Dim.FootRestLength^2+Dim.FootRestWidth^2);
AnyVar Izz = 1/12*(Dim.FootRestLength^2+Dim.FootRestThickness^2);
Jii = {Ixx, Iyy, Izz};
AnyRefNode FootRestLegRestJntNode = {
sRel = {0, 1/2*.Dim.FootRestLength, 0};
ARel = {{0, 1, 0}, {-1, 0, 0}, {0, 0, 1}};
/*
AnyDrawRefFrame DrwRefFrame = {
RGB = {1, 1, 0};
ScaleXYZ = {0.3, 0.3, 0.3};
};
*/
};
// AnyDrawSeg DrwSeg = {};
AnyDrawSTL DrwSTL = {
FileName = "FootRest2.stl";
RGB = {0,0, 1};
Opacity = 0.2;
AnyStyleDrawMaterial1 style =
{
EnableCreasing = On;
CreasingAngle = 0.524;
SpecularRGB = 0.05*{1,1,1};
};
};
}; // FootRest
//---------------------------------------------------
// ArmRestRight
//---------------------------------------------------
AnyFolder Right = {
AnySeg ArmRest = {
AnyFolder &Dim = ..ChairDimensions;
Mass = 1.0;
AnyVar Ixx = 1/12*(Dim.ArmRestZ^2+Dim.ArmRestX^2);
AnyVar Iyy = 1/12*(Dim.ArmRestY^2+Dim.ArmRestX^2);
AnyVar Izz = 1/12*(Dim.ArmRestY^2+Dim.ArmRestZ^2);
Jii = {Ixx, Iyy, Izz};
AnyRefNode BackArmRestJntNode = {
sRel = {0, .Dim.ArmRestX, -1/2*.Dim.ArmRestZ};
};
AnyRefNode ArmRestUlnaJntNodeFront = {
sRel = {0, -1/2*.Dim.ArmRestY, 0};//-1/2*.Dim.ArmRestZ};
};
AnyRefNode ArmRestUlnaJntNodeBack = {
sRel = {0, 1/2*.Dim.ArmRestY, 0};//-1/2*.Dim.ArmRestZ};
};
AnyRefNode STLholder = {
sRel = {-0.45, 0, 0};
AnyDrawSTL DrwSTL = {
FileName = "ArmRest3.stl";
RGB = {0, 0, 1};
Opacity = 0.2;
AnyStyleDrawMaterial1 style =
{
EnableCreasing = On;
CreasingAngle = 0.524;
SpecularRGB = 0.05*{1,1,1};
};
};
};
}; // ArmRest
}; // Right
AnyFolder Left = {
AnySeg ArmRest = {
AnyFolder &Dim = ..ChairDimensions;
Mass = 1.0;
AnyVar Ixx = 1/12*(Dim.ArmRestZ^2+Dim.ArmRestX^2);
AnyVar Iyy = 1/12*(Dim.ArmRestY^2+Dim.ArmRestX^2);
AnyVar Izz = 1/12*(Dim.ArmRestY^2+Dim.ArmRestZ^2);
Jii = {Ixx, Iyy, Izz};
AnyRefNode BackArmRestJntNode = {
sRel = {0, .Dim.ArmRestX, -1/2*.Dim.ArmRestZ};
};
AnyRefNode ArmRestUlnaJntNodeFront = {
sRel = {0, -1/2*.Dim.ArmRestY, 0};//-1/2*.Dim.ArmRestZ};
};
AnyRefNode ArmRestUlnaJntNodeBack = {
sRel = {0, 1/2*.Dim.ArmRestY, 0};//-1/2*.Dim.ArmRestZ};
};
AnyRefNode STLholder = {
sRel = {-0.45, 0, 0};
AnyDrawSTL DrwSTL = {
FileName = "ArmRest3.stl";
RGB = {0, 0, 1};
Opacity = 0.2;
AnyStyleDrawMaterial1 style =
{
EnableCreasing = On;
CreasingAngle = 0.524;
SpecularRGB = 0.05*{1,1,1};
};
};
};
}; // ArmRest
}; // Left
}; // Seg
//--------------------------------------
// Joints
//--------------------------------------
AnyFolder Jnt = {
AnyKinLinear SeatGlobalLinMeasure = {
AnyRefNode &SegNode = ..Seg.Seat.SeatAdjNode;
AnyRefNode &GroundNode = ..GlobalRef.GroundNode;
};
AnyKinRotational SeatGlobalRotMeasure = {
AnyRefNode &SegNode = ..Seg.Seat.SeatAdjNode;
AnyRefNode &GroundNode = ..GlobalRef.GroundNode;
Type = RotVector;
};
AnyKinEq SeatGlobalConst = {
AnyKinLinear &LinMeasure = .SeatGlobalLinMeasure;
AnyKinRotational &RotMeasure = .SeatGlobalRotMeasure;
MeasureOrganizer = {0, 2, 3, 4};
};
AnyRevoluteJoint SeatBackRestJnt = {
Axis = z;
AnyRefNode &Seatnode = ..Seg.Seat.SeatBackRestJntNode;
AnyRefNode &BackRestNode = ..Seg.BackRest.BackRestSeatJntNode;
}; // SeatBackRestLink
AnyRevoluteJoint BackRestHeadRestJnt = {
Axis = z;
AnyRefNode &BackRestNode = ..Seg.BackRest.BackRestHeadRestJntNode;
AnyRefNode &HeadRestNode = ..Seg.HeadRest.HeadRestBackRestJntNode;
}; // BackRestHeadRestLink
AnyRevoluteJoint SeatLegRestJnt = {
Axis = z;
AnyRefNode &LegRestNode = ..Seg.LegRest.LegRestSeatJntNode;
AnyRefNode &SeatNode = ..Seg.Seat.SeatLegRestJntNode;
}; // SeatLegRestLink
AnyPrismaticJoint LegRestFootRestJnt = {
Axis = y;
Ref = 1;
AnyRefNode &LegRestNode = ..Seg.LegRest.LegRestFootRestJntNode;
AnyRefNode &FootRestNode = ..Seg.FootRest.FootRestLegRestJntNode;
};
AnyFolder Right = {
AnyRevoluteJoint BackArmRestJoint = {
AnyRefNode &BackNode = ...Seg.BackRest.BackArmRestRightJntNode;
AnyRefNode &ArmRestNode = ...Seg.Right.ArmRest.BackArmRestJntNode;
Ref = 1;
};
AnyKinRotational GlobalArmRestRotMeasure = {
AnyRefFrame &Global = Main.Model.EnvironmentModel.GlobalRef;
AnyRefNode &ArmRestNode = ...Seg.Right.ArmRest.BackArmRestJntNode;
Type = RotVector;
};
AnyKinEqSimpleDriver GlobalArmRestAngle = {
AnyKinRotational &RotMeasure = .GlobalArmRestRotMeasure;
MeasureOrganizer = {2};
DriverPos = {90*pi/180};
DriverVel = {0};
};
}; // Right
AnyFolder Left = {
AnyRevoluteJoint BackArmRestJoint = {
AnyRefNode &BackNode = ...Seg.BackRest.BackArmRestLeftJntNode;
AnyRefNode &ArmRestNode = ...Seg.Left.ArmRest.BackArmRestJntNode;
Ref = 1;
};
AnyKinRotational GlobalArmRestRotMeasure = {
AnyRefFrame &Global = Main.Model.EnvironmentModel.GlobalRef;
AnyRefNode &ArmRestNode = ...Seg.Left.ArmRest.BackArmRestJntNode;
Type = RotVector;
};
AnyKinEqSimpleDriver GlobalArmRestAngle = {
AnyKinRotational &RotMeasure = .GlobalArmRestRotMeasure;
MeasureOrganizer = {2};
DriverPos = {90*pi/180};
DriverVel = {0};
};
}; // Left
}; // Joints
/// This folder contains drivers for the chair segments.
AnyFolder Drivers = {
AnyFolder &DrvPos = Main.DrvPos;
AnyFolder &DrvVel = Main.DrvVel;
//--------------------------------------------------------
// Drivers - Chair adjustments
//--------------------------------------------------------
AnyKinEqSimpleDriver GlobalBackRestDrv = {
AnyKinRotational rot = {
AnyRefFrame &Back = Main.Model.EnvironmentModel.Seg.BackRest;
Type = RotAxesAngles;
};
MeasureOrganizer = {0};
DriverPos = {.DrvPos.GlobalBackRestRotZPos*pi/180};
DriverVel = {.DrvVel.GlobalBackRestRotZVel*pi/180};
Reaction.Type = {On};
};
AnyKinEqSimpleDriver SeatGlobalDrv = {
AnyKinLinear &LinMeasure = ..Jnt.SeatGlobalLinMeasure;
AnyKinRotational &RotMeasure = ..Jnt.SeatGlobalRotMeasure;
MeasureOrganizer = {1,5};
DriverPos = {-.DrvPos.SeatGlobalLinYPos,(-90+.DrvPos.SeatGlobalZRot)*pi/180};
DriverVel = {-.DrvVel.SeatGlobalLinYVel,.DrvVel.SeatGlobalZRotVel*pi/180};
Reaction.Type = {On,On};
};
AnyKinEqSimpleDriver BackRestHeadRestDrv = {
AnyRevoluteJoint &Jnt = ..Jnt.BackRestHeadRestJnt;
DriverPos = {.DrvPos.BackRestHeadResRotZPos*pi/180};
DriverVel = {0};
Reaction.Type = {On};
};
AnyKinEqSimpleDriver GlobalLegRestDrv = {
AnyKinRotational rot = {
AnyRefFrame &LegRest = Main.Model.EnvironmentModel.Seg.LegRest;
Type = RotAxesAngles;
};
MeasureOrganizer = {0};
DriverPos = {.DrvPos.GlobalLegRestRotZPos*pi/180};
DriverVel = {.DrvVel.GlobalLegRestRotZVel*pi/180};
Reaction.Type = {On};
};
AnyKinEqSimpleDriver LegRestFootRestDrv = {
AnyPrismaticJoint &Jnt = ..Jnt.LegRestFootRestJnt;
DriverPos = {.DrvPos.LegRestFootRestLinYPos};
DriverVel = {.DrvVel.LegRestFootRestLinYVel};
Reaction.Type = {On};
};
};
};