Skip to content

Script error with boolean operator on subtree input #1122

@nyibbang

Description

@nyibbang

Describe the bug

Hello,

It seems like subtrees inputs that are boolean are interpreted as strings in the subtree scripts.

How to Reproduce

With this code :

#include <behaviortree_cpp/behavior_tree.h>
#include <behaviortree_cpp/bt_factory.h>
#include <print>

constexpr auto print_hello(const BT::TreeNode &node) {
  std::println("hello world");
  return BT::NodeStatus::SUCCESS;
}

int main(int argc, char *argv[]) {
  auto tree = [] {
    BT::BehaviorTreeFactory factory;
    factory.registerSimpleAction("PrintHello", print_hello);
    factory.registerBehaviorTreeFromFile("./scripting.xml");
    return factory.createTree("Main");
  }();

  auto bb = tree.rootBlackboard();

  tree.tickWhileRunning();

  return 0;
}

And this tree :

<?xml version="1.0" encoding="UTF-8"?>
<root BTCPP_format="4">
  <BehaviorTree ID="Main">
    <SubTree ID="MaybePrintHello"
             do_print="true"/>
  </BehaviorTree>

  <BehaviorTree ID="MaybePrintHello">
    <PrintHello _skipIf="!do_print"/>
  </BehaviorTree>

  <!-- Description of Node Models (used by Groot) -->
  <TreeNodesModel>
    <SubTree ID="MaybePrintHello"
             editable="true">
      <input_port name="do_print"
                  type="bool"/>
    </SubTree>
    <Action ID="PrintHello"
            editable="true"/>
  </TreeNodesModel>
</root>

We get the following exception :

Exception in node 'MaybePrintHello::1' [SubTree]: Error in script [!do_print]
Invalid operator for std::string

I tried with do_print == true and I don't get the exception, but "hello world" is not printed.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions