Hello everybody,
I am currently working on a gait model with motion capture data and pressure insoles. I applied both into Anybody and the calculated knee reaction forces seem to be too high (as well as the forces from other joints). Especially the Anterior posterior force goes up to 600% BW and the Proximo distal force also increases up to 1.000% BW. My research showed that normal joint reaction forces in the knee while walking should be around 200-280%BW in the Proximo distal direction and only around 20% BW in the Anterior posterior direction.
I checked problems with the reference frame, applied the same model in a newer version and checked the applied ground reaction force, but didn’t find a problem. Some help or ideas would be great!
Thanks in advance,
Regards
Tabea
Hi Tabea,
Here are the things I can think of in this situation:
- is sync between mocap and pressure ok
- have you checked the applied pressure forces magnitude? does it resemble GRF predictions from same model.
- Pressure by nature does not have friction, how did you deal with this? if you have applied the pressure "forces" as vertical forces acting from ground to foot it will create a strictly vertical force to the foot. This will create very high forces in the joints because the resultant GRF is pointing straight up and not in any way aligned with the joints which is normally the case.
Do you have full-body mocap to drive the model, this would be useful to predict direction of GRF?
Best regards
Søren
Hi Søren,
First of all thank you for the quick reply!!
I checked the first two points you mentioned and both are not a problem! The third one could actually be part of the problem, I applied the forces through the following code:
//Sensor 1 links
AnyRefFrame &Marker1links = Main.HumanModel.BodyModel.Left.Leg.Seg.Foot.ConditionalContact_Nodes.Node22;
Marker1links = {
AnyRefNode Sensor1links = {
sRel = {0,0,0};
viewRefFrame.Visible = On;
viewRefFrame.RGB = {1,0,0};
AnyDrawRefFrame DrwNode = {
RGB = {0,0.32941176,0.62352941};
};
};
AnyDrawRefFrame drw1l={
ScaleXYZ={0.05,0.05,0.05};
RGB={1,0,0};
};
};
AnyForce3D SensorLoad1links = {
AnyRefFrame &Punkt1links = Main.HumanModel.BodyModel.Left.Leg.Seg.Foot.ConditionalContact_Nodes.Node22;
F = {0,0,Main.Studies.InverseDynamicStudy.FootLoads.TestF(Main.Studies.InverseDynamicStudy.t)[0]};
viewForce = {
Visible = On;
ForceScale = 100;
};
AnyFloat Fout1l = Fout;
};
The forces are imported as a text file. I created 16 nodes on each foot, because the pressure insoles used have 16 measuring points.
The force is now applied vertical in the global reference system (z is the vertical direction).
How can I align the now strictly vertical force with the joints? Should I somehow use the local coordinate system of the foot? And if so, how could I implement this?
Thanks again for the help
Best Regards
Tabea
Hi Søren,
I exchanged "F" to "Flocal", like mentioned in Anyscript Turtorials and changed the direction to "Y" so the force is always applied vertical to the Node of the foot, which decreased the joint reaction forces slightly, but the forces in general, and in the AnteriorPosterior direction especially, still remain very high (maximum reduction is about 10%)
Hi Tabea,
Unfortunately neither using global vertical direction or letting the forces follow the foot will resolve the problem as you have seen.
The best would be if you have measured fulll-body motion capture, is this the case?
If this is case you can in principle do the following, it is a little tricky, but the idea is to apply the measure force to a virtual force plate which has horizontal reactions enabled, and then do normal predictions between plate and foot. This basically ends up using the measured forces as "constraints" to the GRF prediction problem.
Create a specialized force plate: Here you apply the pressure to the plate not the foot, in the right location wrt to the plate. Then you do GRF prediction between foot and plate. The plate should have reactions in horizontal plane, allowing it to transmit frictional forces to the ground.
This will involve these model steps:
-
Creating a force plate: This is a segment, no mass and inertia, it should have reactions on for the horizontal dof. and axial rotation around vertical, the other directions should be off. Kinematically it is lock in space for all 6 dof.
-
Apply forces to plate: Make a dummy seg that follows foot exactly, but has no reactions to foot, your measured forces are applied to this new seg. Make an AnyReacForce between new seg and force plate. This will transmit the forces to the plate in the correct location.
-
Setup normal GRF prediction to apply forces to this new forceplate.
*You will need to have some weak residual actuators on the plate to allow it to be carried when the foot has no contact, otherwise it will lead to kkt errors in invers analysis.
Hope it makes sense and you have full-body mocap available ?
Otherwise please write again.
Best regards
Søren.
Hi Søren,
I am using full-body mocap. I understand your explanation and will try to implement it!!
However, I’m not sure this will solve my problem: For example, when I run the model completely without my GRF insole data and only with the GRF prediction model, the joint reaction forces are in the same (too high) range and only differ in the ratio between the legs — meaning that both legs are used to the same extent rather than one being significantly weaker.
Greetings
Tabea
Hi Tabea,
I would check the limits for contact detections in the GRF predictions, if these limits are to "high" it may mean that contact is a bit wrong and it may lead to strange forces. These plates has both a distance and velocity limit to play with.
At which instance of the gait are you seeing the high force?
Best regards
Søren
Hi Søren,
I tried to implement the changes you suggested in my model and uploaded the updated version to my Dropbox (see the attached link).
I modified the way the GRFs are applied and now use the center of pressure instead of distributing the forces over 16 nodes, mainly to shorten and simplify the code. This seems to work in principle, and I am able to run the inverse dynamics. However, I noticed that the knee reaction forces are quite low and not very continuous (they seem to decrease from step to step).
I made another version of the model where I skipped the process of using GRF prediction and aplied the force to a segment and used AnyReacForce to transmit forces directly to the foot. Forces look mostly good with this version, but some models stop due to overload in muscle configuration, so I think this version still doesnt fix my problem of only using vertically applied forces.
If you have time to take a look at my model, I would really appreciate it. Of course, with the upcoming holidays, I completely understand if you are not able to reply anytime soon.
Thank you again for all the help you have already provided!
Best regards,
Tabea
Hi Tabea,
TrialSpecificData_GRFPrediction.any (17.8 KB)
I have tried to to fix the model and found a number of things, it is better now but not perfect in double stance
- The model appear to have no motion data for the arms, this is what I meant by FullBodyMocap. Without the arms in there it will not be possible to predict GRF exactly, since the dynamics of arms are missing.
- In the first and las frames there are noise in data from markers dropping out, so results there are bad. Take a look at "Main.HumanModel.BodyModel.Interface.CenterOfMass.Acc" it show acc of center of mass of the model. Here you seen the influence from the marker noise onto the dynamics of the model.
- There seems to be an issue with the applied forces there are not in correct sync with the motion and their magnitudes seems to be off I was unable to estimate the weight of the subject by adding these applied force up. The subject mass should be set in the SubjectSpecific file.
- I The file LabSpecificData I have added the line " #define MOCAP_USE_GRF_PREDICTION ON" This ensures that the model will use weak residuals on the Pelvic which is needed for GRF predictions. (If was set to off in the model)
I have made multiple changes in the TrialSpecificData_GRFPrediction.any, I have not made comments sorry, but try to compare with the old file, here are some of the things which has changed:
- The motion of the CoP segment (CoPLinks_lin_driver) was incorrect wrt to the foot now it looks better, but please check.
- I have removed forceplates and are using Cop seg for the same purpose.
- The reactions on lin_x liny and rotational z is now only active when there is a measure force above zero applied. If they are always active it creates issues.
- The Strength for the GRF prediction was set to 1 this is much too weak.
I think you should look at the applied forces these are not in correct sync with motion, and spoils some part of the analysis now.
Hope it helps, and sorry for typos.
Best regards
Søren
Hi Søren,
Thank you so much for your help — the changes you made are working really well! I implemented your suggestions, and everything runs smoothly now. I only have one remaining question:
In your code, the measured GRF is currently applied vertically in the global reference frame. Since the forces are measured using insoles, I was wondering wether it would be more accurate to apply them vertically relative to the foot instead. This would mainly affect the force direction at the beginning and end of the stance phase.
In my earlier models, the joint forces did change when using Flocal instead of F. However, I wasn’t able to implement this modification in your code, as Flocal is already being used, and changing the reference frame caused the model to not work in the correct way.
Do you think it would make sense to change this, and if so, how would you recommend implementing it?
In any case, thank you again for your quick and extremely helpful response!
Best regards,
Tabea
Hi Tabea,
I understand your idea of applying the force in the foot ref system instead, but I think it will not be very accurate. The foot rounded geometry around the heel, the toes bending at toe off is not reflected if you apply the forces in the foot ref system. The floor in contrast is flat and well defined.
As I recall this model it would not matter if you used F or Flocal in this case since the segment you apply the force to has same orientation as global. You should be able to shift between Flocal and F but only one of them will be allowed at the time.
Best regards
Søren
Hi Søren,
Thanks for the explanation! I thoguht this could maybe help with the sudden increase of knee reaction force you can see in the pictures attached... The forces seem to increase a lot, when both feet are touching the ground (the applied GRF force do not show this increase). First I thought there are still synchronisation problems, but thats not the case and slightly shifting the synchro a few frames back and forth also does not work.
I changed the limitdisthigh of the Force Plates without success and it also appears in models with FullBodyMocap.
Do you have an explanation for this?
Best regards
Tabea

