64 static constexpr auto PORT_KEY_COMMAND =
"command";
65 static constexpr auto PORT_KEY_PARAM1 =
"param1";
66 static constexpr auto PORT_KEY_PARAM2 =
"param2";
67 static constexpr auto PORT_KEY_PARAM3 =
"param3";
68 static constexpr auto PORT_KEY_PARAM4 =
"param4";
69 static constexpr auto PORT_KEY_PARAM5 =
"param5";
70 static constexpr auto PORT_KEY_PARAM6 =
"param6";
71 static constexpr auto PORT_KEY_PARAM7 =
"param7";
72 static constexpr auto PORT_KEY_CONFIRMATION =
"confirmation";
73 static constexpr auto PORT_KEY_TARGET_SYSTEM =
"target_system";
74 static constexpr auto PORT_KEY_TARGET_COMPONENT =
"target_component";
76 SendVehicleCommand(
const std::string & instance_name,
const Config & config,
const Context & context);
78 ~SendVehicleCommand()
override;
80 static BT::PortsList providedPorts();
82 BT::NodeStatus tick()
override;
92 virtual bool setMessage(px4_msgs::msg::VehicleCommand & msg);
111 struct AckSubscription
113 using Ack = px4_msgs::msg::VehicleCommandAck;
116 rclcpp::Node::SharedPtr node, rclcpp::CallbackGroup::SharedPtr group,
const std::string & topic_name);
118 void addListener(
const void * owner, std::function<
void(
const Ack::SharedPtr &)> callback);
119 void removeListener(
const void * owner);
120 void broadcast(
const Ack::SharedPtr & msg);
122 rclcpp::Subscription<Ack>::SharedPtr subscription;
123 std::vector<std::pair<
const void *, std::function<void(
const Ack::SharedPtr &)>>> listeners;
134 std::string resolveCommandTopicName();
137 rclcpp::Publisher<px4_msgs::msg::VehicleCommand>::SharedPtr command_pub_;
139 std::shared_ptr<AckSubscription> ack_sub_;
142 px4_msgs::msg::VehicleCommand tx_msg_;
144 std::shared_ptr<px4_msgs::msg::VehicleCommandAck> last_ack_;
145 bool waiting_for_ack_ =
false;
146 rclcpp::Time send_time_;
147 double ack_timeout_s_;