Combining force plates with a ramped walkway

Hi, AnyBody support,

  We plan to use Vicon’s motion analysis system with EMG to study the musculoskeletal loading during manually pushing/pulling two-wheeled carts on ramps. We will incorporate one or two force plates with a flat or ramped walkway.

We have interest in two independent variables: slope of the ramp (0 and 10 degrees), and the loaded weight on the cart (2 levels: 10 kg, 20 kg, for example).

  Question 1:

What stl files that we need to import except one two-wheeled hand cart?
Is it necessary to import other stl files of floor (one is flat, the other is ramped), and two weights (Can I just change the cart’s weight to make the loaded weight differently)?

  I guess the force plate data will be enough to tell AnyBody system the difference about the floor slope and loaded weight.

  Question 2:

I noticed that the GaitFullBody model still used hard constraints for the sterno-clavicular joint rotation, besides driven by a plug-in-gait full body markers data.
What do you suggest if we want to drive my model only by the markers?

  Question 3: 

I plan to create 2 prismatic joints between the hand palms and cart’s handles. Is it necessary to apply reaction force to the joint here?

  Question 4: 

Probably we will put 4 markers on the cart. Is it good enough to get the markers data to drive the cart?

  Question 5:

So, with the force plate data, full body Plug-in-gait and cart markers data, and the connection using prismatic joints, Will the AnyBody system really simulate the task of human body pushing/pulling the cart without any other problem?
I am not sure whether the AnyBody is able to simulate such a complicated task. Could you give me some advice?

  Since we are in the step of designing the experiment, we need to think about all facets of the project in advance. The problems listed above are what I am worried about presently. We appreciate your generous suggestion and help!

  Thank you!

  Sincerely,

Hi,

Q1)
The Stl files are only for visual purpose. So it is actually not necessary to have any, but still recommended for visualisation. I would say that just the cart stl file is enough, weights are not needed and the floor is usualy represented by a simple flat box.

Q2)
Basicaly if you have markers on the shoulder you would have to keep the SternoClavicularAxialRotation fixed and free the other two rotations to drive the scapula with the merkers. There is thread dealing with this subject: http://forum.anyscript.org/showthread.php?t=2656

Q3)
It is very important to get the force transmitted from the cart to the hands. The prismatic joint will provide 5 reactions (forces and moments), if there is no motion in this prismatic joint i think a reaction should be added also to the free dof.
The best way would be to have force tranducers to measure the contact force between the hand and handle, so this force can then be applied directly to the hand.

Q4)
If the cart is only one rigid body (wheels excluded) then yes, 4 markers are enough the drive it.

Q5)
There is no problem for AnyBody to simulate this task as long as the environment is correctly defined. The two key points in this model will be the ground reaction forces and the hand/cart contact forces. The ground reaction forces are given by the force plate, so this is no problem.

If you don’t measure directly the forces on the hands, then you must recreate them. That means first have the correct joint connection between the hands and the cart. Second get the correct weight and motion of the cart, motion is done by the markers and you surely knows the weight. Last thing is to get the correct interaction between the cart and the floor. You can use force plates again.

Best regards, Sylvain.

Hey, Sylvain,

Thanks for your reply. However, we do not have force transducer to measure the force transmitted from cart handles to hands. I drafted the script for the cart part, although I do not have marker data now. Can I use AnyReacForce to create the contact force between handles and hands, as shown in the below? Is the prismatic joint connection correct between handles and hands?

But it seems that it is better to create a Force with exact number here.
Do I need to use AnyForce or AnyForce3D to create the contact force based on force calculations?

Thank you!

Sincerely,

======

AnySeg Cart = {
Mass = 2;
Jii = {0.1,0.1,0.2};
r0 = {0.4,0,-0.2};
AnyDrawRefFrame CartFrame =
{
//Visible = on;
Opacity =1;
RGB = {0,1,0};
ScaleXYZ = {0.15,0.15,0.15};
};
AnyDrawSurf surf = {
FileName = “Hand Cart asc1”;
RGB = {0.6,0.6,0.6};
ScaleXYZ = {1,1,1}/1500;
Opacity = 1;
AnyFunTransform3DLin cart =
{ScaleMat = {{-1,0,0}, {0,1,0}, {0,0,-1}};
Offset = {0,0,0};
};
};

// // 2 handles connected with hands

AnyRefNode HandleLeft = {
sRel = { -0.177,0.75,-0.15};
AnyDrawNode drw = {
ScaleXYZ = {0.012, 0.012,0.012};
RGB = {0,1,0};
};
};
AnyRefNode HandleRight = {
sRel = { -0.177,0.75,0.1};
AnyDrawNode drw = {
ScaleXYZ = {0.012, 0.012,0.012};
RGB = {0,1,0};
};
};

// // 4 cart markers’ location on the cart

AnyRefNode CartLeftUp = {
sRel = { -0.074,0.6,-0.15};
AnyDrawNode drw = {
ScaleXYZ = {0.012, 0.012,0.012};
RGB = {0,1,0};
};
};
AnyRefNode CartRightUp = {
sRel = { -0.074,0.6,0.1};
AnyDrawNode drw = {
ScaleXYZ = {0.012, 0.012,0.012};
RGB = {0,1,0};
};
};

AnyRefNode CartLeftDown = {
sRel = { -0.073,0.1,-0.15};
AnyDrawNode drw = {
ScaleXYZ = {0.012, 0.012,0.012};
RGB = {0,1,0};
};
};

AnyRefNode CartRightDown = {
sRel = { -0.073,0.1,0.1};
AnyDrawNode drw = {
ScaleXYZ = {0.012, 0.012,0.012};
RGB = {0,1,0};
};
};
};

// right handle hand joint
AnyPrismaticJoint rHandleHandJnt = {
Axis = y;
Ref = 1;
AnyRefNode & HandNode = Main.Studies.KinematicStudyForParameterIdentification.HumanModel.BodyModel.Right.ShoulderArm.Seg.Hand.PalmJoint;
AnyRefNode &HandleNode = Main.Studies.KinematicStudyForParameterIdentification.EnvironmentModel.Cart.HandleRight;
};

AnyReacForce rHandleReaction = {
AnyKinLinear Lin = {
AnyRefFrame &Cart = …Cart;
AnyRefFrame &Hand = Main.Studies.KinematicStudyForParameterIdentification.HumanModel.BodyModel.Right.ShoulderArm.Seg.Hand;
};
AnyKinRotational Rot = {
AnyRefFrame &Cart = …Cart;
AnyRefFrame &Hand = Main.Studies.KinematicStudyForParameterIdentification.HumanModel.BodyModel.Right.ShoulderArm.Seg.Hand;
Type = RotAxesAngles;
};
};

// left handle hand joint
AnyPrismaticJoint lHandleHandJnt = {
Axis = y;
Ref = 1;
AnyRefNode & HandNode = Main.Studies.KinematicStudyForParameterIdentification.HumanModel.BodyModel.Left.ShoulderArm.Seg.Hand.PalmJoint;
AnyRefNode &HandleNode = Main.Studies.KinematicStudyForParameterIdentification.EnvironmentModel.Cart.HandleLeft;
};

AnyReacForce lHandleReaction = {
AnyKinLinear Lin = {
AnyRefFrame &Cart = …Cart;
AnyRefFrame &Hand = Main.Studies.KinematicStudyForParameterIdentification.HumanModel.BodyModel.Left.ShoulderArm.Seg.Hand;
};
AnyKinRotational Rot = {
AnyRefFrame &Cart = …Cart;
AnyRefFrame &Hand = Main.Studies.KinematicStudyForParameterIdentification.HumanModel.BodyModel.Left.ShoulderArm.Seg.Hand;
Type = RotAxesAngles;
};
};

Hi

The script you have created adds first a prismatic joint between the hand and the cart. The prismatic joint has 2 linear reactions and three rotational reactions. Then you add an AnyReacForce on three linear and three rotational dof between the same two objects, meaning that some of these reactions are redundant.

If you want all six dof to be active between the hand the craft i would switch off the reaction in the prismatic joint and keep the AnyReacForce, this can be done using the Reaction.Type={Off,Off,Off,Off,Off}; for the joint.

Having all six reactions available may be too much, this will be like having the hand glued onto the craft, and this may lead to unrealistic boundary conditions forces because the muscles will try to get the most out of the available boundary condition forces.

Please consider switching off some of the reactions, which ones depends on the shape of the handle.

I would not recommend to apply a fixed measured force if these has not been measured, then it is better to apply realistic boundary conditions.

Note:

AnyForce3D can be used to apply a 3D force vector to a point
AnyForce can be used to apply a force or moment to a kinematic measure.

Best regards
Søren

Hey, AnyBody Support,

Thanks for your help. According to your last reply, I made some changes to the connection between handles and hands. It runs kinematic analysis successfully now with my self-designed cart motion data.

I planned to define the PrismaticJoint there, but when I want to run the kinematic analysis, I have to comment out the scripts of 2 PrismaticJoint definition; Otherwise, there are “Position analysis failed : 573 independent constraints and 579 unknowns”.

So, in order to make the model push-pull-a-cart run successfully and with correct reaction force applied (I care about push-pull force transmitted from handle to hand), is these scripts good to simulate the cart handle and hand reaction and connection?
Can you give me some suggestion to modify the model and make it “real” and better?

===============

//AnyPrismaticJoint rHandleHandJnt = {
// AnySeg &Handle = .Cart;
// AnyRefFrame &Hand = Main.Studies.KinematicStudyForParameterIdentification.HumanModel.BodyModel.Right.ShoulderArm.Seg.Hand;
//
//};

AnyKinLinear rLin = {
AnyRefNode &CartNode = Main.Studies.KinematicStudyForParameterIdentification.EnvironmentModel.Cart.HandleRight;
AnyRefNode &HandNode = Main.Studies.KinematicStudyForParameterIdentification.HumanModel.BodyModel.Right.ShoulderArm.Seg.Hand.PalmJoint;
};

AnyKinRotational rRot = {

AnyRefNode &CartNode = Main.Studies.KinematicStudyForParameterIdentification.EnvironmentModel.Cart.HandleRight;
AnyRefNode &HandNode = Main.Studies.KinematicStudyForParameterIdentification.HumanModel.BodyModel.Right.ShoulderArm.Seg.Hand.PalmJoint;
Type = RotVector;
AngVelOnOff = On;
};

AnyKinEqSimpleDriver rHandle = {
AnyKinLinear &LinearMeasure = .rLin;
AnyKinRotational &RotMeasure = .rRot;
MeasureOrganizer = {1,2,3,4,5};
DriverPos = {0,0,0,0,0};
DriverVel = {0,0,0,0,0};
Reaction.Type = {Off,Off,Off,Off,Off};
};

AnyKinMeasureOrg rHandleOrg = {
AnyKinLinear &LinearMeasure = .rLin;
MeasureOrganizer = {0};
};

//AnyPrismaticJoint lHandleHandJnt = {
// AnySeg &Handle = .Cart;
// AnyRefFrame &Hand = Main.Studies.KinematicStudyForParameterIdentification.HumanModel.BodyModel.Left.ShoulderArm.Seg.Hand;
//
//
//};

AnyKinLinear lLin = {
AnyRefNode &CartNode = Main.Studies.KinematicStudyForParameterIdentification.EnvironmentModel.Cart.HandleLeft;
AnyRefNode &HandNode = Main.Studies.KinematicStudyForParameterIdentification.HumanModel.BodyModel.Left.ShoulderArm.Seg.Hand.PalmJoint;
};
AnyKinRotational lRot = {

AnyRefNode &CartNode = Main.Studies.KinematicStudyForParameterIdentification.EnvironmentModel.Cart.HandleLeft;
AnyRefNode &HandNode = Main.Studies.KinematicStudyForParameterIdentification.HumanModel.BodyModel.Left.ShoulderArm.Seg.Hand.PalmJoint;
Type = RotVector;
AngVelOnOff = On;

};

AnyKinEqSimpleDriver lHandle = {
AnyKinLinear &LinearMeasure = .lLin;
AnyKinRotational &RotMeasure = .lRot;
MeasureOrganizer = {1,2,3,4,5};
DriverPos = {0,0,0,0,0};
DriverVel = {0,0,0,0,0};
Reaction.Type = {Off,Off,Off,Off,Off};
};
AnyKinMeasureOrg lHandleOrg = {
AnyKinLinear &LinearMeasure = .lLin;
MeasureOrganizer = {0};
};

Thank you!

Sincerely,

Cathy

Hi Cathy,

The listed code do not have any reactions active between the hand and the cart.

The driver applied have all reactions switched off so i think you should look do the following

[ol]
[li]in the rLin object add a line “Ref=0;” If you are unsure about what this does please check AnyKinLinear in the reference manual this is important to know.
[/li]
[li]Add a visual coordinate system in the node “…EnvironmentModel.Cart.HandleRight;”
[/li]
[li]Determine which direction you would like to have active force on
[/li][li]Set these directions to On in the driver.
[/li][/ol]

Best regards
Søren