Skip to content

Commit

Permalink
Merge pull request #1606 from BV-OpenSource/master
Browse files Browse the repository at this point in the history
Add Mount angles message for communications with ardupilotmega.
  • Loading branch information
vooon committed Aug 30, 2021
2 parents c006917 + 93c2d8d commit ccda446
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 2 deletions.
2 changes: 1 addition & 1 deletion mavros_extras/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ add_library(mavros_extras
src/plugins/log_transfer.cpp
src/plugins/mag_calibration_status.cpp
src/plugins/mocap_pose_estimate.cpp
src/plugins/mount_control.cpp
src/plugins/obstacle_distance.cpp
src/plugins/odom.cpp
src/plugins/play_tune.cpp
Expand All @@ -90,7 +91,6 @@ add_library(mavros_extras
src/plugins/vision_pose_estimate.cpp
src/plugins/vision_speed_estimate.cpp
src/plugins/wheel_odometry.cpp
src/plugins/mount_control.cpp
)
add_dependencies(mavros_extras
${catkin_EXPORTED_TARGETS}
Expand Down
32 changes: 31 additions & 1 deletion mavros_extras/src/plugins/mount_control.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
#include <mavros_msgs/CommandLong.h>
#include <mavros_msgs/MountControl.h>
#include <geometry_msgs/Quaternion.h>
#include <geometry_msgs/Vector3Stamped.h>
#include <mavros_msgs/MountConfigure.h>

namespace mavros {
Expand Down Expand Up @@ -47,13 +48,15 @@ class MountControlPlugin : public plugin::PluginBase {

command_sub = mount_nh.subscribe("command", 10, &MountControlPlugin::command_cb, this);
mount_orientation_pub = mount_nh.advertise<geometry_msgs::Quaternion>("orientation", 10);
mount_status_pub = mount_nh.advertise<geometry_msgs::Vector3Stamped>("status", 10);
configure_srv = mount_nh.advertiseService("configure", &MountControlPlugin::mount_configure_cb, this);
}

Subscriptions get_subscriptions() override
{
return {
make_handler(&MountControlPlugin::handle_mount_orientation)
make_handler(&MountControlPlugin::handle_mount_orientation),
make_handler(&MountControlPlugin::handle_mount_status)
};
}

Expand All @@ -62,6 +65,7 @@ class MountControlPlugin : public plugin::PluginBase {
ros::NodeHandle mount_nh;
ros::Subscriber command_sub;
ros::Publisher mount_orientation_pub;
ros::Publisher mount_status_pub;
ros::ServiceServer configure_srv;

/**
Expand All @@ -79,6 +83,32 @@ class MountControlPlugin : public plugin::PluginBase {
mount_orientation_pub.publish(quaternion_msg);
}

/**
* @brief Publish the mount status
*
* @param msg the mavlink message
* @param ms received MountStatus msg
*/
void handle_mount_status(const mavlink::mavlink_message_t *, mavlink::ardupilotmega::msg::MOUNT_STATUS &ms)
{
geometry_msgs::Vector3Stamped publish_msg;

publish_msg.header.stamp = ros::Time::now();

publish_msg.header.frame_id = std::to_string(ms.target_component);

auto vec = Eigen::Vector3d(ms.pointing_b, ms.pointing_a, ms.pointing_c) * M_PI / 18000.0;
tf::vectorEigenToMsg(vec, publish_msg.vector);

mount_status_pub.publish(publish_msg);

// pointing_X is cdeg
auto q = ftf::quaternion_from_rpy(Eigen::Vector3d(ms.pointing_b, ms.pointing_a, ms.pointing_c) * M_PI / 18000.0);
geometry_msgs::Quaternion quaternion_msg;
tf::quaternionEigenToMsg(q, quaternion_msg);
mount_orientation_pub.publish(quaternion_msg);
}

/**
* @brief Send mount control commands to vehicle
*
Expand Down

0 comments on commit ccda446

Please sign in to comment.