From f11465bb26af1d4685a9ad4706ef5f1beff548f7 Mon Sep 17 00:00:00 2001
From: Alessandro Simovic <alessandro@yuneecresearch.com>
Date: Tue, 4 Dec 2018 15:15:23 +0100
Subject: [PATCH] orbit: publish uorb message

---
 .../tasks/Orbit/FlightTaskOrbit.cpp           | 19 +++++++++++++++++++
 .../tasks/Orbit/FlightTaskOrbit.hpp           |  7 ++++++-
 2 files changed, 25 insertions(+), 1 deletion(-)

diff --git a/src/lib/FlightTasks/tasks/Orbit/FlightTaskOrbit.cpp b/src/lib/FlightTasks/tasks/Orbit/FlightTaskOrbit.cpp
index 2cf0d6cad6..1257ac71f8 100644
--- a/src/lib/FlightTasks/tasks/Orbit/FlightTaskOrbit.cpp
+++ b/src/lib/FlightTasks/tasks/Orbit/FlightTaskOrbit.cpp
@@ -46,6 +46,11 @@ FlightTaskOrbit::FlightTaskOrbit()
 	_sticks_data_required = false;
 }
 
+FlightTaskOrbit::~FlightTaskOrbit()
+{
+	orb_unadvertise(_orbit_status_pub);
+}
+
 bool FlightTaskOrbit::applyCommandParameters(const vehicle_command_s &command)
 {
 	bool ret = true;
@@ -165,5 +170,19 @@ bool FlightTaskOrbit::update()
 	// yawspeed feed-forward because we know the necessary angular rate
 	_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);
+	}
+
 	return true;
 }
diff --git a/src/lib/FlightTasks/tasks/Orbit/FlightTaskOrbit.hpp b/src/lib/FlightTasks/tasks/Orbit/FlightTaskOrbit.hpp
index 24f2ce208a..889a5b84a3 100644
--- a/src/lib/FlightTasks/tasks/Orbit/FlightTaskOrbit.hpp
+++ b/src/lib/FlightTasks/tasks/Orbit/FlightTaskOrbit.hpp
@@ -42,12 +42,14 @@
 #pragma once
 
 #include "FlightTaskManualAltitudeSmooth.hpp"
+#include <uORB/uORB.h>
+#include <uORB/topics/orbit_status.h>
 
 class FlightTaskOrbit : public FlightTaskManualAltitudeSmooth
 {
 public:
 	FlightTaskOrbit();
-	virtual ~FlightTaskOrbit() = default;
+	virtual ~FlightTaskOrbit();
 
 	bool applyCommandParameters(const vehicle_command_s &command) override;
 	bool activate() override;
@@ -89,4 +91,7 @@ private:
 	const float _radius_max = 100.f;
 	const float _velocity_max = 10.f;
 	const float _acceleration_max = 2.f;
+
+	orb_advert_t _orbit_status_pub = nullptr;
+	orbit_status_s _orbit_status = {};
 };
-- 
GitLab