class: inverse, left, middle # Modélisation musculo-squelettique <hr> ## Concepts et intuitions <br> Romain Martinez KIN6839 2020 | 2020-02-21 --- # .header[Une popularité croissante] <img src="fig/modelling-interest.svg" width="80%" style="display: block; margin: auto;" /> .center.font90[ ```python "musculoskeletal" and ("simulation" or "modelling" or "modeling") ``` ] --- class: inverse, middle, clear # .nord9[1.] Qu'est-ce qu'un .nord9[modèle<br>musculo-squelettique] <hr> --- # .header[Un modèle du corps humain] Du point de vue de la biomécanique: $$ \text{humain} = \text{segments} + \text{articulations} + \text{muscles} $$ <br> Contraintes osseuses, articulaires et musculaires: .row[ .col-5[ Essentielles pour __comprendre__, __intervenir__ et __concevoir__ ] .col-1[ <br> ... <br> ] .col-5.right[ mais ne peuvent être mesurées de façon __directe__ et __non-invasive__ ] ] .cite.right[Finni, et al. (2000); Finni, et al. (1998); Bergmann, et al. (2007)] --- # .header[La modélisation musculo-squelettique] .row[ .col-8[ Permet d'estimer des mesures internes à partir de données __expérimentales__ ou __simulées__ .right.cite[Dao (2016)] __Modèle numérique__ > Représentation simplifiée d'un système. > Il est composé d'équations dérivées des lois physiques et biologiques. ] .col-4[ <img src="fig/borelli.png" width="100%" style="display: block; margin: auto 0 auto auto;" /> .center.cite[_De Motu Animalium_ (Borelli, 1680)] ] ] --- # .header[Composition d’un modèle musculo-squelettique] __Dynamique musculo-tendineuse__ Comment les muscles génèrent de la ~~force~~ puissance? <br> __Géométrie musculo-squelettique__ Comment les forces musculaires sont converties en moments articulaires? <br> __Dynamique articulaire__ Comment les moments articulaires sont convertis en mouvement? --- class: inverse, middle, clear # .nord9[2.] Dynamique musculo-tendineuse <hr> ## Comment les muscles génèrent de la ~~force~~ puissance? --- # .header[Composition d'une fibre musculaire] <img src="fig/actin-myosin.svg" width="100%" style="display: block; margin: auto;" /> --- # .header[La contraction musculaire] <img src="fig/contraction.svg" width="75%" style="display: block; margin: auto;" /> --- # .header[Le signal électromyographique] .row[ .col-5[ <br> <br> Sommation des potentiels d'action des unités motrices constituant le signal EMG brut ] .col-7[ <img src="fig/emg-signal.svg" width="100%" style="display: block; margin: auto;" /> ] ] --- # .header[Traitement du signal électromyographique] <br> <img src="fig/emg.svg" width="100%" style="display: block; margin: auto;" /> --- # .header[Trajectoire musculaire unidimensionnelle] <img src="fig/muscle-path.svg" width="100%" style="display: block; margin: auto;" /> .row[ .col-4.center.cite[Non-physiologique] .col-4.center.cite[Via-point] .col-4.center.cite[Objet de contournement] ] .card[ Les objets de contournements représentent des trajectoires plus physiologiques mais sont couteux (calcul et instabilité) .right.cite[Audenaert, et al. (2008)] ] --- # .header[Comportement mécanique musculaire] Modèle musculo-tendineux de Hill <img src="fig/hill-model.svg" width="80%" style="display: block; margin: auto;" /> .right.cite[Blümel, et al. (2012)] --- # .header[Comportement mécanique musculaire] Paramètres musculaires | Paramètre | Notation | |:-------------------------------------|:-------------:| | Force maximale isométrique | `\(F_0\)` | | Section transverse | `\(\text{PCSA}\)` | | Angle de pennation | `\(\theta\)` | | Longueur optimale | `\(L_0\)` | | Vitesse de raccourcissement maximale | `\(V_m\)` | | Longueur du tendon | `\(L_u\)` | Basés sur des mesures animales ou cadavériques .right.cite[Van Campen, et al. (2014); Horsman, et al. (2007)] --- # .header[Comportement mécanique musculaire] Effet du nombre de ponts actine-myosine susceptibles d'être formés sur la production de force musculaire <img src="fig/force-length.svg" width="100%" style="display: block; margin: auto;" /> .right.cite[Rassier, et al. (1999)] --- # .header[Comportement mécanique musculaire] Effet de la vitesse de formation des ponts actine-myosine sur la production de force musculaire <img src="fig/force-velocity.svg" width="80%" style="display: block; margin: auto;" /> .right.cite[Lee, et al. (2010)] --- class: inverse, middle, clear # .nord9[3.] L'approche directe <hr> ## De la commande neurale jusqu’au mouvement --- # .header[Étapes de l'approche directe] <img src="fig/direct-approach.svg" width="100%" style="display: block; margin: auto;" /> .right.cite[Pandy (2001)] | Paramètres | Notation | |:-----------|:--------:| | Activations musculaires | `\(a\)` | | Forces musculaires | `\(F_m\)` | | Moments articulaires | `\(\tau_{\text{mus}}\)` | | Accélérations segmentaires | `\(\ddot{q}\)` | | Vitesses segmentaires | `\(\dot{q}\)` | | Angles articulaires | `\(q\)` | --- # .header[Géométrie musculo-squelettique] Des _forces musculaires_ `\(F_\text{mus}\)` aux _moments articulaires_ `\(\tau_{\text{mus}}\)` <br> .font120[ `$$\tau_{\text{mus}}(q, \dot{q}, a) = -\frac{\partial l_{\text{mus}}}{\partial q} F_{\text{mus}}(q, \dot{q}, a)$$` ] <br> Ici, la matrice jacobienne des longueurs musculaires `\(l_{\text{mus}}\)` est multipliée par les forces musculaires `\(F_{\text{mus}}\)` --- # .header[Dynamique articulaire] Des _moments articulaires_ `\(\tau_{\text{mus}}\)` aux _accélérations segmentaires_ `\(\ddot{q}\)` Principe fondamental de la dynamique: <br> .font120[$$\ddot{q} = M (q)^{-1} \left( \tau_{\text{mus}} + C^t \lambda - N(q, \dot{q}) - G(q) \right)$$] <br> | Paramètres | Notation | |:-----------|:--------:| | Matrice de masse | `\(M\)` | | Vecteur des effets non linéaires | `\(N\)` | | Matrice des effets de la gravité | `\(G\)` | | Forces de contact | `\(C\)` | --- # .header[Intégration des accélérations segmentaires] Les vitesses `\(\dot{q}\)` et les orientations articulaires `\(q\)` peuvent ensuite être obtenues par intégrations successives <br> .font120[$$q = \int \dot{q} = \int \int \ddot{q}$$] --- class: inverse, middle, clear # .nord9[4.] L'approche inverse <hr> ## Du mouvement jusqu'à la force musculaire --- # .header[Étapes de l'approche inverse] <br> <br> <img src="fig/inverse-approach.svg" width="100%" style="display: block; margin: auto;" /> .right.cite[Pandy (2001)] --- # .header[Cinématique inverse par optimisation globale] `$$\min_{q} \sum_{m=1}^{n_m} \frac{1}{2} || \color{#800000}{P_m(q)} - \color{#006eb8}{E_m}||^2$$` <img src="fig/inverse-kinematics.svg" width="50%" style="display: block; margin: auto;" /> .right.cite[Lu, et al. (1999)] --- # .header[Dérivation des angles articulaires] Les vitesses `\(\dot{q}\)` et les accélérations segmentaires `\(q\)` peuvent ensuite être obtenues par dérivations successives <br> .font120[$$\ddot{q} = \frac{d}{dt} \dot{q} = \frac{d^2}{dt^2} q$$] --- # .header[Dynamique articulaire] Des _angles articulaires_ `\(q\)` et des _vitesses segmentaires_ `\(\dot{q}\)` aux _moments articulaires_ `\(\tau_{\text{mus}}\)` Principe fondamental de la dynamique: <br> .font120[$$\tau_{\text{mus}} = M(q) \ddot{q} + N(q, \dot{q}) + G(q) - C^t \lambda$$] --- # .header[Géométrie musculo-squelettique] Des _moments musculaires_ `\(\tau_{\text{mus}}\)` aux _forces musculaires_ `\(F_{\text{mus}}\)` .card[ Problème __complexe__ à cause de la redondance musculaire `$$n_{\text{muscles}} > n_{\text{ddl}}$$` ] <br> L'__optimisation statique__ répartit les forces musculaires pour que <br> `$$\tau_{\text{mus}} \; \text{approche directe} = \tau_{\text{mus}} \; \text{approche inverse}$$` --- class: inverse, middle, clear # .nord9[5.] Modélisation musculo-squelettique <hr> ## Limites --- # .header[De nombreuses hypothèses et simplifications] > _"All models are wrong, but some are useful"._ > .right.cite[George E.P. Box] <br> L'utilisateur doit reconnaitre les limites du modèle lors de la diffusion de résultats et discuter des impacts des simplifications <br> .card[ Le consensus actuel est qu'il existe encore un écart considérable entre les modèles et la réalité biologique ] --- # .header[Un continuum de complexité] <img src="fig/complexity-continuum.svg" width="60%" style="display: block; margin: auto;" /> .row.font90[ .col-5[ - Vitesse de calcul - Transparence ] .col-2[] .col-5[ - Fidélité aux systèmes réels ] ] .card.font90[ Il est recommandé d'éliminer la complexité non requise pour répondre à notre question de recherche .right.cite[Hicks, et al. (2015)] ] --- # .header[Personnalisation d'un modèle générique] Paramètres musculo-tendineux, inertiels ou anthropométriques: - Déterminés à partir d'imagerie, de mesures cadavériques ou animales .right.cite[Zatsiorsky (1983); McConville, et al. (1980)] - Mis à l'échelle pour que le modèle s'ajuste à l'anthropométrie du participant (régression) <img src="fig/scaling.svg" width="100%" style="display: block; margin: auto;" /> --- # .header[Ajustement de paramètres] La distribution des paramètres est souvent considérée uniforme et linéaire, quels que soient l'âge, le sexe et la condition. <img src="fig/force-scaling.svg" width="100%" style="display: block; margin: auto;" /> Il faut donc choisir un modèle similaire à notre échantillon ou l'ajuster (imagerie ou mesures anthropométriques). .right.cite[Wu, et al. (2016)] --- # .header[Ajustement de paramètres] Les paramètres musculo-tendineux resteront approximatifs .card[ Les longueurs et vitesses optimales musculaires sont supposées constantes. .right[ce qui n'est pas le cas en réalité .cite[Blemker, et al. (2005); Blemker, et al. (2007)]] ] <br> Les __études de sensibilité__ (type _Monte Carlo_) permettent d'identifier les paramètres qui influencent le plus notre modèle --- # .header[Validation et vérification d'un modèle] L'utilisateur doit s'assurer que le modèle est .row[ .col-3[__Validé__] .col-9[_Résoudre les bonnes équations_] ] .row[ .col-3[__Vérifié__] .col-9[_Résoudre les équations correctement_] ] .card[ Un modèle précédemment validé & vérifié ne l'est pas nécessairement pour notre application ] Un modèle personnalisé, vérifié et validé comportera toujours des incertitudes. Il faut décrire les limites et considérer les résultats avec scepticisme. .right.cite[Hicks, et al. (2015)] --- # .header[Limites spécifiques à l'approche directe] .row[ .col-3[__Avantages__] .col-9[ - Les données peuvent être simulées - L'objectif de la tâche peut être directement spécifié (_e.g._ minimiser le coût énergétique) ] ] .right.cite[Pandy (2001); Hicks, et al. (2015)] .row[ .col-3[__Inconvénients__] .col-9[ - Complexité numérique - Bruit et erreurs de mesures dans l'EMG: .font90[- électrode, épaisseur et impédance de la peau, _cross-talk_ musculaire] ] ] --- # .header[Limites spécifiques à l'approche inverse] .row[ .col-3[__Avantages__] .col-9[ - Moins d'hypothèses sont formulées - Rapidité - Données d'entrées communes (cinématique & forces externes) ] ] .right.cite[Pandy (2001); Hicks, et al. (2015)] .row[ .col-3[__Inconvénients__] .col-9[ - Propagation des erreurs de mesures dans la cinématique (dérivés) .font90[- erreurs systématiques, occlusions de marqueurs, artéfacts de tissus mous] - Co-contractions négligées ] ] --- class: inverse, middle, clear # .nord9[6.] Modélisation musculo-squelettique <hr> ## Une application en manutention au-dessus des épaules --- # .header[Pourquoi utiliser la modélisation en ergonomie?] Relation __Contraintes__ `\(\longleftrightarrow\)` __mouvement__ .row[ .col-8[ La simulation d'une tâche de travail en laboratoire permet de __contrôler__ des affectant le comportement moteur La majorité des études utilisent l'approche __inverse__ (.font90[moins complexe]) Certaines investigations nécessitent l'approche __directe__ (.font90[mouvement optimal ou conception de poste de travail]) ] .col-4[ <img src="fig/box-handling.svg" width="100%" style="display: block; margin: auto;" /> ] ] .right.cite[Hiley, et al. (2015); Pontonnier, et al. (2014)] --- # .header[La cinématique de l'épaule est problématique] .row[ .col-5[ L'épaule est __complexe__ ] .col-7[ Grande amplitude de mouvement Mouvements sous-cutanés des os ] ] <img src="fig/shoulder-muscles.svg" width="85%" style="display: block; margin: auto;" /> --- # .header[Les artéfacts de tissus mous] <img src="fig/soft-tissue-artifact.svg" width="70%" style="display: block; margin: auto;" /> .right.cite[Cutti, et al. (2005)] --- # .header[Amélioration de la cinématique de l'épaule] Ellipsoïde contraignant le plan de glissement de la scapula <img src="fig/ellipsoid.svg" width="65%" style="display: block; margin: auto;" /> .right.cite[Michaud, et al. (2016)] Contrainte de non-dislocation de l'humérus --- # .header[Utilisation de modèles génériques] .row[ .col-4[Il est recommandé d'utiliser] .col-8[ <br> - Des modèles génériques - Des codes de dynamiques multicorps existants (_OpenSim_) .right.cite[Delp, et al. (2007); Seth, et al. (2011); Wu, et al. (2016)] ] ] .card[ Attention à la personnalisation de modèles génériques (_e.g._ ajustement des forces maximales isométriques) .right.cite[Hicks, et al. (2015)] ] --- # .header[Utilisation de modèles génériques] .row[ .col-4[Il est recommandé d'utiliser] .col-8[ <br> - Des modèles génériques - Des codes de dynamiques multicorps existants (_OpenSim_) .right.cite[Delp, et al. (2007); Seth, et al. (2011); Wu, et al. (2016)] ] ] .card[ Attention à la personnalisation de modèles génériques (_e.g._ ajustement des forces maximales isométriques) .right.cite[Hicks, et al. (2015)] ] --- # .header[Simple > complexe] Pour estimer les contraintes musculo-squelettiques d'une tâche de travail, il est recommandé .row[ .col-12[ - De simplifier le modèle - Se concentrer sur la région ciblée par la question de recherche ] ] .card[ Cette simplicité est un avantage pour que la communauté puisse utiliser la modélisation dans des interventions occupationnelles ] --- # .header[Traitement par lots d'analyses musculo-squelettiques] `pyosim` ([GitHub](https://github.com/pyomeca/pyosim)) ```python from pathlib import Path import pyosim data = Path("data") for iparticipant in participants.glob('*'): * pyosim.Scale(iparticipant, ...) pyosim.InverseKinematics(iparticipant, ...) pyosim.InverseDynamics(iparticipant, ...) pyosim.StaticOptimization(iparticipant, ...) pyosim.MuscleAnalysis(iparticipant, ...) pyosim.JointReaction(iparticipant, ...) ``` --- # .header[Traitement par lots d'analyses musculo-squelettiques] `pyosim` ([GitHub](https://github.com/pyomeca/pyosim)) ```python from pathlib import Path import pyosim data = Path("data") for iparticipant in participants.glob('*'): pyosim.Scale(iparticipant, ...) * pyosim.InverseKinematics(iparticipant, ...) pyosim.InverseDynamics(iparticipant, ...) pyosim.StaticOptimization(iparticipant, ...) pyosim.MuscleAnalysis(iparticipant, ...) pyosim.JointReaction(iparticipant, ...) ``` --- # .header[Traitement par lots d'analyses musculo-squelettiques] `pyosim` ([GitHub](https://github.com/pyomeca/pyosim)) ```python from pathlib import Path import pyosim data = Path("data") for iparticipant in participants.glob('*'): pyosim.Scale(iparticipant, ...) pyosim.InverseKinematics(iparticipant, ...) * pyosim.InverseDynamics(iparticipant, ...) pyosim.StaticOptimization(iparticipant, ...) pyosim.MuscleAnalysis(iparticipant, ...) pyosim.JointReaction(iparticipant, ...) ``` --- # .header[Traitement par lots d'analyses musculo-squelettiques] `pyosim` ([GitHub](https://github.com/pyomeca/pyosim)) ```python from pathlib import Path import pyosim data = Path("data") for iparticipant in participants.glob('*'): pyosim.Scale(iparticipant, ...) pyosim.InverseKinematics(iparticipant, ...) pyosim.InverseDynamics(iparticipant, ...) * pyosim.StaticOptimization(iparticipant, ...) pyosim.MuscleAnalysis(iparticipant, ...) pyosim.JointReaction(iparticipant, ...) ``` --- # .header[Traitement par lots d'analyses musculo-squelettiques] `pyosim` ([GitHub](https://github.com/pyomeca/pyosim)) ```python from pathlib import Path import pyosim data = Path("data") for iparticipant in participants.glob('*'): pyosim.Scale(iparticipant, ...) pyosim.InverseKinematics(iparticipant, ...) pyosim.InverseDynamics(iparticipant, ...) pyosim.StaticOptimization(iparticipant, ...) * pyosim.MuscleAnalysis(iparticipant, ...) pyosim.JointReaction(iparticipant, ...) ``` --- # .header[Traitement par lots d'analyses musculo-squelettiques] `pyosim` ([GitHub](https://github.com/pyomeca/pyosim)) ```python from pathlib import Path import pyosim data = Path("data") for iparticipant in participants.glob('*'): pyosim.Scale(iparticipant, ...) pyosim.InverseKinematics(iparticipant, ...) pyosim.InverseDynamics(iparticipant, ...) pyosim.StaticOptimization(iparticipant, ...) pyosim.MuscleAnalysis(iparticipant, ...) * pyosim.JointReaction(iparticipant, ...) ``` --- class: inverse, left, middle # Quels sont les défis de validation spécifiques à votre projet de recherche? --- # .header[References] .font60[ Audenaert, A. et al. (2008). "Global optimization method for combined spherical-cylindrical wrapping in musculoskeletal upper limb modelling". En. In: _Comput. Methods Programs Biomed._ 92.1, pp. 8-19. Bergmann, G. et al. (2007). "In vivo glenohumeral contact forces-Measurements in the first patient 7 months postoperatively". In: _J. Biomech._ 40.10, pp. 2139-2149. Blemker, S. S. et al. (2007). "Image-based musculoskeletal modeling: applications, advances, and future opportunities". In: _Journal of Magnetic Resonance Imaging: An Official Journal of the International Society for Magnetic Resonance in Medicine_ 25.2, pp. 441-451. Blemker, S. S. et al. (2005). "Three-dimensional representation of complex muscle architectures and geometries". En. In: _Ann. Biomed. Eng._ 33.5, pp. 661-673. Blümel, M. et al. (2012). "Determining all parameters necessary to build Hill-type muscle models from experiments on single muscles". En. In: _Biol. Cybern._ 106.10, pp. 543-558. Cutti, A. G. et al. (2005). "Soft tissue artefact assessment in humeral axial rotation". En. In: _Gait Posture_ 21.3, pp. 341-349. Dao, T. T. (2016). "Rigid Musculoskeletal Models of the Human Body Systems: a Review". In: _J. Musculoskelet. Res._ 19.03, p. 1630001. Delp, S. L. et al. (2007). "OpenSim: open-source software to create and analyze dynamic simulations of movement". En. In: _IEEE Trans. Biomed. Eng._ 54.11, pp. 1940-1950. Finni, T. et al. (2000). "In vivo human triceps surae and quadriceps femoris muscle function in a squat jump and counter movement jump". En. In: _Eur. J. Appl. Physiol._ 83.4 -5, pp. 416-426. Finni, T. et al. (1998). "Achilles tendon loading during walking: application of a novel optic fiber technique". En. In: _Eur. J. Appl. Physiol. Occup. Physiol._ 77.3, pp. 289-291. ] --- # .header[References] .font60[ Hicks, J. L. et al. (2015). "Is my model good enough? Best practices for verification and validation of musculoskeletal models and simulations of movement". En. In: _J. Biomech. Eng._ 137.2, p. 020905. Hiley, M. J. et al. (2015). "Optimal technique for maximal forward rotating vaults in men's gymnastics". En. In: _Hum. Mov. Sci._ 42, pp. 117-131. Horsman, K. et al. (2007). "Morphological muscle and joint parameters for musculoskeletal modelling of the lower extremity". In: _Clin. Biomech._ 22.2, pp. 239-247. Lee, D. et al. (2010). "A survey of modeling and simulation of skeletal muscle". In: _ACM Trans. Graph._ 28.4, pp. 1-13. Lu, T. W. et al. (1999). "Bone position estimation from skin marker co-ordinates using global optimisation with joint constraints". En. In: _J. Biomech._ 32.2, pp. 129-134. McConville, J. T. et al. (1980). _Anthropometric relationships of body and body segment moments of inertia_. ANTHROPOLOGY RESEARCH PROJECT INC YELLOW SPRINGS OH. Michaud, B. et al. (2016). "Thorax ellipsoid optimization based on scapula movements' area improves kinematic reconstruction of the scapula". In: _Digital Human Modeling Congress_. , p. 26. Pandy, M. G. (2001). "Computer modeling and simulation of human movement". En. In: _Annu. Rev. Biomed. Eng._ 3, pp. 245-273. Pontonnier, C. et al. (2014). "Strengths and limitations of a musculoskeletal model for an analysis of simulated meat cutting tasks". En. In: _Appl. Ergon._ 45.3, pp. 592-600. Rassier, D. E. et al. (1999). "Length dependence of active force production in skeletal muscle". En. In: _J. Appl. Physiol._ 86.5, pp. 1445-1457. ] --- # .header[References] .font60[ Seth, A. et al. (2011). "OpenSim: a musculoskeletal modeling and simulation framework for in silico investigations and exchange". En. In: _Procedia IUTAM_ 2, pp. 212-232. Van Campen, A. et al. (2014). "A new method for estimating subject-specific muscle-tendon parameters of the knee joint actuators: a simulation study". In: _Int. j. numer. method. biomed. eng._ 30.10, pp. 969-987. Wu, W. et al. (2016). "Subject-specific musculoskeletal modeling in the evaluation of shoulder muscle and joint function". En. In: _J. Biomech._ 49.15, pp. 3626-3634. Zatsiorsky (1983). "The Mass and Inertia Characteristics of the Main Segments of the Human Body". In: _Biomech. Model. Mechanobiol._, pp. 1152-1159. ]