esc_telemetry.cpp
Go to the documentation of this file.
1 
9 /*
10  * Copyright 2021 Braedon O'Meara <braedon@rizse.io>.
11  *
12  * This file is part of the mavros package and subject to the license terms
13  * in the top-level LICENSE file of the mavros repository.
14  * https://github.com/mavlink/mavros/tree/master/LICENSE.md
15  */
16 
17 #include <mavros/mavros_plugin.h>
18 #include <mavros_msgs/ESCTelemetry.h>
19 
20 namespace mavros
21 {
22 namespace extra_plugins
23 {
30 {
31 public:
33  nh("~")
34  {}
35 
36  void initialize(UAS &uas_) override
37  {
39 
40  esc_telemetry_pub = nh.advertise<mavros_msgs::ESCTelemetry>("esc_telemetry", 10);
41 
43  }
44 
46  {
47  return {
51  };
52  }
53 
54 private:
55  using lock_guard = std::lock_guard<std::mutex>;
57 
59 
61  mavros_msgs::ESCTelemetry _esc_telemetry;
62 
63  template <typename msgT>
64  void handle_esc_telemetry(const mavlink::mavlink_message_t *msg, msgT &et, size_t offset = 0)
65  {
66  lock_guard lock(mutex);
67 
68  size_t requred_size = offset + et.temperature.size();
69  if (_esc_telemetry.esc_telemetry.size() < requred_size) {
70  _esc_telemetry.esc_telemetry.resize(requred_size);
71  }
72 
73  auto stamp = ros::Time::now();
74 
75  _esc_telemetry.header.stamp = stamp;
76  for (size_t i = 0; i < et.temperature.size(); i++) {
77  auto &p = _esc_telemetry.esc_telemetry.at(offset + i);
78 
79  p.header.stamp = stamp;
80  p.temperature = et.temperature[i];
81  p.voltage = et.voltage[i] / 100.0f; // centiV -> V
82  p.current = et.current[i] / 100.0f; // centiA -> A
83  p.totalcurrent = et.totalcurrent[i] / 1000.0f; // mAh -> Ah
84  p.rpm = et.rpm[i];
85  p.count = et.count[i];
86  }
87 
88  esc_telemetry_pub.publish(_esc_telemetry);
89  }
90 
91  void handle_esc_telemetry_1_to_4(const mavlink::mavlink_message_t *msg, mavlink::ardupilotmega::msg::ESC_TELEMETRY_1_TO_4 &esc_telemetry)
92  {
93  handle_esc_telemetry(msg, esc_telemetry, 0);
94  }
95 
96  void handle_esc_telemetry_5_to_8(const mavlink::mavlink_message_t *msg, mavlink::ardupilotmega::msg::ESC_TELEMETRY_5_TO_8 &esc_telemetry)
97  {
98  handle_esc_telemetry(msg, esc_telemetry, 4);
99  }
100 
101  void handle_esc_telemetry_9_to_12(const mavlink::mavlink_message_t *msg, mavlink::ardupilotmega::msg::ESC_TELEMETRY_9_TO_12 &esc_telemetry)
102  {
103  handle_esc_telemetry(msg, esc_telemetry, 8);
104  }
105 
106  void connection_cb(bool connected) override
107  {
108  lock_guard lock(mutex);
109 
110  _esc_telemetry.esc_telemetry.clear();
111  }
112 };
113 } // namespace extra_plugins
114 } // namespace mavros
115 
mavros_msgs::ESCTelemetry _esc_telemetry
std::lock_guard< std::mutex > lock_guard
HandlerInfo make_handler(const mavlink::msgid_t id, void(_C::*fn)(const mavlink::mavlink_message_t *msg, const mavconn::Framing framing))
uint32_t offset
void handle_esc_telemetry(const mavlink::mavlink_message_t *msg, msgT &et, size_t offset=0)
void handle_esc_telemetry_5_to_8(const mavlink::mavlink_message_t *msg, mavlink::ardupilotmega::msg::ESC_TELEMETRY_5_TO_8 &esc_telemetry)
void handle_esc_telemetry_1_to_4(const mavlink::mavlink_message_t *msg, mavlink::ardupilotmega::msg::ESC_TELEMETRY_1_TO_4 &esc_telemetry)
void publish(const boost::shared_ptr< M > &message) const
void connection_cb(bool connected) override
std::atomic< bool > connected
Publisher advertise(const std::string &topic, uint32_t queue_size, bool latch=false)
std::vector< HandlerInfo > Subscriptions
static Time now()
Subscriptions get_subscriptions() override
void initialize(UAS &uas_) override
void handle_esc_telemetry_9_to_12(const mavlink::mavlink_message_t *msg, mavlink::ardupilotmega::msg::ESC_TELEMETRY_9_TO_12 &esc_telemetry)
#define PLUGINLIB_EXPORT_CLASS(class_type, base_class_type)
std::recursive_mutex mutex


mavros_extras
Author(s): Vladimir Ermakov , Amilcar Lucas
autogenerated on Tue Jun 13 2023 02:17:59