Kinematic analysis failed when using AnyStdJoint or AnyRevolueJoint

Hello, I had connected box and human hand, then I tried to analysis.

However, there are some errors as follows:

  1. When I use AnyStdJoint, error message 'Model is kinematically over-constrained'. Then, I think that I should make free of axis, so I used AnyRevoluteJoint. However, another error occured.

First, my code that I used AnystdJoint is follows:

AnyFolder Segments={

AnySeg box={
  Mass=10;
  Jii={0.02,0.0002,0.02};
  r0={Main.HumanModel.BodyModel.Trunk.SegmentsLumbar.PelvisSeg.r0[0]-0.3,
    Main.HumanModel.BodyModel.Trunk.SegmentsLumbar.PelvisSeg.r0[1]+0.2,
    Main.HumanModel.BodyModel.Trunk.SegmentsLumbar.PelvisSeg.r0[2]+0.2};
    //r0={0.2,0.2,0};
  //Axes0={Main.HumanModel.BodyModel.Trunk.SegmentsLumbar.PelvisSeg.Axes0[0],
    //Main.HumanModel.BodyModel.Trunk.SegmentsLumbar.PelvisSeg.Axes0[1],
    //Main.HumanModel.BodyModel.Trunk.SegmentsLumbar.PelvisSeg.Axes0[2]};
    Axes0={{cos(15*pi/180),0,sin(15*pi/180)}, {0,1,0}, {sin(15*pi/180),0,cos(15*pi/180)}};
  AnyDrawSeg drw={};
  AnyRefNode DrwNode={
    AnyDrawSTL drw={
      FileName="input/0.01_0.25_0.5.stl";
    };
  };
  AnyRefNode Right={
    sRel = {0,-0.37,0.16};
  };
  AnyRefNode Left={
    sRel = {0.46,-0.37,0.16};
  };
};

};

AnyFolder Joints={

AnyStdJoint Leftboxjnt={
  AnySeg &LeftHand = Main.HumanModel.BodyModel.Left.ShoulderArm.Seg.Glove;
  AnyRefNode &boxLeftside = Main.EnvironmentModel.Segments.box.Left;
};
AnyStdJoint Rightboxjnt={
  AnySeg &RightHand = Main.HumanModel.BodyModel.Right.ShoulderArm.Seg.Glove;
  AnyRefNode &boxRightside = Main.EnvironmentModel.Segments.box.Right;
};

};

  1. When I Use 'AnyRevoluteJoint', error message 'Kinematic analysis failed in time step 0 : Position analysis is not completed'.

This is my code for using AnyRevoluteJoint as follows:

AnyFolder Segments={

AnySeg box={
  Mass=10;
  Jii={0.02,0.0002,0.02};
  r0={Main.HumanModel.BodyModel.Trunk.SegmentsLumbar.PelvisSeg.r0[0]-0.3,
    Main.HumanModel.BodyModel.Trunk.SegmentsLumbar.PelvisSeg.r0[1]+0.2,
    Main.HumanModel.BodyModel.Trunk.SegmentsLumbar.PelvisSeg.r0[2]+0.2};
    //r0={0.2,0.2,0};
  //Axes0={Main.HumanModel.BodyModel.Trunk.SegmentsLumbar.PelvisSeg.Axes0[0],
    //Main.HumanModel.BodyModel.Trunk.SegmentsLumbar.PelvisSeg.Axes0[1],
    //Main.HumanModel.BodyModel.Trunk.SegmentsLumbar.PelvisSeg.Axes0[2]};
    Axes0={{cos(15*pi/180),0,sin(15*pi/180)}, {0,1,0}, {sin(15*pi/180),0,cos(15*pi/180)}};
  AnyDrawSeg drw={};
  AnyRefNode DrwNode={
    AnyDrawSTL drw={
      FileName="input/0.01_0.25_0.5.stl";
    };
  };
  AnyRefNode Right={
    sRel = {0,-0.37,0.16};
  };
  AnyRefNode Left={
    sRel = {0.46,-0.37,0.16};
  };
};

};

AnyFolder Joints={

AnyRevoluteJoint Leftboxjnt={
  AnySeg &LeftHand = Main.HumanModel.BodyModel.Left.ShoulderArm.Seg.Glove;
  AnyRefNode &boxLeftside = Main.EnvironmentModel.Segments.box.Left;
  
  Axis = x;
};
AnyRevoluteJoint Rightboxjnt={
  AnySeg &RightHand = Main.HumanModel.BodyModel.Right.ShoulderArm.Seg.Glove;
  AnyRefNode &boxRightside = Main.EnvironmentModel.Segments.box.Right;
  
  Axis = x;
};

};

How Can I solve this problem?

What kind of code do I should use?

Thank you!

Hi Hyun-Ho Shim,

When you add a box to the model, you introduce 6 degrees of freedom (dof) and with the AnyStdJoint that you make between the left arm and the box, and the right arm and the box, you over constrain the box by adding 12 constraints when the box needs only 6 constraints. This will result in a over-constrained system and that is the error you see.

With the two revolute joints, you specify the x axis as the rotation axis of the joint. Thus, the solver has no information about how the box should be rotated about the x axis.

Please see the tutorials to get an understanding of how to work with joints and drivers and generally how to build your model. Then, please see the Standing Lift or the BVH box lift example in the AMMR to get an idea of how to attach a box to the hands.

Best regards,
Dave