{"action":"created","comment":{"url":"https://api.github.com/repos/ethz-asl/rotors_simulator/pulls/comments/84057047","pull_request_review_id":4855383,"id":84057047,"diff_hunk":"@@ -0,0 +1,209 @@\n+/*\n+ * Copyright 2016 Pavel Vechersky, ASL, ETH Zurich, Switzerland\n+ *\n+ * Licensed under the Apache License, Version 2.0 (the \"License\");\n+ * you may not use this file except in compliance with the License.\n+ * You may obtain a copy of the License at\n+ *\n+ *     http://www.apache.org/licenses/LICENSE-2.0\n+\n+ * Unless required by applicable law or agreed to in writing, software\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ * See the License for the specific language governing permissions and\n+ * limitations under the License.\n+ */\n+\n+#ifndef ROTORS_HIL_LISTENERS_H_\n+#define ROTORS_HIL_LISTENERS_H_\n+\n+#include <boost/thread/mutex.hpp>\n+#include <Eigen/Dense>\n+#include <geometry_msgs/TwistStamped.h>\n+#include <ros/ros.h>\n+#include <sensor_msgs/FluidPressure.h>\n+#include <sensor_msgs/Imu.h>\n+#include <sensor_msgs/MagneticField.h>\n+#include <sensor_msgs/NavSatFix.h>\n+\n+namespace rotors_hil {\n+// Constants\n+static constexpr float kAirDensity = 1.18;\n+static constexpr float kGravityMagnitude = 9.8068;\n+static constexpr float kStandardPressureMBar = 1013.25;\n+static constexpr float kTemperature = 15.0;\n+static constexpr int kFixNone = 0;\n+static constexpr int kFix3D = 3;\n+static constexpr int kHDOP = 100;\n+static constexpr int kVDOP = 100;\n+static constexpr int kSatellitesVisible = 4;\n+static constexpr int kUnknown = 65535;\n+\n+// Conversions\n+static constexpr float kDegreesToHil = 1e7;\n+static constexpr float kFeetToMeters = 0.3048;\n+static constexpr float kMetersToCm = 100.0;\n+static constexpr float kMetersToMm = 1000.0;\n+static constexpr float kPascalToMillibar = 0.01;\n+static constexpr float kPressureToAltExp = 0.190284;\n+static constexpr float kPressureToAltMult = 145366.45;\n+static constexpr float kSecToNsec = 1e9;\n+static constexpr float kTeslaToGauss = 10000.0;\n+\n+struct HilData {\n+  HilData() :\n+      temperature(kTemperature),\n+      eph(kHDOP),\n+      epv(kVDOP),\n+      cog(kUnknown),\n+      satellites_visible(kSatellitesVisible) {}\n+\n+  Eigen::Quaterniond att;      // Attitude quaternion\n+  Eigen::Vector3f acc;         // Linear acceleration (m/s^2)\n+  Eigen::Vector3f gyro;        // Angular speed in body frame (rad / sec)\n+  Eigen::Vector3f mag;         // Magnetic field (Gauss)\n+  Eigen::Vector3i gps_vel;     // GPS velocity in cm/s in earth-fixed NED frame\n+  float pressure_abs;          // Absolute pressure in millibar\n+  float pressure_diff;         // Differential pressure (airspeed) in millibar\n+  float pressure_alt;          // Altitude calculated from pressure\n+  float temperature;           // Temperature in degrees celsius\n+  uint32_t lat;                // Latitude (WGS84), in degrees * 1E7\n+  uint32_t lon;                // Longitude (WGS84), in degrees * 1E7\n+  uint32_t alt;                // Altitude (AMSL, not WGS84), in meters * 1000 (positive for up)\n+  uint16_t eph;                // GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: 65535\n+  uint16_t epv;                // GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: 65535\n+  uint16_t vel;                // GPS ground speed (m/s * 100). If unknown, set to: 65535\n+  uint16_t cog;                // Course over ground (NOT heading, but direction of movement) in degrees * 100. If unknown, set to: 65535\n+  uint16_t ind_airspeed;       // Indicated airspeed, expressed as m/s * 100\n+  uint16_t true_airspeed;      // True airspeed, expressed as m/s * 100*/\n+  uint8_t fix_type;            // < 0-1: no fix, 2: 2D fix, 3: 3D fix\n+  uint8_t satellites_visible;  // Number of satellites visible. If unknown, set to 255\n+};\n+\n+class HilListeners {\n+ public:\n+  HilListeners() {}\n+  virtual ~HilListeners() {}\n+\n+  /// \\brief Callback for handling Air Speed messages.\n+  /// \\param[in] air_speed_msg An Air Speed message.\n+  /// \\param[out] hil_data Pointer to latest data collected for HIL publishing.\n+  void AirSpeedCallback(const geometry_msgs::TwistStampedConstPtr& air_speed_msg,\n+                        HilData* hil_data) {\n+    boost::mutex::scoped_lock lock(mtx_);\n+\n+    Eigen::Vector3d air_velocity(air_speed_msg->twist.linear.x,\n+                                 air_speed_msg->twist.linear.y,\n+                                 air_speed_msg->twist.linear.z);\n+\n+    double air_speed = air_velocity.norm();\n+\n+    // TODO(pvechersky): Simulate indicated air speed.\n+\n+    // MAVLINK HIL_STATE_QUATERNION message measured airspeed in cm/s.\n+    hil_data->ind_airspeed = air_speed * kMetersToCm;\n+    hil_data->true_airspeed = air_speed * kMetersToCm;\n+  }\n+\n+  /// \\brief Callback for handling GPS messages.\n+  /// \\param[in] gps_msg A GPS message.\n+  /// \\param[out] hil_data Pointer to latest data collected for HIL publishing.\n+  void GpsCallback(const sensor_msgs::NavSatFixConstPtr& gps_msg,\n+                   HilData* hil_data) {\n+    boost::mutex::scoped_lock lock(mtx_);\n+\n+    // MAVLINK HIL_GPS message measures latitude and longitude in degrees * 1e7\n+    // while altitude is reported in mm.\n+    hil_data->lat = gps_msg->latitude * kDegreesToHil;\n+    hil_data->lon = gps_msg->longitude * kDegreesToHil;\n+    hil_data->alt = gps_msg->altitude * kMetersToMm;\n+\n+    hil_data->fix_type =\n+        (gps_msg->status.status > sensor_msgs::NavSatStatus::STATUS_NO_FIX) ?\n+            kFix3D : kFixNone;\n+  }\n+\n+  /// \\brief Callback for handling Ground Speed messages.\n+  /// \\param[in] ground_speed_msg A ground speed message.\n+  /// \\param[out] hil_data Pointer to latest data collected for HIL publishing.\n+  void GroundSpeedCallback(const geometry_msgs::TwistStampedConstPtr &ground_speed_msg,\n+                           HilData* hil_data) {\n+    boost::mutex::scoped_lock lock(mtx_);\n+\n+    // MAVLINK HIL_GPS message measures GPS velocity in cm/s\n+    hil_data->gps_vel = Eigen::Vector3i(ground_speed_msg->twist.linear.x,\n+                                        ground_speed_msg->twist.linear.y,\n+                                        ground_speed_msg->twist.linear.z) * kMetersToCm;\n+\n+    hil_data->vel = hil_data->gps_vel.norm();\n+  }\n+\n+  /// \\brief Callback for handling IMU messages.\n+  /// \\param[in] imu_msg An IMU message.\n+  /// \\param[out] hil_data Pointer to latest data collected for HIL publishing.\n+  void ImuCallback(const sensor_msgs::ImuConstPtr& imu_msg,\n+                   HilData* hil_data) {\n+    boost::mutex::scoped_lock lock(mtx_);\n+\n+    hil_data->acc = Eigen::Vector3f(imu_msg->linear_acceleration.x,\n+                                    imu_msg->linear_acceleration.y,\n+                                    imu_msg->linear_acceleration.z);\n+\n+    hil_data->att = Eigen::Quaterniond(imu_msg->orientation.w,\n+                                       imu_msg->orientation.x,\n+                                       imu_msg->orientation.y,\n+                                       imu_msg->orientation.z);\n+\n+    hil_data->gyro = Eigen::Vector3f(imu_msg->angular_velocity.x,\n+                                     imu_msg->angular_velocity.y,\n+                                     imu_msg->angular_velocity.z);\n+  }\n+\n+  /// \\brief Callback for handling Magnetometer messages.\n+  /// \\param[in] mag_msg A Magnetometer message.\n+  /// \\param[out] hil_data Pointer to latest data collected for HIL publishing.\n+  void MagCallback(const sensor_msgs::MagneticFieldConstPtr &mag_msg,\n+                   HilData* hil_data) {\n+    boost::mutex::scoped_lock lock(mtx_);\n+\n+    // ROS magnetic field sensor message is in Tesla, while\n+    // MAVLINK HIL_SENSOR message measures magnetic field in Gauss.\n+    // 1 Tesla = 10000 Gauss\n+    hil_data->mag = Eigen::Vector3f(mag_msg->magnetic_field.x,\n+                                    mag_msg->magnetic_field.y,\n+                                    mag_msg->magnetic_field.z) * kTeslaToGauss;\n+  }\n+\n+  /// \\brief Callback for handling Air Pressure messages.\n+  /// \\param[in] pressure_msg An Air Pressure message.\n+  /// \\param[out] hil_data Pointer to latest data collected for HIL publishing.\n+  void PressureCallback(const sensor_msgs::FluidPressureConstPtr &pressure_msg,\n+                        HilData* hil_data) {\n+    boost::mutex::scoped_lock lock(mtx_);\n+","path":"rotors_hil_interface/include/rotors_hil_interface/hil_listeners.h","position":183,"original_position":183,"commit_id":"e0f09a8ecb4d5cc29c8fc8a9226412078eaf2901","original_commit_id":"e0f09a8ecb4d5cc29c8fc8a9226412078eaf2901","user":{"login":"burrimi","id":2277337,"avatar_url":"https://avatars.githubusercontent.com/u/2277337?v=3","gravatar_id":"","url":"https://api.github.com/users/burrimi","html_url":"https://github.com/burrimi","followers_url":"https://api.github.com/users/burrimi/followers","following_url":"https://api.github.com/users/burrimi/following{/other_user}","gists_url":"https://api.github.com/users/burrimi/gists{/gist_id}","starred_url":"https://api.github.com/users/burrimi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/burrimi/subscriptions","organizations_url":"https://api.github.com/users/burrimi/orgs","repos_url":"https://api.github.com/users/burrimi/repos","events_url":"https://api.github.com/users/burrimi/events{/privacy}","received_events_url":"https://api.github.com/users/burrimi/received_events","type":"User","site_admin":false},"body":"check if hil_data is valid pointer\r\ni.e. `assert(hil_data);`","created_at":"2016-10-19T12:22:57Z","updated_at":"2016-10-19T12:50:26Z","html_url":"https://github.com/ethz-asl/rotors_simulator/pull/312#discussion_r84057047","pull_request_url":"https://api.github.com/repos/ethz-asl/rotors_simulator/pulls/312","_links":{"self":{"href":"https://api.github.com/repos/ethz-asl/rotors_simulator/pulls/comments/84057047"},"html":{"href":"https://github.com/ethz-asl/rotors_simulator/pull/312#discussion_r84057047"},"pull_request":{"href":"https://api.github.com/repos/ethz-asl/rotors_simulator/pulls/312"}}},"pull_request":{"url":"https://api.github.com/repos/ethz-asl/rotors_simulator/pulls/312","id":89937830,"html_url":"https://github.com/ethz-asl/rotors_simulator/pull/312","diff_url":"https://github.com/ethz-asl/rotors_simulator/pull/312.diff","patch_url":"https://github.com/ethz-asl/rotors_simulator/pull/312.patch","issue_url":"https://api.github.com/repos/ethz-asl/rotors_simulator/issues/312","number":312,"state":"open","locked":false,"title":"Feature/hil interface","user":{"login":"pvechersky","id":11036394,"avatar_url":"https://avatars.githubusercontent.com/u/11036394?v=3","gravatar_id":"","url":"https://api.github.com/users/pvechersky","html_url":"https://github.com/pvechersky","followers_url":"https://api.github.com/users/pvechersky/followers","following_url":"https://api.github.com/users/pvechersky/following{/other_user}","gists_url":"https://api.github.com/users/pvechersky/gists{/gist_id}","starred_url":"https://api.github.com/users/pvechersky/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pvechersky/subscriptions","organizations_url":"https://api.github.com/users/pvechersky/orgs","repos_url":"https://api.github.com/users/pvechersky/repos","events_url":"https://api.github.com/users/pvechersky/events{/privacy}","received_events_url":"https://api.github.com/users/pvechersky/received_events","type":"User","site_admin":false},"body":"A package for converting the sensor data coming from RotorS' gazebo plugins into MAVLink-type message that can be forwarded to the PX4 autopilot via MAVROS.","created_at":"2016-10-19T03:49:14Z","updated_at":"2016-10-19T12:50:26Z","closed_at":null,"merged_at":null,"merge_commit_sha":"d6091a6971107452a8dca8f9e828ab1f0456fab6","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/ethz-asl/rotors_simulator/pulls/312/commits","review_comments_url":"https://api.github.com/repos/ethz-asl/rotors_simulator/pulls/312/comments","review_comment_url":"https://api.github.com/repos/ethz-asl/rotors_simulator/pulls/comments{/number}","comments_url":"https://api.github.com/repos/ethz-asl/rotors_simulator/issues/312/comments","statuses_url":"https://api.github.com/repos/ethz-asl/rotors_simulator/statuses/e0f09a8ecb4d5cc29c8fc8a9226412078eaf2901","head":{"label":"pvechersky:feature/hil_interface","ref":"feature/hil_interface","sha":"e0f09a8ecb4d5cc29c8fc8a9226412078eaf2901","user":{"login":"pvechersky","id":11036394,"avatar_url":"https://avatars.githubusercontent.com/u/11036394?v=3","gravatar_id":"","url":"https://api.github.com/users/pvechersky","html_url":"https://github.com/pvechersky","followers_url":"https://api.github.com/users/pvechersky/followers","following_url":"https://api.github.com/users/pvechersky/following{/other_user}","gists_url":"https://api.github.com/users/pvechersky/gists{/gist_id}","starred_url":"https://api.github.com/users/pvechersky/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pvechersky/subscriptions","organizations_url":"https://api.github.com/users/pvechersky/orgs","repos_url":"https://api.github.com/users/pvechersky/repos","events_url":"https://api.github.com/users/pvechersky/events{/privacy}","received_events_url":"https://api.github.com/users/pvechersky/received_events","type":"User","site_admin":false},"repo":{"id":54725773,"name":"rotors_simulator","full_name":"pvechersky/rotors_simulator","owner":{"login":"pvechersky","id":11036394,"avatar_url":"https://avatars.githubusercontent.com/u/11036394?v=3","gravatar_id":"","url":"https://api.github.com/users/pvechersky","html_url":"https://github.com/pvechersky","followers_url":"https://api.github.com/users/pvechersky/followers","following_url":"https://api.github.com/users/pvechersky/following{/other_user}","gists_url":"https://api.github.com/users/pvechersky/gists{/gist_id}","starred_url":"https://api.github.com/users/pvechersky/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pvechersky/subscriptions","organizations_url":"https://api.github.com/users/pvechersky/orgs","repos_url":"https://api.github.com/users/pvechersky/repos","events_url":"https://api.github.com/users/pvechersky/events{/privacy}","received_events_url":"https://api.github.com/users/pvechersky/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/pvechersky/rotors_simulator","description":"RotorS is a UAV gazebo simulator","fork":true,"url":"https://api.github.com/repos/pvechersky/rotors_simulator","forks_url":"https://api.github.com/repos/pvechersky/rotors_simulator/forks","keys_url":"https://api.github.com/repos/pvechersky/rotors_simulator/keys{/key_id}","collaborators_url":"https://api.github.com/repos/pvechersky/rotors_simulator/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/pvechersky/rotors_simulator/teams","hooks_url":"https://api.github.com/repos/pvechersky/rotors_simulator/hooks","issue_events_url":"https://api.github.com/repos/pvechersky/rotors_simulator/issues/events{/number}","events_url":"https://api.github.com/repos/pvechersky/rotors_simulator/events","assignees_url":"https://api.github.com/repos/pvechersky/rotors_simulator/assignees{/user}","branches_url":"https://api.github.com/repos/pvechersky/rotors_simulator/branches{/branch}","tags_url":"https://api.github.com/repos/pvechersky/rotors_simulator/tags","blobs_url":"https://api.github.com/repos/pvechersky/rotors_simulator/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/pvechersky/rotors_simulator/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/pvechersky/rotors_simulator/git/refs{/sha}","trees_url":"https://api.github.com/repos/pvechersky/rotors_simulator/git/trees{/sha}","statuses_url":"https://api.github.com/repos/pvechersky/rotors_simulator/statuses/{sha}","languages_url":"https://api.github.com/repos/pvechersky/rotors_simulator/languages","stargazers_url":"https://api.github.com/repos/pvechersky/rotors_simulator/stargazers","contributors_url":"https://api.github.com/repos/pvechersky/rotors_simulator/contributors","subscribers_url":"https://api.github.com/repos/pvechersky/rotors_simulator/subscribers","subscription_url":"https://api.github.com/repos/pvechersky/rotors_simulator/subscription","commits_url":"https://api.github.com/repos/pvechersky/rotors_simulator/commits{/sha}","git_commits_url":"https://api.github.com/repos/pvechersky/rotors_simulator/git/commits{/sha}","comments_url":"https://api.github.com/repos/pvechersky/rotors_simulator/comments{/number}","issue_comment_url":"https://api.github.com/repos/pvechersky/rotors_simulator/issues/comments{/number}","contents_url":"https://api.github.com/repos/pvechersky/rotors_simulator/contents/{+path}","compare_url":"https://api.github.com/repos/pvechersky/rotors_simulator/compare/{base}...{head}","merges_url":"https://api.github.com/repos/pvechersky/rotors_simulator/merges","archive_url":"https://api.github.com/repos/pvechersky/rotors_simulator/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/pvechersky/rotors_simulator/downloads","issues_url":"https://api.github.com/repos/pvechersky/rotors_simulator/issues{/number}","pulls_url":"https://api.github.com/repos/pvechersky/rotors_simulator/pulls{/number}","milestones_url":"https://api.github.com/repos/pvechersky/rotors_simulator/milestones{/number}","notifications_url":"https://api.github.com/repos/pvechersky/rotors_simulator/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/pvechersky/rotors_simulator/labels{/name}","releases_url":"https://api.github.com/repos/pvechersky/rotors_simulator/releases{/id}","deployments_url":"https://api.github.com/repos/pvechersky/rotors_simulator/deployments","created_at":"2016-03-25T14:57:57Z","updated_at":"2016-03-25T14:57:59Z","pushed_at":"2016-10-19T03:35:01Z","git_url":"git://github.com/pvechersky/rotors_simulator.git","ssh_url":"git@github.com:pvechersky/rotors_simulator.git","clone_url":"https://github.com/pvechersky/rotors_simulator.git","svn_url":"https://github.com/pvechersky/rotors_simulator","homepage":"","size":127222,"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":"ethz-asl:master","ref":"master","sha":"5527e14a714bc342e7a50a9dab24f89909177d72","user":{"login":"ethz-asl","id":475362,"avatar_url":"https://avatars.githubusercontent.com/u/475362?v=3","gravatar_id":"","url":"https://api.github.com/users/ethz-asl","html_url":"https://github.com/ethz-asl","followers_url":"https://api.github.com/users/ethz-asl/followers","following_url":"https://api.github.com/users/ethz-asl/following{/other_user}","gists_url":"https://api.github.com/users/ethz-asl/gists{/gist_id}","starred_url":"https://api.github.com/users/ethz-asl/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ethz-asl/subscriptions","organizations_url":"https://api.github.com/users/ethz-asl/orgs","repos_url":"https://api.github.com/users/ethz-asl/repos","events_url":"https://api.github.com/users/ethz-asl/events{/privacy}","received_events_url":"https://api.github.com/users/ethz-asl/received_events","type":"Organization","site_admin":false},"repo":{"id":17870150,"name":"rotors_simulator","full_name":"ethz-asl/rotors_simulator","owner":{"login":"ethz-asl","id":475362,"avatar_url":"https://avatars.githubusercontent.com/u/475362?v=3","gravatar_id":"","url":"https://api.github.com/users/ethz-asl","html_url":"https://github.com/ethz-asl","followers_url":"https://api.github.com/users/ethz-asl/followers","following_url":"https://api.github.com/users/ethz-asl/following{/other_user}","gists_url":"https://api.github.com/users/ethz-asl/gists{/gist_id}","starred_url":"https://api.github.com/users/ethz-asl/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ethz-asl/subscriptions","organizations_url":"https://api.github.com/users/ethz-asl/orgs","repos_url":"https://api.github.com/users/ethz-asl/repos","events_url":"https://api.github.com/users/ethz-asl/events{/privacy}","received_events_url":"https://api.github.com/users/ethz-asl/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/ethz-asl/rotors_simulator","description":"RotorS is a UAV gazebo simulator","fork":false,"url":"https://api.github.com/repos/ethz-asl/rotors_simulator","forks_url":"https://api.github.com/repos/ethz-asl/rotors_simulator/forks","keys_url":"https://api.github.com/repos/ethz-asl/rotors_simulator/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ethz-asl/rotors_simulator/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ethz-asl/rotors_simulator/teams","hooks_url":"https://api.github.com/repos/ethz-asl/rotors_simulator/hooks","issue_events_url":"https://api.github.com/repos/ethz-asl/rotors_simulator/issues/events{/number}","events_url":"https://api.github.com/repos/ethz-asl/rotors_simulator/events","assignees_url":"https://api.github.com/repos/ethz-asl/rotors_simulator/assignees{/user}","branches_url":"https://api.github.com/repos/ethz-asl/rotors_simulator/branches{/branch}","tags_url":"https://api.github.com/repos/ethz-asl/rotors_simulator/tags","blobs_url":"https://api.github.com/repos/ethz-asl/rotors_simulator/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ethz-asl/rotors_simulator/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ethz-asl/rotors_simulator/git/refs{/sha}","trees_url":"https://api.github.com/repos/ethz-asl/rotors_simulator/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ethz-asl/rotors_simulator/statuses/{sha}","languages_url":"https://api.github.com/repos/ethz-asl/rotors_simulator/languages","stargazers_url":"https://api.github.com/repos/ethz-asl/rotors_simulator/stargazers","contributors_url":"https://api.github.com/repos/ethz-asl/rotors_simulator/contributors","subscribers_url":"https://api.github.com/repos/ethz-asl/rotors_simulator/subscribers","subscription_url":"https://api.github.com/repos/ethz-asl/rotors_simulator/subscription","commits_url":"https://api.github.com/repos/ethz-asl/rotors_simulator/commits{/sha}","git_commits_url":"https://api.github.com/repos/ethz-asl/rotors_simulator/git/commits{/sha}","comments_url":"https://api.github.com/repos/ethz-asl/rotors_simulator/comments{/number}","issue_comment_url":"https://api.github.com/repos/ethz-asl/rotors_simulator/issues/comments{/number}","contents_url":"https://api.github.com/repos/ethz-asl/rotors_simulator/contents/{+path}","compare_url":"https://api.github.com/repos/ethz-asl/rotors_simulator/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ethz-asl/rotors_simulator/merges","archive_url":"https://api.github.com/repos/ethz-asl/rotors_simulator/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ethz-asl/rotors_simulator/downloads","issues_url":"https://api.github.com/repos/ethz-asl/rotors_simulator/issues{/number}","pulls_url":"https://api.github.com/repos/ethz-asl/rotors_simulator/pulls{/number}","milestones_url":"https://api.github.com/repos/ethz-asl/rotors_simulator/milestones{/number}","notifications_url":"https://api.github.com/repos/ethz-asl/rotors_simulator/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ethz-asl/rotors_simulator/labels{/name}","releases_url":"https://api.github.com/repos/ethz-asl/rotors_simulator/releases{/id}","deployments_url":"https://api.github.com/repos/ethz-asl/rotors_simulator/deployments","created_at":"2014-03-18T15:02:10Z","updated_at":"2016-10-18T15:28:41Z","pushed_at":"2016-10-19T03:49:15Z","git_url":"git://github.com/ethz-asl/rotors_simulator.git","ssh_url":"git@github.com:ethz-asl/rotors_simulator.git","clone_url":"https://github.com/ethz-asl/rotors_simulator.git","svn_url":"https://github.com/ethz-asl/rotors_simulator","homepage":"","size":36165,"stargazers_count":60,"watchers_count":60,"language":"C++","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":79,"mirror_url":null,"open_issues_count":36,"forks":79,"open_issues":36,"watchers":60,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/ethz-asl/rotors_simulator/pulls/312"},"html":{"href":"https://github.com/ethz-asl/rotors_simulator/pull/312"},"issue":{"href":"https://api.github.com/repos/ethz-asl/rotors_simulator/issues/312"},"comments":{"href":"https://api.github.com/repos/ethz-asl/rotors_simulator/issues/312/comments"},"review_comments":{"href":"https://api.github.com/repos/ethz-asl/rotors_simulator/pulls/312/comments"},"review_comment":{"href":"https://api.github.com/repos/ethz-asl/rotors_simulator/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/ethz-asl/rotors_simulator/pulls/312/commits"},"statuses":{"href":"https://api.github.com/repos/ethz-asl/rotors_simulator/statuses/e0f09a8ecb4d5cc29c8fc8a9226412078eaf2901"}}}}
{"actor":{"display_login":"burrimi"}}