MoCao Lower Body Model and using our own C3Ds

Hi,

I am having difficulty making changes to the MoCap Lower body model to accommodate our labs C3D files.

We use a 57 marker, 6 degree of freedom marker set.

We digitize our our joint centers (Ankle, Knee, Hip, Wrist, Elbow, Shoulder).

Our Lab coordinate system is as follows: Z = vertical axis, Y = frontal axis, x = sagital axis.

We have a split belt treadmill, instrumented with two force platforms (Bertec type-2).

Problems I am having:

The Initial position of the skeleton in AnyBody does not align without our C3D data (see attached image).

Both Force plates do not appear (or they appeared on top of each other) only one was viable in the the model window (see attached image).

Questions:

How do I reorient the AnyBody Manikin to match our coordinate system?

How do I change the AnyBody coordinate system to match ours

How do I apply our force-plates properly so both appear?

Do I need to include digitized markers (those at the ankle, knee, and hip joints…) for the Anybody MoCap model to work (ie. auto scaling)?

I have attached a C3D with and without our digitized markers as well.

Thank you

Hi,

Answers to your questions:

  1. You can reorient the mannequin by changing the values of PelvisRotX, PelvisRotY and PelvisRotZ in the “Mannequin.any” file. This would reorient your model when it’s just loaded, and typically bring your model markers closer to the C3D markers but they surely will not exactly align.

For scaling/posturing the model such that the two sets of markers are closely aligned, you would have to run the Parameter Identification simulation which is a part of the default MoCap pipeline. Reorienting your model nevertheless provides a better initial guess for parameter identification.

  1. You need not change the AnyBody coordinate system. As long as the frames of your force plates and C3D markers are consistent, parameter identification should solve for the values of the pelvic orientations which will make the AnyBody model upright in your lab coordinate system.

  2. Could you tell me a little more about which class and what settings you used to define your force plates?

  3. I’m not sure of what you mean by auto-scaling, but I’ve assumed you mean the parameter identification algorithm, which autonomously solves for the segment dimensions which result in the smallest errors between experiment and model markers.

You would not need markers at the joint centers, but it would be good to have some markers placed at reliably palpable anatomical locations such as the ASIS, epiocondyles or maleoli. There is no hard rule, since the algorithm does not directly take any measurements using these markers to scale the model.

However, you may notice in the Anyscript code that each marker has a weight, which is the extent to which errors in those markers’ positions are penalized in the cost function. If you had some markers in more reliable locations, you could weight those heavily while assigning to low weights to marker triads etc. whose location on the thigh or shank might be more arbitrary. Parameter identification can also solve for improved locations of your model markers in the segment’s local coordinate system, and you could thus ask it to do this only for the markers with low weights.

Hope this helps.
Ananth
AnyBody Support

1 Like

Thank you for your reply.

  1. Below is what I have defined our force-plates by in the ForcePlates.any file.

  2. What I meant by auto-scaling was in reference to the anthropometrics of the mannequin to match those of the C3D. We have standard markers on the ASIS and PSIS, however markers on bony landmarks such as the medial and lateral epicondyles of the femur and ankle malleoli have been digitized. Would it be better if I included these digitized markers in our C3D?

I am aware of the weighting variable for scaling the reliability of marker data.

Thank you again for your help,

Andrew

ForcePlateType2AutoDetection Plate1 (
PlateName = Plate1,
Folder =Main.ModelSetup.C3DFileData,
Limb1= .BodyModelRef.Right.Leg.Seg.Foot,
Limb2= .BodyModelRef.Left.Leg.Seg.Foot,
No=0,
VerticalDirection =“Z”,
HeightTolerance=0.07,
VelThreshold=2.2,
Fx=Main.ModelSetup.C3DFileData.Analog.DataFiltered.Fx1,
Fy=Main.ModelSetup.C3DFileData.Analog.DataFiltered.Fy1,
Fz=Main.ModelSetup.C3DFileData.Analog.DataFiltered.Fz1,
Mx=Main.ModelSetup.C3DFileData.Analog.DataFiltered.Mx1,
My=Main.ModelSetup.C3DFileData.Analog.DataFiltered.My1,
Mz=Main.ModelSetup.C3DFileData.Analog.DataFiltered.Mz1,
FootPresent=HumanModelPresent)
={
};

ForcePlateType2AutoDetection Plate2 (
PlateName = Plate2,
Folder =Main.ModelSetup.C3DFileData,
Limb1= .BodyModelRef.Right.Leg.Seg.Foot,
Limb2= .BodyModelRef.Left.Leg.Seg.Foot,
No=0,
VerticalDirection =“Z”,
HeightTolerance=0.07,
VelThreshold=2.2,
Fx=Main.ModelSetup.C3DFileData.Analog.DataFiltered.Fx2,
Fy=Main.ModelSetup.C3DFileData.Analog.DataFiltered.Fy2,
Fz=Main.ModelSetup.C3DFileData.Analog.DataFiltered.Fz2,
Mx=Main.ModelSetup.C3DFileData.Analog.DataFiltered.Mx2,
My=Main.ModelSetup.C3DFileData.Analog.DataFiltered.My2,
Mz=Main.ModelSetup.C3DFileData.Analog.DataFiltered.Mz2,
FootPresent=HumanModelPresent)
={
};

Hi,

  1. The input to your force plate class template ,‘No’ is the serial number of the force plate in your C3D file. In your case, both force plates have No set to 0. Try setting the second plate’s No to 1, and it should sort out the issue.

  2. If you do have reliable coordinates of those landmarks during the motion trial you’re using to scale the model, please do use it by all means :slight_smile: They should be more reliable than even the most earnestly placed skin markers.

Ananth,
AnyBody Support