31 TreeFromResourceBuildHandler(rclcpp::Node::SharedPtr ros_node_ptr, NodeLoader::SharedPtr tree_node_loader_ptr)
32 :
TreeBuildHandler(
"tree_from_resource", ros_node_ptr, tree_node_loader_ptr),
33 resource_doc_(TreeDocument::BTCPP_FORMAT_DEFAULT_VERSION, tree_node_loader_ptr)
38 const std::string & build_request,
const std::string & entry_point,
39 const NodeManifest & )
override final
41 TreeResource::Identity resource_identity(build_request);
42 TreeResource resource(resource_identity);
45 resource_doc_.reset().mergeResource(resource,
false);
47 if (
const BT::Result res = resource_doc_.verify(); !res) {
48 RCLCPP_WARN(
logger_,
"Tree verification failed: %s", res.error().c_str());
54 if (entry_point.empty()) {
60 "Cannot determine root tree from tree resource identity '%s': You must either provide an identity that "
61 "includes a tree name or specify the entry_point argument with a non empty string.",
62 resource_identity.
str().c_str());
68 name = entry_point_.root_tree_name;
69 }
catch (
const std::exception & e) {
70 RCLCPP_WARN(
logger_,
"Cannot determine root tree from entry point: %s", e.what());
73 if (!resource_doc_.hasTreeName(name)) {
75 logger_,
"The tree resource '%s' does not contain a tree named '%s' as specified in the entry point.",
76 resource_identity.
str().c_str(), name.c_str());
80 resource_doc_.setRootTreeName(name);
90 resource_doc_.
reset();
93 for (
const auto & [key, value] : entry_point_.inital_blackboard) {
Decoded entry point information for low-level tree building.