| 233 | #define TIMEOUT(msg, timeout) (msg.header.stamp.isZero() || (ros::Time::now() - msg.header.stamp > timeout)) |
| 234 | |
| 235 | bool getTelemetry(GetTelemetry::Request& req, GetTelemetry::Response& res) |
| 236 | { |
| 237 | ros::Time stamp = ros::Time::now(); |
| 238 | |
| 239 | if (req.frame_id.empty()) |
| 240 | req.frame_id = local_frame; |
| 241 | |
| 242 | res.frame_id = req.frame_id; |
| 243 | res.x = NAN; |
| 244 | res.y = NAN; |
| 245 | res.z = NAN; |
| 246 | res.lat = NAN; |
| 247 | res.lon = NAN; |
| 248 | res.alt = NAN; |
| 249 | res.vx = NAN; |
| 250 | res.vy = NAN; |
| 251 | res.vz = NAN; |
| 252 | res.roll = NAN; |
| 253 | res.pitch = NAN; |
| 254 | res.yaw = NAN; |
| 255 | res.roll_rate = NAN; |
| 256 | res.pitch_rate = NAN; |
| 257 | res.yaw_rate = NAN; |
| 258 | res.voltage = NAN; |
| 259 | res.cell_voltage = NAN; |
| 260 | |
| 261 | if (!TIMEOUT(state, state_timeout)) { |
| 262 | res.connected = state.connected; |
| 263 | res.armed = state.armed; |
| 264 | res.mode = state.mode; |
| 265 | } |
| 266 | |
| 267 | try { |
| 268 | waitTransform(req.frame_id, fcu_frame, stamp, telemetry_transform_timeout); |
| 269 | auto transform = tf_buffer.lookupTransform(req.frame_id, fcu_frame, stamp); |
| 270 | res.x = transform.transform.translation.x; |
| 271 | res.y = transform.transform.translation.y; |
| 272 | res.z = transform.transform.translation.z; |
| 273 | |
| 274 | double yaw, pitch, roll; |
| 275 | tf2::getEulerYPR(transform.transform.rotation, yaw, pitch, roll); |
| 276 | res.yaw = yaw; |
| 277 | res.pitch = pitch; |
| 278 | res.roll = roll; |
| 279 | } catch (const tf2::TransformException& e) { |
| 280 | ROS_DEBUG("%s", e.what()); |
| 281 | } |
| 282 | |
| 283 | if (!TIMEOUT(velocity, velocity_timeout)) { |
| 284 | try { |
| 285 | // transform velocity |
| 286 | waitTransform(req.frame_id, fcu_frame, velocity.header.stamp, telemetry_transform_timeout); |
| 287 | Vector3Stamped vec, vec_out; |
| 288 | vec.header.stamp = velocity.header.stamp; |
| 289 | vec.header.frame_id = velocity.header.frame_id; |
| 290 | vec.vector = velocity.twist.linear; |
| 291 | tf_buffer.transform(vec, vec_out, req.frame_id); |
| 292 |
nothing calls this directly
no test coverage detected