Custom mavros message

Create custom mavros receiver and sender

The aim is to send signals to servo connected to pixhawk, using ROS node.

  • In mavros_msgs/msg add custom msg file

GripperServo.msg
time frame_stamp		# Timestamp 
float32 servo_setpoint
  • Create gripper_servo.cpp in the path mavros_extras/src/plugins/. This is the receiver node that listen user input and publish to pixhawk.

gripper_servo.cpp
#include <mavros/mavros_plugin.h>
#include <mavros_msgs/GripperServo.h>

namespace mavros
{
namespace extra_plugins
{
class GripperServoPlugin : public plugin::PluginBase
{
public:
    GripperServoPlugin() : PluginBase(),
                                     status_nh("~gripper_servo")
    {
    }

    void initialize(UAS &uas_)
    {
        PluginBase::initialize(uas_);

        status_sub = status_nh.subscribe("gripper_servo", 10, &GripperServoPlugin::status_cb, this);
    }

    Subscriptions get_subscriptions()
    {
        return {/* Rx disabled */};
    }

private:
    ros::NodeHandle status_nh;
    ros::Subscriber status_sub;

    /**
	 * @param req	received GripperServo msg
	 */
    void status_cb(const mavros_msgs::GripperServo::ConstPtr &req)
    {
        mavlink::common::msg::GRIPPER_SERVO gripper{};

        gripper.servo_setpoint = req->servo_setpoint;
        
        UAS_FCU(m_uas)->send_message_ignore_drop(gripper);
    }
};
} // namespace extra_plugins
} // namespace mavros

#include <pluginlib/class_list_macros.h>
PLUGINLIB_EXPORT_CLASS(mavros::extra_plugins::GripperServoPlugin, mavros::plugin::PluginBase)
  • Edit CMakeList.txt at

  • Edit mavros_plugins.xml inside mavros_extras/mavros_plugins.xml

  • Edit common.xml inside mavlink/message_definitions/v1.0/

Inside px4

  • Edit common.xml inside Firmware/mavlink/include/mavlink/v2.0/message_definitions/

  • Remove common and standard directories from Firmware/mavlink/include/mavlink/v2.0

  • Generate standard and common directories using mavlink-generator located in ros pkgmavlink/pymavlink

  • Make uOrb message Firmware/msg/gripper_servo.msg

  1. Edit CMakeList.txt inside Firmware/msg/

  1. Edit mavlink_receiver.h located at Firmware/src/modules/mavlink/

  1. Edit mavlink_receiver.cpp located at Firmware/src/modules/mavlink/

add function

Last updated

Was this helpful?