{"action":"created","comment":{"url":"https://api.github.com/repos/iNavFlight/inav/pulls/comments/63275492","id":63275492,"diff_hunk":"@@ -293,13 +296,127 @@ static void pidApplyRateController(const pidProfile_t *pidProfile, pidState_t *p\n #endif\n }\n \n+void updateMagHoldHeading(int16_t heading)\n+{\n+    magHoldTargetHeading = heading;\n+}\n+\n+int16_t getMagHoldHeading() {\n+    return magHoldTargetHeading;\n+}\n+\n+uint8_t getMagHoldState()\n+{\n+\n+    #ifndef MAG\n+        return MAG_HOLD_DISABLED;\n+    #endif\n+\n+    if (!sensors(SENSOR_MAG) || !STATE(SMALL_ANGLE)) {\n+        return MAG_HOLD_DISABLED;\n+    }\n+\n+#if defined(NAV)\n+    int navHeadingState = naivationGetHeadingControlState();\n+    // NAV will prevent MAG_MODE from activating, but require heading control\n+    if (navHeadingState != NAV_HEADING_CONTROL_NONE) {\n+        // Apply maghold only if heading control is in auto mode\n+        if (navHeadingState == NAV_HEADING_CONTROL_AUTO) {\n+            return MAG_HOLD_ENABLED;\n+        }\n+    }\n+    else\n+#endif\n+    if (ABS(rcCommand[YAW]) < 15 && FLIGHT_MODE(MAG_MODE)) {\n+        return MAG_HOLD_ENABLED;\n+    } else {\n+        return MAG_HOLD_UPDATE_HEADING;\n+    }\n+\n+    return MAG_HOLD_UPDATE_HEADING;\n+}\n+\n+/*\n+ * MAG_HOLD P Controller returns desired rotation rate in dps to be fed to Rate controller\n+ */\n+float pidMagHold(const pidProfile_t *pidProfile)\n+{\n+\n+    static filterStatePt1_t magHoldRateFilter;\n+    float magHoldRate;\n+\n+    int16_t error = DECIDEGREES_TO_DEGREES(attitude.values.yaw) - magHoldTargetHeading;\n+\n+    /*\n+     * Convert absolute error into relative to current heading\n+     */\n+    if (error <= -180) {\n+        error += 360;\n+    }\n+\n+    if (error >= +180) {\n+        error -= 360;\n+    }\n+\n+    /*\n+        New MAG_HOLD controller work slightly different that previous one.\n+        Old one mapped error to rotation speed in following way:\n+            - on rate 0 it gave about 0.5dps for each degree of error\n+            - error 0 = rotation speed of 0dps\n+            - error 180 = rotation speed of 96 degrees per second\n+            - output\n+            - that gives about 2 seconds to correct any error, no matter how big. Of course, usually more because of inertia.\n+        That was making him quite \"soft\" for small changes and rapid for big ones that started to appear\n+        when iNav introduced real RTH and WAYPOINT that might require rapid heading changes.\n+\n+        New approach uses modified principle:\n+            - manual yaw rate is not used. MAG_HOLD is decoupled from manual input settings\n+            - instead, mag_hold_rate_limit is used. It defines max rotation speed in dps that MAG_HOLD controller can require from RateController\n+            - computed rotation speed is capped at -mag_hold_rate_limit and mag_hold_rate_limit\n+            - Default mag_hold_rate_limit = 40dps and default MAG_HOLD P-gain is 40\n+            - With those values, maximum rotation speed will be required from Rate Controller when error is greater that 30 degrees\n+            - For smaller error, required rate will be proportional.\n+            - It uses LPF filter set at 2Hz to additionally smoothen out any rapid changes\n+            - That makes correction of smaller errors stronger, and those of big errors softer\n+\n+        This make looks as very slow rotation rate, but please remember this is automatic mode.\n+        Manual override with YAW input when MAG_HOLD is enabled will still use \"manual\" rates, not MAG_HOLD rates.\n+        Highest possible correction is 180 degrees and it will take more less 4.5 seconds. It is even more than sufficient\n+        to run RTH or WAYPOINT missions. My favourite rate range here is 20dps - 30dps that gives nice and smooth turns.\n+\n+        Correction for small errors is much faster now. For example, old contrioller for 2deg errors required 1dps (correction in 2 seconds).\n+        New controller for 2deg error requires 2,6dps. 4dps for 3deg and so on up until mag_hold_rate_limit is reached.\n+    */\n+\n+    magHoldRate = error * pidProfile->P8[PIDMAG] / 30;\n+    magHoldRate = constrainf(magHoldRate, -pidProfile->mag_hold_rate_limit, pidProfile->mag_hold_rate_limit);\n+    magHoldRate = filterApplyPt1(magHoldRate, &magHoldRateFilter, MAG_HOLD_ERROR_LPF_FREQ, dT);","path":"src/main/flight/pid.c","position":115,"original_position":115,"commit_id":"1ca2cc306426fd3834ac73041c125cf04d214aa6","original_commit_id":"9d47bb8436f0b04a7f81fbc978483830f040f5ab","user":{"login":"theArchLadder","id":11679497,"avatar_url":"https://avatars.githubusercontent.com/u/11679497?v=3","gravatar_id":"","url":"https://api.github.com/users/theArchLadder","html_url":"https://github.com/theArchLadder","followers_url":"https://api.github.com/users/theArchLadder/followers","following_url":"https://api.github.com/users/theArchLadder/following{/other_user}","gists_url":"https://api.github.com/users/theArchLadder/gists{/gist_id}","starred_url":"https://api.github.com/users/theArchLadder/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/theArchLadder/subscriptions","organizations_url":"https://api.github.com/users/theArchLadder/orgs","repos_url":"https://api.github.com/users/theArchLadder/repos","events_url":"https://api.github.com/users/theArchLadder/events{/privacy}","received_events_url":"https://api.github.com/users/theArchLadder/received_events","type":"User","site_admin":false},"body":"I want to play around with acc limit but i need help:\r\n1. Is the \"dT\" in seconds or microseconds?\r\n2. What would be the proper way of saving magHoldRate between function calls? Do i just declare a variable outside the function?\r\n\r\nLooks like this might be the place to add something like this:\r\n`float accLimit = 180 * dT; // 180 deg/s^2 acc limit`\r\n`magHoldRate = constrainf(magHoldRate, oldMagHoldRate-accLimit, oldMagHoldRate+accLimit);`\r\nDoes it look like i'm on the right track? I plan to remove the filterApplyPt1 thingy.","created_at":"2016-05-14T12:27:14Z","updated_at":"2016-05-14T12:27:14Z","html_url":"https://github.com/iNavFlight/inav/pull/195#discussion_r63275492","pull_request_url":"https://api.github.com/repos/iNavFlight/inav/pulls/195","_links":{"self":{"href":"https://api.github.com/repos/iNavFlight/inav/pulls/comments/63275492"},"html":{"href":"https://github.com/iNavFlight/inav/pull/195#discussion_r63275492"},"pull_request":{"href":"https://api.github.com/repos/iNavFlight/inav/pulls/195"}}},"pull_request":{"url":"https://api.github.com/repos/iNavFlight/inav/pulls/195","id":69387433,"html_url":"https://github.com/iNavFlight/inav/pull/195","diff_url":"https://github.com/iNavFlight/inav/pull/195.diff","patch_url":"https://github.com/iNavFlight/inav/pull/195.patch","issue_url":"https://api.github.com/repos/iNavFlight/inav/issues/195","number":195,"state":"open","locked":false,"title":"MAG_HOLD diff limiting and MAG controller refactoring","user":{"login":"DzikuVx","id":966811,"avatar_url":"https://avatars.githubusercontent.com/u/966811?v=3","gravatar_id":"","url":"https://api.github.com/users/DzikuVx","html_url":"https://github.com/DzikuVx","followers_url":"https://api.github.com/users/DzikuVx/followers","following_url":"https://api.github.com/users/DzikuVx/following{/other_user}","gists_url":"https://api.github.com/users/DzikuVx/gists{/gist_id}","starred_url":"https://api.github.com/users/DzikuVx/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/DzikuVx/subscriptions","organizations_url":"https://api.github.com/users/DzikuVx/orgs","repos_url":"https://api.github.com/users/DzikuVx/repos","events_url":"https://api.github.com/users/DzikuVx/events{/privacy}","received_events_url":"https://api.github.com/users/DzikuVx/received_events","type":"User","site_admin":false},"body":"This is an attempt to solve rapid yaw movements indicated in #156 \r\nOn underpowered multirotor rapid YAW movement induced by MAG_HOLD controller (WAYPOINT change, RTH) can cause roll/pitch instability.\r\n\r\nBy default, MAG diff between desired and current heading is not constrained (`mag_hold_heading_diff_limit = 180`). If this value is lowered, max heading error passed to ***P*** controller will be constrained between `-mag_hold_heading_diff_limit` and `mag_hold_heading_diff_limit`\r\nMissing error will be applied as UAV start to rotate in given direction\r\n\r\nField tested this last weekend with hardcoded 30 degrees and it worked nice. It also allowed for higher MAG P gain.\r\n\r\nNext step would be to refactor MAG controller and move it inside PID loop","created_at":"2016-05-09T18:18:21Z","updated_at":"2016-05-14T12:27:14Z","closed_at":null,"merged_at":null,"merge_commit_sha":"fdfc71d1187374eeacc08c139f4936061e30f595","assignee":{"login":"DzikuVx","id":966811,"avatar_url":"https://avatars.githubusercontent.com/u/966811?v=3","gravatar_id":"","url":"https://api.github.com/users/DzikuVx","html_url":"https://github.com/DzikuVx","followers_url":"https://api.github.com/users/DzikuVx/followers","following_url":"https://api.github.com/users/DzikuVx/following{/other_user}","gists_url":"https://api.github.com/users/DzikuVx/gists{/gist_id}","starred_url":"https://api.github.com/users/DzikuVx/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/DzikuVx/subscriptions","organizations_url":"https://api.github.com/users/DzikuVx/orgs","repos_url":"https://api.github.com/users/DzikuVx/repos","events_url":"https://api.github.com/users/DzikuVx/events{/privacy}","received_events_url":"https://api.github.com/users/DzikuVx/received_events","type":"User","site_admin":false},"milestone":{"url":"https://api.github.com/repos/iNavFlight/inav/milestones/5","html_url":"https://github.com/iNavFlight/inav/milestones/1.2","labels_url":"https://api.github.com/repos/iNavFlight/inav/milestones/5/labels","id":1623760,"number":5,"title":"1.2","description":null,"creator":{"login":"digitalentity","id":11059099,"avatar_url":"https://avatars.githubusercontent.com/u/11059099?v=3","gravatar_id":"","url":"https://api.github.com/users/digitalentity","html_url":"https://github.com/digitalentity","followers_url":"https://api.github.com/users/digitalentity/followers","following_url":"https://api.github.com/users/digitalentity/following{/other_user}","gists_url":"https://api.github.com/users/digitalentity/gists{/gist_id}","starred_url":"https://api.github.com/users/digitalentity/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/digitalentity/subscriptions","organizations_url":"https://api.github.com/users/digitalentity/orgs","repos_url":"https://api.github.com/users/digitalentity/repos","events_url":"https://api.github.com/users/digitalentity/events{/privacy}","received_events_url":"https://api.github.com/users/digitalentity/received_events","type":"User","site_admin":false},"open_issues":15,"closed_issues":4,"state":"open","created_at":"2016-03-05T15:40:12Z","updated_at":"2016-05-12T11:03:15Z","due_on":null,"closed_at":null},"commits_url":"https://api.github.com/repos/iNavFlight/inav/pulls/195/commits","review_comments_url":"https://api.github.com/repos/iNavFlight/inav/pulls/195/comments","review_comment_url":"https://api.github.com/repos/iNavFlight/inav/pulls/comments{/number}","comments_url":"https://api.github.com/repos/iNavFlight/inav/issues/195/comments","statuses_url":"https://api.github.com/repos/iNavFlight/inav/statuses/1ca2cc306426fd3834ac73041c125cf04d214aa6","head":{"label":"DzikuVx:inav-mag-limit-and-smooth","ref":"inav-mag-limit-and-smooth","sha":"1ca2cc306426fd3834ac73041c125cf04d214aa6","user":{"login":"DzikuVx","id":966811,"avatar_url":"https://avatars.githubusercontent.com/u/966811?v=3","gravatar_id":"","url":"https://api.github.com/users/DzikuVx","html_url":"https://github.com/DzikuVx","followers_url":"https://api.github.com/users/DzikuVx/followers","following_url":"https://api.github.com/users/DzikuVx/following{/other_user}","gists_url":"https://api.github.com/users/DzikuVx/gists{/gist_id}","starred_url":"https://api.github.com/users/DzikuVx/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/DzikuVx/subscriptions","organizations_url":"https://api.github.com/users/DzikuVx/orgs","repos_url":"https://api.github.com/users/DzikuVx/repos","events_url":"https://api.github.com/users/DzikuVx/events{/privacy}","received_events_url":"https://api.github.com/users/DzikuVx/received_events","type":"User","site_admin":false},"repo":{"id":42505444,"name":"cleanflight","full_name":"DzikuVx/cleanflight","owner":{"login":"DzikuVx","id":966811,"avatar_url":"https://avatars.githubusercontent.com/u/966811?v=3","gravatar_id":"","url":"https://api.github.com/users/DzikuVx","html_url":"https://github.com/DzikuVx","followers_url":"https://api.github.com/users/DzikuVx/followers","following_url":"https://api.github.com/users/DzikuVx/following{/other_user}","gists_url":"https://api.github.com/users/DzikuVx/gists{/gist_id}","starred_url":"https://api.github.com/users/DzikuVx/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/DzikuVx/subscriptions","organizations_url":"https://api.github.com/users/DzikuVx/orgs","repos_url":"https://api.github.com/users/DzikuVx/repos","events_url":"https://api.github.com/users/DzikuVx/events{/privacy}","received_events_url":"https://api.github.com/users/DzikuVx/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/DzikuVx/cleanflight","description":"Clean-code version of the baseflight flight controller firmware","fork":true,"url":"https://api.github.com/repos/DzikuVx/cleanflight","forks_url":"https://api.github.com/repos/DzikuVx/cleanflight/forks","keys_url":"https://api.github.com/repos/DzikuVx/cleanflight/keys{/key_id}","collaborators_url":"https://api.github.com/repos/DzikuVx/cleanflight/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/DzikuVx/cleanflight/teams","hooks_url":"https://api.github.com/repos/DzikuVx/cleanflight/hooks","issue_events_url":"https://api.github.com/repos/DzikuVx/cleanflight/issues/events{/number}","events_url":"https://api.github.com/repos/DzikuVx/cleanflight/events","assignees_url":"https://api.github.com/repos/DzikuVx/cleanflight/assignees{/user}","branches_url":"https://api.github.com/repos/DzikuVx/cleanflight/branches{/branch}","tags_url":"https://api.github.com/repos/DzikuVx/cleanflight/tags","blobs_url":"https://api.github.com/repos/DzikuVx/cleanflight/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/DzikuVx/cleanflight/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/DzikuVx/cleanflight/git/refs{/sha}","trees_url":"https://api.github.com/repos/DzikuVx/cleanflight/git/trees{/sha}","statuses_url":"https://api.github.com/repos/DzikuVx/cleanflight/statuses/{sha}","languages_url":"https://api.github.com/repos/DzikuVx/cleanflight/languages","stargazers_url":"https://api.github.com/repos/DzikuVx/cleanflight/stargazers","contributors_url":"https://api.github.com/repos/DzikuVx/cleanflight/contributors","subscribers_url":"https://api.github.com/repos/DzikuVx/cleanflight/subscribers","subscription_url":"https://api.github.com/repos/DzikuVx/cleanflight/subscription","commits_url":"https://api.github.com/repos/DzikuVx/cleanflight/commits{/sha}","git_commits_url":"https://api.github.com/repos/DzikuVx/cleanflight/git/commits{/sha}","comments_url":"https://api.github.com/repos/DzikuVx/cleanflight/comments{/number}","issue_comment_url":"https://api.github.com/repos/DzikuVx/cleanflight/issues/comments{/number}","contents_url":"https://api.github.com/repos/DzikuVx/cleanflight/contents/{+path}","compare_url":"https://api.github.com/repos/DzikuVx/cleanflight/compare/{base}...{head}","merges_url":"https://api.github.com/repos/DzikuVx/cleanflight/merges","archive_url":"https://api.github.com/repos/DzikuVx/cleanflight/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/DzikuVx/cleanflight/downloads","issues_url":"https://api.github.com/repos/DzikuVx/cleanflight/issues{/number}","pulls_url":"https://api.github.com/repos/DzikuVx/cleanflight/pulls{/number}","milestones_url":"https://api.github.com/repos/DzikuVx/cleanflight/milestones{/number}","notifications_url":"https://api.github.com/repos/DzikuVx/cleanflight/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/DzikuVx/cleanflight/labels{/name}","releases_url":"https://api.github.com/repos/DzikuVx/cleanflight/releases{/id}","deployments_url":"https://api.github.com/repos/DzikuVx/cleanflight/deployments","created_at":"2015-09-15T08:33:57Z","updated_at":"2016-01-11T14:33:48Z","pushed_at":"2016-05-14T11:57:12Z","git_url":"git://github.com/DzikuVx/cleanflight.git","ssh_url":"git@github.com:DzikuVx/cleanflight.git","clone_url":"https://github.com/DzikuVx/cleanflight.git","svn_url":"https://github.com/DzikuVx/cleanflight","homepage":"http://cleanflight.com","size":38253,"stargazers_count":0,"watchers_count":0,"language":"C","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":"iNavFlight:master","ref":"master","sha":"a8a9ba82c54b3e5b144d471373201c2ca9f36300","user":{"login":"iNavFlight","id":15979895,"avatar_url":"https://avatars.githubusercontent.com/u/15979895?v=3","gravatar_id":"","url":"https://api.github.com/users/iNavFlight","html_url":"https://github.com/iNavFlight","followers_url":"https://api.github.com/users/iNavFlight/followers","following_url":"https://api.github.com/users/iNavFlight/following{/other_user}","gists_url":"https://api.github.com/users/iNavFlight/gists{/gist_id}","starred_url":"https://api.github.com/users/iNavFlight/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/iNavFlight/subscriptions","organizations_url":"https://api.github.com/users/iNavFlight/orgs","repos_url":"https://api.github.com/users/iNavFlight/repos","events_url":"https://api.github.com/users/iNavFlight/events{/privacy}","received_events_url":"https://api.github.com/users/iNavFlight/received_events","type":"Organization","site_admin":false},"repo":{"id":32148604,"name":"inav","full_name":"iNavFlight/inav","owner":{"login":"iNavFlight","id":15979895,"avatar_url":"https://avatars.githubusercontent.com/u/15979895?v=3","gravatar_id":"","url":"https://api.github.com/users/iNavFlight","html_url":"https://github.com/iNavFlight","followers_url":"https://api.github.com/users/iNavFlight/followers","following_url":"https://api.github.com/users/iNavFlight/following{/other_user}","gists_url":"https://api.github.com/users/iNavFlight/gists{/gist_id}","starred_url":"https://api.github.com/users/iNavFlight/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/iNavFlight/subscriptions","organizations_url":"https://api.github.com/users/iNavFlight/orgs","repos_url":"https://api.github.com/users/iNavFlight/repos","events_url":"https://api.github.com/users/iNavFlight/events{/privacy}","received_events_url":"https://api.github.com/users/iNavFlight/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/iNavFlight/inav","description":"Navigation-enabled version of the Cleanflight flight controller firmware","fork":true,"url":"https://api.github.com/repos/iNavFlight/inav","forks_url":"https://api.github.com/repos/iNavFlight/inav/forks","keys_url":"https://api.github.com/repos/iNavFlight/inav/keys{/key_id}","collaborators_url":"https://api.github.com/repos/iNavFlight/inav/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/iNavFlight/inav/teams","hooks_url":"https://api.github.com/repos/iNavFlight/inav/hooks","issue_events_url":"https://api.github.com/repos/iNavFlight/inav/issues/events{/number}","events_url":"https://api.github.com/repos/iNavFlight/inav/events","assignees_url":"https://api.github.com/repos/iNavFlight/inav/assignees{/user}","branches_url":"https://api.github.com/repos/iNavFlight/inav/branches{/branch}","tags_url":"https://api.github.com/repos/iNavFlight/inav/tags","blobs_url":"https://api.github.com/repos/iNavFlight/inav/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/iNavFlight/inav/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/iNavFlight/inav/git/refs{/sha}","trees_url":"https://api.github.com/repos/iNavFlight/inav/git/trees{/sha}","statuses_url":"https://api.github.com/repos/iNavFlight/inav/statuses/{sha}","languages_url":"https://api.github.com/repos/iNavFlight/inav/languages","stargazers_url":"https://api.github.com/repos/iNavFlight/inav/stargazers","contributors_url":"https://api.github.com/repos/iNavFlight/inav/contributors","subscribers_url":"https://api.github.com/repos/iNavFlight/inav/subscribers","subscription_url":"https://api.github.com/repos/iNavFlight/inav/subscription","commits_url":"https://api.github.com/repos/iNavFlight/inav/commits{/sha}","git_commits_url":"https://api.github.com/repos/iNavFlight/inav/git/commits{/sha}","comments_url":"https://api.github.com/repos/iNavFlight/inav/comments{/number}","issue_comment_url":"https://api.github.com/repos/iNavFlight/inav/issues/comments{/number}","contents_url":"https://api.github.com/repos/iNavFlight/inav/contents/{+path}","compare_url":"https://api.github.com/repos/iNavFlight/inav/compare/{base}...{head}","merges_url":"https://api.github.com/repos/iNavFlight/inav/merges","archive_url":"https://api.github.com/repos/iNavFlight/inav/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/iNavFlight/inav/downloads","issues_url":"https://api.github.com/repos/iNavFlight/inav/issues{/number}","pulls_url":"https://api.github.com/repos/iNavFlight/inav/pulls{/number}","milestones_url":"https://api.github.com/repos/iNavFlight/inav/milestones{/number}","notifications_url":"https://api.github.com/repos/iNavFlight/inav/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/iNavFlight/inav/labels{/name}","releases_url":"https://api.github.com/repos/iNavFlight/inav/releases{/id}","deployments_url":"https://api.github.com/repos/iNavFlight/inav/deployments","created_at":"2015-03-13T09:58:19Z","updated_at":"2016-05-14T11:11:58Z","pushed_at":"2016-05-14T11:57:13Z","git_url":"git://github.com/iNavFlight/inav.git","ssh_url":"git@github.com:iNavFlight/inav.git","clone_url":"https://github.com/iNavFlight/inav.git","svn_url":"https://github.com/iNavFlight/inav","homepage":"http://cleanflight.com","size":39962,"stargazers_count":57,"watchers_count":57,"language":"C","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":15,"mirror_url":null,"open_issues_count":53,"forks":15,"open_issues":53,"watchers":57,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/iNavFlight/inav/pulls/195"},"html":{"href":"https://github.com/iNavFlight/inav/pull/195"},"issue":{"href":"https://api.github.com/repos/iNavFlight/inav/issues/195"},"comments":{"href":"https://api.github.com/repos/iNavFlight/inav/issues/195/comments"},"review_comments":{"href":"https://api.github.com/repos/iNavFlight/inav/pulls/195/comments"},"review_comment":{"href":"https://api.github.com/repos/iNavFlight/inav/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/iNavFlight/inav/pulls/195/commits"},"statuses":{"href":"https://api.github.com/repos/iNavFlight/inav/statuses/1ca2cc306426fd3834ac73041c125cf04d214aa6"}}}}