Muscle Recruitment Solver error: solver aborted after maximum number of iterations



I am trying to run an inverse dynamics analysis of treadmill-walking data collected using an IMU-based Mocap suit. I have the .bvh file, and have been modifying the BVH_Xsens demo as a starting place. I am new to full-body modeling, and am encountering some errors. I managed to get the model through the kinematic analysis, but it fails about 7 steps into the Inverse Dynamics Study due to an error with the muscle recruitment solver.

Also, I have my own experimental force-plate data in .txt format, how can I use that instead of the force place prediction that’s currently in the model?

I uploaded a zip folder with my project. Thank you in advance for the help!


Hi Evanazoulay,

I have tried to run the model and looked at the way the GRF are created, it looks ok.

In general GRF prediction only works is the motion is recorded realistically, this means that if the CoM of the model has unrealistic accelerations it will lead to muscle recruitment problems, simply because the model is about to tip over. These accelerations are necessarily visible but they may result in that model can not be balanced by the GRF predictions. You can look at the residual forces in the hip to get an idea it is also possible to increase the strength if the residual muscles which are working like a safety net in the model, they are weak so the model will try not to use them if possible, by increasing the strength of these (weakresiduals.any) it is likely to be able to handle more out of balance situations, but the problem is that with a higher strength the muscles will also kick in when not needed.

There are two paths of solutions:

Adjust the GRF settings so that the contact takes place in a longer time frame. This is done ForcePaltes.any file by adjusting the LimitDistHigh and friction coef. There is also a property named LimitVelHigh which can be adjusted. These adjustment should not be unrealistic… so there is limit to how much you can do here. From what i can see when the model fails the right foot has no contact, and it looks rather close to ground so it may help to increase the limitdisthigh

The other path to go down by is to apply your own force data, i can not say exactly how this is done without knowing more about the data, but in general what we do with the built in forceplate classes is to create a forceplate segment, drive it in space with no reactions, load it with the data availble, and finally create a reactionforce (no driver) between the plate and the limb in question.

Hope it makes sense and sorry for any typos.

Best regards


Hi Evanazoulay

Just one more suggestion to look into. Since you write that the subject is walking on a treadmill, it is important that the treadmill velocity is included in the GRF prediction. The GRF class has a property called GroundVelocity that you can use to specify this.

Best regards


Hi Soren and Michael,

Thanks for your suggestions, I was able to get the gait model running, albeit with with the ForcePlate predictions file instead of my own GRF insole data (GRF data is recorded separately from the mocap data, and not synced in time. There is a .txt file with columns of pressure data from the pressure-insole matrix).

Now I am trying to run an inverse dynamics analysis on a bvh recording of a subject performing a stoop lifting task. When I import the model, the shoulders are shifted down and inwards, such that they are within the trunk in the Model Viewer.
I’ve tried playing around with the initial position values, but don’t see the model changing when I reload it.


Hi Evanazoulay,

It sounds a strange if you see no effect at loadtime by changing mannequin values, does this hold for any mannequin values?

There can be certain values like SC rotations which are not linked to the initial positions. So it will not change loading positions, but depending on the model they may have an effect in the kin analysis.

If the scapula is inside the trunk it might be related to scaling of the trunk, the contact takes place between two points on scapula which slides on an ellipsoid attached to thorax. We are currently working on improving the scapula thoracic contact to prevent such situations. To prevent penetration now i think the best thing to do is to change thorax scaling a bit.

Best regards