How to use .BVH file format with AnyBody?

Hey, AnyBody support,

(1) We are using a FAB system, which can give us .bvh file format. We know how to use .c3d file format according to your tutorials and webcasts. But we did not find any such examples using .BVH format as input, even though there is such class like “AnyInputBVH”?
Could you please tell us: the procedures to use BVH file format as input to the AnyBody model?

(2) Another problem is: the FAB also gives us angle data, but they are a little different. For example: when the neck is doing flexion movement only, but the output gives these kinds of data in .csv format in separate columns: “cervical flexion, cervical extension, cervical lateral flexion left, cervical lateral flexion right, cervical rotation left, cervical rotation right”. If you are confused with my description, please check my attached file.

In the example of MaxForceNeck model, I know I can input the SkullThorax Global Angle in .text format to the cervical drivers part. It is very easy to convert .csv to .txt file format.

How can I make use of the angles data from FAB as input to the cervical spine drivers part? Or do what additional work to make those angles data usable in AnyBody system?

Thank you!

Sincerely,

Cathy

Hi Cathy,
you can use the AnyInputBVH to import the data to the system. Then you can create manual links between the bvh data and markers on the model, similar to the C3d approach. You can also use the joint angle data directly. But the model setup used in the bvh files will most propably be different from the AMMR model, so the way to go is the change the definiton of the AnyBody model, this could be done for instance by creating new interface nodes to measure the joint motion (have a look at the interface files).
Best regards,
Sebastian

Hi, Sebastian,

I have some questions about using BVH in AnyBody:

(1) Can I use AnyKinDriverMarker to connect the BVH data to the human body reference frame, like in using C3D file?
If not, what functions can achieve the goal?

(2) My FAB system gave me data of 19 joints (if End Sites are counted as joints),
i.e.
Spine -> Head -> End Site,
->LeftArm -> LeftForearm -> LeftHand -> End site,
->RightArm ->RightForearm -> RightHand -> End site,
LeftUpLeg -> LeftLeg -> LeftFoot -> End site,
RightUpLeg -> RightLeg -> RightFoot -> End site,

Do I need to go back to all the interface files of shoulderarms, trunk, and legs and change the measuring nodes of joint motion to the 19 nodes/joints what we got from FAB? Then make a connection for BVH data and the nodes in drivers.any file?

Or, I just need to make a connection between the BVH data and the nodes in drivers.any file?

Please see the attached zip file. There were some warning messages about my AnyKinDriverMarker usage, and the model failed in time step 0 of kinematic analysis.

Please help us,

Thanks a lot!

Cathy

Another important question:

If the human body will move according to the BVH 19 joints data, will the muscle activity of some muscles become less activated? or some muscles will be more activated?

Will some muscles not be shown in the output after running the inverse dynamic analysis, because we have so few joints data available from the FAB system? -----------The answers for these questions will be very important for our research strategy.

Please advise,

Thanks,

Cathy

Hi Cathy,

  1. I guess the simplest approach is to use a simple Driver and switch of the reaction and add soft constraints, that is basically what the AnyKinDriverMarker does. Use something like this:
    AnyKinEqSimpleDriver M4 = {
    AnyKinLinear lin ={
    AnyRefFrame &ref1 = Main.HumanModel.BodyModel.Right.ShoulderArm.Seg.Hand.Hand;
    AnyRefFrame &ref2 = Main.MyModel.ModelEnvironmentConnection.bvh.Model.Hips.Chest.RightCollar.RightShoulder.RightElbow.RightWrist.Seg;
    };
    DriverPos = {0,0,0};
    DriverVel = {0,0,0};
    CType = {Soft,Soft,Soft};
    Reaction.Type = {Off,Off,Off};
    };
  2. Establishing the connection like shown above you don’t need to go through all the joints, as you don’t use the joint angles but the position of the “joint nodes” in space. This approach is more elegant as it avoids a large error on the position of the hands and feet due to a summation of joint angle error. You just have to make sure that you define/use nodes on the Humanmodel which correspond to the position of the bvh joints. From this on it should work fine, given you have enough markers, which may be a problem. In this case you may have to constrain some minor joints, e.g. ankle eversion. Please remember to use the solver for overconstraint systems: InitialConditions.SolverType = KinSolOverDeterminate;
    Kinematics.SolverType = KinSolOverDeterminate;
    As long as everything is driven by markers you should be fine with respect to muscle activity.
    Best regards,
    Sebastian

Hey, Sebastian,

Thanks so much for your timely response. Your suggestion is very helpful. But I still got some error message for my kinematic analysis.

Please see my attached files. I tried two different .bvh files, and they used different numbers of joints. Our FAB system created the .BVH files without neck - head joints, no collar, and etc. From the .BVH files, we can see that the movements were very simple, almost still.

I added some hard constraints for some minor joints in the drivers.any part.

I am not sure whether I did correctly for the AnyRefFrame & ref1 = … , pointing at the exact joint nodes in the human body, (or just at the segments?).

Even I did not start from the first time step, the model also failed, if we assumed that the first time steps were for calibration.

Will the muscle activity be different between two systems which include more or less number of joints? Because our FAB system only creates 15 joints data, without collar (clavicular), neck, and head sites.

Could you please help me with solving these problems?

Thanks,

Cathy

Sorry, I failed to upload my files. I will come back later to upload them, if the problems are still there.

Thanks!

Cathy

Hi Cathy,
just some remarks: The AnyRefFrame &ref should point at the equivalent point on the AnyBody Model, I assume the node is in most cases the joint center. You simply use the spheres in the stick figure as markers to drive the model. The motion of the body model will be more precise with more markers (joints) and this may influence of course the muscle activations. If 15 are enough depends on your application.
Best regards,
Sebastian

Hey, Sebastian,

Thanks a lot for your support.
Since I am eager to solve my problems, I am copying my script for the model that I attached before. I only changed a little bit on the main.any file, and did a lot work on the BVHdrivers.any file according to your suggestion.

Main = {

AnyOperationSequence RunApplication = {
  AnyOperation &CalibrationAnal = Main.HumanModel.Calibration.CalibrationSequence;
  AnyOperation &InvAnal=Main.MyStudy.InverseDynamics;
};

 #include "DrawSettings.any"

AnyFolder HumanModel = {
AnyFolder &Mannequin=.MyModel.Mannequin;

#include “…\Body\AAUHuman\BodyModels\FullBodyModel\BodyModel.any”
AnyFolder StrengthParameters = {
AnyVar SpecificMuscleTensionSpine = 90; //N/cm^2
AnyVar StrengthIndexLeg = 1;
AnyVar SpecificMuscleTensionShoulderArm = 90; //N/cm^2
};

    //Choose between scaling laws
  #include "..\..\..\Body\AAUHuman\Scaling\ScalingLengthMassFatExt.any" 

//
Scaling = {
//This is the file which set the segments lenghts
#include “AnyManExternal.any”
};
};

AnyFolder MyModel = {
AnyFolder &HumanModel=.HumanModel.BodyModel;
#include “Mannequin.any”
#include “Environment.any”
AnyFolder ModelEnvironmentConnection = {
#include “BVHdrivers.any”
AnyInputBVH bvh =
{
FileName = “actor.bvh”;
TranslationScale = 1/50;
RotationScale = 1/50;
// ConstructModelOnOff = On;
// ModelDrawOnOff = On;
//ModelDrawRGBs = ;
ModelDrawScale = 0.15;
InterPolType = Bspline;
InterPolBsplineOrder = 4;
TranslationalDataFilterIndex = 0;
RotationalDataFilterIndex = 0;
/Filter =
{
z0 = {};
AutomaticInitialConditionOnOff = On;
FilterForwardBackwardOnOff = On;
N = 2;
Fc = {10};
Type = LowPass;
};
/
};

 };

};

AnyBodyStudy MyStudy = {

  AnyFolder &Model = .MyModel;

  Gravity = {0.0,-9.81,0};
  AnyIntVarFramesNumber=Main.MyModel.ModelEnvironmentConnection.bvh.Header.FramesNo;

AnyFloatVarFramesTime=Main.MyModel.ModelEnvironmentConnection.bvh.Header.FrameTime;
//tStart = 0.2; // This code will not affect the kinematics result.
tEnd=FramesNumber*FramesTime;

  InitialConditions.SolverType = KinSolOverDeterminate;
  Kinematics.SolverType = KinSolOverDeterminate;


};

};
// End of Main
// RESULTS:
// Finally, this model failed to resolve kinematic constraints.
// Newton relaxation too small. (final kin. error = 4.315495E-001)

==============

BVHdrivers.any

=======================================
AnyFolder Drivers = {
AnyFolder &JntPos= …Mannequin.Posture;
AnyFolder &JntVel= …Mannequin.PostureVel;
AnyFolder &RefHM = Main.MyModel.HumanModel;

// Drivers for connecting BVH joints data to human body landmarks
AnyKinEqSimpleDriver M1 = {
AnyKinLinear lin = {
  AnyRefFrame &ref1 = Main.HumanModel.BodyModel.Trunk.SegmentsCervicalSpine.C7Seg.T1C7JntNode;
  AnyRefFrame &ref2 = Main.MyModel.ModelEnvironmentConnection.bvh.Model.Hips.Chest.Neck.Seg;
};
DriverPos = {0,0,0};
DriverVel = {0,0,0};
CType = {Soft, Soft, Soft};
Reaction.Type = {Off, Off, Off};

};

AnyKinEqSimpleDriver M2 = {
AnyKinLinear lin = {
AnyRefFrame &ref1 = Main.HumanModel.BodyModel.Trunk.SegmentsThorax.SkullSeg.C1C0JntNode;
AnyRefFrame &ref2 = Main.MyModel.ModelEnvironmentConnection.bvh.Model.Hips.Chest.Neck.Head.Seg;
};
DriverPos = {0,0,0};
DriverVel = {0,0,0};
CType = {Soft, Soft, Soft};
Reaction.Type = {Off, Off, Off};
};

AnyKinEqSimpleDriver M3 = {
AnyKinLinear lin = {
AnyRefFrame &ref1 = Main.HumanModel.BodyModel.Trunk.SegmentsLumbar.L5Seg.L5SacrumJntNode;
AnyRefFrame &ref2 = Main.MyModel.ModelEnvironmentConnection.bvh.Model.Hips.Chest.Seg;
};
DriverPos = {0,0,0};
DriverVel = {0,0,0};
CType = {Soft, Soft, Soft};
Reaction.Type = {Off, Off, Off};
};

AnyKinEqSimpleDriver M4 = {
AnyKinLinear lin = {
AnyRefFrame &ref1 = Main.HumanModel.BodyModel.Left.ShoulderArm.Seg.Clavicula.scj;
AnyRefFrame &ref2 = Main.MyModel.ModelEnvironmentConnection.bvh.Model.Hips.Chest.LeftCollar.Seg;
};
DriverPos = {0,0,0};
DriverVel = {0,0,0};
CType = {Soft, Soft, Soft};
Reaction.Type = {Off, Off, Off};
};

AnyKinEqSimpleDriver M5 = {
AnyKinLinear lin = {
  AnyRefFrame &ref1 = Main.HumanModel.BodyModel.Left.ShoulderArm.Seg.Humerus.gh;
  AnyRefFrame &ref2 = Main.MyModel.ModelEnvironmentConnection.bvh.Model.Hips.Chest.LeftCollar.LeftShoulder.Seg;
  };
DriverPos = {0,0,0};
DriverVel = {0,0,0};
CType = {Soft, Soft, Soft};
Reaction.Type = {Off, Off, Off};

};
AnyKinEqSimpleDriver M6 = {
AnyKinLinear lin = {
AnyRefFrame &ref1 = Main.HumanModel.BodyModel.Left.ShoulderArm.Seg.Ulna.fe;
AnyRefFrame &ref2 = Main.MyModel.ModelEnvironmentConnection.bvh.Model.Hips.Chest.LeftCollar.LeftShoulder.LeftElbow.Seg;
};
DriverPos = {0,0,0};
DriverVel = {0,0,0};
CType = {Soft, Soft, Soft};
Reaction.Type = {Off, Off, Off};
};
AnyKinEqSimpleDriver M7 = {
AnyKinLinear lin = {
AnyRefFrame &ref1 = Main.HumanModel.BodyModel.Left.ShoulderArm.Seg.Hand.Hand;
AnyRefFrame &ref2 = Main.MyModel.ModelEnvironmentConnection.bvh.Model.Hips.Chest.LeftCollar.LeftShoulder.LeftElbow.LeftWrist.Seg;
};
DriverPos = {0,0,0};
DriverVel = {0,0,0};
CType = {Soft, Soft, Soft};
Reaction.Type = {Off, Off, Off};
};

AnyKinEqSimpleDriver M8 = {
AnyKinLinear lin = {
AnyRefFrame &ref1 = Main.HumanModel.BodyModel.Right.ShoulderArm.Seg.Clavicula.scj;
AnyRefFrame &ref2 = Main.MyModel.ModelEnvironmentConnection.bvh.Model.Hips.Chest.RightCollar.Seg;
};
DriverPos = {0,0,0};
DriverVel = {0,0,0};
CType = {Soft, Soft, Soft};
Reaction.Type = {Off, Off, Off};
};

AnyKinEqSimpleDriver M9 = {
AnyKinLinear lin = {
  AnyRefFrame &ref1 = Main.HumanModel.BodyModel.Right.ShoulderArm.Seg.Humerus.gh;
  AnyRefFrame &ref2 = Main.MyModel.ModelEnvironmentConnection.bvh.Model.Hips.Chest.RightCollar.RightShoulder.Seg;
  };
DriverPos = {0,0,0};
DriverVel = {0,0,0};
CType = {Soft, Soft, Soft};
Reaction.Type = {Off, Off, Off};

};
AnyKinEqSimpleDriver M10 = {
AnyKinLinear lin = {
AnyRefFrame &ref1 = Main.HumanModel.BodyModel.Right.ShoulderArm.Seg.Ulna.fe;
AnyRefFrame &ref2 = Main.MyModel.ModelEnvironmentConnection.bvh.Model.Hips.Chest.RightCollar.RightShoulder.RightElbow.Seg;
};
DriverPos = {0,0,0};
DriverVel = {0,0,0};
CType = {Soft, Soft, Soft};
Reaction.Type = {Off, Off, Off};
};

AnyKinEqSimpleDriver M11 = {
AnyKinLinear lin = {
AnyRefFrame &ref1 = Main.HumanModel.BodyModel.Right.ShoulderArm.Seg.Hand.Hand;
AnyRefFrame &ref2 = Main.MyModel.ModelEnvironmentConnection.bvh.Model.Hips.Chest.RightCollar.RightShoulder.RightElbow.RightWrist.Seg;
};
DriverPos = {0,0,0};
DriverVel = {0,0,0};
CType = {Soft, Soft, Soft};
Reaction.Type = {Off, Off, Off};
};

AnyKinEqSimpleDriver M12 = {
AnyKinLinear lin = {
AnyRefFrame &ref1 = Main.HumanModel.BodyModel.Trunk.SegmentsLumbar.PelvisSeg.PelvisSacrumJntNode;
AnyRefFrame &ref2 = Main.MyModel.ModelEnvironmentConnection.bvh.Model.Hips.Seg;
};
DriverPos = {0,0,0};
DriverVel = {0,0,0};
CType = {Soft, Soft, Soft};
Reaction.Type = {Off, Off, Off};
};
AnyKinEqSimpleDriver M13 = {
AnyKinLinear lin = {
AnyRefFrame &ref1 = Main.HumanModel.BodyModel.Left.Leg.Seg.Thigh.HipJoint;
AnyRefFrame &ref2 = Main.MyModel.ModelEnvironmentConnection.bvh.Model.Hips.LeftHip.Seg;
};
DriverPos = {0,0,0};
DriverVel = {0,0,0};
CType = {Soft, Soft, Soft};
Reaction.Type = {Off, Off, Off};
};
AnyKinEqSimpleDriver M14 = {
AnyKinLinear lin = {
AnyRefFrame &ref1 = Main.HumanModel.BodyModel.Left.Leg.Seg.Shank.KneeJoint;
AnyRefFrame &ref2 = Main.MyModel.ModelEnvironmentConnection.bvh.Model.Hips.LeftHip.LeftKnee.Seg;
};
DriverPos = {0,0,0};
DriverVel = {0,0,0};
CType = {Soft, Soft, Soft};
Reaction.Type = {Off, Off, Off};
};

AnyKinEqSimpleDriver M15 = {
AnyKinLinear lin = {
AnyRefFrame &ref1 = Main.HumanModel.BodyModel.Left.Leg.Seg.Foot.AnkleJoint;
AnyRefFrame &ref2 = Main.MyModel.ModelEnvironmentConnection.bvh.Model.Hips.LeftHip.LeftKnee.LeftAnkle.Seg;
};
DriverPos = {0,0,0};
DriverVel = {0,0,0};
CType = {Soft, Soft, Soft};
Reaction.Type = {Off, Off, Off};
};
AnyKinEqSimpleDriver M16 = {
AnyKinLinear lin = {
AnyRefFrame &ref1 = Main.HumanModel.BodyModel.Right.Leg.Seg.Thigh.HipJoint;
AnyRefFrame &ref2 = Main.MyModel.ModelEnvironmentConnection.bvh.Model.Hips.RightHip.Seg;
};
DriverPos = {0,0,0};
DriverVel = {0,0,0};
CType = {Soft, Soft, Soft};
Reaction.Type = {Off, Off, Off};
};
AnyKinEqSimpleDriver M17 = {
AnyKinLinear lin = {
AnyRefFrame &ref1 = Main.HumanModel.BodyModel.Right.Leg.Seg.Shank.KneeJoint;
AnyRefFrame &ref2 = Main.MyModel.ModelEnvironmentConnection.bvh.Model.Hips.RightHip.RightKnee.Seg;
};
DriverPos = {0,0,0};
DriverVel = {0,0,0};
CType = {Soft, Soft, Soft};
Reaction.Type = {Off, Off, Off};
};
AnyKinEqSimpleDriver M18 = {
AnyKinLinear lin = {
AnyRefFrame &ref1 = Main.HumanModel.BodyModel.Right.Leg.Seg.Foot.AnkleJoint;
AnyRefFrame &ref2 = Main.MyModel.ModelEnvironmentConnection.bvh.Model.Hips.RightHip.RightKnee.RightAnkle.Seg;
};
DriverPos = {0,0,0};
DriverVel = {0,0,0};
CType = {Soft, Soft, Soft};
Reaction.Type = {Off, Off, Off};
};

//Ankle driver for right leg
  AnyKinEqSimpleDriver AnkleDriverRight={
    //AnyKinMeasureOrg &ref1=...HumanModel.Interface.Right.AnklePlantarFlexion;
    AnyKinMeasureOrg &ref2=...HumanModel.Interface.Right.AnkleEversion;
    DriverPos = pi/180*{.JntPos.Right.AnkleEversion};  
    DriverVel = pi/180*{.JntVel.Right.AnkleEversion};  


    Reaction.Type={Off};
  };

  //Ankle driver for left leg
  AnyKinEqSimpleDriver AnkleDriverLeft={
    //AnyKinMeasureOrg &ref1=...HumanModel.Interface.Left.AnklePlantarFlexion;
    AnyKinMeasureOrg &ref2=...HumanModel.Interface.Left.AnkleEversion;
    DriverPos = pi/180*{.JntPos.Left.AnkleEversion};  
    DriverVel = pi/180*{.JntVel.Left.AnkleEversion}; 
    Reaction.Type={Off};
  };

};

// End of BVHdrivers.any file

Sorry for this inconvenience, since the forum system does not allow me to attach my model.
Could you please take a look at my model again and help me solve the kinematic problem of this model?
I am deeply appreciated!

Cathy

Hi Cathy,
the problem is that the two models are quite different, if you visualize the reference frames for the drivers this is obvious. So a first step is to modify each marker to make a better fit to the topology of the bvh model. But I guess the more promising way is to adjust the CreateMarker class of the new gait models to optimise the position of the reference frames like its done with the markers in these gait models. I hope I will have some time soon to look into it, but give it a try.
Best regards,
Sebastian

Hi, Sebastian,

Thanks for your support. I will give it a try first. Hope it works fine!

Sincerely,

Cathy

Hi Cathy,
I did some prep for your model. The basic idea is to use the same approach as in the normal C3d driven gait models. I changed the Markerclass. Have a look in the ModelSetup file, here you have to define the Markers, I did it for the lower extremity, you have to do it in a similar manner for the trunk and the upper extremity. There are some additional Drivers defines (TrunkDrivers.any) these have to be removed once you have established the Trunk connection. Then it should be possible to optimize some markerpositions and segment lengths. It may need some tweaking, but at least its a starting point :wink:
Best regards,
Sebastian

Hey, Sebastian,

Much much appreciated for your warm help!

I did the following as what you said:
(1) in the “BodyPartsSetup2.any”: chose Right_Arm ==1, Left_Arm ==1
(2) Commented out “TrunkDrivers.any”
(3) in the “ModelSetup.any”: I defined the markers left, although not optimized presently.

But, the problem comes with loading about the “ScalingNode” in the “CreateMarkerClassTD.any” file.

If I did not choose left and right arms in the bodypartssetup2, there is no such problem.

==================
GaitLowerExtremity.main.any
Scanning…
Parsing…
Constructing model tree…
ERROR(SCR.PRS9) : C:/U…s/E…2/D…p/Y…n/A…2/A…n/E…s/B…2/ModelSetup.any : Defined At : C:/U…s/E…2/D…p/Y…n/A…2/A…n/E…s/B…2/CreateMarkerClassTD.any : ‘ScalingNode’ : Unresolved object

Please advise, then I will optimize the markers’ locations.

Thanks a lot!

Cathy

Hi Cathy,
A different Markerclass is needed for the trunk. The CreateMarkerTD is only for the TD legs.
Best regards,
Sebastian

Hey, Sebastian,

With your direction, I used my own BVH file data from our FAB system,which included fewer joints(only 15): Hips,head,
spine, (left/right) arm,forearm,hand,upleg,leg and foot.

I did as what you suggested: use createmarker and createmarkerTD class to create the markers as very much close to the joints in BVH file. I also changed the segment lengths in the “TrialSpecificData.any” file and “Mannequin.any” file to optimize the locations.

But I still have the problem:

===========================
Position analysis failed : 708 independent constraints and 714 unknowns
- attempts to continue (attempt no. 10)
Constraint no. #3 in ‘Main.ModelSetup.bvh.Model.Hips.Driver’ above error tolerance 0.000001, error = 1.666830.
Constraint no. #4 in ‘Main.ModelSetup.bvh.Model.Hips.Driver’ above error tolerance 0.000001, error = 0.263577.
Constraint no. #5 in ‘Main.ModelSetup.bvh.Model.Hips.Driver’ above error tolerance 0.000001, error = 0.386964.
Constraint no. #0 in ‘Main.ModelSetup.bvh.Model.Hips.Spine.Driver’ above error tolerance 0.000001, error = 0.009443.
Constraint no. #1 in ‘Main.ModelSetup.bvh.Model.Hips.Spine.Driver’ above error tolerance 0.000001, error = 0.512831.
Constraint no. #2 in ‘Main.ModelSetup.bvh.Model.Hips.Spine.Driver’ above error tolerance 0.000001, error = 0.747168.
Constraint no. #0 in ‘Main.ModelSetup.bvh.Model.Hips.Spine.Head.Driver’ above error tolerance 0.000001, error = 0.101373.
Constraint no. #1 in ‘Main.ModelSetup.bvh.Model.Hips.Spine.Head.Driver’ above error tolerance 0.000001, error = 0.320177.
Constraint no. #2 in ‘Main.ModelSetup.bvh.Model.Hips.Spine.Head.Driver’ above error tolerance 0.000001, error = 0.295573.
Constraint no. #2 in ‘Main.ModelSetup.bvh.Model.Hips.Spine.LeftArm.Driver’ above error tolerance 0.000001, error = 1.265620.
Constraint no. #2 in ‘Main.ModelSetup.bvh.Model.Hips.Spine.RightArm.Driver’ above error tolerance 0.000001, error = 1.265620.

=========================

If you have time, could you please take a quick look at my attached model? Thanks!

Sorry for my pushing you to help me with this, because I have to figure out whether we can use this method for my dissertation research.

Hi Cathy,
before I have time to look at the actual problem: What is it that you wanna acieve with your thesis? Surely this bvh data has some limitations for the use with AnyBody. Also with respect to the accuracy of the data.
Best regards,
Sebastian

Hi, Sebastian,

That is what I am concerned. Since VICON system can only be established in a laboratory setting, we were wondering to use VICON system to validate the portable system, FAB system and EMG, to achieve statistically reasonable result as those from using VICON.

So the methods were designed to use the c3d data file format from VICON and bvh data file format as input, separately, into AnyBody modeling system, to run the kinematics and inverse dynamic analysis. Then we would use statistical analysis tool to compare the kinematics and kinetics output. At least the kinematics measurements, like joint angles, should be statistically the same. If the muscle activity from bvh input is not enough or precise, we will use EMG-assisted technique to get the muscle activity of sample muscles, in the neck-shoulder region, and trunk spinal.

Is it difficult to get the good muscle activity result of neck-shoulder muscles just with the input of bvh file with ours, 15 joints data, when I choose trunk_neck == 1? If difficult, I think the EMG system should be able to assist with to get the muscle activity.

Can we use the VICON with AnyBody to validate the FAB with AnyBody, at least for validating the kinematics output?

Thank you so much!

Cathy