{"action":"created","comment":{"url":"https://api.github.com/repos/RoboJackets/robocup-software/pulls/comments/66709013","id":66709013,"diff_hunk":"@@ -0,0 +1,140 @@\n+import single_robot_behavior\n+import behavior\n+from enum import Enum\n+import main\n+import evaluation\n+import constants\n+import role_assignment\n+import robocup\n+import skills.capture\n+import math\n+\n+\n+class TouchBall(single_robot_behavior.SingleRobotBehavior):\n+\n+    # tunable config values\n+    CourseApproachDist = 0.4\n+    DribbleSpeed = 0\n+    # The amount of seconds to look in the future when\n+    # trying to actualy hit the eball. TODO: use maxaccel to find this.\n+    HitAdjust = 1\n+\n+    class State(Enum):\n+        course_approach = 1\n+        hit_ball = 2\n+\n+    # Move back so we hit the mouth, not the side. This is needed\n+    # as the robot will oscilate a bit, giving a 50% chance of failure.\n+    AdjDist = constants.Robot.Radius * 2\n+\n+    ## TouchBall Constructor\n+    # useful for reflecting/bouncing moving ballls.\n+    def __init__(self):\n+        super().__init__(continuous=False)\n+\n+        self.add_state(TouchBall.State.course_approach,\n+                       behavior.Behavior.State.running)\n+        self.add_state(TouchBall.State.hit_ball,\n+                       behavior.Behavior.State.running)\n+\n+        self.add_transition(behavior.Behavior.State.start,\n+                            TouchBall.State.course_approach, lambda: True,\n+                            'immediately')\n+\n+        self.add_transition(\n+            TouchBall.State.course_approach, TouchBall.State.hit_ball,\n+            lambda: (self.ball_in_front_of_bot()) and main.ball().valid,\n+            'dist to ball < threshold')\n+\n+        self.add_transition(TouchBall.State.hit_ball,\n+                            behavior.Behavior.State.completed,\n+                            lambda: self.robot.has_ball(), 'has ball')\n+\n+        self.add_transition(\n+            TouchBall.State.hit_ball, behavior.Behavior.State.failed,\n+            lambda: not (self.ball_in_front_of_bot()) and not main.ball().pos,\n+            'ball went into goal')\n+\n+        self.lastApproachTarget = None\n+\n+    ## Override this to detect if the ball is directly in front of us\n+    def ball_in_front_of_bot(self):\n+        adjFactor = robocup.Point.direction(self.robot.angle) \\\n+                    *  -TouchBall.AdjDist\n+        return (self.robot.pos - adjFactor).dist_to(main.ball().pos) \\\n+            < TouchBall.AdjDist + constants.Robot.Radius\n+\n+    # normalized vector pointing from the ball to the point the robot should get to in course_aproach\n+    def approach_vector(self):\n+        if main.ball().vel.mag() > 0.25 \\\n+            and self.robot.pos.dist_to(main.ball().pos) > 0.2:\n+            # ball's moving, get on the side it's moving towards\n+            return main.ball().vel.normalized()\n+        else:\n+            return (self.robot.pos - main.ball().pos).normalized()\n+\n+    ## A touch is different from a capture in that we should try to keep our\n+    # distance from the ball if possible, and move forward to hit the ball at\n+    # the last minute.\n+    # To do this, let's move the intercept point capture found back a bit.\n+    #\n+    # In addition, lets try to keep this point stable by choosing the closest\n+    # point, instead of the point that we can reach in time closest to the ball\n+    def find_intercept_point(self, adjusted=True):\n+        approach_vec = self.approach_vector()\n+\n+        adjFactor = robocup.Point.direction(self.robot.angle) \\\n+                    *  -TouchBall.AdjDist\n+        robotPos = self.robot.pos - adjFactor\n+\n+        # multiply by a large enough value to cover the field.\n+        approach_line = robocup.Line(\n+            main.ball().pos,\n+            main.ball().pos + approach_vec * constants.Field.Length)\n+        pos = approach_line.nearest_point(robotPos)\n+\n+        if adjusted:\n+            pos += adjFactor\n+\n+        return pos\n+\n+    def execute_running(self):\n+        # make sure teammates don't bump into us\n+        self.robot.shield_from_teammates(constants.Robot.Radius * 2.0)\n+\n+    def on_enter_course_approach(self):\n+        self.lastApproachTarget == None\n+\n+    def execute_course_approach(self):\n+        # don't hit the ball on accident\n+        pos = self.find_intercept_point()\n+\n+        if (self.lastApproachTarget != None and\n+            (pos - self.lastApproachTarget).mag() < 0.1):\n+            self.robot.move_to(self.lastApproachTarget)\n+            main.system_state().draw_circle(\n+                self.lastApproachTarget, constants.Ball.Radius,\n+                constants.Colors.White, \"TouchBall\")\n+        else:\n+            main.system_state().draw_circle(pos, constants.Ball.Radius,\n+                                            constants.Colors.White,\n+                                            \"TouchBall\")\n+            self.robot.move_to(pos)\n+            self.lastApproachTarget = pos\n+\n+    def on_exit_course_approach(self):\n+        self.lastApproachTarget == None","path":"soccer/gameplay/skills/touch_ball.py","position":126,"original_position":126,"commit_id":"30a49f866c99efb0e630dcb6a807c472480e8677","original_commit_id":"30a49f866c99efb0e630dcb6a807c472480e8677","user":{"login":"jgkamat","id":4349709,"avatar_url":"https://avatars.githubusercontent.com/u/4349709?v=3","gravatar_id":"","url":"https://api.github.com/users/jgkamat","html_url":"https://github.com/jgkamat","followers_url":"https://api.github.com/users/jgkamat/followers","following_url":"https://api.github.com/users/jgkamat/following{/other_user}","gists_url":"https://api.github.com/users/jgkamat/gists{/gist_id}","starred_url":"https://api.github.com/users/jgkamat/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jgkamat/subscriptions","organizations_url":"https://api.github.com/users/jgkamat/orgs","repos_url":"https://api.github.com/users/jgkamat/repos","events_url":"https://api.github.com/users/jgkamat/events{/privacy}","received_events_url":"https://api.github.com/users/jgkamat/received_events","type":"User","site_admin":false},"body":"aaah that should be a warning in python ","created_at":"2016-06-11T17:27:47Z","updated_at":"2016-06-11T17:27:47Z","html_url":"https://github.com/RoboJackets/robocup-software/pull/675#discussion_r66709013","pull_request_url":"https://api.github.com/repos/RoboJackets/robocup-software/pulls/675","_links":{"self":{"href":"https://api.github.com/repos/RoboJackets/robocup-software/pulls/comments/66709013"},"html":{"href":"https://github.com/RoboJackets/robocup-software/pull/675#discussion_r66709013"},"pull_request":{"href":"https://api.github.com/repos/RoboJackets/robocup-software/pulls/675"}}},"pull_request":{"url":"https://api.github.com/repos/RoboJackets/robocup-software/pulls/675","id":70964614,"html_url":"https://github.com/RoboJackets/robocup-software/pull/675","diff_url":"https://github.com/RoboJackets/robocup-software/pull/675.diff","patch_url":"https://github.com/RoboJackets/robocup-software/pull/675.patch","issue_url":"https://api.github.com/repos/RoboJackets/robocup-software/issues/675","number":675,"state":"open","locked":false,"title":"Start to fix touchpass","user":{"login":"jgkamat","id":4349709,"avatar_url":"https://avatars.githubusercontent.com/u/4349709?v=3","gravatar_id":"","url":"https://api.github.com/users/jgkamat","html_url":"https://github.com/jgkamat","followers_url":"https://api.github.com/users/jgkamat/followers","following_url":"https://api.github.com/users/jgkamat/following{/other_user}","gists_url":"https://api.github.com/users/jgkamat/gists{/gist_id}","starred_url":"https://api.github.com/users/jgkamat/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jgkamat/subscriptions","organizations_url":"https://api.github.com/users/jgkamat/orgs","repos_url":"https://api.github.com/users/jgkamat/repos","events_url":"https://api.github.com/users/jgkamat/events{/privacy}","received_events_url":"https://api.github.com/users/jgkamat/received_events","type":"User","site_admin":false},"body":"Touchpass was broken from some point during last year in china, but I think I've fixed it (at least in the simulator for now). The cause of this was using capture in the receiving play, which I made some modificiations to fix. This is still a work in progress, but it's mostly done.\r\n\r\nThe main improvement I was thinking about was hijacking the 'fine-approach' state in capture to lunge towards the ball, as well as improve detecting when a touchpass fails earlier if possible. I've already modified course approach to suggest points to intercept on that allow for a touchpass.\r\n\r\nRight now, only style is complaning, but I'll fix that once we have everything else wrapped up.\r\n\r\nSee #408","created_at":"2016-05-22T00:50:24Z","updated_at":"2016-06-11T17:27:47Z","closed_at":null,"merged_at":null,"merge_commit_sha":"e19cf22894aed4ce0d7d0999728111687dd4fc61","assignee":{"login":"jgkamat","id":4349709,"avatar_url":"https://avatars.githubusercontent.com/u/4349709?v=3","gravatar_id":"","url":"https://api.github.com/users/jgkamat","html_url":"https://github.com/jgkamat","followers_url":"https://api.github.com/users/jgkamat/followers","following_url":"https://api.github.com/users/jgkamat/following{/other_user}","gists_url":"https://api.github.com/users/jgkamat/gists{/gist_id}","starred_url":"https://api.github.com/users/jgkamat/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jgkamat/subscriptions","organizations_url":"https://api.github.com/users/jgkamat/orgs","repos_url":"https://api.github.com/users/jgkamat/repos","events_url":"https://api.github.com/users/jgkamat/events{/privacy}","received_events_url":"https://api.github.com/users/jgkamat/received_events","type":"User","site_admin":false},"milestone":{"url":"https://api.github.com/repos/RoboJackets/robocup-software/milestones/6","html_url":"https://github.com/RoboJackets/robocup-software/milestones/Germany%202016","labels_url":"https://api.github.com/repos/RoboJackets/robocup-software/milestones/6/labels","id":1068356,"number":6,"title":"Germany 2016","description":"Goals that we'd like to accomplish for the 2016 international RoboCup competition in Germany.","creator":{"login":"justbuchanan","id":115131,"avatar_url":"https://avatars.githubusercontent.com/u/115131?v=3","gravatar_id":"","url":"https://api.github.com/users/justbuchanan","html_url":"https://github.com/justbuchanan","followers_url":"https://api.github.com/users/justbuchanan/followers","following_url":"https://api.github.com/users/justbuchanan/following{/other_user}","gists_url":"https://api.github.com/users/justbuchanan/gists{/gist_id}","starred_url":"https://api.github.com/users/justbuchanan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/justbuchanan/subscriptions","organizations_url":"https://api.github.com/users/justbuchanan/orgs","repos_url":"https://api.github.com/users/justbuchanan/repos","events_url":"https://api.github.com/users/justbuchanan/events{/privacy}","received_events_url":"https://api.github.com/users/justbuchanan/received_events","type":"User","site_admin":false},"open_issues":39,"closed_issues":40,"state":"open","created_at":"2015-04-15T08:27:38Z","updated_at":"2016-06-10T00:41:05Z","due_on":"2016-07-01T04:00:00Z","closed_at":null},"commits_url":"https://api.github.com/repos/RoboJackets/robocup-software/pulls/675/commits","review_comments_url":"https://api.github.com/repos/RoboJackets/robocup-software/pulls/675/comments","review_comment_url":"https://api.github.com/repos/RoboJackets/robocup-software/pulls/comments{/number}","comments_url":"https://api.github.com/repos/RoboJackets/robocup-software/issues/675/comments","statuses_url":"https://api.github.com/repos/RoboJackets/robocup-software/statuses/30a49f866c99efb0e630dcb6a807c472480e8677","head":{"label":"RoboJackets:jay/touchpass+","ref":"jay/touchpass+","sha":"30a49f866c99efb0e630dcb6a807c472480e8677","user":{"login":"RoboJackets","id":3523251,"avatar_url":"https://avatars.githubusercontent.com/u/3523251?v=3","gravatar_id":"","url":"https://api.github.com/users/RoboJackets","html_url":"https://github.com/RoboJackets","followers_url":"https://api.github.com/users/RoboJackets/followers","following_url":"https://api.github.com/users/RoboJackets/following{/other_user}","gists_url":"https://api.github.com/users/RoboJackets/gists{/gist_id}","starred_url":"https://api.github.com/users/RoboJackets/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/RoboJackets/subscriptions","organizations_url":"https://api.github.com/users/RoboJackets/orgs","repos_url":"https://api.github.com/users/RoboJackets/repos","events_url":"https://api.github.com/users/RoboJackets/events{/privacy}","received_events_url":"https://api.github.com/users/RoboJackets/received_events","type":"Organization","site_admin":false},"repo":{"id":15662105,"name":"robocup-software","full_name":"RoboJackets/robocup-software","owner":{"login":"RoboJackets","id":3523251,"avatar_url":"https://avatars.githubusercontent.com/u/3523251?v=3","gravatar_id":"","url":"https://api.github.com/users/RoboJackets","html_url":"https://github.com/RoboJackets","followers_url":"https://api.github.com/users/RoboJackets/followers","following_url":"https://api.github.com/users/RoboJackets/following{/other_user}","gists_url":"https://api.github.com/users/RoboJackets/gists{/gist_id}","starred_url":"https://api.github.com/users/RoboJackets/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/RoboJackets/subscriptions","organizations_url":"https://api.github.com/users/RoboJackets/orgs","repos_url":"https://api.github.com/users/RoboJackets/repos","events_url":"https://api.github.com/users/RoboJackets/events{/privacy}","received_events_url":"https://api.github.com/users/RoboJackets/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/RoboJackets/robocup-software","description":"Georgia Tech RoboJackets software for the RoboCup Small Size League","fork":false,"url":"https://api.github.com/repos/RoboJackets/robocup-software","forks_url":"https://api.github.com/repos/RoboJackets/robocup-software/forks","keys_url":"https://api.github.com/repos/RoboJackets/robocup-software/keys{/key_id}","collaborators_url":"https://api.github.com/repos/RoboJackets/robocup-software/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/RoboJackets/robocup-software/teams","hooks_url":"https://api.github.com/repos/RoboJackets/robocup-software/hooks","issue_events_url":"https://api.github.com/repos/RoboJackets/robocup-software/issues/events{/number}","events_url":"https://api.github.com/repos/RoboJackets/robocup-software/events","assignees_url":"https://api.github.com/repos/RoboJackets/robocup-software/assignees{/user}","branches_url":"https://api.github.com/repos/RoboJackets/robocup-software/branches{/branch}","tags_url":"https://api.github.com/repos/RoboJackets/robocup-software/tags","blobs_url":"https://api.github.com/repos/RoboJackets/robocup-software/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/RoboJackets/robocup-software/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/RoboJackets/robocup-software/git/refs{/sha}","trees_url":"https://api.github.com/repos/RoboJackets/robocup-software/git/trees{/sha}","statuses_url":"https://api.github.com/repos/RoboJackets/robocup-software/statuses/{sha}","languages_url":"https://api.github.com/repos/RoboJackets/robocup-software/languages","stargazers_url":"https://api.github.com/repos/RoboJackets/robocup-software/stargazers","contributors_url":"https://api.github.com/repos/RoboJackets/robocup-software/contributors","subscribers_url":"https://api.github.com/repos/RoboJackets/robocup-software/subscribers","subscription_url":"https://api.github.com/repos/RoboJackets/robocup-software/subscription","commits_url":"https://api.github.com/repos/RoboJackets/robocup-software/commits{/sha}","git_commits_url":"https://api.github.com/repos/RoboJackets/robocup-software/git/commits{/sha}","comments_url":"https://api.github.com/repos/RoboJackets/robocup-software/comments{/number}","issue_comment_url":"https://api.github.com/repos/RoboJackets/robocup-software/issues/comments{/number}","contents_url":"https://api.github.com/repos/RoboJackets/robocup-software/contents/{+path}","compare_url":"https://api.github.com/repos/RoboJackets/robocup-software/compare/{base}...{head}","merges_url":"https://api.github.com/repos/RoboJackets/robocup-software/merges","archive_url":"https://api.github.com/repos/RoboJackets/robocup-software/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/RoboJackets/robocup-software/downloads","issues_url":"https://api.github.com/repos/RoboJackets/robocup-software/issues{/number}","pulls_url":"https://api.github.com/repos/RoboJackets/robocup-software/pulls{/number}","milestones_url":"https://api.github.com/repos/RoboJackets/robocup-software/milestones{/number}","notifications_url":"https://api.github.com/repos/RoboJackets/robocup-software/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/RoboJackets/robocup-software/labels{/name}","releases_url":"https://api.github.com/repos/RoboJackets/robocup-software/releases{/id}","deployments_url":"https://api.github.com/repos/RoboJackets/robocup-software/deployments","created_at":"2014-01-06T01:09:14Z","updated_at":"2016-06-10T15:56:30Z","pushed_at":"2016-06-11T06:13:04Z","git_url":"git://github.com/RoboJackets/robocup-software.git","ssh_url":"git@github.com:RoboJackets/robocup-software.git","clone_url":"https://github.com/RoboJackets/robocup-software.git","svn_url":"https://github.com/RoboJackets/robocup-software","homepage":"http://www.robojackets.org/teams/robocup/","size":436290,"stargazers_count":49,"watchers_count":49,"language":"C++","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":74,"mirror_url":null,"open_issues_count":123,"forks":74,"open_issues":123,"watchers":49,"default_branch":"master"}},"base":{"label":"RoboJackets:master","ref":"master","sha":"ab663327467ae425b29108bde7a706e8547153fb","user":{"login":"RoboJackets","id":3523251,"avatar_url":"https://avatars.githubusercontent.com/u/3523251?v=3","gravatar_id":"","url":"https://api.github.com/users/RoboJackets","html_url":"https://github.com/RoboJackets","followers_url":"https://api.github.com/users/RoboJackets/followers","following_url":"https://api.github.com/users/RoboJackets/following{/other_user}","gists_url":"https://api.github.com/users/RoboJackets/gists{/gist_id}","starred_url":"https://api.github.com/users/RoboJackets/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/RoboJackets/subscriptions","organizations_url":"https://api.github.com/users/RoboJackets/orgs","repos_url":"https://api.github.com/users/RoboJackets/repos","events_url":"https://api.github.com/users/RoboJackets/events{/privacy}","received_events_url":"https://api.github.com/users/RoboJackets/received_events","type":"Organization","site_admin":false},"repo":{"id":15662105,"name":"robocup-software","full_name":"RoboJackets/robocup-software","owner":{"login":"RoboJackets","id":3523251,"avatar_url":"https://avatars.githubusercontent.com/u/3523251?v=3","gravatar_id":"","url":"https://api.github.com/users/RoboJackets","html_url":"https://github.com/RoboJackets","followers_url":"https://api.github.com/users/RoboJackets/followers","following_url":"https://api.github.com/users/RoboJackets/following{/other_user}","gists_url":"https://api.github.com/users/RoboJackets/gists{/gist_id}","starred_url":"https://api.github.com/users/RoboJackets/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/RoboJackets/subscriptions","organizations_url":"https://api.github.com/users/RoboJackets/orgs","repos_url":"https://api.github.com/users/RoboJackets/repos","events_url":"https://api.github.com/users/RoboJackets/events{/privacy}","received_events_url":"https://api.github.com/users/RoboJackets/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/RoboJackets/robocup-software","description":"Georgia Tech RoboJackets software for the RoboCup Small Size League","fork":false,"url":"https://api.github.com/repos/RoboJackets/robocup-software","forks_url":"https://api.github.com/repos/RoboJackets/robocup-software/forks","keys_url":"https://api.github.com/repos/RoboJackets/robocup-software/keys{/key_id}","collaborators_url":"https://api.github.com/repos/RoboJackets/robocup-software/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/RoboJackets/robocup-software/teams","hooks_url":"https://api.github.com/repos/RoboJackets/robocup-software/hooks","issue_events_url":"https://api.github.com/repos/RoboJackets/robocup-software/issues/events{/number}","events_url":"https://api.github.com/repos/RoboJackets/robocup-software/events","assignees_url":"https://api.github.com/repos/RoboJackets/robocup-software/assignees{/user}","branches_url":"https://api.github.com/repos/RoboJackets/robocup-software/branches{/branch}","tags_url":"https://api.github.com/repos/RoboJackets/robocup-software/tags","blobs_url":"https://api.github.com/repos/RoboJackets/robocup-software/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/RoboJackets/robocup-software/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/RoboJackets/robocup-software/git/refs{/sha}","trees_url":"https://api.github.com/repos/RoboJackets/robocup-software/git/trees{/sha}","statuses_url":"https://api.github.com/repos/RoboJackets/robocup-software/statuses/{sha}","languages_url":"https://api.github.com/repos/RoboJackets/robocup-software/languages","stargazers_url":"https://api.github.com/repos/RoboJackets/robocup-software/stargazers","contributors_url":"https://api.github.com/repos/RoboJackets/robocup-software/contributors","subscribers_url":"https://api.github.com/repos/RoboJackets/robocup-software/subscribers","subscription_url":"https://api.github.com/repos/RoboJackets/robocup-software/subscription","commits_url":"https://api.github.com/repos/RoboJackets/robocup-software/commits{/sha}","git_commits_url":"https://api.github.com/repos/RoboJackets/robocup-software/git/commits{/sha}","comments_url":"https://api.github.com/repos/RoboJackets/robocup-software/comments{/number}","issue_comment_url":"https://api.github.com/repos/RoboJackets/robocup-software/issues/comments{/number}","contents_url":"https://api.github.com/repos/RoboJackets/robocup-software/contents/{+path}","compare_url":"https://api.github.com/repos/RoboJackets/robocup-software/compare/{base}...{head}","merges_url":"https://api.github.com/repos/RoboJackets/robocup-software/merges","archive_url":"https://api.github.com/repos/RoboJackets/robocup-software/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/RoboJackets/robocup-software/downloads","issues_url":"https://api.github.com/repos/RoboJackets/robocup-software/issues{/number}","pulls_url":"https://api.github.com/repos/RoboJackets/robocup-software/pulls{/number}","milestones_url":"https://api.github.com/repos/RoboJackets/robocup-software/milestones{/number}","notifications_url":"https://api.github.com/repos/RoboJackets/robocup-software/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/RoboJackets/robocup-software/labels{/name}","releases_url":"https://api.github.com/repos/RoboJackets/robocup-software/releases{/id}","deployments_url":"https://api.github.com/repos/RoboJackets/robocup-software/deployments","created_at":"2014-01-06T01:09:14Z","updated_at":"2016-06-10T15:56:30Z","pushed_at":"2016-06-11T06:13:04Z","git_url":"git://github.com/RoboJackets/robocup-software.git","ssh_url":"git@github.com:RoboJackets/robocup-software.git","clone_url":"https://github.com/RoboJackets/robocup-software.git","svn_url":"https://github.com/RoboJackets/robocup-software","homepage":"http://www.robojackets.org/teams/robocup/","size":436290,"stargazers_count":49,"watchers_count":49,"language":"C++","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":74,"mirror_url":null,"open_issues_count":123,"forks":74,"open_issues":123,"watchers":49,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/RoboJackets/robocup-software/pulls/675"},"html":{"href":"https://github.com/RoboJackets/robocup-software/pull/675"},"issue":{"href":"https://api.github.com/repos/RoboJackets/robocup-software/issues/675"},"comments":{"href":"https://api.github.com/repos/RoboJackets/robocup-software/issues/675/comments"},"review_comments":{"href":"https://api.github.com/repos/RoboJackets/robocup-software/pulls/675/comments"},"review_comment":{"href":"https://api.github.com/repos/RoboJackets/robocup-software/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/RoboJackets/robocup-software/pulls/675/commits"},"statuses":{"href":"https://api.github.com/repos/RoboJackets/robocup-software/statuses/30a49f866c99efb0e630dcb6a807c472480e8677"}}}}
{"actor":{"display_login":"jgkamat"}}