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/msgadd custom msg file
time frame_stamp # Timestamp
float32 servo_setpoint
Create
gripper_servo.cppin the pathmavros_extras/src/plugins/. This is the receiver node that listen user input and publish to pixhawk.
#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.txtat
Edit
mavros_plugins.xmlinsidemavros_extras/mavros_plugins.xml
Edit
common.xmlinsidemavlink/message_definitions/v1.0/
Inside px4
Edit
common.xmlinsideFirmware/mavlink/include/mavlink/v2.0/message_definitions/
Remove
commonandstandarddirectories fromFirmware/mavlink/include/mavlink/v2.0Generate
standardandcommondirectories usingmavlink-generatorlocated in ros pkgmavlink/pymavlink
Make uOrb message
Firmware/msg/gripper_servo.msg
Edit
CMakeList.txtinsideFirmware/msg/
Edit
mavlink_receiver.hlocated atFirmware/src/modules/mavlink/
Edit
mavlink_receiver.cpplocated atFirmware/src/modules/mavlink/
add function
Last updated
Was this helpful?