In #17 I made muscle paths from my own geometric formulation and then used the values directly from Gerritsen, K. G. M., Bogert, A. J. van den, Hulliger, M., & Zernicke, R. F. (1998). Intrinsic Muscle Properties Facilitate Locomotor Control—A Computer Simulation Study. Motor Control, 2(3), 206–220. https://doi.org/10.1123/mcj.2.3.206 Table 1.
Ton offered these comments in #17 which need to be addressed:
It is very important to have the peak isometric moment at the correct joint angle, compared to human strength tests. The Lslack of the tendons must be adjusted to achieve that. The Lslack from the Gerritsen paper was based on the paths with constant moment arms, so may need adjustment. Here is how to do that. If you want the muscle to produce its highest force at angles q. (1) calculate musculotendon length Lm(q), (2) Subtract the optimal fiber length (Lceopt) to get the desired tendon length Lsee. (3) calculate Lslack = Lsee/(1+umax), where umax is the tendon stiffness parameter, the strain at Fmax, usually assumed to be 0.04 or 0.05. In the muscle paths, try to make their length anatomically realistic, so you do not end up with Lslack values that are unrealistic and make the tendon too short (stiff) or too long (soft).
You will need tests to verify that the muscles are working correctly. I always simulate maximal isometric and isokinetic joint moments. Coding of isometric and isokinetic tests is inevitably ugly, because you're using a subset of the model equations. Here you can see how that's done: https://github.com/mad-lab-fau/BioMAC-Sim-Toolbox/blob/bf3b4ebd9c7deb52d1d0c56305005e7d6885ba1e/src/tests/Gait2dcTest.m#L714 . The "hackish" part is in the contraction_equilibrium equation (F(Lce)=0). Lce is a subset of the state variables x, and F is a subset of the full implicit model dynamics f(x,xdot,u)=0. The code assumes that the first 2*Ndof equations and states are multibody dynamics, and the next Nmus states and equations are Lce and contraction dynamics.
I don't really have an opinion on the muscle paths. A 2D model is already a simplification, so I don't worry about it there, and I use constant moment arms. Which is equivalent to wrapping around circles that are centered at the joint center. You do need to be able to cite a source, though. For muscle length as a function of angles, I cite papers such as https://pubmed.ncbi.nlm.nih.gov/2079066/. Moment arms are the gradient of these length functions. For 3D models, I have generated length functions by regression on lengths and moment arms from an existing path-based model (e.g. Delp 1990). If you make your own path-based model, you would need to describe the source or data it's based on.
One thing to consider: if your path is represented by an algebraic function Lm(q), that is sufficient for muscle-skeleton coupling, but the joint reaction forces won't see the compressive load generated by muscles. Only the path-based model has that.
In #17 I made muscle paths from my own geometric formulation and then used the values directly from Gerritsen, K. G. M., Bogert, A. J. van den, Hulliger, M., & Zernicke, R. F. (1998). Intrinsic Muscle Properties Facilitate Locomotor Control—A Computer Simulation Study. Motor Control, 2(3), 206–220. https://doi.org/10.1123/mcj.2.3.206 Table 1.
Ton offered these comments in #17 which need to be addressed: