16 #include "nav2_behavior_tree/behavior_tree_engine.hpp"
22 #include "rclcpp/rclcpp.hpp"
23 #include "behaviortree_cpp_v3/utils/shared_library.h"
25 namespace nav2_behavior_tree
29 const std::vector<std::string> & plugin_libraries)
31 BT::SharedLibrary loader;
32 for (
const auto & p : plugin_libraries) {
33 factory_.registerFromPlugin(loader.getOSName(p));
40 std::function<
void()> onLoop,
41 std::function<
bool()> cancelRequested,
42 std::chrono::milliseconds loopTimeout)
44 rclcpp::WallRate loopRate(loopTimeout);
45 BT::NodeStatus result = BT::NodeStatus::RUNNING;
49 while (rclcpp::ok() && result == BT::NodeStatus::RUNNING) {
50 if (cancelRequested()) {
51 tree->rootNode()->halt();
52 return BtStatus::CANCELED;
55 result = tree->tickRoot();
59 if (!loopRate.sleep()) {
61 rclcpp::get_logger(
"BehaviorTreeEngine"),
62 "Behavior Tree tick rate %0.2f was exceeded!",
63 1.0 / (loopRate.period().count() * 1.0e-9));
66 }
catch (
const std::exception & ex) {
68 rclcpp::get_logger(
"BehaviorTreeEngine"),
69 "Behavior tree threw exception: %s. Exiting with failure.", ex.what());
70 return BtStatus::FAILED;
73 return (result == BT::NodeStatus::SUCCESS) ? BtStatus::SUCCEEDED : BtStatus::FAILED;
78 const std::string & xml_string,
79 BT::Blackboard::Ptr blackboard)
81 return factory_.createTreeFromText(xml_string, blackboard);
86 const std::string & file_path,
87 BT::Blackboard::Ptr blackboard)
89 return factory_.createTreeFromFile(file_path, blackboard);
104 auto visitor = [](BT::TreeNode * node) {
105 if (node->status() == BT::NodeStatus::RUNNING) {
109 BT::applyRecursiveVisitor(root_node, visitor);
BehaviorTreeEngine(const std::vector< std::string > &plugin_libraries)
A constructor for nav2_behavior_tree::BehaviorTreeEngine.
BT::Tree createTreeFromFile(const std::string &file_path, BT::Blackboard::Ptr blackboard)
Function to create a BT from an XML file.
void haltAllActions(BT::TreeNode *root_node)
Function to explicitly reset all BT nodes to initial state.
BT::Tree createTreeFromText(const std::string &xml_string, BT::Blackboard::Ptr blackboard)
Function to create a BT from a XML string.
BtStatus run(BT::Tree *tree, std::function< void()> onLoop, std::function< bool()> cancelRequested, std::chrono::milliseconds loopTimeout=std::chrono::milliseconds(10))
Function to execute a BT at a specific rate.