{"action":"created","issue":{"url":"https://api.github.com/repos/dartsim/dart/issues/288","labels_url":"https://api.github.com/repos/dartsim/dart/issues/288/labels{/name}","comments_url":"https://api.github.com/repos/dartsim/dart/issues/288/comments","events_url":"https://api.github.com/repos/dartsim/dart/issues/288/events","html_url":"https://github.com/dartsim/dart/pull/288","id":52064156,"number":288,"title":"DegreeOfFreedom class","user":{"login":"mxgrey","id":1307217,"avatar_url":"https://avatars.githubusercontent.com/u/1307217?v=3","gravatar_id":"","url":"https://api.github.com/users/mxgrey","html_url":"https://github.com/mxgrey","followers_url":"https://api.github.com/users/mxgrey/followers","following_url":"https://api.github.com/users/mxgrey/following{/other_user}","gists_url":"https://api.github.com/users/mxgrey/gists{/gist_id}","starred_url":"https://api.github.com/users/mxgrey/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mxgrey/subscriptions","organizations_url":"https://api.github.com/users/mxgrey/orgs","repos_url":"https://api.github.com/users/mxgrey/repos","events_url":"https://api.github.com/users/mxgrey/events{/privacy}","received_events_url":"https://api.github.com/users/mxgrey/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":{"url":"https://api.github.com/repos/dartsim/dart/milestones/5","labels_url":"https://api.github.com/repos/dartsim/dart/milestones/5/labels","id":628004,"number":5,"title":"Release DART 4.3","description":"Changes:\r\n  * Improve readability of CMake output messages (#272)\r\n  * Add all-inclusive header and namespace headers (#278)\r\n  * Fix const-correctness of member functions (#277)\r\n  * Add name manager for efficient name look-up and unique naming (#277)\r\n  * Migrate to C++11\r\n  * Add DegreeOfFreedom class (#288)\r\n  * Add hybrid dynamics\r\n\r\nTarget Gazebo version is 5.0 (release date: 2015-01-26)\r\n\r\nFeature freeze: Jan 5, 2015\r\nCode freeze: Jan 12, 2015\r\n\r\nSupported machines (compilers)\r\n  * Ubuntu 12.04 LTS\r\n  * Ubuntu 14.04 LTS\r\n  * Ubuntu 14.10\r\n  * Windows with Visual studio 2012, 2013 \r\n    * (create additional repo that includes all the dependencies together)\r\n  * Mac OS X","creator":{"login":"jslee02","id":4038467,"avatar_url":"https://avatars.githubusercontent.com/u/4038467?v=3","gravatar_id":"","url":"https://api.github.com/users/jslee02","html_url":"https://github.com/jslee02","followers_url":"https://api.github.com/users/jslee02/followers","following_url":"https://api.github.com/users/jslee02/following{/other_user}","gists_url":"https://api.github.com/users/jslee02/gists{/gist_id}","starred_url":"https://api.github.com/users/jslee02/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jslee02/subscriptions","organizations_url":"https://api.github.com/users/jslee02/orgs","repos_url":"https://api.github.com/users/jslee02/repos","events_url":"https://api.github.com/users/jslee02/events{/privacy}","received_events_url":"https://api.github.com/users/jslee02/received_events","type":"User","site_admin":false},"open_issues":3,"closed_issues":14,"state":"open","created_at":"2014-04-12T15:11:32Z","updated_at":"2015-01-02T12:10:00Z","due_on":"2015-01-19T05:00:00Z","closed_at":null},"comments":3,"created_at":"2014-12-16T01:52:55Z","updated_at":"2015-01-03T03:08:17Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/dartsim/dart/pulls/288","html_url":"https://github.com/dartsim/dart/pull/288","diff_url":"https://github.com/dartsim/dart/pull/288.diff","patch_url":"https://github.com/dartsim/dart/pull/288.patch"},"body":"This pull request introduces the DegreeOfFreedom class which serves as a proxy class for getting/setting the data (e.g. position, velocity, acceleration, force, limits, etc) of individual generalized coordinates (aka degrees of freedom). This pull request also gives names to each degree of freedom and allows each degree of freedom to be accessed by name. The name of each degree of freedom in a given Skeleton is kept unique by the NameManager class.\r\n\r\nBy default, each degree of freedom is given a name based on the name of the joint it belongs to. For SingleDofJoints, their single dof is just given the same name as the joint itself. For MultiDofJoints, the dof is given a name with the pattern \"\\<joint_name\\>_\\<affix\\>\" where \"\\<joint_name\\>\" is simple the name of its joint, and \"\\<affix\\>\" indicates its role in the joint. For example, a TranslationalJoint named \"joint1\" will be given degrees of freedom with the following names: \"joint1_x\", \"joint1_y\", and \"joint1_z\".\r\n\r\nThe user can rename any DegreeOfFreedom at any time, however names that match already existing DOF names will be altered by the NameManager to prevent a lookup conflict.\r\n\r\nWhen the user changes a joint name using Joint::setName(~), they are given the option of whether or not to have the joint's degrees of freedom automatically renamed as well (default is true).\r\n\r\nSomething to consider: Currently, if the Skeleton's Joint NameManager needs to change a joint's name to prevent a naming conflict, it will also rename that Joint's DegreesOfFreedom to match the new name. This could potentially wipe out custom names that the user might have given to that Joint's DegreesOfFreedom. Should we have a flag that the user can set to prevent this behavior?"},"comment":{"url":"https://api.github.com/repos/dartsim/dart/issues/comments/68581074","html_url":"https://github.com/dartsim/dart/pull/288#issuecomment-68581074","issue_url":"https://api.github.com/repos/dartsim/dart/issues/288","id":68581074,"user":{"login":"mxgrey","id":1307217,"avatar_url":"https://avatars.githubusercontent.com/u/1307217?v=3","gravatar_id":"","url":"https://api.github.com/users/mxgrey","html_url":"https://github.com/mxgrey","followers_url":"https://api.github.com/users/mxgrey/followers","following_url":"https://api.github.com/users/mxgrey/following{/other_user}","gists_url":"https://api.github.com/users/mxgrey/gists{/gist_id}","starred_url":"https://api.github.com/users/mxgrey/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mxgrey/subscriptions","organizations_url":"https://api.github.com/users/mxgrey/orgs","repos_url":"https://api.github.com/users/mxgrey/repos","events_url":"https://api.github.com/users/mxgrey/events{/privacy}","received_events_url":"https://api.github.com/users/mxgrey/received_events","type":"User","site_admin":false},"created_at":"2015-01-03T03:08:17Z","updated_at":"2015-01-03T03:08:17Z","body":"The new commit contains two major changes:\r\n\r\n1) I've added a *dof* element into the skeleton file format. This allows skeleton files to specify things like name and position/velocity/acceleration limits for individual degrees of freedom in each joint. The format is agnostic to the type of joint. The old approach still works (i.e. using axis, axis2, axis3, etc. elements), but any information provided in the new *dof* element will override any information provided by the old format.\r\n\r\n2) The user now has the ability to lock-in their customized DOF names so that they will not automatically get overwritten. I found that having this feature was necessary in order to correctly parse DOF names in skeleton files, so now the user has access to this feature as well."}}