Hi @Nickel_Lee
Which version of the AMMR are you using? In the newest version the volume is a variable in the muscle models called Vol0
(only for the lower extremities, the rest of the body will be updated in AMMR 2.3).
If you have an older version of the AMMR you can calculate backwards to find the volume. For example:
\mathrm{Vol}_0 = L_{f0}\frac{F_0}{\mathrm{PCSA}_{Factor}}
I think that was what Marra (@marcopus) did in the paper, or maybe he used his own dataset of volumes for the muscles.
To apply the setting in the recruitment algorithm you should use the setting called:
Study.InverseDynamics.Criterion.PrimaryTerm.Weight_SearchName
With that set, the recruitment algorithm will add the variables found in the muscles folders which match Weight_SearchName
as the weight factor.
There is a small catch though. The search will only find variables in the muscle folder, and the volume (Vol0
) is located in the muscle model (which there is only a reference to in the muscle object).
So we need to create a variable in the muscle objects that holds the volume.
Main.HumanModel.BodyModel.Right.Leg.Mus.SoleusMedialis1 = {
AnyVar Volume = MusMdl.Vol0;
};
And then we can set Weight_SearchName
:
Study.InverseDynamics.Criterion.PrimaryTerm = {
Weight_SearchName = "Volume";
};
Doing this for all muscles in the leg is a bit annoying but here is a small include file that does this.
HookTLEMMuscles.any (16.7 KB)
You would use like the example below to add volume weighted recruitment to any model:
#include "../libdef.any"
Main = {
#define BM_ARM_MUSCLES_LEFT OFF
#define BM_ARM_MUSCLES_RIGHT OFF
#define BM_TRUNK_MUSCLES OFF
#include "<ANYBODY_PATH_BODY>/HumanModel.any"
#define WEIGHTFACTOR MusMdl.Vol0
Main.HumanModel.BodyModel.Right.Leg.Mus = {
#include "HookTLEMMuscles.any"
};
Main.HumanModel.BodyModel.Left.Leg.Mus = {
#include "HookTLEMMuscles.any"
};
AnyBodyStudy Study = {
Gravity = {0, 0, -9.81};
AnyFolder& BodyModel = Main.HumanModel.BodyModel;
AnyFolder& DefaultDrivers = Main.HumanModel.DefaultMannequinDrivers;
InverseDynamics.Criterion.PrimaryTerm.Weight_SearchName = "WeightFactor";
};
};
Download example: VolumeRecruitment.main.any (698 Bytes)
I hope this helps you. In future version of AMS volume recruitment will probably be built-in. But with AnyBody 7.2.2 this hack is still needed.
Best wishes,
Morten