Hi Pierre,
This sounds interesting thanks for the info.
If the modifcations works out out well please consider sharing the modifications, it sounds as a good improvement to AMMR.
Best regards
Søren
Hi Pierre,
This sounds interesting thanks for the info.
If the modifcations works out out well please consider sharing the modifications, it sounds as a good improvement to AMMR.
Best regards
Søren
Hi Soren,
Sharing is definitely my intention, along with improving the model.
I re-tried with wrapping surfaces but it is difficult to get the real shape. So I came back with the artificial rake.
Using fluoroscopy images, I approximated the line of action of the middle deltoid during abduction. Please look at the two sets of images attached. You will see that before 90° or so, the distance between the centre of rotation of the humeral head and the via point does not vary much. After 90°, the distance increases in both the X and Y directions of the humerus. From what I see, this is mainly due to the thickening of the deltoid due to its shortening and because the contact with the humeral head slowly disappear.
With that behavior in mind, I played with the values in the drivers and I think I might have found something interesting. In fact, I added a negative acceleration in both the X and Y directions of the linear measure between the rake and the humerus, as follows:
// AnySphericalJoint DeltoidMuscleConnectorJnt ={
// AnyRefNode &ref1=…Seg.Humerus.DeltoidConnectorCenter ;
// AnySeg &ref2=.DeltoidMuscleRotControlSeg;
// };
AnyKinLinear DeltoidMuscleConnectorLin = {
AnyRefNode &ref1=…Seg.Humerus.DeltoidConnectorCenter ;
AnySeg &ref2=.DeltoidMuscleRotControlSeg;
Ref = 0;
};
AnyKinEqSimpleDriver DeltoidMuscleConnectorLinCon = {
AnyKinMeasure &ref = .DeltoidMuscleConnectorLin;
DriverPos = {0,0,0};
DriverVel = {0,0,0};
DriverAcc = {0.0006,-0.0005,0.0005};
};
AnyKinEqSimpleDriver LinCom2Drv={
AnyKinMeasureOrg &ref=.ScapulaDeltoidMuscleConnectorRotY;
DriverPos=pi/180*{-10};
DriverVel=pi/180*{-10/Main.Study.tEnd};
Reaction.Type={Off};
};
Note that in order to obtain the same muscle geometry as I do, you must use the axis sequence y-z-y for the rotations of the scapula and clavicle with the regression coefficients.
These values are good for abduction and scapular plane elevation, but not for flexion. For flexion, the following changes must be made :
AnyKinEqSimpleDriver DeltoidMuscleConnectorLinCon = {
AnyKinMeasure &ref = .DeltoidMuscleConnectorLin;
DriverPos = {0,0,0};
DriverVel = {0,0,0};
DriverAcc = {0.000,-0.0005,-0.0004};
};
AnyKinEqSimpleDriver LinCom2Drv={
AnyKinMeasureOrg &ref=.ScapulaDeltoidMuscleConnectorRotY;
DriverPos=pi/180*{-10};
DriverVel=pi/180*{0};
Reaction.Type={Off};
};
I think that it would be possible to determine the right translations in terms of the elevation plane, but I cannot figure how to program it for now.
What do you think ?
Regards.
Pierre
Hi again folks,
I gave another try to the wrapping method. I used one ellipsoid on the humeral head and 7 concentric cylinders that position themselves according to the glenohumeral rotations. These cylinders are like fingers that tend to preserve the bulky shape of the deltoid and the curved shape of the fibres. The fibres are also allowed to unstick from the elllipsoid when the elevation angle is high.
At first sight, it seems to give more concordant estimations of muscles lines of action, muscles forces and contact forces (magnitude and orientation) than with the artificial rake.
You will find the files enclosed with this message.The method is in an early version and needs to be refined more. For example, there is some fibres sliding that i have to get rid (e.g. scapular deltoid 1 & 2). Also, I’m still not sure of which drivers must be “On” or “Off” (ArtificialRakeForDeltoidMuscle.any). You may want to check that on your side. Finally, I still have a penetration of three deltoid fibres in the cylinders at the end of abduction.
I started from the BergmannGH in the repository. You can replace the one that I sent you and also replace the files located in the Arm folder that is also included with this message.
Please let me your feedback so that we can move the thing forward.
Regards.
Pierre
Hi Pierre,
Sorry for the delay here are some replies,
Thanks for the images they look really informative.
For the first posting:
It is possible that accelerations can be tuned in a way that allows the rake to move in a good way for this application, but i think it will be difficult to use this approach in general, because the rake motion will depend on the analysis time, the more time the more it will move away.
For the second positng:
I think it migth be a good ida to let the fibers loose from the rake when the elevation is high enough. We have also discussed this way of creating the model but never really tried it out, so it sounds as a good approach, but i think the spherical joint should remain unchanged.
Concerning which dof on the rake are carried or not i think changing the model from using via points to using the wrapping surfaces located on the rake should not lead to changes on these reactions.
Best regards
Søren
Hi Soren,
Do you approve this new method in general? I think ou should test the model and give me your feedback on it.
I would really appreciate it
Thank you
Pierre
Hi Pierre,
I tried to load the model but had some problems.
I used AMMR1.4.1… not sure if this is correct? please always state which AMMR it runs with
I copied in the files into the arm folder and the files into the bergman model
The uniform scaling law is used but there seem to be no anthropometric data for the subject? so i swicthed to the general scaling laws instead
It complained on some of the output from the gh joint so i excluded the two lines from the main file.
But then it failed in kinematics missing three drivers?
I looked in the driver file and added three on the sc joint and it was running.
So how does it look…
I think the concept is ok except for the accelleration part of the rake, like i wrote previously, i do not see how this can be general applicable. I like the possibility for the muscle to be release from the rake, for high elevations.
It would also be interesting to see how it works for other kinematic situations, i am a little worried what happens when internal/external rotations are non zero.
So i think the model has potentional, but it is always important to test for many different situations.
Best regards
Søren
Hi Soren,
Sorry for the errors, I was not expecting this. It was AMMR 1.4.1 as well.
Actually, this is not the model with the rake with acceleration. It is the one with the ellipsoid and cylinder surfaces. If you want it to work well, you have to turn On the Scapular rhythm and get rid of the SC constraint. At the beginning of the main file you have a global variable for the cylinder plotting (Cyl or a similar name). Please ensure that it is equals to 1, so you can see the concentric cylinders. Has you may see in the new ArtificialRakeForDeltoidMuscle.any file, there are no more via points. I used to segments, one for the ellipsoid on the humerus and one for the cylinders. They do not move the same way.
I need a feedback on this method Particularly look at the results and the orientation of the glenohumeral resultant force, which from my opinion is more concordant then with the previous deltoid rake. You can also use different elevation angles (ElevPlane global variable in the main file). The algorithm is supposed to work for elevation angles between 0 to 90 deg. However, they might be some fibres penetrations at the end of motion that I still need to get rid of.
Regards.
Pierre
Hi Pierre,
I have been running the model now with the rhythm switched in and it looks better.
Concerning if the direction of the force is ok or not, have you tried to compare this with measured data? this would make it easier to judge if it ok or not and it is better than before.
Best regards
Søren
Hi Soren,
I’m actually in the process of comparing the estimations from this method with literature data. I plan to compare both the muscular activation and the glenohumeral contact force.
I should come back to you soon with the results.
Concerning the drivers in the new ArtificialRake folder, I’m still trying to figure which ones should be turned ON or OFF with the new method :
If a driver is set to ON, does it means that the force that is produced in this driver is transfer to the segment to which it is attached ?
Pierre
Hi Soren,
There might be another method to increase the realism of the deltoid pathway. In a previous work, a student used a new method called the “linked-plane Obstacle-set Algorithm” to simulate the deltoid. The work is not on the form of a journal paper, but rather in the form of a thesis. Here is the title :
Bo Xu (2008)A Linked-plane Obstacle-set Algorithm for Modeling Broad Muscle Paths: Application to the Deltoid Muscle
This method is interesting because it avoids the sliding of the fibers along the wrapping sphere and account for tissue connectivity by using a fixed angle between each fiber. However, from what I see in this method, each deltoid fiber has its own wrapping sphere, which is not rigidly fixed to the humerus. Also, the wrapping spheres seems to get smaller from the most anterior fiber towards the most posterior fiber.
As well, if such method was going to be reproduced in AnyBody, this would require individual segments for each deltoid fibre. Is there a way to reproduce such algorithm in AnyBody without sacrificing computational performance and robustness ?
Pierre
Hi Pierre,
Sorry for the slow reply.
Here are some answers,
If the driver is on there will be a reaction present in the joint it is acting on. So this reaction will be transferred to the segments the joint is connecting.
Thanks for the reference, i took a quick look at it and it looks interesting, i think that in principle it is not too different from the original rake model if the rotation of these had been driven in a way that would give the smallest collective distance of all the muscle elements.
Best regards
Søren
Hi Soren,
Don’t be sorry for the slow answer. You must have tons and tons of threads to answer (excluding mine) and I’m a really patient guy :).
Something interesting with the method used by Xu is that it uses a wrapping sphere and a path plane for each fiber, which move using specific constraints. This movements I think helps to better reproduce the real shape of the deltoid and avoids unwanted sliding of the fibers on the surface. Moreover, this deltoid model has been optimized (position of the sphere and angles between path planes) by comparing the moment arm and length of each fiber with experimental data of the VHP specimen.
So my feeling is that this model is more realistic compared to the actual model in AnyBody. I’m actually asking permissions to use the content of this work. I want to reproduce it in AnyBody and estimate of forces that I get with it, which has not been done yet. To replicate this method in AnyBody, a wrapping cylinder has to be used in conjunction with the wrapping sphere, in order to force the fiber to stay in the path plane (i.e. avoid fiber sliding). From my experience with AnyBody, this requires at least three independant segments per fiber, in order to reproduce the same constraints imposed to the wrapping surfaces (sphere and path plane). I am aware that this makes a lot of segments if 12 deltoid fibers are to be simulated, so I might request your help to minimize the number of segments in this model.
Regards.
Pierre
Hi Pierre,
It sounds interesting if it will be possible to implement this method in AnyBody, but it sounds as a lot of cylinders will be needed.
I have just got the idea to use the FDK solver to determine the position of the rake in the model and i have done a small model to illustrate the setup, please see attachment.
The idea is that the rake dof is free to rotate and its rotation is controlled by the FDK solver. To introduce some elasticity into the model the two SP lines has been equipped with springs… … The next step would be to read out the position of the FDK dof in the model and use it as driver for the DOF in an equivalent model with no FDK and real muscles.
So it is a sketch/hack model and it is just an idea… maybee you can use it.
Best regards
Søren
Hi Soren,
Thank you for your time spent in this model. Of course it makes a lot of cylinders and segments. However, my opinion is that indivisualizing each fiber is whorted for the simulation of the deltoid. This muscle is by far the most complex muscle of the upper arm and even of the whole body, given its wide origin its narrow insertion and the large ROM of the upper body.
I will have a look at your model and come back to you soon. I already tried it few months ago but I did not find the right way to constrain it. However, I feel that your method will only give a valid rake kinematics for the movement involved in its computation with the FDK. Each time that you will simulate a new movement, the rake’s kinematics will have to be computed again.
Regards
Pierre.
Hi Pierre,
I agree that this is mostlike the most challenging muscle we have.
You are right that this model will be cumbersome to work with, it will require a two step approach to find the rake motion and then to export it, and if the motion is changed the rake motion will need to be re-exported this is not very elegant…
Best regards
Søren
Hi Soren,
I feel that you are searching for a realistic way to simulate the deltoid without sacrificing model robustness and efficiency, which characterize the actual rake.
I tried your method with the complete 3D shoulder model and I have some difficulties. I guess that the DOF that you want to put on the FDK is the “LinCom2Drv” driver of the artificial rake, is that it ? If I do so while using the SPLine of the deltoid fibers as AnyForce objects with a stiffness of 100 N/m, the model tolds me that there are 4 redundant constraints in the model. Thereafter, after the inverse dynamics analysis is done, the position of the DOF did not really change. Another thing that I see with this method is the v-shape which is not likely to be corrected while allowing the rake to rotate about the Y axis.
If you have the time to try it on your side, it would be nice to know what I’m doing wrong.
Pierre
Hi Pierre,
I did not have time to try it out,
The DOF that the FDK is applied on needs to be with no reactions on, could this be the problem?.. otherwise the FDK will not “feel” the stiffness of the springs.
Best regards
Søren
Hi Soren,
The reaction type of the LinCom2Drv is OFF.
Take your time to try it in the complete model. I am not in a hurry.
Pierre
Hi Pierre,
I am sorry but i can not promise when i will be able to preform this test test myself, I am afraid it will not be in near future.
Best regards
Søren
Hi Soren,
No problem ! I understand. I just had the permissions that I needed to use the content of the thesis which presented a new deltoid geometry simulation (Xu et al. 2008). I will thus probably work to publish a paper covering the implementation of this new method in the AnyBody shoulder model, which is mostly completed.
Thank you.
Pierre