Program Listing for File telemetry.hpp
↰ Return to documentation for file (include/psdk_wrapper/modules/telemetry.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_TELEMETRY_HPP_
#define PSDK_WRAPPER_INCLUDE_PSDK_WRAPPER_MODULES_TELEMETRY_HPP_
#include <dji_aircraft_info.h> //NOLINT
#include <dji_fc_subscription.h> //NOLINT
#include <dji_typedef.h> //NOLINT
#include <math.h>
#include <tf2_ros/static_transform_broadcaster.h>
#include <tf2_ros/transform_broadcaster.h>
#include <geometry_msgs/msg/accel_stamped.hpp>
#include <geometry_msgs/msg/quaternion_stamped.hpp>
#include <geometry_msgs/msg/twist_stamped.hpp>
#include <geometry_msgs/msg/vector3_stamped.hpp>
#include <memory>
#include <rclcpp/rclcpp.hpp>
#include <rclcpp_lifecycle/lifecycle_node.hpp>
#include <sensor_msgs/msg/battery_state.hpp>
#include <sensor_msgs/msg/imu.hpp>
#include <sensor_msgs/msg/joy.hpp>
#include <sensor_msgs/msg/magnetic_field.hpp>
#include <sensor_msgs/msg/nav_sat_fix.hpp>
#include <shared_mutex>
#include <std_msgs/msg/bool.hpp>
#include <std_msgs/msg/float32.hpp>
#include <std_msgs/msg/u_int16.hpp>
#include <std_msgs/msg/u_int8.hpp>
#include <std_srvs/srv/trigger.hpp>
#include <string>
#include "psdk_interfaces/msg/control_mode.hpp"
#include "psdk_interfaces/msg/display_mode.hpp"
#include "psdk_interfaces/msg/esc_data.hpp"
#include "psdk_interfaces/msg/flight_anomaly.hpp"
#include "psdk_interfaces/msg/flight_status.hpp"
#include "psdk_interfaces/msg/gimbal_status.hpp"
#include "psdk_interfaces/msg/gps_details.hpp"
#include "psdk_interfaces/msg/home_position.hpp"
#include "psdk_interfaces/msg/position_fused.hpp"
#include "psdk_interfaces/msg/rc_connection_status.hpp"
#include "psdk_interfaces/msg/relative_obstacle_info.hpp"
#include "psdk_interfaces/msg/rtk_yaw.hpp"
#include "psdk_interfaces/msg/single_battery_info.hpp"
#include "psdk_wrapper/utils/psdk_wrapper_utils.hpp"
namespace psdk_ros2
{
class TelemetryModule : public rclcpp_lifecycle::LifecycleNode
{
public:
using Trigger = std_srvs::srv::Trigger;
explicit TelemetryModule(const std::string& name);
~TelemetryModule();
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();
bool deinit();
/* C-typed DJI topic subscriber callbacks*/
friend T_DjiReturnCode c_attitude_callback(
const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
friend T_DjiReturnCode c_velocity_callback(
const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
friend T_DjiReturnCode c_angular_rate_ground_fused_callback(
const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
friend T_DjiReturnCode c_angular_rate_body_raw_callback(
const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
friend T_DjiReturnCode c_imu_callback(const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
friend T_DjiReturnCode c_vo_position_callback(
const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
friend T_DjiReturnCode c_gps_fused_callback(
const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
friend T_DjiReturnCode c_gps_position_callback(
const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
friend T_DjiReturnCode c_gps_velocity_callback(
const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
friend T_DjiReturnCode c_gps_details_callback(
const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
friend T_DjiReturnCode c_gps_signal_callback(
const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
friend T_DjiReturnCode c_gps_control_callback(
const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
friend T_DjiReturnCode c_rtk_position_callback(
const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
friend T_DjiReturnCode c_rtk_velocity_callback(
const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
friend T_DjiReturnCode c_rtk_yaw_callback(
const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
friend T_DjiReturnCode c_rtk_position_info_callback(
const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
friend T_DjiReturnCode c_rtk_yaw_info_callback(
const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
friend T_DjiReturnCode c_rtk_connection_status_callback(
const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
friend T_DjiReturnCode c_magnetometer_callback(
const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
friend T_DjiReturnCode c_rc_callback(const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
friend T_DjiReturnCode c_esc_callback(const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
friend T_DjiReturnCode c_rc_connection_status_callback(
const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
friend T_DjiReturnCode c_flight_status_callback(
const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
friend T_DjiReturnCode c_display_mode_callback(
const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
friend T_DjiReturnCode c_landing_gear_status_callback(
const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
friend T_DjiReturnCode c_motor_start_error_callback(
const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
friend T_DjiReturnCode c_flight_anomaly_callback(
const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
friend T_DjiReturnCode c_battery_callback(
const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
friend T_DjiReturnCode c_height_fused_callback(
const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
friend T_DjiReturnCode c_control_mode_callback(
const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
friend T_DjiReturnCode c_home_point_callback(
const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
friend T_DjiReturnCode c_home_point_status_callback(
const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
friend T_DjiReturnCode c_acceleration_ground_fused_callback(
const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
friend T_DjiReturnCode c_acceleration_body_fused_callback(
const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
friend T_DjiReturnCode c_acceleration_body_raw_callback(
const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
friend T_DjiReturnCode c_avoid_data_callback(
const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
friend T_DjiReturnCode c_altitude_sl_callback(
const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
friend T_DjiReturnCode c_altitude_barometric_callback(
const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
friend T_DjiReturnCode c_single_battery_index1_callback(
const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
friend T_DjiReturnCode c_single_battery_index2_callback(
const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
friend T_DjiReturnCode c_home_point_altitude_callback(
const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
friend T_DjiReturnCode c_gimbal_angles_callback(
const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
friend T_DjiReturnCode c_gimbal_status_callback(
const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
inline sensor_msgs::msg::NavSatFix
get_current_gps()
{
return current_state_.gps_position;
}
void subscribe_psdk_topics();
void unsubscribe_psdk_topics();
void set_aircraft_base(const T_DjiAircraftInfoBaseInfo aircraft_base);
void set_camera_type(const E_DjiCameraType camera_type);
struct TelemetryParams
{
std::string imu_frame;
std::string body_frame;
std::string map_frame;
std::string gimbal_frame;
std::string gimbal_base_frame;
std::string camera_frame;
std::string tf_frame_prefix;
bool publish_transforms;
int imu_frequency;
int attitude_frequency;
int acceleration_frequency;
int velocity_frequency;
int angular_rate_frequency;
int position_frequency;
int altitude_frequency;
int gps_fused_position_frequency;
int gps_data_frequency;
int rtk_data_frequency;
int magnetometer_frequency;
int rc_channels_data_frequency;
int gimbal_data_frequency;
int flight_status_frequency;
int battery_level_frequency;
int control_information_frequency;
int esc_data_frequency;
};
struct CopterState
{
psdk_interfaces::msg::PositionFused local_position;
sensor_msgs::msg::NavSatFix gps_position;
tf2::Quaternion attitude;
geometry_msgs::msg::Vector3Stamped gimbal_angles;
void
initialize_state()
{
local_position.position.x = 0.0;
local_position.position.y = 0.0;
local_position.position.z = 0.0;
gps_position.latitude = 40.0;
gps_position.longitude = 2.0;
gps_position.altitude = 100.0;
attitude.setRPY(0.0, 0.0, 0.0);
gimbal_angles.vector.x = 0.0;
gimbal_angles.vector.y = 0.0;
gimbal_angles.vector.z = 0.0;
}
};
CopterState current_state_;
TelemetryParams params_;
private:
/*C++ type DJI topic subscriber callbacks*/
T_DjiReturnCode attitude_callback(const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
T_DjiReturnCode velocity_callback(const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
T_DjiReturnCode angular_rate_ground_fused_callback(
const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
T_DjiReturnCode angular_rate_body_raw_callback(
const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
T_DjiReturnCode imu_callback(const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
T_DjiReturnCode vo_position_callback(const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
T_DjiReturnCode gps_fused_callback(const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
T_DjiReturnCode gps_position_callback(const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
T_DjiReturnCode gps_velocity_callback(const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
T_DjiReturnCode gps_details_callback(const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
T_DjiReturnCode gps_signal_callback(const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
T_DjiReturnCode gps_control_callback(const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
T_DjiReturnCode rtk_position_callback(const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
T_DjiReturnCode rtk_velocity_callback(const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
T_DjiReturnCode rtk_yaw_callback(const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
T_DjiReturnCode rtk_position_info_callback(
const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
T_DjiReturnCode rtk_yaw_info_callback(const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
T_DjiReturnCode rtk_connection_status_callback(
const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
T_DjiReturnCode magnetometer_callback(const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
T_DjiReturnCode rc_callback(const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
T_DjiReturnCode rc_connection_status_callback(
const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
T_DjiReturnCode esc_callback(const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
T_DjiReturnCode flight_status_callback(const uint8_t* data,
uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
T_DjiReturnCode display_mode_callback(const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
T_DjiReturnCode landing_gear_status_callback(
const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
T_DjiReturnCode motor_start_error_callback(
const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
T_DjiReturnCode flight_anomaly_callback(const uint8_t* data,
uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
T_DjiReturnCode battery_callback(const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
T_DjiReturnCode height_fused_callback(const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
T_DjiReturnCode control_mode_callback(const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
T_DjiReturnCode home_point_callback(const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
T_DjiReturnCode home_point_status_callback(
const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
T_DjiReturnCode acceleration_ground_fused_callback(
const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
T_DjiReturnCode acceleration_body_fused_callback(
const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
T_DjiReturnCode acceleration_body_raw_callback(
const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
T_DjiReturnCode avoid_data_callback(const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
T_DjiReturnCode altitude_sl_callback(const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
T_DjiReturnCode altitude_barometric_callback(
const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
T_DjiReturnCode single_battery_index1_callback(
const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
T_DjiReturnCode single_battery_index2_callback(
const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
T_DjiReturnCode home_point_altitude_callback(
const uint8_t* data, uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
T_DjiReturnCode gimbal_angles_callback(const uint8_t* data,
uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
T_DjiReturnCode gimbal_status_callback(const uint8_t* data,
uint16_t data_size,
const T_DjiDataTimestamp* timestamp);
E_DjiDataSubscriptionTopicFreq get_frequency(const int frequency);
void set_local_position_ref_cb(
const std::shared_ptr<Trigger::Request> request,
const std::shared_ptr<Trigger::Response> response);
inline int
get_gps_signal_level()
{
return gps_signal_level_;
};
inline void
set_gps_signal_level(const int gps_signal)
{
gps_signal_level_ = gps_signal;
};
inline bool
is_local_altitude_reference_set()
{
return local_altitude_reference_set_;
};
inline float
get_local_altitude_reference()
{
return local_altitude_reference_;
};
void set_local_altitude_reference(const float altitude);
void publish_static_transforms();
void publish_dynamic_transforms();
double get_yaw_gimbal();
std::string add_tf_prefix(const std::string& frame_name);
void initialize_aircraft_base_info();
std::shared_ptr<tf2_ros::StaticTransformBroadcaster> tf_static_broadcaster_;
std::shared_ptr<tf2_ros::TransformBroadcaster> tf_broadcaster_;
/* ROS 2 publishers */
rclcpp_lifecycle::LifecyclePublisher<
geometry_msgs::msg::QuaternionStamped>::SharedPtr attitude_pub_;
rclcpp_lifecycle::LifecyclePublisher<
geometry_msgs::msg::Vector3Stamped>::SharedPtr velocity_ground_fused_pub_;
rclcpp_lifecycle::LifecyclePublisher<sensor_msgs::msg::Imu>::SharedPtr
imu_pub_;
rclcpp_lifecycle::LifecyclePublisher<
psdk_interfaces::msg::PositionFused>::SharedPtr position_fused_pub_;
rclcpp_lifecycle::LifecyclePublisher<sensor_msgs::msg::NavSatFix>::SharedPtr
gps_fused_pub_;
rclcpp_lifecycle::LifecyclePublisher<sensor_msgs::msg::NavSatFix>::SharedPtr
gps_position_pub_;
rclcpp_lifecycle::LifecyclePublisher<
geometry_msgs::msg::TwistStamped>::SharedPtr gps_velocity_pub_;
rclcpp_lifecycle::LifecyclePublisher<
psdk_interfaces::msg::GPSDetails>::SharedPtr gps_details_pub_;
rclcpp_lifecycle::LifecyclePublisher<std_msgs::msg::UInt8>::SharedPtr
gps_signal_pub_;
rclcpp_lifecycle::LifecyclePublisher<std_msgs::msg::UInt8>::SharedPtr
gps_control_pub_;
rclcpp_lifecycle::LifecyclePublisher<sensor_msgs::msg::NavSatFix>::SharedPtr
rtk_position_pub_;
rclcpp_lifecycle::LifecyclePublisher<
geometry_msgs::msg::TwistStamped>::SharedPtr rtk_velocity_pub_;
rclcpp_lifecycle::LifecyclePublisher<psdk_interfaces::msg::RTKYaw>::SharedPtr
rtk_yaw_pub_;
rclcpp_lifecycle::LifecyclePublisher<std_msgs::msg::UInt8>::SharedPtr
rtk_position_info_pub_;
rclcpp_lifecycle::LifecyclePublisher<std_msgs::msg::UInt8>::SharedPtr
rtk_yaw_info_pub_;
rclcpp_lifecycle::LifecyclePublisher<std_msgs::msg::UInt16>::SharedPtr
rtk_connection_status_pub_;
rclcpp_lifecycle::LifecyclePublisher<
sensor_msgs::msg::MagneticField>::SharedPtr magnetic_field_pub_;
rclcpp_lifecycle::LifecyclePublisher<sensor_msgs::msg::Joy>::SharedPtr
rc_pub_;
rclcpp_lifecycle::LifecyclePublisher<
psdk_interfaces::msg::RCConnectionStatus>::SharedPtr
rc_connection_status_pub_;
rclcpp_lifecycle::LifecyclePublisher<psdk_interfaces::msg::EscData>::SharedPtr
esc_pub_;
rclcpp_lifecycle::LifecyclePublisher<
psdk_interfaces::msg::FlightStatus>::SharedPtr flight_status_pub_;
rclcpp_lifecycle::LifecyclePublisher<std_msgs::msg::UInt8>::SharedPtr
landing_gear_pub_;
rclcpp_lifecycle::LifecyclePublisher<std_msgs::msg::UInt16>::SharedPtr
motor_start_error_pub_;
rclcpp_lifecycle::LifecyclePublisher<
psdk_interfaces::msg::DisplayMode>::SharedPtr display_mode_pub_;
rclcpp_lifecycle::LifecyclePublisher<
psdk_interfaces::msg::FlightAnomaly>::SharedPtr flight_anomaly_pub_;
rclcpp_lifecycle::LifecyclePublisher<
sensor_msgs::msg::BatteryState>::SharedPtr battery_pub_;
rclcpp_lifecycle::LifecyclePublisher<
psdk_interfaces::msg::SingleBatteryInfo>::SharedPtr
single_battery_index1_pub_;
rclcpp_lifecycle::LifecyclePublisher<
psdk_interfaces::msg::SingleBatteryInfo>::SharedPtr
single_battery_index2_pub_;
rclcpp_lifecycle::LifecyclePublisher<std_msgs::msg::Float32>::SharedPtr
height_fused_pub_;
rclcpp_lifecycle::LifecyclePublisher<
psdk_interfaces::msg::ControlMode>::SharedPtr control_mode_pub_;
rclcpp_lifecycle::LifecyclePublisher<sensor_msgs::msg::NavSatFix>::SharedPtr
home_point_pub_;
rclcpp_lifecycle::LifecyclePublisher<std_msgs::msg::Bool>::SharedPtr
home_point_status_pub_;
rclcpp_lifecycle::LifecyclePublisher<
geometry_msgs::msg::Vector3Stamped>::SharedPtr angular_rate_body_raw_pub_;
rclcpp_lifecycle::LifecyclePublisher<geometry_msgs::msg::Vector3Stamped>::
SharedPtr angular_rate_ground_fused_pub_;
rclcpp_lifecycle::LifecyclePublisher<geometry_msgs::msg::AccelStamped>::
SharedPtr acceleration_ground_fused_pub_;
rclcpp_lifecycle::LifecyclePublisher<
geometry_msgs::msg::AccelStamped>::SharedPtr acceleration_body_fused_pub_;
rclcpp_lifecycle::LifecyclePublisher<
geometry_msgs::msg::AccelStamped>::SharedPtr acceleration_body_raw_pub_;
rclcpp_lifecycle::LifecyclePublisher<
psdk_interfaces::msg::RelativeObstacleInfo>::SharedPtr
relative_obstacle_info_pub_;
rclcpp_lifecycle::LifecyclePublisher<std_msgs::msg::Float32>::SharedPtr
altitude_sl_pub_;
rclcpp_lifecycle::LifecyclePublisher<std_msgs::msg::Float32>::SharedPtr
altitude_barometric_pub_;
rclcpp_lifecycle::LifecyclePublisher<std_msgs::msg::Float32>::SharedPtr
home_point_altitude_pub_;
rclcpp_lifecycle::LifecyclePublisher<
geometry_msgs::msg::Vector3Stamped>::SharedPtr gimbal_angles_pub_;
rclcpp_lifecycle::LifecyclePublisher<
psdk_interfaces::msg::GimbalStatus>::SharedPtr gimbal_status_pub_;
/* ROS 2 services */
rclcpp::Service<Trigger>::SharedPtr set_local_position_ref_srv_;
int gps_signal_level_{0};
float local_altitude_reference_{0};
bool local_altitude_reference_set_{false};
geometry_msgs::msg::Vector3Stamped local_position_reference_;
bool set_local_position_ref_{false};
T_DjiAircraftInfoBaseInfo aircraft_base_;
E_DjiCameraType camera_type_;
bool publish_camera_transforms_{false};
bool is_module_initialized_{false};
mutable std::shared_mutex current_state_mutex_;
mutable std::shared_mutex global_ptr_mutex_;
};
extern std::shared_ptr<TelemetryModule> global_telemetry_ptr_;
} // namespace psdk_ros2
#endif // PSDK_WRAPPER_INCLUDE_PSDK_WRAPPER_MODULES_TELEMETRY_HPP_