{"action":"created","comment":{"url":"https://api.github.com/repos/personalrobotics/herbpy/pulls/comments/42295803","id":42295803,"diff_hunk":"@@ -0,0 +1,354 @@\n+import logging, openravepy, prpy \n+from prpy.action import ActionMethod\n+from prpy.planning.base import PlanningError\n+from contextlib import contextmanager \n+from prpy.util import FindCatkinResource\n+import numpy, cPickle, time, os.path\n+\n+logger = logging.getLogger('herbpy')\n+\n+@ActionMethod\n+def PointAt(robot, focus, manip=None, render=False):\n+    \"\"\"\n+    @param robot The robot performing the point\n+    @param focus The 3-D coordinate in space or object \n+                 that is being pointed at\n+    @param manip The manipulator to perform the point with. \n+                 This must be the right arm\n+    @param render Render tsr samples during planning\n+    \"\"\"\n+    env = robot.GetEnv()\n+    pointing_coord = GetPointFrom(env, focus)\n+    Point(robot, pointing_coord, manip, render)\n+\n+@ActionMethod\n+def PresentAt(robot, focus, manip=None, render=True):\n+    \"\"\"\n+    @param robot The robot performing the presentation\n+    @param focus The 3-D coordinate in space or object that \n+                 is being presented\n+    @param manip The manipulator to perform the presentation with. \n+                 This must be the right arm.\n+    @param render Render tsr samples during planning\n+    \"\"\"\n+    env = robot.GetEnv()\n+    presenting_coord = GetPointFrom(env, focus)\n+    Present(robot, presenting_coord, manip, render)\n+\n+@ActionMethod\n+def SweepAt(robot, start, end, manip=None, margin=0.3, render=True):\n+    \"\"\"\n+    @param robot The robot performing the sweep\n+    @param start The object or 3-d position that marks the start\n+    @param end The object of 3-d position that marks the end\n+    @param manip The manipulator to perform the sweep\n+    @param margin The distance between the start object and the hand,\n+                  so the vertical space between the hand and objects. \n+                  This must be enough to clear the objects themselves.\n+    @param render Render tsr samples during planning\n+    \"\"\"\n+    env = robot.GetEnv()\n+    start_coord = GetPointFrom(env, start)\n+    end_coord = GetPointFrom(env, end)\n+    Sweep(robot, start_coord, end_coord, manip, margin, render)\n+\n+\n+def GetPointFrom(env, focus):\n+    \"\"\"\n+    @param env The environment where the item exists\n+    @param focus The area to be referred to\n+    \"\"\"\n+    #Pointing at an object\n+    if isinstance(focus, openravepy.KinBody):\n+        with env: \n+            focus_trans = focus.GetTransform()\n+        coord = list(focus_trans[0:3, 3])\n+\n+    #Pointing at a point in space as numpy array\n+    elif (isinstance(focus, numpy.ndarray) and (focus.ndim == 1) \n+           and (len(focus) == 3)):\n+        coord = list(focus)\n+\n+    #Pointing at a point in space as list\n+    elif isinstance(focus, list):\n+        coord = focus\n+\n+    #Pointing at a point in space as tuple\n+    elif isinstance(focus, tuple):\n+        coord = list(focus)\n+\n+    else:\n+        raise prpy.exceptions.PrPyException('Focus of the point is an \\\n+                unknown object')\n+\n+    return coord\n+\n+def Point(robot, coord, manip=None, render=False):\n+    \"\"\"\n+    @param robot The robot performing the point\n+    @param focus The 3-D coordinate in space that is being pointed at\n+    @param manip The manipulator to perform the point with. \n+                 This must be the right arm\n+    @param render Render tsr samples during planning\n+    \"\"\"\n+    if manip is None:\n+        manip = robot.right_arm\n+\n+    if manip.GetName() != 'right':\n+        raise prpy.exceptions.PrPyException('Pointing is only defined \\\n+                on the right arm.')\n+\n+    focus_trans = numpy.eye(4)\n+    focus_trans[0:3, 3] = coord\n+    point_tsr = robot.tsrlibrary(None, 'point', focus_trans, manip)\n+\n+    p = openravepy.KinBody.SaveParameters\n+    with robot.CreateRobotStateSaver(p.ActiveManipulator):\n+        robot.SetActiveManipulator(manip)\n+        with prpy.viz.RenderTSRList(point_tsr, robot.GetEnv(), render=render):\n+            robot.PlanToTSR(point_tsr, execute=True)\n+    manip.hand.MoveHand(f1=2.4, f2=0.8, f3=2.4, spread=3.14)\n+\n+def Present(robot, coord, manip=None, render=True):\n+    \"\"\"\n+    @param robot The robot performing the presentation\n+    @param focus The 3-D coordinate in space or object that \n+                 is being presented\n+    @param manip The manipulator to perform the presentation with. \n+                 This must be the right arm.\n+    @param render Render tsr samples during planning\n+    \"\"\"\n+    focus_trans = numpy.eye(4)\n+    focus_trans[0:3, 3] = coord\n+\n+    present_tsr = robot.tsrlibrary(None, 'present', focus_trans, manip)\n+\n+    if manip is None:\n+        manip = robot.right_arm\n+\n+    if manip.GetName() != 'right':\n+        raise prpy.exceptions.PrPyException('Presenting is only defined \\\n+                on the right arm.')\n+    \n+    p = openravepy.KinBody.SaveParameters\n+    with robot.CreateRobotStateSaver(p.ActiveManipulator):\n+        robot.SetActiveManipulator(manip)\n+        with prpy.viz.RenderTSRList(present_tsr, robot.GetEnv(), render=render):\n+            robot.PlanToTSR(present_tsr, execute=True)\n+    manip.hand.MoveHand(f1=1, f2=1, f3=1, spread=3.14)\n+\n+\n+def Sweep(robot, start_coords, end_coords, manip=None, margin=0.3, render=True):\n+    \"\"\"\n+    @param robot The robot performing the sweep\n+    @param start The object or 3-d position that marks the start\n+    @param end The object of 3-d position that marks the end\n+    @param manip The manipulator to perform the sweep\n+    @param margin The distance between the start object and the hand,\n+                  so the vertical space between the hand and objects. \n+                  This must be enough to clear the objects themselves.\n+    @param render Render tsr samples during planning\n+    \"\"\"\n+    if manip is None:\n+        manip = robot.GetActiveManipulator()\n+\n+    #ee_offset : such that the hand, not wrist, is above the object\n+    #hand_pose : places the hand above the start location\n+    if manip.GetName() == 'right':\n+        hand = robot.right_hand\n+        ee_offset = -0.2\n+        hand_pose = numpy.array([[ 0, -1, 0, start_coords[0]],\n+                                 [ 0,  0, 1, (start_coords[1]+ee_offset)],\n+                                 [-1,  0, 0, (start_coords[2]+margin)],\n+                                 [ 0,  0, 0, 1]])\n+\n+    elif manip.GetName() == 'left':\n+        hand = robot.left_hand\n+        ee_offset = 0.2\n+        hand_pose = numpy.array([[ 0,  1, 0, start_coords[0]],\n+                                 [ 0,  0, -1, (start_coords[1]+ee_offset)],\n+                                 [-1,  0, 0, (start_coords[2]+margin)],\n+                                 [ 0,  0, 0, 1]])\n+  \n+    else:\n+        raise prpy.exceptions.PrPyException('Manipulator does not have an \\\n+                 associated hand')\n+\n+    end_trans = numpy.eye(4)\n+    end_trans[0:3, 3] = end_coords\n+\n+    hand.MoveHand(f1=1, f2=1, f3=1, spread=3.14)\n+    manip.PlanToEndEffectorPose(hand_pose)\n+\n+    #TSR to sweep to end position\n+    sweep_tsr = robot.tsrlibrary(None, 'sweep', end_trans, manip)\n+\n+    p = openravepy.KinBody.SaveParameters\n+    with robot.CreateRobotStateSaver(p.ActiveManipulator):\n+        robot.SetActiveManipulator(manip)\n+        with prpy.viz.RenderTSRList(sweep_tsr, robot.GetEnv(), render=render):\n+             robot.PlanToTSR(sweep_tsr, execute=True)\n+\n+@ActionMethod\n+def Exhibit(robot, obj, manip=None, distance=0.1, wait=2, release=True, render=True):\n+    \"\"\"\n+    @param robot The robot performing the exhibit\n+    @param obj The object being exhibited\n+    @param manip The maniplator to perform the exhibit\n+    @param distance The distance the object will be lifted up\n+    @param wait The amount of time the object will be held up in seconds\n+    @param render Render tsr samples during planning\n+    \"\"\"\n+    with robot.GetEnv():\n+        if manip is None:\n+            manip = robot.GetActiveManipulator()\n+        preconfig = manip.GetDOFValues()\n+        robot.Grasp(obj)\n+\n+    #Lift the object - write more tsrs\n+    lift_tsr = robot.tsrlibrary(obj, 'lift', manip, distance=distance)\n+    \n+    with prpy.viz.RenderTSRList(lift_tsr, robot.GetEnv(), render=render):\n+        robot.PlanToTSR(lift_tsr, execute=True)","path":"src/herbpy/action/rogue.py","position":212,"original_position":212,"commit_id":"52789646bd8fb446345142d752ff3f18cdd68157","original_commit_id":"52789646bd8fb446345142d752ff3f18cdd68157","user":{"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},"body":"Missing active DOFs, active manipulator, and `RobotStateSaver`.","created_at":"2015-10-16T22:12:36Z","updated_at":"2015-10-16T22:12:36Z","html_url":"https://github.com/personalrobotics/herbpy/pull/54#discussion_r42295803","pull_request_url":"https://api.github.com/repos/personalrobotics/herbpy/pulls/54","_links":{"self":{"href":"https://api.github.com/repos/personalrobotics/herbpy/pulls/comments/42295803"},"html":{"href":"https://github.com/personalrobotics/herbpy/pull/54#discussion_r42295803"},"pull_request":{"href":"https://api.github.com/repos/personalrobotics/herbpy/pulls/54"}}},"pull_request":{"url":"https://api.github.com/repos/personalrobotics/herbpy/pulls/54","id":47806843,"html_url":"https://github.com/personalrobotics/herbpy/pull/54","diff_url":"https://github.com/personalrobotics/herbpy/pull/54.diff","patch_url":"https://github.com/personalrobotics/herbpy/pull/54.patch","issue_url":"https://api.github.com/repos/personalrobotics/herbpy/issues/54","number":54,"state":"open","locked":false,"title":"Added a gesture interface","user":{"login":"rachelholladay","id":8390650,"avatar_url":"https://avatars.githubusercontent.com/u/8390650?v=3","gravatar_id":"","url":"https://api.github.com/users/rachelholladay","html_url":"https://github.com/rachelholladay","followers_url":"https://api.github.com/users/rachelholladay/followers","following_url":"https://api.github.com/users/rachelholladay/following{/other_user}","gists_url":"https://api.github.com/users/rachelholladay/gists{/gist_id}","starred_url":"https://api.github.com/users/rachelholladay/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rachelholladay/subscriptions","organizations_url":"https://api.github.com/users/rachelholladay/orgs","repos_url":"https://api.github.com/users/rachelholladay/repos","events_url":"https://api.github.com/users/rachelholladay/events{/privacy}","received_events_url":"https://api.github.com/users/rachelholladay/received_events","type":"User","site_admin":false},"body":"Adding the gesture interface for the demo. This involves:\r\n\r\n- some pre-computed trajectories for waving, stored in config/\r\n- a slightly simplified version of gestures in the action lib\r\n- the generic tsrs for gestures in tsr lib\r\n- a script file for a text interface to control the gestures","created_at":"2015-10-15T16:02:29Z","updated_at":"2015-10-16T22:12:36Z","closed_at":null,"merged_at":null,"merge_commit_sha":"aea408338d65a5d37daaf2aef286a54c5aa34722","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/personalrobotics/herbpy/pulls/54/commits","review_comments_url":"https://api.github.com/repos/personalrobotics/herbpy/pulls/54/comments","review_comment_url":"https://api.github.com/repos/personalrobotics/herbpy/pulls/comments{/number}","comments_url":"https://api.github.com/repos/personalrobotics/herbpy/issues/54/comments","statuses_url":"https://api.github.com/repos/personalrobotics/herbpy/statuses/52789646bd8fb446345142d752ff3f18cdd68157","head":{"label":"rachelholladay:feature/demo_rogue","ref":"feature/demo_rogue","sha":"52789646bd8fb446345142d752ff3f18cdd68157","user":{"login":"rachelholladay","id":8390650,"avatar_url":"https://avatars.githubusercontent.com/u/8390650?v=3","gravatar_id":"","url":"https://api.github.com/users/rachelholladay","html_url":"https://github.com/rachelholladay","followers_url":"https://api.github.com/users/rachelholladay/followers","following_url":"https://api.github.com/users/rachelholladay/following{/other_user}","gists_url":"https://api.github.com/users/rachelholladay/gists{/gist_id}","starred_url":"https://api.github.com/users/rachelholladay/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rachelholladay/subscriptions","organizations_url":"https://api.github.com/users/rachelholladay/orgs","repos_url":"https://api.github.com/users/rachelholladay/repos","events_url":"https://api.github.com/users/rachelholladay/events{/privacy}","received_events_url":"https://api.github.com/users/rachelholladay/received_events","type":"User","site_admin":false},"repo":{"id":40619601,"name":"herbpy","full_name":"rachelholladay/herbpy","owner":{"login":"rachelholladay","id":8390650,"avatar_url":"https://avatars.githubusercontent.com/u/8390650?v=3","gravatar_id":"","url":"https://api.github.com/users/rachelholladay","html_url":"https://github.com/rachelholladay","followers_url":"https://api.github.com/users/rachelholladay/followers","following_url":"https://api.github.com/users/rachelholladay/following{/other_user}","gists_url":"https://api.github.com/users/rachelholladay/gists{/gist_id}","starred_url":"https://api.github.com/users/rachelholladay/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rachelholladay/subscriptions","organizations_url":"https://api.github.com/users/rachelholladay/orgs","repos_url":"https://api.github.com/users/rachelholladay/repos","events_url":"https://api.github.com/users/rachelholladay/events{/privacy}","received_events_url":"https://api.github.com/users/rachelholladay/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/rachelholladay/herbpy","description":"Python library for interacting with HERB.","fork":true,"url":"https://api.github.com/repos/rachelholladay/herbpy","forks_url":"https://api.github.com/repos/rachelholladay/herbpy/forks","keys_url":"https://api.github.com/repos/rachelholladay/herbpy/keys{/key_id}","collaborators_url":"https://api.github.com/repos/rachelholladay/herbpy/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/rachelholladay/herbpy/teams","hooks_url":"https://api.github.com/repos/rachelholladay/herbpy/hooks","issue_events_url":"https://api.github.com/repos/rachelholladay/herbpy/issues/events{/number}","events_url":"https://api.github.com/repos/rachelholladay/herbpy/events","assignees_url":"https://api.github.com/repos/rachelholladay/herbpy/assignees{/user}","branches_url":"https://api.github.com/repos/rachelholladay/herbpy/branches{/branch}","tags_url":"https://api.github.com/repos/rachelholladay/herbpy/tags","blobs_url":"https://api.github.com/repos/rachelholladay/herbpy/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/rachelholladay/herbpy/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/rachelholladay/herbpy/git/refs{/sha}","trees_url":"https://api.github.com/repos/rachelholladay/herbpy/git/trees{/sha}","statuses_url":"https://api.github.com/repos/rachelholladay/herbpy/statuses/{sha}","languages_url":"https://api.github.com/repos/rachelholladay/herbpy/languages","stargazers_url":"https://api.github.com/repos/rachelholladay/herbpy/stargazers","contributors_url":"https://api.github.com/repos/rachelholladay/herbpy/contributors","subscribers_url":"https://api.github.com/repos/rachelholladay/herbpy/subscribers","subscription_url":"https://api.github.com/repos/rachelholladay/herbpy/subscription","commits_url":"https://api.github.com/repos/rachelholladay/herbpy/commits{/sha}","git_commits_url":"https://api.github.com/repos/rachelholladay/herbpy/git/commits{/sha}","comments_url":"https://api.github.com/repos/rachelholladay/herbpy/comments{/number}","issue_comment_url":"https://api.github.com/repos/rachelholladay/herbpy/issues/comments{/number}","contents_url":"https://api.github.com/repos/rachelholladay/herbpy/contents/{+path}","compare_url":"https://api.github.com/repos/rachelholladay/herbpy/compare/{base}...{head}","merges_url":"https://api.github.com/repos/rachelholladay/herbpy/merges","archive_url":"https://api.github.com/repos/rachelholladay/herbpy/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/rachelholladay/herbpy/downloads","issues_url":"https://api.github.com/repos/rachelholladay/herbpy/issues{/number}","pulls_url":"https://api.github.com/repos/rachelholladay/herbpy/pulls{/number}","milestones_url":"https://api.github.com/repos/rachelholladay/herbpy/milestones{/number}","notifications_url":"https://api.github.com/repos/rachelholladay/herbpy/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/rachelholladay/herbpy/labels{/name}","releases_url":"https://api.github.com/repos/rachelholladay/herbpy/releases{/id}","created_at":"2015-08-12T19:18:57Z","updated_at":"2015-08-12T19:18:57Z","pushed_at":"2015-10-16T01:23:29Z","git_url":"git://github.com/rachelholladay/herbpy.git","ssh_url":"git@github.com:rachelholladay/herbpy.git","clone_url":"https://github.com/rachelholladay/herbpy.git","svn_url":"https://github.com/rachelholladay/herbpy","homepage":"","size":538,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"personalrobotics:master","ref":"master","sha":"a1ef541027c63d3220c0f7a5301601c223d432c9","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":21153263,"name":"herbpy","full_name":"personalrobotics/herbpy","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/herbpy","description":"Python library for interacting with HERB.","fork":false,"url":"https://api.github.com/repos/personalrobotics/herbpy","forks_url":"https://api.github.com/repos/personalrobotics/herbpy/forks","keys_url":"https://api.github.com/repos/personalrobotics/herbpy/keys{/key_id}","collaborators_url":"https://api.github.com/repos/personalrobotics/herbpy/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/personalrobotics/herbpy/teams","hooks_url":"https://api.github.com/repos/personalrobotics/herbpy/hooks","issue_events_url":"https://api.github.com/repos/personalrobotics/herbpy/issues/events{/number}","events_url":"https://api.github.com/repos/personalrobotics/herbpy/events","assignees_url":"https://api.github.com/repos/personalrobotics/herbpy/assignees{/user}","branches_url":"https://api.github.com/repos/personalrobotics/herbpy/branches{/branch}","tags_url":"https://api.github.com/repos/personalrobotics/herbpy/tags","blobs_url":"https://api.github.com/repos/personalrobotics/herbpy/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/personalrobotics/herbpy/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/personalrobotics/herbpy/git/refs{/sha}","trees_url":"https://api.github.com/repos/personalrobotics/herbpy/git/trees{/sha}","statuses_url":"https://api.github.com/repos/personalrobotics/herbpy/statuses/{sha}","languages_url":"https://api.github.com/repos/personalrobotics/herbpy/languages","stargazers_url":"https://api.github.com/repos/personalrobotics/herbpy/stargazers","contributors_url":"https://api.github.com/repos/personalrobotics/herbpy/contributors","subscribers_url":"https://api.github.com/repos/personalrobotics/herbpy/subscribers","subscription_url":"https://api.github.com/repos/personalrobotics/herbpy/subscription","commits_url":"https://api.github.com/repos/personalrobotics/herbpy/commits{/sha}","git_commits_url":"https://api.github.com/repos/personalrobotics/herbpy/git/commits{/sha}","comments_url":"https://api.github.com/repos/personalrobotics/herbpy/comments{/number}","issue_comment_url":"https://api.github.com/repos/personalrobotics/herbpy/issues/comments{/number}","contents_url":"https://api.github.com/repos/personalrobotics/herbpy/contents/{+path}","compare_url":"https://api.github.com/repos/personalrobotics/herbpy/compare/{base}...{head}","merges_url":"https://api.github.com/repos/personalrobotics/herbpy/merges","archive_url":"https://api.github.com/repos/personalrobotics/herbpy/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/personalrobotics/herbpy/downloads","issues_url":"https://api.github.com/repos/personalrobotics/herbpy/issues{/number}","pulls_url":"https://api.github.com/repos/personalrobotics/herbpy/pulls{/number}","milestones_url":"https://api.github.com/repos/personalrobotics/herbpy/milestones{/number}","notifications_url":"https://api.github.com/repos/personalrobotics/herbpy/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/personalrobotics/herbpy/labels{/name}","releases_url":"https://api.github.com/repos/personalrobotics/herbpy/releases{/id}","created_at":"2014-06-24T05:28:33Z","updated_at":"2015-05-01T21:16:36Z","pushed_at":"2015-10-16T01:23:29Z","git_url":"git://github.com/personalrobotics/herbpy.git","ssh_url":"git@github.com:personalrobotics/herbpy.git","clone_url":"https://github.com/personalrobotics/herbpy.git","svn_url":"https://github.com/personalrobotics/herbpy","homepage":"","size":1209,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":5,"mirror_url":null,"open_issues_count":6,"forks":5,"open_issues":6,"watchers":0,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/personalrobotics/herbpy/pulls/54"},"html":{"href":"https://github.com/personalrobotics/herbpy/pull/54"},"issue":{"href":"https://api.github.com/repos/personalrobotics/herbpy/issues/54"},"comments":{"href":"https://api.github.com/repos/personalrobotics/herbpy/issues/54/comments"},"review_comments":{"href":"https://api.github.com/repos/personalrobotics/herbpy/pulls/54/comments"},"review_comment":{"href":"https://api.github.com/repos/personalrobotics/herbpy/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/personalrobotics/herbpy/pulls/54/commits"},"statuses":{"href":"https://api.github.com/repos/personalrobotics/herbpy/statuses/52789646bd8fb446345142d752ff3f18cdd68157"}}}}