We are going to model walking on an AMTI two-belts treadmill (one plate in forward-one in back). Fortunately, the model works well with no error but the Inverse dynamics results are weird (specially tibialis anterior). I attached a video of simulation. the colour of tibialis anterior shows its unusual activation during stance phase which is completely wrong.
On the other hand, in the middle of stance phase, when foot starts to leave the first plate and enter the second one, two force vectors appear which provide an unwanted moment in the foot. It is seen during toe-off in which the force vector which relates to trailing leg assigned to leading leg wrongly and ruins the results (I attached two photos which show these events). These problems become even worth when two feet touch one force plate at the same time (you can see it in final seconds of video)
Could I ask how can I remove these problems please?
I used ForcePlateAutoDetection class template (I cannot use manual option because how can I define it when a foot is placed on both force plates at the same time?). we use Version 6.
I attached my model, video and photos here.
Your kind solving comments would be really appreciated.
I tried to look the c3d file in Mokka (http://biomechanical-toolkit.github.io/mokka/ ) and it looks to have the same vectors appearing on the same foot.
I think this is correct, it happens when the foot is on both plates, so one vector represents force from plate1 and the other from plate2.
The problem with the activations could come from the autodetection of when the foot is on the plate or not here it works with two ways to identify this. The foot needs to be on top of the plate and it needs to be moving slow enough so speed is to be below a threshold value.
The speed check is a problem in a treadmill scenario, since it should not check the speed against zero but against treadmill band speed. So the simplest way would be to alter the speed threshold when defining the force-plate i think that should be possible.
I think at the moment you may not be transmitting any force from plate to the feet because the speed is much higher than the default tolerance.
Once you have done that please check that the forces are transmitted correctly to the feet from the plate.
Many many Thanks Soren for the swift reply. very helpful
As I understand, I should change speed threshold against treadmill speed to define the time in which heel speed is similar to the treadmill. But the default threshold is 2.2. I know I should increase it gradually to find the right threshold for my model. But Can I ask if I will do it by try and error, how can I control it and ensure forces are transmitted correctly to the feet? which parameter shows me for example “X” threshold is the correct one?
That can be a little tricky, and requires a little background info:
[li]The forceplates are each a segment
[/li][li]It needs something to carry it no matter if it is contact with a limb or not
[/li][li]When in contact there is a very strong artificial muscle acting between plate and foot, when not in contact the muscle goes to the ground instead.
[/li][li]So when there is no limb in contact it will be carried by a NoContactMuscle when in contact forces will be transferred by InContactMuscle
[/li][li]These muscles are defined in the forceplate in the ContactDectionLimb1 and ContactDetectionLimb2.
[/li][li] To know if your velocity settings are ok, you will need to look at the S value of the NoContact and InContact muscles.
[/li][li] When the foot is on the ground you will want the InContactMuscle to be non-zero and vise versa.
Hope it made sense.
I am affraid the procedure to alter the velocity threshold will not work it may detect the foot to be in contact in the swing phase.
For this reason we have implemented a ground velocity vector in the newest version of AMMR for the GRF prediction, this has not been done yet in the force-plates.
In AMMR 2.1 it would have to be done in the file Tools/AnyMocap/ForcePlates/ContactDetection.any
for the lines
AnyVar WithinBoxAndVelBelowThreshold =WithinBox*iffun(ltfun(.P1Vel,VelThreshold),1,0);
AnyVar OutsideBoxOrVelHigherThanThreshold= iffun(WithinBoxAndVelBelowThreshold ,0,1);
I think these lines would need to altered so that the speed of the belt is subtracted from the P1Vel
Thanks for your message.
Let me first please to say what I did with my model yesterday.
After 10 hours tries and errors, I found these amounts eventually:
The force assignments are much better but still some spikes are seen in InContactMuscles’ S value (pic1).
By the way, Let’s ignore that spikes and focus on first four steps in which autodetection worked almost well. There are two problems which I couldn’t solve. Your assistance would be appreciated.
The results are wrong Even if autodetection works well in a time when the foot touches both plates at the same time (its shown in attached pic2). in this event, S values of InContactMuscles for both plates for that limb are not zero which show the detection worked well. But we have two force vectors which provide an unwanted moment in the ankle. This moment ruins the results. specially in the ankle. Is there any way to combine these two vectors together?
The results of left and right legs are quite different. The experiment condition is normal walking. So there shouldn’t be this much difference between left and right leg. I just wondering these amount of differences are wrong or not.
Your words are completely true. It detects the foot to be in contact in the swing phase sometimes. Its also very very time-consuming job to find right magnitudes for each subject/trial. But unfortunately, the version of my AnyBody is 6 which doesn’t have AMMR v2 (mine is AMMR v1.6). Can I use the new AMMR with my previous version? or I should pay for the maintenance? I cannot even download it.
Moreover, As I mentioned above, even if autodetection works well we have problems in two events; 1) when foot passes from the first plate to the second one and 2) when both feet touch the same plate.
Has any algorithm added to version 2 to solve these issues?
I will try to answer your questions one by one:
[li]In principle it is not wrong to have the two force vectors applied to the same foot. This is reflecting reality in this case the foot did touch both plates, thus they both measured. It would be possible to make a combined force out of the two forces and then apply this force, but if done correctly the human model should “feel” the forces in the exact same way. To combine the forces i would use the AnyForceMomentMeasure and the read out the force from both plates… but then you would need to remove the plates entirely and then apply this force manually… it would be some work to do.
[/li][li] Differences in the results between left and right can be many things, first candidate is the applied forces.
[/li]I would make a model with no muscles so disable the muscles then run the model and look at joint torques (JointMuscles) this gives, this is easier to understand than looking at the muscles.
The problem can be e.g.
[li]Forces plate calibration matrix (does the CoP look ok when there is only one foot on the plate)
[/li][li]Location of markers so that leg is “misplaced” corresponding to the force
Concerning AMS7: some of the steps towards making this easier has been taken already and we are constantly trying to improve the mocap models, among other things we are working on making the force plates easier to use in treadmills and hope to release new versions of the mocap models with this feature in near future. The models are released here https://github.com/AnyBody/anymocap and in AMMR.
The models associated with AMS7 does not run in AMS6 but some models may work though, but there may be parts of the models which are utilizing new functionality only available in AMS7