31 using CompletedCallback = std::function<void(
Result)>;
42 Settings& activate(
Activation activation_option)
44 activation = activation_option;
49 enum class DeactivateReason { FailsafeActivated, Other };
51 ModeExecutorBase(
const Settings& settings, ModeBase& owned_mode);
52 ModeExecutorBase(
const ModeExecutorBase&) =
delete;
53 virtual ~ModeExecutorBase();
82 float param3 = NAN,
float param4 = NAN,
float param5 = NAN,
83 float param6 = NAN,
float param7 = NAN);
102 void takeoff(
const CompletedCallback& on_completed,
float altitude = NAN,
float heading = NAN);
103 void land(
const CompletedCallback& on_completed);
104 void rtl(
const CompletedCallback& on_completed);
106 void arm(
const CompletedCallback& on_completed,
bool run_preflight_checks =
true);
107 void disarm(
const CompletedCallback& on_completed,
bool forced =
false);
108 void waitReadyToArm(
const CompletedCallback& on_completed);
109 void waitUntilDisarmed(
const CompletedCallback& on_completed);
111 bool isInCharge()
const {
return _is_in_charge; }
113 bool isArmed()
const {
return _is_armed; }
115 ModeBase& ownedMode() {
return _owned_mode; }
119 rclcpp::Node& node() {
return _node; }
121 ConfigOverrides& configOverrides() {
return _config_overrides; }
138 bool controlAutoSetHome(
bool enabled);
141 void setSkipMessageCompatibilityCheck() { _skip_message_compatibility_check =
true; }
142 void overrideRegistration(
const std::shared_ptr<Registration>& registration);
145 class ScheduledMode {
147 ScheduledMode(rclcpp::Node& node,
const std::string& topic_namespace_prefix);
149 bool active()
const {
return _mode_id != ModeBase::kModeIDInvalid; }
150 void activate(
ModeBase::ModeID mode_id,
const CompletedCallback& on_completed);
155 void reset() { _mode_id = ModeBase::kModeIDInvalid; }
158 CompletedCallback _on_completed_callback;
159 rclcpp::Subscription<px4_msgs::msg::ModeCompleted>::SharedPtr _mode_completed_sub;
162 class WaitForVehicleStatusCondition {
164 using RunCheckCallback =
165 std::function<bool(
const px4_msgs::msg::VehicleStatus::UniquePtr& msg)>;
166 WaitForVehicleStatusCondition() =
default;
168 bool active()
const {
return _on_completed_callback !=
nullptr; }
169 void update(
const px4_msgs::msg::VehicleStatus::UniquePtr& msg);
171 void activate(
const RunCheckCallback& run_check_callback,
172 const CompletedCallback& on_completed);
176 CompletedCallback _on_completed_callback;
177 RunCheckCallback _run_check_callback;
182 void callOnActivate();
183 void callOnDeactivate(DeactivateReason reason);
185 void vehicleStatusUpdated(
const px4_msgs::msg::VehicleStatus::UniquePtr& msg);
188 const ModeExecutorBase::CompletedCallback& on_completed,
bool forced =
false);
191 const std::string _topic_namespace_prefix;
192 const Settings _settings;
193 bool _skip_message_compatibility_check{
false};
194 ModeBase& _owned_mode;
196 std::shared_ptr<Registration> _registration;
198 rclcpp::Publisher<px4_msgs::msg::VehicleCommand>::SharedPtr _vehicle_command_pub;
200 SharedSubscriptionCallbackInstance _vehicle_status_sub_cb;
202 ScheduledMode _current_scheduled_mode;
203 WaitForVehicleStatusCondition _current_wait_vehicle_status;
205 bool _is_in_charge{
false};
206 bool _is_armed{
false};
207 bool _was_never_activated{
true};
209 uint8_t _prev_failsafe_defer_state{px4_msgs::msg::VehicleStatus::FAILSAFE_DEFER_STATE_DISABLED};
211 ConfigOverrides _config_overrides;
virtual Result sendCommandSync(uint32_t command, float param1=NAN, float param2=NAN, float param3=NAN, float param4=NAN, float param5=NAN, float param6=NAN, float param7=NAN)