

{"id":242,"date":"2015-10-04T17:19:04","date_gmt":"2015-10-04T17:19:04","guid":{"rendered":"http:\/\/project.inria.fr\/softrobot\/?page_id=242"},"modified":"2017-07-28T08:26:06","modified_gmt":"2017-07-28T08:26:06","slug":"cable-actuator","status":"publish","type":"page","link":"https:\/\/project.inria.fr\/softrobot\/documentation\/constraint\/cable-actuator\/","title":{"rendered":"Cable Actuator"},"content":{"rendered":"<h1><strong>General description<\/strong><\/h1>\n<p>The &#8220;CableActuator&#8221; component simulates a force exerted by a cable to solve an effector constraint.<\/p>\n<table style=\"border-collapse: collapse;\">\n<tbody>\n<tr>\n<td><iframe loading=\"lazy\" src=\"https:\/\/www.youtube.com\/embed\/lSS2wlHwGF8\" width=\"270\" height=\"180\" frameborder=\"0\" align=\"right\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/td>\n<td><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/project.inria.fr\/softrobot\/files\/2015\/10\/SiliconeV0.png\" alt=\"\" width=\"270\" height=\"202\" align=\"left\" \/><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h1><strong>How to use the component<\/strong><\/h1>\n<p>To learn how to create a SOFA scene, please refer to the tutorial provided by the SOFA Modeler or <a href=\"https:\/\/www.sofa-framework.org\/community\/doc\/using-sofa\/write-a-scene-in-xml\/\">this<\/a>\u00a0documentation.<\/p>\n<p>This component has multiple input and output datas described in the following section. The two mains input datas are the pull point position, i.e the fixed position from which the cable is pulled. And the indices of the mechanical model points through which the cable will pass (from pull point to extremity). As the volumic mesh may not follows the cable path, one can create an other &#8220;MechanicalObject&#8221; to describe it and map the path to the target model using a &#8220;BarycentricMapping&#8221; component:<\/p>\n<pre>actuator = bunny.createChild('actuator')\r\nactuator.createObject('MechanicalObject', position=\"3 -12 -20   3 -12 -10   10 -12 10   10 -12 30   10 -12 45 \")\r\nactuator.createObject('CableActuator', indices='0 1 2 3 4', pullPoint=\"3 -12 -100\", maxPositiveDisp='30', minForce=\"0\")\r\nactuator.createObject('BarycentricMapping', mapForces=\"false\", mapMasses=\"false\")<\/pre>\n<p>Using this method requires to create a new node. This node must be a child of the target model node.<\/p>\n<p>As an actuator is used to solve an effector constraint, you will need to put an effector constraint in your scene. To solve the inverse problem, you must use an inverse problem solver (for instance QPInverseProblemSolver) and put it on the top of the scene graph.<\/p>\n<p>Examples are\u00a0provided in the &#8220;examples&#8221; directory of the plugin.<\/p>\n<h1><strong>Methods description<\/strong><\/h1>\n<p><strong>Requirement :<\/strong><a href=\"http:\/\/project.inria.fr\/softrobot\/documentation\/real-time-inverse-simulation-method\/\">Real Time Inverse Simulation Method<\/a><\/p>\n<p align=\"left\"><strong>Method :<\/strong><\/p>\n<p>Here, the constraint matrix J will contain the direction of the force exerted by the cable in the rows corresponding to the pull point of the model, and\u00a0\u03bb will represent the intensity of the applied force.<\/p>\n<table style=\"border-collapse: collapse;\">\n<tbody>\n<tr>\n<td><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/project.inria.fr\/softrobot\/files\/2015\/10\/CableActuatorConstraintNoQP_3.png\" alt=\"\" width=\"150\" height=\"148\" align=\"right\" \/><\/td>\n<td><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/project.inria.fr\/softrobot\/files\/2015\/10\/CableActuatorConstraintNoQP_4.png\" alt=\"\" width=\"150\" height=\"148\" align=\"left\" \/><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h1><strong>Special issues<\/strong><\/h1>\n<p>This component exists in two versions, with and without the suffix &#8220;GS&#8221;.\u00a0Using the &#8220;CableActuatorGS&#8221; means that you will use the Gauss-Seidel resolution. Thus, the inverse problem solver of your scene must be the &#8220;GenericConstraintSolver&#8221;. Make sure that the effector used also has the suffix &#8220;GS&#8221;. In this particular case, the effector component must be set before the actuator in the scene.<\/p>\n<h1><strong>Data field<\/strong><\/h1>\n<h2><strong><span style=\"color: #c0c0c0;\">Input data<\/span><\/strong><\/h2>\n<p align=\"left\"><strong>indices<\/strong>\u00a0:List of points connected by the cable, from extremity\u00a0to actuator.<\/p>\n<p align=\"left\"><strong>maxForce<\/strong>\u00a0<strong>\/minForce<\/strong>: Correspond to the constrainst \u03bb<sub>min<\/sub>\u00a0\u2264 \u03bb\u00a0\u2264\u00a0\u03bb<sub>max<\/sub> where \u03bb represents the force.\u00a0If no values are set by the user, no constraint on \u03bb\u00a0will be considered. Note that the force is constrained to be positive.<\/p>\n<p align=\"left\"><strong>maxPositiveDisp\/maxNegativeDisp\u00a0<\/strong>: Correspond to the constraints \u03b4<sub>min\u00a0<\/sub>\u03b4 = W<sub>aa<\/sub>\u03bb + \u03b4<sup>free <\/sup>\u2264 \u03b4<sub>max<\/sub> where \u03b4 represents the displacement of the cable.\u00a0If no values are set by the user, no limit will be considered.<\/p>\n<p align=\"left\"><strong>maxDispVariation<\/strong> :\u00a0Maximum variation of the displacement allowed. If not set, no max variation will be concidered.<\/p>\n<p align=\"left\"><strong>maxPositiveDisp\/maxNegativeDisp <\/strong><em>(GS case)<\/em>: Correspond to the constraints \u03b4<sub>min\u00a0<\/sub>\u2264\u00a0\u03b4\u00a0= W<sub>aa<\/sub>\u03bb +\u00a0\u03b4<sup>free\u00a0<\/sup>\u03b4<sub>max<\/sub> where\u00a0\u03b4 represents the displacement of the cable.\u00a0If no values are set by the user, default values (1.0e99,1.0e99) will be considered.<\/p>\n<p align=\"left\"><strong>pullPoint<\/strong> : Fixed point from which the cable is pulled.<\/p>\n<h2 align=\"left\"><strong><span style=\"color: #c0c0c0;\">Output data<\/span><\/strong><\/h2>\n<p><strong>initialCableLength :\u00a0<\/strong>Length of the cable at the initial state.<\/p>\n<p><strong>cableLength :\u00a0<\/strong>Length of the cable at the end of the time step.<\/p>\n<p><strong>displacement : <\/strong>Displacement achieved at the end of the time step compared to initial state.\u00a0\u03b4\u00a0= W<sub>aa<\/sub>\u03bb +\u00a0\u03b4<sup>free<\/sup><\/p>\n<p><strong>force <\/strong>: The force\u00a0\u03bb\u00a0applied at the end of the time step.<\/p>\n<p><strong>sendValues\u00a0<\/strong>(<em>GS case<\/em>) : Computed values to be sent to the real actuator. For now, this output is specific to the control of the\u00a0Diamond\u00a0robot.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>General description The &#8220;CableActuator&#8221; component simulates a force exerted by a cable to solve an effector constraint. How to use the component To learn how to create a SOFA scene, please refer to the tutorial provided by the SOFA Modeler or this\u00a0documentation. This component has multiple input and output datas\u2026<\/p>\n<p> <a class=\"continue-reading-link\" href=\"https:\/\/project.inria.fr\/softrobot\/documentation\/constraint\/cable-actuator\/\"><span>Continue reading<\/span><i class=\"crycon-right-dir\"><\/i><\/a> <\/p>\n","protected":false},"author":850,"featured_media":0,"parent":137,"menu_order":0,"comment_status":"open","ping_status":"open","template":"","meta":{"footnotes":""},"class_list":["post-242","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/project.inria.fr\/softrobot\/wp-json\/wp\/v2\/pages\/242","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=242"}],"version-history":[{"count":15,"href":"https:\/\/project.inria.fr\/softrobot\/wp-json\/wp\/v2\/pages\/242\/revisions"}],"predecessor-version":[{"id":825,"href":"https:\/\/project.inria.fr\/softrobot\/wp-json\/wp\/v2\/pages\/242\/revisions\/825"}],"up":[{"embeddable":true,"href":"https:\/\/project.inria.fr\/softrobot\/wp-json\/wp\/v2\/pages\/137"}],"wp:attachment":[{"href":"https:\/\/project.inria.fr\/softrobot\/wp-json\/wp\/v2\/media?parent=242"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}