12 #include <std_msgs/UInt8.h> 13 #include <mavros_msgs/MagnetometerReporter.h> 15 namespace std_plugins {
60 void handle_status(
const mavlink::mavlink_message_t *, mavlink::ardupilotmega::msg::MAG_CAL_PROGRESS &mp) {
61 auto mcs = boost::make_shared<std_msgs::UInt8>();
64 std::bitset<8> compass_calibrating = mp.cal_mask;
66 if (compass_calibrating[mp.compass_id]) {
68 if (mp.completion_pct < 95) {
69 calibration_show[mp.compass_id] =
true;
71 _rg_compass_cal_progress[mp.compass_id] = mp.completion_pct;
75 uint16_t total_percentage = 0;
76 for (
size_t i = 0; i < 8 && (compass_calibrating >> i).any(); i++) {
77 if (compass_calibrating[i]) {
78 total_percentage +=
static_cast<uint8_t
>(_rg_compass_cal_progress[i]);
82 mcs->data = total_percentage / compass_calibrating.count();
88 void handle_report(
const mavlink::mavlink_message_t *, mavlink::common::msg::MAG_CAL_REPORT &mr) {
89 if (calibration_show[mr.compass_id]) {
90 auto mcr = boost::make_shared<mavros_msgs::MagnetometerReporter>();
93 mcr->report = mr.cal_status;
94 mcr->confidence = mr.orientation_confidence;
96 calibration_show[mr.compass_id] =
false;
std::array< bool, 8 > calibration_show
HandlerInfo make_handler(const mavlink::msgid_t id, void(_C::*fn)(const mavlink::mavlink_message_t *msg, const mavconn::Framing framing))
std::string to_string(MAV_SENSOR_ORIENTATION orientation)
void publish(const boost::shared_ptr< M > &message) const
void initialize(UAS &uas_)
std::array< uint8_t, 8 > _rg_compass_cal_progress
Publisher advertise(const std::string &topic, uint32_t queue_size, bool latch=false)
void handle_report(const mavlink::mavlink_message_t *, mavlink::common::msg::MAG_CAL_REPORT &mr)
void handle_status(const mavlink::mavlink_message_t *, mavlink::ardupilotmega::msg::MAG_CAL_PROGRESS &mp)
std::vector< HandlerInfo > Subscriptions
void initialize(UAS &uas_) override
#define PLUGINLIB_EXPORT_CLASS(class_type, base_class_type)
Subscriptions get_subscriptions()