From 376e078c24f7db5ee9e773c9a7fd0110d76b085a Mon Sep 17 00:00:00 2001 From: Daniel Agar <daniel@agar.ca> Date: Tue, 22 Jan 2019 11:04:13 -0500 Subject: [PATCH] platforms delete PX4_ROS and obsolete headers --- src/lib/drivers/device/nuttx/SPI.hpp | 2 - src/lib/drivers/device/posix/SPI.hpp | 2 - src/platforms/px4_app.h | 13 - src/platforms/px4_defines.h | 22 +- src/platforms/px4_i2c.h | 6 +- src/platforms/px4_includes.h | 7 +- src/platforms/px4_log.h | 13 +- src/platforms/px4_message.h | 77 ----- src/platforms/px4_middleware.h | 7 +- src/platforms/px4_nodehandle.h | 312 ------------------ src/platforms/px4_publisher.h | 163 --------- src/platforms/px4_spi.h | 33 -- src/platforms/px4_subscriber.h | 296 ----------------- src/platforms/px4_tasks.h | 6 +- src/platforms/px4_workqueue.h | 4 +- src/platforms/ros/eigen_math.h | 19 -- src/platforms/ros/nodes/README.md | 22 -- .../attitude_estimator/attitude_estimator.cpp | 124 ------- .../attitude_estimator/attitude_estimator.h | 64 ---- .../ros/nodes/commander/commander.cpp | 240 -------------- src/platforms/ros/nodes/commander/commander.h | 102 ------ .../demo_offboard_attitude_setpoints.cpp | 88 ----- .../demo_offboard_attitude_setpoints.h | 60 ---- .../demo_offboard_position_setpoints.cpp | 78 ----- .../demo_offboard_position_setpoints.h | 59 ---- .../ros/nodes/manual_input/manual_input.cpp | 174 ---------- .../ros/nodes/manual_input/manual_input.h | 97 ------ src/platforms/ros/nodes/mavlink/mavlink.cpp | 305 ----------------- src/platforms/ros/nodes/mavlink/mavlink.h | 116 ------- src/platforms/ros/nodes/mc_mixer/mc_mixer.cpp | 277 ---------------- .../position_estimator/position_estimator.cpp | 112 ------- .../position_estimator/position_estimator.h | 64 ---- src/platforms/ros/perf_counter.cpp | 184 ----------- src/platforms/ros/px4_nodehandle.cpp | 44 --- src/platforms/ros/px4_publisher.cpp | 41 --- src/platforms/ros/px4_ros_impl.cpp | 56 ---- 36 files changed, 9 insertions(+), 3280 deletions(-) delete mode 100644 src/platforms/px4_message.h delete mode 100644 src/platforms/px4_nodehandle.h delete mode 100644 src/platforms/px4_publisher.h delete mode 100644 src/platforms/px4_spi.h delete mode 100644 src/platforms/px4_subscriber.h delete mode 100755 src/platforms/ros/eigen_math.h delete mode 100644 src/platforms/ros/nodes/README.md delete mode 100644 src/platforms/ros/nodes/attitude_estimator/attitude_estimator.cpp delete mode 100644 src/platforms/ros/nodes/attitude_estimator/attitude_estimator.h delete mode 100644 src/platforms/ros/nodes/commander/commander.cpp delete mode 100644 src/platforms/ros/nodes/commander/commander.h delete mode 100644 src/platforms/ros/nodes/demo_offboard_attitude_setpoints/demo_offboard_attitude_setpoints.cpp delete mode 100644 src/platforms/ros/nodes/demo_offboard_attitude_setpoints/demo_offboard_attitude_setpoints.h delete mode 100644 src/platforms/ros/nodes/demo_offboard_position_setpoints/demo_offboard_position_setpoints.cpp delete mode 100644 src/platforms/ros/nodes/demo_offboard_position_setpoints/demo_offboard_position_setpoints.h delete mode 100644 src/platforms/ros/nodes/manual_input/manual_input.cpp delete mode 100644 src/platforms/ros/nodes/manual_input/manual_input.h delete mode 100644 src/platforms/ros/nodes/mavlink/mavlink.cpp delete mode 100644 src/platforms/ros/nodes/mavlink/mavlink.h delete mode 100644 src/platforms/ros/nodes/mc_mixer/mc_mixer.cpp delete mode 100644 src/platforms/ros/nodes/position_estimator/position_estimator.cpp delete mode 100644 src/platforms/ros/nodes/position_estimator/position_estimator.h delete mode 100755 src/platforms/ros/perf_counter.cpp delete mode 100644 src/platforms/ros/px4_nodehandle.cpp delete mode 100644 src/platforms/ros/px4_publisher.cpp delete mode 100644 src/platforms/ros/px4_ros_impl.cpp diff --git a/src/lib/drivers/device/nuttx/SPI.hpp b/src/lib/drivers/device/nuttx/SPI.hpp index 23fda826d0..24e1263751 100644 --- a/src/lib/drivers/device/nuttx/SPI.hpp +++ b/src/lib/drivers/device/nuttx/SPI.hpp @@ -42,8 +42,6 @@ #include "../CDev.hpp" -#include <px4_spi.h> - namespace device __EXPORT { diff --git a/src/lib/drivers/device/posix/SPI.hpp b/src/lib/drivers/device/posix/SPI.hpp index ac02383786..cf9260a987 100644 --- a/src/lib/drivers/device/posix/SPI.hpp +++ b/src/lib/drivers/device/posix/SPI.hpp @@ -42,8 +42,6 @@ #include "CDev.hpp" -#include <px4_spi.h> - namespace device __EXPORT { diff --git a/src/platforms/px4_app.h b/src/platforms/px4_app.h index d391751e0e..7bb48546e1 100644 --- a/src/platforms/px4_app.h +++ b/src/platforms/px4_app.h @@ -48,12 +48,6 @@ class AppState public: ~AppState() {} -#if defined(__PX4_ROS) - AppState() {} - - bool exitRequested() { return !ros::ok(); } - void requestExit() { ros::shutdown(); } -#else AppState() : _exitRequested(false), _isRunning(false) {} bool exitRequested() { return _exitRequested; } @@ -65,7 +59,6 @@ public: protected: bool _exitRequested; bool _isRunning; -#endif private: AppState(const AppState &); const AppState &operator=(const AppState &); @@ -73,15 +66,9 @@ private: } // Task/process based build -#if defined(__PX4_ROS) - -// Thread based build - -#else #ifdef PX4_MAIN extern int PX4_MAIN(int argc, char *argv[]); #endif -#endif diff --git a/src/platforms/px4_defines.h b/src/platforms/px4_defines.h index bde247ee9e..a75eaca6ce 100644 --- a/src/platforms/px4_defines.h +++ b/src/platforms/px4_defines.h @@ -72,23 +72,7 @@ #define PX4_ISFINITE(x) std::isfinite(x) #endif -#if defined(__PX4_ROS) -/**************************************************************************** - * Building for running within the ROS environment. - ****************************************************************************/ - -#define noreturn_function -#ifdef __cplusplus -#include "ros/ros.h" -#endif - -/* Main entry point */ -#define PX4_MAIN_FUNCTION(_prefix) int main(int argc, char **argv) - -/* Get value of parameter by name, which is equal to the handle for ros */ -#define PX4_PARAM_GET_BYNAME(_name, _destpt) ros::param::get(_name, *_destpt) - -#elif defined(__PX4_NUTTX) || defined(__PX4_POSIX) +#if defined(__PX4_NUTTX) || defined(__PX4_POSIX) /**************************************************************************** * Building for NuttX or POSIX. ****************************************************************************/ @@ -209,7 +193,7 @@ __END_DECLS #define PX4_STORAGEDIR PX4_ROOTFSDIR #endif // __PX4_POSIX -#if defined(__PX4_ROS) || defined(__PX4_POSIX) +#if defined(__PX4_POSIX) /**************************************************************************** * Defines for POSIX and ROS ****************************************************************************/ @@ -248,4 +232,4 @@ __END_DECLS #define M_DEG_TO_RAD 0.017453292519943295 #define M_RAD_TO_DEG 57.295779513082323 -#endif // defined(__PX4_ROS) || defined(__PX4_POSIX) +#endif // defined(__PX4_POSIX) diff --git a/src/platforms/px4_i2c.h b/src/platforms/px4_i2c.h index 5d391d7a9a..96a7c6c925 100644 --- a/src/platforms/px4_i2c.h +++ b/src/platforms/px4_i2c.h @@ -41,11 +41,7 @@ #define PX4_I2C_M_READ 0x0001 /* read data, from slave to master */ -#if defined(__PX4_ROS) - -#error "Devices not supported in ROS" - -#elif defined (__PX4_NUTTX) +#if defined (__PX4_NUTTX) __BEGIN_DECLS /* diff --git a/src/platforms/px4_includes.h b/src/platforms/px4_includes.h index e20cf5baf0..38d5e455a4 100644 --- a/src/platforms/px4_includes.h +++ b/src/platforms/px4_includes.h @@ -39,12 +39,7 @@ #pragma once -#if defined(__PX4_ROS) -/* - * Building for running within the ROS environment - */ - -#elif defined(__PX4_NUTTX) +#if defined(__PX4_NUTTX) /* * Building for NuttX */ diff --git a/src/platforms/px4_log.h b/src/platforms/px4_log.h index f3e72b0782..b91e957c53 100644 --- a/src/platforms/px4_log.h +++ b/src/platforms/px4_log.h @@ -66,18 +66,7 @@ __END_DECLS ****************************************************************************/ #define __px4_log_omit(level, FMT, ...) do_nothing(level, ##__VA_ARGS__) -#if defined(__PX4_ROS) - -#include <ros/console.h> -#define PX4_PANIC(...) ROS_FATAL(__VA_ARGS__) -#define PX4_ERR(...) ROS_ERROR(__VA_ARGS__) -#define PX4_WARN(...) ROS_WARN(__VA_ARGS__) -#define PX4_INFO(...) ROS_INFO(__VA_ARGS__) -#define PX4_INFO_RAW(...) printf(__VA_ARGS__) -#define PX4_DEBUG(...) ROS_DEBUG(__VA_ARGS__) -#define PX4_BACKTRACE() - -#elif defined(__PX4_QURT) +#if defined(__PX4_QURT) #include "qurt_log.h" /**************************************************************************** * Messages that should never be filtered or compiled out diff --git a/src/platforms/px4_message.h b/src/platforms/px4_message.h deleted file mode 100644 index 0192716135..0000000000 --- a/src/platforms/px4_message.h +++ /dev/null @@ -1,77 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2014 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file px4_message.h - * - * Defines the message base types - */ -#pragma once - -#if defined(__PX4_ROS) -typedef const char *PX4TopicHandle; -#else -#include <uORB/uORB.h> -typedef orb_id_t PX4TopicHandle; -#endif - -namespace px4 -{ - -template <typename M> -class __EXPORT PX4Message -{ - // friend class NodeHandle; -// #if defined(__PX4_ROS) - // template<typename T> - // friend class SubscriberROS; -// #endif - -public: - PX4Message() : - _data() - {} - - PX4Message(M msg) : - _data(msg) - {} - - virtual ~PX4Message() {} - - virtual M &data() {return _data;} - virtual const M &data() const {return _data;} -private: - M _data; -}; - -} diff --git a/src/platforms/px4_middleware.h b/src/platforms/px4_middleware.h index 6f105007c7..3930748487 100644 --- a/src/platforms/px4_middleware.h +++ b/src/platforms/px4_middleware.h @@ -49,12 +49,7 @@ __EXPORT void init(int argc, char *argv[], const char *process_name); __EXPORT uint64_t get_time_micros(); -#if defined(__PX4_ROS) -/** - * Returns true if the app/task should continue to run - */ -inline bool ok() { return ros::ok(); } -#elif defined(__PX4_NUTTX) +#if defined(__PX4_NUTTX) extern bool task_should_exit; /** * Returns true if the app/task should continue to run diff --git a/src/platforms/px4_nodehandle.h b/src/platforms/px4_nodehandle.h deleted file mode 100644 index faf5b0158b..0000000000 --- a/src/platforms/px4_nodehandle.h +++ /dev/null @@ -1,312 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2014 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file px4_nodehandle.h - * - * PX4 Middleware Wrapper Node Handle - */ -#pragma once - -/* includes for all platforms */ -#include "px4_time.h" -#include "px4_subscriber.h" -#include "px4_publisher.h" -#include "px4_middleware.h" -#include "px4_app.h" - -#if defined(__PX4_ROS) -/* includes when building for ros */ -#include "ros/ros.h" -#include <list> -#include <inttypes.h> -#include <type_traits> -#else -/* includes when building for NuttX */ -#include <px4_posix.h> -#include <poll.h> -#endif -#include <functional> - -namespace px4 -{ -#if defined(__PX4_ROS) -class NodeHandle : - private ros::NodeHandle -{ -public: - NodeHandle(AppState &a) : - ros::NodeHandle(), - _subs(), - _pubs(), - _appState(a) - {} - - ~NodeHandle() - { - _subs.clear(); - _pubs.clear(); - }; - - /** - * Subscribe with callback to function - * @param topic Name of the topic - * @param fb Callback, executed on receiving a new message - */ - template<typename T> - Subscriber<T> *subscribe(void(*fp)(const T &), unsigned interval) - { - SubscriberBase *sub = new SubscriberROS<T>((ros::NodeHandle *)this, std::bind(fp, std::placeholders::_1)); - _subs.push_back(sub); - return (Subscriber<T> *)sub; - } - - /** - * Subscribe with callback to class method - * @param fb Callback, executed on receiving a new message - * @param obj pointer class instance - */ - template<typename T, typename C> - Subscriber<T> *subscribe(void(C::*fp)(const T &), C *obj, unsigned interval) - { - SubscriberBase *sub = new SubscriberROS<T>((ros::NodeHandle *)this, std::bind(fp, obj, std::placeholders::_1)); - _subs.push_back(sub); - return (Subscriber<T> *)sub; - } - - /** - * Subscribe with no callback, just the latest value is stored on updates - */ - template<typename T> - Subscriber<T> *subscribe(unsigned interval) - { - SubscriberBase *sub = new SubscriberROS<T>((ros::NodeHandle *)this); - _subs.push_back(sub); - return (Subscriber<T> *)sub; - } - - /** - * Advertise topic - */ - template<typename T> - Publisher<T> *advertise() - { - PublisherROS<T> *pub = new PublisherROS<T>((ros::NodeHandle *)this); - _pubs.push_back((PublisherBase *)pub); - return (Publisher<T> *)pub; - } - - /** - * Calls all callback waiting to be called - */ - void spinOnce() { ros::spinOnce(); } - - /** - * Keeps calling callbacks for incoming messages, returns when module is terminated - */ - void spin() { ros::spin(); } - - -protected: - std::list<SubscriberBase *> _subs; /**< Subcriptions of node */ - std::list<PublisherBase *> _pubs; /**< Publications of node */ - - AppState &_appState; - -}; -#else //Building for NuttX -class __EXPORT NodeHandle -{ -public: - NodeHandle(AppState &a) : - _subs(), - _pubs(), - _sub_min_interval(nullptr), - _appState(a) - {} - - ~NodeHandle() - { - /* Empty subscriptions list */ - SubscriberNode *sub = _subs.getHead(); - int count = 0; - - while (sub != nullptr) { - if (count++ > kMaxSubscriptions) { - PX4_WARN("exceeded max subscriptions"); - break; - } - - SubscriberNode *sib = sub->getSibling(); - delete sub; - sub = sib; - } - - /* Empty publications list */ - PublisherNode *pub = _pubs.getHead(); - count = 0; - - while (pub != nullptr) { - if (count++ > kMaxPublications) { - PX4_WARN("exceeded max publications"); - break; - } - - PublisherNode *sib = pub->getSibling(); - delete pub; - pub = sib; - } - }; - - /** - * Subscribe with callback to function - * @param fp Callback, executed on receiving a new message - * @param interval Minimal interval between calls to callback - */ - - template<typename T> - Subscriber<T> *subscribe(void(*fp)(const T &), unsigned interval) - { - (void)interval; - SubscriberUORBCallback<T> *sub_px4 = new SubscriberUORBCallback<T>(interval, std::bind(fp, std::placeholders::_1)); - update_sub_min_interval(interval, sub_px4); - _subs.add((SubscriberNode *)sub_px4); - return (Subscriber<T> *)sub_px4; - } - - /** - * Subscribe with callback to class method - * @param fb Callback, executed on receiving a new message - * @param obj pointer class instance - */ - template<typename T, typename C> - Subscriber<T> *subscribe(void(C::*fp)(const T &), C *obj, unsigned interval) - { - (void)interval; - SubscriberUORBCallback<T> *sub_px4 = new SubscriberUORBCallback<T>(interval, std::bind(fp, obj, std::placeholders::_1)); - update_sub_min_interval(interval, sub_px4); - _subs.add((SubscriberNode *)sub_px4); - return (Subscriber<T> *)sub_px4; - } - - /** - * Subscribe without callback to function - * @param interval Minimal interval between data fetches from orb - */ - - template<typename T> - Subscriber<T> *subscribe(unsigned interval) - { - (void)interval; - SubscriberUORB<T> *sub_px4 = new SubscriberUORB<T>(interval); - update_sub_min_interval(interval, sub_px4); - _subs.add((SubscriberNode *)sub_px4); - return (Subscriber<T> *)sub_px4; - } - - /** - * Advertise topic - */ - template<typename T> - Publisher<T> *advertise() - { - PublisherUORB<T> *pub = new PublisherUORB<T>(); - _pubs.add(pub); - return (Publisher<T> *)pub; - } - - /** - * Calls all callback waiting to be called - */ - void spinOnce() - { - /* Loop through subscriptions, call callback for updated subscriptions */ - SubscriberNode *sub = _subs.getHead(); - int count = 0; - - while (sub != nullptr) { - if (count++ > kMaxSubscriptions) { - PX4_WARN("exceeded max subscriptions"); - break; - } - - sub->update(); - sub = sub->getSibling(); - } - } - - /** - * Keeps calling callbacks for incoming messages, returns when module is terminated - */ - void spin() - { - while (!_appState.exitRequested()) { - const int timeout_ms = 100; - - /* Only continue in the loop if the nodehandle has subscriptions */ - if (_sub_min_interval == nullptr) { - px4_usleep(timeout_ms * 1000); - continue; - } - - /* Poll fd with smallest interval */ - px4_pollfd_struct_t pfd; - pfd.fd = _sub_min_interval->getUORBHandle(); - pfd.events = POLLIN; - px4_poll(&pfd, 1, timeout_ms); - spinOnce(); - } - } -protected: - static const uint16_t kMaxSubscriptions = 100; - static const uint16_t kMaxPublications = 100; - List<SubscriberNode *> _subs; /**< Subcriptions of node */ - List<PublisherNode *> _pubs; /**< Publications of node */ - SubscriberNode *_sub_min_interval; /**< Points to the sub with the smallest interval - of all Subscriptions in _subs*/ - - AppState &_appState; - - /** - * Check if this is the smallest interval so far and update _sub_min_interval - */ - template<typename T> - void update_sub_min_interval(unsigned interval, SubscriberUORB<T> *sub) - { - if (_sub_min_interval == nullptr || _sub_min_interval->get_interval() > interval) { - _sub_min_interval = sub; - } - } -}; -#endif -} diff --git a/src/platforms/px4_publisher.h b/src/platforms/px4_publisher.h deleted file mode 100644 index 9fbf6e962e..0000000000 --- a/src/platforms/px4_publisher.h +++ /dev/null @@ -1,163 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2014 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file px4_publisher.h - * - * PX4 Publisher API, implements publishing of messages from a nodehandle - */ -#pragma once -#if defined(__PX4_ROS) -/* includes when building for ros */ -#include "ros/ros.h" -#else -/* includes when building for NuttX */ -#include <uORB/Publication.hpp> -#include <containers/List.hpp> -#endif - -#include <platforms/px4_message.h> - -namespace px4 -{ - -/** - * Untemplated publisher base class - * */ -class __EXPORT PublisherBase -{ -public: - PublisherBase() {} - ~PublisherBase() {} -}; - -/** - * Publisher base class, templated with the message type - * */ -template <typename T> -class __EXPORT Publisher -{ -public: - Publisher() {} - ~Publisher() {} - - virtual int publish(const T &msg) = 0; -}; - -#if defined(__PX4_ROS) -template <typename T> -class PublisherROS : - public Publisher<T> -{ -public: - /** - * Construct Publisher by providing a ros::Publisher - * @param ros_pub the ros publisher which will be used to perform the publications - */ - PublisherROS(ros::NodeHandle *rnh) : - Publisher<T>(), - _ros_pub(rnh->advertise < typename std::remove_reference < decltype(((T *)nullptr)->data()) >::type & > (T::handle(), - kQueueSizeDefault)) - {} - - ~PublisherROS() {} - - /** Publishes msg - * @param msg the message which is published to the topic - */ - int publish(const T &msg) - { - _ros_pub.publish(msg.data()); - return 0; - } -protected: - static const uint32_t kQueueSizeDefault = 1; /**< Size of queue for ROS */ - ros::Publisher _ros_pub; /**< Handle to the ros publisher */ -}; -#else -/** - * Because we maintain a list of publishers we need a node class - */ -class __EXPORT PublisherNode : - public ListNode<PublisherNode *> -{ -public: - PublisherNode() : - ListNode() - {} - - virtual ~PublisherNode() {} - - virtual void update() = 0; -}; - -template <typename T> -class __EXPORT PublisherUORB : - public Publisher<T>, - public PublisherNode - -{ -public: - /** - * Construct Publisher by providing orb meta data - */ - PublisherUORB() : - Publisher<T>(), - PublisherNode(), - _uorb_pub(new uORB::PublicationBase(T::handle())) - {} - - ~PublisherUORB() - { - delete _uorb_pub; - }; - - /** Publishes msg - * @param msg the message which is published to the topic - */ - int publish(const T &msg) - { - _uorb_pub->update((void *) & (msg.data())); - return 0; - } - - /** - * Empty callback for list traversal - */ - void update() {} ; -private: - uORB::PublicationBase *_uorb_pub; /**< Handle to the publisher */ - -}; -#endif -} diff --git a/src/platforms/px4_spi.h b/src/platforms/px4_spi.h deleted file mode 100644 index 6936ccfd28..0000000000 --- a/src/platforms/px4_spi.h +++ /dev/null @@ -1,33 +0,0 @@ -#pragma once - -#ifdef __PX4_NUTTX -#include <nuttx/config.h> -#include <nuttx/spi/spi.h> -#elif defined(__PX4_POSIX) -enum spi_dev_e { - SPIDEV_NONE = 0, /* Not a valid value */ - SPIDEV_MMCSD, /* Select SPI MMC/SD device */ - SPIDEV_FLASH, /* Select SPI FLASH device */ - SPIDEV_ETHERNET, /* Select SPI ethernet device */ - SPIDEV_DISPLAY, /* Select SPI LCD/OLED display device */ - SPIDEV_WIRELESS, /* Select SPI Wireless device */ - SPIDEV_TOUCHSCREEN, /* Select SPI touchscreen device */ - SPIDEV_EXPANDER, /* Select SPI I/O expander device */ - SPIDEV_MUX, /* Select SPI multiplexer device */ - SPIDEV_AUDIO_DATA, /* Select SPI audio codec device data port */ - SPIDEV_AUDIO_CTRL /* Select SPI audio codec device control port */ -}; - -/* Certain SPI devices may required different clocking modes */ - -enum spi_mode_e { - SPIDEV_MODE0 = 0, /* CPOL=0 CHPHA=0 */ - SPIDEV_MODE1, /* CPOL=0 CHPHA=1 */ - SPIDEV_MODE2, /* CPOL=1 CHPHA=0 */ - SPIDEV_MODE3 /* CPOL=1 CHPHA=1 */ -}; -struct spi_dev_s { - int unused; -}; -#else -#endif diff --git a/src/platforms/px4_subscriber.h b/src/platforms/px4_subscriber.h deleted file mode 100644 index 004d63a124..0000000000 --- a/src/platforms/px4_subscriber.h +++ /dev/null @@ -1,296 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2014 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file px4_subscriber.h - * - * PX4 Subscriber API, implements subscribing to messages from a nodehandle - */ -#pragma once - -#ifndef CONFIG_ARCH_BOARD_SIM -#include <functional> -#include <type_traits> -#endif - -#if defined(__PX4_ROS) -/* includes when building for ros */ -#include "ros/ros.h" -#else -/* includes when building for NuttX */ -#include <uORB/Subscription.hpp> -#include <containers/List.hpp> -#include "px4_nodehandle.h" -#endif - -namespace px4 -{ - -/** - * Untemplated subscriber base class - * */ -class __EXPORT SubscriberBase -{ -public: - SubscriberBase() {} - virtual ~SubscriberBase() {} - -}; - -/** - * Subscriber class which is used by nodehandle - */ -template<typename T> -class __EXPORT Subscriber : - public SubscriberBase -{ -public: - Subscriber() : - SubscriberBase(), - _msg_current() - {} - - virtual ~Subscriber() {} - - /* Accessors*/ - /** - * Get the last message value - */ - virtual T &get() {return _msg_current;} - - /** - * Get the last native message value - */ - virtual decltype(((T *)nullptr)->data()) data() - { - return _msg_current.data(); - } - -protected: - T _msg_current; /**< Current Message value */ -}; - -#if defined(__PX4_ROS) -/** - * Subscriber class that is templated with the ros n message type - */ -template<typename T> -class SubscriberROS : - public Subscriber<T> -{ -public: - /** - * Construct Subscriber without a callback function - */ - SubscriberROS(ros::NodeHandle *rnh) : - px4::Subscriber<T>(), - _cbf(NULL), - _ros_sub(rnh->subscribe(T::handle(), kQueueSizeDefault, &SubscriberROS<T>::callback, this)) - {} - - /** - * Construct Subscriber by providing a callback function - */ - SubscriberROS(ros::NodeHandle *rnh, std::function<void(const T &)> cbf) : - _cbf(cbf), - _ros_sub(rnh->subscribe(T::handle(), kQueueSizeDefault, &SubscriberROS<T>::callback, this)) - {} - - virtual ~SubscriberROS() {} - -protected: - static const uint32_t kQueueSizeDefault = 1; /**< Size of queue for ROS */ - - /** - * Called on topic update, saves the current message and then calls the provided callback function - * needs to use the native type as it is called by ROS - */ - void callback(const typename std::remove_reference < decltype(((T *)nullptr)->data()) >::type &msg) - { - /* Store data */ - this->_msg_current.data() = msg; - - /* Call callback */ - if (_cbf != NULL) { - _cbf(this->get()); - } - - } - - ros::Subscriber _ros_sub; /**< Handle to ros subscriber */ - std::function<void(const T &)> _cbf; /**< Callback that the user provided on the subscription */ - -}; - -#else // Building for NuttX -/** - * Because we maintain a list of subscribers we need a node class - */ -class __EXPORT SubscriberNode : - public ListNode<SubscriberNode *> -{ -public: - SubscriberNode(unsigned interval) : - ListNode(), - _interval(interval) - {} - - virtual ~SubscriberNode() {} - - virtual void update() = 0; - - virtual int getUORBHandle() = 0; - - unsigned get_interval() { return _interval; } - -protected: - unsigned _interval; - -}; - -/** - * Subscriber class that is templated with the uorb subscription message type - */ -template<typename T> -class __EXPORT SubscriberUORB : - public Subscriber<T>, - public SubscriberNode -{ -public: - - /** - * Construct SubscriberUORB by providing orb meta data without callback - * @param interval Minimal interval between calls to callback - */ - SubscriberUORB(unsigned interval) : - SubscriberNode(interval), - _uorb_sub(new uORB::SubscriptionBase(T::handle(), interval)) - {} - - virtual ~SubscriberUORB() - { - delete _uorb_sub; - }; - - /** - * Update Subscription - * Invoked by the list traversal in NodeHandle::spinOnce - */ - virtual void update() - { - if (!_uorb_sub->updated()) { - /* Topic not updated, do not call callback */ - return; - } - - _uorb_sub->update(get_void_ptr()); - }; - - /* Accessors*/ - int getUORBHandle() { return _uorb_sub->getHandle(); } - -protected: - uORB::SubscriptionBase *_uorb_sub; /**< Handle to the subscription */ - -#ifndef CONFIG_ARCH_BOARD_SIM - typename std::remove_reference < decltype(((T *)nullptr)->data()) >::type getUORBData() - { - return (typename std::remove_reference < decltype(((T *)nullptr)->data()) >::type) * _uorb_sub; - } -#endif - - /** - * Get void pointer to last message value - */ - void *get_void_ptr() { return (void *) & (this->_msg_current.data()); } - -}; - -//XXX reduce to one class with overloaded constructor? -template<typename T> -class __EXPORT SubscriberUORBCallback : - public SubscriberUORB<T> -{ -public: - /** - * Construct SubscriberUORBCallback by providing orb meta data - * @param cbf Callback, executed on receiving a new message - * @param interval Minimal interval between calls to callback - */ - SubscriberUORBCallback(unsigned interval -#ifndef CONFIG_ARCH_BOARD_SIM - , std::function<void(const T &)> cbf) -#else - ) -#endif - : - SubscriberUORB<T>(interval), - _cbf(cbf) - {} - - virtual ~SubscriberUORBCallback() {} - - /** - * Update Subscription - * Invoked by the list traversal in NodeHandle::spinOnce - * If new data is available the callback is called - */ - virtual void update() - { - if (!this->_uorb_sub->updated()) { - /* Topic not updated, do not call callback */ - return; - } - - /* get latest data */ - this->_uorb_sub->update(this->get_void_ptr()); - - - /* Check if there is a callback */ - if (_cbf == nullptr) { - return; - } - - /* Call callback which performs actions based on this data */ - _cbf(Subscriber<T>::get()); - - }; - -protected: -#ifndef CONFIG_ARCH_BOARD_SIM - std::function<void(const T &)> _cbf; /**< Callback that the user provided on the subscription */ -#endif -}; -#endif - -} diff --git a/src/platforms/px4_tasks.h b/src/platforms/px4_tasks.h index 99822e764a..27dc1f3278 100644 --- a/src/platforms/px4_tasks.h +++ b/src/platforms/px4_tasks.h @@ -44,11 +44,7 @@ #include <stdbool.h> -#ifdef __PX4_ROS - -#error "PX4 tasks not supported in ROS" - -#elif defined(__PX4_NUTTX) +#if defined(__PX4_NUTTX) typedef int px4_task_t; #include <sys/prctl.h> diff --git a/src/platforms/px4_workqueue.h b/src/platforms/px4_workqueue.h index 3e3170f2de..b4fa7ad1a3 100644 --- a/src/platforms/px4_workqueue.h +++ b/src/platforms/px4_workqueue.h @@ -35,9 +35,7 @@ #pragma once -#if defined(__PX4_ROS) -#error "Work queue not supported on ROS" -#elif defined(__PX4_NUTTX) +#if defined(__PX4_NUTTX) #include <nuttx/arch.h> #include <nuttx/wqueue.h> #include <nuttx/clock.h> diff --git a/src/platforms/ros/eigen_math.h b/src/platforms/ros/eigen_math.h deleted file mode 100755 index c7271c1575..0000000000 --- a/src/platforms/ros/eigen_math.h +++ /dev/null @@ -1,19 +0,0 @@ -/* - * eigen_math.h - * - * Created on: Aug 25, 2014 - * Author: roman - */ - -#ifndef EIGEN_MATH_H_ -#define EIGEN_MATH_H_ - - -struct eigen_matrix_instance { - int numRows; - int numCols; - float *pData; -}; - - -#endif /* EIGEN_MATH_H_ */ diff --git a/src/platforms/ros/nodes/README.md b/src/platforms/ros/nodes/README.md deleted file mode 100644 index aafc647ff1..0000000000 --- a/src/platforms/ros/nodes/README.md +++ /dev/null @@ -1,22 +0,0 @@ -# PX4 Nodes - -This directory contains several small ROS nodes which are intended to run alongside the PX4 multi-platform nodes in -ROS. They act as a bridge between the PX4 specific topics and the ROS topics. - -## Joystick Input - -You will need to install the ros joystick packages -See http://wiki.ros.org/joy/Tutorials/ConfiguringALinuxJoystick - -### Arch Linux -```sh -yaourt -Sy ros-indigo-joystick-drivers --noconfirm -``` -check joystick -```sh -ls /dev/input/ -ls -l /dev/input/js0 -``` -(replace 0 by the number you find with the first command) - -make sure the joystick is accessible by the `input` group and that your user is in the `input` group diff --git a/src/platforms/ros/nodes/attitude_estimator/attitude_estimator.cpp b/src/platforms/ros/nodes/attitude_estimator/attitude_estimator.cpp deleted file mode 100644 index 92be9f3adc..0000000000 --- a/src/platforms/ros/nodes/attitude_estimator/attitude_estimator.cpp +++ /dev/null @@ -1,124 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2014 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file att_estimator.cpp - * - * @author Thomas Gubler <thomasgubler@gmail.com> - * @author Roman Bapst <romanbapst@yahoo.de> -*/ - -#include "attitude_estimator.h" - -#include <px4/vehicle_attitude.h> -#include <mathlib/mathlib.h> -#include <platforms/px4_defines.h> -#include <platforms/px4_middleware.h> - -AttitudeEstimator::AttitudeEstimator() : - _n(), - // _sub_modelstates(_n.subscribe("/gazebo/model_states", 1, &AttitudeEstimator::ModelStatesCallback, this)), - _vehicle_attitude_pub(_n.advertise<px4::vehicle_attitude>("vehicle_attitude", 1)) -{ - std::string vehicle_model; - _n.param("vehicle_model", vehicle_model, std::string("iris")); - _sub_imu = _n.subscribe("/" + vehicle_model + "/imu", 1, &AttitudeEstimator::ImuCallback, this); -} - -void AttitudeEstimator::ModelStatesCallback(const gazebo_msgs::ModelStatesConstPtr &msg) -{ - px4::vehicle_attitude msg_v_att; - - /* Fill px4 attitude topic with contents from modelstates topic */ - - /* Convert quaternion to rotation matrix */ - math::Quaternion quat; - //XXX: search for ardrone or other (other than 'plane') vehicle here - int index = 1; - quat(0) = (float)msg->pose[index].orientation.w; - quat(1) = (float)msg->pose[index].orientation.x; - quat(2) = (float) - msg->pose[index].orientation.y; - quat(3) = (float) - msg->pose[index].orientation.z; - - msg_v_att.q[0] = quat(0); - msg_v_att.q[1] = quat(1); - msg_v_att.q[2] = quat(2); - msg_v_att.q[3] = quat(3); - - //XXX this is in inertial frame - // msg_v_att.rollspeed = (float)msg->twist[index].angular.x; - // msg_v_att.pitchspeed = -(float)msg->twist[index].angular.y; - // msg_v_att.yawspeed = -(float)msg->twist[index].angular.z; - - msg_v_att.timestamp = px4::get_time_micros(); - _vehicle_attitude_pub.publish(msg_v_att); -} - -void AttitudeEstimator::ImuCallback(const sensor_msgs::ImuConstPtr &msg) -{ - px4::vehicle_attitude msg_v_att; - - /* Fill px4 attitude topic with contents from modelstates topic */ - - /* Convert quaternion to rotation matrix */ - math::Quaternion quat; - //XXX: search for ardrone or other (other than 'plane') vehicle here - int index = 1; - quat(0) = (float)msg->orientation.w; - quat(1) = (float)msg->orientation.x; - quat(2) = (float) - msg->orientation.y; - quat(3) = (float) - msg->orientation.z; - - msg_v_att.q[0] = quat(0); - msg_v_att.q[1] = quat(1); - msg_v_att.q[2] = quat(2); - msg_v_att.q[3] = quat(3); - - msg_v_att.rollspeed = (float)msg->angular_velocity.x; - msg_v_att.pitchspeed = -(float)msg->angular_velocity.y; - msg_v_att.yawspeed = -(float)msg->angular_velocity.z; - - msg_v_att.timestamp = px4::get_time_micros(); - _vehicle_attitude_pub.publish(msg_v_att); -} - - -int main(int argc, char **argv) -{ - ros::init(argc, argv, "attitude_estimator"); - AttitudeEstimator m; - - ros::spin(); - - return 0; -} diff --git a/src/platforms/ros/nodes/attitude_estimator/attitude_estimator.h b/src/platforms/ros/nodes/attitude_estimator/attitude_estimator.h deleted file mode 100644 index a31934740b..0000000000 --- a/src/platforms/ros/nodes/attitude_estimator/attitude_estimator.h +++ /dev/null @@ -1,64 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2014 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file att_estimator.h - * Dummy attitude estimator that forwards attitude from gazebo to px4 topic - * - * @author Thomas Gubler <thomasgubler@gmail.com> -*/ - -#pragma once - -#include "ros/ros.h" -#include <gazebo_msgs/ModelStates.h> -#include <sensor_msgs/Imu.h> - -class AttitudeEstimator -{ -public: - AttitudeEstimator(); - - ~AttitudeEstimator() {} - -protected: - void ModelStatesCallback(const gazebo_msgs::ModelStatesConstPtr &msg); - void ImuCallback(const sensor_msgs::ImuConstPtr &msg); - - ros::NodeHandle _n; - ros::Subscriber _sub_modelstates; - ros::Subscriber _sub_imu; - ros::Publisher _vehicle_attitude_pub; - - -}; diff --git a/src/platforms/ros/nodes/commander/commander.cpp b/src/platforms/ros/nodes/commander/commander.cpp deleted file mode 100644 index d2b4acc263..0000000000 --- a/src/platforms/ros/nodes/commander/commander.cpp +++ /dev/null @@ -1,240 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2014 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file commander.cpp - * Dummy commander node that publishes the various status topics - * - * @author Thomas Gubler <thomasgubler@gmail.com> -*/ - -#include "commander.h" - -#include <platforms/px4_middleware.h> - -Commander::Commander() : - _n(), - _man_ctrl_sp_sub(_n.subscribe("manual_control_setpoint", 10, &Commander::ManualControlInputCallback, this)), - _offboard_control_mode_sub(_n.subscribe("offboard_control_mode", 10, &Commander::OffboardControlModeCallback, this)), - _vehicle_control_mode_pub(_n.advertise<px4::vehicle_control_mode>("vehicle_control_mode", 10)), - _actuator_armed_pub(_n.advertise<px4::actuator_armed>("actuator_armed", 10)), - _vehicle_status_pub(_n.advertise<px4::vehicle_status>("vehicle_status", 10)), - _commander_state_pub(_n.advertise<px4::commander_state>("commander_state", 10)), - _parameter_update_pub(_n.advertise<px4::parameter_update>("parameter_update", 10)), - _msg_parameter_update(), - _msg_actuator_armed(), - _msg_vehicle_control_mode(), - _msg_vehicle_status(), - _msg_offboard_control_mode(), - _got_manual_control(false) -{ - - /* Default to offboard control: when no joystick is connected offboard control should just work */ - -} - -void Commander::ManualControlInputCallback(const px4::manual_control_setpointConstPtr &msg) -{ - _got_manual_control = true; - - /* fill vehicle control mode based on (faked) stick positions*/ - EvalSwitches(msg, _msg_vehicle_status, _msg_commander_state, _msg_vehicle_control_mode); - _msg_vehicle_control_mode.timestamp = px4::get_time_micros(); - - /* fill actuator armed */ - float arm_th = 0.95; - _msg_actuator_armed.timestamp = px4::get_time_micros(); - - if (_msg_actuator_armed.armed) { - /* Check for disarm */ - if (msg->r < -arm_th && msg->z < (1 - arm_th)) { - _msg_actuator_armed.armed = false; - _msg_vehicle_control_mode.flag_armed = false; - _msg_vehicle_status.arming_state = _msg_vehicle_status.ARMING_STATE_STANDBY; - } - - } else { - /* Check for arm */ - if (msg->r > arm_th && msg->z < (1 - arm_th)) { - _msg_actuator_armed.armed = true; - _msg_vehicle_control_mode.flag_armed = true; - _msg_vehicle_status.arming_state = _msg_vehicle_status.ARMING_STATE_ARMED; - } - } - - /* fill vehicle status */ - _msg_vehicle_status.timestamp = px4::get_time_micros(); - _msg_vehicle_status.hil_state = _msg_vehicle_status.HIL_STATE_OFF; - _msg_vehicle_status.is_rotary_wing = true; - - _vehicle_control_mode_pub.publish(_msg_vehicle_control_mode); - _actuator_armed_pub.publish(_msg_actuator_armed); - _vehicle_status_pub.publish(_msg_vehicle_status); - _commander_state_pub.publish(_msg_commander_state); - - /* Fill parameter update */ - if (px4::get_time_micros() - _msg_parameter_update.timestamp > 1e6) { - _msg_parameter_update.timestamp = px4::get_time_micros(); - _parameter_update_pub.publish(_msg_parameter_update); - } -} - -void Commander::SetOffboardControl(const px4::offboard_control_mode &msg_offboard_control_mode, - px4::vehicle_control_mode &msg_vehicle_control_mode) -{ - msg_vehicle_control_mode.flag_control_manual_enabled = false; - msg_vehicle_control_mode.flag_control_offboard_enabled = true; - msg_vehicle_control_mode.flag_control_auto_enabled = false; - - msg_vehicle_control_mode.flag_control_rates_enabled = !msg_offboard_control_mode.ignore_bodyrate || - !msg_offboard_control_mode.ignore_attitude || - !msg_offboard_control_mode.ignore_position || - !msg_offboard_control_mode.ignore_velocity || - !msg_offboard_control_mode.ignore_acceleration_force; - - msg_vehicle_control_mode.flag_control_attitude_enabled = !msg_offboard_control_mode.ignore_attitude || - !msg_offboard_control_mode.ignore_position || - !msg_offboard_control_mode.ignore_velocity || - !msg_offboard_control_mode.ignore_acceleration_force; - - - msg_vehicle_control_mode.flag_control_velocity_enabled = !msg_offboard_control_mode.ignore_velocity || - !msg_offboard_control_mode.ignore_position; - - msg_vehicle_control_mode.flag_control_climb_rate_enabled = !msg_offboard_control_mode.ignore_velocity || - !msg_offboard_control_mode.ignore_position; - - msg_vehicle_control_mode.flag_control_position_enabled = !msg_offboard_control_mode.ignore_position; - - msg_vehicle_control_mode.flag_control_altitude_enabled = !msg_offboard_control_mode.ignore_velocity || - !msg_offboard_control_mode.ignore_position; -} - -void Commander::EvalSwitches(const px4::manual_control_setpointConstPtr &msg, - px4::vehicle_status &msg_vehicle_status, - px4::commander_state &msg_commander_state, - px4::vehicle_control_mode &msg_vehicle_control_mode) -{ - // XXX this is a minimal implementation. If more advanced functionalities are - // needed consider a full port of the commander - - - if (msg->offboard_switch == px4::manual_control_setpoint::SWITCH_POS_ON) { - SetOffboardControl(_msg_offboard_control_mode, msg_vehicle_control_mode); - return; - } - - msg_vehicle_control_mode.flag_control_offboard_enabled = false; - - switch (msg->mode_switch) { - case px4::manual_control_setpoint::SWITCH_POS_NONE: - ROS_WARN("Joystick button mapping error, main mode not set"); - break; - - case px4::manual_control_setpoint::SWITCH_POS_OFF: // MANUAL - msg_commander_state.main_state = msg_commander_state.MAIN_STATE_MANUAL; - msg_vehicle_status.nav_state = msg_vehicle_status.NAVIGATION_STATE_MANUAL; - msg_vehicle_control_mode.flag_control_manual_enabled = true; - msg_vehicle_control_mode.flag_control_rates_enabled = true; - msg_vehicle_control_mode.flag_control_attitude_enabled = true; - msg_vehicle_control_mode.flag_control_altitude_enabled = false; - msg_vehicle_control_mode.flag_control_climb_rate_enabled = false; - msg_vehicle_control_mode.flag_control_position_enabled = false; - msg_vehicle_control_mode.flag_control_velocity_enabled = false; - - break; - - case px4::manual_control_setpoint::SWITCH_POS_MIDDLE: // ASSIST - if (msg->posctl_switch == px4::manual_control_setpoint::SWITCH_POS_ON) { - msg_commander_state.main_state = msg_commander_state.MAIN_STATE_POSCTL; - msg_vehicle_status.nav_state = msg_vehicle_status.NAVIGATION_STATE_POSCTL; - msg_vehicle_control_mode.flag_control_manual_enabled = true; - msg_vehicle_control_mode.flag_control_rates_enabled = true; - msg_vehicle_control_mode.flag_control_attitude_enabled = true; - msg_vehicle_control_mode.flag_control_altitude_enabled = true; - msg_vehicle_control_mode.flag_control_climb_rate_enabled = true; - msg_vehicle_control_mode.flag_control_position_enabled = true; - msg_vehicle_control_mode.flag_control_velocity_enabled = true; - - } else { - msg_commander_state.main_state = msg_commander_state.MAIN_STATE_ALTCTL; - msg_vehicle_status.nav_state = msg_vehicle_status.NAVIGATION_STATE_ALTCTL; - msg_vehicle_control_mode.flag_control_manual_enabled = true; - msg_vehicle_control_mode.flag_control_rates_enabled = true; - msg_vehicle_control_mode.flag_control_attitude_enabled = true; - msg_vehicle_control_mode.flag_control_altitude_enabled = true; - msg_vehicle_control_mode.flag_control_climb_rate_enabled = true; - msg_vehicle_control_mode.flag_control_position_enabled = false; - msg_vehicle_control_mode.flag_control_velocity_enabled = false; - } - - break; - } - -} - -void Commander::OffboardControlModeCallback(const px4::offboard_control_modeConstPtr &msg) -{ - _msg_offboard_control_mode = *msg; - - /* Force system into offboard control mode */ - if (!_got_manual_control) { - SetOffboardControl(_msg_offboard_control_mode, _msg_vehicle_control_mode); - - _msg_vehicle_status.timestamp = px4::get_time_micros(); - _msg_vehicle_status.hil_state = _msg_vehicle_status.HIL_STATE_OFF; - _msg_vehicle_status.is_rotary_wing = true; - _msg_vehicle_status.arming_state = _msg_vehicle_status.ARMING_STATE_ARMED; - - - _msg_actuator_armed.armed = true; - _msg_actuator_armed.timestamp = px4::get_time_micros(); - - _msg_vehicle_control_mode.timestamp = px4::get_time_micros(); - _msg_vehicle_control_mode.flag_armed = true; - - - _vehicle_control_mode_pub.publish(_msg_vehicle_control_mode); - _actuator_armed_pub.publish(_msg_actuator_armed); - _vehicle_status_pub.publish(_msg_vehicle_status); - _commander_state_pub.publish(_msg_vehicle_status); - } -} - -int main(int argc, char **argv) -{ - ros::init(argc, argv, "commander"); - Commander m; - ros::spin(); - return 0; -} diff --git a/src/platforms/ros/nodes/commander/commander.h b/src/platforms/ros/nodes/commander/commander.h deleted file mode 100644 index 760e35d580..0000000000 --- a/src/platforms/ros/nodes/commander/commander.h +++ /dev/null @@ -1,102 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2014 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file commander.h - * Dummy commander node that publishes the various status topics - * - * @author Thomas Gubler <thomasgubler@gmail.com> -*/ - -#pragma once - -#include "ros/ros.h" -#include <px4/manual_control_setpoint.h> -#include <px4/vehicle_control_mode.h> -#include <px4/vehicle_status.h> -#include <px4/commander_state.h> -#include <px4/parameter_update.h> -#include <px4/actuator_armed.h> -#include <px4/offboard_control_mode.h> - -class Commander -{ -public: - Commander(); - - ~Commander() {} - -protected: - /** - * Based on manual control input the status will be set - */ - void ManualControlInputCallback(const px4::manual_control_setpointConstPtr &msg); - - /** - * Stores the offboard control mode - */ - void OffboardControlModeCallback(const px4::offboard_control_modeConstPtr &msg); - - /** - * Set control mode flags based on stick positions (equiv to code in px4 commander) - */ - void EvalSwitches(const px4::manual_control_setpointConstPtr &msg, - px4::vehicle_status &msg_vehicle_status, - px4::commander_state &msg_commander_state, - px4::vehicle_control_mode &msg_vehicle_control_mode); - - /** - * Sets offboard control flags in msg_vehicle_control_mode - */ - void SetOffboardControl(const px4::offboard_control_mode &msg_offboard_control_mode, - px4::vehicle_control_mode &msg_vehicle_control_mode); - - ros::NodeHandle _n; - ros::Subscriber _man_ctrl_sp_sub; - ros::Subscriber _offboard_control_mode_sub; - ros::Publisher _vehicle_control_mode_pub; - ros::Publisher _actuator_armed_pub; - ros::Publisher _vehicle_status_pub; - ros::Publisher _commander_state_pub; - ros::Publisher _parameter_update_pub; - - px4::parameter_update _msg_parameter_update; - px4::actuator_armed _msg_actuator_armed; - px4::vehicle_control_mode _msg_vehicle_control_mode; - px4::vehicle_status _msg_vehicle_status; - px4::commander_state _msg_commander_state; - px4::offboard_control_mode _msg_offboard_control_mode; - - bool _got_manual_control; - -}; diff --git a/src/platforms/ros/nodes/demo_offboard_attitude_setpoints/demo_offboard_attitude_setpoints.cpp b/src/platforms/ros/nodes/demo_offboard_attitude_setpoints/demo_offboard_attitude_setpoints.cpp deleted file mode 100644 index 89354964e4..0000000000 --- a/src/platforms/ros/nodes/demo_offboard_attitude_setpoints/demo_offboard_attitude_setpoints.cpp +++ /dev/null @@ -1,88 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2015 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file demo_offboard_position_Setpoints.cpp - * - * Demo for sending offboard position setpoints to mavros to show offboard position control in SITL - * - * @author Thomas Gubler <thomasgubler@gmail.com> -*/ - -#include "demo_offboard_attitude_setpoints.h" - -#include <platforms/px4_middleware.h> -#include <geometry_msgs/PoseStamped.h> -#include <std_msgs/Float64.h> -#include <math.h> -#include <tf/transform_datatypes.h> - -DemoOffboardAttitudeSetpoints::DemoOffboardAttitudeSetpoints() : - _n(), - _attitude_sp_pub(_n.advertise<geometry_msgs::PoseStamped>("mavros/setpoint_attitude/attitude", 1)), - _thrust_sp_pub(_n.advertise<std_msgs::Float64>("mavros/setpoint_attitude/att_throttle", 1)) -{ -} - - -int DemoOffboardAttitudeSetpoints::main() -{ - px4::Rate loop_rate(10); - - while (ros::ok()) { - loop_rate.sleep(); - ros::spinOnce(); - - /* Publish example offboard attitude setpoint */ - geometry_msgs::PoseStamped pose; - tf::Quaternion q = tf::createQuaternionFromRPY(0.0, 0.1 * (sinf(0.5 * (float)px4::get_time_micros() / 1000000.0f)), - 0.0); - quaternionTFToMsg(q, pose.pose.orientation); - - _attitude_sp_pub.publish(pose); - - std_msgs::Float64 thrust; - thrust.data = 0.4f + 0.25 * (sinf((float)px4::get_time_micros() / - 1000000.0f)); // just some example throttle input that makes the quad 'jump' - _thrust_sp_pub.publish(thrust); - } - - return 0; -} - -int main(int argc, char **argv) -{ - ros::init(argc, argv, "demo_offboard_position_setpoints"); - DemoOffboardAttitudeSetpoints d; - return d.main(); -} diff --git a/src/platforms/ros/nodes/demo_offboard_attitude_setpoints/demo_offboard_attitude_setpoints.h b/src/platforms/ros/nodes/demo_offboard_attitude_setpoints/demo_offboard_attitude_setpoints.h deleted file mode 100644 index f36d6d50b8..0000000000 --- a/src/platforms/ros/nodes/demo_offboard_attitude_setpoints/demo_offboard_attitude_setpoints.h +++ /dev/null @@ -1,60 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2015 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file demo_offboard_attitude_Setpoints.h - * - * Demo for sending offboard position setpoints to mavros to show offboard position control in SITL - * - * @author Thomas Gubler <thomasgubler@gmail.com> -*/ - -#pragma once - -#include "ros/ros.h" -#include <px4/manual_control_setpoint.h> - -class DemoOffboardAttitudeSetpoints -{ -public: - DemoOffboardAttitudeSetpoints(); - - ~DemoOffboardAttitudeSetpoints() {} - - int main(); - -protected: - ros::NodeHandle _n; - ros::Publisher _attitude_sp_pub; - ros::Publisher _thrust_sp_pub; -}; diff --git a/src/platforms/ros/nodes/demo_offboard_position_setpoints/demo_offboard_position_setpoints.cpp b/src/platforms/ros/nodes/demo_offboard_position_setpoints/demo_offboard_position_setpoints.cpp deleted file mode 100644 index 8a626f255e..0000000000 --- a/src/platforms/ros/nodes/demo_offboard_position_setpoints/demo_offboard_position_setpoints.cpp +++ /dev/null @@ -1,78 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2015 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file demo_offboard_position_Setpoints.cpp - * - * Demo for sending offboard position setpoints to mavros to show offboard position control in SITL - * - * @author Thomas Gubler <thomasgubler@gmail.com> -*/ - -#include "demo_offboard_position_setpoints.h" - -#include <platforms/px4_middleware.h> -#include <geometry_msgs/PoseStamped.h> - -DemoOffboardPositionSetpoints::DemoOffboardPositionSetpoints() : - _n(), - _local_position_sp_pub(_n.advertise<geometry_msgs::PoseStamped>("mavros/setpoint_position/local", 1)) -{ -} - - -int DemoOffboardPositionSetpoints::main() -{ - px4::Rate loop_rate(10); - - while (ros::ok()) { - loop_rate.sleep(); - ros::spinOnce(); - - /* Publish example offboard position setpoint */ - geometry_msgs::PoseStamped pose; - pose.pose.position.x = 0; - pose.pose.position.y = 0; - pose.pose.position.z = 1; - _local_position_sp_pub.publish(pose); - } - - return 0; -} - -int main(int argc, char **argv) -{ - ros::init(argc, argv, "demo_offboard_position_setpoints"); - DemoOffboardPositionSetpoints d; - return d.main(); -} diff --git a/src/platforms/ros/nodes/demo_offboard_position_setpoints/demo_offboard_position_setpoints.h b/src/platforms/ros/nodes/demo_offboard_position_setpoints/demo_offboard_position_setpoints.h deleted file mode 100644 index 8680e427a9..0000000000 --- a/src/platforms/ros/nodes/demo_offboard_position_setpoints/demo_offboard_position_setpoints.h +++ /dev/null @@ -1,59 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2015 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file demo_offboard_position_Setpoints.h - * - * Demo for sending offboard position setpoints to mavros to show offboard position control in SITL - * - * @author Thomas Gubler <thomasgubler@gmail.com> -*/ - -#pragma once - -#include "ros/ros.h" -#include <px4/manual_control_setpoint.h> - -class DemoOffboardPositionSetpoints -{ -public: - DemoOffboardPositionSetpoints(); - - ~DemoOffboardPositionSetpoints() {} - - int main(); - -protected: - ros::NodeHandle _n; - ros::Publisher _local_position_sp_pub; -}; diff --git a/src/platforms/ros/nodes/manual_input/manual_input.cpp b/src/platforms/ros/nodes/manual_input/manual_input.cpp deleted file mode 100644 index fc8db220c3..0000000000 --- a/src/platforms/ros/nodes/manual_input/manual_input.cpp +++ /dev/null @@ -1,174 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2014 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file manual_input.cpp - * Reads from the ros joystick topic and publishes to the px4 manual control input topic. - * - * @author Thomas Gubler <thomasgubler@gmail.com> -*/ - -#include "manual_input.h" - -#include <platforms/px4_middleware.h> - -ManualInput::ManualInput() : - _n(), - _joy_sub(_n.subscribe("joy", 1, &ManualInput::JoyCallback, this)), - _man_ctrl_sp_pub(_n.advertise<px4::manual_control_setpoint>("manual_control_setpoint", 1)), - _buttons_state(), - _msg_mc_sp() -{ - double dz_default = 0.2; - /* Load parameters, default values work for Microsoft XBox Controller */ - _n.param("map_x", _param_axes_map[0], 4); - _n.param("scale_x", _param_axes_scale[0], 1.0); - _n.param("off_x", _param_axes_offset[0], 0.0); - _n.param("dz_x", _param_axes_dz[0], dz_default); - - _n.param("map_y", _param_axes_map[1], 3); - _n.param("scale_y", _param_axes_scale[1], -1.0); - _n.param("off_y", _param_axes_offset[1], 0.0); - _n.param("dz_y", _param_axes_dz[1], dz_default); - - _n.param("map_z", _param_axes_map[2], 2); - _n.param("scale_z", _param_axes_scale[2], -0.5); - _n.param("off_z", _param_axes_offset[2], -1.0); - _n.param("dz_z", _param_axes_dz[2], 0.0); - - _n.param("map_r", _param_axes_map[3], 0); - _n.param("scale_r", _param_axes_scale[3], -1.0); - _n.param("off_r", _param_axes_offset[3], 0.0); - _n.param("dz_r", _param_axes_dz[3], dz_default); - - _n.param("map_manual", _param_buttons_map[0], 0); - _n.param("map_altctl", _param_buttons_map[1], 1); - _n.param("map_posctl", _param_buttons_map[2], 2); - _n.param("map_auto_mission", _param_buttons_map[3], 3); - _n.param("map_auto_loiter", _param_buttons_map[4], 4); - _n.param("map_auto_rtl", _param_buttons_map[5], 5); - _n.param("map_offboard", _param_buttons_map[6], 6); - - /* Default to manual */ - _msg_mc_sp.mode_switch = px4::manual_control_setpoint::SWITCH_POS_OFF; - _msg_mc_sp.return_switch = px4::manual_control_setpoint::SWITCH_POS_OFF; - _msg_mc_sp.posctl_switch = px4::manual_control_setpoint::SWITCH_POS_OFF; - _msg_mc_sp.loiter_switch = px4::manual_control_setpoint::SWITCH_POS_OFF; - _msg_mc_sp.return_switch = px4::manual_control_setpoint::SWITCH_POS_OFF; - _msg_mc_sp.offboard_switch = px4::manual_control_setpoint::SWITCH_POS_OFF; - _msg_mc_sp.acro_switch = px4::manual_control_setpoint::SWITCH_POS_NONE; - -} - -void ManualInput::JoyCallback(const sensor_msgs::JoyConstPtr &msg) -{ - - /* Fill px4 manual control setpoint topic with contents from ros joystick */ - /* Map sticks to x, y, z, r */ - MapAxis(msg, _param_axes_map[0], _param_axes_scale[0], _param_axes_offset[0], _param_axes_dz[0], _msg_mc_sp.x); - MapAxis(msg, _param_axes_map[1], _param_axes_scale[1], _param_axes_offset[1], _param_axes_dz[1], _msg_mc_sp.y); - MapAxis(msg, _param_axes_map[2], _param_axes_scale[2], _param_axes_offset[2], _param_axes_dz[2], _msg_mc_sp.z); - MapAxis(msg, _param_axes_map[3], _param_axes_scale[3], _param_axes_offset[3], _param_axes_dz[3], _msg_mc_sp.r); - //ROS_INFO("x: %1.4f y: %1.4f z: %1.4f r: %1.4f", msg_mc_sp.x, msg_out.y, msg_out.z, msg_out.r); - - /* Map buttons to switches */ - MapButtons(msg, _msg_mc_sp); - - _msg_mc_sp.timestamp = px4::get_time_micros(); - - _man_ctrl_sp_pub.publish(_msg_mc_sp); -} - -void ManualInput::MapAxis(const sensor_msgs::JoyConstPtr &msg, int map_index, double scale, double offset, - double deadzone, float &out) -{ - double val = msg->axes[map_index]; - - if (val + offset > deadzone || val + offset < -deadzone) { - out = (float)((val + offset)) * scale; - - } else { - out = 0.0f; - } -} - -void ManualInput::MapButtons(const sensor_msgs::JoyConstPtr &msg, px4::manual_control_setpoint &msg_mc_sp) -{ - msg_mc_sp.acro_switch = px4::manual_control_setpoint::SWITCH_POS_NONE; - - if (_buttons_state[MAIN_STATE_MANUAL] != msg->buttons[_param_buttons_map[MAIN_STATE_MANUAL]] == true) { - msg_mc_sp.mode_switch = px4::manual_control_setpoint::SWITCH_POS_OFF; - msg_mc_sp.return_switch = px4::manual_control_setpoint::SWITCH_POS_OFF; - msg_mc_sp.posctl_switch = px4::manual_control_setpoint::SWITCH_POS_OFF; - msg_mc_sp.loiter_switch = px4::manual_control_setpoint::SWITCH_POS_OFF; - msg_mc_sp.return_switch = px4::manual_control_setpoint::SWITCH_POS_OFF; - msg_mc_sp.offboard_switch = px4::manual_control_setpoint::SWITCH_POS_OFF; - return; - - } else if (_buttons_state[MAIN_STATE_ALTCTL] != msg->buttons[_param_buttons_map[MAIN_STATE_ALTCTL]] == true) { - msg_mc_sp.mode_switch = px4::manual_control_setpoint::SWITCH_POS_MIDDLE; - msg_mc_sp.return_switch = px4::manual_control_setpoint::SWITCH_POS_OFF; - msg_mc_sp.posctl_switch = px4::manual_control_setpoint::SWITCH_POS_OFF; - msg_mc_sp.loiter_switch = px4::manual_control_setpoint::SWITCH_POS_OFF; - msg_mc_sp.return_switch = px4::manual_control_setpoint::SWITCH_POS_OFF; - msg_mc_sp.offboard_switch = px4::manual_control_setpoint::SWITCH_POS_OFF; - return; - - } else if (_buttons_state[MAIN_STATE_POSCTL] != msg->buttons[_param_buttons_map[MAIN_STATE_POSCTL]] == true) { - msg_mc_sp.mode_switch = px4::manual_control_setpoint::SWITCH_POS_MIDDLE; - msg_mc_sp.return_switch = px4::manual_control_setpoint::SWITCH_POS_OFF; - msg_mc_sp.posctl_switch = px4::manual_control_setpoint::SWITCH_POS_ON; - msg_mc_sp.loiter_switch = px4::manual_control_setpoint::SWITCH_POS_OFF; - msg_mc_sp.return_switch = px4::manual_control_setpoint::SWITCH_POS_OFF; - msg_mc_sp.offboard_switch = px4::manual_control_setpoint::SWITCH_POS_OFF; - return; - - } else if (_buttons_state[MAIN_STATE_OFFBOARD] != msg->buttons[_param_buttons_map[MAIN_STATE_OFFBOARD]] == true) { - msg_mc_sp.mode_switch = px4::manual_control_setpoint::SWITCH_POS_MIDDLE; - msg_mc_sp.return_switch = px4::manual_control_setpoint::SWITCH_POS_OFF; - msg_mc_sp.posctl_switch = px4::manual_control_setpoint::SWITCH_POS_ON; - msg_mc_sp.loiter_switch = px4::manual_control_setpoint::SWITCH_POS_OFF; - msg_mc_sp.return_switch = px4::manual_control_setpoint::SWITCH_POS_OFF; - msg_mc_sp.offboard_switch = px4::manual_control_setpoint::SWITCH_POS_ON; - return; - } - -} - -int main(int argc, char **argv) -{ - ros::init(argc, argv, "manual_input"); - ManualInput m; - ros::spin(); - return 0; -} diff --git a/src/platforms/ros/nodes/manual_input/manual_input.h b/src/platforms/ros/nodes/manual_input/manual_input.h deleted file mode 100644 index 238911af5d..0000000000 --- a/src/platforms/ros/nodes/manual_input/manual_input.h +++ /dev/null @@ -1,97 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2014 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file manual_input.h - * Reads from the ros joystick topic and publishes to the px4 manual control setpoint topic. - * - * @author Thomas Gubler <thomasgubler@gmail.com> -*/ - -#pragma once - -#include "ros/ros.h" -#include <px4/manual_control_setpoint.h> -#include <sensor_msgs/Joy.h> - -class ManualInput -{ -public: - ManualInput(); - - ~ManualInput() {} - -protected: - /** - * Takes ROS joystick message and converts/publishes to px4 manual control setpoint topic - */ - void JoyCallback(const sensor_msgs::JoyConstPtr &msg); - - /** - * Helper function to map and scale joystick axis - */ - void MapAxis(const sensor_msgs::JoyConstPtr &msg, int map_index, double scale, double offset, double deadzone, - float &out); - /** - * Helper function to map joystick buttons - */ - void MapButtons(const sensor_msgs::JoyConstPtr &msg, px4::manual_control_setpoint &msg_mc_sp); - - ros::NodeHandle _n; - ros::Subscriber _joy_sub; - ros::Publisher _man_ctrl_sp_pub; - - /* Parameters */ - enum MAIN_STATE { - MAIN_STATE_MANUAL = 0, - MAIN_STATE_ALTCTL, - MAIN_STATE_POSCTL, - MAIN_STATE_AUTO_MISSION, - MAIN_STATE_AUTO_LOITER, - MAIN_STATE_AUTO_RTL, - // MAIN_STATE_ACRO, - MAIN_STATE_OFFBOARD, - MAIN_STATE_MAX - }; - - int _param_buttons_map[MAIN_STATE_MAX]; /**< joystick button mapping, order according to MAIN_STATE */ - bool _buttons_state[MAIN_STATE_MAX]; /**< joystick button state of last iteration, - order according to MAIN_STATE */ - - int _param_axes_map[4]; - double _param_axes_scale[4]; - double _param_axes_offset[4]; - double _param_axes_dz[4]; - - px4::manual_control_setpoint _msg_mc_sp; -}; diff --git a/src/platforms/ros/nodes/mavlink/mavlink.cpp b/src/platforms/ros/nodes/mavlink/mavlink.cpp deleted file mode 100644 index 91e1785241..0000000000 --- a/src/platforms/ros/nodes/mavlink/mavlink.cpp +++ /dev/null @@ -1,305 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2015 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file mavlink.cpp - * Dummy mavlink node that interfaces to a mavros node via UDP - * This simulates the onboard mavlink app to some degree. It should be possible to - * send offboard setpoints via mavros to the SITL setup the same way as on the real system - * - * @author Thomas Gubler <thomasgubler@gmail.com> -*/ - -#include "mavlink.h" - -#include <platforms/px4_middleware.h> - -using namespace px4; - -Mavlink::Mavlink(std::string mavlink_fcu_url) : - _n(), - _v_att_sub(_n.subscribe("vehicle_attitude", 1, &Mavlink::VehicleAttitudeCallback, this)), - _v_local_pos_sub(_n.subscribe("vehicle_local_position", 1, &Mavlink::VehicleLocalPositionCallback, this)), - _v_att_sp_pub(_n.advertise<vehicle_attitude_setpoint>("vehicle_attitude_setpoint", 1)), - _pos_sp_triplet_pub(_n.advertise<position_setpoint_triplet>("position_setpoint_triplet", 1)), - _offboard_control_mode_pub(_n.advertise<offboard_control_mode>("offboard_control_mode", 1)) -{ - _link = mavconn::MAVConnInterface::open_url(mavlink_fcu_url); - _link->message_received.connect(boost::bind(&Mavlink::handle_msg, this, _1, _2, _3)); - _att_sp = {}; - _offboard_control_mode = {}; -} - -int main(int argc, char **argv) -{ - ros::init(argc, argv, "mavlink"); - ros::NodeHandle privateNh("~"); - std::string mavlink_fcu_url; - privateNh.param<std::string>("mavlink_fcu_url", mavlink_fcu_url, - std::string("udp://localhost:14565@localhost:14560")); - Mavlink m(mavlink_fcu_url); - ros::spin(); - return 0; -} - -void Mavlink::VehicleAttitudeCallback(const vehicle_attitudeConstPtr &msg) -{ - mavlink_message_t msg_m; - mavlink_msg_attitude_quaternion_pack_chan( - _link->get_system_id(), - _link->get_component_id(), - _link->get_channel(), - &msg_m, - get_time_micros() / 1000, - msg->q[0], - msg->q[1], - msg->q[2], - msg->q[3], - msg->rollspeed, - msg->pitchspeed, - msg->yawspeed); - _link->send_message(&msg_m); -} - -void Mavlink::VehicleLocalPositionCallback(const vehicle_local_positionConstPtr &msg) -{ - mavlink_message_t msg_m; - mavlink_msg_local_position_ned_pack_chan( - _link->get_system_id(), - _link->get_component_id(), - _link->get_channel(), - &msg_m, - get_time_micros() / 1000, - msg->x, - msg->y, - msg->z, - msg->vx, - msg->vy, - msg->vz); - _link->send_message(&msg_m); -} - -void Mavlink::handle_msg(const mavlink_message_t *mmsg, uint8_t sysid, uint8_t compid) -{ - (void)sysid; - (void)compid; - - switch (mmsg->msgid) { - case MAVLINK_MSG_ID_SET_ATTITUDE_TARGET: - handle_msg_set_attitude_target(mmsg); - break; - - case MAVLINK_MSG_ID_SET_POSITION_TARGET_LOCAL_NED: - handle_msg_set_position_target_local_ned(mmsg); - break; - - default: - break; - } - -} - -void Mavlink::handle_msg_set_attitude_target(const mavlink_message_t *mmsg) -{ - mavlink_set_attitude_target_t set_attitude_target; - mavlink_msg_set_attitude_target_decode(mmsg, &set_attitude_target); - - /* set correct ignore flags for thrust field: copy from mavlink message */ - _offboard_control_mode.ignore_thrust = (bool)(set_attitude_target.type_mask & (1 << 6)); - - /* - * if attitude or body rate have been used (not ignored) previously and this message only sends - * throttle and has the ignore bits set for attitude and rates don't change the flags for attitude and - * body rates to keep the controllers running - */ - bool ignore_bodyrate = (bool)(set_attitude_target.type_mask & 0x7); - bool ignore_attitude = (bool)(set_attitude_target.type_mask & (1 << 7)); - - if (ignore_bodyrate && ignore_attitude && !_offboard_control_mode.ignore_thrust) { - /* Message want's us to ignore everything except thrust: only ignore if previously ignored */ - _offboard_control_mode.ignore_bodyrate = ignore_bodyrate && _offboard_control_mode.ignore_bodyrate; - _offboard_control_mode.ignore_attitude = ignore_attitude && _offboard_control_mode.ignore_attitude; - - } else { - _offboard_control_mode.ignore_bodyrate = ignore_bodyrate; - _offboard_control_mode.ignore_attitude = ignore_attitude; - } - - _offboard_control_mode.ignore_position = true; - _offboard_control_mode.ignore_velocity = true; - _offboard_control_mode.ignore_acceleration_force = true; - - _offboard_control_mode.timestamp = get_time_micros(); - _offboard_control_mode_pub.publish(_offboard_control_mode); - - /* The real mavlink app has a ckeck at this location which makes sure that the attitude setpoint - * gets published only if in offboard mode. We leave that out for now. - */ - - _att_sp.timestamp = get_time_micros(); - - if (!ignore_attitude) { - mavlink_quaternion_to_euler(set_attitude_target.q, &_att_sp.roll_body, &_att_sp.pitch_body, - &_att_sp.yaw_body); - mavlink_quaternion_to_dcm(set_attitude_target.q, (float(*)[3])_att_sp.R_body.data()); - _att_sp.R_valid = true; - } - - - if (!_offboard_control_mode.ignore_thrust) { - _att_sp.thrust = set_attitude_target.thrust; - } - - if (!ignore_attitude) { - for (ssize_t i = 0; i < 4; i++) { - _att_sp.q_d[i] = set_attitude_target.q[i]; - } - - _att_sp.q_d_valid = true; - } - - _v_att_sp_pub.publish(_att_sp); - - - //XXX real mavlink publishes rate sp here - -} - -void Mavlink::handle_msg_set_position_target_local_ned(const mavlink_message_t *mmsg) -{ - - mavlink_set_position_target_local_ned_t set_position_target_local_ned; - mavlink_msg_set_position_target_local_ned_decode(mmsg, &set_position_target_local_ned); - - offboard_control_mode offboard_control_mode; - // memset(&offboard_control_mode, 0, sizeof(offboard_control_mode));//XXX breaks compatibility with multiple setpoints - - /* Only accept messages which are intended for this system */ - // XXX removed for sitl, makes maybe sense to re-introduce at some point - // if ((mavlink_system.sysid == set_position_target_local_ned.target_system || - // set_position_target_local_ned.target_system == 0) && - // (mavlink_system.compid == set_position_target_local_ned.target_component || - // set_position_target_local_ned.target_component == 0)) { - - /* convert mavlink type (local, NED) to uORB offboard control struct */ - offboard_control_mode.ignore_position = (bool)(set_position_target_local_ned.type_mask & 0x7); - offboard_control_mode.ignore_velocity = (bool)(set_position_target_local_ned.type_mask & 0x38); - offboard_control_mode.ignore_acceleration_force = (bool)(set_position_target_local_ned.type_mask & 0x1C0); - bool is_force_sp = (bool)(set_position_target_local_ned.type_mask & (1 << 9)); - /* yaw ignore flag mapps to ignore_attitude */ - offboard_control_mode.ignore_attitude = (bool)(set_position_target_local_ned.type_mask & 0x400); - /* yawrate ignore flag mapps to ignore_bodyrate */ - offboard_control_mode.ignore_bodyrate = (bool)(set_position_target_local_ned.type_mask & 0x800); - - - - offboard_control_mode.timestamp = get_time_micros(); - _offboard_control_mode_pub.publish(offboard_control_mode); - - /* The real mavlink app has a ckeck at this location which makes sure that the position setpoint triplet - * gets published only if in offboard mode. We leave that out for now. - */ - if (is_force_sp && offboard_control_mode.ignore_position && - offboard_control_mode.ignore_velocity) { - /* The offboard setpoint is a force setpoint only, directly writing to the force - * setpoint topic and not publishing the setpoint triplet topic */ - - PX4_WARN("force setpoint not supported"); - - } else { - /* It's not a pure force setpoint: publish to setpoint triplet topic */ - position_setpoint_triplet pos_sp_triplet; - pos_sp_triplet.previous.valid = false; - pos_sp_triplet.next.valid = false; - pos_sp_triplet.current.valid = true; - pos_sp_triplet.current.type = position_setpoint::SETPOINT_TYPE_POSITION; //XXX support others - - /* set the local pos values */ - if (!offboard_control_mode.ignore_position) { - pos_sp_triplet.current.position_valid = true; - pos_sp_triplet.current.x = set_position_target_local_ned.x; - pos_sp_triplet.current.y = set_position_target_local_ned.y; - pos_sp_triplet.current.z = set_position_target_local_ned.z; - - } else { - pos_sp_triplet.current.position_valid = false; - } - - /* set the local vel values */ - if (!offboard_control_mode.ignore_velocity) { - pos_sp_triplet.current.velocity_valid = true; - pos_sp_triplet.current.vx = set_position_target_local_ned.vx; - pos_sp_triplet.current.vy = set_position_target_local_ned.vy; - pos_sp_triplet.current.vz = set_position_target_local_ned.vz; - - } else { - pos_sp_triplet.current.velocity_valid = false; - } - - /* set the local acceleration values if the setpoint type is 'local pos' and none - * of the accelerations fields is set to 'ignore' */ - if (!offboard_control_mode.ignore_acceleration_force) { - pos_sp_triplet.current.acceleration_valid = true; - pos_sp_triplet.current.a_x = set_position_target_local_ned.afx; - pos_sp_triplet.current.a_y = set_position_target_local_ned.afy; - pos_sp_triplet.current.a_z = set_position_target_local_ned.afz; - pos_sp_triplet.current.acceleration_is_force = - is_force_sp; - - } else { - pos_sp_triplet.current.acceleration_valid = false; - } - - /* set the yaw sp value */ - if (!offboard_control_mode.ignore_attitude && !isnan(set_position_target_local_ned.yaw)) { - pos_sp_triplet.current.yaw_valid = true; - pos_sp_triplet.current.yaw = set_position_target_local_ned.yaw; - - } else { - pos_sp_triplet.current.yaw_valid = false; - } - - /* set the yawrate sp value */ - if (!offboard_control_mode.ignore_bodyrate && !isnan(set_position_target_local_ned.yaw)) { - pos_sp_triplet.current.yawspeed_valid = true; - pos_sp_triplet.current.yawspeed = set_position_target_local_ned.yaw_rate; - - } else { - pos_sp_triplet.current.yawspeed_valid = false; - } - - //XXX handle global pos setpoints (different MAV frames) - - _pos_sp_triplet_pub.publish(pos_sp_triplet); - } -} diff --git a/src/platforms/ros/nodes/mavlink/mavlink.h b/src/platforms/ros/nodes/mavlink/mavlink.h deleted file mode 100644 index 779095455a..0000000000 --- a/src/platforms/ros/nodes/mavlink/mavlink.h +++ /dev/null @@ -1,116 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2015 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file mavlink.h - * Dummy mavlink node that interfaces to a mavros node via UDP - * This simulates the onboard mavlink app to some degree. It should be possible to - * send offboard setpoints via mavros to the SITL setup the same way as on the real system - * - * @author Thomas Gubler <thomasgubler@gmail.com> -*/ - -#pragma once - -#include "ros/ros.h" -#include <mavconn/interface.h> -#include <px4/vehicle_attitude.h> -#include <px4/vehicle_local_position.h> -#include <px4/vehicle_attitude_setpoint.h> -#include <px4/position_setpoint_triplet.h> -#include <px4/offboard_control_mode.h> - -namespace px4 -{ - -class Mavlink -{ -public: - Mavlink(std::string mavlink_fcu_url); - - ~Mavlink() {} - -protected: - - ros::NodeHandle _n; - mavconn::MAVConnInterface::Ptr _link; - ros::Subscriber _v_att_sub; - ros::Subscriber _v_local_pos_sub; - ros::Publisher _v_att_sp_pub; - ros::Publisher _pos_sp_triplet_pub; - ros::Publisher _offboard_control_mode_pub; - ros::Publisher _force_sp_pub; - vehicle_attitude_setpoint _att_sp; - offboard_control_mode _offboard_control_mode; - - /** - * - * Simulates output of attitude data from the FCU - * Equivalent to the mavlink stream ATTITUDE_QUATERNION - * - * */ - void VehicleAttitudeCallback(const vehicle_attitudeConstPtr &msg); - - /** - * - * Simulates output of local position data from the FCU - * Equivalent to the mavlink stream LOCAL_POSITION_NED - * - * */ - void VehicleLocalPositionCallback(const vehicle_local_positionConstPtr &msg); - - - /** - * - * Handle incoming mavlink messages ant publish them to ROS ("Mavlink Receiver") - * - * */ - void handle_msg(const mavlink_message_t *mmsg, uint8_t sysid, uint8_t compid); - - /** - * - * Handle SET_ATTITUDE_TARGET mavlink messages - * - * */ - void handle_msg_set_attitude_target(const mavlink_message_t *mmsg); - - /** - * - * Handle SET_POSITION_TARGET_LOCAL_NED mavlink messages - * - * */ - void handle_msg_set_position_target_local_ned(const mavlink_message_t *mmsg); - -}; - -} diff --git a/src/platforms/ros/nodes/mc_mixer/mc_mixer.cpp b/src/platforms/ros/nodes/mc_mixer/mc_mixer.cpp deleted file mode 100644 index 67084c64bb..0000000000 --- a/src/platforms/ros/nodes/mc_mixer/mc_mixer.cpp +++ /dev/null @@ -1,277 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2014 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file mc_mixer.cpp - * Dummy multicopter mixer for rotors simulator (gazebo) - * - * @author Roman Bapst <romanbapst@yahoo.de> -*/ -#include <ros/ros.h> -#include <px4.h> -#include <lib/mathlib/mathlib.h> -#include <mav_msgs/CommandMotorSpeed.h> -#include <string> - -class MultirotorMixer -{ -public: - - MultirotorMixer(); - - struct Rotor { - float roll_scale; - float pitch_scale; - float yaw_scale; - }; - - void actuatorControlsCallback(const px4::actuator_controls_0 &msg); - void actuatorArmedCallback(const px4::actuator_armed &msg); - -private: - - ros::NodeHandle _n; - ros::Subscriber _sub; - ros::Publisher _pub; - - const Rotor *_rotors; - - unsigned _rotor_count; - - struct { - float control[8]; - } inputs; - - struct { - float control[8]; - } outputs; - - bool _armed; - ros::Subscriber _sub_actuator_armed; - - void mix(); -}; - -const MultirotorMixer::Rotor _config_x[] = { - { -0.707107, 0.707107, 1.00 }, - { 0.707107, -0.707107, 1.00 }, - { 0.707107, 0.707107, -1.00 }, - { -0.707107, -0.707107, -1.00 }, -}; - -const MultirotorMixer::Rotor _config_quad_plus[] = { - { -1.000000, 0.000000, 1.00 }, - { 1.000000, 0.000000, 1.00 }, - { 0.000000, 1.000000, -1.00 }, - { -0.000000, -1.000000, -1.00 }, -}; - -const MultirotorMixer::Rotor _config_quad_plus_rotorssim[] = { - { 0.000000, 1.000000, 1.00 }, - { -0.000000, -1.000000, 1.00 }, - { 1.000000, 0.000000, -1.00 }, - { -1.000000, 0.000000, -1.00 }, -}; -const MultirotorMixer::Rotor _config_quad_wide[] = { - { -0.927184, 0.374607, 1.000000 }, - { 0.777146, -0.629320, 1.000000 }, - { 0.927184, 0.374607, -1.000000 }, - { -0.777146, -0.629320, -1.000000 }, -}; -const MultirotorMixer::Rotor _config_quad_iris[] = { - { -0.876559, 0.481295, 1.000000 }, - { 0.826590, -0.562805, 1.000000 }, - { 0.876559, 0.481295, -1.000000 }, - { -0.826590, -0.562805, -1.000000 }, -}; - -const MultirotorMixer::Rotor *_config_index[5] = { - &_config_x[0], - &_config_quad_plus[0], - &_config_quad_plus_rotorssim[0], - &_config_quad_wide[0], - &_config_quad_iris[0] -}; - -MultirotorMixer::MultirotorMixer(): - _n(), - _rotor_count(4), - _rotors(_config_index[0]) -{ - _sub = _n.subscribe("actuator_controls_0", 1, &MultirotorMixer::actuatorControlsCallback, this); - _pub = _n.advertise<mav_msgs::CommandMotorSpeed>("command/motor_speed", 10); - - if (!_n.hasParam("motor_scaling_radps")) { - _n.setParam("motor_scaling_radps", 150.0); - } - - if (!_n.hasParam("motor_offset_radps")) { - _n.setParam("motor_offset_radps", 600.0); - } - - if (!_n.hasParam("mixer")) { - _n.setParam("mixer", "x"); - } - - _sub_actuator_armed = _n.subscribe("actuator_armed", 1, &MultirotorMixer::actuatorArmedCallback, this); -} - -void MultirotorMixer::mix() -{ - float roll = math::constrain(inputs.control[0], -1.0f, 1.0f); - float pitch = math::constrain(inputs.control[1], -1.0f, 1.0f); - float yaw = math::constrain(inputs.control[2], -1.0f, 1.0f); - float thrust = math::constrain(inputs.control[3], 0.0f, 1.0f); - float min_out = 0.0f; - float max_out = 0.0f; - - /* perform initial mix pass yielding unbounded outputs, ignore yaw */ - for (unsigned i = 0; i < _rotor_count; i++) { - float out = roll * _rotors[i].roll_scale - + pitch * _rotors[i].pitch_scale + thrust; - - /* limit yaw if it causes outputs clipping */ - if (out >= 0.0f && out < -yaw * _rotors[i].yaw_scale) { - yaw = -out / _rotors[i].yaw_scale; - } - - /* calculate min and max output values */ - if (out < min_out) { - min_out = out; - } - - if (out > max_out) { - max_out = out; - } - - outputs.control[i] = out; - } - - /* scale down roll/pitch controls if some outputs are negative, don't add yaw, keep total thrust */ - if (min_out < 0.0f) { - float scale_in = thrust / (thrust - min_out); - - /* mix again with adjusted controls */ - for (unsigned i = 0; i < _rotor_count; i++) { - outputs.control[i] = scale_in - * (roll * _rotors[i].roll_scale - + pitch * _rotors[i].pitch_scale) + thrust; - } - - } else { - /* roll/pitch mixed without limiting, add yaw control */ - for (unsigned i = 0; i < _rotor_count; i++) { - outputs.control[i] += yaw * _rotors[i].yaw_scale; - } - } - - /* scale down all outputs if some outputs are too large, reduce total thrust */ - float scale_out; - - if (max_out > 1.0f) { - scale_out = 1.0f / max_out; - - } else { - scale_out = 1.0f; - } - - /* scale outputs to range _idle_speed..1, and do final limiting */ - for (unsigned i = 0; i < _rotor_count; i++) { - outputs.control[i] = math::constrain(outputs.control[i], 0.0f, 1.0f); - } -} - -void MultirotorMixer::actuatorControlsCallback(const px4::actuator_controls_0 &msg) -{ - // read message - for (int i = 0; i < msg.NUM_ACTUATOR_CONTROLS; i++) { - inputs.control[i] = msg.control[i]; - } - - // switch mixer if necessary - std::string mixer_name; - _n.getParamCached("mixer", mixer_name); - - if (mixer_name == "x") { - _rotors = _config_index[0]; - - } else if (mixer_name == "+") { - _rotors = _config_index[1]; - - } else if (mixer_name == "e") { - _rotors = _config_index[2]; - - } else if (mixer_name == "w") { - _rotors = _config_index[3]; - - } else if (mixer_name == "i") { - _rotors = _config_index[4]; - } - - // mix - mix(); - - // publish message - mav_msgs::CommandMotorSpeed rotor_vel_msg; - double scaling; - double offset; - _n.getParamCached("motor_scaling_radps", scaling); - _n.getParamCached("motor_offset_radps", offset); - - if (_armed) { - for (int i = 0; i < _rotor_count; i++) { - rotor_vel_msg.motor_speed.push_back(outputs.control[i] * scaling + offset); - } - - } else { - for (int i = 0; i < _rotor_count; i++) { - rotor_vel_msg.motor_speed.push_back(0.0); - } - } - - _pub.publish(rotor_vel_msg); -} - -int main(int argc, char **argv) -{ - ros::init(argc, argv, "mc_mixer"); - MultirotorMixer mixer; - ros::spin(); - - return 0; -} - -void MultirotorMixer::actuatorArmedCallback(const px4::actuator_armed &msg) -{ - _armed = msg.armed; -} diff --git a/src/platforms/ros/nodes/position_estimator/position_estimator.cpp b/src/platforms/ros/nodes/position_estimator/position_estimator.cpp deleted file mode 100644 index 4c15e98947..0000000000 --- a/src/platforms/ros/nodes/position_estimator/position_estimator.cpp +++ /dev/null @@ -1,112 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2014 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file position_estimator.cpp - * - * @author Thomas Gubler <thomasgubler@gmail.com> - * @author Roman Bapst <romanbapst@yahoo.de> -*/ - -#include "position_estimator.h" - -#include <px4/vehicle_local_position.h> -#include <mathlib/mathlib.h> -#include <platforms/px4_defines.h> -#include <platforms/px4_middleware.h> -#include <vector> -#include <string> -#include <gazebo_msgs/ModelStates.h> - -PositionEstimator::PositionEstimator() : - _n(), - _sub_modelstates(_n.subscribe("/gazebo/model_states", 1, &PositionEstimator::ModelStatesCallback, this)), - _vehicle_position_pub(_n.advertise<px4::vehicle_local_position>("vehicle_local_position", 1)), - _startup_time(1) -{ - _n.getParam("vehicle_model", _model_name); -} - -void PositionEstimator::ModelStatesCallback(const gazebo_msgs::ModelStatesConstPtr &msg) -{ - //XXX: use a proper sensor topic - - px4::vehicle_local_position msg_v_l_pos; - - /* Fill px4 position topic with contents from modelstates topic */ - int index = 0; - - //XXX: maybe a more clever approach would be to do this not on every loop, need to check if and when - //gazebo rearranges indexes. - for (std::vector<std::string>::const_iterator it = msg->name.begin(); it != msg->name.end(); ++it) { - if (*it == _model_name) { - index = it - msg->name.begin(); - break; - } - } - - msg_v_l_pos.xy_valid = true; - msg_v_l_pos.z_valid = true; - msg_v_l_pos.v_xy_valid = true; - msg_v_l_pos.v_z_valid = true; - - msg_v_l_pos.x = msg->pose[index].position.x; - msg_v_l_pos.y = -msg->pose[index].position.y; - msg_v_l_pos.z = -msg->pose[index].position.z; - msg_v_l_pos.vx = msg->twist[index].linear.x; - msg_v_l_pos.vy = -msg->twist[index].linear.y; - msg_v_l_pos.vz = -msg->twist[index].linear.z; - - msg_v_l_pos.xy_global = true; - msg_v_l_pos.z_global = true; - msg_v_l_pos.ref_timestamp = _startup_time; - msg_v_l_pos.ref_lat = 47.378301; - msg_v_l_pos.ref_lon = 8.538777; - msg_v_l_pos.ref_alt = 1200.0f; - - msg_v_l_pos.vxy_max = 0.0f; - msg_v_l_pos.limit_hagl = false; - - msg_v_l_pos.timestamp = px4::get_time_micros(); - _vehicle_position_pub.publish(msg_v_l_pos); -} - -int main(int argc, char **argv) -{ - ros::init(argc, argv, "position_estimator"); - PositionEstimator m; - - ros::spin(); - - return 0; -} diff --git a/src/platforms/ros/nodes/position_estimator/position_estimator.h b/src/platforms/ros/nodes/position_estimator/position_estimator.h deleted file mode 100644 index 39f8322f46..0000000000 --- a/src/platforms/ros/nodes/position_estimator/position_estimator.h +++ /dev/null @@ -1,64 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2014 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file position_estimator.h - * Dummy position estimator that forwards position from gazebo to px4 topic - * - * @author Thomas Gubler <thomasgubler@gmail.com> -*/ - -#pragma once - -#include "ros/ros.h" -#include <gazebo_msgs/ModelStates.h> -#include <sensor_msgs/Imu.h> - -class PositionEstimator -{ -public: - PositionEstimator(); - - ~PositionEstimator() {} - -protected: - void ModelStatesCallback(const gazebo_msgs::ModelStatesConstPtr &msg); - - ros::NodeHandle _n; - ros::Subscriber _sub_modelstates; - ros::Publisher _vehicle_position_pub; - - uint64_t _startup_time; - std::string _model_name; - -}; diff --git a/src/platforms/ros/perf_counter.cpp b/src/platforms/ros/perf_counter.cpp deleted file mode 100755 index 6655dc3c3c..0000000000 --- a/src/platforms/ros/perf_counter.cpp +++ /dev/null @@ -1,184 +0,0 @@ -/**************************************************************************** - * - * Copyright (C) 2012 - 2014 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/* - * @file perf_counter.cpp - * - * Empty function calls for ros compatibility - * - * @author Roman Bapst <bapstr@ethz.ch> - * - */ -#include <stdlib.h> -#include <stdio.h> -#include <perf/perf_counter.h> - - - -perf_counter_t perf_alloc(enum perf_counter_type type, const char *name) -{ - return NULL; -} - -/** - * Free a counter. - * - * @param handle The performance counter's handle. - */ -void perf_free(perf_counter_t handle) -{ - -} - -/** - * Count a performance event. - * - * This call only affects counters that take single events; PC_COUNT, PC_INTERVAL etc. - * - * @param handle The handle returned from perf_alloc. - */ -void perf_count(perf_counter_t handle) -{ - -} - -/** - * Begin a performance event. - * - * This call applies to counters that operate over ranges of time; PC_ELAPSED etc. - * - * @param handle The handle returned from perf_alloc. - */ -void perf_begin(perf_counter_t handle) -{ - -} - -/** - * End a performance event. - * - * This call applies to counters that operate over ranges of time; PC_ELAPSED etc. - * If a call is made without a corresopnding perf_begin call, or if perf_cancel - * has been called subsequently, no change is made to the counter. - * - * @param handle The handle returned from perf_alloc. - */ -void perf_end(perf_counter_t handle) -{ - -} - -/** - * Cancel a performance event. - * - * This call applies to counters that operate over ranges of time; PC_ELAPSED etc. - * It reverts the effect of a previous perf_begin. - * - * @param handle The handle returned from perf_alloc. - */ -void perf_cancel(perf_counter_t handle) -{ - -} - -/** - * Reset a performance counter. - * - * This call resets performance counter to initial state - * - * @param handle The handle returned from perf_alloc. - */ -void perf_reset(perf_counter_t handle) -{ - -} - -/** - * Print one performance counter to stdout - * - * @param handle The counter to print. - */ -void perf_print_counter(perf_counter_t handle) -{ - -} - -/** - * Print one performance counter to a fd. - * - * @param fd File descriptor to print to - e.g. 0 for stdout - * @param handle The counter to print. - */ -void perf_print_counter_fd(int fd, perf_counter_t handle) -{ - -} - -int perf_print_counter_buffer(char *buffer, int length, perf_counter_t handle) -{ - return 0; -} - -void perf_iterate_all(perf_callback cb, void *user) -{ - -} - -/** - * Print all of the performance counters. - * - * @param fd File descriptor to print to - e.g. 0 for stdout - */ -void perf_print_all(int fd) -{ - -} - -/** - * Reset all of the performance counters. - */ -void perf_reset_all(void) -{ - -} - -/** - * Return current event_count - * - * @param handle The counter returned from perf_alloc. - * @return event_count - */ -uint64_t perf_event_count(perf_counter_t handle) -{ - return 0; -} diff --git a/src/platforms/ros/px4_nodehandle.cpp b/src/platforms/ros/px4_nodehandle.cpp deleted file mode 100644 index 6ac3c76d31..0000000000 --- a/src/platforms/ros/px4_nodehandle.cpp +++ /dev/null @@ -1,44 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2014 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file px4_nodehandle.cpp - * - * PX4 Middleware Wrapper Nodehandle - */ -#include <px4_nodehandle.h> - -namespace px4 -{ -} - diff --git a/src/platforms/ros/px4_publisher.cpp b/src/platforms/ros/px4_publisher.cpp deleted file mode 100644 index f02dbe4c9a..0000000000 --- a/src/platforms/ros/px4_publisher.cpp +++ /dev/null @@ -1,41 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2014 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file px4_publisher.cpp - * - * PX4 Middleware Wrapper for Publisher - */ -#include <px4_publisher.h> - - diff --git a/src/platforms/ros/px4_ros_impl.cpp b/src/platforms/ros/px4_ros_impl.cpp deleted file mode 100644 index 854986a7f3..0000000000 --- a/src/platforms/ros/px4_ros_impl.cpp +++ /dev/null @@ -1,56 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2014 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file px4_ros_impl.cpp - * - * PX4 Middleware Wrapper ROS Implementation - */ - -#include <px4.h> - -namespace px4 -{ - -void init(int argc, char *argv[], const char *process_name) -{ - ros::init(argc, argv, process_name); -} - -uint64_t get_time_micros() -{ - ros::Time time = ros::Time::now(); - return time.sec * 1e6 + time.nsec / 1000; -} - -} -- GitLab