From 25aa2b9c8ca229bf880387476fd3a40772bd5bcb Mon Sep 17 00:00:00 2001 From: Matthias Grob <maetugr@gmail.com> Date: Wed, 5 Dec 2018 17:21:19 +0100 Subject: [PATCH] orbit: fix telemetry message content --- .../tasks/Orbit/FlightTaskOrbit.cpp | 36 ++++++++++++------- .../tasks/Orbit/FlightTaskOrbit.hpp | 7 ++-- src/modules/mavlink/mavlink_messages.cpp | 4 +-- 3 files changed, 31 insertions(+), 16 deletions(-) diff --git a/src/lib/FlightTasks/tasks/Orbit/FlightTaskOrbit.cpp b/src/lib/FlightTasks/tasks/Orbit/FlightTaskOrbit.cpp index 1257ac71f8..7dd8c84986 100644 --- a/src/lib/FlightTasks/tasks/Orbit/FlightTaskOrbit.cpp +++ b/src/lib/FlightTasks/tasks/Orbit/FlightTaskOrbit.cpp @@ -38,6 +38,7 @@ #include "FlightTaskOrbit.hpp" #include <mathlib/mathlib.h> #include <lib/ecl/geo/geo.h> +#include <uORB/topics/orbit_status.h> using namespace matrix; @@ -91,6 +92,28 @@ bool FlightTaskOrbit::applyCommandParameters(const vehicle_command_s &command) return ret; } +bool FlightTaskOrbit::sendTelemetry() +{ + orbit_status_s _orbit_status = {}; + _orbit_status.timestamp = hrt_absolute_time(); + _orbit_status.radius = _r; + _orbit_status.frame = 0; // MAV_FRAME::MAV_FRAME_GLOBAL + + if (globallocalconverter_toglobal(_center(0), _center(1), _position_setpoint(2), &_orbit_status.x, &_orbit_status.y, + &_orbit_status.z)) { + return false; // don't send the message if the transformation failed + } + + if (_orbit_status_pub == nullptr) { + _orbit_status_pub = orb_advertise(ORB_ID(orbit_status), &_orbit_status); + + } else { + orb_publish(ORB_ID(orbit_status), _orbit_status_pub, &_orbit_status); + } + + return true; +} + bool FlightTaskOrbit::setRadius(const float r) { if (math::isInRange(r, _radius_min, _radius_max)) { @@ -171,18 +194,7 @@ bool FlightTaskOrbit::update() _yawspeed_setpoint = _v / _r; // publish telemetry - _orbit_status.radius = _r; - _orbit_status.frame = 6; // MAV_FRAME_GLOBAL_RELATIVE_ALT_INT - _orbit_status.x = _center(0); - _orbit_status.y = _center(1); - _orbit_status.z = _center(2); - - if (_orbit_status_pub == nullptr) { - _orbit_status_pub = orb_advertise(ORB_ID(orbit_status), &_orbit_status); - - } else { - orb_publish(ORB_ID(orbit_status), _orbit_status_pub, &_orbit_status); - } + sendTelemetry(); return true; } diff --git a/src/lib/FlightTasks/tasks/Orbit/FlightTaskOrbit.hpp b/src/lib/FlightTasks/tasks/Orbit/FlightTaskOrbit.hpp index 889a5b84a3..f0e15d14c2 100644 --- a/src/lib/FlightTasks/tasks/Orbit/FlightTaskOrbit.hpp +++ b/src/lib/FlightTasks/tasks/Orbit/FlightTaskOrbit.hpp @@ -43,7 +43,6 @@ #include "FlightTaskManualAltitudeSmooth.hpp" #include <uORB/uORB.h> -#include <uORB/topics/orbit_status.h> class FlightTaskOrbit : public FlightTaskManualAltitudeSmooth { @@ -66,6 +65,11 @@ public: bool checkAcceleration(float r, float v, float a); protected: + /** + * Send out telemetry information for the log and MAVLink. + * @return true on success, false on error + */ + bool sendTelemetry(); /** * Change the radius of the circle. @@ -93,5 +97,4 @@ private: const float _acceleration_max = 2.f; orb_advert_t _orbit_status_pub = nullptr; - orbit_status_s _orbit_status = {}; }; diff --git a/src/modules/mavlink/mavlink_messages.cpp b/src/modules/mavlink/mavlink_messages.cpp index 7e51c7986b..57ddc0ba28 100644 --- a/src/modules/mavlink/mavlink_messages.cpp +++ b/src/modules/mavlink/mavlink_messages.cpp @@ -4826,8 +4826,8 @@ protected: _msg_orbit_execution_status.time_usec = _orbit_status.timestamp; _msg_orbit_execution_status.radius = _orbit_status.radius; _msg_orbit_execution_status.frame = _orbit_status.frame; - _msg_orbit_execution_status.x = _orbit_status.x; - _msg_orbit_execution_status.y = _orbit_status.y; + _msg_orbit_execution_status.x = _orbit_status.x * 1e7; + _msg_orbit_execution_status.y = _orbit_status.y * 1e7; _msg_orbit_execution_status.z = _orbit_status.z; mavlink_msg_orbit_execution_status_send_struct(_mavlink->get_channel(), &_msg_orbit_execution_status); -- GitLab