Dear Sirs,
as described in the General Forum, my first attempt generated the general question if the problem can be simulated with AnyBody.
Below the very simple model, which I was not able to drive.
// Lifting of the sternum (actually two) via two connected rib segments.
Main = {
// The actual body model goes in this folder
AnyFolder MyModel = {// Global Reference Frame AnyFixedRefFrame GlobalRef = { AnyDrawRefFrame DrwGlobalRef = { ScaleXYZ = {20, 20, 20}; RGB = {0,1,0}; }; AnyRefNode SpineNodeLeftUpper = { sRel = {0.2, -2, 3}; }; AnyRefNode SpineNodeRightUpper = { sRel = {0.2, 2, 3}; }; AnyRefNode SpineNodeLeftLower = { sRel = {0.2, -2, -3}; }; AnyRefNode SpineNodeRightLower = { sRel = {0.2, 2, -3}; }; AnyRefNode SpineNodeBackUpper = { sRel = {-0.2, 0, 8}; }; AnyRefNode SpineNodeBackLower = { sRel = {-0.2, 0, -8}; }; }; // Global reference frame
// Segments
AnyFolder Segs = {
AnySeg Spine =
{
r0 = {0, 0, 0};
Mass = 0.05;
Jii = {1, 1, 0.01};
AnyDrawSeg drw = {};
};
AnySeg RibLeftUpper=
{
r0 = {8, -2, 3};
Mass = 0.1;
Jii = {0.05, 1, 1};
AnyDrawSeg drw = {};
AnyRefNode RibLeftUpperNodeSpine ={
sRel = {-7, 0, 0};
};
AnyRefNode RibLeftUpperNodeSternum ={
sRel = {7, 0, 0};
};
AnyRefNode RibLeftUpperNodeMidSternum ={
sRel = {3, -1, 0};
};
AnyRefNode RibLeftUpperNodeMidSpine ={
sRel = {-3, -1, 0};
};
AnyRefNode RibLeftUpperNodeMiddle ={
sRel = {0, -1, 0};
};
};
AnySeg RibRightUpper=
{
r0 = {8, 2, 3};
Mass = 0.1;
Jii = {0.05, 1, 1};
AnyDrawSeg drw = {};
AnyRefNode RibRightUpperNodeSpine ={
sRel = {-7, 0, 0};
};
AnyRefNode RibRightUpperNodeSternum ={
sRel = {7, 0, 0};
};
AnyRefNode RibRightUpperNodeMidSternum ={
sRel = {3, 1, 0};
};
AnyRefNode RibRightUpperNodeMidSpine ={
sRel = {-3, 1, 0};
};
AnyRefNode RibRightUpperNodeMiddle ={
sRel = {0, 1, 0};
};
};
AnySeg RibLeftLower=
{
r0 = {8, -2, -3};
Mass = 0.1;
Jii = {0.05, 1, 1};
AnyDrawSeg drw = {};
AnyRefNode RibLeftLowerNodeSpine ={
sRel = {-7, 0, 0};
};
AnyRefNode RibLeftLowerNodeSternum ={
sRel = {7, 0, 0};
};
AnyRefNode RibLeftLowerNodeMidSternum ={
sRel = {3, -1, 0};
};
AnyRefNode RibLeftLowerNodeMidSpine ={
sRel = {-3, -1, 0};
};
AnyRefNode RibLeftLowerNodeMiddle ={
sRel = {0, -1, 0};
};
};
AnySeg RibRightLower=
{
r0 = {8, 2, -3};
Mass = 0.1;
Jii = {0.05, 1, 1};
AnyDrawSeg drw = {};
AnyRefNode RibRightLowerNodeSpine ={
sRel = {-7, 0, 0};
};
AnyRefNode RibRightLowerNodeSternum ={
sRel = {7, 0, 0};
};
AnyRefNode RibRightLowerNodeMidSternum ={
sRel = {3, 1, 0};
};
AnyRefNode RibRightLowerNodeMidSpine ={
sRel = {-3, 1, 0};
};
AnyRefNode RibLeftLowerNodeMiddle ={
sRel = {0, 1, 0};
};
};
AnySeg SternumLeft=
{
r0 = {16, -2, 0};
Mass = 0.2;
Jii = {1, 1, 0.03};
AnyDrawSeg drw = {};
AnyRefNode SternumLeftNodeUpper ={
sRel = {-0.1, 0, 3};
};
AnyRefNode SternumLeftNodeLower ={
sRel = {-0.1, 0, -3};
};
};
AnySeg SternumRight=
{
r0 = {16, 2, 0};
Mass = 0.2;
Jii = {1, 1, 0.03};
AnyDrawSeg drw = {};
AnyRefNode SternumRightNodeUpper ={
sRel = {-0.1, 0, 3};
};
AnyRefNode SternumRightNodeLower ={
sRel = {-0.1, 0, -3};
};
};
}; // Segs folderAnyFolder Jnts = { AnyRevoluteJoint SpineJointLeftUpper = { Axis = y; AnyRefNode &GroundNode = Main.MyModel.GlobalRef.SpineNodeLeftUpper; AnyRefNode &SpineJointLeftUpperNode = Main.MyModel.Segs.RibLeftUpper.RibLeftUpperNodeSpine; }; // Left Upper Spine joint AnyRevoluteJoint SpineJointRightUpper = { Axis = y; AnyRefNode &GroundNode = Main.MyModel.GlobalRef.SpineNodeRightUpper; AnyRefNode &SpineJointRightUpperNode = Main.MyModel.Segs.RibRightUpper.RibRightUpperNodeSpine; }; // Right Upper Spine joint AnyRevoluteJoint SpineJointLeftLower = { Axis = y; AnyRefNode &GroundNode = Main.MyModel.GlobalRef.SpineNodeLeftLower; AnyRefNode &SpineJointLeftLowerNode = Main.MyModel.Segs.RibLeftLower.RibLeftLowerNodeSpine; }; // Left Upper Spine joint AnyRevoluteJoint SpineJointRightLower = { Axis = y; AnyRefNode &GroundNode = Main.MyModel.GlobalRef.SpineNodeRightLower; AnyRefNode &SpineJointRightLowerNode = Main.MyModel.Segs.RibRightLower.RibRightLowerNodeSpine; }; // Right Upper Spine joint AnyRevoluteJoint SternumJointLeftUpper = { Axis = y; AnyRefNode &SternumJointLeftUpperNodeRib = Main.MyModel.Segs.RibLeftUpper.RibLeftUpperNodeSternum; AnyRefNode &SternumJointLeftUpperNode = Main.MyModel.Segs.SternumLeft.SternumLeftNodeUpper; }; // Left Upper Sternum joint AnyRevoluteJoint SternumJointRightUpper = { Axis = y; AnyRefNode &SternumJointRightUpperNodeRib= Main.MyModel.Segs.RibRightUpper.RibRightUpperNodeSternum; AnyRefNode &SternumJointRightUpperNode= Main.MyModel.Segs.SternumRight.SternumRightNodeUpper; }; // Right Upper Sternum joint AnyRevoluteJoint SternumJointLeftLower = { Axis = y; AnyRefNode &SternumJointLeftLowerNodeRib = Main.MyModel.Segs.RibLeftLower.RibLeftLowerNodeSternum; AnyRefNode &SternumJointLeftLowerNode = Main.MyModel.Segs.SternumLeft.SternumLeftNodeLower; }; // Left Upper Sternum joint AnyRevoluteJoint SternumJointRightLower = { Axis = y; AnyRefNode &SternumJointRightLowerNodeRib = Main.MyModel.Segs.RibRightLower.RibRightLowerNodeSternum; AnyRefNode &SternumJointRightLowerNode = Main.MyModel.Segs.SternumRight.SternumRightNodeLower; }; // Right Upper Sternum joint }; // Jnts folder AnyFolder Drivers = { AnyKinEqSimpleDriver RibLeftUpperMove = { AnyRevoluteJoint &Jnt = Main.MyModel.Jnts.SpineJointLeftUpper; DriverPos = {0*pi/180}; DriverVel = {30*pi/180}; }; // Rib Left Upper driver AnyKinEqSimpleDriver RibRightUpperMove = { AnyRevoluteJoint &Jnt = Main.MyModel.Jnts.SpineJointRightUpper; DriverPos = {0*pi/180}; DriverVel = {30*pi/180}; }; // Rib Right Upper driver AnyKinEqSimpleDriver RibLeftLowerMove = { AnyRevoluteJoint &Jnt = Main.MyModel.Jnts.SpineJointLeftLower; DriverPos = {0*pi/180}; DriverVel = {30*pi/180}; }; // Rib Left Lower driver AnyKinEqSimpleDriver RibRightLowerMove = { AnyRevoluteJoint &Jnt = Main.MyModel.Jnts.SpineJointRightLower; DriverPos = {0*pi/180}; DriverVel = {30*pi/180}; }; // Rib Right Lower driver AnyKinEqSimpleDriver SternumLeftUpperMove = { AnyRevoluteJoint &Jnt = Main.MyModel.Jnts.SternumJointLeftUpper; DriverPos = {0*pi/180}; DriverVel = {-30*pi/180}; }; // Rib Left Upper driver AnyKinEqSimpleDriver SternumRightUpperMove = { AnyRevoluteJoint &Jnt = Main.MyModel.Jnts.SternumJointRightUpper; DriverPos = {0*pi/180}; DriverVel = {-30*pi/180}; }; // Rib Right Upper driver AnyKinEqSimpleDriver SternumLeftLowerMove = { AnyRevoluteJoint &Jnt = Main.MyModel.Jnts.SternumJointLeftLower; DriverPos = {0*pi/180}; DriverVel = {-30*pi/180}; }; // Rib Left Lower driver AnyKinEqSimpleDriver SternumRightLowerMove = { AnyRevoluteJoint &Jnt = Main.MyModel.Jnts.SternumJointRightLower; DriverPos = {0*pi/180}; DriverVel = {-30*pi/180}; }; // Rib Right Lower driver }; // Driver folder
}; // MyModel
// The study: Operations to be performed on the model
AnyBodyStudy MyStudy = {
AnyFolder &Model = .MyModel;
Gravity = {0.0, 0.0, -9.81};
};
}; // Main
The warning states, that the model is statically indeterminate. There are 48 reactions but only 42 rigid body degrees of freedom.
If there is any way to get this going, I thank you in advance for any helpful comments.
Best regards,
Michael Egger