40 std::shared_ptr<px4_msgs::msg::VehicleStatus> last_msg_;
44 const std::string & instance_name,
const BT::NodeConfig & config,
51 createSubscriber(
"fmu/out/vehicle_status" + px4_ros2::getMessageNameVersion<px4_msgs::msg::VehicleStatus>());
54 static BT::PortsList providedPorts()
58 INPUT_KEY_ARMING_STATE,
"Expected PX4 arming state the vehicle should be in (1 = disarmed, 2 = armed)."),
62 BT::NodeStatus onTick(
const std::shared_ptr<px4_msgs::msg::VehicleStatus> & last_msg_ptr)
final
64 if (last_msg_ptr) last_msg_ = last_msg_ptr;
67 if (!last_msg_)
return BT::NodeStatus::FAILURE;
69 const BT::Expected<int> expected_arming_state = getInput<int>(INPUT_KEY_ARMING_STATE);
70 if (!expected_arming_state) {
72 logger_,
"%s - Missing required input '%s': %s", context_.getFullyQualifiedTreeNodeName(
this).c_str(),
73 INPUT_KEY_ARMING_STATE, expected_arming_state.error().c_str());
74 return BT::NodeStatus::FAILURE;
77 return last_msg_->arming_state ==
static_cast<uint8_t
>(expected_arming_state.value()) ? BT::NodeStatus::SUCCESS
78 : BT::NodeStatus::FAILURE;
Additional parameters specific to ROS 2 determined at runtime by TreeBuilder.