Go to the documentation of this file.00001
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include <mavros/mavros_plugin.h>
00018 #include <pluginlib/class_list_macros.h>
00019
00020 #include <mavros_msgs/Altitude.h>
00021
00022 namespace mavplugin {
00026 class AltitudePlugin : public MavRosPlugin {
00027 public:
00028 AltitudePlugin() :
00029 nh("~"),
00030 uas(nullptr)
00031 { }
00032
00036 void initialize(UAS &uas_)
00037 {
00038 uas = &uas_;
00039 nh.param<std::string>("frame_id", frame_id, "map");
00040 altitude_pub = nh.advertise<mavros_msgs::Altitude>("altitude", 10);
00041 }
00042
00043 const message_map get_rx_handlers() {
00044 return {
00045 MESSAGE_HANDLER(MAVLINK_MSG_ID_ALTITUDE, &AltitudePlugin::handle_altitude),
00046 };
00047 }
00048
00049 private:
00050 ros::NodeHandle nh;
00051 UAS *uas;
00052 std::string frame_id;
00053
00054 ros::Publisher altitude_pub;
00055
00056 void handle_altitude(const mavlink_message_t *msg, uint8_t sysid, uint8_t compid) {
00057 mavlink_altitude_t altitude;
00058 mavlink_msg_altitude_decode(msg, &altitude);
00059
00060 auto ros_msg = boost::make_shared<mavros_msgs::Altitude>();
00061 ros_msg->header = uas->synchronized_header(frame_id, altitude.time_usec);
00062
00063 ros_msg->monotonic = altitude.altitude_monotonic;
00064 ros_msg->amsl = altitude.altitude_amsl;
00065 ros_msg->local = altitude.altitude_local;
00066 ros_msg->relative = altitude.altitude_relative;
00067 ros_msg->terrain = altitude.altitude_terrain;
00068 ros_msg->bottom_clearance = altitude.bottom_clearance;
00069
00070 altitude_pub.publish(ros_msg);
00071 }
00072
00073 };
00074 };
00075
00076 PLUGINLIB_EXPORT_CLASS(mavplugin::AltitudePlugin, mavplugin::MavRosPlugin)
00077