diff --git a/src/modules/rover_pos_control/RoverPositionControl.cpp b/src/modules/rover_pos_control/RoverPositionControl.cpp index fb808604dc..a016bf69b5 100644 --- a/src/modules/rover_pos_control/RoverPositionControl.cpp +++ b/src/modules/rover_pos_control/RoverPositionControl.cpp @@ -462,12 +462,7 @@ RoverPositionControl::run() pos_ctrl_status.timestamp = hrt_absolute_time(); - if (_pos_ctrl_status_pub != nullptr) { - orb_publish(ORB_ID(position_controller_status), _pos_ctrl_status_pub, &pos_ctrl_status); - - } else { - _pos_ctrl_status_pub = orb_advertise(ORB_ID(position_controller_status), &pos_ctrl_status); - } + _pos_ctrl_status_pub.publish(pos_ctrl_status); } @@ -518,13 +513,12 @@ RoverPositionControl::run() //orb_copy(ORB_ID(vehicle_attitude), _vehicle_attitude_sub, &_vehicle_att); _act_controls.timestamp = hrt_absolute_time(); - if (_actuator_controls_pub != nullptr) { - //PX4_INFO("Publishing actuator from pos control"); - orb_publish(ORB_ID(actuator_controls_0), _actuator_controls_pub, &_act_controls); - - } else { - - _actuator_controls_pub = orb_advertise(ORB_ID(actuator_controls_0), &_act_controls); + /* Only publish if any of the proper modes are enabled */ + if (_control_mode.flag_control_velocity_enabled || + _control_mode.flag_control_attitude_enabled || + manual_mode) { + /* publish the actuator controls */ + _actuator_controls_pub.publish(_act_controls); } } diff --git a/src/modules/rover_pos_control/RoverPositionControl.hpp b/src/modules/rover_pos_control/RoverPositionControl.hpp index 8543089844..7b5b1de2a6 100644 --- a/src/modules/rover_pos_control/RoverPositionControl.hpp +++ b/src/modules/rover_pos_control/RoverPositionControl.hpp @@ -56,6 +56,7 @@ #include #include #include +#include #include #include #include @@ -98,29 +99,29 @@ public: void run() override; private: - orb_advert_t _pos_ctrl_status_pub{nullptr}; /**< navigation capabilities publication */ - orb_advert_t _actuator_controls_pub{nullptr}; /**< actuator controls publication */ + uORB::Publication _pos_ctrl_status_pub{ORB_ID(position_controller_status)}; + uORB::Publication _actuator_controls_pub{ORB_ID(actuator_controls_0)}; - int _control_mode_sub{-1}; /**< control mode subscription */ + int _control_mode_sub{-1}; /**< control mode subscription */ int _global_pos_sub{-1}; int _local_pos_sub{-1}; int _manual_control_sub{-1}; /**< notification of manual control updates */ int _pos_sp_triplet_sub{-1}; - int _att_sp_sub{-1}; - int _vehicle_attitude_sub{-1}; + int _att_sp_sub{-1}; + int _vehicle_attitude_sub{-1}; int _sensor_combined_sub{-1}; uORB::Subscription _parameter_update_sub{ORB_ID(parameter_update)}; - manual_control_setpoint_s _manual{}; /**< r/c channel data */ + manual_control_setpoint_s _manual{}; /**< r/c channel data */ position_setpoint_triplet_s _pos_sp_triplet{}; /**< triplet of mission items */ vehicle_attitude_setpoint_s _att_sp{}; /**< attitude setpoint > */ vehicle_control_mode_s _control_mode{}; /**< control mode */ vehicle_global_position_s _global_pos{}; /**< global vehicle position */ vehicle_local_position_s _local_pos{}; /**< global vehicle position */ - actuator_controls_s _act_controls{}; /**< direct control of actuators */ - vehicle_attitude_s _vehicle_att{}; - sensor_combined_s _sensor_combined{}; + actuator_controls_s _act_controls{}; /**< direct control of actuators */ + vehicle_attitude_s _vehicle_att{}; + sensor_combined_s _sensor_combined{}; SubscriptionData _vehicle_acceleration_sub{ORB_ID(vehicle_acceleration)};