{"action":"created","comment":{"url":"https://api.github.com/repos/mavlink/mavros/pulls/comments/45976160","id":45976160,"diff_hunk":"@@ -0,0 +1,259 @@\n+/**\n+ * @brief MocapPoseEstimate plugin\n+ * @file mocap_pose_estimate.cpp\n+ * @author Tony Baltovski <tony.baltovski@gmail.com>\n+ * @author Vladimir Ermakov <vooon341@gmail.com>\n+ *\n+ * @addtogroup plugin\n+ * @{\n+ */\n+/*\n+ * Copyright 2014,2015 Vladimir Ermakov, Tony Baltovski.\n+ *\n+ * This file is part of the mavros package and subject to the license terms\n+ * in the top-level LICENSE file of the mavros repository.\n+ * https://github.com/mavlink/mavros/tree/master/LICENSE.md\n+ */\n+\n+#include <mavros/mavros_plugin.h>\n+#include <pluginlib/class_list_macros.h>\n+#include <eigen_conversions/eigen_msg.h>\n+\n+#include <geometry_msgs/PoseStamped.h>\n+#include <geometry_msgs/TransformStamped.h>\n+#include <vicon_bridge/TfDistortInfo.h>\n+\n+\n+namespace mavplugin {\n+/**\n+ * @brief MocapFakeGPS plugin\n+ *\n+ * Sends fake GPS from motion capture data to FCU.\n+ */\n+\n+\n+class MocapFakeGPSPlugin : public MavRosPlugin\n+{\n+public:\n+\tMocapFakeGPSPlugin() :\n+\t\tmp_nh(\"~fake_gps\"),\n+\t\tuas(nullptr)\n+\t{ };\n+\n+\tvoid initialize(UAS &uas_)\n+\t{\n+\n+\t\tuas = &uas_;\n+\n+\t\tmocap_tf_d_sub = mp_nh.subscribe(\"/tf_distort/out\", 1, &MocapFakeGPSPlugin::mocap_tf_d_cb, this);\n+\n+\t\tmocap_tf_params_sub = mp_nh.subscribe(\"/tf_distort/info\", 1, &MocapFakeGPSPlugin::mocap_tf_params_cb, this);\n+\n+\t\tmocap_tf_sub = mp_nh.subscribe(\"/vicon/DJI_450/DJI_450_drop\", 1, &MocapFakeGPSPlugin::mocap_tf_cb, this);\n+\n+\t\t\n+\t}\n+\n+\tconst message_map get_rx_handlers() {\n+\t\treturn { /* Rx disabled */ };\n+\t}\n+\n+private:\n+\tros::NodeHandle mp_nh;\n+\tUAS *uas;\n+\n+\tros::Subscriber mocap_tf_d_sub;\n+\tros::Subscriber mocap_tf_sub;\n+\tros::Subscriber mocap_tf_params_sub;\n+\n+\tdouble old_x;\n+\tdouble old_y;\n+\tdouble old_z;\n+\tdouble old_t;\n+\tdouble old_n;\n+\tdouble old_e;\n+\tdouble gps_eph;\n+\tdouble gps_epv;\n+\n+\t/* -*- low-level send -*- */\n+\tvoid gps_pose_send\n+\t\t(uint64_t time_usec, uint8_t fix_type, int32_t lat, int32_t lon, int32_t alt, \n+\t\t\tuint16_t eph, uint16_t epv, uint16_t vel, int16_t vn, int16_t ve, int16_t vd, uint16_t cog, uint8_t satelites_visible)\n+\t{\n+\t\t//ROS_WARN(\"sending message\");\n+\t\tmavlink_message_t msg;\n+\t\tmavlink_msg_hil_gps_pack_chan(UAS_PACK_CHAN(uas), &msg,\n+\t\t\t\ttime_usec,\n+\t\t\t\tfix_type,\n+\t\t\t\tlat,\n+\t\t\t\tlon,\n+\t\t\t\talt,\n+\t\t\t\teph,\n+\t\t\t\tepv,\n+\t\t\t\tvel,\n+\t\t\t\tvn,\n+\t\t\t\tve,\n+\t\t\t\tvd,\n+\t\t\t\tcog,\n+\t\t\t\tsatelites_visible);\n+\t\tUAS_FCU(uas)->send_message(&msg);\n+\t}\n+\n+\n+\tvoid mocap_pose_send\n+\t\t(uint64_t usec,\n+\t\t\tfloat q[4],\n+\t\t\tfloat x, float y, float z)\n+\t{\n+\t\tmavlink_message_t msg;\n+\t\tmavlink_msg_att_pos_mocap_pack_chan(UAS_PACK_CHAN(uas), &msg,\n+\t\t\t\tusec,\n+\t\t\t\tq,\n+\t\t\t\tx,\n+\t\t\t\ty,\n+\t\t\t\tz);\n+\t\tUAS_FCU(uas)->send_message(&msg);\n+\t}\n+\n+\n+\n+\t/* -*- callbacks -*- */\n+\tvoid mocap_tf_params_cb(const vicon_bridge::TfDistortInfo::ConstPtr &params)\n+\t{\n+\t\tgps_eph = 100 * sqrt(2 * params->sigma_xy * params->sigma_xy); //[cm]\n+\t\tgps_epv = 100 * params->sigma_z; //[cm]\n+\t}\n+\n+\n+\tvoid mocap_tf_d_cb(const geometry_msgs::TransformStamped::ConstPtr &trans)\n+\t{\n+\t\tdouble lat_zurich = 47.3667 * M_PI / 180 ;  // rad\n+  \t\tdouble lon_zurich = 8.5500 * M_PI / 180;  // rad\n+  \t\tfloat earth_radius = 6371000;  // m\n+\n+\n+  \t\tEigen::Quaterniond q_enu;\n+\t\tfloat q[4];\n+\n+\t\ttf::quaternionMsgToEigen(trans->transform.rotation, q_enu);\n+\t\tUAS::quaternion_to_mavlink(\n+\t\t\t\tUAS::transform_frame_enu_ned(q_enu),\n+\t\t\t\tq);\n+\n+\t\tauto position = UAS::transform_frame_enu_ned(\n+\t\t\t\tEigen::Vector3d(\n+\t\t\t\t\ttrans->transform.translation.x,\n+\t\t\t\t\ttrans->transform.translation.y,\n+\t\t\t\t\ttrans->transform.translation.z));\n+\n+\n+  \t\t\n+  \t\tdouble north = position.x();\n+  \t\tdouble east = position.y();\n+\t\tdouble n_rad = north / earth_radius;\n+\t\tdouble e_rad = east / earth_radius;\n+\t\tdouble z = -position.z(); //[m]\n+\t\tdouble c = sqrt(n_rad * n_rad + e_rad * e_rad);\n+\t\tdouble sin_c = sin(c);\n+\t\tdouble cos_c = cos(c);\n+\t\tdouble lat_rad;\n+\t\tdouble lon_rad;\n+\t\tif (c != 0.0) {\n+\t\t\tlat_rad = asin(cos_c * sin(lat_zurich) + (n_rad * sin_c * cos(lat_zurich)) / c);\n+\t\t    \tlon_rad = (lon_zurich + atan2(e_rad * sin_c, c * cos(lat_zurich) * cos_c - n_rad * sin(lat_zurich) * sin_c));\n+\t\t} else {\n+\t\t \tlat_rad = lat_zurich;\n+\t\t    \tlon_rad = lon_zurich;\n+\t\t}\n+\n+\n+\t\tdouble dn = north - old_n; //[m]\n+\t\tdouble de = east - old_e; //[m]\n+\t\tdouble dz = z - old_z; //[m]\n+\t\tdouble dt = trans->header.stamp.toSec() - old_t; //[s]\n+\n+\n+\t\t//store old values\n+\t\told_n = north;\n+\t\told_e = east;\n+\t\told_z = z;\n+\t\told_t = trans->header.stamp.toSec();\n+\n+\t\t//calculate velocities\n+\t\tdouble _vn = 100 * dn / dt; //[cm/s]\n+\t\tdouble _ve = 100 * de / dt; //[cm/s]\n+\t\tdouble vz = 100 * dz / dt; //[cm/s]\n+\n+\t\t//calculate course over ground\n+\t\tdouble _cog_rad;\n+\n+\t\tif (_vn == 0 && _ve == 0) {\n+\t\t\t_cog_rad = 0;\n+\t\t}else if (_vn >= 0 && _ve < 0) {\n+\t\t\t_cog_rad = M_PI * 5 / 2 - atan2(_vn,_ve);\n+\t\t} else {\n+\t\t\t_cog_rad = M_PI / 2 - atan2(_vn,_ve);\n+\t\t}\n+\n+\t\tdouble _cog_deg = _cog_rad * 180 / M_PI;\n+\n+\n+\t\t\n+\t\t//ROS_WARN(\" = %8.10f   dt = %8.6f\", old_t, dt);\n+\t\t//ROS_WARN(\"test eph = %2.4f\", (double)gps_eph);\n+\n+\t\tuint8_t fix_type = 3; //3D\n+\t\tint32_t lat = (lat_rad * 180 / M_PI) * 10000000; // [degrees * 1E7]\n+\t\tint32_t lon = (lon_rad * 180 / M_PI) * 10000000; // [degrees * 1E7]\n+\t\tint32_t alt = (408 + z) * 1000; //[m * 1000] AMSL\n+\t\tuint16_t eph = gps_eph; //[cm]\n+\t\tuint16_t epv = gps_epv; //[cm]\n+\t\tuint16_t vel = sqrt(_vn*_vn + _ve*_ve); //[cm/s]\n+\t\tint16_t vn = _vn; //[cm/s]\n+\t\tint16_t ve = _ve; //[cm/s]\n+\t\tint16_t vd = -vz; //[cm/s]\n+\t\tuint16_t cog = _cog_deg * 100; //[degrees * 100]\n+\t\tuint8_t satelites_visible = 5;\n+\n+\t\tgps_pose_send(trans->header.stamp.toNSec() / 1000,\n+\t\t\t\tfix_type,\n+\t\t\t\tlat,\n+\t\t\t\tlon,\n+\t\t\t\talt,\n+\t\t\t\teph,\n+\t\t\t\tepv,\n+\t\t\t\tvel,\n+\t\t\t\tvn,\n+\t\t\t\tve,\n+\t\t\t\tvd,\n+\t\t\t\tcog,\n+\t\t\t\tsatelites_visible);\n+\t}\n+\n+\tvoid mocap_tf_cb(const geometry_msgs::TransformStamped::ConstPtr &trans)","path":"mavros_extras/src/plugins/mocap_fake_gps.cpp","position":212,"original_position":233,"commit_id":"3a9b0999e77fc737b179a41b294a270b1239cca3","original_commit_id":"96a9e3188bd78fbf7bf6d859af53a5cbfab0e463","user":{"login":"vooon","id":1023568,"avatar_url":"https://avatars.githubusercontent.com/u/1023568?v=3","gravatar_id":"","url":"https://api.github.com/users/vooon","html_url":"https://github.com/vooon","followers_url":"https://api.github.com/users/vooon/followers","following_url":"https://api.github.com/users/vooon/following{/other_user}","gists_url":"https://api.github.com/users/vooon/gists{/gist_id}","starred_url":"https://api.github.com/users/vooon/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vooon/subscriptions","organizations_url":"https://api.github.com/users/vooon/orgs","repos_url":"https://api.github.com/users/vooon/repos","events_url":"https://api.github.com/users/vooon/events{/privacy}","received_events_url":"https://api.github.com/users/vooon/received_events","type":"User","site_admin":false},"body":"Nope! Nope! Nope! Do not copy-paste already existing functionality.\r\n\r\nIf you need both HIL_GPS and ATT_POS_MOCAP then just use both plugins.","created_at":"2015-11-26T13:04:01Z","updated_at":"2015-11-26T13:04:01Z","html_url":"https://github.com/mavlink/mavros/pull/442#discussion_r45976160","pull_request_url":"https://api.github.com/repos/mavlink/mavros/pulls/442","_links":{"self":{"href":"https://api.github.com/repos/mavlink/mavros/pulls/comments/45976160"},"html":{"href":"https://github.com/mavlink/mavros/pull/442#discussion_r45976160"},"pull_request":{"href":"https://api.github.com/repos/mavlink/mavros/pulls/442"}}},"pull_request":{"url":"https://api.github.com/repos/mavlink/mavros/pulls/442","id":51907664,"html_url":"https://github.com/mavlink/mavros/pull/442","diff_url":"https://github.com/mavlink/mavros/pull/442.diff","patch_url":"https://github.com/mavlink/mavros/pull/442.patch","issue_url":"https://api.github.com/repos/mavlink/mavros/issues/442","number":442,"state":"open","locked":false,"title":"added a plugin that simulates gps with mocap data","user":{"login":"ChristophTobler","id":14769636,"avatar_url":"https://avatars.githubusercontent.com/u/14769636?v=3","gravatar_id":"","url":"https://api.github.com/users/ChristophTobler","html_url":"https://github.com/ChristophTobler","followers_url":"https://api.github.com/users/ChristophTobler/followers","following_url":"https://api.github.com/users/ChristophTobler/following{/other_user}","gists_url":"https://api.github.com/users/ChristophTobler/gists{/gist_id}","starred_url":"https://api.github.com/users/ChristophTobler/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ChristophTobler/subscriptions","organizations_url":"https://api.github.com/users/ChristophTobler/orgs","repos_url":"https://api.github.com/users/ChristophTobler/repos","events_url":"https://api.github.com/users/ChristophTobler/events{/privacy}","received_events_url":"https://api.github.com/users/ChristophTobler/received_events","type":"User","site_admin":false},"body":"The added plugin can be used with the vicon bridge. There is a documentation in the PX4 Devguide.","created_at":"2015-11-26T12:36:58Z","updated_at":"2015-11-26T13:04:01Z","closed_at":null,"merged_at":null,"merge_commit_sha":"d094d84fb6b2a05707154607118045544c8fb5fe","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/mavlink/mavros/pulls/442/commits","review_comments_url":"https://api.github.com/repos/mavlink/mavros/pulls/442/comments","review_comment_url":"https://api.github.com/repos/mavlink/mavros/pulls/comments{/number}","comments_url":"https://api.github.com/repos/mavlink/mavros/issues/442/comments","statuses_url":"https://api.github.com/repos/mavlink/mavros/statuses/3a9b0999e77fc737b179a41b294a270b1239cca3","head":{"label":"ChristophTobler:master","ref":"master","sha":"3a9b0999e77fc737b179a41b294a270b1239cca3","user":{"login":"ChristophTobler","id":14769636,"avatar_url":"https://avatars.githubusercontent.com/u/14769636?v=3","gravatar_id":"","url":"https://api.github.com/users/ChristophTobler","html_url":"https://github.com/ChristophTobler","followers_url":"https://api.github.com/users/ChristophTobler/followers","following_url":"https://api.github.com/users/ChristophTobler/following{/other_user}","gists_url":"https://api.github.com/users/ChristophTobler/gists{/gist_id}","starred_url":"https://api.github.com/users/ChristophTobler/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ChristophTobler/subscriptions","organizations_url":"https://api.github.com/users/ChristophTobler/orgs","repos_url":"https://api.github.com/users/ChristophTobler/repos","events_url":"https://api.github.com/users/ChristophTobler/events{/privacy}","received_events_url":"https://api.github.com/users/ChristophTobler/received_events","type":"User","site_admin":false},"repo":{"id":46925459,"name":"mavros","full_name":"ChristophTobler/mavros","owner":{"login":"ChristophTobler","id":14769636,"avatar_url":"https://avatars.githubusercontent.com/u/14769636?v=3","gravatar_id":"","url":"https://api.github.com/users/ChristophTobler","html_url":"https://github.com/ChristophTobler","followers_url":"https://api.github.com/users/ChristophTobler/followers","following_url":"https://api.github.com/users/ChristophTobler/following{/other_user}","gists_url":"https://api.github.com/users/ChristophTobler/gists{/gist_id}","starred_url":"https://api.github.com/users/ChristophTobler/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ChristophTobler/subscriptions","organizations_url":"https://api.github.com/users/ChristophTobler/orgs","repos_url":"https://api.github.com/users/ChristophTobler/repos","events_url":"https://api.github.com/users/ChristophTobler/events{/privacy}","received_events_url":"https://api.github.com/users/ChristophTobler/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/ChristophTobler/mavros","description":"MAVLink to ROS gateway with UDP proxy for Ground Control Station","fork":true,"url":"https://api.github.com/repos/ChristophTobler/mavros","forks_url":"https://api.github.com/repos/ChristophTobler/mavros/forks","keys_url":"https://api.github.com/repos/ChristophTobler/mavros/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ChristophTobler/mavros/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ChristophTobler/mavros/teams","hooks_url":"https://api.github.com/repos/ChristophTobler/mavros/hooks","issue_events_url":"https://api.github.com/repos/ChristophTobler/mavros/issues/events{/number}","events_url":"https://api.github.com/repos/ChristophTobler/mavros/events","assignees_url":"https://api.github.com/repos/ChristophTobler/mavros/assignees{/user}","branches_url":"https://api.github.com/repos/ChristophTobler/mavros/branches{/branch}","tags_url":"https://api.github.com/repos/ChristophTobler/mavros/tags","blobs_url":"https://api.github.com/repos/ChristophTobler/mavros/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ChristophTobler/mavros/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ChristophTobler/mavros/git/refs{/sha}","trees_url":"https://api.github.com/repos/ChristophTobler/mavros/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ChristophTobler/mavros/statuses/{sha}","languages_url":"https://api.github.com/repos/ChristophTobler/mavros/languages","stargazers_url":"https://api.github.com/repos/ChristophTobler/mavros/stargazers","contributors_url":"https://api.github.com/repos/ChristophTobler/mavros/contributors","subscribers_url":"https://api.github.com/repos/ChristophTobler/mavros/subscribers","subscription_url":"https://api.github.com/repos/ChristophTobler/mavros/subscription","commits_url":"https://api.github.com/repos/ChristophTobler/mavros/commits{/sha}","git_commits_url":"https://api.github.com/repos/ChristophTobler/mavros/git/commits{/sha}","comments_url":"https://api.github.com/repos/ChristophTobler/mavros/comments{/number}","issue_comment_url":"https://api.github.com/repos/ChristophTobler/mavros/issues/comments{/number}","contents_url":"https://api.github.com/repos/ChristophTobler/mavros/contents/{+path}","compare_url":"https://api.github.com/repos/ChristophTobler/mavros/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ChristophTobler/mavros/merges","archive_url":"https://api.github.com/repos/ChristophTobler/mavros/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ChristophTobler/mavros/downloads","issues_url":"https://api.github.com/repos/ChristophTobler/mavros/issues{/number}","pulls_url":"https://api.github.com/repos/ChristophTobler/mavros/pulls{/number}","milestones_url":"https://api.github.com/repos/ChristophTobler/mavros/milestones{/number}","notifications_url":"https://api.github.com/repos/ChristophTobler/mavros/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ChristophTobler/mavros/labels{/name}","releases_url":"https://api.github.com/repos/ChristophTobler/mavros/releases{/id}","created_at":"2015-11-26T12:25:53Z","updated_at":"2015-11-26T12:25:54Z","pushed_at":"2015-11-26T13:01:53Z","git_url":"git://github.com/ChristophTobler/mavros.git","ssh_url":"git@github.com:ChristophTobler/mavros.git","clone_url":"https://github.com/ChristophTobler/mavros.git","svn_url":"https://github.com/ChristophTobler/mavros","homepage":null,"size":1666,"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":"mavlink:master","ref":"master","sha":"4dd0bb8b02a68e66bf10b07be9e1dbef87a005e4","user":{"login":"mavlink","id":961247,"avatar_url":"https://avatars.githubusercontent.com/u/961247?v=3","gravatar_id":"","url":"https://api.github.com/users/mavlink","html_url":"https://github.com/mavlink","followers_url":"https://api.github.com/users/mavlink/followers","following_url":"https://api.github.com/users/mavlink/following{/other_user}","gists_url":"https://api.github.com/users/mavlink/gists{/gist_id}","starred_url":"https://api.github.com/users/mavlink/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mavlink/subscriptions","organizations_url":"https://api.github.com/users/mavlink/orgs","repos_url":"https://api.github.com/users/mavlink/repos","events_url":"https://api.github.com/users/mavlink/events{/privacy}","received_events_url":"https://api.github.com/users/mavlink/received_events","type":"Organization","site_admin":false},"repo":{"id":15189073,"name":"mavros","full_name":"mavlink/mavros","owner":{"login":"mavlink","id":961247,"avatar_url":"https://avatars.githubusercontent.com/u/961247?v=3","gravatar_id":"","url":"https://api.github.com/users/mavlink","html_url":"https://github.com/mavlink","followers_url":"https://api.github.com/users/mavlink/followers","following_url":"https://api.github.com/users/mavlink/following{/other_user}","gists_url":"https://api.github.com/users/mavlink/gists{/gist_id}","starred_url":"https://api.github.com/users/mavlink/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mavlink/subscriptions","organizations_url":"https://api.github.com/users/mavlink/orgs","repos_url":"https://api.github.com/users/mavlink/repos","events_url":"https://api.github.com/users/mavlink/events{/privacy}","received_events_url":"https://api.github.com/users/mavlink/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/mavlink/mavros","description":"MAVLink to ROS gateway with UDP proxy for Ground Control Station","fork":false,"url":"https://api.github.com/repos/mavlink/mavros","forks_url":"https://api.github.com/repos/mavlink/mavros/forks","keys_url":"https://api.github.com/repos/mavlink/mavros/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mavlink/mavros/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mavlink/mavros/teams","hooks_url":"https://api.github.com/repos/mavlink/mavros/hooks","issue_events_url":"https://api.github.com/repos/mavlink/mavros/issues/events{/number}","events_url":"https://api.github.com/repos/mavlink/mavros/events","assignees_url":"https://api.github.com/repos/mavlink/mavros/assignees{/user}","branches_url":"https://api.github.com/repos/mavlink/mavros/branches{/branch}","tags_url":"https://api.github.com/repos/mavlink/mavros/tags","blobs_url":"https://api.github.com/repos/mavlink/mavros/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mavlink/mavros/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mavlink/mavros/git/refs{/sha}","trees_url":"https://api.github.com/repos/mavlink/mavros/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mavlink/mavros/statuses/{sha}","languages_url":"https://api.github.com/repos/mavlink/mavros/languages","stargazers_url":"https://api.github.com/repos/mavlink/mavros/stargazers","contributors_url":"https://api.github.com/repos/mavlink/mavros/contributors","subscribers_url":"https://api.github.com/repos/mavlink/mavros/subscribers","subscription_url":"https://api.github.com/repos/mavlink/mavros/subscription","commits_url":"https://api.github.com/repos/mavlink/mavros/commits{/sha}","git_commits_url":"https://api.github.com/repos/mavlink/mavros/git/commits{/sha}","comments_url":"https://api.github.com/repos/mavlink/mavros/comments{/number}","issue_comment_url":"https://api.github.com/repos/mavlink/mavros/issues/comments{/number}","contents_url":"https://api.github.com/repos/mavlink/mavros/contents/{+path}","compare_url":"https://api.github.com/repos/mavlink/mavros/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mavlink/mavros/merges","archive_url":"https://api.github.com/repos/mavlink/mavros/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mavlink/mavros/downloads","issues_url":"https://api.github.com/repos/mavlink/mavros/issues{/number}","pulls_url":"https://api.github.com/repos/mavlink/mavros/pulls{/number}","milestones_url":"https://api.github.com/repos/mavlink/mavros/milestones{/number}","notifications_url":"https://api.github.com/repos/mavlink/mavros/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mavlink/mavros/labels{/name}","releases_url":"https://api.github.com/repos/mavlink/mavros/releases{/id}","created_at":"2013-12-14T16:58:11Z","updated_at":"2015-11-25T14:25:57Z","pushed_at":"2015-11-26T13:01:53Z","git_url":"git://github.com/mavlink/mavros.git","ssh_url":"git@github.com:mavlink/mavros.git","clone_url":"https://github.com/mavlink/mavros.git","svn_url":"https://github.com/mavlink/mavros","homepage":null,"size":1785,"stargazers_count":48,"watchers_count":48,"language":"C++","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":94,"mirror_url":null,"open_issues_count":27,"forks":94,"open_issues":27,"watchers":48,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/mavlink/mavros/pulls/442"},"html":{"href":"https://github.com/mavlink/mavros/pull/442"},"issue":{"href":"https://api.github.com/repos/mavlink/mavros/issues/442"},"comments":{"href":"https://api.github.com/repos/mavlink/mavros/issues/442/comments"},"review_comments":{"href":"https://api.github.com/repos/mavlink/mavros/pulls/442/comments"},"review_comment":{"href":"https://api.github.com/repos/mavlink/mavros/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/mavlink/mavros/pulls/442/commits"},"statuses":{"href":"https://api.github.com/repos/mavlink/mavros/statuses/3a9b0999e77fc737b179a41b294a270b1239cca3"}}}}