

{"id":151,"date":"2015-10-02T16:06:28","date_gmt":"2015-10-02T16:06:28","guid":{"rendered":"http:\/\/project.inria.fr\/softrobot\/?page_id=151"},"modified":"2016-03-03T15:50:58","modified_gmt":"2016-03-03T15:50:58","slug":"constraint-resolution-method","status":"publish","type":"page","link":"https:\/\/project.inria.fr\/softrobot\/documentation\/constraint-resolution-method\/","title":{"rendered":"Constraint Resolution Method"},"content":{"rendered":"<h1><strong>Static system<\/strong><\/h1>\n<p>This section details the formulation that is used to solve constraints in SOFA. During\u00a0each step i of the simulation, a linearization of the internal forces is computed:<\/p>\n<p align=\"center\">f(x<sub>i<\/sub>) \u2248 f(x<sub>i\u22121<\/sub>) + K(x<sub>i\u22121<\/sub>)dx \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0(1)<\/p>\n<p>where f provides the volumetric internal stiffness forces at a given position x\u00a0of the nodes, K(x) is the tangent stiffness matrix that depends on the actual position of the nodes and dx is the difference between consecutive positions in time dx = x<sub>i<\/sub>\u00a0\u2212 x<sub>i\u22121<\/sub>. The lines and columns that correspond to fixed nodes are removed from the system to improve the condition number of the matrix K. Static equilibrium (the sum of external and internal forces equal to zero) is sought at each step:<\/p>\n<p align=\"center\">\u2212K(x<sub>i\u22121<\/sub>)dx = p + f(x<sub>i\u22121<\/sub>) + J<sup>T<\/sup>\u00a0\u03bb \u00a0 \u00a0 \u00a0 \u00a0(2)<\/p>\n<p>where p represents the external forces (e.g. gravity) that are known and J<sup>T<\/sup>\u00a0\u03bb gathers the\u00a0contributions of the Lagrange multipliers. The next step consists in the projection of the FEM model equations\u00a0into the constraint space: the size of matrix K is often very large so an optimization\u00a0in the motion space would be computationally very expensive. Instead,\u00a0using the Schur complement of the constraint problem, we do a projection that\u00a0drastically reduces the size of the search space.\u00a0Thus three steps are performed. <strong>Step I:<\/strong>\u00a0a free configuration x<sup>free<\/sup>\u00a0of the deformable model is found by solving\u00a0equation (2) with \u03bb = 0. We\u00a0compute the constraint violation noted \u03b4<sup>free<\/sup>.<strong>Step II<\/strong>: This step is central in the method. It consists in projecting the mechanics into the constraint space. We obtain the smallest possible projection space:<\/p>\n<p align=\"center\">\u03b4\u00a0= JK<sup>\u22121<\/sup>J<sup>T<\/sup>\u03bb\u00a0 + \u03b4<sup>free<\/sup>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0(3)<\/p>\n<p><strong>Step III<\/strong>: The final configuration, at the end of\u00a0the time step, is corrected by using the value of the constraint\u00a0response:<\/p>\n<p align=\"center\">x\u00a0= x<sup>free<\/sup>\u00a0+ K<sup>\u22121<\/sup>J<sup>T<\/sup>\u03bb<\/p>\n<h1><strong>Bibliography<\/strong><\/h1>\n<ul>\n<li><a href=\"https:\/\/ori-nuxeo.univ-lille1.fr\/nuxeo\/site\/esupversions\/519dbd7c-4b3b-4426-9e15-360b49c8b0c0\" target=\"_blank\">Nouvelles architectures parall\u00e8les pour simulations interactives m\u00e9dicales<\/a><\/li>\n<li><a href=\"https:\/\/hal.archives-ouvertes.fr\/tel-00785118\/document\" target=\"_blank\">Real-time haptic simulation of medical procedures involving deformations and device-tissue interactions<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Static system This section details the formulation that is used to solve constraints in SOFA. During\u00a0each step i of the simulation, a linearization of the internal forces is computed: f(xi) \u2248 f(xi\u22121) + K(xi\u22121)dx \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0(1) where f provides the volumetric internal stiffness forces at\u2026<\/p>\n<p> <a class=\"continue-reading-link\" href=\"https:\/\/project.inria.fr\/softrobot\/documentation\/constraint-resolution-method\/\"><span>Continue reading<\/span><i class=\"crycon-right-dir\"><\/i><\/a> <\/p>\n","protected":false},"author":850,"featured_media":0,"parent":13,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-151","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/project.inria.fr\/softrobot\/wp-json\/wp\/v2\/pages\/151","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/project.inria.fr\/softrobot\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/project.inria.fr\/softrobot\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/project.inria.fr\/softrobot\/wp-json\/wp\/v2\/users\/850"}],"replies":[{"embeddable":true,"href":"https:\/\/project.inria.fr\/softrobot\/wp-json\/wp\/v2\/comments?post=151"}],"version-history":[{"count":8,"href":"https:\/\/project.inria.fr\/softrobot\/wp-json\/wp\/v2\/pages\/151\/revisions"}],"predecessor-version":[{"id":406,"href":"https:\/\/project.inria.fr\/softrobot\/wp-json\/wp\/v2\/pages\/151\/revisions\/406"}],"up":[{"embeddable":true,"href":"https:\/\/project.inria.fr\/softrobot\/wp-json\/wp\/v2\/pages\/13"}],"wp:attachment":[{"href":"https:\/\/project.inria.fr\/softrobot\/wp-json\/wp\/v2\/media?parent=151"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}