diff --git a/libraries/AP_HAL_PX4/RCOutput.cpp b/libraries/AP_HAL_PX4/RCOutput.cpp index ffdcaf8c96..9ab6b7c620 100644 --- a/libraries/AP_HAL_PX4/RCOutput.cpp +++ b/libraries/AP_HAL_PX4/RCOutput.cpp @@ -418,6 +418,12 @@ void PX4RCOutput::_arm_actuators(bool arm) } _armed.lockdown = false; _armed.force_failsafe = false; + + if (_actuator_armed_pub == nullptr) { + _actuator_armed_pub = orb_advertise(ORB_ID(actuator_armed), &_armed); + } else { + orb_publish(ORB_ID(actuator_armed), _actuator_armed_pub, &_armed); + } } void PX4RCOutput::_send_outputs(void) @@ -464,6 +470,8 @@ void PX4RCOutput::_send_outputs(void) } } if (to_send > 0) { + _arm_actuators(true); + ::write(_pwm_fd, _period, to_send*sizeof(_period[0])); } if (_max_channel > _servo_count) { diff --git a/libraries/AP_HAL_PX4/RCOutput.h b/libraries/AP_HAL_PX4/RCOutput.h index 9cf2d45e5e..732d85a4fc 100644 --- a/libraries/AP_HAL_PX4/RCOutput.h +++ b/libraries/AP_HAL_PX4/RCOutput.h @@ -3,6 +3,7 @@ #include "AP_HAL_PX4.h" #include #include +#include #define PX4_NUM_OUTPUT_CHANNELS 16 @@ -61,9 +62,10 @@ private: } _outputs[ORB_MULTI_MAX_INSTANCES] {}; actuator_armed_s _armed; - orb_advert_t _actuator_direct_pub = nullptr; - uint16_t _esc_pwm_min = 0; - uint16_t _esc_pwm_max = 0; + orb_advert_t _actuator_direct_pub; + orb_advert_t _actuator_armed_pub; + uint16_t _esc_pwm_min; + uint16_t _esc_pwm_max; void _init_alt_channels(void); void _publish_actuators(void);