muscle force calculation on wrapping object

Hi,

I want to ask about muscle force on wrapping object

I made a simple model to understand muscle force.

It consists of 2 segment , 1joint(2DOF) and 1 shortestpath muscle with wrapping object(cylinder).

I attached the picture of my simple model. On x-y plane, muscle passes a joint. So, I thought that there’s no moment arm

length and muscle can’t play a role as flex/extensor(up/downwards on x-y plane) muscle. but it could and made a muscle

force.

I thought muscle could play a role as abd/adductor muscle, but it couldn’t.

I want to ask you about this question and role of muscle.

below is code of my simple model.

thank you

// Todo: Write a small description of your model here

Main = {

// The actual body model goes in this folder
AnyFolder ArmModel = {

// Global Reference Frame
AnyFixedRefFrame GlobalRef = {
  
  AnyDrawRefFrame DrwGlobalRef = {
    ScaleXYZ = {0.1, 0.1, 0.1};
    RGB = {0,1,0};
  };
  AnyRefNode Shoulder = { 
    sRel = {0,0,0}; 
    
   
  };
  AnyRefNode DeltodeusA = { 
    sRel = {0.05,0,0}; 
  };
  AnyRefNode DeltodeusB = { 
    sRel = {-0.05,0,0}; 
  };
  AnyRefNode BicepsLong = { 
    sRel = {0.1,0,0}; 
  };
  AnyRefNode TricepsLong = { 
   sRel = {-0.1,0,0}; 
  };
  
  
};  // Global reference frame

// Segments
AnyFolder Segs = {
  AnySeg UpperArm = {
    r0 = {0.3,0, 0};
    //Axes0 =RotMat(-90*pi/180, z);
    Mass = 10;
    Jii = {0.001, 0.01, 0.01};
    AnyDrawSeg drw = {};
    AnyRefNode origin = {
      sRel = {0,0,0};
      ARel = RotMat(90*pi/180, y);
      AnySurfCylinder cyl = 
      {
        Radius = 0.03;
        Length = 0.4;
        AnyDrawParamSurf drw = {};
      };
    };
    
    AnyRefNode ShoulderNode = {
      sRel = {-0.2,0,0}; 
    };
    AnyRefNode ElbowNode = {
      sRel = {0.2,0,0}; 
    };
    AnyRefNode test = { 
      sRel = {0,-0.035,0}; 
    }; 
    AnyRefNode test1 = { 
      sRel = {0,0.0,0}; 
    }; 
            
   };  // UpperArm
  
  AnySeg ForeArm = {
    r0 = {0.7,0, 0};        
    Mass = 10.0;
    Jii = {0.001,0.01,0.01};
    AnyRefNode ElbowNode = {
      sRel = {-0.2,0,0};
    };
    AnyRefNode HandNode = {
      sRel = {0.2,0,0};
    };
   
    AnyRefNode test = { 
      sRel = {0,0.035,0}; 
    }; 
    AnyRefNode test1 = { 
      sRel = {0,0.0,0}; 
    }; 
    


    AnyDrawSeg DrwSeg = {};
  }; // ForeArm

}; // Segs folder

AnyFolder Jnts = {
  
  //---------------------------------
  AnyRevoluteJoint Shoulder = {
    Axis = z;
    AnyRefNode &GroundNode = ..GlobalRef.Shoulder;
    AnyRefNode &UpperArmNode = ..Segs.UpperArm.ShoulderNode;
  }; // Shoulder joint
  
  AnyUniversalJoint Elbow = {
    
    AnyRefNode &UpperArmNode = Main.ArmModel.Segs.UpperArm.ElbowNode;
    AnyRefNode &ForeArmNode = Main.ArmModel.Segs.ForeArm.ElbowNode;
    Axis1 = z;
    Axis2 = y;
  }; // Elbow joint
 
}; // Jnts folder

AnyFolder Drivers = {

  //---------------------------------
  AnyKinEqSimpleDriver ShoulderMotion = {
    AnyRevoluteJoint &Jnt = ..Jnts.Shoulder;
    DriverPos = {0*pi/180};
    DriverVel = {00*pi/180};
    Reaction.Type = {On};
  }; // Shoulder driver
  
  //---------------------------------
  AnyKinEqSimpleDriver ElbowMotion = {
    AnyUniversalJoint &Jnt = ..Jnts.Elbow;
    DriverPos = {0*pi/180, 0};
    //DriverPos = {-0*pi/180};

    DriverVel = {0*pi/180,0};
    Reaction.Type = {Off,On};
  }; // Elbow driver
  



}; // Driver folder

AnyFolder Muscles = {
    // Simple muscle model with constant strength = 300 Newton
    AnyMuscleModel MusMdl = {
      F0 = 30000;
    };
    //---------------------------------
    AnyShortestPathMuscle test1 = {
      AnyMuscleModel &MusMdl = ..Muscles.MusMdl;
      AnyRefNode &Org = ..Segs.UpperArm.test;
      AnyRefNode &Via = ..Segs.ForeArm.test;
      AnyDrawMuscle DrwMus = {Bulging =1;};
      AnySurface &cylinder = Main.ArmModel.Segs.UpperArm.origin.cyl;
      SPLine.StringMesh = 25;
      
    };
    


 }; // Muscles folder

}; // MyModel

// The study: Operations to be performed on the model
AnyBodyStudy ArmStudy = {
AnyFolder &Model = .ArmModel;
//InverseDynamics.Criterion.Type = MR_MinMaxStrict;
tStart = 0.0;
tEnd = 5.0;
Gravity = {0.0, -10, 0.0};
nStep = 20;
};

Dear Choi Woo-seong,

Hopefully I have understood your question correctly. Here is my response:
The muscle in your model has a non-zero moment arm around both z (flexion/extension) and y (abd/adduction) axes because it is wrapped around the cylinder object. So it is not passing through the joint center. Please note that the wrapping object calculation is done at the initial condition phase and not at the loading phase.

Additionally, the only external force in the model is due to the gravity that is in y direction; therefore, there is a torque exerted to the model in the z direction, whereas no torque exists in the y direction. As a result, if you set both the reactions of the elbow universal joint to {On, Off}, muscle force must be numerically zero to balance the y-axis torque. If you set it to {Off, On}, muscle force will have a considerable value. Finally, if you set both reactions to Off, the inverse dynamics will fail because it requires that the only muscle in the model to have two different values to meet the equilibrium.

Hope it helps.

Best regards,


Mohammad S. Shourijeh, PhD
AnyBody Team