Program Listing for File flight_control.hpp
↰ Return to documentation for file (include/psdk_wrapper/modules/flight_control.hpp
)
/*
* Copyright (C) 2024 Unmanned Life
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
#ifndef PSDK_WRAPPER_INCLUDE_PSDK_WRAPPER_MODULES_FLIGHT_CONTROL_HPP_
#define PSDK_WRAPPER_INCLUDE_PSDK_WRAPPER_MODULES_FLIGHT_CONTROL_HPP_
#include <dji_flight_controller.h>
#include <memory>
#include <rclcpp/rclcpp.hpp>
#include <rclcpp_lifecycle/lifecycle_node.hpp>
#include <sensor_msgs/msg/joy.hpp>
#include <sensor_msgs/msg/nav_sat_fix.hpp>
#include <std_srvs/srv/trigger.hpp>
#include <string>
#include "psdk_interfaces/srv/get_go_home_altitude.hpp"
#include "psdk_interfaces/srv/get_obstacle_avoidance.hpp"
#include "psdk_interfaces/srv/set_go_home_altitude.hpp"
#include "psdk_interfaces/srv/set_home_from_gps.hpp"
#include "psdk_interfaces/srv/set_obstacle_avoidance.hpp"
#include "psdk_wrapper/utils/psdk_wrapper_utils.hpp"
namespace psdk_ros2
{
class FlightControlModule : public rclcpp_lifecycle::LifecycleNode
{
public:
using Trigger = std_srvs::srv::Trigger;
using SetHomeFromGPS = psdk_interfaces::srv::SetHomeFromGPS;
using SetGoHomeAltitude = psdk_interfaces::srv::SetGoHomeAltitude;
using GetGoHomeAltitude = psdk_interfaces::srv::GetGoHomeAltitude;
using SetObstacleAvoidance = psdk_interfaces::srv::SetObstacleAvoidance;
using GetObstacleAvoidance = psdk_interfaces::srv::GetObstacleAvoidance;
explicit FlightControlModule(const std::string &name);
~FlightControlModule();
CallbackReturn on_configure(const rclcpp_lifecycle::State &state);
CallbackReturn on_activate(const rclcpp_lifecycle::State &state);
CallbackReturn on_cleanup(const rclcpp_lifecycle::State &state);
CallbackReturn on_deactivate(const rclcpp_lifecycle::State &state);
CallbackReturn on_shutdown(const rclcpp_lifecycle::State &state);
bool init(const sensor_msgs::msg::NavSatFix ¤t_gps_position);
bool deinit();
private:
void flight_control_position_yaw_cb(
const sensor_msgs::msg::Joy::SharedPtr msg);
void flight_control_velocity_yawrate_cb(
const sensor_msgs::msg::Joy::SharedPtr msg);
void flight_control_body_velocity_yawrate_cb(
const sensor_msgs::msg::Joy::SharedPtr msg);
void flight_control_rollpitch_yawrate_thrust_cb(
const sensor_msgs::msg::Joy::SharedPtr msg);
void flight_control_generic_cb(const sensor_msgs::msg::Joy::SharedPtr msg);
void set_home_from_gps_cb(
const std::shared_ptr<SetHomeFromGPS::Request> request,
const std::shared_ptr<SetHomeFromGPS::Response> response);
void set_home_from_current_location_cb(
const std::shared_ptr<Trigger::Request> request,
const std::shared_ptr<Trigger::Response> response);
void set_go_home_altitude_cb(
const std::shared_ptr<SetGoHomeAltitude::Request> request,
const std::shared_ptr<SetGoHomeAltitude::Response> response);
void get_go_home_altitude_cb(
const std::shared_ptr<GetGoHomeAltitude::Request> request,
const std::shared_ptr<GetGoHomeAltitude::Response> response);
void start_go_home_cb(const std::shared_ptr<Trigger::Request> request,
const std::shared_ptr<Trigger::Response> response);
void cancel_go_home_cb(const std::shared_ptr<Trigger::Request> request,
const std::shared_ptr<Trigger::Response> response);
void obtain_ctrl_authority_cb(
const std::shared_ptr<Trigger::Request> request,
const std::shared_ptr<Trigger::Response> response);
void release_ctrl_authority_cb(
const std::shared_ptr<Trigger::Request> request,
const std::shared_ptr<Trigger::Response> response);
void turn_on_motors_cb(const std::shared_ptr<Trigger::Request> request,
const std::shared_ptr<Trigger::Response> response);
void turn_off_motors_cb(const std::shared_ptr<Trigger::Request> request,
const std::shared_ptr<Trigger::Response> response);
void start_takeoff_cb(const std::shared_ptr<Trigger::Request> request,
const std::shared_ptr<Trigger::Response> response);
void start_landing_cb(const std::shared_ptr<Trigger::Request> request,
const std::shared_ptr<Trigger::Response> response);
void cancel_landing_cb(const std::shared_ptr<Trigger::Request> request,
const std::shared_ptr<Trigger::Response> response);
void start_confirm_landing_cb(
const std::shared_ptr<Trigger::Request> request,
const std::shared_ptr<Trigger::Response> response);
void start_force_landing_cb(
const std::shared_ptr<Trigger::Request> request,
const std::shared_ptr<Trigger::Response> response);
void set_horizontal_vo_obstacle_avoidance_cb(
const std::shared_ptr<SetObstacleAvoidance::Request> request,
const std::shared_ptr<SetObstacleAvoidance::Response> response);
void set_horizontal_radar_obstacle_avoidance_cb(
const std::shared_ptr<SetObstacleAvoidance::Request> request,
const std::shared_ptr<SetObstacleAvoidance::Response> response);
void set_upwards_vo_obstacle_avoidance_cb(
const std::shared_ptr<SetObstacleAvoidance::Request> request,
const std::shared_ptr<SetObstacleAvoidance::Response> response);
void set_upwards_radar_obstacle_avoidance_cb(
const std::shared_ptr<SetObstacleAvoidance::Request> request,
const std::shared_ptr<SetObstacleAvoidance::Response> response);
void set_downwards_vo_obstacle_avoidance_cb(
const std::shared_ptr<SetObstacleAvoidance::Request> request,
const std::shared_ptr<SetObstacleAvoidance::Response> response);
void get_horizontal_vo_obstacle_avoidance_cb(
const std::shared_ptr<GetObstacleAvoidance::Request> request,
const std::shared_ptr<GetObstacleAvoidance::Response> response);
void get_horizontal_radar_obstacle_avoidance_cb(
const std::shared_ptr<GetObstacleAvoidance::Request> request,
const std::shared_ptr<GetObstacleAvoidance::Response> response);
void get_downwards_vo_obstacle_avoidance_cb(
const std::shared_ptr<GetObstacleAvoidance::Request> request,
const std::shared_ptr<GetObstacleAvoidance::Response> response);
void get_upwards_vo_obstacle_avoidance_cb(
const std::shared_ptr<GetObstacleAvoidance::Request> request,
const std::shared_ptr<GetObstacleAvoidance::Response> response);
void get_upwards_radar_obstacle_avoidance_cb(
const std::shared_ptr<GetObstacleAvoidance::Request> request,
const std::shared_ptr<GetObstacleAvoidance::Response> response);
/* ROS 2 Subscribers */
rclcpp::Subscription<sensor_msgs::msg::Joy>::SharedPtr
flight_control_generic_sub_;
rclcpp::Subscription<sensor_msgs::msg::Joy>::SharedPtr
flight_control_position_yaw_sub_;
rclcpp::Subscription<sensor_msgs::msg::Joy>::SharedPtr
flight_control_velocity_yawrate_sub_;
rclcpp::Subscription<sensor_msgs::msg::Joy>::SharedPtr
flight_control_body_velocity_yawrate_sub_;
rclcpp::Subscription<sensor_msgs::msg::Joy>::SharedPtr
flight_control_rollpitch_yawrate_thrust_sub_;
/* ROS 2 services*/
rclcpp::Service<SetHomeFromGPS>::SharedPtr set_home_from_gps_srv_;
rclcpp::Service<Trigger>::SharedPtr set_home_from_current_location_srv_;
rclcpp::Service<SetGoHomeAltitude>::SharedPtr set_go_home_altitude_srv_;
rclcpp::Service<GetGoHomeAltitude>::SharedPtr get_go_home_altitude_srv_;
rclcpp::Service<Trigger>::SharedPtr start_go_home_srv_;
rclcpp::Service<Trigger>::SharedPtr cancel_go_home_srv_;
rclcpp::Service<Trigger>::SharedPtr obtain_ctrl_authority_srv_;
rclcpp::Service<Trigger>::SharedPtr release_ctrl_authority_srv_;
rclcpp::Service<Trigger>::SharedPtr turn_on_motors_srv_;
rclcpp::Service<Trigger>::SharedPtr turn_off_motors_srv_;
rclcpp::Service<Trigger>::SharedPtr takeoff_srv_;
rclcpp::Service<Trigger>::SharedPtr land_srv_;
rclcpp::Service<Trigger>::SharedPtr cancel_landing_srv_;
rclcpp::Service<Trigger>::SharedPtr start_confirm_landing_srv_;
rclcpp::Service<Trigger>::SharedPtr start_force_landing_srv_;
rclcpp::Service<SetObstacleAvoidance>::SharedPtr
set_horizontal_vo_obstacle_avoidance_srv_;
rclcpp::Service<SetObstacleAvoidance>::SharedPtr
set_horizontal_radar_obstacle_avoidance_srv_;
rclcpp::Service<SetObstacleAvoidance>::SharedPtr
set_upwards_vo_obstacle_avoidance_srv_;
rclcpp::Service<SetObstacleAvoidance>::SharedPtr
set_upwards_radar_obstacle_avoidance_srv_;
rclcpp::Service<SetObstacleAvoidance>::SharedPtr
set_downwards_vo_obstacle_avoidance_srv_;
rclcpp::Service<GetObstacleAvoidance>::SharedPtr
get_horizontal_vo_obstacle_avoidance_srv_;
rclcpp::Service<GetObstacleAvoidance>::SharedPtr
get_upwards_vo_obstacle_avoidance_srv_;
rclcpp::Service<GetObstacleAvoidance>::SharedPtr
get_upwards_radar_obstacle_avoidance_srv_;
rclcpp::Service<GetObstacleAvoidance>::SharedPtr
get_downwards_vo_obstacle_avoidance_srv_;
rclcpp::Service<GetObstacleAvoidance>::SharedPtr
get_horizontal_radar_obstacle_avoidance_srv_;
bool is_module_initialized_{false};
};
} // namespace psdk_ros2
#endif // PSDK_WRAPPER_INCLUDE_PSDK_WRAPPER_MODULES_FLIGHT_CONTROL_HPP_