{"action":"closed","number":55,"pull_request":{"url":"https://api.github.com/repos/personalrobotics/or_ompl/pulls/55","id":66734502,"html_url":"https://github.com/personalrobotics/or_ompl/pull/55","diff_url":"https://github.com/personalrobotics/or_ompl/pull/55.diff","patch_url":"https://github.com/personalrobotics/or_ompl/pull/55.patch","issue_url":"https://api.github.com/repos/personalrobotics/or_ompl/issues/55","number":55,"state":"closed","locked":false,"title":"State space refactor","user":{"login":"cdellin","id":2708448,"avatar_url":"https://avatars.githubusercontent.com/u/2708448?v=3","gravatar_id":"","url":"https://api.github.com/users/cdellin","html_url":"https://github.com/cdellin","followers_url":"https://api.github.com/users/cdellin/followers","following_url":"https://api.github.com/users/cdellin/following{/other_user}","gists_url":"https://api.github.com/users/cdellin/gists{/gist_id}","starred_url":"https://api.github.com/users/cdellin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cdellin/subscriptions","organizations_url":"https://api.github.com/users/cdellin/orgs","repos_url":"https://api.github.com/users/cdellin/repos","events_url":"https://api.github.com/users/cdellin/events{/privacy}","received_events_url":"https://api.github.com/users/cdellin/received_events","type":"User","site_admin":false},"body":"This PR implements a different approach for handling state spaces in `or_ompl`.  Here, the knowledge of DOF indices is moved out of the state space class (was `RobotStateSpace`), and is instead moved into a new `OrStateValidityChecker` class (which subclasses `ompl::base::StateValidityChecker`).  This new class also subsumes the OpenRAVE robot specific kinematics and collision checking implementations which used to be duplicated in the `OMPLPlanner`, `OMPLSimplifier`, and `TSRGoal` classes (e.g. in the functions `IsInOrCollision()` and `IsStateValid()`).\r\n\r\nOne benefit of removing robot-specific code from the `StateSpace` is that it allows different implementations to be used for different robots.  In this PR, the `CreateStateSpace()` function now returns a vanilla `RealVectorStateSpace` when no joints are continuous, which reduces pointer indirections and should improve cache locality of states for robots like HERB (and allows for more well-tested projections to be used).  The old `RobotStateSpace` class is now much simpler, and was renamed `ContinuousJointsStateSpace` to clarify its purpose (a compound space with `RealVector` and `SO(2)` subspaces).\r\n\r\nThe eventual goal with these changes is so that external planners (such as LEMUR) can begin to depend on parts of `or_ompl` for currently duplicated functionality.","created_at":"2016-04-16T10:36:56Z","updated_at":"2016-04-19T21:27:21Z","closed_at":"2016-04-19T21:27:21Z","merged_at":"2016-04-19T21:27:21Z","merge_commit_sha":"4815556058cae4c88fb1ef1343011012e0f03a7f","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/personalrobotics/or_ompl/pulls/55/commits","review_comments_url":"https://api.github.com/repos/personalrobotics/or_ompl/pulls/55/comments","review_comment_url":"https://api.github.com/repos/personalrobotics/or_ompl/pulls/comments{/number}","comments_url":"https://api.github.com/repos/personalrobotics/or_ompl/issues/55/comments","statuses_url":"https://api.github.com/repos/personalrobotics/or_ompl/statuses/059fbd11bca98add6a1f176176497c4f9b534d02","head":{"label":"personalrobotics:real_vector_if_simple","ref":"real_vector_if_simple","sha":"059fbd11bca98add6a1f176176497c4f9b534d02","user":{"login":"personalrobotics","id":4705918,"avatar_url":"https://avatars.githubusercontent.com/u/4705918?v=3","gravatar_id":"","url":"https://api.github.com/users/personalrobotics","html_url":"https://github.com/personalrobotics","followers_url":"https://api.github.com/users/personalrobotics/followers","following_url":"https://api.github.com/users/personalrobotics/following{/other_user}","gists_url":"https://api.github.com/users/personalrobotics/gists{/gist_id}","starred_url":"https://api.github.com/users/personalrobotics/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/personalrobotics/subscriptions","organizations_url":"https://api.github.com/users/personalrobotics/orgs","repos_url":"https://api.github.com/users/personalrobotics/repos","events_url":"https://api.github.com/users/personalrobotics/events{/privacy}","received_events_url":"https://api.github.com/users/personalrobotics/received_events","type":"Organization","site_admin":false},"repo":{"id":19721135,"name":"or_ompl","full_name":"personalrobotics/or_ompl","owner":{"login":"personalrobotics","id":4705918,"avatar_url":"https://avatars.githubusercontent.com/u/4705918?v=3","gravatar_id":"","url":"https://api.github.com/users/personalrobotics","html_url":"https://github.com/personalrobotics","followers_url":"https://api.github.com/users/personalrobotics/followers","following_url":"https://api.github.com/users/personalrobotics/following{/other_user}","gists_url":"https://api.github.com/users/personalrobotics/gists{/gist_id}","starred_url":"https://api.github.com/users/personalrobotics/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/personalrobotics/subscriptions","organizations_url":"https://api.github.com/users/personalrobotics/orgs","repos_url":"https://api.github.com/users/personalrobotics/repos","events_url":"https://api.github.com/users/personalrobotics/events{/privacy}","received_events_url":"https://api.github.com/users/personalrobotics/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/personalrobotics/or_ompl","description":"OpenRAVE bindings for OMPL motion planning algorithms.","fork":false,"url":"https://api.github.com/repos/personalrobotics/or_ompl","forks_url":"https://api.github.com/repos/personalrobotics/or_ompl/forks","keys_url":"https://api.github.com/repos/personalrobotics/or_ompl/keys{/key_id}","collaborators_url":"https://api.github.com/repos/personalrobotics/or_ompl/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/personalrobotics/or_ompl/teams","hooks_url":"https://api.github.com/repos/personalrobotics/or_ompl/hooks","issue_events_url":"https://api.github.com/repos/personalrobotics/or_ompl/issues/events{/number}","events_url":"https://api.github.com/repos/personalrobotics/or_ompl/events","assignees_url":"https://api.github.com/repos/personalrobotics/or_ompl/assignees{/user}","branches_url":"https://api.github.com/repos/personalrobotics/or_ompl/branches{/branch}","tags_url":"https://api.github.com/repos/personalrobotics/or_ompl/tags","blobs_url":"https://api.github.com/repos/personalrobotics/or_ompl/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/personalrobotics/or_ompl/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/personalrobotics/or_ompl/git/refs{/sha}","trees_url":"https://api.github.com/repos/personalrobotics/or_ompl/git/trees{/sha}","statuses_url":"https://api.github.com/repos/personalrobotics/or_ompl/statuses/{sha}","languages_url":"https://api.github.com/repos/personalrobotics/or_ompl/languages","stargazers_url":"https://api.github.com/repos/personalrobotics/or_ompl/stargazers","contributors_url":"https://api.github.com/repos/personalrobotics/or_ompl/contributors","subscribers_url":"https://api.github.com/repos/personalrobotics/or_ompl/subscribers","subscription_url":"https://api.github.com/repos/personalrobotics/or_ompl/subscription","commits_url":"https://api.github.com/repos/personalrobotics/or_ompl/commits{/sha}","git_commits_url":"https://api.github.com/repos/personalrobotics/or_ompl/git/commits{/sha}","comments_url":"https://api.github.com/repos/personalrobotics/or_ompl/comments{/number}","issue_comment_url":"https://api.github.com/repos/personalrobotics/or_ompl/issues/comments{/number}","contents_url":"https://api.github.com/repos/personalrobotics/or_ompl/contents/{+path}","compare_url":"https://api.github.com/repos/personalrobotics/or_ompl/compare/{base}...{head}","merges_url":"https://api.github.com/repos/personalrobotics/or_ompl/merges","archive_url":"https://api.github.com/repos/personalrobotics/or_ompl/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/personalrobotics/or_ompl/downloads","issues_url":"https://api.github.com/repos/personalrobotics/or_ompl/issues{/number}","pulls_url":"https://api.github.com/repos/personalrobotics/or_ompl/pulls{/number}","milestones_url":"https://api.github.com/repos/personalrobotics/or_ompl/milestones{/number}","notifications_url":"https://api.github.com/repos/personalrobotics/or_ompl/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/personalrobotics/or_ompl/labels{/name}","releases_url":"https://api.github.com/repos/personalrobotics/or_ompl/releases{/id}","deployments_url":"https://api.github.com/repos/personalrobotics/or_ompl/deployments","created_at":"2014-05-13T01:06:10Z","updated_at":"2016-03-03T02:21:12Z","pushed_at":"2016-04-19T21:27:21Z","git_url":"git://github.com/personalrobotics/or_ompl.git","ssh_url":"git@github.com:personalrobotics/or_ompl.git","clone_url":"https://github.com/personalrobotics/or_ompl.git","svn_url":"https://github.com/personalrobotics/or_ompl","homepage":null,"size":434,"stargazers_count":6,"watchers_count":6,"language":"C++","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":6,"mirror_url":null,"open_issues_count":10,"forks":6,"open_issues":10,"watchers":6,"default_branch":"master"}},"base":{"label":"personalrobotics:master","ref":"master","sha":"c156a88386e98baace2f0010aaaf1b7deac0eefb","user":{"login":"personalrobotics","id":4705918,"avatar_url":"https://avatars.githubusercontent.com/u/4705918?v=3","gravatar_id":"","url":"https://api.github.com/users/personalrobotics","html_url":"https://github.com/personalrobotics","followers_url":"https://api.github.com/users/personalrobotics/followers","following_url":"https://api.github.com/users/personalrobotics/following{/other_user}","gists_url":"https://api.github.com/users/personalrobotics/gists{/gist_id}","starred_url":"https://api.github.com/users/personalrobotics/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/personalrobotics/subscriptions","organizations_url":"https://api.github.com/users/personalrobotics/orgs","repos_url":"https://api.github.com/users/personalrobotics/repos","events_url":"https://api.github.com/users/personalrobotics/events{/privacy}","received_events_url":"https://api.github.com/users/personalrobotics/received_events","type":"Organization","site_admin":false},"repo":{"id":19721135,"name":"or_ompl","full_name":"personalrobotics/or_ompl","owner":{"login":"personalrobotics","id":4705918,"avatar_url":"https://avatars.githubusercontent.com/u/4705918?v=3","gravatar_id":"","url":"https://api.github.com/users/personalrobotics","html_url":"https://github.com/personalrobotics","followers_url":"https://api.github.com/users/personalrobotics/followers","following_url":"https://api.github.com/users/personalrobotics/following{/other_user}","gists_url":"https://api.github.com/users/personalrobotics/gists{/gist_id}","starred_url":"https://api.github.com/users/personalrobotics/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/personalrobotics/subscriptions","organizations_url":"https://api.github.com/users/personalrobotics/orgs","repos_url":"https://api.github.com/users/personalrobotics/repos","events_url":"https://api.github.com/users/personalrobotics/events{/privacy}","received_events_url":"https://api.github.com/users/personalrobotics/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/personalrobotics/or_ompl","description":"OpenRAVE bindings for OMPL motion planning algorithms.","fork":false,"url":"https://api.github.com/repos/personalrobotics/or_ompl","forks_url":"https://api.github.com/repos/personalrobotics/or_ompl/forks","keys_url":"https://api.github.com/repos/personalrobotics/or_ompl/keys{/key_id}","collaborators_url":"https://api.github.com/repos/personalrobotics/or_ompl/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/personalrobotics/or_ompl/teams","hooks_url":"https://api.github.com/repos/personalrobotics/or_ompl/hooks","issue_events_url":"https://api.github.com/repos/personalrobotics/or_ompl/issues/events{/number}","events_url":"https://api.github.com/repos/personalrobotics/or_ompl/events","assignees_url":"https://api.github.com/repos/personalrobotics/or_ompl/assignees{/user}","branches_url":"https://api.github.com/repos/personalrobotics/or_ompl/branches{/branch}","tags_url":"https://api.github.com/repos/personalrobotics/or_ompl/tags","blobs_url":"https://api.github.com/repos/personalrobotics/or_ompl/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/personalrobotics/or_ompl/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/personalrobotics/or_ompl/git/refs{/sha}","trees_url":"https://api.github.com/repos/personalrobotics/or_ompl/git/trees{/sha}","statuses_url":"https://api.github.com/repos/personalrobotics/or_ompl/statuses/{sha}","languages_url":"https://api.github.com/repos/personalrobotics/or_ompl/languages","stargazers_url":"https://api.github.com/repos/personalrobotics/or_ompl/stargazers","contributors_url":"https://api.github.com/repos/personalrobotics/or_ompl/contributors","subscribers_url":"https://api.github.com/repos/personalrobotics/or_ompl/subscribers","subscription_url":"https://api.github.com/repos/personalrobotics/or_ompl/subscription","commits_url":"https://api.github.com/repos/personalrobotics/or_ompl/commits{/sha}","git_commits_url":"https://api.github.com/repos/personalrobotics/or_ompl/git/commits{/sha}","comments_url":"https://api.github.com/repos/personalrobotics/or_ompl/comments{/number}","issue_comment_url":"https://api.github.com/repos/personalrobotics/or_ompl/issues/comments{/number}","contents_url":"https://api.github.com/repos/personalrobotics/or_ompl/contents/{+path}","compare_url":"https://api.github.com/repos/personalrobotics/or_ompl/compare/{base}...{head}","merges_url":"https://api.github.com/repos/personalrobotics/or_ompl/merges","archive_url":"https://api.github.com/repos/personalrobotics/or_ompl/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/personalrobotics/or_ompl/downloads","issues_url":"https://api.github.com/repos/personalrobotics/or_ompl/issues{/number}","pulls_url":"https://api.github.com/repos/personalrobotics/or_ompl/pulls{/number}","milestones_url":"https://api.github.com/repos/personalrobotics/or_ompl/milestones{/number}","notifications_url":"https://api.github.com/repos/personalrobotics/or_ompl/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/personalrobotics/or_ompl/labels{/name}","releases_url":"https://api.github.com/repos/personalrobotics/or_ompl/releases{/id}","deployments_url":"https://api.github.com/repos/personalrobotics/or_ompl/deployments","created_at":"2014-05-13T01:06:10Z","updated_at":"2016-03-03T02:21:12Z","pushed_at":"2016-04-19T21:27:21Z","git_url":"git://github.com/personalrobotics/or_ompl.git","ssh_url":"git@github.com:personalrobotics/or_ompl.git","clone_url":"https://github.com/personalrobotics/or_ompl.git","svn_url":"https://github.com/personalrobotics/or_ompl","homepage":null,"size":434,"stargazers_count":6,"watchers_count":6,"language":"C++","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":6,"mirror_url":null,"open_issues_count":10,"forks":6,"open_issues":10,"watchers":6,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/personalrobotics/or_ompl/pulls/55"},"html":{"href":"https://github.com/personalrobotics/or_ompl/pull/55"},"issue":{"href":"https://api.github.com/repos/personalrobotics/or_ompl/issues/55"},"comments":{"href":"https://api.github.com/repos/personalrobotics/or_ompl/issues/55/comments"},"review_comments":{"href":"https://api.github.com/repos/personalrobotics/or_ompl/pulls/55/comments"},"review_comment":{"href":"https://api.github.com/repos/personalrobotics/or_ompl/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/personalrobotics/or_ompl/pulls/55/commits"},"statuses":{"href":"https://api.github.com/repos/personalrobotics/or_ompl/statuses/059fbd11bca98add6a1f176176497c4f9b534d02"}},"merged":true,"mergeable":null,"mergeable_state":"unknown","merged_by":{"login":"mkoval","id":142251,"avatar_url":"https://avatars.githubusercontent.com/u/142251?v=3","gravatar_id":"","url":"https://api.github.com/users/mkoval","html_url":"https://github.com/mkoval","followers_url":"https://api.github.com/users/mkoval/followers","following_url":"https://api.github.com/users/mkoval/following{/other_user}","gists_url":"https://api.github.com/users/mkoval/gists{/gist_id}","starred_url":"https://api.github.com/users/mkoval/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mkoval/subscriptions","organizations_url":"https://api.github.com/users/mkoval/orgs","repos_url":"https://api.github.com/users/mkoval/repos","events_url":"https://api.github.com/users/mkoval/events{/privacy}","received_events_url":"https://api.github.com/users/mkoval/received_events","type":"User","site_admin":false},"comments":2,"review_comments":6,"commits":12,"additions":422,"deletions":415,"changed_files":13}}