Question on MarkerDriver Weight

Hi AnyBody Community,

I would like to understand the function of weight (WeightX= , WeightY= , WeightZ=) in MarkerDriver definition below for mocap-driven analysis.

#ifdef _STRN
// Marker on the Sternum
CreateMarkerDriver STRN (
MarkerPlacement=Trunk.Segments.SternalBodySeg,
PlaceMarkerAt = XiphoidProcess,
ScaleMarkerPosOnOff=OFF,
OptX=ON,OptY=ON,OptZ=OFF,
UseC3DWeightResiduals = OFF,
WeightX=1,WeightY=1,WeightZ=1
) = {
  sRelOpt = {0.02, 0, 0};
};
#endif

The reason I am asking is because I have one unreliable marker in my mocap dataset - the sternum marker STRN. This STRN marker is a virtual/recontructed from four other markers during my mocap data processing. The trajectory from this reconstructed marker is not smooth (see below) but it is still being filtered through with 3Hz lowpass. However, I am still unsure and skeptical on the reliability of this marker as a driver for all 700+ trials for my simulation. I am worry that there might be some ‘drifting of the torso’ happening. Thus, I am thinking of reducing the “weight” defined in the CreateMarkerDriver class above to 0.5 (instead of excluding the marker as a driver entirely from the simulation). My questions are:

  1. Am I understanding the function of the weight for MarkerDriver defined here correctly?
  2. If what I understand is correct, and I could reduce the reliability of the model on STRN using the weight, what other driver will drive/to take the slack for this DoF? [I noticed that when STRN is excluded entirely from being a driver, CLAV.Driver.WeightPos is equal to = 2]
  3. Does reducing the weight has any impact at all on Parameter Identification? Or does it only affect dynamic trials?

For context, I use:-

  • full body marker set; with STRN, CLAV, C7, T7, L1, L2, L3, L4, and L5 on the torso
  • _THORACIC_MODEL_FLEXIBLE_ switched on
  • all cervical, thoracic, and lumbar rhythm are set to _SOFT_RHYTHM_ and the SPINE_MARKERS_SINGLE is switched on
  • non-linear disc stiffness (thorax and lumbar) is switched on.

Let me know. Thank you :slight_smile:

Kind regards,
Faizal

Hi Faizal,

Here are some answers:

A1: Yes your understanding is correct i think.

A2: When solving for kinematic solution it uses the weights for the markers, if one weight is reduced the other markers will relatively get more weight, it is relative. As an example a model with all marker weights at 10 would be identical to a model with all weight at 1, it is their relative difference that counts. It sounds reasonable to increase weight of CLAV if removing STRN, since they may drive the same DOF. So if you reduce STRN it is all other markers that will have a little more relative weight, but by increasing CLAV you attempt to keep the “change” in the same area of the model.

A3: short answer is yes it will change in principle the parameter optimization, because it is using the same objective function as when you track the motion.

Note that it is possible to individually filter the marker, by default they will all have the same filter applied but you can change this when creating the marker using the argument “FilterCutOffFrequency” try to look at the CreateMarkerDriver class. This will likely not solve all you problems but may help to remove noise, but not drift.

One more thing, since CLAV and STRN are on the same segment they are supposed to have same distance at least theoretical. You could make an expression based on the markerdata directly to quantify when the STRN marker can not be trusted, but I guess you may already know this based on residual values?

Best regards

Søren

1 Like

Hi Søren,

Thank you for the explanation. I understand it now and would help me to decide if the idea is worth exploring :slight_smile:

As to answer your question, my STRN is a virtual/reconstructed ‘landmark’ based on principle of rigid-body from 4 other (wand) markers. Thus, I believe it won’t have residual values (this is per my understanding of definition of residual :sweat_smile: ).

Kind regards,
Faizal