{"action":"created","issue":{"url":"https://api.github.com/repos/RobotLocomotion/drake/issues/4348","repository_url":"https://api.github.com/repos/RobotLocomotion/drake","labels_url":"https://api.github.com/repos/RobotLocomotion/drake/issues/4348/labels{/name}","comments_url":"https://api.github.com/repos/RobotLocomotion/drake/issues/4348/comments","events_url":"https://api.github.com/repos/RobotLocomotion/drake/issues/4348/events","html_url":"https://github.com/RobotLocomotion/drake/issues/4348","id":193243152,"number":4348,"title":"Treatment of non-moving (\"static\") geometry in Drake","user":{"login":"SeanCurtis-TRI","id":22159799,"avatar_url":"https://avatars.githubusercontent.com/u/22159799?v=3","gravatar_id":"","url":"https://api.github.com/users/SeanCurtis-TRI","html_url":"https://github.com/SeanCurtis-TRI","followers_url":"https://api.github.com/users/SeanCurtis-TRI/followers","following_url":"https://api.github.com/users/SeanCurtis-TRI/following{/other_user}","gists_url":"https://api.github.com/users/SeanCurtis-TRI/gists{/gist_id}","starred_url":"https://api.github.com/users/SeanCurtis-TRI/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SeanCurtis-TRI/subscriptions","organizations_url":"https://api.github.com/users/SeanCurtis-TRI/orgs","repos_url":"https://api.github.com/users/SeanCurtis-TRI/repos","events_url":"https://api.github.com/users/SeanCurtis-TRI/events{/privacy}","received_events_url":"https://api.github.com/users/SeanCurtis-TRI/received_events","type":"User","site_admin":false},"labels":[{"id":366762542,"url":"https://api.github.com/repos/RobotLocomotion/drake/labels/priority:%20medium","name":"priority: medium","color":"e99695","default":false},{"id":77074782,"url":"https://api.github.com/repos/RobotLocomotion/drake/labels/type:%20bug","name":"type: bug","color":"0e8a16","default":false}],"state":"open","locked":false,"assignee":{"login":"SeanCurtis-TRI","id":22159799,"avatar_url":"https://avatars.githubusercontent.com/u/22159799?v=3","gravatar_id":"","url":"https://api.github.com/users/SeanCurtis-TRI","html_url":"https://github.com/SeanCurtis-TRI","followers_url":"https://api.github.com/users/SeanCurtis-TRI/followers","following_url":"https://api.github.com/users/SeanCurtis-TRI/following{/other_user}","gists_url":"https://api.github.com/users/SeanCurtis-TRI/gists{/gist_id}","starred_url":"https://api.github.com/users/SeanCurtis-TRI/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SeanCurtis-TRI/subscriptions","organizations_url":"https://api.github.com/users/SeanCurtis-TRI/orgs","repos_url":"https://api.github.com/users/SeanCurtis-TRI/repos","events_url":"https://api.github.com/users/SeanCurtis-TRI/events{/privacy}","received_events_url":"https://api.github.com/users/SeanCurtis-TRI/received_events","type":"User","site_admin":false},"assignees":[{"login":"SeanCurtis-TRI","id":22159799,"avatar_url":"https://avatars.githubusercontent.com/u/22159799?v=3","gravatar_id":"","url":"https://api.github.com/users/SeanCurtis-TRI","html_url":"https://github.com/SeanCurtis-TRI","followers_url":"https://api.github.com/users/SeanCurtis-TRI/followers","following_url":"https://api.github.com/users/SeanCurtis-TRI/following{/other_user}","gists_url":"https://api.github.com/users/SeanCurtis-TRI/gists{/gist_id}","starred_url":"https://api.github.com/users/SeanCurtis-TRI/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SeanCurtis-TRI/subscriptions","organizations_url":"https://api.github.com/users/SeanCurtis-TRI/orgs","repos_url":"https://api.github.com/users/SeanCurtis-TRI/repos","events_url":"https://api.github.com/users/SeanCurtis-TRI/events{/privacy}","received_events_url":"https://api.github.com/users/SeanCurtis-TRI/received_events","type":"User","site_admin":false}],"milestone":null,"comments":2,"created_at":"2016-12-02T23:28:25Z","updated_at":"2016-12-02T23:55:54Z","closed_at":null,"body":"Problem\r\n======\r\n\r\nThere are several advantages in being able to partition the geometry (collision/visual/whatever) in the simulation between those that *can* move and those that *can't*.  There are a number of issues to resolve here.\r\n\r\n1) While non-moving geometry is typically referred to as \"static\" in the literature, from a code-base perspective it is a nightmare.  The word \"static\" is horribly overloaded.  (Just try searching through issues to determine which ones are about \"static geometry\".)  A Drake-specific term to help disambiguate this would help.\r\n2) Although (or perhaps because) static geometry has been much discussed (see #4333, #2709, #2662, #2661, #2644, #2481, #2003, #1933), the state of the code is somewhat chaotic.  For example, \r\n   a) [this code](https://github.com/RobotLocomotion/drake/blob/master/drake/multibody/parser_sdf.cc#L289) attempts to set a collision element as static, even though the code is unreachable (discussed in #4333).\r\n   b) [this code](https://github.com/RobotLocomotion/drake/blob/master/drake/multibody/rigid_body_tree.cc#L268) attempts to \"update\" static geometry but identifies them as bodies with no parent. (This isn't correct for a valid tree; the only body in a valid tree without a parent should be the root, world body.)\r\n\r\nWhy do we care?\r\n-----------------------\r\n\r\nThere are a number of advantages in distinguishing moving and immovable elements.  \r\n\r\n1) Immovable elements allow aggressive run-time optimizations.\r\n2) We have more geometric representations available to us for immovable geometry,\r\n3) Immovable geometry is most likely to be shared across multiple systems; sharing is facilitated with this classification\r\n\r\nProposal\r\n------------\r\n\r\n1) Nomenclature: We refer to geometry that *cannot* move during the duration of the simulation as being \"anchored\".  More formally, geometry is anchored if it cannot move relative to the world frame.\r\n   a) This name might suggest that if something is anchored, it can be \"freed\", in some sense.  In the short term, the anchored state of geometry is defined at initialization and remains unchanging through the duration of the simulation.  In future versions, it can be possible to change the state of geometry to and from being \"anchored.\"\r\n2) Ultimately, when the so-called `Geometry World` exists, all of the `System`s which introduce geometry into the simulation will be \"register\" the geometry with `Geometry World`.  At the time of registration, the origin system must have already characterized if the geometry is anchored.\r\n3) Short term, we will modify the `RigidBodyTree` to provide logic to identify which collision elements should be considered anchored.  This logic is based on determining that there is a path from the collision element's parent body to the world, where all joints are *fixed*.  A body will have the method: `bool RigidBody::IsRigidlyFixedToGround()` which is defined recursively.\r\n\r\n\r\nTagging various people who have played and thought about static geometry.  Please weigh in on anything you think is missing or has simply missed the boat.\r\n@amcastro-tri @liangfok @sherm1 @david-german-tri "},"comment":{"url":"https://api.github.com/repos/RobotLocomotion/drake/issues/comments/264594411","html_url":"https://github.com/RobotLocomotion/drake/issues/4348#issuecomment-264594411","issue_url":"https://api.github.com/repos/RobotLocomotion/drake/issues/4348","id":264594411,"user":{"login":"SeanCurtis-TRI","id":22159799,"avatar_url":"https://avatars.githubusercontent.com/u/22159799?v=3","gravatar_id":"","url":"https://api.github.com/users/SeanCurtis-TRI","html_url":"https://github.com/SeanCurtis-TRI","followers_url":"https://api.github.com/users/SeanCurtis-TRI/followers","following_url":"https://api.github.com/users/SeanCurtis-TRI/following{/other_user}","gists_url":"https://api.github.com/users/SeanCurtis-TRI/gists{/gist_id}","starred_url":"https://api.github.com/users/SeanCurtis-TRI/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SeanCurtis-TRI/subscriptions","organizations_url":"https://api.github.com/users/SeanCurtis-TRI/orgs","repos_url":"https://api.github.com/users/SeanCurtis-TRI/repos","events_url":"https://api.github.com/users/SeanCurtis-TRI/events{/privacy}","received_events_url":"https://api.github.com/users/SeanCurtis-TRI/received_events","type":"User","site_admin":false},"created_at":"2016-12-02T23:55:54Z","updated_at":"2016-12-02T23:55:54Z","body":"Edited in place; sorry it makes your comment look outdated. :)"}}
{"actor":{"display_login":"SeanCurtis-TRI"}}