I have a general question wrt gait analysis. Suppose I have a whole body model, and I am interested in understanding the impacts of various motions on his joint forces. I am planning to start from the Mannequin provided in AnyBody, and drive it using various c3d files I can find in AMMR (i.e., fast walking, slow walking, running etc.). Any suggestion about the feasibility of this approach? The first thing I think I need to figure out is that I need to scale the generic gait data I can find by matching the lengths and end positions of the segments of my interest.
I understand that typically we should do parameter optimization and inverse dynamics. The segment lengths are first estimated, then optimized by the motion data. For my case, however, I have higher confidence for the accuracy of the segment length than that of the motion data (which is from an independent study). I don't want the segment length to be changed but I do want the c3d marker locations to be changed according to the segment length. Therefore I am not sure if the optimization step is actually helpful or even needed. I am thinking of the following two approaches:
change marker initial locations in the generic c3d data in Markers.any so that the model has an appropriate segment length (see the attached picture). Then only do inversedynamics to calculate joint/muscle forces without optimization. Or;
Modify the trajectory of the markers in C3D file and generate a new C3d based on generic C3d. Then do optimization+InverseStudy.
Let me know if I am on the right track to solve this problem. Any further suggestion will be greatly appreciated!
I guess I am still a little confused about this optimization process. I followed the lesson 4 of the tutorial "making things move", can you let me know if my observations/conclusions are correct?
There are two types of uncertainties when we try to use c3d data to drive our model. The first comes from the uncertainty of the joints locations ( and subsequently segment length); and the second comes from the uncertainty of the marker locations relative to the segment (or bone).
To account for above problems, ParameterOptization can adjust the coord. of the joints (the first type of uncertainty), or the coord. of SOME of the markers (the second type of uncertainty), by minimizing the distance between nodes and markers. However, there is no defined direction to drive this optimization, i.e., both joint locations AND marker locations will be adjusted in a simultaneous fashion, instead of markers-> node or nodes-> markers, is that correct?
For my case, my assumption is that the segment length (albeit the joint locations) are known, therefore I should set OptimizeAnthropometricsOnOff as off, as you suggested.
What's the criteria to measure the level of the optimization? Is it the distance between the markers (blue) and the nodes (red)? In the simpler tutorial (lesson 4) I can plot the objective function in ChartFX, but I cannot find the corresponding variable in the MoCap tutorial (lesson 7).
Our MoCapModel will optimize the human segment lengths and the marker locations on the segments. But it will not optimize the joint locations. The joint locations will be determined by the scaling function of a segment.
So MotionAndParameterOptimization process will adjust the segment lengths and the marker locations.
But in your case because you would like to believe your own measurements, you don’t need to optimize the segment lengths.
So you only need to optimize the marker locations.
The captured marker locations( blue spheres) will not be changed. Only the markers attached on the human segments(red spheres) will be optimized.
Those marker locations will be optimized in the directions of X, Y and Z. And the directions which is displayed in the green arrow will be only optimized.
Not to optimize the segment lengths, as I told you already, you can set all the values as ‘Off’ for the OptimizeAnthropometricsOnOff class template.
So MotionAndParameterOptimization process will adjust the segment lengths and the marker locations to minimize the sum of the distances between the captured markers(in C3D files) and the makers attached on the human segments.
Thanks for clarification. Apologies for too many questions - as a new user I found myself frequently get confused. Your replies and other users discussions are really helpful!
Our MoCapModel will optimize the human segment lengths and the marker locations on the segments. But it will not optimize the joint locations. The joint locations will be determined by the scaling function of a segment.
Thanks for clarification. I got confused because there seems to be some differences between the tutorial and your explanations. You suggested that the joint locations are determined by scaling instead of optimization. But the tutorial (lesson4, make things move) says: “There seems to be some unknown location of the joint center on the leg and possibly also of the marker points on the segment that we could either find by experimenting manually with the local coordinates of the points on the leg segment or, alternatively, ask AnyBody™ to find for us.” Then the tutorial shows how to use AnyOptKinStudy to find the precise locations of the revolute joint of the leg segment, and that of one marker. After reading this tutorial, I thought Anybody always determines both the joint locations and the marker locations via optimization (AnyOptKinStudy). I guess MoCapModel is simply set up differently.
So MotionAndParameterOptimization process will adjust the segment lengths and the marker locations.
But in your case because you would like to believe your own measurements, you don’t need to optimize the segment lengths.
So you only need to optimize the marker locations.
The captured marker locations( blue spheres) will not be changed. Only the markers attached on the human segments(red spheres) will be optimized.
Those marker locations will be optimized in the directions of X, Y and Z. And the directions which is displayed in the green arrow will be only optimized.
Not to optimize the segment lengths, as I told you already, you can set all the values as ‘Off’ for the OptimizeAnthropometricsOnOff class template.
Very clear. Thanks. I also found how to plot the difference between the measured marker positions and the corresponding nodes on the segment from MoCap: Main.Studies.ParameterIdentification.Output.ParameterOptimization.ObjectiveFunctionValue.
So MotionAndParameterOptimization process will adjust the segment lengths and the marker locations to minimize the sum of the distances between the captured markers(in C3D files) and the makers attached on the human segments.
Very clear. Thanks!
Another two questions if you don’t mind. Let me know if they should be posted in a different Forum:
if I have user-defined bones, how do I replace the generic ones with those subject-specific ones? Coordinate transformation problem is taken care of already;
I used the default configuration to calculate muscle forces then a FEA input file. This walking model starts from 1.54s, ends at 3.5s, with total 197 steps. By default Anybody writes all muscle / joint forces at each step, producing a xml file of 35MB, and an ABAQUS input file of 420 MB). How do I reduce the frequency of writing muscle forces so that I can keep the FEA input file manageable?