18 #include <mavros_msgs/GPSRAW.h>
19 #include <mavros_msgs/GPSRTK.h>
22 namespace extra_plugins {
23 using mavlink::common::RTK_BASELINE_COORDINATE_SYSTEM;
68 void handle_gps_raw_int(
const mavlink::mavlink_message_t *msg, mavlink::common::msg::GPS_RAW_INT &mav_msg) {
69 auto ros_msg = boost::make_shared<mavros_msgs::GPSRAW>();
71 ros_msg->fix_type = mav_msg.fix_type;
72 ros_msg->lat = mav_msg.lat;
73 ros_msg->lon = mav_msg.lon;
74 ros_msg->alt = mav_msg.alt;
75 ros_msg->eph = mav_msg.eph;
76 ros_msg->epv = mav_msg.epv;
77 ros_msg->vel = mav_msg.vel;
78 ros_msg->cog = mav_msg.cog;
79 ros_msg->satellites_visible = mav_msg.satellites_visible;
80 ros_msg->alt_ellipsoid = mav_msg.alt_ellipsoid;
81 ros_msg->h_acc = mav_msg.h_acc;
82 ros_msg->v_acc = mav_msg.v_acc;
83 ros_msg->vel_acc = mav_msg.vel_acc;
84 ros_msg->hdg_acc = mav_msg.hdg_acc;
85 ros_msg->dgps_numch = UINT8_MAX;
86 ros_msg->dgps_age = UINT32_MAX;
87 ros_msg->yaw = mav_msg.yaw;
95 void handle_gps2_raw(
const mavlink::mavlink_message_t *msg, mavlink::common::msg::GPS2_RAW &mav_msg) {
96 auto ros_msg = boost::make_shared<mavros_msgs::GPSRAW>();
98 ros_msg->fix_type = mav_msg.fix_type;
99 ros_msg->lat = mav_msg.lat;
100 ros_msg->lon = mav_msg.lon;
101 ros_msg->alt = mav_msg.alt;
102 ros_msg->eph = mav_msg.eph;
103 ros_msg->epv = mav_msg.epv;
104 ros_msg->vel = mav_msg.vel;
105 ros_msg->cog = mav_msg.cog;
106 ros_msg->satellites_visible = mav_msg.satellites_visible;
107 ros_msg->alt_ellipsoid = mav_msg.alt_ellipsoid;
108 ros_msg->h_acc = mav_msg.h_acc;
109 ros_msg->v_acc = mav_msg.v_acc;
110 ros_msg->vel_acc = mav_msg.vel_acc;
111 ros_msg->hdg_acc = mav_msg.hdg_acc;
112 ros_msg->dgps_numch = mav_msg.dgps_numch;
113 ros_msg->dgps_age = mav_msg.dgps_age;
114 ros_msg->yaw = mav_msg.yaw;
122 void handle_gps_rtk(
const mavlink::mavlink_message_t *msg, mavlink::common::msg::GPS_RTK &mav_msg) {
123 auto ros_msg = boost::make_shared<mavros_msgs::GPSRTK>();
124 switch (
static_cast<RTK_BASELINE_COORDINATE_SYSTEM
>(mav_msg.baseline_coords_type))
126 case RTK_BASELINE_COORDINATE_SYSTEM::ECEF:
127 ros_msg->header.frame_id =
"earth";
129 case RTK_BASELINE_COORDINATE_SYSTEM::NED:
130 ros_msg->header.frame_id =
"map";
133 ROS_ERROR_NAMED(
"gps_status",
"GPS_RTK.baseline_coords_type MAVLink field has unknown \"%d\" value", mav_msg.baseline_coords_type);
136 ros_msg->rtk_receiver_id = mav_msg.rtk_receiver_id;
137 ros_msg->wn = mav_msg.wn;
138 ros_msg->tow = mav_msg.tow;
139 ros_msg->rtk_health = mav_msg.rtk_health;
140 ros_msg->rtk_rate = mav_msg.rtk_rate;
141 ros_msg->nsats = mav_msg.nsats;
142 ros_msg->baseline_a = mav_msg.baseline_a_mm;
143 ros_msg->baseline_b = mav_msg.baseline_b_mm;
144 ros_msg->baseline_c = mav_msg.baseline_c_mm;
145 ros_msg->accuracy = mav_msg.accuracy;
146 ros_msg->iar_num_hypotheses = mav_msg.iar_num_hypotheses;
154 void handle_gps2_rtk(
const mavlink::mavlink_message_t *msg, mavlink::common::msg::GPS2_RTK &mav_msg) {
155 auto ros_msg = boost::make_shared<mavros_msgs::GPSRTK>();
156 switch (
static_cast<RTK_BASELINE_COORDINATE_SYSTEM
>(mav_msg.baseline_coords_type))
158 case RTK_BASELINE_COORDINATE_SYSTEM::ECEF:
159 ros_msg->header.frame_id =
"earth";
161 case RTK_BASELINE_COORDINATE_SYSTEM::NED:
162 ros_msg->header.frame_id =
"map";
165 ROS_ERROR_NAMED(
"gps_status",
"GPS_RTK2.baseline_coords_type MAVLink field has unknown \"%d\" value", mav_msg.baseline_coords_type);
168 ros_msg->rtk_receiver_id = mav_msg.rtk_receiver_id;
169 ros_msg->wn = mav_msg.wn;
170 ros_msg->tow = mav_msg.tow;
171 ros_msg->rtk_health = mav_msg.rtk_health;
172 ros_msg->rtk_rate = mav_msg.rtk_rate;
173 ros_msg->nsats = mav_msg.nsats;
174 ros_msg->baseline_a = mav_msg.baseline_a_mm;
175 ros_msg->baseline_b = mav_msg.baseline_b_mm;
176 ros_msg->baseline_c = mav_msg.baseline_c_mm;
177 ros_msg->accuracy = mav_msg.accuracy;
178 ros_msg->iar_num_hypotheses = mav_msg.iar_num_hypotheses;